Upgrade to Pro — share decks privately, control downloads, hide ads and more …

カスタムInstrumentsでアプリをピカピカに!

Chiharu Nameki
September 07, 2019

 カスタムInstrumentsでアプリをピカピカに!

Instrumentsの基本
OSSignposts
カスタムInstrumentsの作成
活用事例
CLIPSによるModelerの自作

Sample Code
https://github.com/Ridwy/iosdc19-custom-instruments

Chiharu Nameki

September 07, 2019
Tweet

More Decks by Chiharu Nameki

Other Decks in Technology

Transcript

  1. ߦ໦ ઍय़ʢͳΊ͖ ͪ͸Δʣ
    Twitter, Qiita, GitHub @Ridwy
    גࣜձࣾαΠόʔΤʔδΣϯτ
    ΧελϜInstrumentsͰ
    ΞϓϦΛϐΧϐΧʹʂ
    iOSDC Japan 2019
    Sep. 7

    View Slide

  2. Instruments

    View Slide

  3. Agenda
    • Instrumentsͷجຊ
    • OSSignposts
    • ΧελϜInstrumentsͷ࡞੒
    • ׆༻ࣄྫ
    • CLIPSʹΑΔModelerͷࣗ࡞

    View Slide

  4. ύϑΥʔϚϯεͳͲͷ඼࣭վળʹ໾ཱͭ
    ࣮ߦ࣌ʹ͞·͟·ͳ৘ใΛऩू͠
    ෼ੳɾՄࢹԽͯ͘͠ΕΔπʔϧ

    View Slide

  5. Xcodeʹ૊Έࠐ·Ε͍ͯΔ
    ܭଌର৅ʹΞϓϦ͕ηοτ͞Εͨঢ়ଶͰىಈ
    Product > Profile

    View Slide

  6. ୯ಠͰ΋ىಈͰ͖Δ

    View Slide

  7. جຊͷ࢖͍ํ

    View Slide

  8. ςϯϓϨʔτΛબ୒ͯ͠Choose !

    View Slide

  9. ϝΠϯը໘

    View Slide

  10. Record !

    View Slide

  11. ݁ՌΛݟͯίʔυΛվળ

    View Slide

  12. Instruments ͱ͍͏୯ޠ͸
    2ͭͷҙຯͰ࢖ΘΕ͍ͯ·͢
    ͜͜Ͱͪΐͬͱ஫ҙ

    View Slide

  13. Instruments.app

    View Slide

  14. ֤छͷ෼ੳΛߦ͏πʔϧ
    Drag & Drop
    Ͱ௥Ճʂ
    Instruments
    ϥΠϒϥϦ

    View Slide

  15. ը໘ߏ੒

    View Slide

  16. ը໘ߏ੒
    Track Area
    Detail Area
    Extended
    Detail Area
    Track (=࣌ܥྻͷάϥϑ) ͕ฒͿ

    View Slide

  17. Instrument Track
    graph
    lane
    lane
    άϥϑ͕ෳ਺͋Δͱ͖͸
    ͜͜Ͱ੾Γସ͑

    View Slide

  18. Leaks
    Standard ςϯϓϨʔτ ❌ϝϞϦ࢖༻ྔ͕ӈݞ্͕Γ
    ❌ϦʔΫʂ

    View Slide

  19. Time Profiler
    Standard ςϯϓϨʔτ CPU࢖༻཰ΛՄࢹԽ
    ࣌ؒͷ͔͔Δؔ਺ͷಛఆʹ
    Application status΋දࣔ͞ΕΔ
    Backgroundதͷڍಈ΋֬ೝ͠΍͍͢

    View Slide

  20. ίΞΛޮ཰Α͘
    ࢖͍͑ͯΔ͔ʁ
    ؔ਺ͷ࣮ߦʹ͔͔ͬͨ࣌ؒ

    View Slide

  21. AVPlayerItemOutputPullDelegate outputSequenceWasFlushed(_:)
    ಈըͷը͕Ͱ͖ͨΒݺ͹ΕΔ = ܁Γฦ࣮͠ߦ͞ΕΔՕॴ
    [AVVideoAsset minFrameDuration]
    1ϑϨʔϜ͕Կඵ͔
    1ճ͋ͨΓ͸େͨ͜͠ͱͳ͍͕
    ਖੵͰҙ֎ͱ͕͔͔͍࣌ؒͬͯΔ
    → ϧʔϓͷ֎ʹग़ͦ͏ʂ

    View Slide

  22. Energy Log
    Standard ςϯϓϨʔτ ֤ϋʔυ΢ΣΞͷঢ়ଶ
    ΧλϩάతͳςϯϓϨʔτʁ

    View Slide

  23. ΧελϜςϯϓϨʔτ
    ݱࡏͷ૊Έ߹ΘͤΛΧελϜςϯϓϨʔτͱͯ͠ॻ͖ग़ͤΔ
    Hoge.tracetemplate
    File > Save As Template…
    อଘ৔ॴ
    ~/Library/Application Support/Instruments/Templates
    ͜͜ʹஔ͘ͱςϯϓϨʔτબ୒ը໘ʹݱΕΔ
    μϒϧΫϦοΫͰ΋ىಈ

    View Slide

  24. ϐΧϐΧʹ͠Α͏ʂ
    جຊฤ ͜͜·Ͱ

    View Slide

  25. View Slide

  26. ԿΛ͚ͨ࣌ͩͬ͠…ʁʁ
    ͲΜͳૢ࡞Λͯ͠ɺը໘͸Ͳ͏͔ͩͬͨ?
    ޙ͔ΒݟΔͱ…

    View Slide

  27. Command Line࣮ߦ
    ޙ͔Β݁ՌΛΈΔέʔε ̍
    $instruments -t "Allocations" -l 10000 -D SaveFileName.trace PathToYourApp
    ςϯϓϨʔτ ه࿥࣌ؒ(ϛϦඵ)
    อଘઌ ଌఆର৅

    View Slide

  28. Deferred Recording Mode
    ޙ͔Β݁ՌΛΈΔέʔε ̎
    Instrumentsࣗମͷಈ࡞ʹΑΔӨڹΛ
    ࠷௿ݶʹ཈͑ΔͨΊ෼ੳΛ஗Ԇ࣮ߦͰ͖Δ
    or File > Recording Options…

    View Slide

  29. OSSignposts
    ʮίʔυ͕ԿΛ͍ͯ͠Δॴ͔ʯΛ
    Instrumentsʹ఻͑Α͏

    View Slide

  30. Point
    os_signpost(.event, log: logHandle, name: "Seek","to: %f", t)
    os_signpost()ΛίʔυʹຒΊࠐΉ
    Կ͕ൃੜͨ͠ͷ͔ʁΛૹΔ

    View Slide

  31. 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Λ౉͢͜ͱͰ୲อ
    Interval
    os_signpost()ΛίʔυʹຒΊࠐΉ

    View Slide

  32. ϨίʔσΟϯάதͰͳ͍ͱ͖ͷ
    ίʔυͷ࣮ߦʹΠϯύΫτΛ༩͑ͳ͍Α͏ʹ஫ҙ
    os_signpost(.event, log: logHandle, name: “Seek”,
    "to: %f", marker.startTime.seconds)
    NG
    ͕͜͜ධՁ͞Εͯ͠·͏
    if OSLogHandle.pointsOfInterest.signpostsEnabled {
    let seekTime = marker.startTime.seconds
    os_signpost(.event, log: logHandle, name: “Seek",
    “to: %f", seekTime)
    }
    // ϨίʔσΟϯάதͷΈ࣮ߦ͞ΕΔ
    OK

    View Slide

  33. ϝοηʔδ΋දࣔ͞ΕΔ
    Instrument ͷ os_signpost ΍
    Points of Interest ʹදࣔ͞ΕΔ

    View Slide

  34. • άϥϑͷ৭, Ϧετͷ಺༰, etc.
    • Signposts͸ڞ௨ͷϦιʔεͳͷͰɺࣗ෼͕௥Ճͨ͠΋ͷ

    Ҏ֎΋ग़ͯ͘Δ
    ͖ͬ͞௥Ճͨ͠ͷɺͲΕ?

    ͍Ζ͍Ζɺݟ΍ͨ͘͘͢͠ͳͬͯ͘Δ

    શ෦੨͍…

    View Slide

  35. ΧελϜInstruments

    View Slide

  36. Instruments Architecture
    Data Stream Table Modeler Table Standard UI
    Signposts, ktraceͳͲͷσʔλͷιʔε
    Data Stream
    Table σʔλͷೖΕ෺ɼܕ͸εΩʔϚͰఆٛ
    Modeler ೖྗσʔλΛධՁͯ͠ग़ྗσʔλΛੜ੒
    Standard UI InstrumentsΞϓϦͷUI

    View Slide

  37. Instruments Architecture
    Dynamic Track-wide Binding
    1. InstrumentsʹඞཁͳςʔϒϧΛ༻ҙ
    2.ͦͷςʔϒϧͷεΩʔϚͷσʔλΛੜ੒Ͱ͖Δ

    Modeler / Data StreamΛ୳ͯ͠όΠϯσΟϯά
    ޮ཰ԽͷͨΊɺಉ͡಺༰ͷςʔϒϧ͸ڞ༗͢Δ

    View Slide

  38. ΧελϜInstrumentsΛ࡞Δ
    InstrumentsͱඞཁͳModeler, εΩʔϚͳͲΛؚΉ

    ύοέʔδΛ࡞Δ
    =

    View Slide

  39. ࡞੒खॱ Xcode Ͱ File > New > Project…
    macOS಺ͷ Instruments Package Λબ୒

    View Slide

  40. instrpkgϑΝΠϧʹXMLͰ

    εΩʔϚ΍Modeler, InstrumentsͳͲΛهड़
    Snippet͕ॆ࣮ʂ

    View Slide

  41. • Run → σόοάϞʔυͰInstruments͕ىಈ
    • Archive → ഑෍༻ύοέʔδΛੜ੒
    ActionLogs.instrdst
    ར༻࣌͸͜ΕΛ
    μϒϧΫϦοΫͯ͠Πϯετʔϧ

    View Slide

  42. ΠϯετʔϧࡁΈͷύοέʔδ͸
    ؀ڥઃఆͷPackagesλϒͰ֬ೝͰ͖Δ

    View Slide

  43. XMLཁૉͷϦϑΝϨϯε
    Instruments Developer Help
    Package Definition Reference
    Engineering TypeʢΧϥϜͷσʔλछผʣͷϦετ΋ͪ͜Βʂ

    View Slide

  44. εΩʔϚ




    εΩʔϚ





    Instruments Package
    ͷߏ੒ྫ

    View Slide

  45. εΩʔϚΛهड़͢ΔͨΊͷXMLཁૉ
    XML Element
    Automatic
    Modeler
    Memo



    ○ Xcode 11~

    Automatic Modeler = ModelerΛࣗಈੜ੒ͯ͘͠ΕΔػೳ
    os_signpost΍os_log͔Βఆٛ͞ΕͨεΩʔϚʹม׵ʂ

    View Slide

  46. εΩʔϚ Ұཡ
    Instrument > Instrument Inspector Schemasλϒ
    100+ Built-in Schemas !

    View Slide

  47. طଘεΩʔϚͷར༻ํ๏
    os-signpost
    ඞཁͳΒBuild SettingsͰύοέʔδΛϦϯΫ

    View Slide



  48. jp.co.chiharu-nameki.ScenePlayerBehavior
    ScenePlayerBehavior

    Chiharu Nameki

    os-signpost

    scene-detection
    Scene Detection
    "jp.co.chiharu-nameki.ScenePlayer"
    "Behavior"
    "Scene Detection"

    "url: " ?url


    "count: " ?count


    url
    Video URL
    string
    ?url


    scene-count
    Scene Count
    uint32
    ?count


    result-color
    Color
    event-concept
    (if (= ?count 0) then "Red" else "Green")



    jp.co.chiharu-nameki.ScenePlayerBehavior.ScenePlayerBehavior
    ScenePlayer Behavior
    Behavior
    Visualize what's happen in ScenePlayer app
    Points of Interest

    user-actions
    os-signpost

    subsystem
    jp.co.chiharu-nameki.ScenePlayer


    category
    UserAction



    scene-detections
    scene-detection


    ScenePlayer Behavior

    User Actions
    user-actions

    name



    Scene Detection
    scene-detections

    url
    result-color




    User Actions
    user-actions
    time
    name
    message


    Scene Detection
    scene-detections
    start
    duration
    url
    scene-count



    ScenePlayerBehavior.tracetemplate


    ←116ߦ
    ScenePlayerBehavior.instrpkg

    View Slide

  49. View Slide

  50. API௨৴ͷՄࢹԽ
    ϓϩμΫτͰͷ׆༻ࣄྫ ̍
    ޮ཰ͷѱ͍ϦΫΤετͷ࢓ํΛ͍ͯ͠ͳ͍͔ʁ

    View Slide

  51. Ϣʔβʔͷߦಈϩάͷ࣮૷֬ೝ
    ϓϩμΫτͰͷ׆༻ࣄྫ ̎
    ՄࢹԽػೳʹண໨
    λΠϛϯά΍಺༰͕ਖ਼͍͔͠νΣοΫ

    View Slide

  52. ΋ͬͱݡ͘͠Α͏ʂ
    ΧελϜModeler

    View Slide

  53. A Tool for Building Expert Systems
    www.clipsrules.net

    View Slide

  54. Expert System
    ઐ໳Ոͷ൑அೳྗΛΤϛϡϨʔτ͢Δ΋ͷ
    ࣗಈి࿩Ԡ౴ɺੲͳ͕ΒͷAIʢ͍ΘΏΔਓ޻ແ೴ʣͳͲʹԠ༻
    ൃੜͨ͠ࣄ࣮ʢfactʣΛϧʔϧʹैͬͯॲཧ
    Working memory
    fact
    f-2
    Rule B
    Rule A
    fact
    f-1
    fact
    f-3

    View Slide

  55. CLIPS
    ࣜ͸()ͰғΉ ( ࣜ )
    ม਺ ?hoge
    ԋࢉࢠ͸લஔ͖
    (+ ?a ?b)
    (> ?t1 ?t2)
    factૢ࡞
    ; ௥Ճ
    (assert hello)
    ; ࡟আ
    (retract ?hoge)
    ; มߋ
    (modify ?hoge (fuga 123))

    View Slide

  56. ϧʔϧΛఆٛ
    (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)
    =>
    શͯͷύλʔϯʹϚονͨ͠Β
    ΞΫγϣϯΛ࣮ߦ

    View Slide

  57. ۩ମྫ
    ߦಈϩάͷ࣮૷ϛεΛݕ஌ͤ͞Δ
    • λοϓͷϩάʹ͸Page IDʢͲͷը໘Ͱߦͳ͔ͬͨʣͷ৘ใؚ͕·ΕΔ
    • Page ID͸දࣔதͷը໘ͱಉ͡Ͱ͋Δ΂͖

    View Slide

  58. ཁૉʹೖग़ྗͷεΩʔϚͱCLIPSͷϑΝΠϧ΁ͷύεΛهड़

    View Slide

  59. page-id-validator.clp શจ
    ϧʔϧΛهड़

    View Slide

  60. ݕग़͞Εͨʂ

    View Slide

  61. Recap
    • Instrumentsͷجຊ
    • OSSignposts
    • ΧελϜInstrumentsͷ࡞੒
    • ׆༻ࣄྫ
    • CLIPSʹΑΔModelerͷࣗ࡞

    View Slide

  62. Sample Code
    https://github.com/Ridwy/iosdc19-custom-instruments
    ActionLogs
    ScenePlayer.app
    w/ Instrument
    Custom Modeler Sample

    View Slide

  63. Getting Started with Instruments WWDC19, 411
    Instruments֓ཁ, Time ProfilerͷσϞ, Signpostsͷ঺հ, XCTestͰͷར༻ྫ
    Measuring Performance Using Logging WWDC18, 405
    Signposts APIৄࡉ
    Developing a Great Profiling Experience
    Telling your story with Custom Instruments
    WWDC19, 414
    SignpostsʹΑΔσʔλऩूͷϕετϓϥΫςΟε, ΧελϜInstruments֓ཁ, ৘ใͷՄࢹԽ
    Creating Custom Instruments WWDC18, 410
    InstrumentsͷΞʔΩςΫνϟ, ΧελϜInstrumentsͷ࡞੒
    CLIPS User’s Guide www.clipsrules.net
    CLIPSݴޠͷجຊతͳ࢖͍ํͱγϯλοΫε
    Modeling in Custom Instruments WWDC19, 421
    CLIPSʹΑΔModelerͷ࡞੒
    ࢀߟࢿྉ ↓ ্͔ΒॱʹݟΔͱཧղ͠΍͍͢ͱࢥ͍·͢

    View Slide

  64. Instruments Help
    جຊͷ࢖͍ํ
    Instruments Developer Help
    ύοέʔδͷXMLཁૉ, Engineering TypeҰཡ
    ࢀߟࢿྉ

    View Slide

  65. ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide