Instrumentsの基本 OSSignposts カスタムInstrumentsの作成 活用事例 CLIPSによるModelerの自作
Sample Code https://github.com/Ridwy/iosdc19-custom-instruments
ߦ ઍय़ʢͳΊ͖ ͪΔʣTwitter, Qiita, GitHub @RidwyגࣜձࣾαΠόʔΤʔδΣϯτΧελϜInstrumentsͰΞϓϦΛϐΧϐΧʹʂiOSDC Japan 2019Sep. 7
View Slide
Instruments
Agenda• Instrumentsͷجຊ• OSSignposts• ΧελϜInstrumentsͷ࡞• ׆༻ࣄྫ• CLIPSʹΑΔModelerͷࣗ࡞
ύϑΥʔϚϯεͳͲͷ࣭վળʹཱ࣮ͭߦ࣌ʹ͞·͟·ͳใΛऩू͠ੳɾՄࢹԽͯ͘͠ΕΔπʔϧ
XcodeʹΈࠐ·Ε͍ͯΔܭଌରʹΞϓϦ͕ηοτ͞Εͨঢ়ଶͰىಈProduct > Profile
୯ಠͰىಈͰ͖Δ
جຊͷ͍ํ
ςϯϓϨʔτΛબͯ͠Choose !
ϝΠϯը໘
Record !
݁ՌΛݟͯίʔυΛվળ
Instruments ͱ͍͏୯ޠ2ͭͷҙຯͰΘΕ͍ͯ·͢͜͜Ͱͪΐͬͱҙ
Instruments.app
֤छͷੳΛߦ͏πʔϧDrag & DropͰՃʂInstrumentsϥΠϒϥϦ
ը໘ߏ
ը໘ߏTrack AreaDetail AreaExtendedDetail AreaTrack (=࣌ܥྻͷάϥϑ) ͕ฒͿ
Instrument Trackgraphlanelaneάϥϑ͕ෳ͋Δͱ͖͜͜ͰΓସ͑
LeaksStandard ςϯϓϨʔτ ❌ϝϞϦ༻ྔ͕ӈݞ্͕Γ❌ϦʔΫʂ
Time ProfilerStandard ςϯϓϨʔτ CPU༻ΛՄࢹԽ࣌ؒͷ͔͔ΔؔͷಛఆʹApplication statusදࣔ͞ΕΔBackgroundதͷڍಈ֬ೝ͍͢͠
ίΞΛޮΑ͍͑ͯ͘Δ͔ʁؔͷ࣮ߦʹ͔͔ͬͨ࣌ؒ
AVPlayerItemOutputPullDelegate outputSequenceWasFlushed(_:)ಈըͷը͕Ͱ͖ͨΒݺΕΔ = ܁Γฦ࣮͠ߦ͞ΕΔՕॴ[AVVideoAsset minFrameDuration]1ϑϨʔϜ͕Կඵ͔1ճ͋ͨΓେͨ͜͠ͱͳ͍͕ਖੵͰҙ֎ͱ͕͔͔͍࣌ؒͬͯΔ→ ϧʔϓͷ֎ʹग़ͦ͏ʂ
Energy LogStandard ςϯϓϨʔτ ֤ϋʔυΣΞͷঢ়ଶΧλϩάతͳςϯϓϨʔτʁ
ΧελϜςϯϓϨʔτݱࡏͷΈ߹ΘͤΛΧελϜςϯϓϨʔτͱͯ͠ॻ͖ग़ͤΔHoge.tracetemplateFile > Save As Template…อଘॴ~/Library/Application Support/Instruments/Templates͜͜ʹஔ͘ͱςϯϓϨʔτબը໘ʹݱΕΔμϒϧΫϦοΫͰىಈ
ϐΧϐΧʹ͠Α͏ʂ جຊฤ ͜͜·Ͱ
ԿΛ͚ͨ࣌ͩͬ͠…ʁʁͲΜͳૢ࡞Λͯ͠ɺը໘Ͳ͏͔ͩͬͨ?ޙ͔ΒݟΔͱ…
Command Line࣮ߦޙ͔Β݁ՌΛΈΔέʔε ̍$instruments -t "Allocations" -l 10000 -D SaveFileName.trace PathToYourAppςϯϓϨʔτ ه࣌ؒ(ϛϦඵ)อଘઌ ଌఆର
Deferred Recording Modeޙ͔Β݁ՌΛΈΔέʔε ̎Instrumentsࣗମͷಈ࡞ʹΑΔӨڹΛ࠷ݶʹ͑ΔͨΊੳΛԆ࣮ߦͰ͖Δor File > Recording Options…
OSSignpostsʮίʔυ͕ԿΛ͍ͯ͠Δॴ͔ʯΛInstrumentsʹ͑Α͏
Pointos_signpost(.event, log: logHandle, name: "Seek","to: %f", t)os_signpost()ΛίʔυʹຒΊࠐΉԿ͕ൃੜͨ͠ͷ͔ʁΛૹΔ
let spid = OSSignpostID(log: logHandle)os_signpost(.begin, log: logHandle, name: "Scene Detection”,signpostID: spid, "url: %{public}s", urlString)os_signpost(.end, log: logHandle, name: "Scene Detection”,signpostID: spid, "count: %d", sceneCount)detector.start(url: url) {}// ඇಉظॲཧ• .beginͱ.endͰғΉ• ରԠؔಉ͡OSSignpostIDΛ͢͜ͱͰ୲อIntervalos_signpost()ΛίʔυʹຒΊࠐΉ
ϨίʔσΟϯάதͰͳ͍ͱ͖ͷίʔυͷ࣮ߦʹΠϯύΫτΛ༩͑ͳ͍Α͏ʹҙos_signpost(.event, log: logHandle, name: “Seek”,"to: %f", marker.startTime.seconds)NG͕͜͜ධՁ͞Εͯ͠·͏if OSLogHandle.pointsOfInterest.signpostsEnabled {let seekTime = marker.startTime.secondsos_signpost(.event, log: logHandle, name: “Seek",“to: %f", seekTime)}// ϨίʔσΟϯάதͷΈ࣮ߦ͞ΕΔOK
ϝοηʔδදࣔ͞ΕΔInstrument ͷ os_signpost Points of Interest ʹදࣔ͞ΕΔ
• άϥϑͷ৭, Ϧετͷ༰, etc.• Signpostsڞ௨ͷϦιʔεͳͷͰɺ͕ࣗՃͨ͠ͷ Ҏ֎ग़ͯ͘Δ͖ͬ͞Ճͨ͠ͷɺͲΕ?͍Ζ͍Ζɺݟͨ͘͘͢͠ͳͬͯ͘Δશ෦੨͍…
ΧελϜInstruments
Instruments ArchitectureData Stream Table Modeler Table Standard UISignposts, ktraceͳͲͷσʔλͷιʔεData StreamTable σʔλͷೖΕɼܕεΩʔϚͰఆٛModeler ೖྗσʔλΛධՁͯ͠ग़ྗσʔλΛੜStandard UI InstrumentsΞϓϦͷUI
Instruments ArchitectureDynamic Track-wide Binding1. InstrumentsʹඞཁͳςʔϒϧΛ༻ҙ2.ͦͷςʔϒϧͷεΩʔϚͷσʔλΛੜͰ͖Δ Modeler / Data StreamΛ୳ͯ͠όΠϯσΟϯάޮԽͷͨΊɺಉ͡༰ͷςʔϒϧڞ༗͢Δ
ΧελϜInstrumentsΛ࡞ΔInstrumentsͱඞཁͳModeler, εΩʔϚͳͲΛؚΉ ύοέʔδΛ࡞Δ=
࡞खॱ Xcode Ͱ File > New > Project…macOSͷ Instruments Package Λબ
instrpkgϑΝΠϧʹXMLͰ εΩʔϚModeler, InstrumentsͳͲΛهड़Snippet͕ॆ࣮ʂ
• Run → σόοάϞʔυͰInstruments͕ىಈ• Archive → ༻ύοέʔδΛੜActionLogs.instrdstར༻࣌͜ΕΛμϒϧΫϦοΫͯ͠Πϯετʔϧ
ΠϯετʔϧࡁΈͷύοέʔδڥઃఆͷPackagesλϒͰ֬ೝͰ͖Δ
XMLཁૉͷϦϑΝϨϯεInstruments Developer HelpPackage Definition ReferenceEngineering TypeʢΧϥϜͷσʔλछผʣͷϦετͪ͜Βʂ
εΩʔϚεΩʔϚInstruments Packageͷߏྫ
εΩʔϚΛهड़͢ΔͨΊͷXMLཁૉXML ElementAutomaticModelerMemo ○ ○ Xcode 11~ ○Automatic Modeler = ModelerΛࣗಈੜͯ͘͠ΕΔػೳos_signpostos_log͔Βఆٛ͞ΕͨεΩʔϚʹมʂ
εΩʔϚ ҰཡInstrument > Instrument Inspector Schemasλϒ100+ Built-in Schemas !
طଘεΩʔϚͷར༻ํ๏os-signpostඞཁͳΒBuild SettingsͰύοέʔδΛϦϯΫ
jp.co.chiharu-nameki.ScenePlayerBehaviorScenePlayerBehaviorChiharu Namekios-signpostscene-detectionScene Detection"jp.co.chiharu-nameki.ScenePlayer""Behavior""Scene Detection""url: " ?url"count: " ?counturlVideo URLstring?urlscene-countScene Countuint32?countresult-colorColorevent-concept(if (= ?count 0) then "Red" else "Green")jp.co.chiharu-nameki.ScenePlayerBehavior.ScenePlayerBehaviorScenePlayer BehaviorBehaviorVisualize what's happen in ScenePlayer appPoints of Interestuser-actionsos-signpostsubsystemjp.co.chiharu-nameki.ScenePlayercategoryUserActionscene-detectionsscene-detectionScenePlayer BehaviorUser Actionsuser-actionsnameScene Detectionscene-detectionsurlresult-colorUser Actionsuser-actionstimenamemessageScene Detectionscene-detectionsstartdurationurlscene-countScenePlayerBehavior.tracetemplate←116ߦScenePlayerBehavior.instrpkg
API௨৴ͷՄࢹԽϓϩμΫτͰͷ׆༻ࣄྫ ̍ޮͷѱ͍ϦΫΤετͷํΛ͍ͯ͠ͳ͍͔ʁ
Ϣʔβʔͷߦಈϩάͷ࣮֬ೝϓϩμΫτͰͷ׆༻ࣄྫ ̎ՄࢹԽػೳʹணλΠϛϯά༰͕ਖ਼͍͔͠νΣοΫ
ͬͱݡ͘͠Α͏ʂΧελϜModeler
A Tool for Building Expert Systemswww.clipsrules.net
Expert SystemઐՈͷஅೳྗΛΤϛϡϨʔτ͢ΔͷࣗಈిԠɺੲͳ͕ΒͷAIʢ͍ΘΏΔਓແʣͳͲʹԠ༻ൃੜͨ͠ࣄ࣮ʢfactʣΛϧʔϧʹैͬͯॲཧWorking memoryfactf-2Rule BRule Afactf-1factf-3
CLIPSࣜ()ͰғΉ ( ࣜ )ม ?hogeԋࢉࢠલஔ͖(+ ?a ?b)(> ?t1 ?t2)factૢ࡞; Ճ(assert hello); আ(retract ?hoge); มߋ(modify ?hoge (fuga 123))
ϧʔϧΛఆٛ(defrule rule1(car_problem (name ignition_key) (status on))(car_problem (name engine) (status wont_start))=>(assert (car_problem (name starter) (status faulty))))(pattern 1)(pattern 2)…(pattern N)(action 1)…(action M)=>શͯͷύλʔϯʹϚονͨ͠ΒΞΫγϣϯΛ࣮ߦ
۩ମྫߦಈϩάͷ࣮ϛεΛݕͤ͞Δ• λοϓͷϩάʹPage IDʢͲͷը໘Ͱߦͳ͔ͬͨʣͷใؚ͕·ΕΔ• Page IDදࣔதͷը໘ͱಉ͡Ͱ͋Δ͖
ཁૉʹೖग़ྗͷεΩʔϚͱCLIPSͷϑΝΠϧͷύεΛهड़
page-id-validator.clp શจϧʔϧΛهड़
ݕग़͞Εͨʂ
Recap• Instrumentsͷجຊ• OSSignposts• ΧελϜInstrumentsͷ࡞• ׆༻ࣄྫ• CLIPSʹΑΔModelerͷࣗ࡞
Sample Codehttps://github.com/Ridwy/iosdc19-custom-instrumentsActionLogsScenePlayer.appw/ InstrumentCustom Modeler Sample
Getting Started with Instruments WWDC19, 411Instruments֓ཁ, Time ProfilerͷσϞ, Signpostsͷհ, XCTestͰͷར༻ྫMeasuring Performance Using Logging WWDC18, 405Signposts APIৄࡉDeveloping a Great Profiling ExperienceTelling your story with Custom InstrumentsWWDC19, 414SignpostsʹΑΔσʔλऩूͷϕετϓϥΫςΟε, ΧελϜInstruments֓ཁ, ใͷՄࢹԽCreating Custom Instruments WWDC18, 410InstrumentsͷΞʔΩςΫνϟ, ΧελϜInstrumentsͷ࡞CLIPS User’s Guide www.clipsrules.netCLIPSݴޠͷجຊతͳ͍ํͱγϯλοΫεModeling in Custom Instruments WWDC19, 421CLIPSʹΑΔModelerͷ࡞ࢀߟࢿྉ ↓ ্͔ΒॱʹݟΔͱཧղ͍͢͠ͱࢥ͍·͢
Instruments Helpجຊͷ͍ํInstruments Developer HelpύοέʔδͷXMLཁૉ, Engineering TypeҰཡࢀߟࢿྉ
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