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

Profileable buildでより正確なパフォーマンスを掴む

Profileable buildでより正確なパフォーマンスを掴む

2023/2/17に開催されたshibuya.apk #40で登壇した、「Profileable buildでより正確なパフォーマンスを掴む」のスライドです

Yoshihiro WADA

February 17, 2023
Tweet

More Decks by Yoshihiro WADA

Other Decks in Programming

Transcript

  1. 1SP
    fi
    MFBCMFCVJMEͰ
    ΑΓਖ਼֬ͳύϑΥʔϚϯεΛ௫Ή
    TIJCVZBBQL
    !FEPLVQ

    View Slide

  2. {


    “id”: “@e10dokup”,


    “name”: “Yoshihiro Wada”,


    “affiliation”: “CyberAgent Inc, / Ameba”,


    “interested”: [


    “camera”, “gadget”, “driving”, “motorsports”


    ]


    }

    View Slide

  3. w ύϑΥʔϚϯεଌఆ
    w ʮύϑΥʔϚϯε͕ѱ͍ΞϓϦʯͱ͸ʁ
    w ύϑΥʔϚϯεΛଌΔํ๏
    w 1SP
    fi
    MFBCMFCVJMEͱ͸ʁ
    w ҎԼͷ಺༰ʹ͸৮Ε·ͤΜ
    w ͲͷΑ͏ʹύϑΥʔϚϯεΛվળ͢Δ͔
    ࠓճͷ࿩୊
    3

    View Slide

  4. w ύϑΥʔϚϯεࢦඪͱ͍ͬͯ΋৭ʑ͋Δ
    w ௨৴͕গͳ͍ɺόοςϦʔ΁ͷෛ୲͕গͳ͍ʜ
    w ͱ͸͍͑ɺʮଟ͘ͷϢʔβʹͱͬͯ࢖͍΍͍͢ʯΞϓϦʹͱͬͯɺύ
    ϑΥʔϚϯε͸ඇৗʹॏཁͳࢦඪ
    w ʮΞϓϦ͕ॏ͍ʯͱײͤ͡͞Δཁૉ͸ɺ69ͷ્֐ʹͭͳ͕Δ
    w Ξχϝʔγϣϯ΍6*ͷ+BOL
    w ϑϨʔϜͷϑϦʔζ
    w ϝϞϦ࢖༻ྔ͕ߴ͍
    ʮύϑΥʔϚϯε͕ѱ͍ΞϓϦʯͱ͸ʁ
    4

    View Slide

  5. w ΞϓϦ͕ੜ੒͢ΔϑϨʔϜ͕6*ϨϯμϦϯάʹؒʹ߹ΘͣɺγεςϜ͕
    ϑϨʔϜΛεΩοϓ͢Δݱ৅
    w +BOL͕ൃੜ͢ΔͱϢʔβ͸νϥ͖ͭΛײ͡Δ
    w 6*εϨουͷ࣮ߦ଎౓௿Լ΍6*εϨουΛϒϩοΩϯά͢Δඇಉظݺ
    ͼग़͕͠ى͖͍ͯΔͷ͕ओͳݪҼ
    w ॲཧʹ࣌ؒͷ͔͔Δ$PNQPTBCMFͳؔ਺
    w 3FDZDMFS7JFX-JTU7JFXͷ࠶ඳըͷա৒ͳൃੜ
    w ωετͳͲɺෳࡶͳϨΠΞ΢τվ૷
    Ξχϝʔγϣϯ΍6*ͷ+BOLͬͯʁ
    5
    ref: https://developer.android.com/studio/profile/jank-detection

    View Slide

  6. w "OESPJE4UVEJPͷ$161SP
    fi
    MFSͰ֬ೝ͢Δ
    w "OESPJEҎ߱ɿ4ZTUFN5SBDF͔Β+BOLZ'SBNFTͰ֬ೝͰ͖Δ
    +BOLͷܭଌํ๏
    6
    +BOLͨ͠ϑϨʔϜͷৄࡉ΋֬ೝͰ͖Δ
    ref: https://developer.android.com/studio/profile/jank-detection

    View Slide

  7. w ϨϯμϦϯάʹNTҎ্͔͔ΔϑϨʔϜ
    w +BOLͱ͸ผͷ໊લ͕͍͍ͭͯΔ͕ɺݪҼͱͯ͠͸΄΅ಉ͡
    w ΞϓϦͷىಈ࣌ͳͲɺ͔ΒϑϨʔϜͷϨϯμϦϯάΛߦ͏γʔϯͰ
    ؕΓ΍͍͢
    w Ϣʔβ͸ϑϨʔϜͷϑϦʔζʹର͠ɺʮΞϓϦͷಈ࡞͕ఀࢭͨ͠ʯͱೝ
    ࣝ͢ΔͷͰ69తʹ͸ඇৗʹΑ͘ͳ͍ݱ৅
    ϑϨʔϜͷϑϦʔζͬͯʁ
    7
    ref: https://developer.android.com/topic/performance/vitals/frozen

    View Slide

  8. w ϦϦʔε͍ͯ͠ΔΞϓϦͰൃੜ͍ͯ͠Δ৔߹ɺ"OESPJE7JUBMTͷμο
    γϡϘʔυͰऩू͞ΕΔͷͰͦͷ౷ܭΛ֬ೝͰ͖Δ
    ϑϨʔϜͷϑϦʔζΛ֬ೝ͢Δ
    8

    View Slide

  9. w ։ൃऀ޲͚Φϓγϣϯ͔ΒϓϩϑΝΠϥΛىಈͰ͖Δ
    w όʔδϣϯʹΑ໊ͬͯલ͕ҧ͏
    w ʮ)86*ϨϯμϦϯάͷϓϩϑΝΠϧ࡞੒ʯ
    w ʮ(16ϨϯμϦϯάͷϓϩϑΝΠϧ࡞੒ʯ
    w ༗ޮʹ͢Δͱɺը໘্ʹ֤ϑϨʔϜͷඳըʹ͔͔Δ࣌ؒ

    ͕๮άϥϑͰදࣔ͞ΕΔ
    "OESPJEͷ࣮ػ্ͰඳըͷύϑΥʔϚϯεΛ֬ೝ͢Δ
    9
    ref: https://developer.android.com/topic/performance/rendering/inspect-gpu-rendering

    View Slide

  10. "OESPJEͷ࣮ػ্ͰඳըͷύϑΥʔϚϯεΛ֬ೝ͢Δ
    10
    ref: https://developer.android.com/topic/performance/rendering/inspect-gpu-rendering

    View Slide

  11. "OESPJEͷ࣮ػ্ͰඳըͷύϑΥʔϚϯεΛ֬ೝ͢Δ
    11
    ref: https://developer.android.com/topic/performance/rendering/inspect-gpu-rendering
    ֤ϑϨʔϜͷඳը
    ʹ͔͔ͬͨ࣌ؒ
    ʢ௕͍΄Ͳ஗͍ʣ

    View Slide

  12. "OESPJEͷ࣮ػ্ͰඳըͷύϑΥʔϚϯεΛ֬ೝ͢Δ
    12
    ref: https://developer.android.com/topic/performance/rendering/inspect-gpu-rendering
    ඳը࣌ؒͷج४ઢ
    ྘ɿNT
    ԫ྘ɿNT
    ੺ɿNT

    View Slide

  13. w ʮͦΓΌ͋ɺ͍ͬͺ͍ϝϞϦ࢖ͬͯΔͱ͍͏͜ͱͰ͸ʁʯ
    w ·͊ɺͦͷͱ͓Γɻ
    w "OESPJEʹ͸ΨϕʔδίϨΫγϣϯ΍ϝϞϦڞ༗ͱ͍ͬͨ؅ཧػೳ͕උ
    Θͬͯ͸͍Δ͕ɺݶք͸͋Δ
    w ϝϞϦϦʔΫʹΑͬͯΨϕʔδίϨΫλʔ͕ϝϞϦΛ։์Ͱ͖ͳ͍
    w ؅ཧͷ଎౓Λ௒͑Δ੎͍ͰΞϓϦ͕ϝϞϦΛཁٻ͢Δ
    w Ϣʔβ͸ʮ࢖͍ͬͯΔͱͲΜͲΜ஗͘ͳΔͷͰλεΫΩϧΛ͢Δʯͱ͍
    ͏ೝࣝΛ͢Δ
    ϝϞϦͷ࢖༻ྔ͕ߴ͍ͬͯʁ
    13

    View Slide

  14. w "OESPJE4UVEJPͷ.FNPSZ1SP
    fi
    MFSΛ࢖ͬͯܭଌͰ͖Δ
    w ώʔϓμϯϓ͔ΒৄࡉͳϝϞϦঢ়ଶ΍ϝϞϦϦʔΫ΋औಘͰ͖Δ
    ϝϞϦͷ࢖༻ྔͷܭଌ
    14

    View Slide

  15. ͱ͜ΖͰ

    View Slide

  16. w %FCVHCVJMEͰΈ͍ͯΔʁ
    w android:debuggable=“true”
    w "OESPJE1SP
    fi
    MFS͕ඞཁ͔ͩΒ
    w σόοάϥΠϒϥϦ͕debugImplementationͰґଘ͍ͯ͠Δ͔Β
    w %FCVHCVJME͸3FMFBTFCVJMEͱ͸ҧ͍ɺύϑΥʔϚϯε໘Ͱ͸ෆར
    w σόοά৘ใΛఏڙ͢ΔͨΊʹɺίϯύΠϥͷ࠷దԽΛࢭΊΔͳͲ
    ύϑΥʔϚϯεଌఆͷ؀ڥʹ͍ͭͯ
    16

    View Slide

  17. %FCVHCVJMEͱ3FMFBTFCVJMEͰݟΔ/PXJO"OESPJE
    17
    %FCVHCVJME 3FMFBTFCVJME
    ඳըʹ࣌ؒͷ͔͔Δ
    ϑϨʔϜ͕૿͑ͨ
    ˣ
    %FCVHCVJMEͷ
    ύϑΥʔϚϯε΁ͷ
    Өڹ͸େ͖͍

    View Slide

  18. ͦ͜Ͱ

    View Slide

  19. w "OESPJEҎ߱Ͱಋೖ͞Εͨ"OESPJE.BOJGFTUʹ͚ͭΔ༻ͷλά



    w %FCVHCVJME͕͍࣋ͬͯͨΦʔόʔϔουΛճආͭͭ͠ɺϓϩϑΝΠϦ
    ϯάπʔϧΛ༗ޮʹ͢Δ
    w %FCVHCVJMEͱൺֱͨ͠ͱ͖ʹɺύϑΥʔϚϯε΁ͷӨڹ͕খ͍͞
    w ΑΓਖ਼֬ͳύϑΥʔϚϯε৘ใΛಘΔ͜ͱ͕Ͱ͖Δ
    1SP
    fi
    MFBCMFCVJME͕௥Ճ͞Ε·ͨ͠
    19
    ref: https://android-developers.googleblog.com/2022/10/accurately-measure-android-app-performance-with-profileable-builds.html

    View Slide

  20. 1SP
    fi
    MFBCMFCVJMEͱ3FMFBTFCVJMEͰݟΔ/PXJO"OESPJE
    20
    1SP
    fi
    MFBCMFCVJME 3FMFBTFCVJME
    ඳըʹ࣌ؒͷ͔͔Δ
    ϑϨʔϜ͕ݮͬͨ
    ˣ
    %FCVHCVJMEΑΓ
    ύϑΥʔϚϯε΁ͷ
    Өڹ͕খ͍͞

    View Slide

  21. ͭฒ΂ͯΈΔ
    21
    %FCVHCVJME 3FMFBTFCVJME
    1SP
    fi
    MFBCMFCVJME

    View Slide

  22. w ݁࿦͔Βݴ͏ͱେৎ෉
    w ೉ಡԽΛεΩοϓ͢Δ΋ͷͰ͸ͳ͍ͷͰγϯϘϧ͸ܽམ͢Δ
    w (PPHMFͷTUQBSUZBQQT͸طʹετΞʹ͋Δ΋ͷ͕1SP
    fi
    MFBCMFCVJME
    w ํ਑తʹ͸ηΩϡϦςΟ͕༏ઌ͞ΕΔͷͰɺ੍ݶ͕͸͍Δ
    w $161SP
    fi
    MFS͸ίʔϧελοΫαϯϓϦϯάɺγεςϜτϨʔεͳ
    ͲɺλΠϛϯάͷଌఆʹॏཁͳϓϩϑΝΠϧ͔͠αϙʔτ͠ͳ͍
    w .FNPSZ1SP
    fi
    MFS΋ωΠςΟϒϝϞϦͷϓϩϑΝΠϧͷΈ
    w &OFSHZ1SP
    fi
    MFS΍&WFOU5JNFMJOF͸ͦ΋ͦ΋࢖͑ͳ͍
    1SP
    fi
    MFBCMFCVJMEɺຊ൪ΞϓϦͰ΍Δͷ͸େৎ෉ͳͷʁ
    22

    View Slide

  23. 1SP
    fi
    MFBCMFCVJMEͩͱOBUJWFBMMPDBUJPOTҎ֎͸ແޮԽ͞ΕΔ
    23

    View Slide

  24. 1SP
    fi
    MFBCMFCVJMEͩͱϝιουτϨʔε͸೉ಡԽ͞Εͨ··
    24

    View Slide

  25. 1SP
    fi
    MFBCMFCVJMEͷ࡞Γํ

    View Slide

  26. w ཁɿ"OESPJE4UVEJP'MBNJOHP"(1
    w 1SP
    fi
    MFbBQQOBNF`XJUIMPXPWFSIFBEͱ͍͏Φϓγϣϯ͕௥Ճ͞
    Εͨ
    w ࣗಈతʹ1SP
    fi
    MFBCMFCVJMEΛߦ͍ɺϓϩϑΝΠϥ্Ͱ΋໌ࣔతʹ
    ʮ1SP
    fi
    MFBCMFCVJMEͰݟ͍ͯΔʯ͜ͱ͕දࣔ͞ΕΔ
    w ͲͷϏϧυλΠϓ΋1SP
    fi
    MFBCMFʹͰ͖Δ͕ɺύϑΥʔϚϯεଌఆ໨త
    Ͱ͋Ε͹SFMFBTFCVJMEͳͲɺVOEFCVHHBCMFͳλΠϓΛࢦఆ͢΂͖
    "OESPJE4UVEJPͰ1SP
    fi
    MFBCMF#VJMEΛࣗಈతʹߦ͏
    26

    View Slide

  27. w "OESPJE.BOJGFTUʹQSP
    fi
    MFBCMFλάΛ͚ͭΔ
    w
    w #VJME'MBWPSΛVOEFCVHHBCMFͳCVJMEUZQFʹࢦఆ͢Δ
    w ॺ໊ͨ͠ΞϓϦΛ࡞Δ
    w σόοάॺ໊Ͱ΋ɺ1SP
    fi
    MFBCMFCVJMEઐ༻ͷॺ໊Ͱ΋0,
    w "OESPJEҎ߱ͷσόΠεͰΞϓϦΛ࣮ߦ͢Δͱɺ֤1SP
    fi
    MFS͔Β
    1SP
    fi
    MFBCMFCVJMEͰಈ͍͍ͯΔϓϩηεΛࢦఆ͢Δ͜ͱ͕Ͱ͖Δ
    ࣗ෼Ͱ1SP
    fi
    MFBCMFCVJMEΛߦ͏
    27

    View Slide

  28. w ύϑΥʔϚϯεͷଌఆ͸ͪΌΜͱ΍͍ͬͯ·͔͢ʁ
    w ໨ࢹͰ໌֬ʹ஗͍Ͱ͸ͳ͘ɺ1SP
    fi
    MFS౳ͰʮίίͷύϑΥʔϚϯε͕
    ѱ͍ʯΛ໌֬ʹσʔλͱͯ͠ಘΔͷ͸େ੾
    w 1SP
    fi
    MFBCMFCVJMEΛ࢖͏͜ͱͰɺΑΓਖ਼֬ͳύϑΥʔϚϯε৘ใΛऔಘ
    ͢Δ͜ͱ͕Ͱ͖Δ
    w ̋̋ͳλΠϛϯάͰύϑΥʔϚϯε͕མ͍ͪͯΔʂͱ͍͏ͷ͕Θ͔ͬ
    ͨΒɺ%FCVHCVJMEͳΓͰͳΜͰམ͍ͪͯΔͷ͔ΛΑΓৄࡉʹ٧Ίͯ
    ͍͘ͷ͕ྑͦ͞͏
    ·ͱΊ
    28

    View Slide