Merge "Docs: Adding correct link to Hardware Composer HAL"
diff --git a/src/devices/tech/ota/device_code.jd b/src/devices/tech/ota/device_code.jd
index aec0a2f..8aa3649 100755
--- a/src/devices/tech/ota/device_code.jd
+++ b/src/devices/tech/ota/device_code.jd
@@ -226,62 +226,22 @@
 
 <h3 id="screenrecoveryui">ScreenRecoveryUI</h3>
 <p>When using your own images (error icon, installation animation, progress
-bars) with ScreenRecoveryUI, you might need to set some member variables to
-specify attributes such as the number of frames, speed, and overlay offsets.
-You can set the following variables:</p>
+bars) with ScreenRecoveryUI, you can set the variable <code>animation_fps</code>
+to control the speed in frames per second (FPS) of animations.</p>
 
-<table>
-<tbody>
-<tr>
-<th>Variable Name</th>
-<th>Purpose</th>
-<th>Release</th>
-</tr>
-<tr>
-<td>animation_fps
-</td>
-<td>speed (in frames per second) of animations
-</td>
-<td>Android 5.x and earlier</td>
-</tr>
-<tr>
-<td>installing_frames
-</td>
-<td>number of frames in the installation animation
-</td>
-<td>Android 4.x and earlier</td>
-</tr>
-<tr>
-<td>install_overlay_offset_x,
-install_overlay_offset_y
-</td>
-<td>offset of the per-frame overlay (relative to the base image) for the
-installation animation
-</td>
-<td>Android 4.x and earlier</td>
-</tr>
-</tbody>
-</table>
+<p class="note"><strong>Note:</strong> The current
+<code>interlace-frames.py</code> script enables you to store the
+<code>animation_fps</code> information in the image itself. In earlier versions
+of Android it was necessary to set <code>animation_fps</code> yourself.</p>
 
-<p>To set variables, override the <code>ScreenRecoveryUI::Init()</code>
-function in your subclass. Set the values, then call the <code>parent Init()
-</code> function to complete initialization:</p>
+<p>To set the variable <code>animation_fps</code>, override the
+<code>ScreenRecoveryUI::Init()</code> function in your subclass. Set the value,
+then call the <code>parent Init() </code> function to complete initialization.
+The default value (20 FPS) corresponds to the default recovery images; when
+using these images you don't need to provide an <code>Init()</code> function.
+For details on images, see <a href="#recovery-ui-images">Recovery UI
+Images</a>.</p>
 
-<pre>
-class TardisUI : public ScreenRecoveryUI {
-  ...
-  void Init() {
-    // change the speed at which animations run
-    animation_fps = 30;
-
-    ScreenRecoveryUI::Init();
-  }
-</pre>
-
-<p>The default values correspond to the default recovery images; when using
-these images you don't need to provide an <code>Init()</code> function. For
-details on images, see <a href="#recovery-ui-images">Recovery UI Images</a>.
-</p>
 
 <h3 id="device-class">Device Class</h3>
 <p>After you have a RecoveryUI implementation, define your device class
@@ -526,8 +486,8 @@
 appears squished). For example, for a 200x200 seven-frame animation, create
 a single 200x1400 image where first frame is rows 0, 7, 14, 21, ...; the second
 frame is rows 1, 8, 15, 22, ...; etc. The combined image includes a text chunk
-that indicates the number of animation frames. The tool
-<code>bootable/recovery/interlace-frames.py</code>
+that indicates the number of animation frames and the number of frames per
+second (FPS). The tool <code>bootable/recovery/interlace-frames.py</code>
 takes a set of input frames and combines them into the necessary composite
 image used by recovery.</p>
 
diff --git a/src/index.jd b/src/index.jd
index 402661e..c099472 100644
--- a/src/index.jd
+++ b/src/index.jd
@@ -43,6 +43,17 @@
   <div class="landing-docs">
     <div class="col-8">
     <h3>What's New</h3>
+<a href="{@docRoot}source/read-bug-reports.html">
+        <h4>Reading Bug Reports</h4></a>
+        <p>Android Engineering has written a detailed guide for <strong><a
+        href="{@docRoot}source/read-bug-reports.html">understanding
+        device-generated bug reports</a></strong>. This guide describes and
+        provides examples of common errors and their associated causes, such as
+        <strong><a href="{@docRoot}source/read-bug-reports.html#memory">low
+        memory</a></strong>. It even explains how to establish a <strong><a
+        href="{@docRoot}source/read-bug-reports.html#narrative">narrative</a></strong>
+        of the issue by syncing timelines across logs.</p>
+
 <a href="{@docRoot}compatibility/cts/rotation-vector.html">
         <h4>Rotation Vector CV Crosscheck</h4></a>
         <p>Instructions now exist for the CTS Verifier <strong><a
@@ -75,21 +86,6 @@
         <p>Android Community now includes a collection of <strong><a
         href="{@docRoot}source/community.html#resources">Resources</a></strong>
         for contributors, developers, users, and security experts.</p>
-
-<a href="{@docRoot}devices/tech/power/values.html">
-        <h4>Received Feedback Implemented</h4></a>
-        <p>Thanks to contributors who have submitted input using the
-        <strong>Send Feedback</strong> button, <strong><a
-        href="{@docRoot}devices/tech/power/values.html">Power Values</a></strong> now
-        notes <code>cpu.active</code> represents the power used by the CPU rails when
-        running at different speeds and explains why power profile values are given in
-        current (amps). <strong><a
-        href="{@docRoot}source/building-kernels.html#building">Building
-        Kernels</a></strong> describes how to locate the correct filename for each
-        kernel, while <strong><a
-        href="{@docRoot}compatibility/cts/setup.html#user_builds">Setting up
-        CTS</a></strong> more clearly defines compatible devices for the purposes of
-        testing.</p>
     </div>
 
     <div class="col-8">
diff --git a/src/security/authentication/gatekeeper.jd b/src/security/authentication/gatekeeper.jd
index 9d760bc..14e0b71 100644
--- a/src/security/authentication/gatekeeper.jd
+++ b/src/security/authentication/gatekeeper.jd
@@ -35,8 +35,8 @@
 
 <p>When users verify their passwords, Gatekeeper uses the TEE-derived shared
 secret to sign an authentication attestation to
