Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 1 | page.title=Running the tests |
| 2 | @jd:body |
| 3 | |
| 4 | <!-- |
| 5 | Copyright 2015 The Android Open Source Project |
| 6 | |
| 7 | Licensed under the Apache License, Version 2.0 (the "License"); |
| 8 | you may not use this file except in compliance with the License. |
| 9 | You may obtain a copy of the License at |
| 10 | |
| 11 | http://www.apache.org/licenses/LICENSE-2.0 |
| 12 | |
| 13 | Unless required by applicable law or agreed to in writing, software |
| 14 | distributed under the License is distributed on an "AS IS" BASIS, |
| 15 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 16 | See the License for the specific language governing permissions and |
| 17 | limitations under the License. |
| 18 | --> |
| 19 | |
| 20 | <div id="qv-wrapper"> |
| 21 | <div id="qv"> |
| 22 | <h2>In this document</h2> |
| 23 | <ol id="auto-toc"> |
| 24 | </ol> |
| 25 | </div> |
| 26 | </div> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 27 | <p>This page provides instructions for running deqp tests in Linux and Windows |
| 28 | environments, using command line arguments, and working with the Android |
| 29 | application package.</p> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 30 | |
| 31 | <h2 id=linux_and_windows_environments>Linux and Windows environments</h2> |
| 32 | |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 33 | <p>Start by copying the following files and directories to the target.</p> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 34 | |
| 35 | <table> |
| 36 | <tr> |
| 37 | <th>Module</th> |
| 38 | <th>Directory</th> |
| 39 | <th>Target</th> |
| 40 | </tr> |
| 41 | |
| 42 | <tr> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 43 | <td>Execution Server</td> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 44 | <td><code>build/execserver/execserver</code></td> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 45 | <td><code><dst>/execserver</code></td> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 46 | </tr> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 47 | |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 48 | <tr> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 49 | <td>EGL Module</td> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 50 | <td><code>build/modules/egl/deqp-egl</code></td> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 51 | <td><code><dst>/deqp-egl</code></td> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 52 | </tr> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 53 | |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 54 | <tr> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 55 | <td rowspan=2 style="vertical-align:middle">GLES2 Module</td> |
| 56 | <td><code>build/modules/gles2/deqp-gles2</code></td> |
| 57 | <td><code><dst>/deqp-gles2</code></td> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 58 | </tr> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 59 | |
| 60 | |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 61 | <tr> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 62 | <td><code>data/gles2</code></td> |
| 63 | <td><code><dst>/gles2</code></td> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 64 | </tr> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 65 | |
| 66 | |
| 67 | |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 68 | <tr> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 69 | <td rowspan=2 style="vertical-align:middle">GLES3 Module</td> |
| 70 | <td><code>build/modules/gles3/deqp-gles3</td> |
| 71 | <td><code><dst>/deqp-gles3</code></td> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 72 | </tr> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 73 | |
| 74 | <tr> |
| 75 | <td><code>data/gles3</code></td> |
| 76 | <td><code><dst>/gles3</code></td> |
| 77 | </tr> |
| 78 | |
| 79 | <tr> |
| 80 | <td rowspan=2 style="vertical-align:middle">GLES3.1 Module</td> |
| 81 | <td><code>build/modules/gles31/deqp-gles31</code></td> |
| 82 | <td><code><dst>/deqp-gles31</code></td> |
| 83 | </tr> |
| 84 | |
| 85 | <tr> |
| 86 | <td><code>data/gles31</code></td> |
| 87 | <td><code><dst>/gles31</code></td> |
| 88 | </tr> |
| 89 | |
| 90 | |
| 91 | <tr> |
| 92 | <td rowspan=2 style="vertical-align:middle">GLES3.2 Module</td> |
| 93 | <td><code>build/modules/gles32/deqp-gles32</code></td> |
| 94 | <td><code><dst>/deqp-gles32</code></td> |
| 95 | </tr> |
| 96 | |
| 97 | <tr> |
| 98 | <td><code>data/gles32</code></td> |
| 99 | <td><code><dst>/gles32</code></td> |
| 100 | </tr> |
| 101 | |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 102 | </table> |
| 103 | |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 104 | <p>You can deploy the execution service and test binaries anywhere in the target |
| 105 | file system; however, test binaries expect to find data directories in the |
| 106 | current working directory. When ready, start the Test Execution Service on the |
| 107 | target device. For details on starting the service, see |
| 108 | <a href="{@docRoot}devices/graphics/port-tests.html#test_execution_service">Test |
| 109 | execution service</a>.</p> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 110 | |
| 111 | <h2 id=command_line_arguments>Command line arguments</h2> |
| 112 | |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 113 | <p>The following table lists command line arguments that affect execution of all |
| 114 | test programs.</p> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 115 | |
| 116 | <table width="100%"> |
| 117 | <col style="width:50%"> |
| 118 | <col style="width:50%"> |
| 119 | <tr> |
| 120 | <th>Argument</th> |
| 121 | <th>Description</th> |
| 122 | </tr> |
| 123 | |
| 124 | <tr> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 125 | <td><code>--deqp-case=<casename></code></td> |
| 126 | <td>Run cases that match a given pattern. Wildcard (*) is supported.</td> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 127 | </tr> |
| 128 | |
| 129 | <tr> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 130 | <td><code>--deqp-log-filename=<filename></code></td> |
| 131 | <td>Write test results to the file whose name you provide. The test execution |
| 132 | service will set the filename when starting a test.</td> |
| 133 | </tr> |
| 134 | |
| 135 | <tr> |
| 136 | <td><code>--deqp-stdin-caselist<br/> |
| 137 | --deqp-caselist=<caselist><br/> |
| 138 | --deqp-caselist-file=<filename></code></td> |
| 139 | <td>Read case list from stdin or from a given argument. The test execution |
| 140 | service will set the argument according to the execution request received. See |
| 141 | the next section for a description of the case list format.</td> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 142 | </tr> |
| 143 | <tr> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 144 | <td><code>--deqp-test-iteration-count=<count></code></td> |
| 145 | <td>Override iteration count for tests that support a variable number of |
| 146 | iterations.</td> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 147 | </tr> |
| 148 | <tr> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 149 | <td><code>--deqp-base-seed=<seed></code></td> |
| 150 | <td>Base seed for the test cases that use randomization.</td> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 151 | </tr> |
| 152 | </table> |
| 153 | |
| 154 | <h3 id=gles2_and_gles3-specific_arguments>GLES2 and GLES3-specific arguments</h3> |
| 155 | |
| 156 | The following table lists the GLES2- and GLES3-specific arguments. |
| 157 | |
| 158 | <table> |
| 159 | <table width="100%"> |
| 160 | <col style="width:50%"> |
| 161 | <col style="width:50%"> |
| 162 | <tr> |
| 163 | <th>Argument</th> |
| 164 | <th>Description</th> |
| 165 | </tr> |
| 166 | <tr> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 167 | <td><code>--deqp-gl-context-type=<type></code></td> |
| 168 | <td>OpenGL context type. Available context types depend on the platform. On |
| 169 | platforms supporting EGL, the value <code>egl</code> can be used to select |
| 170 | the EGL context.</td> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 171 | </tr> |
| 172 | <tr> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 173 | <td><code>--deqp-gl-config-id=<id></code></td> |
| 174 | <td>Run tests for the provided GL configuration ID. Interpretation is |
| 175 | platform-dependent. On the EGL platform, this is the EGL configuration ID.</td> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 176 | </tr> |
| 177 | <tr> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 178 | <td><code>--deqp-gl-config-name=<name></code></td> |
| 179 | <td><p>Run tests for a named GL configuration. Interpretation is |
| 180 | platform-dependent. For EGL, the format is |
| 181 | <code>rgb(a)<bits>d<bits>s<bits></code>. For example, a |
| 182 | value of <code>rgb888s8</code> will select the first configuration where the |
| 183 | color buffer is RGB888 and the stencil buffer has 8 bits.</td> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 184 | </tr> |
| 185 | <tr> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 186 | <td><code>--deqp-gl-context-flags=<flags></code></td> |
| 187 | <td>Creates a context. Specify <code>robust</code> or <code>debug</code>.</td> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 188 | </tr> |
| 189 | <tr> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 190 | <td><code>--deqp-surface-width=<width><br/> |
| 191 | --deqp-surface-height=<height></code></td> |
| 192 | <td>Try to create a surface with a given size. Support for this is optional.</td> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 193 | </tr> |
| 194 | <tr> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 195 | <td><code>--deqp-surface-type=<type></code></td> |
| 196 | <td>Use a given surface type as the main test rendering target. Possible |
| 197 | types are <code>window</code>, <code>pixmap</code>, <code>pbuffer</code>, |
| 198 | and <code>fbo</code>.</td> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 199 | </tr> |
| 200 | <tr> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 201 | <td><code>--deqp-screen-rotation=<rotation></code></td> |
| 202 | <td>Screen orientation in increments of 90 degrees for platforms that |
| 203 | support it.</td> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 204 | </tr> |
| 205 | </table> |
| 206 | |
| 207 | <h3 id=test_case_list_format>Test case list format</h3> |
| 208 | |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 209 | <p>The test case list can be given in two formats. The first option is to list |
| 210 | the full name of each test on a separate line in a standard ASCII file. As the |
| 211 | test sets grow, the repetitive prefixes can be cumbersome. To avoid repeating |
| 212 | the prefixes, use a trie (also known as a prefix tree) syntax shown below.</p> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 213 | |
| 214 | <pre> |
| 215 | {nodeName{firstChild{…},…lastChild{…}}} |
| 216 | </pre> |
| 217 | |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 218 | <p>For example:</p> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 219 | |
| 220 | <pre> |
| 221 | {dEQP-EGL{config-list,create_context{rgb565_depth_stencil}}} |
| 222 | </pre> |
| 223 | |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 224 | <p>Translates into the following two test cases:</p> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 225 | |
| 226 | <pre> |
| 227 | dEQP-EGL.config_list |
| 228 | dEQP-EGL.create_context.rgb565_depth_stencil |
| 229 | </pre> |
| 230 | |
| 231 | <h2 id=android>Android</h2> |
| 232 | |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 233 | <p>The Android application package contains all required components, including |
| 234 | the test execution service, test binaries, and data files. The test activity is |
| 235 | a <code>NativeActivity</code> that uses EGL (requires Android 3.2 or higher).</p> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 236 | |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 237 | <p>The application package can be installed with the following command (name |
| 238 | shown is the name of the APK in the Android CTS package; which name depends on |
| 239 | the build):</p> |
| 240 | <pre>$ adb –d install –r com.drawelements.deqp.apk</pre> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 241 | |
| 242 | <p>To launch the test execution service and to setup port forwarding, use the |
| 243 | following:</p> |
| 244 | <pre> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 245 | $ adb –d forward tcp:50016 tcp:50016 |
| 246 | $ adb –d shell am start –n com.drawelements.deqp/.execserver.ServiceStarter |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 247 | </pre> |
| 248 | |
| 249 | <p>Debug prints can be enabled by executing the following before starting the |
| 250 | tests:</p> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 251 | |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 252 | <pre> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 253 | $ adb –d shell setprop log.tag.dEQP DEBUG |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 254 | </pre> |
| 255 | |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 256 | <h3 id=executing_tests_on_android_without_android_cts>Executing tests on |
| 257 | Android without Android CTS</h3> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 258 | |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 259 | <p>To manually start the test execution activity, construct an Android intent |
| 260 | that targets <code>android.app.NativeActivity</code>. The activities can be |
| 261 | found in the <code>com.drawelements.deqp</code> package. The command line must |
| 262 | be supplied as an extra string with key <code>"cmdLine"</code> in the Intent.</p> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 263 | |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 264 | <p>A test log is written to <code>/sdcard/dEQP-log.qpa</code>. If the test run |
| 265 | does not start normally, additional debug information is available in the device |
| 266 | log.</p> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 267 | |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 268 | <p>You can launch an activity from the command line using the <code>am</code> |
| 269 | utility. For example, to run <code>dEQP-GLES2.info</code> tests on a platform |
| 270 | supporting <code>NativeActivity,</code> use the following commands.</p> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 271 | |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 272 | <pre>$ adb -d shell am start -n com.drawelements.deqp/android.app.NativeActivity -e \ |
| 273 | cmdLine "deqp --deqp-case=dEQP-GLES2.info.* --deqp-log-filename=/sdcard/dEQP-Log.qpa |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 274 | </pre> |
| 275 | |
| 276 | <h3 id=debugging_on_android>Debugging on Android</h3> |
| 277 | |
| 278 | <p>To run the tests under the GDB debugger on Android, first compile and install |
| 279 | the debug build by running the following two scripts:</p> |
| 280 | |
| 281 | <pre> |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 282 | $ python android/scripts/build.py --native-build-type=Debug |
| 283 | $ python android/scripts/install.py |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 284 | </pre> |
| 285 | |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 286 | <p>After the debug build is installed on the device, to launch the tests under |
| 287 | GDB running on the host, run the following command:</p> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 288 | |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 289 | <pre>$ python android/scripts/debug.py \ |
| 290 | --deqp-commandline="--deqp-log-filename=/sdcard/TestLog.qpa --deqp-case=dEQP-GLES2.functional.*" |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 291 | </pre> |
| 292 | |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 293 | <p>The deqp command line depends on the test cases to be executed and other |
| 294 | required parameters. The script adds a default breakpoint at the beginning of |
| 295 | the deqp execution (<code>tcu::App::App</code>).</p> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 296 | |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 297 | <p>The <code>debug.py</code> script accepts multiple command line arguments for |
| 298 | actions such as setting breakpoints for debugging, gdbserver connection |
| 299 | parameters, and paths to additional binaries to debug (use <code>debug.py |
| 300 | --help</code> for all arguments and explanations). The script also copies some |
| 301 | default libraries from the target device to get symbol listings.</p> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 302 | |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 303 | <p>To step through driver code (such as when the GDB needs to know the locations |
| 304 | of the binaries with full debug information), add more libraries via |
| 305 | <code>debug.py</code> command line parameters. This script writes out a |
| 306 | configuration file for the GDB starting from line 132 of the script file. You |
| 307 | can provide additional paths to binaries, etc., but supplying correct command |
| 308 | line parameters should be enough.</p> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 309 | |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 310 | <p class="note"><strong>Note:</strong> On Windows, the GDB binary requires |
| 311 | <code>libpython2.7.dll</code>. Before launching <code>debug.py</code>, add |
| 312 | <code><path-to-ndk>/prebuilt/windows/bin</code> to the PATH variable.</p> |
Bert McMeen | f902a28 | 2015-03-06 14:44:22 -0800 | [diff] [blame] | 313 | |
Heidi von Markham | a8166e2 | 2016-06-24 16:18:58 -0700 | [diff] [blame] | 314 | <p class="note"><strong>Note:</strong> Native code debugging does not work on |
| 315 | stock Android 4.3; for workarounds, refer to |
| 316 | <a href="https://code.google.com/p/android/issues/detail?id=58373">https://code.google.com/p/android/issues/detail?id=58373</a>. |
| 317 | Android 4.4 and higher do not contain this bug.</p> |