From 741a8c16c7fc573d40d79d8ac8e4262b60676121 Mon Sep 17 00:00:00 2001 From: David Friedman Date: Thu, 9 Jun 2016 01:44:20 -0700 Subject: [PATCH] Docs: Launch-time performance doc for upcoming Performance section on DAC. Bug: 29234219 Change-Id: I14a56f93b0f14142c10fef37d6f07754e65b6308 --- .../topic/performance/images/cold-launch.png | Bin 0 -> 12512 bytes .../performance/images/displayed-logcat.png | Bin 0 -> 47099 bytes docs/html/topic/performance/launch-time.jd | 565 ++++++++++++++++++ 3 files changed, 565 insertions(+) create mode 100644 docs/html/topic/performance/images/cold-launch.png create mode 100644 docs/html/topic/performance/images/displayed-logcat.png create mode 100644 docs/html/topic/performance/launch-time.jd diff --git a/docs/html/topic/performance/images/cold-launch.png b/docs/html/topic/performance/images/cold-launch.png new file mode 100644 index 0000000000000000000000000000000000000000..2935ece7866513ef1c7a472f7ff994b3e724ef90 GIT binary patch literal 12512 zcma)idpy(a|9^FNQc1Tvxsjw$5$=TLoJx*!o@I=L7-orKj-`XU+|D89P|h}^7-Jjm zQWzm-)MgXr+^9L_{CiLL{rP-+Z+AQa)s^QTUAPMhEECk_;GU853m%VUwM5W@AWAfwT3Fj=&23|NkHs z4JS_{1gpNs9q&1vC>-N#8YuW&PL=*3BAEM{mTY{%pl$GE$i68F?$SwfD(~^0dQjW> ztRn!?i*auWZo%oq6~kZ|$4$ee07qAck*L6HUtA8^hIz1|F+oE7proDZrvci_o!{Ri zx0X_kGT<4Do}ROVr+bShL~chqzWfDvdrvM65+%{4$l@n#c{PZ z0|@hfru+D4|MH3CSFFVI)k@YIo}wVE8F%`$?ebZ^U01^d@^9bC&5CNZMW`n45H z?pI3Deg@iBI*qk-t?BiZJtu($n80YPL{2CT-uR=+x^5w?ePMo3S_(=@_R9P9Y4VB1 zMjTQB6-J$Vjh@vRYIqx;6Y6j_jJesnr}`>FGHQHkcr`pXgH%q_286$i$r+`{2&J`D zD8n&e2~6q&qW+pGJ4;kuZ-|Jzde#P)mHDDfu{aWkgXU5Z^*O18)5+C7SqZAL^eFWu z%L&|pmt=^1j&^POl+7Go3eq|%eotTy2zgZS_xrm|;4eilKFOA|xLc%Rjraac4(nTm zS?%%^(=}peih>BIciN>{q?AOO5EmMkeCH5O4YdL2r-XtDW)s-}!lo}N1cnjDmU8>; z7Of`ADx7F9yB@gi5ZG2Bd(Xird&GQe^9BF%)xaNL9G0gVjXj$2%rV%z`O&Nht4S;*l7L5! zG%RC{RS%FB3pNJte*dDlAs-pFqBUDGw6@pv2C(Gam=0ZxPMOhF(xg=6tx8vz)*DYx z&qpI-s0}aF@d^LDNT0#w6Rv7Z_#fqQGf4xV;wRZE5t}_%tKYiYkEu?joZA@G%Mcko zXbwo`Br5Y9ip`pM=VH#y(!hzQl1Kwq2aTo}IwkL1oEW~Xi(av6XAtwt=MZ-24+f8G zKiA#7R^DEMOcOcrT*6^OQ&so$U?OB)E)q60l-OlB!RNi!+jeMRna&uU@XKq~?F+C| zP}}F??O3w$A}rtje6(QC!LrI4OX zqu~Ie^IG31n!Xx4C!X8a$HpKKp(+Mc&s%3Pu;2mDtMIu5<^N7*_sG1ru)Y6T@2(J^ zfEjC?K3n@tggq1|XW1QzNxd;;(_ukwPX*~UMh&bChi}#{HA)+|*1ir+(IixE;MJCM zo-|Bp$^$9~GzErdrYHzKC#!%t_Pi7#;xDYCrw!&}4?jab1%yQLZ?j-~tUAOX{64f| zJ$k_$D?S3q8#@}V8c8)U_-1Pk=t11vx#GP7+oU4-#=U8ZA zs%JZlkHy~&Y&ja+eMWfdXt0wauFkYjy@KcJV0B=iy3Bx>i=46AcWT%+!)xJpW*%pr z1W`}uY+)h{958l4eowN}r;abcpjFe)Biw{!A0{15Cq>RhjaZht4iTakrho;!PAw*f z%Y>^uYx2YoNG}G9Helj19(98ZYC71j5lX2GqT7b3BZ;9zHXjR_er4l7U0(m%Q}lum zBU`EB3FJNTYd=~f&G9yW>1)TnW@BYLdH>nBMV=m(w@P`M{^7EjxyOWc#)Fdvo&nqQ; z=w)EJSqYMmUxKW$n7GN%q2=U~eCQP)!hR+*H3yEpux~HX@$7BfQ~0IuP3ScObm+dT zWAOy}<4HwSib1Mcbc9pDT%(&2_|$U~PWg<(%;fJsKTZOv;(`c~cfx-Rl9j<-a&VYJ zS)58or>``LWe?3U>+?I$P7(9H)$0k-f0C(k=hcCnhRW~$OotiM1qDm&BkHf)>XQYl0W z%AkU0RHFQDqWN?o(&cde18P9{c|l~|jVXX9fntEr+9n0)hksr0u+n3+o6J0lxyk|D z1aM1$&h$JgtMO{;__U&RC!<)&K#8IXcf$!qB?IKY{$zxINJUH^?xf$gdp!Bn7Hcw4 zJo7O~R`Y)4yN+=eIu(@#d)H6*1xt;X=PAtA=qOL#NHOT#Su&tqoKP^5gEDlbjZ^1Wdt-s!5#3g3w2naRmZwbFeWEu*5_1~Z zaJn;J;d?K5YSDS5NJqw`-0zkP{?+H4qoSSr&h%7&zeA2KJ5gf*?!(hUz@Pl2AYUIR z=qd$+9#7YW@7m5s0N`qqGF8INk9F(@ixveS8mVPj4lZMzwF6{k?5#8s?c#09h2Ion zQ;wy9q|Hg3Dx}5l$$&&PuK}_Zh>nn5%DjC_;f<}BN-ov3ysrV_&RJi}$)ZlxI^wE6 z-vH?`^{i_msqI+*jIqQ-fl8Q10L=(gMcUnzG~NF!2;rB7bJZMIRz#6sUCu9BByRFG zq#945lm`5t^32n;!-r~L`(!HyEHy&Lh;ua}{>GdHdnH0-M;!d@tzG`z8D3}@i=9N|)$}|Tm}U~_tuAWN zP1ckPhHl})VT=>09uQ;sAe;lv3_&MMD!SnhnVQL+4zsFqWB1^)S7-36x8aEeu6W-$aM zmkv32e@l;2DFNK)?-No}!0cesm>>Hy+NLJHxVpvv<8Htl%D;>eOzF30M=;R$IKMG4 zUDT?@-mq5_Hq=6Tp9*?13C4{#Xs6BTF%7HepR&{Re!jmR1l_0MB_^jlP!-C*J-@VaTS-QFGwAPjsg^ov8067WZS%CX5BO7>2`O~Yh7VhQtyw?XM?6p#FPRd+z)g4!H zmZac7+KjlucbkTNcX=Q-7wpbdZ&Y4|+31uZEk5))q>#O(e54!1(?IAVvqLqFn-6Rr zRo42?q?>S59IMnVFmocm>%Yy3>e@}3UC9ug^|LWW@p2vO{H_`Xpc}iD4 zzs-qZ)HJZ!BnGLUdpcWK5WTz*o0foLAlI4?ZhNdYrdsL523~gW>^iw z6P8S6&yR?7wEdMkv{jJdUb%tXn1Hno`L|70zdZoQtesPZ8Bcu4>way&M@joSb>4a7 zon4yt3I0-avv9kV?H4O?u?8F^f8&$dmX2fcAsqDYe$}}yeL?s$X#w}*oBTGWkEbr2 z2w%uEL$bRFr!Z1mopH_W*oO)rZ+t~V7=@b3XEVK;=DODUotGC!6At20ja212OwG(E z!r8xS;h`+afjY#+feJgXkcotex1Kqa<^8Vss`0p#bjSBrVj#Wg<3zuOXJr-PTla^x zwexFe;Y&9MaHS zT4C_lLL>WFPyUHri;~{1Oi}{cnH}b)dNs%-Mi~8ZO|lZ_gUyNEyk{#0pBw0x$@$01 zY9#T%Txp4}_swr(QZHp*gEx+(-&H~dqUz2)Q#XBv9EEb2#JM95)J??v=?X8}7qwRU zDv-8kB2z)}B^M2`HQuIY6SNaflthHPoQ30FWUi9F?LXQ z`+E@>^B`UPtEp4_T{&{@DQ`j<7oX&lEg1x*6*|9YW-g9))BcF^^k%$E_D#OR1>&q7 z+*?-Gh%+)I+Ed{J4Jia)B0SAPhbyFjqNU6+{M+sp@=nu=8^%C5XXDpuYyIa1X<9=O zRmd+xVCV)o&BOAXOJZxSHtc;h7cTgbY1mD>kFMX%jG%wZKOKJ%2eQ^lGm+-EGwkKum9Vp>~M0Ro+#`WiD_2p}5JE4fK`oA?)}ydr~1hfH3

$}cewi&vh)noS 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 literal 0 HcmV?d00001 diff --git a/docs/html/topic/performance/images/displayed-logcat.png b/docs/html/topic/performance/images/displayed-logcat.png new file mode 100644 index 0000000000000000000000000000000000000000..7dee884d5a0c7f99cebea1ea46ae0fc8146f1fc5 GIT binary patch literal 47099 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 literal 0 HcmV?d00001 diff --git a/docs/html/topic/performance/launch-time.jd b/docs/html/topic/performance/launch-time.jd new file mode 100644 index 0000000000000..c9ce1d56185fb --- /dev/null +++ b/docs/html/topic/performance/launch-time.jd @@ -0,0 +1,565 @@ +page.title=Launch-Time Performance +@jd:body + +

+ +

+Users expect apps to be responsive and fast to load. An app with a slow startup +time doesn’t meet this expectation, and can be disappointing to users. This +sort of poor experience may cause a user to rate your app poorly on the Play +store, or even abandon your app altogether. +

+ +

+This document provides information to help you optimize your app’s launch time. +It begins by explaining the internals of the launch process. Next, it discusses +how to profile startup performance. Last, it describes some common startup-time +issues, and gives some hints on how to address them. +

+ +

Launch Internals

+ +

+App launch can take place in one of three states, each affecting how +long it takes for your app to become visible to the user: cold start, +warm start, and lukewarm start. In a cold start, your app starts from scratch. +In the other states, the system needs to bring the app from the background to +the foreground. We recommend that you always optimize based on an assumption of +a cold start. Doing so can improve the performance of warm and lukewarm starts, +as well. +

+ +

+To optimize your app for fast startup, it’s useful to understand what’s +happening at the system and app levels, and how they interact, in each of +these states. +

+ +

Cold start

+ +

+A cold start refers to an app’s starting from scratch: the system’s process +has not, until this start, created the app’s process. Cold starts happen in +cases such as your app’s being launched for the first time since the device +booted, or since the system killed the app. This type of start presents the +greatest challenge in terms of minimizing startup time, because the system +and app have more work to do than in the other launch states. +

+ +

+At the beginning of a cold start, the system has three tasks. These tasks are: +

+ +
    +
  1. Loading and launching the app.
  2. +
  3. Displaying a blank starting window for the app immediately after launch. +
  4. +
  5. Creating the app + + process.
  6. +
+
+

+As soon as the system creates the app process, the app process is responsible +for the next stages. These stages are: +

+ +
    +
  1. Creating the app object.
  2. +
  3. Launching the main thread.
  4. +
  5. Creating the main activity.
  6. +
  7. Inflating views.
  8. +
  9. Laying out the screen.
  10. +
  11. Performing the initial draw.
  12. +
+ +

+Once the app process has completed the first draw, the system process swaps +out the currently displayed background window, replacing it with the main +activity. At this point, the user can start using the app. +

+ +

+Figure 1 shows how the system and app processes hand off work between each +other. +

+
+ + +

+ Figure 1. A visual representation of the important parts of + a cold application launch. +

+ +

+Performance issues can arise during creation of the app and +creation of the activity. +

+ +

Application creation

+ +

+When your application launches, the blank starting window remains on the screen +until the system finishes drawing the app for the first time. At that point, +the system process swaps out the starting window for your app, allowing the +user to start interacting with the app. +

+ +

+If you’ve overloaded {@link android.app.Application#onCreate() Application.oncreate()} +in your own app, the app starts by calling this +method on your app object. Afterwards, the app spawns the main thread, also +known as the UI thread, and tasks it with creating your main activity. +

+ +

+From this point, system- and app-level processes proceed in accordance with +the +app lifecycle stages. +

+ +

Activity creation

+ +

+After the app process creates your activity, the activity performs the +following operations: +

+ +
    +
  1. Initializes values.
  2. +
  3. Calls constructors.
  4. +
  5. Calls the callback method, such as + {@link android.app.Activity#onCreate(android.os.Bundle) Activity.onCreate()}, + appropriate to the current lifecycle state of the activity.
  6. +
+ +

+Typically, the +{@link android.app.Activity#onCreate(android.os.Bundle) onCreate()} +method has the greatest impact on load time, because it performs the work with +the highest overhead: loading and inflating views, and initializing the objects +needed for the activity to run. +

+ +

Warm start

+ +

+A warm start of your application is much simpler and lower-overhead than a +cold start. In a warm start, all the system does is bring your activity to +the foreground. If all of your application’s activities are still resident in +memory, then the app can avoid having to repeat object initialization, layout +inflation, and rendering. +

+ +

+However, if some memory has been purged in response to memory trimming +events, such as +{@link android.content.ComponentCallbacks2#onTrimMemory(int) onTrimMemory()}, +then those objects will need to be recreated in +response to the warm start event. +

+ +

+A warm start displays the same on-screen behavior as a cold start scenario: +The system process displays a blank screen until the app has finished rendering +the activity. +

+ +

Lukewarm start

+ +

+A lukewarm start encompasses some subset of the operations that +take place during a cold start; at the same time, it represents less overhead +than a warm start. There are many potential states that could be considered +lukewarm starts. For instance: +

+ +
    +
  • The user backs out of your app, but then re-launches it. The process may + have continued to run, but the app must recreate the activity from scratch + via a call to + {@link android.app.Activity#onCreate(android.os.Bundle) onCreate()}.
  • + +
  • The system evicts your app from memory, and then the user re-launches it. + The process and the Activity need to be restarted, but the task can + benefit somewhat from the saved instance state bundle passed into + {@link android.app.Activity#onCreate(android.os.Bundle) onCreate()}.
  • +
+ +

Profiling Launch Performance

+ +

+In order to properly diagnose start time performance, you can track metrics +that show how long it takes your application to start. +

+ +

Time to initial display

+ +

+From Android 4.4 (API level 19), logcat includes an output line containing +a value called {@code Displayed}. This value represents +the amount of time elapsed between launching the process and finishing drawing +the corresponding activity on the screen. The elapsed time encompasses the +following sequence of events: +

+ +
    +
  1. Launch the process.
  2. +
  3. Initialize the objects.
  4. +
  5. Create and initialize the activity.
  6. +
  7. Inflate the layout.
  8. +
  9. Draw your application for the first time.
  10. +
+ +

+The reported log line looks similar to the following example: +

+ +
+ActivityManager: Displayed com.android.myexample/.StartupTiming: +3s534ms
+
+ +

+If you’re tracking logcat output from the command line, or in a terminal, +finding the elapsed time is straightforward. To find elapsed time in +Android Studio, you must disable filters in your logcat view. Disabling the +filters is necessary because the system server, not the app itself, serves +this log. +

+ +

+Once you’ve made the appropriate settings, you can easily search for the +correct term to see the time. Figure 2 shows how to disable filters, and, +in the second line of output from the bottom, an example of logcat output of +the {@code Displayed} time. +

+
+ + +

+ Figure 2. Disabling filters, and + finding the {@code Displayed} value in logcat. +

+ +

+The {@code Displayed} metric in the logcat output does not necessarily capture +the amount of time until all resources are loaded and displayed: it leaves out +resources that are not referenced in the layout file or that the app creates +as part of object initialization. It excludes these resources because loading +them is an inline process, and does not block the app’s initial display. +

+ +

Time to full display

+ +

+You can use the {@link android.app.Activity#reportFullyDrawn()} method to +measure the elapsed time +between application launch and complete display of all resources and view +hierarchies. This can be valuable in cases where an app performs lazy loading. +In lazy loading, an app does not block the initial drawing of the window, but +instead asynchronously loads resources and updates the view hierarchy. +

+ +

+If, due to lazy loading, an app’s initial display does not include all +resources, you might consider the completed loading and display of all +resources and views as a separate metric: For example, your UI might be +fully loaded, with some text drawn, but not yet display images that the +app must fetch from the network. +

+ +

+To address this concern, you can manually call +{@link android.app.Activity#reportFullyDrawn()} +to let the system know that your activity is +finished with its lazy loading. When you use this method, the value +that logcat displays is the time elapsed +since the creation of the application object, and the moment +{@link android.app.Activity#reportFullyDrawn()} is called. +

+ +

+If you learn that your display times are slower than you’d like, you can +go on to try to identify the bottlenecks in the startup process. +

+ +

Identifying bottlenecks

+ +

+Two good ways to look for bottlenecks are Android Studio’s Method Tracer tool +and inline tracing. To learn about Method Tracer, see that tool’s +documentation. +

+ +

+If you do not have access to the Method Tracer tool, or cannot start the tool +at the correct time to gain log information, you can gain similar insight +through inline tracing inside of your apps’ and activities’ {@code onCreate()} +methods. To learn about inline tracing, see the reference documentation for +the {@link android.os.Trace} functions, and for the +Systrace tool. +

+ +

Common Issues

+ +

+This section discusses several issues that often affect apps’ startup +performance. These issues chiefly concern initializing app and activity +objects, as well as the loading of screens. +

+ +

Heavy app initialization

+ +

+Launch performance can suffer when your code overrides the {@code Application} +object, and executes heavy work or complex logic when initializing that object. +Your app may waste time during startup if your Application subclasses perform +initializations that don’t need to be done yet. Some initializations may be +completely unnecessary: for example, initializing state information for the +main activity, when the app has actually started up in response to an intent. +With an intent, the app uses only a subset of the previously initialized state +data. +

+ +

+Other challenges during app initialization include garbage-collection events +that are impactful or numerous, or disk I/O happening concurrently with +initialization, further blocking the initialization process. Garbage collection +is especially a consideration with the Dalvik runtime; the Art runtime performs +garbage collection concurrently, minimizing that operation's impact. +

+ +

Diagnosing the problem

+ +

+You can use method tracing or inline tracing to try to diagnose the problem. +

+ +
Method tracing
+ +

+Running the Method Tracer tool reveals that the +{@link android.app.Instrumentation#callApplicationOnCreate(android.app.Application) callApplicationOnCreate()} +method eventually calls your {@code com.example.customApplication.onCreate} +method. If the tool shows that these +methods are taking a long time to finish executing, you should explore further +to see what work is occurring there. +

+ +
Inline tracing
+ +

+Use inline tracing to investigate likely culprits including: +

+ +
    +
  • Your app’s initial {@link android.app.Application#onCreate()} + function.
  • +
  • Any global singleton objects your app initializes.
  • +
  • Any disk I/O, deserialization, or tight loops that might be occurring + during the bottleneck. +
+ + +

Solutions to the problem

+ +

+Whether the problem lies with unnecessary initializations or disk I/O, +the solution calls for lazy-initializing objects: initializing only those +objects that are immediately needed. For example, rather than creating global +static objects, instead, move to a singleton pattern, where the app initalizes +objects only the first time it accesses them. +

+ +

Heavy activity initialization

+ +

+Activity creation often entails a lot of high-overhead work. Often, there are +opportunities to optimize this work to achieve performance improvements. Such +common issues include: +

+ +
    +
  • Inflating large or complex layouts.
  • +
  • Blocking screen drawing on disk, or network I/O.
  • +
  • Loading and decoding bitmaps.
  • +
  • Rasterizing {@link android.graphics.drawable.VectorDrawable VectorDrawable} objects.
  • +
  • Initialization of other subsystems of the activity.
  • +
+ +

Diagnosing the problem

+ +

+In this case, as well, both method tracing and inline tracing can prove useful. +

+ +
Method tracing
+ +

+When running the Method Tracer tool, the particular areas to +focus on your your app’s {@link android.app.Application} subclass constructors and +{@code com.example.customApplication.onCreate()} methods. +

+ +

+If the tool shows that these methods are taking a long time to finish +executing, you should explore further to see what work is occurring there. +

+ +
Inline tracing
+ +

+Use inline tracing to investigate likely culprits including: +

+ +
    +
  • Your app’s initial {@link android.app.Application#onCreate()} + function.
  • +
  • Any global singleton objects it initializes.
  • +
  • Any disk I/O, deserialization, or tight loops that might be occurring + during the bottleneck.
  • +
+ +

Solutions to the problem

+ +

+There are many potential bottlenecks, but two common problems and remedies +are as follows: +

+ +
    +
  • The larger your view hierarchy, the more time the app takes to inflate + it. Two steps you can take to address this issue are: + +
      +
    • Flattening your view hierarchy by reducing redundant or nested + layouts.
    • + +
    • Not inflating parts of the UI that do not need to be visible during + launch. Instead, use use a {@link android.view.ViewStub} object as a + placeholder for sub-hierarchies that the app can inflate at a more + appropriate time.
    • +
    +
  • + +
  • Having all of your resource initialization on the main + thread can also slow down startup. You can address this issue as follows: + +
      +
    • Move all resource initialization so that the app can perform it + lazily on a different thread.
    • +
    • Allow the app to load and display your views, and then later + update visual properties that are dependent on bitmaps and other + resources.
    • +
    +
  • + +

    Themed launch screens

    + + +

    +You may wish to theme your app’s loading experience, so that the app’s +launch screen is thematically consistent with the rest of the app, instead of +with the system theming. Doing so can hide a slow activity launch. +

    + +

    +A common way to implement a themed launch screen is to use the the +{@link android.R.attr#windowDisablePreview} theme attribute to turn off +the initial blank screen +that the system process draws when launching the app. However, this approach +can result in a longer startup time than apps that don’t suppress the preview +window. Also, it forces the user to wait with no feedback while the activity +launches, making them wonder if the app is functioning properly. +

    + +

    Diagnosing the problem

    + +

    +You can often diagnose this problem by observing a slow response when a user +launches your app. In such a case, the screen may seem to be frozen, or to +have stopped responding to input. +

    + +

    Solutions to the problem

    + +

    +We recommend that, rather than disabling the preview window, you +follow the common + +Material Design patterns. You can use the activity's +{@code windowBackground} theme attribute to provide a simple custom drawable +for the starting activity. +

    + +

    +For example, you might create a new drawable file and reference it from the +layout XML and app manifest file as follows: +

    + +

    Layout XML file:

    + +
    +<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque">
    +  <!-- The background color, preferably the same as your normal theme -->
    +  <item android:drawable="@android:color/white"/>
    +  <!-- Your product logo - 144dp color version of your app icon -->
    +  <item>
    +    <bitmap
    +      android:src="@drawable/product_logo_144dp"
    +      android:gravity="center"/>
    +  </item>
    +</layer-list>
    +
    + +

    Manifest file:

    + +
    +<activity ...
    +android:theme="@style/AppTheme.Launcher" />
    +
    + +

    +The easiest way to transition back to your normal theme is to call +{@link android.view.ContextThemeWrapper#setTheme(int) setTheme(R.style.AppTheme)} +before calling {@code super.onCreate()} and {@code setContentView()}: +

    + +
    +public class MyMainActivity extends AppCompatActivity {
    +  @Override
    +  protected void onCreate(Bundle savedInstanceState) {
    +    // Make sure this is before calling super.onCreate
    +    setTheme(R.style.Theme_MyApp);
    +    super.onCreate(savedInstanceState);
    +    // ...
    +  }
    +}
    +