-send to <a href="keymaster.html">Keymaster</a>. That is, a
-Gatekeeper attestation notifies Keymaster that authentication-bound keys (for
+send to the <a href="../keystore/index.html">hardware-backed Keystore</a>. That is, a
+Gatekeeper attestation notifies Keystore that authentication-bound keys (for
 example, keys that apps have created) can be released for use by apps.</p>
 
 <h2 id=architecture>Architecture</h2>
@@ -74,7 +74,7 @@
 <p class="img-caption"><strong>Figure 1.</strong> High-level data flow for authentication by GateKeeper</p>
 
 <p>The <code>gatekeeperd</code> daemon gives the Android framework APIs access to the HAL, and
-participates in reporting device <a href="index.html">authentications</a> to Keymaster.
+participates in reporting device <a href="index.html">authentications</a> to Keystore.
 The <code>gatekeeperd</code> daemon runs in its own process, separate from the system
 server.</p>
 
@@ -113,7 +113,7 @@
 <p>Trusty uses an internal IPC system to communicate a shared secret directly
 between Keymaster and the Trusty implementation of Gatekeeper ("Trusty
 Gatekeeper"). This shared secret is used for signing AuthTokens that will be
-sent to Keymaster, providing attestations of password verification. Trusty
+sent to Keystore, providing attestations of password verification. Trusty
 Gatekeeper requests the key from Keymaster for each use and does not persist
 or cache the value. Implementations are free to share this secret in any way
 that does not compromise security.</p>
@@ -158,8 +158,8 @@
 password is enrolled.</p>
 
 <p>User SIDs are written into the AuthToken returned by the <code>verify</code>
-function and associated to all authentication-bound Keymaster keys. For
-information about the AuthToken format and Keymaster, see
+function and associated to all authentication-bound Keystore keys. For
+information about the AuthToken format and Keystore, see
 <a href="index.html">Authentication</a>.
 Since an untrusted call to the <code>enroll</code> function
 will change the User SID, the call will render the keys bound to that password useless.</p>
diff --git a/src/security/authentication/index.jd b/src/security/authentication/index.jd
index 86564eb..194bdc8 100644
--- a/src/security/authentication/index.jd
+++ b/src/security/authentication/index.jd
@@ -43,16 +43,16 @@
 state with the keystore service via an authenticated channel.</p>
 
 <ul>
-  <li><strong>The keystore service and <a href="keymaster.html">Keymaster</a>.</strong> Cryptographic services,
-   including hardware-backed cryptography for key storage,
-   which might include a Trusted Execution Environment (TEE).</li>
+  <li><strong>The <a href="../keystore/index.html">hardware-backed Keystore</a>.</strong>
+  Cryptographic services, including hardware-backed cryptography for key storage,
+  which might include a Trusted Execution Environment (TEE).</li>
   <li><strong><a href="gatekeeper.html">Gatekeeper</a>.</strong> Components for PIN, pattern, and password authentication.</li>
   <li><strong><a href="fingerprint-hal.html">Fingerprint</a>.</strong> Components for fingerprint authentication.</li>
 </ul>
 
 <h2 id=architecture>Architecture</h2>
 
-<p>The Gatekeeper and Fingerprint components work with Keymaster and other
+<p>The Gatekeeper and Fingerprint components work with Keystore and other
 components to support the use of hardware-backed <a href="#authentication_token_format">authentication tokens</a> (referred to below as "AuthTokens").</p>
 
 <h3 id=enrollment>Enrollment</h3>
diff --git a/src/security/bulletin/Google_Android_Security_2014_Report_Final.pdf b/src/security/bulletin/Google_Android_Security_2014_Report_Final.pdf
new file mode 100644
index 0000000..ebbb64f
--- /dev/null
+++ b/src/security/bulletin/Google_Android_Security_2014_Report_Final.pdf
Binary files differ
diff --git a/src/security/bulletin/index.jd b/src/security/bulletin/index.jd
index 85b7a2a..7e1e96c 100644
--- a/src/security/bulletin/index.jd
+++ b/src/security/bulletin/index.jd
@@ -62,6 +62,11 @@
     <td>August 13, 2015</td>
     <td>N/A</td>
  </tr>
+ <tr>
+    <td><a href="Google_Android_Security_2014_Report_Final.pdf">Final 2014 (pdf)</a></td>
+    <td>April 1, 2015</td>
+    <td>N/A</td>
+ </tr>
 </table>
 
 
diff --git a/src/security/keystore/implementer-ref.jd b/src/security/keystore/implementer-ref.jd
index 7375651..99ea15f 100644
--- a/src/security/keystore/implementer-ref.jd
+++ b/src/security/keystore/implementer-ref.jd
@@ -345,7 +345,7 @@
 tag, it must receive an authentication token, and the token's
 <code>authenticator_type</code> field must match the value in the tag.  To be
 precise, it must be true that <code>(ntoh(token.authenticator_type) &
-auth_type_tag_value) != 0, where <code>ntoh</code> is a function that converts
+auth_type_tag_value) != 0</code>, where <code>ntoh</code> is a function that converts
 network-ordered integers to host-ordered integers and
 <code>auth_type_tag_value</code> is the value of this tag.</p>
 
diff --git a/src/source/build-numbers.jd b/src/source/build-numbers.jd
index 6842771..30acf35 100644
--- a/src/source/build-numbers.jd
+++ b/src/source/build-numbers.jd
@@ -183,6 +183,42 @@
 <th>Supported devices</th>
 </tr>
 <tr>
+  <td>MMB29T</td>
+  <td>android-6.0.1_r10</td>
+  <td>Marshmallow</td>
+  <td>Nexus Player</td>
+</tr>
+<tr>
+  <td>MMB29S</td>
+  <td>android-6.0.1_r9</td>
+  <td>Marshmallow</td>
+  <td>Nexus 5, Nexus 6, Nexus 9 (volantis/volantisg)</td>
+</tr>
+<tr>
+  <td>MMB29P</td>
+  <td>android-6.0.1_r8</td>
+  <td>Marshmallow</td>
+  <td>Nexus 5X, Nexus 6P</td>
+</tr>
+<tr>
+  <td>MMB29O</td>
+  <td>android-6.0.1_r7</td>
+  <td>Marshmallow</td>
+  <td>Nexus 7 (flo/deb)</td>
+</tr>
+<tr>
+  <td>MXB48K</td>
+  <td>android-6.0.1_r5</td>
+  <td>Marshmallow</td>
+  <td>Pixel C</td>
+</tr>
+<tr>
+  <td>MXB48J</td>
+  <td>android-6.0.1_r4</td>
+  <td>Marshmallow</td>
+  <td>Pixel C</td>
+</tr>
+<tr>
   <td>MMB29M</td>
   <td>android-6.0.1_r3</td>
   <td>Marshmallow</td>
@@ -273,10 +309,10 @@
   <td>Nexus 5, Nexus 6, Nexus 7 (flo/deb), Nexus 9 (volantis/volantisg), Nexus Player</td>
 </tr>
 <tr>
-  <td>LYZ28N</td>
-  <td>android-5.1.1_r28</td>
+  <td>LMY49F</td>
+  <td>android-5.1.1_r33</td>
   <td>Lollipop</td>
-  <td>Nexus 6 (For T-Mobile ONLY)</td>
+  <td>Nexus 9 (volantisg), Nexus 10</td>
 </tr>
 <tr>
   <td>LMY48Z</td>
@@ -285,6 +321,12 @@
   <td>Nexus 6, Nexus 7 (deb), Nexus 9 (volantisg), Nexus 10</td>
 </tr>
 <tr>
+  <td>LYZ28N</td>
+  <td>android-5.1.1_r28</td>
+  <td>Lollipop</td>
+  <td>Nexus 6 (For T-Mobile ONLY)</td>
+</tr>
+<tr>
   <td>LMY48Y</td>
   <td>android-5.1.1_r26</td>
   <td>Lollipop</td>
diff --git a/src/source/building-kernels.jd b/src/source/building-kernels.jd
index d517349..cba1463 100644
--- a/src/source/building-kernels.jd
+++ b/src/source/building-kernels.jd
@@ -41,6 +41,18 @@
     <th>Build configuration</th>
   </tr>
   <tr>
+    <td>angler</td>
+    <td>device/huawei/angler-kernel</td>
+    <td>kernel/msm</td>
+    <td>angler_defconfig</td>
+  </tr>
+  <tr>
+    <td>bullhead</td>
+    <td>device/lge/bullhead-kernel</td>
+    <td>kernel/msm</td>
+    <td>bullhead_defconfig</td>
+  </tr>
+  <tr>
     <td>shamu</td>
     <td>device/moto/shamu-kernel</td>
     <td>kernel/msm</td>
@@ -189,6 +201,7 @@
 <li>The <code>goldfish</code> project contains the kernel sources for the emulated
 platforms.</li>
 <li>The <code>msm</code> project has the sources for ADP1, ADP2, Nexus One, Nexus 4, Nexus 5, Nexus 6,
+Nexus 5X, Nexus 6P,
 and can be used as a starting point for work on Qualcomm MSM chipsets.</li>
 <li>The <code>omap</code> project is used for PandaBoard and Galaxy Nexus,
 and can be used as a starting point for work on TI OMAP chipsets.</li>
@@ -241,4 +254,4 @@
 
 <p class="note"><strong>Note:</strong> Kernel names differ by device. To locate
 the correct filename for your kernel, refer to
-<code>device/&lt;vendor&gt;/&lt;name&gt;</code> in the kernel source.</p>
\ No newline at end of file
+<code>device/&lt;vendor&gt;/&lt;name&gt;</code> in the kernel source.</p>
diff --git a/src/source/read-bug-reports.jd b/src/source/read-bug-reports.jd
new file mode 100644
index 0000000..0f82f3d
--- /dev/null
+++ b/src/source/read-bug-reports.jd
@@ -0,0 +1,1136 @@
+page.title=Reading Bug Reports
+@jd:body
+
+<!--
+    Copyright 2015 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>In this document</h2>
+    <ol id="auto-toc">
+    </ol>
+  </div>
+</div>
+
+<p>Bugs are a reality in any type of development&#8212;and bug reports are
+critical to identifying and solving problems. All versions of Android support
+capturing bug reports with <a href="http://developer.android.com/tools/help/adb.html">Android
+Debug Bridge (adb)</a>; Android versions 4.2 and higher support a
+<a href="http://developer.android.com/tools/device.html#developer-device-options">Developer
+Option</a> for taking bug reports and sharing via email, Drive, etc.</p>
+
+<p>Android bug reports contain <code>dumpsys</code>, <code>dumpstate</code>, and
+<code>logcat</code> data in text (.txt) format, enabling you to easily search
+for specific content. The following sections detail bug report components,
+describe common problems, and give helpful tips and <code>grep</code> commands
+for finding logs associated with those bugs. Most sections also include examples
+for <code>grep</code> command and output and/or <code>dumpsys</code> output.</p>
+
+<h2 id="logcat">Logcat</h2>
+<p>The <code>logcat</code> log is a string-based dump of all <code>logcat</code>
+information. The <strong>system</strong> part is reserved for the framework and
+has a longer history than <strong>main</strong> which contains everything else.
+Each line starts with <code>timestamp PID TID log-level</code>.</p>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" />
+    <strong><span class="toggle-content-text">Show example</span>
+    <span class="toggle-content-text" style="display:none;">Hide example</span></strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme">
+    <p><pre>------ SYSTEM LOG (logcat -v threadtime -d *:v) ------
+--------- beginning of system
+<i>Blah</i>
+<i>Blah</i>
+<i>Blah</i>
+
+--------- beginning of main
+<i>Blah </i>
+<i>Blah</i>
+<i>Blah</i></pre></p>
+  </div>
+</div>
+
+<h3 id="event-log">Viewing the event log</h3>
+<p>This log contains string representations of binary-formatted log messages. It
+is less noisy than the <code>logcat</code> log but also a little harder to read.
+When viewing event logs, you can search this section for specific process ID
+(PID) to see what a process has been doing. The basic format is:
+<code>timestamp PID TID log-level log-tag tag-values</code>.</p>
+
+<p>Log levels include the following:</p>
+<ul>
+<li>V: verbose</li>
+<li>D: debug</li>
+<li>I: information</li>
+<li>W: warning</li>
+<li>E: error</li>
+</ul>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" />
+    <strong><span class="toggle-content-text">Show example</span>
+    <span class="toggle-content-text" style="display:none;">Hide example</span></strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme">
+    <p><pre>------ EVENT LOG (logcat -b events -v threadtime -d *:v) ------
+09-28 13:47:34.179   785  5113 I am_proc_bound: [0,23054,com.google.android.gms.unstable]
+09-28 13:47:34.777   785  1975 I am_proc_start: [0,23134,10032,com.android.chrome,broadcast,com.android.chrome/org.chromium.chrome.browser.precache.PrecacheServiceLauncher]
+09-28 13:47:34.806   785  2764 I am_proc_bound: [0,23134,com.android.chrome]
+...</pre></p>
+  </div>
+</div>
+
+<h2 id="anrs-deadlocks">ANRs and deadlocks</h2>
+<p>Bugreports can help you identify what's causing
+<a href="http://developer.android.com/training/articles/perf-anr.html">Application
+Not Responding (ANR)</a> errors and deadlock events.</p>
+
+<h3 id="determine-anr-app">Identifying unresponsive apps</h3>
+<p>When an application does not respond within a certain time, usually due to a
+blocked or busy main thread, the system kills the process and dumps the stack to
+<code>/data/anr</code>. To discover the culprit behind an ANR, grep for
+<code>am_anr</code> in the binary event log.</p>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" />
+    <strong><span class="toggle-content-text">Show example</span>
+    <span class="toggle-content-text" style="display:none;">Hide example</span></strong>
+  </a></p>
+  <div class="toggle-content-toggleme">
+    <p><pre>grep "am_anr" bugreport-2015-10-01-18-13-48.txt
+10-01 18:12:49.599  4600  4614 I am_anr  : [0,29761,com.google.android.youtube,953695941,executing service com.google.android.youtube/com.google.android.apps.youtube.app.offline.transfer.OfflineTransferService]
+10-01 18:14:10.211  4600  4614 I am_anr  : [0,30363,com.google.android.apps.plus,953728580,executing service com.google.android.apps.plus/com.google.android.apps.photos.service.PhotosService]</pre></p>
+  </div>
+</div>
+<p></p>
+<p>You can also grep for <code>ANR in</code> in the <code>logcat</code>log,
+which contains more information about what was using CPU at the time of the ANR.
+</p>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" />
+    <strong><span class="toggle-content-text">Show example</span>
+    <span class="toggle-content-text" style="display:none;">Hide example</span></strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme">
+    <p><pre>grep "ANR in" bugreport-2015-10-01-18-13-48.txt
+10-01 18:13:11.984  4600  4614 E ActivityManager: ANR in com.google.android.youtube
+10-01 18:14:31.720  4600  4614 E ActivityManager: ANR in com.google.android.apps.plus
+10-01 18:14:31.720  4600  4614 E ActivityManager: PID: 30363
+10-01 18:14:31.720  4600  4614 E ActivityManager: Reason: executing service com.google.android.apps.plus/com.google.android.apps.photos.service.PhotosService
+10-01 18:14:31.720  4600  4614 E ActivityManager: Load: 35.27 / 23.9 / 16.18
+10-01 18:14:31.720  4600  4614 E ActivityManager: CPU usage from 16ms to 21868ms later:
+10-01 18:14:31.720  4600  4614 E ActivityManager:   74% 3361/mm-qcamera-daemon: 62% user + 12% kernel / faults: 15276 minor 10 major
+10-01 18:14:31.720  4600  4614 E ActivityManager:   41% 4600/system_server: 18% user + 23% kernel / faults: 18597 minor 309 major
+10-01 18:14:31.720  4600  4614 E ActivityManager:   32% 27420/com.google.android.GoogleCamera: 24% user + 7.8% kernel / faults: 48374 minor 338 major
+10-01 18:14:31.720  4600  4614 E ActivityManager:   16% 130/kswapd0: 0% user + 16% kernel
+10-01 18:14:31.720  4600  4614 E ActivityManager:   15% 283/mmcqd/0: 0% user + 15% kernel
+...
+10-01 18:14:31.720  4600  4614 E ActivityManager:   0.1% 27248/irq/503-synapti: 0%
+10-01 18:14:31.721  4600  4614 I ActivityManager: Killing 30363:com.google.android.apps.plus/u0a206 (adj 0): bg anr</pre></p>
+  </div>
+</div>
+
+<h3 id="find-stack-traces">Finding stack traces</h3>
+<p>You can often find stack traces that correspond to an ANR. Make sure the
+timestamp and PID on the VM traces match the ANR you are investigating, then
+check the main thread of the process. Keep in mind:</p>
+<ul>
+<li>The main thread tells you only what the thread was doing at the time of the
+ANR, which may or may not correspond to the true cause of the ANR. (The stack in
+the bug report may be innocent; something else may have been stuck for a long
+time&#8212;but not quite long enough to ANR&#8212;before becoming unstuck.)
+</li>
+<li>More than one set of stack traces (<code>VM TRACES JUST NOW</code> and
+<code>VM TRACES AT LAST ANR</code>) might exist. Make sure you are viewing the
+correct section.</li>
+</ul>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" />
+    <strong><span class="toggle-content-text">Show example</span>
+    <span class="toggle-content-text" style="display:none;">Hide example</span></strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme">
+    <p><pre>------ VM TRACES AT LAST ANR (/data/anr/traces.txt: 2015-10-01 18:14:41) ------
+
+----- pid 30363 at 2015-10-01 18:14:11 -----
+Cmd line: com.google.android.apps.plus
+Build fingerprint: 'google/angler/angler:6.0/MDA89D/2294819:userdebug/dev-keys'
+ABI: 'arm'
+Build type: optimized
+Zygote loaded classes=3978 post zygote classes=27
+Intern table: 45068 strong; 21 weak
+JNI: CheckJNI is off; globals=283 (plus 360 weak)
+Libraries: /system/lib/libandroid.so /system/lib/libcompiler_rt.so /system/lib/libjavacrypto.so /system/lib/libjnigraphics.so /system/lib/libmedia_jni.so /system/lib/libwebviewchromium_loader.so libjavacore.so (7)
+Heap: 29% free, 21MB/30MB; 32251 objects
+Dumping cumulative Gc timings
+Total number of allocations 32251
+Total bytes allocated 21MB
+Total bytes freed 0B
+Free memory 9MB
+Free memory until GC 9MB
+Free memory until OOME 490MB
+Total memory 30MB
+Max memory 512MB
+Zygote space size 1260KB
+Total mutator paused time: 0
+Total time waiting for GC to complete: 0
+Total GC count: 0
+Total GC time: 0
+Total blocking GC count: 0
+Total blocking GC time: 0
+
+suspend all histogram:  Sum: 119.728ms 99% C.I. 0.010ms-107.765ms Avg: 5.442ms Max: 119.562ms
+DALVIK THREADS (12):
+"Signal Catcher" daemon prio=5 tid=2 Runnable
+  | group="system" sCount=0 dsCount=0 obj=0x12c400a0 self=0xef460000
+  | sysTid=30368 nice=0 cgrp=default sched=0/0 handle=0xf4a69930
+  | state=R schedstat=( 9021773 5500523 26 ) utm=0 stm=0 core=1 HZ=100
+  | stack=0xf496d000-0xf496f000 stackSize=1014KB
+  | held mutexes= "mutator lock"(shared held)
+  native: #00 pc 0035a217  /system/lib/libart.so (art::DumpNativeStack(std::__1::basic_ostream&lt;char, std::__1::char_traits&lt;char&gt; &gt;&, int, char const*, art::ArtMethod*, void*)+126)
+  native: #01 pc 0033b03b  /system/lib/libart.so (art::Thread::Dump(std::__1::basic_ostream&lt;char, std::__1::char_traits&lt;char&gt; &gt;&) const+138)
+  native: #02 pc 00344701  /system/lib/libart.so (art::DumpCheckpoint::Run(art::Thread*)+424)
+  native: #03 pc 00345265  /system/lib/libart.so (art::ThreadList::RunCheckpoint(art::Closure*)+200)
+  native: #04 pc 00345769  /system/lib/libart.so (art::ThreadList::Dump(std::__1::basic_ostream&lt;char, std::__1::char_traits&lt;char&gt; &gt;&)+124)
+  native: #05 pc 00345e51  /system/lib/libart.so (art::ThreadList::DumpForSigQuit(std::__1::basic_ostream&lt;char, std::__1::char_traits&lt;char&gt; &gt;&)+312)
+  native: #06 pc 0031f829  /system/lib/libart.so (art::Runtime::DumpForSigQuit(std::__1::basic_ostream&lt;char, std::__1::char_traits&lt;char&gt; &gt;&)+68)
+  native: #07 pc 00326831  /system/lib/libart.so (art::SignalCatcher::HandleSigQuit()+896)
+  native: #08 pc 003270a1  /system/lib/libart.so (art::SignalCatcher::Run(void*)+324)
+  native: #09 pc 0003f813  /system/lib/libc.so (__pthread_start(void*)+30)
+  native: #10 pc 00019f75  /system/lib/libc.so (__start_thread+6)
+  (no managed stack frames)
+
+"main" prio=5 tid=1 Suspended
+  | group="main" sCount=1 dsCount=0 obj=0x747552a0 self=0xf5376500
+  | sysTid=30363 nice=0 cgrp=default sched=0/0 handle=0xf74feb34
+  | state=S schedstat=( 331107086 164153349 851 ) utm=6 stm=27 core=3 HZ=100
+  | stack=0xff00f000-0xff011000 stackSize=8MB
+  | held mutexes=
+  kernel: __switch_to+0x7c/0x88
+  kernel: futex_wait_queue_me+0xd4/0x130
+  kernel: futex_wait+0xf0/0x1f4
+  kernel: do_futex+0xcc/0x8f4
+  kernel: compat_SyS_futex+0xd0/0x14c
+  kernel: cpu_switch_to+0x48/0x4c
+  native: #00 pc 000175e8  /system/lib/libc.so (syscall+28)
+  native: #01 pc 000f5ced  /system/lib/libart.so (art::ConditionVariable::Wait(art::Thread*)+80)
+  native: #02 pc 00335353  /system/lib/libart.so (art::Thread::FullSuspendCheck()+838)
+  native: #03 pc 0011d3a7  /system/lib/libart.so (art::ClassLinker::LoadClassMembers(art::Thread*, art::DexFile const&, unsigned char const*, art::Handle&lt;art::mirror::Class&gt;, art::OatFile::OatClass const*)+746)
+  native: #04 pc 0011d81d  /system/lib/libart.so (art::ClassLinker::LoadClass(art::Thread*, art::DexFile const&, art::DexFile::ClassDef const&, art::Handle&lt;art::mirror::Class&gt;)+88)
+  native: #05 pc 00132059  /system/lib/libart.so (art::ClassLinker::DefineClass(art::Thread*, char const*, unsigned int, art::Handle&lt;art::mirror::ClassLoader&gt;, art::DexFile const&, art::DexFile::ClassDef const&)+320)
+  native: #06 pc 001326c1  /system/lib/libart.so (art::ClassLinker::FindClassInPathClassLoader(art::ScopedObjectAccessAlreadyRunnable&, art::Thread*, char const*, unsigned int, art::Handle&lt;art::mirror::ClassLoader&gt;, art::mirror::Class**)+688)
+  native: #07 pc 002cb1a1  /system/lib/libart.so (art::VMClassLoader_findLoadedClass(_JNIEnv*, _jclass*, _jobject*, _jstring*)+264)
+  native: #08 pc 002847fd  /data/dalvik-cache/arm/system@framework@boot.oat (Java_java_lang_VMClassLoader_findLoadedClass__Ljava_lang_ClassLoader_2Ljava_lang_String_2+112)
+  at java.lang.VMClassLoader.findLoadedClass!(Native method)
+  at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:362)
+  at java.lang.ClassLoader.loadClass(ClassLoader.java:499)
+  at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
+  at android.app.ActivityThread.installProvider(ActivityThread.java:5141)
+  at android.app.ActivityThread.installContentProviders(ActivityThread.java:4748)
+  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4688)
+  at android.app.ActivityThread.-wrap1(ActivityThread.java:-1)
+  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
+  at android.os.Handler.dispatchMessage(Handler.java:102)
+  at android.os.Looper.loop(Looper.java:148)
+  at android.app.ActivityThread.main(ActivityThread.java:5417)
+  at java.lang.reflect.Method.invoke!(Native method)
+  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
+  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
+
+  ...
+<i>  Stacks for other threads in this process follow</i>
+  ...</pre></p>
+  </div>
+</div>
+
+<h3 id="deadlocks">Finding deadlocks</h3>
+<p>Deadlocks often first appear as ANRs because threads are getting stuck. If
+the deadlock hits the system server, the watchdog will eventually kill it,
+leading to an entry in the log similar to:
+<code>WATCHDOG KILLING SYSTEM PROCESS</code>. From the user perspective, the
+device reboots, although technically this is a runtime restart rather than a
+true reboot.</p>
+
+<ul>
+<li>In a <strong>runtime</strong> restart, the system server dies and is
+restarted; the user sees the device return to the boot animation.</li>
+<li>In a <strong>reboot</strong>, the kernel has crashed; the user sees the
+device return to the Google boot logo.</li>
+</ul>
+
+<p>To find deadlocks, check the VM traces sections for a pattern of thread A
+waiting on something held by thread B, which in turn is waiting on something
+held by thread A.</p>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" />
+    <strong><span class="toggle-content-text">Show example</span>
+    <span class="toggle-content-text" style="display:none;">Hide example</span></strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme">
+    <p><pre>"Binder_B" prio=5 tid=73 Blocked
+  | group="main" sCount=1 dsCount=0 obj=0x13faa0a0 self=0x95e24800
+  | sysTid=2016 nice=0 cgrp=default sched=0/0 handle=0x8b68d930
+  | state=S schedstat=( 9351576559 4141431119 16920 ) utm=819 stm=116 core=1 HZ=100
+  | stack=0x8b591000-0x8b593000 stackSize=1014KB
+  | held mutexes=
+  at com.android.server.pm.UserManagerService.exists(UserManagerService.java:387)
+  - waiting to lock &lt;0x025f9b02&gt; (a android.util.ArrayMap) held by thread 20
+  at com.android.server.pm.PackageManagerService.getApplicationInfo(PackageManagerService.java:2848)
+  at com.android.server.AppOpsService.getOpsRawLocked(AppOpsService.java:881)
+  at com.android.server.AppOpsService.getOpsLocked(AppOpsService.java:856)
+  at com.android.server.AppOpsService.noteOperationUnchecked(AppOpsService.java:719)
+  - locked &lt;0x0231885a&gt; (a com.android.server.AppOpsService)
+  at com.android.server.AppOpsService.noteOperation(AppOpsService.java:713)
+  at com.android.server.AppOpsService$2.getMountMode(AppOpsService.java:260)
+  at com.android.server.MountService$MountServiceInternalImpl.getExternalStorageMountMode(MountService.java:3416)
+  at com.android.server.am.ActivityManagerService.startProcessLocked(ActivityManagerService.java:3228)
+  at com.android.server.am.ActivityManagerService.startProcessLocked(ActivityManagerService.java:3170)
+  at com.android.server.am.ActivityManagerService.startProcessLocked(ActivityManagerService.java:3059)
+  at com.android.server.am.BroadcastQueue.processNextBroadcast(BroadcastQueue.java:1070)
+  - locked &lt;0x044d166f&gt; (a com.android.server.am.ActivityManagerService)
+  at com.android.server.am.ActivityManagerService.finishReceiver(ActivityManagerService.java:16950)
+  at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:494)
+  at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2432)
+  at android.os.Binder.execTransact(Binder.java:453)
+...
+  "PackageManager" prio=5 tid=20 Blocked
+  | group="main" sCount=1 dsCount=0 obj=0x1304f4a0 self=0xa7f43900
+  | sysTid=1300 nice=10 cgrp=bg_non_interactive sched=0/0 handle=0x9fcf9930
+  | state=S schedstat=( 26190141996 13612154802 44357 ) utm=2410 stm=209 core=2 HZ=100
+  | stack=0x9fbf7000-0x9fbf9000 stackSize=1038KB
+  | held mutexes=
+  at com.android.server.AppOpsService.noteOperationUnchecked(AppOpsService.java:718)
+  - waiting to lock &lt;0x0231885a&gt; (a com.android.server.AppOpsService) held by thread 73
+  at com.android.server.AppOpsService.noteOperation(AppOpsService.java:713)
+  at com.android.server.AppOpsService$2.getMountMode(AppOpsService.java:260)
+  at com.android.server.AppOpsService$2.hasExternalStorage(AppOpsService.java:273)
+  at com.android.server.MountService$MountServiceInternalImpl.hasExternalStorage(MountService.java:3431)
+  at com.android.server.MountService.getVolumeList(MountService.java:2609)
+  at android.os.storage.StorageManager.getVolumeList(StorageManager.java:880)
+  at android.os.Environment$UserEnvironment.getExternalDirs(Environment.java:83)
+  at android.os.Environment.isExternalStorageEmulated(Environment.java:708)
+  at com.android.server.pm.PackageManagerService.isExternalMediaAvailable(PackageManagerService.java:9327)
+  at com.android.server.pm.PackageManagerService.startCleaningPackages(PackageManagerService.java:9367)
+  - locked &lt;0x025f9b02&gt; (a android.util.ArrayMap)
+  at com.android.server.pm.PackageManagerService$PackageHandler.doHandleMessage(PackageManagerService.java:1320)
+  at com.android.server.pm.PackageManagerService$PackageHandler.handleMessage(PackageManagerService.java:1122)
+  at android.os.Handler.dispatchMessage(Handler.java:102)
+  at android.os.Looper.loop(Looper.java:148)
+  at android.os.HandlerThread.run(HandlerThread.java:61)
+  at com.android.server.ServiceThread.run(ServiceThread.java:46)</pre></p>
+  </div>
+</div>
+
+
+<h2 id="activities">Activities</h2>
+<p>An <a href="http://developer.android.com/guide/components/activities.html">Activity</a>
+is an application component that provides a screen users interact with to do
+something such as dial a number, take a photo, send an email, etc. From a bug
+report perspective, an
+<a href="http://developer.android.com/reference/android/app/Activity.html">activity</a>
+is a single, focused thing a user can do, which makes locating the activity that
+was in focus during a crash very important. Activities (via ActivityManager)
+run processes, so locating all process stops and starts for a given activity can
+also aid troubleshooting.</p>
+
+<h3 id="history-focused-activities">Viewing focused activities</h3>
+<p>To view a history of focused activities, search for
+<code>am_focused_activity</code>.</p>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" />
+    <strong><span class="toggle-content-text">Show example</span>
+    <span class="toggle-content-text" style="display:none;">Hide example</span></strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme">
+    <p><pre>grep "am_focused_activity" bugreport-2015-10-01-18-13-48.txt
+10-01 18:10:41.409  4600 14112 I am_focused_activity: [0,com.google.android.GoogleCamera/com.android.camera.CameraActivity]
+10-01 18:11:17.313  4600  5687 I am_focused_activity: [0,com.google.android.googlequicksearchbox/com.google.android.launcher.GEL]
+10-01 18:11:52.747  4600 14113 I am_focused_activity: [0,com.google.android.GoogleCamera/com.android.camera.CameraActivity]
+10-01 18:14:07.762  4600  5687 I am_focused_activity: [0,com.google.android.googlequicksearchbox/com.google.android.launcher.GEL]</pre></p>
+  </div>
+</div>
+
+<h3 id="history-process-starts">Viewing process starts</h3>
+<p>To view a history of process starts, search for <code>Start proc</code>.</p>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" />
+    <strong><span class="toggle-content-text">Show example</span>
+    <span class="toggle-content-text" style="display:none;">Hide example</span></strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme">
+    <p><pre>grep "Start proc" bugreport-2015-10-01-18-13-48.txt
+10-01 18:09:15.309  4600  4612 I ActivityManager: Start proc 24533:com.metago.astro/u0a240 for broadcast com.metago.astro/com.inmobi.commons.analytics.androidsdk.IMAdTrackerReceiver
+10-01 18:09:15.687  4600 14112 I ActivityManager: Start proc 24548:com.google.android.apps.fitness/u0a173 for service com.google.android.apps.fitness/.api.services.ActivityUpsamplingService
+10-01 18:09:15.777  4600  6604 I ActivityManager: Start proc 24563:cloudtv.hdwidgets/u0a145 for broadcast cloudtv.hdwidgets/cloudtv.switches.SwitchSystemUpdateReceiver
+10-01 18:09:20.574  4600  6604 I ActivityManager: Start proc 24617:com.wageworks.ezreceipts/u0a111 for broadcast com.wageworks.ezreceipts/.ui.managers.IntentReceiver
+...</pre></p>
+  </div>
+</div>
+
+<h3 id="device-thrashing">Is the device thrashing?</h3>
+<p>To determine if the device is
+<a href="https://en.wikipedia.org/wiki/Thrashing_(computer_science)">thrashing</a>,
+check for an abnormal increase in activity around <code>am_proc_died</code> and
+<code>am_proc_start</code> in a short amount of time.</p>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" />
+    <strong><span class="toggle-content-text">Show example</span>
+    <span class="toggle-content-text" style="display:none;">Hide example</span></strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme">
+    <p><pre>grep -e "am_proc_died" -e "am_proc_start" bugreport-2015-10-01-18-13-48.txt
+10-01 18:07:06.494  4600  9696 I am_proc_died: [0,20074,com.android.musicfx]
+10-01 18:07:06.555  4600  6606 I am_proc_died: [0,31166,com.concur.breeze]
+10-01 18:07:06.566  4600 14112 I am_proc_died: [0,18812,com.google.android.apps.fitness]
+10-01 18:07:07.018  4600  7513 I am_proc_start: [0,20361,10113,com.sony.playmemories.mobile,broadcast,com.sony.playmemories.mobile/.service.StartupReceiver]
+10-01 18:07:07.357  4600  4614 I am_proc_start: [0,20381,10056,com.google.android.talk,service,com.google.android.talk/com.google.android.libraries.hangouts.video.CallService]
+10-01 18:07:07.784  4600  4612 I am_proc_start: [0,20402,10190,com.andcreate.app.trafficmonitor:loopback_measure_serivce,service,com.andcreate.app.trafficmonitor/.loopback.LoopbackMeasureService]
+10-01 18:07:10.753  4600  5997 I am_proc_start: [0,20450,10097,com.amazon.mShop.android.shopping,broadcast,com.amazon.mShop.android.shopping/com.amazon.identity.auth.device.storage.LambortishClock$ChangeTimestampsBroadcastReceiver]
+10-01 18:07:15.267  4600  6605 I am_proc_start: [0,20539,10173,com.google.android.apps.fitness,service,com.google.android.apps.fitness/.api.services.ActivityUpsamplingService]
+10-01 18:07:15.985  4600  4612 I am_proc_start: [0,20568,10022,com.android.musicfx,broadcast,com.android.musicfx/.ControlPanelReceiver]
+10-01 18:07:16.315  4600  7512 I am_proc_died: [0,20096,com.google.android.GoogleCamera]</pre></p>
+  </div>
+</div>
+
+<h2 id="memory">Memory</h2>
+<p>Because Android devices often have constrained physical memory, managing
+random-access memory (RAM) is critical. Bug reports contain several indicators
+of low memory as well as a dumpstate that provides a memory snapshot.</p>
+
+<h3 id="low-memory">Identifying low memory</h3>
+<p>Low memory can cause the system to thrash as it kills some processes to free
+memory but continues to start other processes. To view corroborating evidence of
+low memory, check for concentrations of <code>am_proc_died</code> and
+<code>am_proc_start</code> entries in the binary event log.</p>
+
+<p>Low memory can also slow task switching and thwart return attempts (because
+the task the user was trying to return to was killed). If the launcher was
+killed, it restarts when the user touches the home button and logs show the
+launcher reload its content.</p>
+
+<h4 id="historical-low-memory">Viewing historical indicators</h4>
+<p>The <code>am_low_memory</code> entry in the binary event log indicates the
+last cached process has died. After this, the system starts killing services.
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" />
+    <strong><span class="toggle-content-text">Show example</span>
+    <span class="toggle-content-text" style="display:none;">Hide example</span></strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme">
+    <p><pre>grep "am_low_memory" bugreport-2015-10-01-18-13-48.txt
+10-01 18:11:02.219  4600  7513 I am_low_memory: 41
+10-01 18:12:18.526  4600 14112 I am_low_memory: 39
+10-01 18:12:18.874  4600  7514 I am_low_memory: 38
+10-01 18:12:22.570  4600 14112 I am_low_memory: 40
+10-01 18:12:34.811  4600 20319 I am_low_memory: 43
+10-01 18:12:37.945  4600  6521 I am_low_memory: 43
+10-01 18:12:47.804  4600 14110 I am_low_memory: 43</pre></p>
+  </div>
+</div>
+
+<h4 id="thrashing-indicators">Viewing thrashing indicators</h4>
+<p>Other indicators of system thrashing (paging, direct reclaim, etc.) include
+<code>kswapd</code>, <code>kworker</code>, and <code>mmcqd</code> consuming
+cycles. (Keep in mind the bugreport being gathered can influence thrashing
+indicators.)</p>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" />
+    <strong><span class="toggle-content-text">Show example</span>
+    <span class="toggle-content-text" style="display:none;">Hide example</span></strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme">
+    <p><pre>------ CPU INFO (top -n 1 -d 1 -m 30 -t) ------
+
+User 15%, System 54%, IOW 28%, IRQ 0%
+User 82 + Nice 2 + Sys 287 + Idle 1 + IOW 152 + IRQ 0 + SIRQ 5 = 529
+
+  PID   TID PR CPU% S     VSS     RSS PCY UID      Thread          Proc
+15229 15229  0  19% R      0K      0K  fg root     kworker/0:2
+29512 29517  1   7% D 1173524K 101188K  bg u0_a27   Signal Catcher  com.google.android.talk
+24565 24570  3   6% D 2090920K 145168K  fg u0_a22   Signal Catcher  com.google.android.googlequicksearchbox:search
+19525 19525  2   6% R   3476K   1644K  fg shell    top             top
+24957 24962  2   5% R 1706928K 125716K  bg u0_a47   Signal Catcher  com.google.android.GoogleCamera
+19519 19519  3   4% S      0K      0K  fg root     kworker/3:1
+  120   120  0   3% S      0K      0K  fg root     mmcqd/1
+18233 18233  1   3% S      0K      0K  fg root     kworker/1:1
+25589 25594  1   2% D 1270476K  75776K  fg u0_a8    Signal Catcher  com.google.android.gms
+19399 19399  2   1% S      0K      0K  fg root     kworker/2:2
+ 1963  1978  1   0% S 1819100K 125136K  fg system   android.fg      system_server
+ 1963  1981  3   0% S 1819100K 125136K  fg system   android.display system_server</pre></p>
+  </div>
+</div>
+<p></p>
+
+<p>ANR logs can provide a similar memory snapshot.</p>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" />
+    <strong><span class="toggle-content-text">Show example</span>
+    <span class="toggle-content-text" style="display:none;">Hide example</span></strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme">
+    <p><pre>10-03 17:19:59.959  1963  1976 E ActivityManager: ANR in com.google.android.apps.magazines
+10-03 17:19:59.959  1963  1976 E ActivityManager: PID: 18819
+10-03 17:19:59.959  1963  1976 E ActivityManager: Reason: Broadcast of Intent { act=android.net.conn.CONNECTIVITY_CHANGE flg=0x4000010 cmp=com.google.android.apps.magazines/com.google.apps.dots.android.newsstand.appwidget.NewsWidgetProvider (has extras) }
+10-03 17:19:59.959  1963  1976 E ActivityManager: Load: 19.19 / 14.76 / 12.03
+10-03 17:19:59.959  1963  1976 E ActivityManager: CPU usage from 0ms to 11463ms later:
+10-03 17:19:59.959  1963  1976 E ActivityManager:   54% 15229/kworker/0:2: 0% user + 54% kernel
+10-03 17:19:59.959  1963  1976 E ActivityManager:   38% 1963/system_server: 14% user + 23% kernel / faults: 17152 minor 1073 major
+10-03 17:19:59.959  1963  1976 E ActivityManager:   11% 120/mmcqd/1: 0% user + 11% kernel
+10-03 17:19:59.959  1963  1976 E ActivityManager:   10% 2737/com.android.systemui: 4.7% user + 5.6% kernel / faults: 7211 minor 149 major
+10-03 17:19:59.959  1963  1976 E ActivityManager:   0.2% 1451/debuggerd: 0% user + 0.2% kernel / faults: 15211 minor 147 major
+10-03 17:19:59.959  1963  1976 E ActivityManager:   8.7% 6162/com.twofortyfouram.locale: 4% user + 4.7% kernel / faults: 4924 minor 260 major
+10-03 17:19:59.959  1963  1976 E ActivityManager:   6.1% 24565/com.google.android.googlequicksearchbox:search: 2.4% user + 3.7% kernel / faults: 2902 minor 129 major
+10-03 17:19:59.959  1963  1976 E ActivityManager:   6% 55/kswapd0: 0% user + 6% kernel
+10-03 17:19:59.959  1963  1976 E ActivityManager:   4.9% 18819/com.google.android.apps.magazines: 1.5% user + 3.3% kernel / faults: 10129 minor 986 major
+10-03 17:19:59.959  1963  1976 E ActivityManager:   2.8% 18233/kworker/1:1: 0% user + 2.8% kernel
+10-03 17:19:59.959  1963  1976 E ActivityManager:   4.2% 3145/com.android.phone: 2% user + 2.2% kernel / faults: 3005 minor 43 major
+10-03 17:19:59.959  1963  1976 E ActivityManager:   4.2% 8084/com.android.chrome: 2% user + 2.1% kernel / faults: 4798 minor 380 major
+10-03 17:19:59.959  1963  1976 E ActivityManager:   3.4% 182/surfaceflinger: 1.1% user + 2.3% kernel / faults: 842 minor 13 major
+10-03 17:19:59.959  1963  1976 E ActivityManager:   3% 18236/kworker/1:2: 0% user + 3% kernel
+10-03 17:19:59.959  1963  1976 E ActivityManager:   2.9% 19231/com.android.systemui:screenshot: 0.8% user + 2.1% kernel / faults: 6119 minor 348 major
+10-03 17:19:59.959  1963  1976 E ActivityManager:   2.3% 15350/kworker/0:4: 0% user + 2.3% kernel
+10-03 17:19:59.959  1963  1976 E ActivityManager:   2.2% 1454/mediaserver: 0% user + 2.2% kernel / faults: 479 minor 6 major
+10-03 17:19:59.959  1963  1976 E ActivityManager:   2% 16496/com.android.chrome:sandboxed_process10: 0.1% user + 1.8% kernel / faults: 3610 minor 234 major
+10-03 17:19:59.959  1963  1976 E ActivityManager:   1% 3119/com.android.nfc: 0.4% user + 0.5% kernel / faults: 1789 minor 17 major
+10-03 17:19:59.959  1963  1976 E ActivityManager:   1.7% 19337/com.jarettmillard.localeconnectiontype:background: 0.1% user + 1.5% kernel / faults: 7854 minor 439 major
+10-03 17:19:59.959  1963  1976 E ActivityManager:   0.7% 3066/com.google.android.inputmethod.latin: 0.3% user + 0.3% kernel / faults: 1336 minor 7 major
+10-03 17:19:59.959  1963  1976 E ActivityManager:   1% 25589/com.google.android.gms: 0.3% user + 0.6% kernel / faults: 2867 minor 237 major
+10-03 17:19:59.959  1963  1976 E ActivityManager:   0.9% 1460/sensors.qcom: 0.5% user + 0.4% kernel / faults: 262 minor 5 major
+10-03 17:19:59.959  1963  1976 E ActivityManager:   0.8% 3650/mpdecision: 0% user + 0.8% kernel / faults: 160 minor 1 major
+10-03 17:19:59.959  1963  1976 E ActivityManager:   0.1% 3132/com.redbend.vdmc: 0% user + 0% kernel / faults: 1746 minor 5 major</pre></p>
+  </div>
+</div>
+
+<h3 id="memory-snapshot">Getting a memory snapshot</h3>
+<p>The memory snapshot is a dumpstate that lists running Java and native
+processes (for details, refer to
+<a href="https://developer.android.com/tools/debugging/debugging-memory.html#ViewingAllocations">Viewing
+Overall Memory Allocations</a>). Keep in mind the snapshot gives only the state
+at a specific moment in time; the system might have been in better (or worse)
+shape before the snapshot.</p>
+<ul>
+<li>To understand how long a process runs, see
+<a href="#process-runtime">Process runtime</a>.</li>
+<li>To understand why something is currently running, see
+<a href="#why-is-process-running">Why is a process running?</a></li>
+</ul>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" />
+    <strong><span class="toggle-content-text">Show example</span>
+    <span class="toggle-content-text" style="display:none;">Hide example</span></strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme">
+    <p><pre>Total PSS by OOM adjustment:
+    86752 kB: Native
+               22645 kB: surfaceflinger (pid 197)
+               18597 kB: mediaserver (pid 204)
+               ...
+   136959 kB: System
+              136959 kB: system (pid 785)
+   220218 kB: Persistent
+              138859 kB: com.android.systemui (pid 947 / activities)
+               39178 kB: com.android.nfc (pid 1636)
+               28313 kB: com.android.phone (pid 1659)
+               13868 kB: com.redbend.vdmc (pid 1646)
+     9534 kB: Persistent Service
+                9534 kB: com.android.bluetooth (pid 23807)
+   178604 kB: Foreground
+              168620 kB: com.google.android.googlequicksearchbox (pid 1675 / activities)
+                9984 kB: com.google.android.apps.maps (pid 13952)
+   188286 kB: Visible
+               85326 kB: com.google.android.wearable.app (pid 1535)
+               38978 kB: com.google.process.gapps (pid 1510)
+               31936 kB: com.google.android.gms.persistent (pid 2072)
+               27950 kB: com.google.android.gms.wearable (pid 1601)
+                4096 kB: com.google.android.googlequicksearchbox:interactor (pid 1550)
+    52948 kB: Perceptible
+               52948 kB: com.google.android.inputmethod.latin (pid 1566)
+   150851 kB: A Services
+               81121 kB: com.google.android.gms (pid 1814)
+               37586 kB: com.google.android.talk (pid 9584)
+               10949 kB: com.google.android.music:main (pid 4019)
+               10727 kB: com.motorola.targetnotif (pid 31071)
+               10468 kB: com.google.android.GoogleCamera (pid 9984)
+    33298 kB: Previous
+               33298 kB: com.android.settings (pid 9673 / activities)
+   165188 kB: B Services
+               49490 kB: com.facebook.katana (pid 15035)
+               22483 kB: com.whatsapp (pid 28694)
+               21308 kB: com.iPass.OpenMobile (pid 5325)
+               19788 kB: com.google.android.apps.googlevoice (pid 23934)
+               17399 kB: com.google.android.googlequicksearchbox:search (pid 30359)
+                9073 kB: com.google.android.apps.youtube.unplugged (pid 21194)
+                7660 kB: com.iPass.OpenMobile:remote (pid 23754)
+                7291 kB: com.pujie.wristwear.pujieblack (pid 24240)
+                7157 kB: com.instagram.android:mqtt (pid 9530)
+                3539 kB: com.qualcomm.qcrilmsgtunnel (pid 16186)
+   204324 kB: Cached
+               43424 kB: com.amazon.mShop.android (pid 13558)
+               22563 kB: com.google.android.apps.magazines (pid 13844)
+               ...
+                4298 kB: com.google.android.apps.enterprise.dmagent (pid 13826)</pre></p>
+  </div>
+</div>
+
+<h2 id="broadcasts">Broadcasts</h2>
+<p>Applications generate broadcasts to send events within the current
+application or to another application. Broadcast receivers subscribe to specific
+messages (via filters), enabling them to both listen and respond to a broadcast.
+Bug reports contain information about sent broadcasts and unsent broadcasts, as
+well as a dumpsys of all receivers listening to a specific broadcast.</p>
+
+<h3 id="historical-broadcasts">Viewing historical broadcasts</h3>
+<p>Historical broadcasts are those that have already been sent, listed in
+reverse chronological order.</p>
+
+<p>The <strong>summary</strong> section is an overview of the last 300
+foreground broadcasts and the last 300 background broadcasts.</p>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" />
+    <strong><span class="toggle-content-text">Show example</span>
+    <span class="toggle-content-text" style="display:none;">Hide example</span></strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme">
+    <p><pre> Historical broadcasts summary [foreground]:
+ #0: act=android.intent.action.SCREEN_ON flg=0x50000010
+    +1ms dispatch +90ms finish
+    enq=2015-10-29 17:10:51 disp=2015-10-29 17:10:51 fin=2015-10-29 17:10:51
+  #1: act=android.intent.action.SCREEN_OFF flg=0x50000010
+    0 dispatch +60ms finish
+    enq=2015-10-29 17:10:05 disp=2015-10-29 17:10:05 fin=2015-10-29 17:10:05
+ ...
+ Historical broadcasts summary [background]:
+ ...</pre></p>
+  </div>
+</div>
+<p></p>
+
+<p>The <strong>detail</strong> section contains complete information for the
+last 50 foreground broadcasts and the last 50 background broadcasts, as well as
+the receivers for each broadcast. Receivers that have a:</p>
+<ul>
+<li><code>BroadcastRecord</code> entry are registered at runtime and are sent
+only to already running processes.</li>
+<li><code>ResolveInfo</code> entry are registered through manifest entries. The
+ActivityManager starts the process for each <code>ResolveInfo</code> if it is
+not already running.</li>
+</ul>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" />
+    <strong><span class="toggle-content-text">Show example</span>
+    <span class="toggle-content-text" style="display:none;">Hide example</span></strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme">
+    <p><pre>Historical broadcasts [foreground]:
+ ...
+ Historical broadcasts [background]:
+ Historical Broadcast background #0:
+ ...
+ Historical Broadcast background #5:
+    BroadcastRecord{18dbb16 u0 android.intent.action.USER_PRESENT} to user 0
+    Intent { act=android.intent.action.USER_PRESENT flg=0x24000010 }
+    caller=com.android.systemui 2925:com.android.systemui/u0a27 pid=2925 uid=10027
+    enqueueClockTime=2015-10-29 17:10:55 dispatchClockTime=2015-10-29 17:10:55
+    dispatchTime=-2s321ms (0 since enq) finishTime=-2s320ms (+1ms since disp)
+    Receiver #0: BroadcastFilter{8181cc1 u-1 ReceiverList{5d929a8 902 system/1000/u-1 local:eca4dcb}}
+    Receiver #1: BroadcastFilter{6371c97 u-1 ReceiverList{2938b16 902 system/1000/u-1 local:840b831}}
+    ...
+    Receiver #19: BroadcastFilter{93f16b u0 ReceiverList{5c61eba 17016 com.google.android.gm/10079/u0 remote:24083e5}}
+ ...
+ Historical Broadcast background #37:
+    BroadcastRecord{7f6dd6 u0 android.hardware.action.NEW_PICTURE} to user 0
+    Intent { act=android.hardware.action.NEW_PICTURE dat=content://media/external/images/media/6345 flg=0x10 }
+    caller=com.google.android.GoogleCamera 32734:com.google.android.GoogleCamera/u0a53 pid=32734 uid=10053
+    enqueueClockTime=2015-10-29 17:09:48 dispatchClockTime=2015-10-29 17:09:49
+    dispatchTime=-45s720ms (+399ms since enq) finishTime=-45s701ms (+19ms since disp)
+    resultTo=null resultCode=0 resultData=null
+    nextReceiver=4 receiver=null
+    Receiver #0: ResolveInfo{33d2857 com.google.android.gms/com.google.android.libraries.social.mediamonitor.MediaMonitor m=0x608000}
+      priority=0 preferredOrder=0 match=0x608000 specificIndex=-1 isDefault=false
+      ActivityInfo:
+        name=com.google.android.libraries.social.mediamonitor.MediaMonitor
+        packageName=com.google.android.gms
+        enabled=true exported=true processName=com.google.android.gms
+        ...
+    Receiver #1: ResolveInfo{d9edf44 com.google.android.apps.maps/com.google.android.apps.gmm.ugc.clientnotification.StartPhotoTakenNotifierServiceReceiver m=0x608000}
+      priority=0 preferredOrder=0 match=0x608000 specificIndex=-1 isDefault=false
+      ActivityInfo:
+        name=com.google.android.apps.gmm.ugc.clientnotification.StartPhotoTakenNotifierServiceReceiver
+        packageName=com.google.android.apps.maps
+        enabled=true exported=true processName=com.google.android.apps.maps
+        ...
+    Receiver #2: ResolveInfo{743f82d com.google.android.apps.photos/com.google.android.libraries.social.mediamonitor.MediaMonitor m=0x608000}
+      priority=0 preferredOrder=0 match=0x608000 specificIndex=-1 isDefault=false
+      ActivityInfo:
+        name=com.google.android.libraries.social.mediamonitor.MediaMonitor
+        packageName=com.google.android.apps.photos
+        enabled=true exported=true processName=com.google.android.apps.photos
+        ...
+    Receiver #3: ResolveInfo{d5c9162 com.google.android.apps.plus/com.google.android.libraries.social.mediamonitor.MediaMonitor m=0x608000}
+      priority=0 preferredOrder=0 match=0x608000 specificIndex=-1 isDefault=false
+      ActivityInfo:
+        name=com.google.android.libraries.social.mediamonitor.MediaMonitor
+        packageName=com.google.android.apps.plus
+        enabled=true exported=true processName=com.google.android.apps.plus
+        ...</pre></p>
+  </div>
+</div>
+
+<h3 id="active-broadcasts">Viewing active broadcasts</h3>
+<p>Active broadcasts are those that have yet to be sent. A large number in the
+queue means the system can't dispatch the broadcasts fast enough to keep up.</p>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" />
+    <strong><span class="toggle-content-text">Show example</span>
+    <span class="toggle-content-text" style="display:none;">Hide example</span></strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme">
+    <p><pre> Active ordered broadcasts [background]:
+ Active Ordered Broadcast background #133: <i>// size of queue</i>
+ ...</pre></p>
+  </div>
+</div>
+
+<h3 id="broadcast-listeners">Viewing broadcast listeners</h3>
+<p>To view a list of receivers listening for a broadcast, check the Receiver
+Resolver Table in the <code>dumpsys activity broadcasts</code>. The following
+example displays all receivers listening for <code>USER_PRESENT</code>.</p>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" />
+    <strong><span class="toggle-content-text">Show example</span>
+    <span class="toggle-content-text" style="display:none;">Hide example</span></strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme">
+    <p><pre>-------------------------------------------------------------------------------
+ACTIVITY MANAGER BROADCAST STATE (dumpsys activity broadcasts)
+..
+  Receiver Resolver Table:
+    Full MIME Types:
+    ..
+    Wild MIME Types:
+    ..
+    Schemes:
+    ..
+    Non-Data Actions:
+    ..
+        android.intent.action.USER_PRESENT:
+          BroadcastFilter{8181cc1 u-1 ReceiverList{5d929a8 902 system/1000/u-1 local:eca4dcb}}
+          BroadcastFilter{6371c97 u-1 ReceiverList{2938b16 902 system/1000/u-1 local:840b831}}
+          BroadcastFilter{320c00 u0 ReceiverList{d3a6283 902 system/1000/u0 local:799c532}}
+          BroadcastFilter{e486048 u0 ReceiverList{36fbaeb 902 system/1000/u0 local:5f51e3a}}
+          BroadcastFilter{22b02 u-1 ReceiverList{b3f744d 902 system/1000/u-1 local:de837e4}}
+          BroadcastFilter{3e989ab u0 ReceiverList{f8deffa 2981 com.google.process.gapps/10012/u0 remote:26bd225}}
+          BroadcastFilter{fb56150 u0 ReceiverList{22b7b13 2925 com.android.systemui/10027/u0 remote:c54a602}}
+          BroadcastFilter{63bbb6 u-1 ReceiverList{ba6c751 3484 com.android.nfc/1027/u-1 remote:5c4a478}}
+          BroadcastFilter{95ad20d u0 ReceiverList{d8374a4 3586 com.google.android.googlequicksearchbox/10029/u0 remote:feb3737}}
+          BroadcastFilter{fdef551 u0 ReceiverList{28ca78 3745 com.google.android.gms.persistent/10012/u0 remote:f23afdb}}
+          BroadcastFilter{9830707 u0 ReceiverList{aabd946 3745 com.google.android.gms.persistent/10012/u0 remote:a4da121}}
+          BroadcastFilter{83c43d2 u0 ReceiverList{d422e5d 3745 com.google.android.gms.persistent/10012/u0 remote:f585034}}
+          BroadcastFilter{8890378 u0 ReceiverList{26d2cdb 3745 com.google.android.gms.persistent/10012/u0 remote:dfa61ea}}
+          BroadcastFilter{7bbb7 u0 ReceiverList{214b2b6 3745 com.google.android.gms.persistent/10012/u0 remote:8353a51}}
+          BroadcastFilter{38d3566 u0 ReceiverList{de859c1 3745 com.google.android.gms.persistent/10012/u0 remote:e003aa8}}
+          BroadcastFilter{3435d9f u0 ReceiverList{6e38b3e 3745 com.google.android.gms.persistent/10012/u0 remote:8dd7ff9}}
+          BroadcastFilter{d0a34bb u0 ReceiverList{5091d4a 3745 com.google.android.gms.persistent/10012/u0 remote:d6d22b5}}
+          BroadcastFilter{d43c416 u0 ReceiverList{51a3531 3745 com.google.android.gms.persistent/10012/u0 remote:d0b9dd8}}
+          BroadcastFilter{aabf36d u0 ReceiverList{a88bf84 3745 com.google.android.gms.persistent/10012/u0 remote:a9d6197}}
+          BroadcastFilter{93f16b u0 ReceiverList{5c61eba 17016 com.google.android.gm/10079/u0 remote:24083e5}}
+          BroadcastFilter{68f794e u0 ReceiverList{4cb1c49 947 com.google.android.googlequicksearchbox:search/10029/u0 remote:251d250}}
+      ..
+    MIME Typed Actions:</pre></p>
+  </div>
+</div>
+
+<h2 id="monitor contention">Monitor Contention</h2>
+<p>Monitor contention logging can sometimes indicate actual monitor contention,
+but most often indicates the system is so loaded that everything has slowed down.
+You might see long monitor events logged by ART in system or event log.</p>
+
+<p>In the system log:</p>
+<p><pre>10-01 18:12:44.343 29761 29914 W art     : Long monitor contention event with owner method=void android.database.sqlite.SQLiteClosable.acquireReference() from SQLiteClosable.java:52 waiters=0 for 3.914s</pre></p>
+
+<p>In the event log:</p>
+<p><pre>10-01 18:12:44.364 29761 29914 I dvm_lock_sample: [com.google.android.youtube,0,pool-3-thread-9,3914,ScheduledTaskMaster.java,138,SQLiteClosable.java,52,100]</pre></p>
+
+<h2 id="background-compilation">Background Compilation</h2>
+<p>Compilation can be expensive and load the device.</p>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" />
+    <strong><span class="toggle-content-text">Show example</span>
+    <span class="toggle-content-text" style="display:none;">Hide example</span></strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme">
+    <p><pre>09-14 06:27:05.670  2508  2587 E ActivityManager: CPU usage from 0ms to 5857ms later:
+09-14 06:27:05.670  2508  2587 E ActivityManager:   84% 5708/dex2oat: 81% user + 2.3% kernel / faults: 3731 minor 1 major
+09-14 06:27:05.670  2508  2587 E ActivityManager:   73% 2508/system_server: 21% user + 51% kernel / faults: 10019 minor 28 major
+09-14 06:27:05.670  2508  2587 E ActivityManager:   1% 3935/com.android.phone: 0.3% user + 0.6% kernel / faults: 2684 minor 2 major</pre></p>
+  </div>
+</div>
+<p></p>
+
+<p>Compilation might occur in the background when Google Play store updates are
+downloading. In this case, messages from the Google Play store app
+(<code>finsky</code>) and <code>installd</code> appear prior to
+<code>dex2oat</code> messages.</p>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" />
+    <strong><span class="toggle-content-text">Show example</span>
+    <span class="toggle-content-text" style="display:none;">Hide example</span></strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme">
+    <p><pre>10-07 08:42:33.725 11051 11051 D Finsky  : [1] InstallerTask.advanceState: Prepare to patch com.garmin.android.apps.virb (com.garmin.android.apps.virb) from content://downloads/my_downloads/3602 format 2
+10-07 08:42:33.752   495   495 I installd: free_cache(48637657) avail 15111192576
+…
+10-07 08:42:39.998  2497  2567 I PackageManager.DexOptimizer: Running dexopt (dex2oat) on: /data/app/vmdl436577137.tmp/base.apk pkg=com.garmin.android.apps.virb isa=arm vmSafeMode=false debuggable=false oatDir = /data/app/vmdl436577137.tmp/oat bootComplete=true
+…</pre></p>
+  </div>
+</div>
+<p></p>
+
+<p>Compilation might also occur in the background when an application is loading
+a dex file that has not yet been compiled. In this case, you won't see
+<code>finsky</code> or <code>installd</code> logging.</p>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" />
+    <strong><span class="toggle-content-text">Show example</span>
+    <span class="toggle-content-text" style="display:none;">Hide example</span></strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme">
+    <p><pre>09-14 07:29:20.433 15736 15736 I dex2oat : /system/bin/dex2oat -j4 --dex-file=/data/user/0/com.facebook.katana/app_secondary_program_dex/program-72cef82b591768306676e10161c886b58b34315a308602be.dex.jar --oat-file=/data/user/0/com.facebook.katana/app_secondary_program_dex_opt/program-72cef82b591768306676e10161c886b58b34315a308602be.dex.dex
+...
+09-14 07:29:25.102 15736 15736 I dex2oat : dex2oat took 4.669s (threads: 4) arena alloc=7MB java alloc=3MB native alloc=29MB free=4MB</pre></p>
+  </div>
+</div>
+
+<h2 id="narrative">Narrative</h2>
+<p>Establishing the narrative of a problem (how it started, what happened, how
+the system reacted) requires a solid timeline of events. You can use the
+information in the bug report to sync timelines across multiple logs and
+determine the exact timestamp of the bug report.</p>
+
+<h3 id="timelines">Syncing timelines</h3>
+<p>A bugreport reflects multiple parallel timelines: system log, event log,
+kernel log, and multiple specialized timelines for broadcasts, battery stats,
+etc. Unfortunately, timelines are often reported using different time bases.</p>
+
+<p>The system and event log timestamps are in the same timezone as the user (as
+are most other timestamps). For example, when user taps the home button, the
+system log reports:</p>
+<p><pre>10-03 17:19:52.939  1963  2071 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=com.google.android.googlequicksearchbox/com.google.android.launcher.GEL (has extras)} from uid 1000 on display 0</pre></p>
+
+<p>For the same action, the event log reports:</p>
+<p><pre>10-03 17:19:54.279  1963  2071 I am_focused_activity: [0,com.google.android.googlequicksearchbox/com.google.android.launcher.GEL]</pre></p>
+
+<p>Kernel (<code>dmesg</code>) logs use a different time base, tagging log items
+with seconds since bootloader completes. To register this timescale to other
+timescales, search for <em>suspend exit</em> and <em>suspend entry</em> messages:</p>
+<p><pre>&lt;6&gt;[201640.779997] PM: suspend exit 2015-10-03 19:11:06.646094058 UTC
+…
+&lt;6&gt;[201644.854315] PM: suspend entry 2015-10-03 19:11:10.720416452 UTC</pre></p>
+
+<p>Because kernel logs might not include time while in suspend, you should
+piecewise register the log between the suspend entry and exit messages.
+Additionally, kernel logs use UTC timezone and must be adjusted to the user
+timezone.</p>
+
+<h3 id="time-of-bugreport">Identifying bugreport time</h3>
+<p>To determine when a bugreport was taken, first check the system log (Logcat)
+for the <code>dumpstate: begin</code>:</p>
+<p><pre>10-03 17:19:54.322 19398 19398 I dumpstate: begin</pre></p>
+
+<p>Next, check the kernel log (<code>dmesg</code>) timestamps for the <code>Starting service
+'bugreport'</code> message:</p>
+<p><pre>&lt;5&gt;[207064.285315] init: Starting service 'bugreport'...</pre></p>
+
+<p>Work backwards to correlate the two events, keeping in mind the caveats
+mentioned in <a href="#timelines">Syncing timelines</a>. While there's a lot
+happening after the bugreport is initiated, most activity isn't very useful as
+the act of taking the bugreport loads the system substantially.</p>
+
+<h2 id="power">Power</h2>
+
+<p>The event log contains screen power status, where 0 is screen off, 1 is
+screen on, and 2 is for keyguard done.</p>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" />
+    <strong><span class="toggle-content-text">Show example</span>
+    <span class="toggle-content-text" style="display:none;">Hide example</span></strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme">
+    <p><pre>grep screen_toggled bugreport-2015-10-18-16-52-22.txt
+10-18 15:05:04.383   992   992 I screen_toggled: 1
+10-18 15:05:07.010   992   992 I screen_toggled: 0
+10-18 15:23:15.063   992   992 I screen_toggled: 1
+10-18 15:23:25.684   992   992 I screen_toggled: 0
+10-18 15:36:31.623   992   992 I screen_toggled: 1
+10-18 15:36:37.660  3283  3283 I screen_toggled: 2</pre></p>
+  </div>
+</div>
+
+<h2 id="packages">Packages</h2>
+<p>The DUMP OF SERVICE package contains application versions (and other useful
+info).</p>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" />
+    <strong><span class="toggle-content-text">Show example</span>
+    <span class="toggle-content-text" style="display:none;">Hide example</span></strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme">
+    <p><pre>...
+Packages:
+...
+ Package [com.google.android.gms] (3cf534b):
+   userId=10013
+   sharedUser=SharedUserSetting{98f3d28 com.google.uid.shared/10013}
+   pkg=Package{b8f6a41 com.google.android.gms}
+   codePath=/system/priv-app/PrebuiltGmsCore
+   resourcePath=/system/priv-app/PrebuiltGmsCore
+   legacyNativeLibraryDir=/system/priv-app/PrebuiltGmsCore/lib
+   primaryCpuAbi=arm64-v8a
+   secondaryCpuAbi=armeabi-v7a
+   versionCode=8186448 targetSdk=23
+   versionName=8.1.86 (2287566-448)
+   splits=[base]
+   applicationInfo=ApplicationInfo{5158507 com.google.android.gms}
+   flags=[ SYSTEM HAS_CODE ALLOW_CLEAR_USER_DATA ]
+   privateFlags=[ PRIVILEGED ]
+   dataDir=/data/user/0/com.google.android.gms
+   supportsScreens=[small, medium, large, xlarge, resizeable, anyDensity]
+   libraries:
+     com.google.android.gms
+   usesOptionalLibraries:
+     com.android.location.provider
+     com.google.android.ble
+     com.android.media.remotedisplay
+   usesLibraryFiles:
+     /system/framework/com.android.media.remotedisplay.jar
+     /system/framework/com.android.location.provider.jar
+   timeStamp=2015-10-14 15:17:56
+   firstInstallTime=2015-09-22 14:08:35
+   lastUpdateTime=2015-10-14 15:17:56
+   signatures=PackageSignatures{db63be6 [1af63d8]}
+   installPermissionsFixed=true installStatus=1
+   pkgFlags=[ SYSTEM HAS_CODE ALLOW_CLEAR_USER_DATA ]
+   declared permissions:
+     com.google.android.gms.permission.INTERNAL_BROADCAST: prot=signature, INSTALLED
+     ...
+     com.google.android.gms.permission.CAR_VENDOR_EXTENSION: prot=dangerous, INSTALLED
+   User 0:  installed=true hidden=false stopped=false notLaunched=false enabled=0
+     disabledComponents:
+       com.google.android.gms.icing.service.PowerConnectedReceiver
+       ...
+       com.google.android.gms.icing.proxy.AppsMonitor
+     enabledComponents:
+       com.google.android.gms.mdm.receivers.GmsRegisteredReceiver
+       ...
+       com.google.android.gms.subscribedfeeds.SyncService</pre></p>
+  </div>
+</div>
+
+<h2 id="processes">Processes</h2>
+<p>Bug reports contain a huge amount of data for processes, including start and
+stop time, runtime length, associated services, <code>oom_adj</code> score, etc.
+For details on how Android manages processes, refer to
+<a href="http://developer.android.com/guide/components/processes-and-threads.html">Processes
+and Threads</a>.</p>
+
+<h3 id="process-runtime">Determining process runtime</h3>
+<p>The <code>procstats</code> section contains complete statistics on how long
+processes and associated services have been running. For a quick, human-readable
+summary, search for <code>AGGREGATED OVER</code> to view data from either the
+last three or 24 hours, then search for <code>Summary:</code> to view the list
+of processes, how long those processes have run at various priorities, and their
+RAM usage formatted as min-average-max PSS/min-average-max USS.</p>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" />
+    <strong><span class="toggle-content-text">Show example</span>
+    <span class="toggle-content-text" style="display:none;">Hide example</span></strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme">
+    <p><pre>-------------------------------------------------------------------------------
+DUMP OF SERVICE processinfo:
+-------------------------------------------------------------------------------
+DUMP OF SERVICE procstats:
+COMMITTED STATS FROM 2015-10-19-23-54-56 (checked in):
+...
+COMMITTED STATS FROM 2015-10-20-03-00-00 (checked in):
+...
+CURRENT STATS:
+...
+AGGREGATED OVER LAST 24 HOURS:
+System memory usage:
+...
+Per-Package Stats:
+...
+Summary:
+...
+  * com.google.android.gms.persistent / u0a13 / v8186448:
+           TOTAL: 100% (21MB-27MB-40MB/20MB-24MB-38MB over 597)
+             Top: 51% (22MB-26MB-38MB/21MB-24MB-36MB over 383)
+          Imp Fg: 49% (21MB-27MB-40MB/20MB-25MB-38MB over 214)
+…
+          Start time: 2015-10-19 09:14:37
+  Total elapsed time: +1d0h22m7s390ms (partial) libart.so
+
+AGGREGATED OVER LAST 3 HOURS:
+System memory usage:
+...
+Per-Package Stats:
+...
+Summary:
+  * com.google.android.gms.persistent / u0a13 / v8186448:
+           TOTAL: 100% (23MB-27MB-32MB/21MB-25MB-29MB over 111)
+             Top: 61% (23MB-26MB-31MB/21MB-24MB-28MB over 67)
+          Imp Fg: 39% (23MB-28MB-32MB/21MB-26MB-29MB over 44)
+...
+          Start time: 2015-10-20 06:49:24
+  Total elapsed time: +2h46m59s736ms (partial) libart.so</pre></p>
+  </div>
+</div>
+
+<h3 id="why-is-process-running">Why is a process running?</h3>
+<p>The <code>dumpsys activity processes</code> section lists all currently
+running processes ordered by <code>oom_adj</code> score (Android indicates
+process importance by assigning the process an <code>oom_adj</code> value, which
+can be dynamically updated by ActivityManager). The output is similar to that of
+a <a href="#memory-snapshot">memory snapshot</a> but includes additional
+information about what is causing the process to run. In the example below,
+the bolded entries indicate the <code>gms.persistent</code> process is running
+at <code>vis</code> (visible) priority because the system process is bound to
+its <code>NetworkLocationService</code>.</p>
+
+<div class="toggle-content closed">
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" />
+    <strong><span class="toggle-content-text">Show example</span>
+    <span class="toggle-content-text" style="display:none;">Hide example</span></strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme">
+    <p><pre>-------------------------------------------------------------------------------
+ACTIVITY MANAGER RUNNING PROCESSES (dumpsys activity processes)
+...
+Process LRU list (sorted by oom_adj, 34 total, non-act at 14, non-svc at 14):
+    PERS #33: sys   F/ /P  trm: 0 902:system/1000 (fixed)
+    PERS #32: pers  F/ /P  trm: 0 2925:com.android.systemui/u0a27 (fixed)
+    PERS #31: pers  F/ /P  trm: 0 3477:com.quicinc.cne.CNEService/1000 (fixed)
+    PERS #30: pers  F/ /P  trm: 0 3484:com.android.nfc/1027 (fixed)
+    PERS #29: pers  F/ /P  trm: 0 3502:com.qualcomm.qti.rcsbootstraputil/1001 (fixed)
+    PERS #28: pers  F/ /P  trm: 0 3534:com.qualcomm.qti.rcsimsbootstraputil/1001 (fixed)
+    PERS #27: pers  F/ /P  trm: 0 3553:com.android.phone/1001 (fixed)
+    Proc #25: psvc  F/ /IF trm: 0 4951:com.android.bluetooth/1002 (service)
+        com.android.bluetooth/.hfp.HeadsetService&lt;=Proc{902:system/1000}
+    Proc # 0: fore  F/A/T  trm: 0 3586:com.google.android.googlequicksearchbox/u0a29 (top-activity)
+  Proc #26: vis   F/ /SB trm: 0 3374:com.google.android.googlequicksearchbox:interactor/u0a29 (service)
+        com.google.android.googlequicksearchbox/com.google.android.voiceinteraction.GsaVoiceInteractionService&lt;=Proc{902:system/1000}
+<b>    Proc # 5: vis   F/ /T  trm: 0 3745:com.google.android.gms.persistent/u0a12 (service)</b>
+<b>        com.google.android.gms/com.google.android.location.network.NetworkLocationService&lt;=Proc{902:system/1000}</b>
+    Proc # 3: vis   F/ /SB trm: 0 3279:com.google.android.gms/u0a12 (service)
+        com.google.android.gms/.icing.service.IndexService&lt;=Proc{947:com.google.android.googlequicksearchbox:search/u0a29}
+    Proc # 2: vis   F/ /T  trm: 0 947:com.google.android.googlequicksearchbox:search/u0a29 (service)
+        com.google.android.googlequicksearchbox/com.google.android.sidekick.main.remoteservice.GoogleNowRemoteService&lt;=Proc{3586:com.google.android.googlequicksearchbox/u0a29}
+    Proc # 1: vis   F/ /T  trm: 0 2981:com.google.process.gapps/u0a12 (service)
+        com.google.android.gms/.tapandpay.hce.service.TpHceService&lt;=Proc{3484:com.android.nfc/1027}
+    Proc #11: prcp  B/ /IB trm: 0 3392:com.google.android.inputmethod.latin/u0a64 (service)
+        com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME&lt;=Proc{902:system/1000}
+    Proc #24: svc   B/ /S  trm: 0 27071:com.google.android.music:main/u0a67 (started-services)
+    Proc #22: svc   B/ /S  trm: 0 853:com.qualcomm.qcrilmsgtunnel/1001 (started-services)
+    Proc # 4: prev  B/ /LA trm: 0 32734:com.google.android.GoogleCamera/u0a53 (previous)
+    Proc #23: svcb  B/ /S  trm: 0 671:com.qualcomm.telephony/1000 (started-services)
+    Proc #20: cch   B/ /CE trm: 0 27659:com.android.providers.calendar/u0a2 (provider)
+        com.android.providers.calendar/.CalendarProvider2&lt;=Proc{27697:com.google.android.calendar/u0a40}
+    Proc #13: cch   B/ /CE trm: 0 653:com.google.android.gms.wearable/u0a12 (cch-empty)
+    Proc #10: cch   B/ /S  trm: 0 4067:com.google.android.talk/u0a62 (cch-started-ui-services)
+    Proc # 7: cch   B/ /S  trm: 0 18868:com.google.corp.huddle.android/u0a95 (cch-started-ui-services)
+    Proc # 6: cch   B/ /CA trm: 0 27697:com.google.android.calendar/u0a40 (cch-act)
+    Proc # 8: cch+1 B/ /CA trm: 0 25675:com.google.android.apps.genie.geniewidget/u0a81 (cch-act)
+    Proc #16: cch+2 B/ /CE trm: 0 1272:com.google.android.keep/u0a106 (cch-empty)
+    Proc #15: cch+2 B/ /CE trm: 0 885:android.process.media/u0a9 (cch-empty)
+    Proc #14: cch+2 B/ /CE trm: 0 15146:android.process.acore/u0a3 (cch-empty)
+    Proc # 9: cch+3 B/ /CA trm: 0 17016:com.google.android.gm/u0a79 (cch-act)
+    Proc #19: cch+4 B/ /CE trm: 0 973:com.google.android.apps.maps/u0a66 (cch-empty)
+    Proc #18: cch+4 B/ /CE trm: 0 1091:com.google.android.apps.photos/u0a71 (cch-empty)
+    Proc #17: cch+4 B/ /CE trm: 0 1141:com.google.android.apps.plus/u0a74 (cch-empty)
+    Proc #12: cch+5 B/ /CA trm: 0 22299:com.google.android.apps.dogfood/u0a105 (cch-act)
+    Proc #21: cch+6 B/ /CE trm: 0 995:com.google.android.partnersetup/u0a18 (cch-empty)></pre></p>
+  </div>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/source/running.jd b/src/source/running.jd
index 393bb16..afa7c69 100644
--- a/src/source/running.jd
+++ b/src/source/running.jd
@@ -71,6 +71,14 @@
 </thead>
 <tbody>
 <tr>
+<td>angler</td>
+<td>Press and hold <em>Volume Down</em>, then press and hold <em>Power</em></td>
+</tr>
+<tr>
+<td>bullhead</td>
+<td>Press and hold <em>Volume Down</em>, then press and hold <em>Power</em></td>
+</tr>
+<tr>
 <td>shamu</td>
 <td>Press and hold <em>Volume Down</em>, then press and hold <em>Power</em></td>
 </tr>
@@ -209,11 +217,20 @@
 </thead>
 <tbody>
 <tr>
+  <td>Nexus 6P</td>
+<td>angler</td>
+<td>aosp_angler-userdebug</td>
+</tr>
+<tr>
+  <td>Nexus 5X</td>
+<td>bullhead</td>
+<td>aosp_bullhead-userdebug</td>
+</tr>
+<tr>
   <td>Nexus 6</td>
 <td>shamu</td>
 <td>aosp_shamu-userdebug</td>
 </tr>
-</tr>
 <tr>
   <td>Nexus Player</td>
 <td>fugu</td>
diff --git a/src/source/source_toc.cs b/src/source/source_toc.cs
index 66b5177..aaa6074 100644
--- a/src/source/source_toc.cs
+++ b/src/source/source_toc.cs
@@ -73,6 +73,7 @@
         <li><a href="http://android-review.googlesource.com">View Patches</a></li>
         <li><a href="<?cs var:toroot ?>source/life-of-a-bug.html">Life of a Bug</a></li>
         <li><a href="<?cs var:toroot ?>source/report-bugs.html">Reporting Bugs</a></li>
+        <li><a href="<?cs var:toroot ?>source/read-bug-reports.html">Reading Bug Reports</a></li>
         <li><a href="<?cs var:toroot ?>source/code-style.html">Code Style Rules</a></li>
       </ul>
   </li>