)]}'
{
  "log": [
    {
      "commit": "029442d2fa2bbd99757c416b20c6dce6627499e9",
      "tree": "f825b217c616cb8d9057ef05e9ebf01dbcfa2bd2",
      "parents": [
        "bf36c41384b1640b00fe5252d20ce4ffbbe07817"
      ],
      "author": {
        "name": "Haiyang Pan",
        "email": "hypan@google.com",
        "time": "Tue Nov 03 21:08:05 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Nov 03 21:16:47 2026"
      },
      "message": "android: Upgrade Android 17 AVD creation config to 37.2\n\nUpdate tools/android/avd/proto_creation/android_37_google_apis_ps16k_x64.textpb\nto use the Android 17 QPR2 (API 37.2) system image (r7, CP41.260831.015)\nand emulator 37.2.12 (Stable), which includes fixes for the ART JIT\nHInliner crash (b/530752620) and hal_codec2 SELinux video decode\nfailures (b/500518147).\n\nBug: 558813685, 579947957, 579553791\nChange-Id: Ic31d88b5f3f403266105c105818977211edeaca9\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8716212\nCommit-Queue: Henrique Nakashima \u003chnakashima@chromium.org\u003e\nReviewed-by: Henrique Nakashima \u003chnakashima@chromium.org\u003e\nAuto-Submit: Haiyang Pan \u003chypan@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1734388}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 3751dc91c5e4a1a24e63d439fc2b366cf323259e\n"
    },
    {
      "commit": "bf36c41384b1640b00fe5252d20ce4ffbbe07817",
      "tree": "76efb0dcc5774731dfc2820a37f7249aa3074f0c",
      "parents": [
        "c6a21f5319e741ab2bdd3d9f915230c0824c017c"
      ],
      "author": {
        "name": "Andrew Grieve",
        "email": "agrieve@chromium.org",
        "time": "Mon Nov 02 21:30:18 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Nov 02 21:36:57 2026"
      },
      "message": "Android: Add FieldCanBeFinalFast Error Prone check (disabled)\n\nAdds a temporary copy of Error Prone\u0027s FieldCanBeFinal check to\n//third_party/android_build_tools/error_prone/java that avoids calling\nSuggestedFixes.compilesWithFix(). The upstream check calls\nSuggestedFixes.compilesWithFix() for every candidate field, which\nre-attributes the compilation unit and makes it one of the slowest\nchecks that Chromium enables.\n\nThe copy is named FieldCanBeFinalFast, and has \"FieldCanBeFinal\" as an\naltName so that existing @SuppressWarnings(\"FieldCanBeFinal\") also\nsuppress it. It keeps the original Error Prone copyright and Apache-2.0\nlicense header, and is described in README.chromium.\n\nIt is compiled into //tools/android/errorprone_plugin via a new\njava_library, and 3pp.py compiles it into the error_prone native-image\nalong with the plugin\u0027s other checks. The native-image\u0027s tracing run\nnow also traces FieldCanBeFinalFast on javac\u0027s sources, and\n_SAMPLE_JAVA gains a field so that FieldCanBeFinal is traced on it\n(FieldCanBeFinal crashes on javac\u0027s sources).\n\nThe check does nothing unless -XepOpt:FieldCanBeFinalFast:Enabled\u003dtrue\nis passed, so this change has no effect on builds. errorprone.py cannot\nuse -Xep:FieldCanBeFinalFast:OFF to keep it off, because the Error Prone\nnative-image that errorprone.py uses on linux-x64 does not yet contain\nthe check, and so fails with \"FieldCanBeFinalFast is not a valid checker\nname\". The flag also keeps it from running when -Xep:FieldCanBeFinal\nenables it via its altName. A follow-up enables it in place of\nFieldCanBeFinal, once the error_prone 3pp package has been rebuilt to\ninclude it.\n\n3pp.py copies the new java directory to a different path within the\n3pp checkout, since the 3pp recipe copies the package definition to\n.3pp/chromium/third_party/android_build_tools/error_prone, and fails if\nthat directory already exists. It also passes the flag that enables the\ncheck.\n\nThe copy should be deleted once Error Prone\u0027s upstream check picks up\nthis fix.\n\nBug: 578106521\nChange-Id: I99e1985193888eef60bba31e9595546b4bcd3cd9\nAgent-Generated: true\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8694466\nCommit-Queue: Andrew Grieve \u003cagrieve@chromium.org\u003e\nReviewed-by: Henrique Nakashima \u003chnakashima@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1733235}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: f454e23bd64552449c2a2ab8ab769f9cca6985b8\n"
    },
    {
      "commit": "c6a21f5319e741ab2bdd3d9f915230c0824c017c",
      "tree": "7321cb88fe2b615d591c02f2f375b885ee41403c",
      "parents": [
        "c8771e2721b5d8006e0449d9693b392a073b5673"
      ],
      "author": {
        "name": "Haiyang Pan",
        "email": "hypan@google.com",
        "time": "Fri Oct 30 19:33:20 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 30 19:39:32 2026"
      },
      "message": "Add AVD configs and FYI builders for Android 17 Desktop (Preview)\n\n- Add swarming and local AVD configs generated from\n  tools/android/avd/proto_creation/android_37_desktop_x64.textpb via\n  https://ci.chromium.org/b/8666644327607796353.\n- Add the 17-desktop-x64-emulator mixin in\n  infra/config/targets/mixins.star.\n- Add the android-desktop-17-x64-fyi-rel CI builder in\n  infra/config/subprojects/chromium/ci/chromium.android.desktop.fyi.star\n  running the same test suites as android-desktop-x64-rel-15-tests, and\n  its matching trybot in\n  infra/config/subprojects/chromium/try/tryserver.chromium.android.desktop.star.\n\nChange-Id: I4fbd0da017b9ae0eee944f2da7aae4305318aa49\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8679439\nAuto-Submit: Haiyang Pan \u003chypan@google.com\u003e\nReviewed-by: Henrique Nakashima \u003chnakashima@chromium.org\u003e\nCommit-Queue: Henrique Nakashima \u003chnakashima@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1731746}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: d2d21262b7de7dcb31a03f3136cb512c4bd7b367\n"
    },
    {
      "commit": "c8771e2721b5d8006e0449d9693b392a073b5673",
      "tree": "b9120d9a3a1836ebe6ed6d7debb1833359ec8076",
      "parents": [
        "ab4878aff1e57f48b224ead44de3b817f12c63ff"
      ],
      "author": {
        "name": "m3rbi",
        "email": "yuval.meerbaum@island.io",
        "time": "Thu Oct 29 16:59:09 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 29 17:04:07 2026"
      },
      "message": "Use java_home.py for the remaining JDK consumers\n\nRoute the remaining scripts, tool wrappers and docs that hardcode\n//third_party/jdk/current through //third_party/jdk/java_home.py, so\nthey find the JDK on macOS hosts (where it lives under Contents/Home)\nand on remote workers. google-java-format, ktfmt and apkanalyzer now\nuse the hermetic JDK on Mac too instead of the system java.\n\nBug: 537801212\nChange-Id: Ia7c451a067d09b605057694906b92d99d98ecc1c\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8568138\nCommit-Queue: Andrew Grieve \u003cagrieve@chromium.org\u003e\nReviewed-by: Andrew Grieve \u003cagrieve@chromium.org\u003e\nOwners-Override: Andrew Grieve \u003cagrieve@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1730445}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: c5c54261257be79a19b85169e7020800eae1f78c\n"
    },
    {
      "commit": "ab4878aff1e57f48b224ead44de3b817f12c63ff",
      "tree": "2fb9a146d388aafdf7897255f31132ea78d44f50",
      "parents": [
        "ff540e164795e2339ab197e6f500dda1e6d123d9"
      ],
      "author": {
        "name": "Haiyang Pan",
        "email": "hypan@google.com",
        "time": "Thu Oct 29 00:56:51 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 29 01:01:56 2026"
      },
      "message": "Add AVD creation config for Android 17 Desktop (Preview)\n\nAdd tools/android/avd/proto_creation/android_37_desktop_x64.textpb for\nthe API 37.1 Google APIs Desktop (Preview) system image:\n- Emulator: 37.2.12 (Stable)\n- System image: android-37.1/android-desktop/x86_64\n- Display: 2880x1800 @ 240 dpi (matching Android Studio \u0027Desktop\n  (Preview)\u0027)\n- Disables Uwb to prevent guest service crash loops\n  (crbug.com/571651034)\n- Overrides VirtioMouse\u003doff and VirtioTablet\u003don for 1:1 absolute cursor\n  tracking without host pointer capture (crbug.com/524088899,\n  crbug.com/562275578)\n\nChange-Id: I684c48b2d64b759bce8e29798b23bca05fabe566\n\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8675482\nReviewed-by: Henrique Nakashima \u003chnakashima@chromium.org\u003e\nCommit-Queue: Haiyang Pan \u003chypan@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1729782}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: f53926e67029ec5423c1b5779dacd54a5145dcc7\n"
    },
    {
      "commit": "ff540e164795e2339ab197e6f500dda1e6d123d9",
      "tree": "3c1d8b8110b738bcc15ad7bd3061aade53c06b36",
      "parents": [
        "32aad31ba8e9c3b30f923deb00cbdb98c7000d76"
      ],
      "author": {
        "name": "Yaron Friedman",
        "email": "yfriedman@google.com",
        "time": "Wed Oct 28 22:21:53 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 28 22:27:00 2026"
      },
      "message": "Add pasko@chromium.org to tools/android/OWNERS\n\nChange-Id: Ia6c3d9bdccfb97c9b23f99d7357d02f301c0f1da\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8668831\nReviewed-by: Egor Pasko \u003cpasko@chromium.org\u003e\nAuto-Submit: Yaron Friedman \u003cyfriedman@chromium.org\u003e\nCommit-Queue: Yaron Friedman \u003cyfriedman@chromium.org\u003e\nCommit-Queue: Egor Pasko \u003cpasko@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1729605}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: dfd66fbbd0f10f4ea765659b239a73180a978082\n"
    },
    {
      "commit": "32aad31ba8e9c3b30f923deb00cbdb98c7000d76",
      "tree": "15cbd800b4d2cdb37f03b6040a02e67b6ef28010",
      "parents": [
        "5ac39ae874c5223411f69568dee206f9a09dcd8b"
      ],
      "author": {
        "name": "Andrew Grieve",
        "email": "agrieve@chromium.org",
        "time": "Wed Oct 28 13:55:48 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 28 14:01:34 2026"
      },
      "message": "Android: Use nullaway.jar from the error_prone CIPD package\n\nNullAway is now packaged within the error_prone CIPD package, so that\nit stays in sync with Error Prone (and its native-image). This deletes\n//third_party/android_build_tools/nullaway.\n\nThis updates NullAway from 0.14.2 to 0.14.3, which flags unboxing of\n@Nullable values in more places. Fixes the 4 new warnings.\n\nBug: None\nChange-Id: I7957c047e44cf45f886b6f075c3586fd27127f8f\nBypass-Check-License: javac.sh was moved from third_party/android_build_tools/nullaway\nAgent-Generated: true\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8639069\nReviewed-by: Sam Maier \u003csmaier@google.com\u003e\nAuto-Submit: Andrew Grieve \u003cagrieve@chromium.org\u003e\nCommit-Queue: Sam Maier \u003csmaier@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1729080}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: bc3c47db8a4f84e6a6b8859f8a1b922ba733e4fd\n"
    },
    {
      "commit": "5ac39ae874c5223411f69568dee206f9a09dcd8b",
      "tree": "c982d6c428e3184c15eba723bdf1b6815401b0de",
      "parents": [
        "70b12f942c51aa19a790b6b9d2c3d2b317dc13ea"
      ],
      "author": {
        "name": "Thomas Guilbert",
        "email": "tguilbert@chromium.org",
        "time": "Tue Oct 27 16:20:54 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 27 16:31:22 2026"
      },
      "message": "[CodeHealth] Remove unused Android media_router_test_support_apk\n\n`//components/media_router/test/android` (`cast_emulator` and\n`media_router_test_support_apk`) has been unused since\n`MediaRouterIntegrationTest` was removed in crrev.com/c/5769898, but is\nstill built as an `additional_apk` for `chrome_public_test_apk`.\n\nThis CL removes it.\n\nBug: 422372187\nChange-Id: I3510a386d2282a94cb3cd39c8f030ab20cde3a4d\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8667419\nReviewed-by: Jordan Bayles \u003cjophba@chromium.org\u003e\nAuto-Submit: Thomas Guilbert \u003ctguilbert@chromium.org\u003e\nCommit-Queue: Jordan Bayles \u003cjophba@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1728172}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: b758364e19e63299fca1506bda91bfc3b92c2511\n"
    },
    {
      "commit": "70b12f942c51aa19a790b6b9d2c3d2b317dc13ea",
      "tree": "bfff34ddcd8761b5c8c478953a1c0020581fe9e8",
      "parents": [
        "e069c2ad36749667d54f82c4a10bb82a157bd787"
      ],
      "author": {
        "name": "Ahmed Yamout",
        "email": "Ahmed.Yamout@arm.com",
        "time": "Mon Oct 26 17:10:49 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 26 17:15:53 2026"
      },
      "message": "Android: Add on-device WPR benchmark runner\n\nAdd a config-driven Android instrumentation APK that runs WPR\nbenchmarks without host orchestration.\n\nThe runner starts WPR, configures browser flags through UiAutomation,\nand controls Chrome through its local DevTools socket. A packaged relay\nruns under the debuggable browser\u0027s UID to support CDP connections with\nSELinux enforcing.\n\nSupport Crossbench-style page definitions for navigation, JavaScript,\ntouch, and wait actions, with configurable trace collection, result\nprocessing, and file exports.\n\nProvide on-device LoadLine2 trace processing. Speedometer 3.0 and\nJetStream 3.0 examples extract results through configured JavaScript\nactions. Results can be printed to logcat or exported as JSON and trace\nfiles.\n\nBenchmark definitions and dependencies are supplied through GN\nconfiguration, allowing custom on-device WPR tests without modifying\nthe runner. Example definitions use placeholder dependency paths;\nusers provide their own benchmark assets.\n\nBug: 576846601\nChange-Id: Ida39880ca263b00c1605d79d1de498625a7ff099\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8571301\nAuto-Submit: Ahmed Yamout \u003cahmed.yamout@arm.com\u003e\nCommit-Queue: Eric Seckler \u003ceseckler@chromium.org\u003e\nReviewed-by: Peter Wen \u003cwnwen@chromium.org\u003e\nReviewed-by: Mikhail Khokhlov \u003ckhokhlov@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1727141}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: cf79f61b47d8339793fbaf71b99afb519d5be665\n"
    },
    {
      "commit": "e069c2ad36749667d54f82c4a10bb82a157bd787",
      "tree": "c67eb35a62a82c0fb8bb8c6426183fd41d643ba4",
      "parents": [
        "699fcbf363f3d954878b0208868522b4467f6193"
      ],
      "author": {
        "name": "Thomas Guilbert",
        "email": "tguilbert@chromium.org",
        "time": "Mon Oct 26 16:00:50 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 26 16:08:35 2026"
      },
      "message": "[CodeHealth] Remove //third_party/android_media\n\nWe only use `//third_party/android_media` (an unmaintained 2013 Android\nSupport v4 sample) in `CafExpandedControllerActivity`, which opens when\ntapping the media notification during video flinging. Meanwhile, normal\nPresentation API casting (`CafNotificationController`) simply brings\nthe casting Chrome tab to the front.\n\nThis CL updates `RemotingNotificationController` to also bring the\ncasting tab to the front, and removes `CafExpandedControllerActivity`\nalong with `//third_party/android_media`.\n\nNote: This is a minor behavioral change when tapping the notification\nduring video flinging, bringing the originating tab (which already has\nin-page video controls) to the foreground instead of opening the legacy\nfullscreen controller activity.\n\nBug: 422372187\nChange-Id: If6aa50d1bd577501d718f3b981f2b3a96076e1eb\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8584615\nReviewed-by: Jordan Bayles \u003cjophba@chromium.org\u003e\nAuto-Submit: Thomas Guilbert \u003ctguilbert@chromium.org\u003e\nReviewed-by: Phil Yan \u003cphilyan@chromium.org\u003e\nCommit-Queue: Andrew Grieve \u003cagrieve@chromium.org\u003e\nReviewed-by: Andrew Grieve \u003cagrieve@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1727063}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: a53465a11c2c35f84e3c99619b9308f27d2ff1e7\n"
    },
    {
      "commit": "699fcbf363f3d954878b0208868522b4467f6193",
      "tree": "4e7f9755b9355cfec15fd3ce23169947edc1a01d",
      "parents": [
        "89949aff3a84ccf1a06430134b67dfee54aea033"
      ],
      "author": {
        "name": "Wenyu Fu",
        "email": "wenyufu@chromium.org",
        "time": "Thu Oct 22 12:22:47 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 22 12:27:34 2026"
      },
      "message": "[Android] Warn on android:translationX/Y in layout XML files\n\nUsing android:translationX or android:translationY in static layout XML\nfiles shifts pixels post-layout. While touch targets move with the\ntranslation, the view\u0027s layout bounds remain at the original position,\nmeaning sibling views won\u0027t adapt to the shift and touch events may\nget clipped by the parent. Stationary view positioning belongs in\nandroid:layout_margin* attributes so layout bounds are properly\ncalculated.\n\nExtract _is_layout_file as a module-level helper and reuse it in\n_CheckThemeColorAttributes. Add _CheckLayoutTranslationAttributes to\ncheckxmlstyle.py and unit tests in checkxmlstyle_test.py.\n\nBug: None\nChange-Id: I433d01a39f821cd6e13ee61ec3a9ac1b5e62eefd\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8614314\nReviewed-by: Sinan Sahin \u003csinansahin@google.com\u003e\nReviewed-by: Peter Wen \u003cwnwen@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1724653}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 61f53576d59a9bc2442e06c8048c51b3fc09a50b\n"
    },
    {
      "commit": "89949aff3a84ccf1a06430134b67dfee54aea033",
      "tree": "1439aa965f99e26779b9653f89f841cf644c3963",
      "parents": [
        "a725e2bc3f70ccf87ee4d07ecfe8457b59f43295"
      ],
      "author": {
        "name": "Andrew Grieve",
        "email": "agrieve@chromium.org",
        "time": "Tue Oct 20 02:29:31 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 20 02:37:03 2026"
      },
      "message": "Android: Fold ProductConfig into BuildConfig\n\nProductConfig.java existed so Chrome and WebView could share a single\nAPK/binary (Monochrome) with per-package configuration. Since Monochrome\nis gone and Trichrome gives Chrome and WebView separate APKs/bundles,\neach binary has its own org.chromium.build.BuildConfig.\n\n- Move LOCALES from ProductConfig to BuildConfig.\n- Initialize ResourceBundle.sAvailableLocales directly from\n  BuildConfig.LOCALES instead of requiring embedders to call\n  ResourceBundle.setAvailablePakLocales() or setNoAvailableLocalePaks().\n- Delete AwLocaleConfig.java and ProductConfig.template.\n- Drop ProductConfig.USE_CHROMIUM_LINKER, using\n  NativeLibraries.sUseLinker in TrichromeZygotePreload and removing\n  redundant setLinkerImplementation() calls in SplitCompatApplication\n  and CastBrowserApplication.\n\nAgent-Generated: true\nChange-Id: I90d569d1ccfd122e678ed98dc15eb0f1726607e7\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8592407\nReviewed-by: Sam Maier \u003csmaier@google.com\u003e\nCommit-Queue: Andrew Grieve \u003cagrieve@chromium.org\u003e\nReviewed-by: Tomasz Wiszkowski \u003cender@google.com\u003e\nOwners-Override: Andrew Grieve \u003cagrieve@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1722527}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: fde64a8deb78fdf0efdff5127444225cba6527a6\n"
    },
    {
      "commit": "a725e2bc3f70ccf87ee4d07ecfe8457b59f43295",
      "tree": "db9b0816b2bafc05a2b95f2c1270072220d92280",
      "parents": [
        "91d788295b10161b8e4438d9e8bc9e3d2f21ccac"
      ],
      "author": {
        "name": "Samuel Huang",
        "email": "huangs@chromium.org",
        "time": "Mon Oct 19 23:50:12 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 23:54:53 2026"
      },
      "message": "[CALI] Add multi-window support\n\nThe Android Layout Inspector was previously limited by\n`uiautomator dump` only capturing the single active window. This\nprevented full inspection of multi-window environments (e.g., Split\nScreen, System UI, Dialogs, or Picture-in-Picture).\n\nFor multi-window support, the required data can be retrieved by passing\nthe `--windows` flag to the ADB shell command:\n\n  adb shell uiautomator dump --windows\n\nThe resulting XML structure changes from a single hierarchy to a forest\nof Windows:\n\n  Old format:                       New format:\n    \u003chierarchy\u003e                       \u003cdisplays\u003e\n      \u003cnode\u003e...                         \u003cdisplay id\u003d\"0\"\u003e\n                                          \u003cwindow index\u003d\"0\"\u003e\n                                            \u003chierarchy\u003e\n                                              \u003cnode\u003e...\n                                          \u003cwindow index\u003d\"1\"\u003e\n                                            \u003chierarchy\u003e\n                                              \u003cnode\u003e...\n\nThis CL achieves multi-window support by doing the following:\n* Update the server to request multi-window dumps (Android 10+), with a\n  `--legacy` flag and automatic fallback for older devices.\n* Refactor the data ingestion layer into a Double-Loop traversal.\n* Treat the View Tree as a forest of rooted trees, with roots being\n  `\u003cwindow\u003e` (or the first `\u003cnode\u003e` as fallback).\n* Implement automatic collapse of system-related Windows.\n* Clean up ViewNode memory footprint by computing tree connector lines\n  transiently rather than storing `isLastChild`.\n\nDetails:\n* run_server.py:\n  * Add `--legacy` flag to force single-window dump.\n  * `ServerConfig`: Add `legacy`, default `False`.\n  * `MainRequestHandler`:\n    * Add `_dump_ui()`: Run `uiautomator dump --windows` normally,\n      with automatic fallback to legacy dump on error or `--legacy`.\n    * `_get_ui_dump_data()`: Call `_dump_ui()`.\n    * `do_GET()`: Rename endpoint `/api/ui-dump.xml` to\n      `/api/ui-dump.json` to reflect that the endpoint returns a\n      JSON-wrapped bundle.\n* run_server_test.py:\n  * Add unit tests for standard, legacy, and fallback UI dumps.\n* style.css: `#div-view-tree .view-row`:\n  * Add `\u0026.is-window` to style Window View Rows with bold text.\n* math.js: `Rectangle`:\n  * Add static `fromAndroidBounds()`, moved from `ViewNode.parseRect()`\n    for geometric authority.\n* model.js:\n  * `ViewNode`:\n    * Remove `isLastChild` from CTOR and instance properties.\n    * Add static `fromXmlWindow()` to instantiate a Window `ViewNode`\n      from a `\u003cwindow\u003e` tag, returning `{view, initiallyExpanded}`.\n      * `initiallyExpanded` is false if the window type is `TYPE_SYSTEM`\n        or `TYPE_SPLIT_SCREEN_DIVIDER`.\n    * Rename static `fromXml()` --\u003e `fromXmlNode()`.\n  * `MainModel`:\n    * CTOR: Add `windowInfos` registry.\n    * Split `_populateViews()` --\u003e `_populateView{Tree,Forest}()`, and\n      implement Double-Loop traversal:\n      * Inner loop: `_populateViewTree()` to perform recursion-free DFS\n        on `\u003chierarchy\u003e`, taken as `xmlHierarchy`, attached to nullable\n        `ancestorView`; remove helper `makeFrame()`.\n        * Frame: Replace `viewParent` --\u003e `parentView`; store\n          `parentXml` directly instead of allocating intermediate\n          `xmlChildrenElements` array; rename `fr` --\u003e `frame`.\n        * Compute `ViewNode` `depth` relative to `parentView`, instead\n          of stack depth.\n        * Instantiate `ViewNode` using `fromXmlNode()`, populate\n          `views` (and uses it to get `index`).\n      * Outer loop: `_populateViewForest()` loops over `\u003cwindow\u003e`\n        Elements:\n        * Instantiate `ViewNode` (with bundled `initiallyExpanded`)\n          using `fromXmlWindow()`; populate `windowInfos` and `views`.\n        * Calls inner loop to populate trees.\n        * If no `\u003cwindow\u003e` tags are found, fall back to parsing\n          `\u003chierarchy\u003e` with `ancestorView \u003d null` for backwards\n          compatibility (handles server fallback case).\n    * `_fetchData()`: Update to fetch from `/api/ui-dump.json`.\n    * `unload()`: Reset `windowInfos`.\n* tree_ui.js: `TreeVis.populateViewList()`:\n  * Compute `hasNextSibling` as a local transient array, removing the\n    need for `ViewNode.isLastChild`.\n  * After initializing `expandedMap`, visit `model.windowInfos` to\n    collapse Window `ViewNode`s if `!initiallyExpanded`.\n  * After rendering View Rows in `viewRows`, visit `model.windowInfos`\n    to apply the `.is-window` class.\n* Miscellaneous: Fix minor typos in comments.\n\nBug: 544811853\nChange-Id: Ic09fc898b96a83a22eba1209d5d34ec895cbf475\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8591103\nReviewed-by: Brandon Wylie \u003cwylieb@google.com\u003e\nCommit-Queue: Samuel Huang \u003chuangs@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1722438}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: f84d8db28e5d573a14df78c05bda4c78a55a4e0f\n"
    },
    {
      "commit": "91d788295b10161b8e4438d9e8bc9e3d2f21ccac",
      "tree": "9437fbbc57f2dd1cb42be60bcf989158f9d28d37",
      "parents": [
        "e697b012dda7e1d3822468280d7bb9f12c1b5067"
      ],
      "author": {
        "name": "Samuel Huang",
        "email": "huangs@chromium.org",
        "time": "Sat Oct 17 20:51:54 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Oct 17 21:01:47 2026"
      },
      "message": "[CALI] Change Rectangle to use getters\n\nThis CL prepares `Rectangle` for upcoming changes. Details:\n* math.js: `Rectangle`:\n  * CTOR: Rename `topLeft` --\u003e `leftTop` and\n   `bottomRight` --\u003e `rightBottom` to follow x-y order.\n  * Add getters `left()`, `top()`, `right()`, `bottom()`.\n  * Change `width()`, `height()` to getters.\n* ui_common.js: `InfoBarVis`: Update.\n\nBug: 544811853\nChange-Id: Ifbbf29899671de0664daa12504941053770da171\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8599236\nCommit-Queue: Samuel Huang \u003chuangs@chromium.org\u003e\nReviewed-by: Brandon Wylie \u003cwylieb@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1721444}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: db315902a68554f3e3eff7353f7132a4811c6e3d\n"
    },
    {
      "commit": "e697b012dda7e1d3822468280d7bb9f12c1b5067",
      "tree": "4deafbc0c36168996441dcc36f4dfd11e2a90313",
      "parents": [
        "ab8ad6cce7591cdbe383af673cc6fc9974918367"
      ],
      "author": {
        "name": "Mau Camargo",
        "email": "camargomau@google.com",
        "time": "Fri Oct 16 22:11:33 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 22:21:04 2026"
      },
      "message": "Align drifted AVD gpu_mode settings in proto_creation/\n\nUpdate avd_launch_settings.gpu_mode in tools/android/avd/proto_creation/\nso creation configs match the effective gpu_mode in\ntools/android/avd/proto/:\n\n- android_30_google_apis_x86: set swiftshader_indirect.\n- android_31_google_apis_x64: set swiftshader_indirect.\n- android_34_google_apis_x64: set lavapipe.\n- android_canary_google_apis_x64: set lavapipe.\n\nBug: 546587912\nChange-Id: I5c544bd87db9b5d7973014d02cef69a883253691\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8562088\nReviewed-by: Haiyang Pan \u003chypan@google.com\u003e\nCommit-Queue: Mau Camargo \u003ccamargomau@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1721096}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 7171e77ecc027c0e0ad96818e0f4841a7a37bf2b\n"
    },
    {
      "commit": "ab8ad6cce7591cdbe383af673cc6fc9974918367",
      "tree": "df4df3eb4cc8cfa6158259653c7b8b3e804b1be2",
      "parents": [
        "49db89789a43437c7d59c1ec6a985ec4f36f413b"
      ],
      "author": {
        "name": "Eleanor Lee",
        "email": "eleanorlee@google.com",
        "time": "Tue Oct 13 18:31:11 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 13 18:42:04 2026"
      },
      "message": "[Automotive Bot] Roll automotive AVDs for new display config.\n\nThis CL rolls the change https://crrev.com/c/8546275.\nThe AVDs are generated in http://ci.chromium.org/b/8668116274949353521\n\nBug: 428228852\nChange-Id: I076f152f72cbcfaada0f826e0290f05682387335\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8563858\nReviewed-by: Henrique Nakashima \u003chnakashima@chromium.org\u003e\nReviewed-by: Haiyang Pan \u003chypan@google.com\u003e\nReviewed-by: Charles Hager \u003cclhager@google.com\u003e\nCommit-Queue: Eleanor Lee \u003celeanorlee@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1717648}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 1c5a15b36e4e421d37c6041ab0ddf18ec29f7668\n"
    },
    {
      "commit": "49db89789a43437c7d59c1ec6a985ec4f36f413b",
      "tree": "1f39dca834d5ca2c4dce95705fb6d6d0dd654e58",
      "parents": [
        "48246f23dc9f9f75cb144e80daa24a169efecfe9"
      ],
      "author": {
        "name": "Mau Camargo",
        "email": "camargomau@google.com",
        "time": "Mon Oct 12 18:43:44 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 12 18:51:27 2026"
      },
      "message": "Roll AVD configs for Android 10 (API 29)\n\nRolls Android 10 (API 29) x86 AVD CIPD packages created with 3072 MB RAM\nand swiftshader_indirect, and explicitly sets gpu_mode to\nswiftshader_indirect in the runtime configs to match creation.\n\nCreated in build https://ci.chromium.org/ui/b/8668393759462781553\nCreation config updated in https://crrev.com/c/8542495\n\nBug: 546587912, 356161365\nChange-Id: If9a5d158caf8db4b1266d9f438554d5db24148fd\nCq-Include-Trybots: luci.chromium.try:android-10-x86-rel\nInclude-Ci-Only-Tests: chromium.android:android-10-x86-nofieldtrial-rel|chrome_public_test_apk\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8551095\nReviewed-by: Haiyang Pan \u003chypan@google.com\u003e\nCommit-Queue: Mau Camargo \u003ccamargomau@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1716981}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 88f1fe85e173fdbaa69e1d77805c0518595e0ffd\n"
    },
    {
      "commit": "48246f23dc9f9f75cb144e80daa24a169efecfe9",
      "tree": "d09d8c19501b272d5c8d9c6459230b6f1bf4853d",
      "parents": [
        "8570028b4f1fbda451c5403eda3458eb3d4907cc"
      ],
      "author": {
        "name": "Henrique Nakashima",
        "email": "hnakashima@chromium.org",
        "time": "Mon Oct 12 17:42:05 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 12 17:47:20 2026"
      },
      "message": "Lower density of android_34_automotive_x64 AVD from 180 to 160\n\nAt 1536x1152 @ 180 dpi in landscape, 1.34x automotive UI scaling (260\ndpi) plus 194px of vertical AAOS system bars leaves screenHeightDp \u003d\n590dp (\u003c 600dp), so Chrome boots in Phone UI while UiRestriction sees\n1024dp (Tablet UI).\n\nLowering density to 160 dpi (220 dpi scaled) gives 1117x713dp so Chrome\nboots in Tablet UI. Tested on android-14-automotive-landscape-x64-rel\n(http://ci.chromium.org/b/8668308800896766337), reducing failures from\n111 to 15.\n\nBug: 428228852\nChange-Id: Iebc318805d28a572606bcfdfd89b452e1a267175\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8546275\nReviewed-by: Eleanor Lee \u003celeanorlee@google.com\u003e\nReviewed-by: Charles Hager \u003cclhager@google.com\u003e\nReviewed-by: Haiyang Pan \u003chypan@google.com\u003e\nCommit-Queue: Charles Hager \u003cclhager@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1716905}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 812be059ac0ce479afbf4c5bb13e995facfeab55\n"
    },
    {
      "commit": "8570028b4f1fbda451c5403eda3458eb3d4907cc",
      "tree": "b42a95ef5936e553d1f0f3f3f3f31021125b82b5",
      "parents": [
        "4a248be31b42dfb0cdabae6c7992ce565ea00fb2"
      ],
      "author": {
        "name": "Samuel Huang",
        "email": "huangs@chromium.org",
        "time": "Fri Oct 09 23:54:40 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 09 23:59:53 2026"
      },
      "message": "[CALI] View Tree: Show View Info on Hover\n\nThis CL adds View Info UI, which shows basic info of a View on hover.\nSpecifically, in the View Tree, when a View Row gets pointer hover, its\nbackground gains a blue highlight, and the Info Bar shows the View\u0027s:\n* Java Class.\n* Dimensions in PX.\n* Dimensions in DP.\n\nTo prepare for planned features (multi-select; same UI on Screenshot),\nthis CL implements hover UI in a structured fashion:\n* Add `ViewEngaged` (owned by `MainModel`) as source of truth, storing\n  nullable `hover` (upcoming: `sels` for selections).\n* `TreeVis`\u0027s hover handling:\n  * Interface: `setHover()` to assign / sync hover value.\n  * Interface: `withTransaction()` to wrap View Tree changes in order to\n    transact (i.e., hide - update - show) visuals (i.e., hover).\n  * Internal: `hoverIndex` to reduce churn and for transactions (e.g.,\n    remember which rendered UI highlight to clear).\n* Centralized event dispatching for hover: Currently hover is only\n  triggered and shown on the View Tree. To prepare for Screenshot\n  inclusion, this CL uses `MainController` (with injected callback) as\n  an intermediary dispatcher; thus hover-related event handling is:\n\n  [Event trigger]        --\u003e [Dispatcher]   --\u003e  [UI change]\n  TreeController             MainController      TreeController\n  (ScreenshotController)                         (ScreenshotController)\n\n  * Inside `MainController`, also update model hover state and\n    View Info.\n\nAdditional code improvements: Add CTOR JSDoc; use CSS `contain` to\nprevent layout spillover; refactor `ViewNode` parsing; update UI / state\nclearing.\n\nDetails:\n* index.html: `#div-info-bar`: Add `.view-info` that shows details about\n  a View, to be shown when its View Row is hovered by the pointer:\n  * Add `.view-class` for the View\u0027s Java Class.\n  * Add `.view-dims` for the View\u0027s dimensions, dynamically shown as\n    \"{W}x{H}px | {W}x{H}dp\", using added `.size-px` and `.size-dp`.\n* style.css:\n  * `:root`: Add `--bg-hover` for hover highlight (translucent blue).\n  * Optimization: Add `contain: (value)` to dynamic containers so their\n    layout invalidations are isolated and do not bubble out:\n    * `strict`: `#div-screenshot-info`, `#div-info-bar`: These\n      containers\u0027 sizes don\u0027t depend on content.\n    * `content`: `#div-view-tree`: This stretches via `flex-grow: 1`.\n  * `#div-view-tree .view-row`: Add `\u0026.hovered-view` to style highlight.\n  * `#div-info-bar`:\n    * Add `white-space: nowrap` to prevent wrapping.\n    * Add `.view-info` as flex column.\n      * Add `.view-class` to use bold.\n      * Add `.view-dims` as row Flexbox in light blue text.\n        * Add `.size-dp` to use bold.\n    * `.view-class` and `.hint-text`: Add ellipses if overflow.\n* math.js: Add `Rectangle`: Axis-aligned rectangle represented by\n  top-left and bottom-right corners.\n  * CTOR: Store passed `topLeft`, `bottomRight`.\n  * Add static `fromComponents()` to instantiate from 4 coordinates.\n  * Add `width()` and `height()`.\n* model.js:\n  * `ViewNode`:\n    * CTOR: Add JSDoc; remove unused `xmlNode`; simplify to store passed\n      params directly; add passed `rect`.\n    * Add static `parseRect()` to extract XML bounds `[x1, y1][x2, y2]`\n      to a `Rectangle`.\n    * Add static `fromXml()` as factory method to instantiate from\n      passed `xmlNode` and other properties. Parses `rect`, `className`,\n      and `resourceId` before instantiating.\n  * Add `ViewEngaged`: CTOR: Add `hover`. Add `clear()`.\n  * `MainModel`: CTOR: Add `ViewEngaged engaged`.\n    * `_populateViews()`: Change to use `ViewNode.fromXml()`.\n    * `unload()`: Call `engaged.clear()`; reset `visOpts.{sDims,scale}`.\n* ui_common.js:\n  * Add JSDoc to CTORs: `InfoBarVis`, `HintController`, `DragHandler`,\n    `OverlayVis`.\n  * `InfoBarVis`:\n    * CTOR: Cache `el.{viewInfo,viewClass,sizePx,sizeDp}`.\n    * Add `renderAndShowViewInfo()`.\n    * Add `hideViewInfo()`: Uses `.hidden` class.\n  * `HINT_STRINGS[IDLE]`: Add instructions re. using hover to see info.\n* screenshot_ui.js: JSDoc: Remove uninformative CTOR param comments.\n* tree_ui.js:\n  * `TreeVis`:\n    * CTOR: Add JSDoc for params and nontrivial properties; add\n      `hoverIndex`, initially `null`.\n    * `clear()`: Resets `hoverIndex`.\n    * Add `_renderHover()` to make CSS change to show / hide hover.\n    * Add `withTransaction(fun)` to hide hover, call `fun()`, then\n      re-enable hover (if it exists).\n    * Add `setHover()` with idempotency guard to assign hover index,\n      and update `hoverIndex` using `withTransaction()`.\n  * `TreeController`:\n    * CTOR: Add passed `onHover` callback.\n    * Add `setHover()` for hover UI changes.\n    * `_onToggleExpansion()`: Use `withTransaction()`.\n    * `bindAll()`:\n      * Add `getRowIndex()` to map `#div-view-tree` pointer event to\n        the nearest `.view-row` if available, then extract the View\n        index, while ignoring spurious events.\n      * Handle `pointerover` and `pointerout`: Get index from\n        `getRowIndex()` and dispatch to `onHover()`.\n        * Optimization for `pointerout`: If `relatedTarget` is another\n          `.view-row` then don\u0027t dispatch `null`, since `pointerover`\n          will be triggered to take care of transition.\n      * Update `click` handler to use `getRowIndex()`.\n* app.js:\n  * `MainVis`: CTOR: Add JSDoc.\n    * Add `updateViewInfo()` to render / clear View Info depending on\n      model `hover`.\n    * Add `clear()` to hide View Info.\n  * `MainController`:\n    * CTOR: Add JSDoc; for `treeCtrl`, pass `onHover()`, which calls\n      `handleHover()`.\n    * `clearUI()`: Add Vis `clear()` call.\n    * Add `handleHover()` with idempotency guard to set model `hover`,\n      call `TreeController.setHover()`, and call Vis `updateViewInfo()`.\n\nBug: 544811853\nChange-Id: Ic6bea557022949c3e66158c48231ba221bc6a3b2\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8538787\nReviewed-by: Brandon Wylie \u003cwylieb@google.com\u003e\nCommit-Queue: Samuel Huang \u003chuangs@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1716170}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 22f7b05916bb784eea6fc4992398d9b2fe38e8f6\n"
    },
    {
      "commit": "4a248be31b42dfb0cdabae6c7992ce565ea00fb2",
      "tree": "4baf9fd8476138323ccc7d65b9c8dba0fd53d26c",
      "parents": [
        "9c9eae142fca95cf9c312626af95c94b9f7257b0"
      ],
      "author": {
        "name": "Mau Camargo",
        "email": "camargomau@google.com",
        "time": "Thu Oct 08 23:28:54 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 08 23:36:04 2026"
      },
      "message": "Use swiftshader_indirect in Android 10 creation config\n\nSwitch avd_launch_settings.gpu_mode from swangle_indirect back to\nswiftshader_indirect in android_29_google_apis_x86.textpb while keeping\nram_size: 3072.\n\nWhen an AVD\u0027s runtime gpu_mode does not match the gpu_mode used to\nrecord its snapshot, the Android emulator rejects the default_boot\nsnapshot and falls back to a cold boot. On Android 10, cold-booting can\ncause the Java VM to start with its 16 MB default heap limit before the\nconfigured 576 MB limit is applied, leading to OutOfMemoryError crashes.\n\nSetting swiftshader_indirect in the creation config to match the runtime\ngpu_mode keeps snapshot loading working while avoiding swangle_indirect\nrendering issues on Android 10.\n\nBug: 546587912, 356161365\nChange-Id: I31c0bcfdf9f6972e2fa8d89892563daf7bb18861\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8542495\nReviewed-by: Haiyang Pan \u003chypan@google.com\u003e\nCommit-Queue: Mau Camargo \u003ccamargomau@google.com\u003e\nAuto-Submit: Mau Camargo \u003ccamargomau@google.com\u003e\nCommit-Queue: Haiyang Pan \u003chypan@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1715036}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: a1f8a1d1d7aa77ddb4e33ff8bdfbb7ff3e0ffc0b\n"
    },
    {
      "commit": "9c9eae142fca95cf9c312626af95c94b9f7257b0",
      "tree": "5c51e8e352488a9066dcc58b62f163a422be0331",
      "parents": [
        "65f36806522317a321076eccf55932abc173c25e"
      ],
      "author": {
        "name": "Alex Ovsienko",
        "email": "ovsienko@google.com",
        "time": "Wed Oct 07 10:55:35 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 07 11:02:37 2026"
      },
      "message": "Reland \"Ruff lint: relint tools (part 1/4: accessibility .. generate_stubs).\"\n\nThis reverts commit fc2e8e543698572671a4b6af1410a0ca468addc9.\n\nReason for revert: Centralize disabled lint rules in tools/.ruff.toml (including F401 unused-import and F811 redefined-while-unused) instead of adding inline noqa comments or deleting imports.\n\nLSC Doc: https://docs.google.com/document/d/1QRhY2yqlicseeVRVLa_gk4YXL4IBSM913-ZW1SdPZLU/edit?tab\u003dt.0\n\nOriginal change\u0027s description:\n\u003e Revert \"Ruff lint: relint tools (part 1/4: accessibility .. generate_stubs).\"\n\u003e\n\u003e This reverts commit 212547226767b6dfa740d3af8ac85b6a45edb887.\n\u003e\n\u003e Reason for revert:\n\u003e This broke tools/clang/scripts/build.py by removing \"unused\"\n\u003e variables that were actually in use. Who knows what else it broke.\n\u003e\n\u003e Failure Link:\n\u003e https://ci.chromium.org/ui/p/chromium/builders/ci/ToTLinux%20(dbg)/40370/overview\n\u003e\n\u003e Original change\u0027s description:\n\u003e \u003e Ruff lint: relint tools (part 1/4: accessibility .. generate_stubs).\n\u003e \u003e\n\u003e \u003e Migrate tools/ subdirectories (accessibility through generate_stubs)\n\u003e \u003e from Pylint to Ruff for Python linting. Subdirectory PRESUBMIT.py files\n\u003e \u003e drop legacy RunPylint and GetPylint calls in favor of top-level\n\u003e \u003e tools/PRESUBMIT.py Ruff checks, while existing pylint comments are\n\u003e \u003e cleaned up and remaining Ruff diagnostics are fixed or suppressed.\n\u003e \u003e\n\u003e \u003e LSC Doc: https://docs.google.com/document/d/1QRhY2yqlicseeVRVLa_gk4YXL4IBSM913-ZW1SdPZLU/edit?tab\u003dt.0\n\u003e \u003e\n\u003e \u003e Bug: 539486220\n\u003e \u003e Change-Id: If578fb45f68f7f5ae84955e7a5533a5e8e534565\n\u003e \u003e Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8497377\n\u003e \u003e Owners-Override: Alex Ovsienko \u003covsienko@google.com\u003e\n\u003e \u003e SLSA-Policy-Verified: SLSA Policy Verification Service \u003cdevtools-gerritcodereview-exitgate@google.com\u003e\n\u003e \u003e Commit-Queue: Alex Ovsienko \u003covsienko@google.com\u003e\n\u003e \u003e Reviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\n\u003e \u003e Cr-Commit-Position: refs/heads/main@{#1708792}\n\u003e\n\u003e Bug: 539486220, 568301932\n\u003e Bug: 539486220\n\u003e Change-Id: I71084115fdad41e1f96bed81062b57e9e8489700\n\u003e Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8501742\n\u003e Auto-Submit: Hans Wennborg \u003chans@chromium.org\u003e\n\u003e Owners-Override: Ahmed Moussa \u003cahmedmoussa@google.com\u003e\n\u003e Commit-Queue: Hans Wennborg \u003chans@chromium.org\u003e\n\u003e Bot-Commit: rubber-stamper@appspot.gserviceaccount.com \u003crubber-stamper@appspot.gserviceaccount.com\u003e\n\u003e Owners-Override: Dana Fried \u003cdfried@chromium.org\u003e\n\u003e SLSA-Policy-Verified: SLSA Policy Verification Service \u003cdevtools-gerritcodereview-exitgate@google.com\u003e\n\u003e Cr-Commit-Position: refs/heads/main@{#1709455}\n\nBug: 539486220, 568301932\nChange-Id: I5ea75e12e3a7e887efd2cec0bc57ffbe41a010e2\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8505536\nOwners-Override: Alex Ovsienko \u003covsienko@google.com\u003e\nReviewed-by: Hans Wennborg \u003chans@chromium.org\u003e\nCommit-Queue: Alex Ovsienko \u003covsienko@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1713293}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: f3cc8f0c53e4f6345a3cc67c53b0fea080438168\n"
    },
    {
      "commit": "65f36806522317a321076eccf55932abc173c25e",
      "tree": "b603a6437f1f957a4afa02410d84a1fc17275999",
      "parents": [
        "0febeca448ee060680e71cfe70dc8302f5ffda33"
      ],
      "author": {
        "name": "Haiyang Pan",
        "email": "hypan@google.com",
        "time": "Tue Oct 06 22:48:44 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 06 22:53:41 2026"
      },
      "message": "Revert \"Reland \"Roll AVD configs for Android 10 (API 29)\"\"\n\nThis reverts commit 18322e5eb2c76c6cd638bc390fd3dff908834d0c.\n\nReason for revert: Still causing OOM in chrome_public_test_apk,\n\nFailure Link: https://ci.chromium.org/ui/p/chromium/builders/ci/android-10-x86-nofieldtrial-rel/5935/infra\n\nOriginal change\u0027s description:\n\u003e Reland \"Roll AVD configs for Android 10 (API 29)\"\n\u003e\n\u003e This reverts commit 1251e9a8bc4fffe90e324add20a2e8109cfac614.\n\u003e\n\u003e Rolls Android 10 (API 29) x86 AVD CIPD packages to apply the updated\n\u003e 3072MB RAM configuration.\n\u003e\n\u003e Created in build https://ci.chromium.org/b/8673559336450766849\n\u003e Creation config updated in https://crrev.com/c/8244054\n\u003e\n\u003e Bug: 356161365, 546587912\n\u003e Change-Id: Ic37cbc6fa209f947509857846b55adfbaec04b3f\n\u003e Cq-Include-Trybots: luci.chromium.try:android-10-x86-rel\n\u003e Include-Ci-Only-Tests: chromium.android:android-10-x86-nofieldtrial-rel|chrome_public_test_apk\n\u003e Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8518157\n\u003e Reviewed-by: Haiyang Pan \u003chypan@google.com\u003e\n\u003e Commit-Queue: Mau Camargo \u003ccamargomau@google.com\u003e\n\u003e Cr-Commit-Position: refs/heads/main@{#1711796}\n\nBug: 356161365, 546587912\nCq-Include-Trybots: luci.chromium.try:android-10-x86-rel\nNo-Presubmit: true\nNo-Tree-Checks: true\nNo-Try: true\nChange-Id: I3786c427702760f322b28c7f01c83ba8c1189ab7\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8523566\nCommit-Queue: Haiyang Pan \u003chypan@google.com\u003e\nBot-Commit: rubber-stamper@appspot.gserviceaccount.com \u003crubber-stamper@appspot.gserviceaccount.com\u003e\nCr-Commit-Position: refs/heads/main@{#1712813}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: b3f417b248a879dabd3f5cb2bfa8dec4f1f7ee34\n"
    },
    {
      "commit": "0febeca448ee060680e71cfe70dc8302f5ffda33",
      "tree": "b5f4ba7af4895812c882777ca4c948770dc17146",
      "parents": [
        "9b2d9cb50865af97482bc26e7cbd5986c87c50b5"
      ],
      "author": {
        "name": "Andrew Grieve",
        "email": "agrieve@chromium.org",
        "time": "Tue Oct 06 16:04:27 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 06 16:08:32 2026"
      },
      "message": "Android: Remove incremental_install compile mode\n\nCq-Include-Trybots: luci.chrome.try:android-internal-dbg,android-internal-binary-size\nChange-Id: Ie8b5bf362ad56079ac09e1d37ada1dad2c731010\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8517557\nOwners-Override: Andrew Grieve \u003cagrieve@chromium.org\u003e\nCommit-Queue: Andrew Grieve \u003cagrieve@chromium.org\u003e\nReviewed-by: Peter Wen \u003cwnwen@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1712392}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: ea4faf2206fe4f2a9e21236e3ab8a7fd5fde2705\n"
    },
    {
      "commit": "9b2d9cb50865af97482bc26e7cbd5986c87c50b5",
      "tree": "221494e926c42b962997db8c16dd98894644368b",
      "parents": [
        "4ba1dc4cd4e5846cb403b376264d375d0540281c"
      ],
      "author": {
        "name": "Mau Camargo",
        "email": "camargomau@google.com",
        "time": "Mon Oct 05 23:25:47 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 05 23:31:20 2026"
      },
      "message": "Reland \"Roll AVD configs for Android 10 (API 29)\"\n\nThis reverts commit 1251e9a8bc4fffe90e324add20a2e8109cfac614.\n\nRolls Android 10 (API 29) x86 AVD CIPD packages to apply the updated\n3072MB RAM configuration.\n\nCreated in build https://ci.chromium.org/b/8673559336450766849\nCreation config updated in https://crrev.com/c/8244054\n\nBug: 356161365, 546587912\nChange-Id: Ic37cbc6fa209f947509857846b55adfbaec04b3f\nCq-Include-Trybots: luci.chromium.try:android-10-x86-rel\nInclude-Ci-Only-Tests: chromium.android:android-10-x86-nofieldtrial-rel|chrome_public_test_apk\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8518157\nReviewed-by: Haiyang Pan \u003chypan@google.com\u003e\nCommit-Queue: Mau Camargo \u003ccamargomau@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1711796}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 18322e5eb2c76c6cd638bc390fd3dff908834d0c\n"
    },
    {
      "commit": "4ba1dc4cd4e5846cb403b376264d375d0540281c",
      "tree": "a06c311ce69559eadd2d457ed74cf83f1997bce2",
      "parents": [
        "20786d22131e1e3f1799d208a069935fbdaed448"
      ],
      "author": {
        "name": "Andrew Grieve",
        "email": "agrieve@chromium.org",
        "time": "Mon Oct 05 19:04:12 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 05 19:11:50 2026"
      },
      "message": "Android: Fix all @NonNull presubmit warnings\n\nThe main fix here is enabling the warning only for files with\n@NullMarked.\n\nChange-Id: I79b0980eec08357cb94346fdbb5c1a3adfcdb921\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8507221\nAuto-Submit: Andrew Grieve \u003cagrieve@chromium.org\u003e\nOwners-Override: Andrew Grieve \u003cagrieve@chromium.org\u003e\nCommit-Queue: Andrew Grieve \u003cagrieve@chromium.org\u003e\nReviewed-by: Sam Maier \u003csmaier@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1711564}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 1af4e3c97f8b5a507a90bb4172ad9290cf3f9f88\n"
    },
    {
      "commit": "20786d22131e1e3f1799d208a069935fbdaed448",
      "tree": "5c1a1b14392170d66807e5cdbfdf58a5dca63313",
      "parents": [
        "1e1f3383e37141d639e9be969377a484b911449a"
      ],
      "author": {
        "name": "Eleanor Lee",
        "email": "eleanorlee@google.com",
        "time": "Mon Oct 05 18:18:30 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 05 18:25:22 2026"
      },
      "message": "[Community Contributions] Clean up kAnimatedGifRefactor and remove third_party/gif_player\n\nkAnimatedGifRefactor is enabled by default. This CL removes the feature\nflag and legacy BaseGifImage/BaseGifDrawable handling in LogoMediator\nand LogoView, updates CachedImageFetcher to return raw byte[] from disk\ninstead of wrapping in BaseGifImage, and removes the now-unused\n//third_party/gif_player library (jp.tomorrowkey.android.gifplayer).\n\nBug: 434200490\nChange-Id: I979510c2961b141b6c0cb90df37ae00c4d34b100\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8508201\nCommit-Queue: Eleanor Lee \u003celeanorlee@google.com\u003e\nReviewed-by: Ted Choc \u003ctedchoc@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1711513}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 67c814cd03afa822e5cdd6f7365b3a34191f938b\n"
    },
    {
      "commit": "1e1f3383e37141d639e9be969377a484b911449a",
      "tree": "415f854a4ff12c3fd7da110f21cfbc1a691e3152",
      "parents": [
        "22b2411a6e642487297592c599c03ea1ae8683c1"
      ],
      "author": {
        "name": "Andrew Grieve",
        "email": "agrieve@chromium.org",
        "time": "Mon Oct 05 16:15:33 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 05 16:23:44 2026"
      },
      "message": "Reland \"checkstyle: Optimize JVM flags and bound memory for checkstyle runs\"\n\nThis reverts commit 7035b908a050b6b9c3dfe9c9a2db77597b80442e.\n\nReason for reland: depenedent change has relanded\n\nOriginal change\u0027s description:\n\u003e Revert \"checkstyle: Optimize JVM flags and bound memory for checkstyle runs\"\n\u003e\n\u003e This reverts commit 25ac3e7cfd6ccdf4c58916171b576b94914d3fab.\n\u003e\n\u003e Reason for revert: To revert parent CL crrev.com/c/8465631\n\u003e\n\u003e Failure Link:\n\u003e https://ci.chromium.org/p/chromium/builders/ci/linux-presubmit/b8669295214594807905\n\u003e\n\u003e Original change\u0027s description:\n\u003e \u003e checkstyle: Optimize JVM flags and bound memory for checkstyle runs\n\u003e \u003e\n\u003e \u003e Empirical benchmark on Main.java checkstyle execution (5 warm runs):\n\u003e \u003e - Baseline checkstyle duration: 673.8 ms\n\u003e \u003e - Optimized checkstyle duration: 580.9 ms\n\u003e \u003e - Latency saved: -92.9 ms (-13.8%)\n\u003e \u003e\n\u003e \u003e Checkstyle is invoked as a short-lived CLI process during presubmit\n\u003e \u003e when Java files are modified. By default, the HotSpot JVM spends\n\u003e \u003e significant CPU time in C2 JIT compilation, which adds pure startup\n\u003e \u003e overhead for a process that only runs for a fraction of a second.\n\u003e \u003e\n\u003e \u003e This change optimizes the JVM execution parameters:\n\u003e \u003e - Conditionally applies -XX:TieredStopAtLevel\u003d1 for runs with \u003c 100\n\u003e \u003e   files to restrict HotSpot to C1 compilation and minimize startup\n\u003e \u003e   latency, while preserving full C2 JIT compilation for large batches.\n\u003e \u003e - Adds -Xmx512m to bound JVM heap size and prevent memory thrashing.\n\u003e \u003e - Caps ThreadPoolExecutor worker count in checkstyle_test.py.\n\u003e \u003e - Adds unit tests verifying JVM flag construction for small and large\n\u003e \u003e   file batches.\n\u003e \u003e\n\u003e \u003e BUG\u003d534712288\n\u003e \u003e TEST\u003dpython3 ./tools/android/checkstyle/checkstyle_test.py\n\u003e \u003e TEST\u003dgit cl presubmit\n\u003e \u003e\n\u003e \u003e Change-Id: I71385a12f47f0ede23d27d2c4fc330db18c71d40\n\u003e \u003e Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8402527\n\u003e \u003e Commit-Queue: James Hawkins \u003cjhawkins@chromium.org\u003e\n\u003e \u003e Reviewed-by: Andrew Grieve \u003cagrieve@chromium.org\u003e\n\u003e \u003e Cr-Commit-Position: refs/heads/main@{#1708381}\n\u003e\n\u003e Bug: 534712288,568010598\n\u003e No-Presubmit: true\n\u003e No-Tree-Checks: true\n\u003e No-Try: true\n\u003e Change-Id: I4c1f4d1f0adb80be97949237344b40fd4a45e723\n\u003e Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8498494\n\u003e Bot-Commit: rubber-stamper@appspot.gserviceaccount.com \u003crubber-stamper@appspot.gserviceaccount.com\u003e\n\u003e Owners-Override: Takashi Nakayama \u003ctnak@google.com\u003e\n\u003e Commit-Queue: Takashi Nakayama \u003ctnak@chromium.org\u003e\n\u003e Cr-Commit-Position: refs/heads/main@{#1708678}\n\nBug: 534712288,568010598\nChange-Id: Ife96f60257d930909b6ffd4dc4dd66b772ba5d92\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8510759\nAuto-Submit: Andrew Grieve \u003cagrieve@chromium.org\u003e\nCommit-Queue: rubber-stamper@appspot.gserviceaccount.com \u003crubber-stamper@appspot.gserviceaccount.com\u003e\nBot-Commit: rubber-stamper@appspot.gserviceaccount.com \u003crubber-stamper@appspot.gserviceaccount.com\u003e\nCr-Commit-Position: refs/heads/main@{#1711360}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 3e807c2563b54d0c0e0693e027f1692d5bc72a68\n"
    },
    {
      "commit": "22b2411a6e642487297592c599c03ea1ae8683c1",
      "tree": "a59bdba8bad077e8d149003dd5d23bf1dd159231",
      "parents": [
        "516fa09bf9f76a6dd1a7889fe68e41ccf167bd3f"
      ],
      "author": {
        "name": "Andrew Grieve",
        "email": "agrieve@chromium.org",
        "time": "Mon Oct 05 15:30:53 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 05 15:37:06 2026"
      },
      "message": "Reland \"Android: Use native checkstyle binary on Linux x64\"\n\nThis reverts commit 39454db9cae06f27a8780ffa3b2d112d9802cc86.\n\nReason for reland: split roll \u0026 error suppressions into separate\nchanges.\n\nOriginal change\u0027s description:\n\u003e Revert \"Android: Use native checkstyle binary on Linux x64\"\n\u003e\n\u003e This reverts commit 8a0faa3548a069e18b3c3d739601d862c423510a.\n\u003e\n\u003e Reason for revert: Culprit of presubmit failure crbug.com/568010598\n\u003e\n\u003e Failure Link:\n\u003e https://ci.chromium.org/p/chromium/builders/ci/linux-presubmit/b8669295214594807905\n\u003e\n\u003e Original change\u0027s description:\n\u003e \u003e Android: Use native checkstyle binary on Linux x64\n\u003e \u003e\n\u003e \u003e Rolls checkstyle to 14.1.0, whose CIPD package now contains a native\n\u003e \u003e Linux x64 binary alongside checkstyle-all.jar. checkstyle.py uses the\n\u003e \u003e binary when running on a Linux x64 host (~10x faster than the jar), and\n\u003e \u003e falls back to the jar elsewhere.\n\u003e \u003e\n\u003e \u003e Also fixes FallThrough: in 14.x, reliefPattern is matched against\n\u003e \u003e non-comment AST text (e.g. \"EXPR\"), so \".*\" disabled the check. Use \"\\s\"\n\u003e \u003e instead, which matches all // comments and /* */ comments containing\n\u003e \u003e whitespace.\n\u003e \u003e\n\u003e \u003e Bug: 534712288\n\u003e \u003e Change-Id: I902233d0477f985cc08d65e97654612a98d3388d\n\u003e \u003e Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8465631\n\u003e \u003e Reviewed-by: Sam Maier \u003csmaier@google.com\u003e\n\u003e \u003e Commit-Queue: Andrew Grieve \u003cagrieve@chromium.org\u003e\n\u003e \u003e Cr-Commit-Position: refs/heads/main@{#1707369}\n\u003e\n\u003e Bug: 534712288, 568010598\n\u003e Bug: 534712288\n\u003e Change-Id: Iedc46f60f29bc809174a7f49971279a4ccfaecfb\n\u003e Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8498035\n\u003e Bot-Commit: rubber-stamper@appspot.gserviceaccount.com \u003crubber-stamper@appspot.gserviceaccount.com\u003e\n\u003e Owners-Override: Takashi Nakayama \u003ctnak@google.com\u003e\n\u003e Commit-Queue: Takashi Nakayama \u003ctnak@chromium.org\u003e\n\u003e Cr-Commit-Position: refs/heads/main@{#1708747}\n\nBug: 534712288, 568010598\nBug: 534712288\nChange-Id: I2e4fc58d1b8edc663d24e8f6d141d0ddbc8425fa\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8507535\nCommit-Queue: Andrew Grieve \u003cagrieve@chromium.org\u003e\nReviewed-by: Sam Maier \u003csmaier@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1711311}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: d33c7e76fe0dfdb9186037f4ce6e903a90987f7c\n"
    },
    {
      "commit": "516fa09bf9f76a6dd1a7889fe68e41ccf167bd3f",
      "tree": "38c5134a2abb7a5ad0c2a55ca559b752b0b00b87",
      "parents": [
        "cbbc19d3d1cec92aaccab4ef2319c028186bd4d7"
      ],
      "author": {
        "name": "Samuel Huang",
        "email": "huangs@chromium.org",
        "time": "Mon Oct 05 01:40:01 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 05 01:45:48 2026"
      },
      "message": "[CALI] Add \"Zoom Fit\" to dynamically scale Screenshot to fit pane\n\nThis CL adds the \"Fit\" entry to the Zoom dropdown. Selecting this causes\nthe Screenshot to dynamically scale to fit the available viewport along\nthe layout orientation, while preserving the aspect ratio.\n\nRe. terminology: \"Zoom\" is the UI feature / intent, and \"Scale\" is the\nsizing multiplier applied to the Screenshot. Under Fixed Zoom, these are\nthe same. Under Zoom Fit, \"Zoom\" is the abstract idea of \"Fit\", and\n\"Scale\" varies on Screenshot Pane\u0027s viewport dimensions.\n\nWLOG, let\u0027s assume Horizontal Layout, where Screenshot Pane appears on\nleft / right, with a vertical Splitter that slides horizontally.\n\nKey Features:\n* Zoom \"Fit\" Option: Screenshot Pane width (SPW) change triggers Scale\n  change: Scaled Screenshot becomes maximally wide without triggering\n  horizontal scrollbar.\n* Auto-Resize for Zoom \"Fit\": SPW is changed to produce 100% scale,\n  best-effort (i.e., subject to min / max pane constraints).\n* Dynamic Option label: The \"Fit\" dropdown item shows current Scale as\n  percentage, e.g., \"Fit (42.15%)\". Ths requires #\n\nUnder Fixed Zoom, Auto-Resize triggers Scale (fixed) \u003d\u003e SPW update. The\nnew Zoom Fit feature imposes SPW \u003d\u003e Scale. Auto-Resize thus triggers\nScale (100%) \u003d\u003e SPW \u003d\u003e Scale. Getting these right requires addressing\nvarious UI details:\n* Auto-Resize Overhead: Given Scale, we compute the Scaled Screenshot\n  width and change SPW to fit. However, if Scaled Screenshot *height* is\n  too large, the vertical scrollbar will show -- this requires adding\n  \"overhead\" to SPW. For Vertical Layout, we\u0027d also add Screenshot Info\n  height. `LayoutController._autoResize()` already handles this.\n* Zoom Fit Scrollbar Peekaboo: Horizontal scrollbar must not be shown.\n  For SPW \u003d\u003e Scale, the \"naive\" Scale can similarly cause vertical\n  scrollbar to show, and transitively cause horizontal scrollbar to\n  show -- but we don\u0027t want that. So if this happens, we subtract\n  scrollbar thickness from SPW and recompute Scale. But at boundary\n  case, this can in turn make vertical scrollbar unnecessary! Thus the\n  scaled Screenshot will now have awkward space around it. We solve this\n  by forcing the vertical scrollbar to appear. This is handled in\n  `ScreenshotVis._applyRescale()`.\n* SPW Imprecision: SPW is controlled in CSS via `#div-pane-screenshot`\u0027s\n  `flex-basis` as percentage, and Chrome seems to truncate to 4 decimal\n  places. Additional truncation might also happen in the browser. As a\n  result, the raw SPW read might be off-integer. Now, for Auto-Resize on\n  Zoom Fit we have Scale (100%) \u003d\u003e SPW \u003d\u003e Scale. Suppose\n  Scale (100%) \u003d\u003e SPW step yields 800px as the desired SPW. But once\n  applied as `flex-basis` and read back, we get 799.984375px. When we\n  resize Screenshot (canvas) we\u0027d like integer along the layout\n  direction. If we use `floor()` we\u0027d get 799px, and now Scale becomes\n  799px / 800px !\u003d 100%! Therefore we need `round()` to restore\n  fidelity. But now we\u0027d have 800px Screenshot inside 799.984375px\n  Screenshot Pane; would horizontal scrollbar appear? Fortunately, it\n  appears pre-rounding is also used by the browser on deciding whether\n  to show the scrollbar. So this is okay. This is handled in\n  `VisOptions.updateGeometry()`.\n\nThe code also handles Vertical Layout, of course. Details:\n* style.css:\n  * `#sel-zoom`: Increase width from `90px` to `110px`.\n  * `#div-screenshot`: Add `[data-force-scroll\u003d\"{x,y}\"]` to force-show\n    horizontal / vertical scrollbar.\n* model.js:\n  * `ZOOM_LEVELS`: Add `{title: \u0027Fit\u0027, scale: null}` at index 0.\n  * Replace `ZOOM_LEVEL_DEFAULT_INDEX` with `ZOOM_FIT_INDEX \u003d 0`.\n  * `VisOptions`:\n    * CTOR: Default to Zoom Fit via `zoomIndex \u003d ZOOM_FIT_INDEX`.\n    * Add `isZoomFit()` to check whether Zoom Fit mode is used.\n    * Add `getAutoResizeDims()` to return the desired Scaled dimensions\n      for Auto-Resize, using scale for Fixed Zoom and 100% for Zoom Fit.\n    * Update `updateGeometry()`: For Zoom Fit, calculate `scale` to\n      resize Screenshot to fit Screenshot Viewport [width, height] for\n      [Horizontal, Vertical] Layout.\n  * `ViewNode`: Remove unused property `expanded`.\n* ui_common.js: Update `HINT_STRINGS[LAYOUT_SPLITTER` to include hint on\n  double-click to Auto-Resize.\n* layout_ui.js: `LayoutController`:\n  * Update `_autoResize()`: Use `getAutoResizeDims()`.\n* screenshot_ui.js:\n  * `ScreenshotInfoVis`: CTOR: Add JSDoc.\n  * `ScreenshotVis`:\n    * CTOR: Add JSDoc.\n    * Rename `_refreshScreenshotDimensions()` --\u003e `_applyRescale()`, and\n      update to handle Zoom Fit:\n      * Use two-pass dimension calculation to detect and compensate for\n        induced secondary scrollbar appearance, possibly force scrollbar\n        appearance via `dataset.forceScroll` to handle boundary issues.\n  * `ScreenshotController`:\n    * CTOR: Add passed `onResize` callback.\n    * Update `_bindViewportResize()`: For the resize observer lambda:\n      When calling `updateScaleAndRefresh()` pass `isZoomFit()` as\n      `needToRescale` to trigger dynamic resize; call `onResize()`\n      always.\n* app.js:\n  * MainVis:\n    * Update `populateZoomOptions()` to initialize selection to\n      `ZOOM_FIT_INDEX`.\n    * Add `updateZoomFitLabel()`: Format the \"Fit\" dropdown option text\n      to `Fit ({#.##}%)`, when active and loaded (else reset to `Fit`).\n  * MainController:\n    * Wire `onResize` callback into `ScreenshotController` to trigger\n      `updateZoomFitLabel()`.\n    * Update `handleLoad()` and `selZoom` change event listeners to\n      refresh the \"Fit\" label.\n\nBug: 544811853\nChange-Id: Ic2289bb14d0921768081402e2ca0a706da5f640c\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8503671\nReviewed-by: Brandon Wylie \u003cwylieb@google.com\u003e\nCommit-Queue: Samuel Huang \u003chuangs@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1710949}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 7688711a24d9eaa6afff029cdc9ac80c196d25d2\n"
    },
    {
      "commit": "cbbc19d3d1cec92aaccab4ef2319c028186bd4d7",
      "tree": "425e4bdd43f8ad27f9c8f5c116f2c6632e5132e9",
      "parents": [
        "e137b830ed7bb5d0fe70714f80bef87812275067"
      ],
      "author": {
        "name": "Andrew Grieve",
        "email": "agrieve@chromium.org",
        "time": "Fri Oct 02 22:12:28 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 02 22:20:47 2026"
      },
      "message": "Roll //third_party/checkstyle 10.12.1 -\u003e 14.1.0\n\nAlso adds \"checkstyle.py --all\" and presubmit checks to prevent rolling\nwithout checking for new errors across the codebase.\n\nBug: 534712288\nChange-Id: I3c62f5b3983a8ef60464703e139ba40250167d37\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8507678\nCommit-Queue: Andrew Grieve \u003cagrieve@chromium.org\u003e\nReviewed-by: Sam Maier \u003csmaier@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1710477}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: d9283fc6c6d69c61987473d8472fee253dc149f4\n"
    },
    {
      "commit": "e137b830ed7bb5d0fe70714f80bef87812275067",
      "tree": "14467da8998a263a9c30f7c1a41b08c35b9e966a",
      "parents": [
        "46cd5844bf6cc592a654a24f8376fc97c7829b74"
      ],
      "author": {
        "name": "Andrew Grieve",
        "email": "agrieve@chromium.org",
        "time": "Fri Oct 02 18:49:13 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 02 18:54:57 2026"
      },
      "message": "Android: Suppress Checkstyle Javadoc parse errors\n\nIn Checkstyle 14.1.0, AbstractJavadocCheck subclasses (such as\nUnusedImports with processJavadoc\u003dtrue and JavadocType) fail on Javadoc\nsyntax errors.\n\nUpdate suppressions.xml to DTD 1.2 and suppress Javadoc parse errors.\n\nBug: 534712288\nChange-Id: I6984e934435c3462d9637119455377fe631d9cc3\nCq-Include-Trybots: luci.chrome.try:android-internal-dbg,android-internal-binary-size\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8501656\nReviewed-by: Sam Maier \u003csmaier@google.com\u003e\nCommit-Queue: Andrew Grieve \u003cagrieve@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1710291}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 8a8fe2938246aa31add02d2a2b46f20b9f47a543\n"
    },
    {
      "commit": "46cd5844bf6cc592a654a24f8376fc97c7829b74",
      "tree": "3e538c2e34517a1ec6df7b83e0932170ab963441",
      "parents": [
        "4705f93499a716fe1d4fa96ab99f89cde1751879"
      ],
      "author": {
        "name": "Hans Wennborg",
        "email": "hans@chromium.org",
        "time": "Thu Oct 01 22:22:17 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 01 22:29:11 2026"
      },
      "message": "Revert \"Ruff lint: relint tools (part 1/4: accessibility .. generate_stubs).\"\n\nThis reverts commit 212547226767b6dfa740d3af8ac85b6a45edb887.\n\nReason for revert:\nThis broke tools/clang/scripts/build.py by removing \"unused\"\nvariables that were actually in use. Who knows what else it broke.\n\nFailure Link:\nhttps://ci.chromium.org/ui/p/chromium/builders/ci/ToTLinux%20(dbg)/40370/overview\n\nOriginal change\u0027s description:\n\u003e Ruff lint: relint tools (part 1/4: accessibility .. generate_stubs).\n\u003e\n\u003e Migrate tools/ subdirectories (accessibility through generate_stubs)\n\u003e from Pylint to Ruff for Python linting. Subdirectory PRESUBMIT.py files\n\u003e drop legacy RunPylint and GetPylint calls in favor of top-level\n\u003e tools/PRESUBMIT.py Ruff checks, while existing pylint comments are\n\u003e cleaned up and remaining Ruff diagnostics are fixed or suppressed.\n\u003e\n\u003e LSC Doc: https://docs.google.com/document/d/1QRhY2yqlicseeVRVLa_gk4YXL4IBSM913-ZW1SdPZLU/edit?tab\u003dt.0\n\u003e\n\u003e Bug: 539486220\n\u003e Change-Id: If578fb45f68f7f5ae84955e7a5533a5e8e534565\n\u003e Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8497377\n\u003e Owners-Override: Alex Ovsienko \u003covsienko@google.com\u003e\n\u003e SLSA-Policy-Verified: SLSA Policy Verification Service \u003cdevtools-gerritcodereview-exitgate@google.com\u003e\n\u003e Commit-Queue: Alex Ovsienko \u003covsienko@google.com\u003e\n\u003e Reviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\n\u003e Cr-Commit-Position: refs/heads/main@{#1708792}\n\nBug: 539486220, 568301932\nBug: 539486220\nChange-Id: I71084115fdad41e1f96bed81062b57e9e8489700\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8501742\nAuto-Submit: Hans Wennborg \u003chans@chromium.org\u003e\nOwners-Override: Ahmed Moussa \u003cahmedmoussa@google.com\u003e\nCommit-Queue: Hans Wennborg \u003chans@chromium.org\u003e\nBot-Commit: rubber-stamper@appspot.gserviceaccount.com \u003crubber-stamper@appspot.gserviceaccount.com\u003e\nOwners-Override: Dana Fried \u003cdfried@chromium.org\u003e\nSLSA-Policy-Verified: SLSA Policy Verification Service \u003cdevtools-gerritcodereview-exitgate@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1709455}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: fc2e8e543698572671a4b6af1410a0ca468addc9\n"
    },
    {
      "commit": "4705f93499a716fe1d4fa96ab99f89cde1751879",
      "tree": "93390f4767edde9eb53bc030eee91882bc18e8c9",
      "parents": [
        "df8e1d8b7336789b2b2ef77f6c0a6879d5e79e1c"
      ],
      "author": {
        "name": "Alex Ovsienko",
        "email": "ovsienko@google.com",
        "time": "Thu Oct 01 09:29:52 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 01 09:34:26 2026"
      },
      "message": "Ruff lint: relint tools (part 1/4: accessibility .. generate_stubs).\n\nMigrate tools/ subdirectories (accessibility through generate_stubs)\nfrom Pylint to Ruff for Python linting. Subdirectory PRESUBMIT.py files\ndrop legacy RunPylint and GetPylint calls in favor of top-level\ntools/PRESUBMIT.py Ruff checks, while existing pylint comments are\ncleaned up and remaining Ruff diagnostics are fixed or suppressed.\n\nLSC Doc: https://docs.google.com/document/d/1QRhY2yqlicseeVRVLa_gk4YXL4IBSM913-ZW1SdPZLU/edit?tab\u003dt.0\n\nBug: 539486220\nChange-Id: If578fb45f68f7f5ae84955e7a5533a5e8e534565\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8497377\nOwners-Override: Alex Ovsienko \u003covsienko@google.com\u003e\nSLSA-Policy-Verified: SLSA Policy Verification Service \u003cdevtools-gerritcodereview-exitgate@google.com\u003e\nCommit-Queue: Alex Ovsienko \u003covsienko@google.com\u003e\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1708792}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 212547226767b6dfa740d3af8ac85b6a45edb887\n"
    },
    {
      "commit": "df8e1d8b7336789b2b2ef77f6c0a6879d5e79e1c",
      "tree": "3e538c2e34517a1ec6df7b83e0932170ab963441",
      "parents": [
        "86fa8f9efc39cfcb75966a3c255b7f2ea7d06c23"
      ],
      "author": {
        "name": "Takashi Nakayama",
        "email": "tnak@chromium.org",
        "time": "Thu Oct 01 08:26:12 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 01 08:30:36 2026"
      },
      "message": "Revert \"Android: Use native checkstyle binary on Linux x64\"\n\nThis reverts commit 8a0faa3548a069e18b3c3d739601d862c423510a.\n\nReason for revert: Culprit of presubmit failure crbug.com/568010598\n\nFailure Link:\nhttps://ci.chromium.org/p/chromium/builders/ci/linux-presubmit/b8669295214594807905\n\nOriginal change\u0027s description:\n\u003e Android: Use native checkstyle binary on Linux x64\n\u003e\n\u003e Rolls checkstyle to 14.1.0, whose CIPD package now contains a native\n\u003e Linux x64 binary alongside checkstyle-all.jar. checkstyle.py uses the\n\u003e binary when running on a Linux x64 host (~10x faster than the jar), and\n\u003e falls back to the jar elsewhere.\n\u003e\n\u003e Also fixes FallThrough: in 14.x, reliefPattern is matched against\n\u003e non-comment AST text (e.g. \"EXPR\"), so \".*\" disabled the check. Use \"\\s\"\n\u003e instead, which matches all // comments and /* */ comments containing\n\u003e whitespace.\n\u003e\n\u003e Bug: 534712288\n\u003e Change-Id: I902233d0477f985cc08d65e97654612a98d3388d\n\u003e Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8465631\n\u003e Reviewed-by: Sam Maier \u003csmaier@google.com\u003e\n\u003e Commit-Queue: Andrew Grieve \u003cagrieve@chromium.org\u003e\n\u003e Cr-Commit-Position: refs/heads/main@{#1707369}\n\nBug: 534712288, 568010598\nBug: 534712288\nChange-Id: Iedc46f60f29bc809174a7f49971279a4ccfaecfb\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8498035\nBot-Commit: rubber-stamper@appspot.gserviceaccount.com \u003crubber-stamper@appspot.gserviceaccount.com\u003e\nOwners-Override: Takashi Nakayama \u003ctnak@google.com\u003e\nCommit-Queue: Takashi Nakayama \u003ctnak@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1708747}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 39454db9cae06f27a8780ffa3b2d112d9802cc86\n"
    },
    {
      "commit": "86fa8f9efc39cfcb75966a3c255b7f2ea7d06c23",
      "tree": "e2c7014ff8efc38d5e64e5be47d3b01d0f9cdffe",
      "parents": [
        "b10d4a9e1a06f8cd6d7d6700dcbba73046b79972"
      ],
      "author": {
        "name": "Takashi Nakayama",
        "email": "tnak@chromium.org",
        "time": "Thu Oct 01 06:24:57 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 01 06:29:01 2026"
      },
      "message": "Revert \"checkstyle: Optimize JVM flags and bound memory for checkstyle runs\"\n\nThis reverts commit 25ac3e7cfd6ccdf4c58916171b576b94914d3fab.\n\nReason for revert: To revert parent CL crrev.com/c/8465631\n\nFailure Link:\nhttps://ci.chromium.org/p/chromium/builders/ci/linux-presubmit/b8669295214594807905\n\nOriginal change\u0027s description:\n\u003e checkstyle: Optimize JVM flags and bound memory for checkstyle runs\n\u003e\n\u003e Empirical benchmark on Main.java checkstyle execution (5 warm runs):\n\u003e - Baseline checkstyle duration: 673.8 ms\n\u003e - Optimized checkstyle duration: 580.9 ms\n\u003e - Latency saved: -92.9 ms (-13.8%)\n\u003e\n\u003e Checkstyle is invoked as a short-lived CLI process during presubmit\n\u003e when Java files are modified. By default, the HotSpot JVM spends\n\u003e significant CPU time in C2 JIT compilation, which adds pure startup\n\u003e overhead for a process that only runs for a fraction of a second.\n\u003e\n\u003e This change optimizes the JVM execution parameters:\n\u003e - Conditionally applies -XX:TieredStopAtLevel\u003d1 for runs with \u003c 100\n\u003e   files to restrict HotSpot to C1 compilation and minimize startup\n\u003e   latency, while preserving full C2 JIT compilation for large batches.\n\u003e - Adds -Xmx512m to bound JVM heap size and prevent memory thrashing.\n\u003e - Caps ThreadPoolExecutor worker count in checkstyle_test.py.\n\u003e - Adds unit tests verifying JVM flag construction for small and large\n\u003e   file batches.\n\u003e\n\u003e BUG\u003d534712288\n\u003e TEST\u003dpython3 ./tools/android/checkstyle/checkstyle_test.py\n\u003e TEST\u003dgit cl presubmit\n\u003e\n\u003e Change-Id: I71385a12f47f0ede23d27d2c4fc330db18c71d40\n\u003e Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8402527\n\u003e Commit-Queue: James Hawkins \u003cjhawkins@chromium.org\u003e\n\u003e Reviewed-by: Andrew Grieve \u003cagrieve@chromium.org\u003e\n\u003e Cr-Commit-Position: refs/heads/main@{#1708381}\n\nBug: 534712288,568010598\nNo-Presubmit: true\nNo-Tree-Checks: true\nNo-Try: true\nChange-Id: I4c1f4d1f0adb80be97949237344b40fd4a45e723\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8498494\nBot-Commit: rubber-stamper@appspot.gserviceaccount.com \u003crubber-stamper@appspot.gserviceaccount.com\u003e\nOwners-Override: Takashi Nakayama \u003ctnak@google.com\u003e\nCommit-Queue: Takashi Nakayama \u003ctnak@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1708678}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 7035b908a050b6b9c3dfe9c9a2db77597b80442e\n"
    },
    {
      "commit": "b10d4a9e1a06f8cd6d7d6700dcbba73046b79972",
      "tree": "27add4c19c5a638059d3c222f22725f23bd12ea3",
      "parents": [
        "397491daefe72fbcf23694f165eec9c0dc253db7"
      ],
      "author": {
        "name": "Samuel Huang",
        "email": "huangs@chromium.org",
        "time": "Thu Oct 01 04:28:06 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 01 04:33:02 2026"
      },
      "message": "[CALI] Add Zoom dropdown with fixed levels\n\nThis CL adds a \"Zoom\" dropdown to the Controls Bar, populated with fixed\nvalues from 10% to 400% (defaulting to 100%). This scales the Screenshot\nto make input and presentation more manageable.\n\nZoom and Sizing features:\n* \"Zoom\" dropdown: Changing the value immediately scales the Screenshot.\n  * Add on-hover tooltip.\n* Screenshot Scaling: The Screenshot canvas is only visually resized\n  using CSS, using CSS variables as an intermediary.\n* Size Info: Also show Scaled dimensions, with progressive text\n  disclosure to prioritize more salient data. Visually:\n\n    Device: {W}x{H}px ({W}x{H}dp) | Scaled: {W}x{H}px ({%.%%} Zoom)\n    {W}x{H}px ({W}x{H}dp) | {W}x{H}px ({%.%%} Zoom)\n    {W}x{H}px | {W}x{H}px\n    {W}x{H}px      (the scaled dimensions)\n\n* Auto-Fit: Double-Click on Panel Divider would resize the Screenshot\n  Pane for best-effort fit of Screenshot at current Zoom, taking account\n  of potential presence of scrollbars.\n\nDetails:\n* index.html:\n  * In `#div-controls`: Add `#sel-zoom` for Zoom selection, along with\n    `\u003clabel\u003e` with `data-hint\u003d\"CTRL_ZOOM\"` and `Zoom:` text.\n    * `\u003coption\u003e` tags are dynamically populated from `ZOOM_LEVELS`\n      constant (see below), take `title` property as text and using\n      array index as value.\n  * In `.div-size-info`: Add `.sp-separator` for a static separator, and\n    `.sp-size-scaled` to show scaled zoom dimensions.\n* style.css:\n  * Add generic `label`: FlexBox with slightly enlarged height, for\n    consistent vertical centering.\n  * Add generic `label` and `select`: Cursor change.\n  * Add `#sel-zoom`: Set width, add temporary positioning to match the\n    full prototype.\n  * Update `.screenshot-inner`: Add CSS variables `--screenshot-width`\n    and `--screenshot-height`, defaulting to `0px`.\n  * Update `.canv-base`: Map `width` and `height` properties directly to\n    these custom variables.\n  * In `#div-screenshot-info`:\n    * Add `.div-size-info`, with `.sp-size-{device,scaled}` with size\n      specified in `ch`.\n    * And `.too-narrow` class to handle extremely narrow viewports where\n      only the scaled dimensions are shown.\n* math.js:\n  * Add `ORIENTATION` enum representing HORIZ / VERT axis alignment.\n  * `Point2D`:\n    * Add `clone()` to copy coordinate objects, using derived classes\u0027\n      CTOR to preserve type.\n    * Add `mulBy()` for in-place scalar multiplication.\n* model.js:\n  * Add `ZOOM_LEVELS` array with scales ranging from 10% to 400%.\n  * Add `ZOOM_LEVEL_DEFAULT_INDEX \u003d 6` targeting 100%.\n  * `LayoutMode`: Add `orientation` getter: `LEFT` / `RIGHT` are\n    `HORIZ`, and `TOP` / `BOTTOM` are `VERT`.\n  * `VisOptions`:\n    * Add comment defining \"World\" vs. \"Scaled\" coordinates.\n    * CTOR:\n      * Add `zoomValue`, initialized to the scale of\n        `ZOOM_LEVEL_DEFAULT_INDEX` (1.0).\n      * Add `scale` representing the current scale ratio.\n      * Add `sDims` (`Dims2D`) to store scaled device dimensions.\n    * Add `setZoomIndex()` to parse index string and assign `zoomValue`.\n    * Add `updateGeometry(vpDims)` to update `scale` and `sDims`.\n      * Currently `vpDims` is only used for trivial checks, but it will\n        be fully used when we add Zoom Fit feature.\n* screenshot_ui.js:\n  * `ScreenshotInfoVis`:\n    * CTOR: `el`: Store `spSizeScaled` element.\n    * Update `_showSize()`: Map scaled dimensions (taking advantage of\n      array destructuring); format zoom string as % to max 2 decimal\n      places; applying layout responsive overrides at 450px and 600px,\n      maybe with `.too-narrow` style; update `.sp-size-scaled`.\n  * `ScreenshotVis`:\n    * Add `_refreshScreenshotDimensions()`: Extracts dimensions; calls\n      `visOpts.updateGeometry()`; updates CSS variables\n      `--screenshot-{width,height}`.\n    * Update `updateScaleAndRefresh(needToRescale)`: Add `needToRescale`\n      param to call `_refreshScreenshotDimensions()` if true.\n    * Add `updateZoom()`: Call `updateScaleAndRefresh(true)`.\n    * Update `setScreenshot()`: Call `updateZoom()` instead of\n      `updateScaleAndRefresh()`.\n  * `ScreenshotController`:\n    * Add `updateZoom()`: Passes through to Vis.\n    * Update `_bindViewportResize()`: Change `updateScaleAndRefresh()`\n      call and pass `false`, to update Size Info (with progressive text\n      disclosure change) without affecting Screenshot.\n* ui_common.js:\n  * Add `CTRL_ZOOM` to `HINT` and `HINT_STRINGS` for tooltip of hover\n    over Zoom box.\n  * `DragHandler`: CTOR: Store passed nullable `onDoubleClick`; bind\n    trigger in `bindAll()`.\n* utils.js:\n  * Add `getScrollbarThickness()` to lazily measure and cache browser\n    scrollbar thickness. This requires empirical measurement on a temp\n    Element with a scrollbar.\n* layout_ui.js:\n  * `LayoutController`:\n    * CTOR: Take params `divScreenshot`, `divScreenshotInfo`; add `el`\n      to wrap the above, and absorb `divMain`, `divPaneScreenshot`,\n      `divMainSplitter`; rename `divMainSplitterDragHandler` --\u003e\n      `mainSplitterDragHandler`, also adapt to handler renames; handle\n      `onDoubleClick` to call `_autoResize()`.\n    * Rename handlers to reflect fact that these are private:\n      `handleDragStart()` --\u003e `_handleDragStart()`.\n      `handleDrag()` --\u003e `_handleDrag()`.\n      `handleDragEnd()` --\u003e `_handleDragEnd()`.\n    * Move `setLayoutMode()` up, `_readPaneScreenshotRatio()` down.\n    * Add `_autoResize()`: Call `_setPaneScreenshotRatio()` with newly\n      calculated pane ratio, based on current `visOpts.scale`. Take\n      into account current orientation, scroll bar thickness, and\n      `#div-screenshot-info` height to properly enlarge viewport.\n* app.js:\n  * `MainElements`: Add `#sel-zoom` as `selZoom`.\n  * `MainVis`: Add `populateZoomOptions()` to render `#sel-zoom` options\n    from ZOOM_LEVELS, then assign ZOOM_LEVELS_DEFAULT_INDEX as default.\n  * `MainController`:\n    * CTOR: Adapt to `LayoutController` new CTOR params.\n    * Update `handleLoad()`: Assign Zoom index *before* calling\n      `screenshotCtrl.initScreenshot()`, which will trigger actual\n      updates.\n    * Update `bindAll()`: Bind `#sel-zoom` change handler.\n    * Update `init()`: Call `populateZoomOptions()`.\n\nBug: 544811853\nChange-Id: Ia98dbf6271f5b06f91fdedb0417cf6e978a5085d\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8483865\nCommit-Queue: Samuel Huang \u003chuangs@chromium.org\u003e\nReviewed-by: Brandon Wylie \u003cwylieb@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1708597}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 3d15c240473cce409391b27eaae26b05e227baf3\n"
    },
    {
      "commit": "397491daefe72fbcf23694f165eec9c0dc253db7",
      "tree": "ca22fcead3871a6af88470b5d0767054a27c7b93",
      "parents": [
        "209495fb6fea6ad5a0c607dec47d6dc9d1eb6d0c"
      ],
      "author": {
        "name": "James Hawkins",
        "email": "jhawkins@google.com",
        "time": "Wed Sep 30 19:13:24 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Sep 30 19:34:12 2026"
      },
      "message": "checkstyle: Optimize JVM flags and bound memory for checkstyle runs\n\nEmpirical benchmark on Main.java checkstyle execution (5 warm runs):\n- Baseline checkstyle duration: 673.8 ms\n- Optimized checkstyle duration: 580.9 ms\n- Latency saved: -92.9 ms (-13.8%)\n\nCheckstyle is invoked as a short-lived CLI process during presubmit\nwhen Java files are modified. By default, the HotSpot JVM spends\nsignificant CPU time in C2 JIT compilation, which adds pure startup\noverhead for a process that only runs for a fraction of a second.\n\nThis change optimizes the JVM execution parameters:\n- Conditionally applies -XX:TieredStopAtLevel\u003d1 for runs with \u003c 100\n  files to restrict HotSpot to C1 compilation and minimize startup\n  latency, while preserving full C2 JIT compilation for large batches.\n- Adds -Xmx512m to bound JVM heap size and prevent memory thrashing.\n- Caps ThreadPoolExecutor worker count in checkstyle_test.py.\n- Adds unit tests verifying JVM flag construction for small and large\n  file batches.\n\nBUG\u003d534712288\nTEST\u003dpython3 ./tools/android/checkstyle/checkstyle_test.py\nTEST\u003dgit cl presubmit\n\nChange-Id: I71385a12f47f0ede23d27d2c4fc330db18c71d40\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8402527\nCommit-Queue: James Hawkins \u003cjhawkins@chromium.org\u003e\nReviewed-by: Andrew Grieve \u003cagrieve@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1708381}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 25ac3e7cfd6ccdf4c58916171b576b94914d3fab\n"
    },
    {
      "commit": "209495fb6fea6ad5a0c607dec47d6dc9d1eb6d0c",
      "tree": "9d549e7a788da48797ffedd3f4e254e83d0745ca",
      "parents": [
        "edf7c79bc9167d1969e9ed01ce9f39a16b77d559"
      ],
      "author": {
        "name": "Andrew Grieve",
        "email": "agrieve@chromium.org",
        "time": "Wed Sep 30 15:01:05 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Sep 30 15:06:16 2026"
      },
      "message": "Android: Add Error Prone check preventing mocking of View \u0026 Activity\n\nMocking these classes is really slow, and generally hurts test fidelity.\n\nBug: 567604165\nChange-Id: I2d7ab0e7e4fabd3189214b5e5fb77af839dbc4f1\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8481598\nCommit-Queue: Andrew Grieve \u003cagrieve@chromium.org\u003e\nReviewed-by: Peter Wen \u003cwnwen@chromium.org\u003e\nOwners-Override: Andrew Grieve \u003cagrieve@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1708120}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 941df5580deeb27bb1aa61da71ee6e99a3977b2a\n"
    },
    {
      "commit": "edf7c79bc9167d1969e9ed01ce9f39a16b77d559",
      "tree": "16df9d6c526f8e4039f4c89e675ce3f3380e3f1b",
      "parents": [
        "d8ba320e5c5c477121540f9b6311ca3e179ad587"
      ],
      "author": {
        "name": "Andrew Grieve",
        "email": "agrieve@chromium.org",
        "time": "Tue Sep 29 19:24:40 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Sep 29 19:29:37 2026"
      },
      "message": "Android: Use native checkstyle binary on Linux x64\n\nRolls checkstyle to 14.1.0, whose CIPD package now contains a native\nLinux x64 binary alongside checkstyle-all.jar. checkstyle.py uses the\nbinary when running on a Linux x64 host (~10x faster than the jar), and\nfalls back to the jar elsewhere.\n\nAlso fixes FallThrough: in 14.x, reliefPattern is matched against\nnon-comment AST text (e.g. \"EXPR\"), so \".*\" disabled the check. Use \"\\s\"\ninstead, which matches all // comments and /* */ comments containing\nwhitespace.\n\nBug: 534712288\nChange-Id: I902233d0477f985cc08d65e97654612a98d3388d\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8465631\nReviewed-by: Sam Maier \u003csmaier@google.com\u003e\nCommit-Queue: Andrew Grieve \u003cagrieve@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1707369}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 8a0faa3548a069e18b3c3d739601d862c423510a\n"
    },
    {
      "commit": "d8ba320e5c5c477121540f9b6311ca3e179ad587",
      "tree": "78d78e7bb084f4d00f288e82b854d0b9505de357",
      "parents": [
        "e68f60c35f287a607d8387f9c05a356bb10650b4"
      ],
      "author": {
        "name": "Haiyang Pan",
        "email": "hypan@google.com",
        "time": "Tue Sep 29 02:31:36 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Sep 29 02:36:34 2026"
      },
      "message": "android: Update Android 17 AVDs to image version 7\n\nUpdates the Android 17 (API 37) AVD configs to use emulator 37.1.11 and\nsystem image r7 (CE2A.260420.050).\n\nThe AVDs are created in https://ci.chromium.org/b/8669391977931822385\n\nBug: 558813685\nChange-Id: Iac1025166e7d4c480028e1e0424813965eaa3b51\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8372262\nReviewed-by: Benjamin Joyce (Ben) \u003cbjoyce@google.com\u003e\nCommit-Queue: Haiyang Pan \u003chypan@google.com\u003e\nAuto-Submit: Haiyang Pan \u003chypan@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1706650}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 874e1f87103d2f1f20d4c8e83e90af80b645ac3a\n"
    },
    {
      "commit": "e68f60c35f287a607d8387f9c05a356bb10650b4",
      "tree": "ac4fc8bba73b7768e056a0d84d19228208141b59",
      "parents": [
        "d547986270a306897e502f8ee7482953bdeb2521"
      ],
      "author": {
        "name": "Samuel Huang",
        "email": "huangs@chromium.org",
        "time": "Mon Sep 28 23:58:39 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Sep 29 00:08:33 2026"
      },
      "message": "[CALI] Add Screenshot Info Bar to display dimensions in px and dp.\n\nThis CL adds the following:\n* Capability to translate between px and dp using device density data\n  obtained from the server (falls back to MDPI baseline 1.0 on failure,\n  with warning logged, instead of blocking).\n* Screenshot Info Bar: A fixed status bar at the bottom of the\n  Screenshot Pane. This shows Size Info containing the device\u0027s native\n  World Size in both px and dp.\n  * Width-dependent responsive text: Progressive text disclosure hides\n    certain auxiliary details if space is constrained.\n\nDetails:\n* index.html: In `#div-pane-screenshot`:\n  * Add `#div-screenshot-info` for the Screenshot Info Bar.\n    * Add `.div-size-info` for Size Info, containing `.sp-size-device`\n      to dynamically render World Size text.\n  * The `data-show` attribute controls visibility: `none` for empty;\n    `size` for Size Info (upcoming: `pointer` for Pointer Info).\n* style.css: Add `#div-screenshot-info` selectors:\n  * Style: Unselectable, horizontally centered, fixed-width text, gray\n    background, anchored at the bottom.\n  * Add `.div-size-info`: Flex container to display centered text.\n    * Controlled via the parent\u0027s `data-show\u003d\"size\"` attribute.\n* math.js: Add `capFixed(v, prec)` to format numbers with precision,\n  wrapping `Number.toFixed()` but cleanly truncating trailing decimal\n  zeros (capture regex is used to handle `capFixed(0, 0)` edge case).\n* model.js:\n  * `VisOptions`:\n    * CTOR: Add `densityFactor` for px/dp translation, (default \u003d 1.0).\n    * Add `setDensityFactor()` to assign `densityFactor`, protecting\n      against non-positive entries.\n    * Add `pxToDp()` to convert px to dp by dividing by `densityFactor`.\n  * `MainModel`:\n    * Add `isLoaded` boolean, ensuring UI handlers (e.g., resize) remain\n      inert unless data has successfully loaded. This is initially\n      `false`, set in `load()`, and cleared in `unload()`.\n    * Update `_fetchData()`: Retrieve `/api/density.json` from the\n      server concurrently; parse, validate, and return alongside the\n      other ADB data.\n    * Update `load()`: Extract `density_factor` from density data and\n      write it to `visOpts`.\n* screenshot_ui.js:\n  * Add `ScreenshotInfoVis` as the main Visualizer for the Info Bar.\n    * CTOR: Accept `divScreenshotInfo` and store it into `el.root`,\n      caching `spSizeDevice`, and storing the passed `visOpts`.\n    * Add `clear()`: Wipes the bar by setting `data-show` to `\"none\"`.\n    * Add `_formatDp()`: Formats pixel to dp, capped at 1 decimal place.\n    * Add `_showSize()` to render Size Info:\n      * Format: \"Device: {width}x{height}px ({width}x{height}dp)\".\n      * Query the container `root` width and trim if too small:\n        * \u003c 400px: Hide heading \u003d \"Device: \".\n        * \u003c 250px: Hide aux. text \u003d \" ({width}x{height}dp)\".\n    * Add `update()`: Deduce whether the Screenshot has a valid size;\n      show Size Info if so, else clear.\n  * `ScreenshotVis`: Refactored to be file-visible:\n    * CTOR: Accept `divScreenshotInfo`, storing it as `el.root`;\n      instantiate `ScreenshotInfoVis` as `this.screenshotInfoVis`.\n    * Add `clear()` to teardown the Screenshot canvas and invoke\n      `screenshotInfoVis.clear()`.\n    * Add `updateScaleAndRefresh()` as a wrapper to invoke\n      `ScreenshotInfoVis.update()` (upcoming: Handle scaling).\n    * Rename `init()` --\u003e `setScreenshot()`, calling\n      `updateScaleAndRefresh()` at the end to refresh the Info Bar.\n  * Add `ScreenshotController` as the new unified interface:\n    * CTOR: Store the passed `model`, accept `divScreenshot` and\n      `divScreenshotInfo` to instantiate `ScreenshotVis` as `this.vis`,\n      cache `vis.el`, and invoke `_bindAll()`.\n    * Add `_bindViewportResize()`: Instantiates a `ResizeObserver` on\n      the scrollable viewport container `#div-screenshot` (which expands\n      and shrinks dynamically during window resizes and splitter drags)\n      to trigger info bar text updates.\n    * Add `_bindAll()`, which delegates to `_bindViewportResize()`.\n* app.js:\n  * `MainElements`: Add `#div-screenshot-info` as `divScreenshotInfo`.\n  * `MainVis`: Remove `screenshotVis`.\n  * `MainController`:\n    * CTOR: Instantiate `ScreenshotController` as `screenshotCtrl`.\n    * `clearUI()`: Redirect the old Vis `clearUI()` call to\n      `screenshotCtrl.clear()`.\n    * `handleLoad()`: Replace `screenshotVis.setScreenshot()` call with\n      `screenshotCtrl.initScreenshot()`, cleanly pulling coordinates\n      directly from the shared model.\n\nBug: 544811853\nChange-Id: I474addf462fa310256b3344f30acd1c39cbfbb31\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8466386\nReviewed-by: Brandon Wylie \u003cwylieb@google.com\u003e\nCommit-Queue: Samuel Huang \u003chuangs@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1706511}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 229b8482f2146eb11a2838b8a167cd15e6363499\n"
    },
    {
      "commit": "d547986270a306897e502f8ee7482953bdeb2521",
      "tree": "5e7c02112ab1c480c943d226e0a1b4a14a436086",
      "parents": [
        "94e177cc4569fc3c9a2c6787f058165628a48c97"
      ],
      "author": {
        "name": "Haiyang Pan",
        "email": "hypan@google.com",
        "time": "Fri Sep 25 23:30:29 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Sep 25 23:35:23 2026"
      },
      "message": "android: Update Android 17 image to version 7 in creation config\n\nBug: 558813685\nChange-Id: Id9b9d69b2aecf1b4bf193745d08b6531eeaf7fd3\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8469509\nAuto-Submit: Haiyang Pan \u003chypan@google.com\u003e\nReviewed-by: Benjamin Joyce (Ben) \u003cbjoyce@google.com\u003e\nCommit-Queue: Benjamin Joyce (Ben) \u003cbjoyce@google.com\u003e\nReviewed-by: Mau Camargo \u003ccamargomau@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1705292}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 6ebad257b4228b22e3be15e43c6abc00eee77749\n"
    },
    {
      "commit": "94e177cc4569fc3c9a2c6787f058165628a48c97",
      "tree": "092c53e1953bf9cfddf5ba42f0e413179f0c3976",
      "parents": [
        "f744a6061a50ecfb53f27e9063c94419600ff363"
      ],
      "author": {
        "name": "Andrew Grieve",
        "email": "agrieve@chromium.org",
        "time": "Fri Sep 25 19:19:45 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Sep 25 19:28:47 2026"
      },
      "message": "Android: Add @NullMarked to ChromeActivity\n\nBug: 389129271\nChange-Id: I9cc6868c97b88990fa91d6b0e97b1d98d4a92776\nCq-Include-Trybots: luci.chrome.try:android-internal-dbg,android-internal-binary-size\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8443960\nReviewed-by: Henrique Nakashima \u003chnakashima@chromium.org\u003e\nCommit-Queue: Andrew Grieve \u003cagrieve@chromium.org\u003e\nOwners-Override: Andrew Grieve \u003cagrieve@chromium.org\u003e\nAuto-Submit: Andrew Grieve \u003cagrieve@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1705039}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 3223b5d0026a189ed366cc4bde80f6f10af226f6\n"
    },
    {
      "commit": "f744a6061a50ecfb53f27e9063c94419600ff363",
      "tree": "008f10d47b11545bb9e2baafefd6ec417f82a5bc",
      "parents": [
        "baa85519ec7a4824ffaedb8b2d59cb9ea61e8909"
      ],
      "author": {
        "name": "Victor Hugo Vianna Silva",
        "email": "victorvianna@google.com",
        "time": "Mon Sep 21 17:31:50 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Sep 21 17:37:52 2026"
      },
      "message": "android: Clean up references to obsolete Monochrome targets\n\nThe monochrome_public_bundle, monochrome_public_apk, and monochrome_apk\ntargets were removed earlier. This change updates remaining references\nand comments in build tooling, gradle generation, and benchmarks to\nreference their Chrome equivalents instead.\n\nAlso remove a reference to an inexistent //chrome/android:chrome_apk\ntarget from generate_gradle.py.\n\nBug: 427481836\nChange-Id: Icfb2d90d510ddf5399fa40c20d01085f881b9dfe\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8398894\nReviewed-by: German Garcia \u003cggj@google.com\u003e\nReviewed-by: Peter Wen \u003cwnwen@chromium.org\u003e\nReviewed-by: Sky Malice \u003cskym@chromium.org\u003e\nCommit-Queue: Victor Vianna \u003cvictorvianna@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1701854}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 41e5cf5e71b16fdde8ae211bb6d39d5e871134a1\n"
    },
    {
      "commit": "baa85519ec7a4824ffaedb8b2d59cb9ea61e8909",
      "tree": "40879356a41ed05c7ab0484d90ea0f974f7128f5",
      "parents": [
        "36bf19777fb225626aafa4b7d5ab7ea7ab2330ee"
      ],
      "author": {
        "name": "Samuel Huang",
        "email": "huangs@chromium.org",
        "time": "Mon Sep 21 04:11:17 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Sep 21 04:16:40 2026"
      },
      "message": "[CALI] Add interactive View Tree expand / collapse\n\nThis CL adds interactive expand / collapse features to the View Tree.\nUsers can click disclosure triangles for each internal (i.e., non-leaf)\nView Row to collapse or expand descendant rows, facilitating deep\nhierarchy navigation.\n\nView Tree features:\n* Expand / Collapse Toggles: Adjusts descendant visibility of each\n  internal View Row, with the disclosure triangle changing between\n  pointing downwards (expanded) and pointing towards right (collapsed).\n  * Independence: By default, toggling the expansion state of a View Row\n    does not affect the states of descendant internal View Rows.\n* Alt-Click Descendant Toggling: Holding the Alt key (Option key on\n  Mac) while clicking a toggle would expand or collapse all descendant\n  View Rows.\n\nAlso change how the disclosure triangle is drawn.\n\nDetails:\n* style.css: `#div-view-tree`:\n  * `.view-row`: `.tree-toggle` and `.view-label`.\n  * `.tree-toggle`: Lighten disclosure triangle color to indicate it\u0027s\n    no longer stuck-to-on; on hover darken and show `cursor: pointer`.\n  * Disclosure triangle: Change from `\\u25E2` character to CSS border\n    triangle; default to pointing towards right (collapsed); use\n    `.view-row.expanded` rotate to point downwards.\n  * `.view-label`: Add `pointer-events: none` to prevent child clicks\n    from hijacking event delegation target.\n* tree_ui.js:\n  * `TreeVis`: Now accessible only to `TreeController`\n    * CTOR: Add `model` param and storage; add `expandedMap` for\n      Tree Row expansion states, initialized to `true` to fully expand\n      on load; add `viewRows` to cache `.view-row` elements for fast\n      lookup based on index.\n    * Update `clear()`: Reset `expandedMap` and `viewRows`.\n    * Add `updateVisibility()` to show / hide View Rows (with `.hidden`)\n      based on `expandedMap`: A View Row is visible iff all of its\n      ancestors are expanded (the root is always visible).\n      * Implementing simple O(depth) check for each View Row; this\n        will be optimized later.\n    * Update `populateViewList()`: Remove `views` param since we can use\n      `model`; initialize `expandedMap` (filled to true) and `viewRows`;\n      populate `viewRows` in `view` loop; call `updateVisibility()` for\n      initial update; remove `\\u25E2` character for disclosure triangle.\n    * Add `toggleRowExpansion()`: Handles toggling of View Row specified\n      by `index`. The `includeDescendents` param specifies whether to\n      similarly show / hide descendants. This can be done efficiently\n      since `views` is ordered by pre-order DFS; we can iterate until\n      depth boundaries are crossed, avoiding recursive call overhead.\n  * `TreeController`:\n    * CTOR: Take `divViewTree` and create `TreeVis`; call `bindAll()`.\n    * Add `clear()` to clean up visibility map.\n    * Add `_onToggleExpansion()` wrapper to toggle and refresh.\n    * Add `bindAll()` for event binding. Use root event delegation to\n      handle `.tree-toggle` click with a single click handler on the\n      container, using `data-index` to identify View Row.\n* app.js:\n  * `MainVis`: Remove `treeVis`.\n  * `MainController`:\n    * Update `TreeController` instantiation (needs `divViewTree`).\n    * Add `clearUI()` method to centralize visual reset, routing to\n      `treeCtrl.clear()`.\n    * Update `handleLoad()` to call `this.clearUI()`.\n\nBug: 544811853\nChange-Id: I99d9401c6804bf3668d29f6423bd1634a81e4755\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8415929\nReviewed-by: Brandon Wylie \u003cwylieb@google.com\u003e\nCommit-Queue: Samuel Huang \u003chuangs@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1701549}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: db38e8b0a8e20046e5f1642eac1d2027d4999f69\n"
    },
    {
      "commit": "36bf19777fb225626aafa4b7d5ab7ea7ab2330ee",
      "tree": "869c787850eac0b9cc74685b3f48f7bd13ad3510",
      "parents": [
        "40c8f67266d9bbcfb977c8761257018a23602a4e"
      ],
      "author": {
        "name": "Mohamed Adel",
        "email": "adelm@google.com",
        "time": "Fri Sep 18 23:14:41 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Sep 18 23:25:05 2026"
      },
      "message": "[Android] Add an ErrorProne check for clipped superscripts\n\nCombining SuperscriptSpan with RelativeSizeSpan raises text above the\nbaseline without updating the line metrics. While Latin fonts usually\nhave enough headroom between top and ascent to hide this, tall scripts\nlike Thai clip the upper vowel marks off against the top of the line\nbox.\n\nNewLabelUtils.withBadge() (from //components/browser_ui/styles) solves\nthis for \"New\" badges by using a ReplacementSpan that reserves the\nnecessary vertical room in FontMetricsInt. However, callers could still\naccidentally hand-roll superscript badges using SuperscriptSpan and\nRelativeSizeSpan and reintroduce clipping regressions.\n\nThis CL adds a custom ErrorProne BugChecker, NoClippedSuperscript, that\nflags methods constructing both SuperscriptSpan and RelativeSizeSpan and\ndirects authors to NewLabelUtils.withBadge() (or @SuppressWarnings with\nan explanation for non-badge superscripts).\n\nTAG\u003dagy\n\nBug: 512323229\nChange-Id: I9c58c5b9af6a7caeca056045e1b7ec6fa53b39f7\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8421287\nReviewed-by: Tommy Nyquist \u003cnyquist@chromium.org\u003e\nCommit-Queue: Moe Adel \u003cadelm@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1701189}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 00a320a0cb6a35146022586539e9d181c69cb3c8\n"
    },
    {
      "commit": "40c8f67266d9bbcfb977c8761257018a23602a4e",
      "tree": "9ca938287178a72cd5ca6a252fac9837f41a6a5b",
      "parents": [
        "8c5ca3ed48b78e0b217bf764ffb482dbeafac6da"
      ],
      "author": {
        "name": "Andrew Grieve",
        "email": "agrieve@chromium.org",
        "time": "Fri Sep 18 17:53:38 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Sep 18 17:57:50 2026"
      },
      "message": "PRESUBMIT.py: Make checkstyle checks run concurrently\n\nFor a .java change, \"git cl presubmit -u\":\nBefore: 8.921 s ± 0.440 s\nAfter:  8.352 s ± 0.356 s\n\nBug: 534712288\nChange-Id: Id9db9cc71d116eb823a1430cfe1ae66c4baf474c\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8415852\nReviewed-by: James Hawkins \u003cjhawkins@chromium.org\u003e\nCommit-Queue: Andrew Grieve \u003cagrieve@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1700948}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 60e0170ee09699d3e2d08ae7a16f9c0a0a103dd6\n"
    },
    {
      "commit": "8c5ca3ed48b78e0b217bf764ffb482dbeafac6da",
      "tree": "45166aee4f11a3b911561e926e119272ce213936",
      "parents": [
        "ba9270d78a329316a8c1bc9b161ac0f7239dd21b"
      ],
      "author": {
        "name": "Haiyang Pan",
        "email": "hypan@google.com",
        "time": "Fri Sep 18 01:26:34 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Sep 18 01:36:04 2026"
      },
      "message": "android: Add default x64 AVD config softlinks for Android 36\n\nCreate two softlinks under //tools/android/avd/proto:\n- android_google_apis_x64.textpb -\u003e android_36_google_apis_x64.textpb\n- android_google_apis_x64_local.textpb -\u003e android_36_google_apis_x64_local.textpb\n\nAndroid 36 is chosen because it is currently the highest Android API\nlevel running on Chromium CQ (e.g. try/android-x64-rel). Also update\n//tools/android/avd/README.md to document these softlinks.\n\nChange-Id: I02a4592f10f2c93f96cba04ee67d6b8d8ef6d375\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8421700\nReviewed-by: Ben Pastene \u003cbpastene@chromium.org\u003e\nCommit-Queue: Haiyang Pan \u003chypan@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1700369}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: c4a96e770db5714eee6ca82c587fb3b365513126\n"
    },
    {
      "commit": "ba9270d78a329316a8c1bc9b161ac0f7239dd21b",
      "tree": "60050148ae9e1b6deec029a86818516207f346da",
      "parents": [
        "e127d945b1f19a6b7271832c6dc860be91d32429"
      ],
      "author": {
        "name": "James Hawkins",
        "email": "jhawkins@google.com",
        "time": "Thu Sep 17 04:06:24 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Sep 17 04:11:07 2026"
      },
      "message": "presubmit: Fast-path nested PRESUBMITs in tools/android/ (part 3 of 8)\n\nUse InputApi.HasAffectedFiles() to early-return from test and linter\nrunners when no relevant files are affected across tools/android/:\n- tools/android/ (build_speed, checkstyle, checkxmlstyle,\n  colabutils/memory_usage, customtabs_benchmark/scripts,\n  dependency_analysis, infobar_deprecation, native_lib_memory,\n  python_utils, test_health)\n\nBenchmark (tools/android/dependency_analysis/README.md):\n- Baseline (origin/main): 1.24s ± 0.01s\n- Optimized (CL branch):  219ms ± 3ms\n- Savings: -1.02s (-82.3%, 5.66x speedup)\n\nBug: 534712288\nTest: python3 -m py_compile tools/android/**/PRESUBMIT.py\nChange-Id: Ib91c2090e8e5d3cb7426a9c72912fc71de2edb3a\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8413257\nReviewed-by: Andrew Grieve \u003cagrieve@chromium.org\u003e\nCommit-Queue: James Hawkins \u003cjhawkins@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1699503}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: ed127b5f2d83fdba6c6840877669af5c1521b98d\n"
    },
    {
      "commit": "e127d945b1f19a6b7271832c6dc860be91d32429",
      "tree": "3dbf182c81a8a5b681287658478c7abeb40871ca",
      "parents": [
        "da54aeff307de1ec241996efa260aab723f1c242"
      ],
      "author": {
        "name": "Alex Ovsienko",
        "email": "ovsienko@google.com",
        "time": "Wed Sep 16 06:40:43 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Sep 16 06:47:30 2026"
      },
      "message": "[vpython] Migrate BUILD.gn and tools/mb references to vpython.toml\n\nConfigure //build_overrides/build.gni to set vpython_spec_files to\n[ \"//vpython.toml\", \"//vpython.toml.uv.lock\" ] for non-ChromeOS\nChromium builds, convert remaining BUILD.gn files referencing\n\"//.vpython3\" to import //build/config/vpython.gni and use\nvpython_spec_files, and update tools/mb, tools/android/avd/3pp/fetch.py,\nand trybot_analyze_config.json to support vpython.toml + vpython.toml.uv.lock.\n\nNote: ChromeOS keeps .vpython3 until CHROMEOS_LKGM rolls past\nhttps://crrev.com/c/8404605 (so cros-test containers have uv bundled),\nand //.vpython3 is temporarily retained in the checkout until\nthird_party/dawn rolls its meson_target.gni update.\n\nTAG\u003dagy\nCONV\u003db53bdf70-37e7-4696-be50-8ee6fc19b1f8\n\nLSC: https://docs.google.com/document/d/1D65SXziXtVmFRtZ7C2_zJp-NZc5Vjm0ZShTF29lwvjo/edit\nBug: 491263752\nChange-Id: Ia6d13ecd029e10ffb8f025b0e5581ab7732120ea\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8417141\nOwners-Override: Alex Ovsienko \u003covsienko@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@chromium.org\u003e\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nCommit-Queue: Alex Ovsienko \u003covsienko@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1698679}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 2d5f2be71b67ce4eb9a08c34f1692a06454a2e5f\n"
    },
    {
      "commit": "da54aeff307de1ec241996efa260aab723f1c242",
      "tree": "ce9b87a699dc2fe2cc6d26fc0f500f542641d238",
      "parents": [
        "eaf06ec63814356ef6c93262efb19aaf37da0dce"
      ],
      "author": {
        "name": "Alex Ovsienko",
        "email": "ovsienko@google.com",
        "time": "Mon Sep 14 06:53:21 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Sep 14 06:57:14 2026"
      },
      "message": "VPython: add root vpython.toml (uv) alongside legacy .vpython3\n\nAdd a uv-backed //vpython.toml and its generated companion\n//vpython.toml.uv.lock, translating the wheel set from //.vpython3.\n\nRollout is incremental. Machines with a full checkout -- developer\nworkstations and builders -- resolve the new spec, since vpython.toml\ntakes precedence when both are present. Isolate-based swarming tasks are\nunaffected: test isolates, generate_wrapper scripts and MB extra files\ncontinue to bundle only //.vpython3. The two specs are kept in sync\nwhile both exist.\n\nFollow-ups will move the isolates over and then retire //.vpython3,\nsequenced after crrev.com/c/8404605 adds uv to the cros-test container\nimage used by ChromeOS Skylab.\n\nTAG\u003dagy\nCONV\u003db53bdf70-37e7-4696-be50-8ee6fc19b1f8\n\nLSC: go/vpython-uv-config-lsc\nBug: 491263752, 40942322\nChange-Id: I979a5d1fbf4132a4cd451826e890ff51137de312\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8395067\nOwners-Override: Alex Ovsienko \u003covsienko@google.com\u003e\nCommit-Queue: Alex Ovsienko \u003covsienko@google.com\u003e\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1697068}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 4272e46d95b7b2e005d3c225b5b1b2e6cf7cc466\n"
    },
    {
      "commit": "eaf06ec63814356ef6c93262efb19aaf37da0dce",
      "tree": "c23379fa7da9eeeaf52848e9e522788099b2db96",
      "parents": [
        "239fb515da1eb0beb201273444323f174fa638be"
      ],
      "author": {
        "name": "Samuel Huang",
        "email": "huangs@chromium.org",
        "time": "Thu Sep 10 20:54:51 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Sep 10 20:59:18 2026"
      },
      "message": "[CALI] Render non-interactive Android View Tree\n\nThis CL adds support to parse the Android layout XML hierarchy dump and\nrender a non-interactive, fully-expanded View Tree inside a new panel\nparallel to the Screenshot pane.\n\nView Tree features:\n* View Tree Panel: Occupies the right / bottom half of the Main layout,\n  complementing the Screenshot.\n* View Rows: Each View node from the XML is shown by its resource-id if\n  available, else class name.\n* Order and Indentation: Views are listed by pre-order traversal, using\n  indentation to show hierarchy depth.\n* Visual aid: Vertical \"Tree Lines\" join non-adjacent siblings.\n* Tree Toggle: Each internal View node is specified with a disclosure\n  triangle, for (upcoming) UI to collapse / expand descendants.\n\nDetails:\n* index.html:\n  * Include `tree_ui.js` script.\n  * Update `#div-pane-view-tree` to house `#div-view-tree` where nodes\n    will be dynamically appended.\n* style.css:\n  * Update existing selectors to use CSS nesting.\n    * Move `.action-button` under `button`.\n  * Add `--tree-toggle-width: 20px;`.\n  * Add `#div-view-tree` for the View Tree.\n    * Add .view-row to style each row container, including default text\n      for View id display (monospace).\n    * Add .tree-toggle to specify Node Toggle Icons, with black triangle\n      pointing downwards.\n    * Add .view-label to style the label: `.no-id` styles View class\n      display (faded italic); `.leaf` styles leaf Views, adding left\n      margin as placeholder for absent Node Toggle Icons.\n* model.js:\n  * Add `ViewNode`: Represents a parsed Android View.\n    * Stores `xmlNode`, `index`, `parent`, tree `depth`, `isLastChild`\n      for sibling placement, `children`, `className`, and (possibly\n      absent) `resourceId`.\n  * `MainModel`:\n    * Add `views` array to cache parsed `ViewNode`s.\n    * Add `_populateViews()`: Visits XML hierarchy using recursion-free\n      DFS, instantiates `ViewNode`s, and saves them to `views`.\n    * Update `_fetchData()` to fetch `/api/ui-dump.xml` alongside the\n      screenshot image, and return data as JSON.\n    * Update `load()` to parse and populate view nodes on snapshot\n      retrieval.\n    * Update `unload()` to clear views array.\n* Add utils.js:\n  * Add `makeElt()`: A utility parsing custom Emmet-like strings (e.g.,\n    `div#id1.class1.class2@attr1\u003dval1@attr2\u003dval2\\tText`) into DOM\n    Elements.\n* Add tree_ui.js:\n  * Add `TreeVis`: Renders the parsed flat views list into DOM nodes.\n    * Add `el` with `root` intended for `#div-view-tree`.\n    * Add `clear()` to reset Tree View.\n    * Add `populateViewList()` to render Tree View from given `views`.\n      * Adds `div.view-row` elements, storing attribute `data-index` for\n        later use.\n      * Renders indentation to indicate depth, and Tree Line to join\n        non-adjacent siblings, using `linear-gradient`. This creates\n        long `style` strings, but still more efficient than alternatives\n        (e.g., more DOM elements, or dynamic images).\n      * Adds Tree Toggles to internal nodes, and placeholder for leaves.\n      * Renders label, styled differently for id (preferred) or class.\n  * Add `TreeController`: Storing passed `model` and `TreeVis vis`.\n    * Add `populate()` to trigger Tree View rendering.\n* app.js:\n  * `MainElements`: Add `divViewTree`.\n  * `MainVis`: Instantiate `TreeVis` as `treeVis`; in `clearUI()` call\n    `treeVis.clear()`.\n  * `MainController`: Instantiate `TreeController` as `treeCtrl`; in\n    `handleLoad()` also trigger `treeCtrl.populate()` after load.\n\nBug: 544811853\nChange-Id: I65023fe70ae41fd0760f1c6a71dff5d3207b129f\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8378373\nReviewed-by: Brandon Wylie \u003cwylieb@google.com\u003e\nCommit-Queue: Samuel Huang \u003chuangs@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1695641}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: dcdddf2673b39d8c326658cdc4628f67030d4a44\n"
    },
    {
      "commit": "239fb515da1eb0beb201273444323f174fa638be",
      "tree": "1f8ed689b069b00de2822c6d7226e05bace95654",
      "parents": [
        "06792fd9875f24b78a7641e4b4d2e5ba5ef4b1a7"
      ],
      "author": {
        "name": "Haiyang Pan",
        "email": "hypan@google.com",
        "time": "Tue Sep 08 23:10:42 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Sep 08 23:20:38 2026"
      },
      "message": "android: Update the emulator and system image versions for Android 17\n\nHopefully with the latest emulator (37.1.11) which has some fixes for\nAndroid 17, and newer image (version 6), the AVD will run stablely.\n\nBug: 558813685\nChange-Id: Ie9bf5028d009a024fb905bcee1930aac4c77f87f\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8373773\nAuto-Submit: Haiyang Pan \u003chypan@google.com\u003e\nReviewed-by: Benjamin Joyce (Ben) \u003cbjoyce@google.com\u003e\nCommit-Queue: Benjamin Joyce (Ben) \u003cbjoyce@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1694155}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: f61878b62ff8f39cd0020ac73e1464fd068f98fa\n"
    },
    {
      "commit": "06792fd9875f24b78a7641e4b4d2e5ba5ef4b1a7",
      "tree": "9b1dc89562765cafb010e91213c7ce68920017cf",
      "parents": [
        "58edc259c40cbbcb618dc414e8ac86ea379b80bc"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Tue Sep 08 05:49:31 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Sep 08 05:58:09 2026"
      },
      "message": "Run `gn format` on all build files\n\nThe main purpose of this is to ensure that the recent change to the\nformatter which requires blank lines between targets is applied to the code.\n\nChange-Id: I3b39867342b312935165233e6a6668876a6a6964\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8350948\nAuto-Submit: Matt Stark \u003cmsta@google.com\u003e\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@chromium.org\u003e\nOwners-Override: Takuto Ikuta \u003ctikuta@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1693558}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 51d2448c9b469ac9a7e5fd349a624c71291a7510\n"
    },
    {
      "commit": "58edc259c40cbbcb618dc414e8ac86ea379b80bc",
      "tree": "f17715dd9e15479ba44a7d4e720018462537aef8",
      "parents": [
        "7fc79c1768b0e0733e2be2854c75a86f448470fb"
      ],
      "author": {
        "name": "msta",
        "email": "msta@google.com",
        "time": "Tue Sep 01 03:08:59 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Sep 01 03:19:11 2026"
      },
      "message": "Replace calls to build/gn_editor with `gn edit`\n\nWe no longer need a third-party tool to do this, as it is built in to\n`gn edit`.\n\nChange-Id: Ibe7ddacbe5892dbffa4c9c7861b72f596a6a6964\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8301852\nReviewed-by: Takuto Ikuta \u003ctikuta@chromium.org\u003e\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\nReviewed-by: Andrew Grieve \u003cagrieve@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1689575}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: daab6d0af73ee68236e82565f184854864e787cc\n"
    },
    {
      "commit": "7fc79c1768b0e0733e2be2854c75a86f448470fb",
      "tree": "d7cc6a9a435c9cc9b54afa8a18ac86df9eb316e0",
      "parents": [
        "e3808b8b92f2e26907d306e587c9f0aa6631f1f3"
      ],
      "author": {
        "name": "Samuel Huang",
        "email": "huangs@chromium.org",
        "time": "Mon Aug 31 21:24:26 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Aug 31 21:33:51 2026"
      },
      "message": "[CALI] Add multi-pane resizable layout and math utilities\n\nThis CL adds support for a multi-pane, resizable layout to Chrome\nAndroid Layout Inspector (CALI). This establishes the Splitter and pane\nlayout to house the existing Screenshot Pane and the upcoming View Tree\nPane. These three form the Main area.\n\nKey features introduced:\n* Add layout modes: {`left`, `right`, `top`, `bottom`} describe the\n  position of the Screenshot within Main area.\n* Aspect-Ratio-Aware Layout: Detect device orientation (portrait vs.\n  landscape) and position the Screenshot pane accordingly (left for\n  portrait; top for landscape). Vector math classes are added to support\n  this. These will be extensively used in upcoming code.\n* Percentage-based Resizer: The Splitter between the two panels can be\n  dragged to resize both panels. This uses viewport percentage size for\n  simplicity and robustness. Pressing `Escape` cancels the drag and\n  restores original state.\n* Hover Hint Delegation: Extend direct hover listeners to handing the\n  Control bar followed by target dispatch, to improve generality and\n  reduce overhead.\n* Decoupled Image Loading: Move async Blob-to-Image conversion to\n  utilities, allowing the visualizer to remain synchronous.\n\nDetails:\n* index.html:\n  * Include math.js and layout_ui.js.\n  * \"Load\" button: Add `data-hint\u003d\"CTRL_LOAD\"` for new hint framework.\n  * Add `.main-layout` to `#div-main` to support layout resizing.\n  * Add `#div-main-splitter` for the resizeable Splitter.\n  * Add `#div-pane-view-tree` for (upcoming) View Tree.\n* style.css:\n  * Add `.main-layout` to change flex direction based on layout mode\n    constants value, specified by the `data-layout` attribute.\n  * `#div-screenshot`: Apply `align-items: safe center` to {`top`,\n    `bottom`} modes to horizontally center if window is wide enough, and\n    start-align (+scrollbar) otherwise.\n    * Use `flex-basis` for Screenshot split size (default 50%).\n  * Style `#div-main-splitter` Splitter.\n    * Use :before pseudo-class to draw mode-dependent line.\n    * Specify mode-dependent cursor styles for resize hover.\n  * Style `#div-pane-view-tree` as a flex container for upcoming Tree\n    View. Its split size fills remaining space from\n    `#div-screenshot` and `#div-main-splitter`.\n* Add math.js:\n  * Add `clip()` utility to bound numbers.\n  * Add `Point2D` using an Array back-end.\n    * Add chainable `assign()` for easy modification.\n    * Add `dot()` and `dotxy()` for dot product, representing different\n      ways to specify the other vector.\n    * Subclasses of `Point2D` define accessors to semantically rich\n      components access (e.g., `p.x` instead of `p[0]`), while allowing\n      operation de-dup operations (`dot()` and more to come).\n  * Add `PointXY`: Subclass of `Point2D` for spatial quantities, with\n    read-write accessors `x` and `y`.\n  * Add `Dims2D`: Subclass for `Point2D` for sizing quantities, with\n    read-write accessors `w` and `h` (assumed non-negative).\n    * Add `sizeAlong()` to compute (absolute) projected size of\n      rectangle represented by `w` and `h`, along given axis-aligned\n      vector.\n* utils.js:\n  * Add `convertImageBlobToImage()` to asynchronously convert raw Blobs\n    to `HTMLImageElement`s, safely managing Object URL life cycle.\n* model.js:\n  * Add `LayoutMode` as key constants and specs of layout modes.\n    * `name`: Layout mode constant for the `data-layout` attribute.\n    * `dir`: `PointXY` vector of the direction in screen coordinates.\n    * Add static instances: `LEFT`, `RIGHT`, `TOP`, `BOTTOM`.\n    * Add static `fromVector()` to map from a direction to the best\n      matching static instance. Allows `fallback` and implements\n      tie-breaking rules.\n    * Add getter `cursor()` to specify cursor in code (matching CSS).\n  * `VisOptions`:\n    * CTOR:\n      * Add `layoutMode` to store current layout mode (default `LEFT`).\n      * Add `wDims` for World (i.e., device pixel) dimensions.\n    * Add `setWorldSize()` to assign `wDims` (directly read though).\n  * `MainModel`:\n    * Replace `screenshotBlob` with `imgScreenshot`, to store loaded\n      screenshot as `HTMLImageElement`.\n    * Rename `fetchData()` --\u003e `_fetchData()`, and have it return the\n      screenshot `Blob` instead of storing it.\n    * Add async `load()` to replace `fetchData()`\u0027s role as main call to\n      load data. It calls `_fetchData()` to get screenshot `Blob`;\n      `convertImageBlobToImage()` to convert to `HTMLImageElement`;\n      stores the value to `imgScreenshot`; calls `setWorldSize()`.\n    * Add async `unload()` to clean up. Made async for symmetry.\n* ui_common.js:\n  * Add the `LAYOUT_SPLITTER` hint constant and string.\n  * Add `DragHandler` to manage a pointer events, including drag-drop\n    session, using pointer capture to avoid pitfalls. Also supports\n    cancellation by keyboard `Escape`.\n    * CTOR:\n      * Add passed `dragEl` as main `Element` to bind events.\n      * Takes passed `callbacks`, adding parts as `onDragStart`,\n        `onDrag`, `onDragEnd`, `onDragCancel`.\n      * Add `pointerStyle` and status `isDragging`.\n    * Add `setPointerStyle()`.\n    * Add `handleDragStart()` as main trigger to kick off drag-and-drop\n      session; temporarily binds other handlers and removes them at\n      cleanup to reduce runtime overhead. Uses pointer capture for\n      robustness.\n    * Add `bindAll()`, called by CTOR, to bind `pointerdown` to\n      `handleDragStart()`.\n* Add layout_ui.js:\n  * Add `MIN_PANE_DIMS` constant for minimal pane width and height to\n    shrink-to-nothingness.\n  * Add `LayoutController` to manage pane resize and (upcoming)\n    reposition.\n    * CTOR:\n      * Add `visOpts`, extracted from passed `model`.\n      * Add passed `divMain` to get size and set layout mode;\n        `divPaneScreenshot` to read / write pane size percentage;\n        `divMainSplitter` to anchor pointer events; `hintCtrl`.\n      * Add `activeDragState` to store states for drag session.\n      * Add `divMainSplitterDragHandler` to dispatch drag events.\n      * Takes `hintCtrl` to show `LAYOUT_SPLITTER` on hover.\n    * Add helpers to process pane division, which is stored as\n      percentage in `divPaneScreenshot.style.flexBasis`:\n      * `_readPaneScreenshotRatio()` to parse into ratio.\n      * `_getParentSizeAlongMode()` to get available space (px).\n      * `_computePaneScreenshotRatio()` to apply `MIN_PANE_DIMS` limits,\n        and compute usable ratio (handles degenerate sizing case).\n      * `_setPaneScreenshotRatio()` bound and assign.\n    * Add `handleDragStart()`, `handleDrag()`, `handleDragEnd()` to\n      handle splitter dragging dynamics, noting that ratio is needed.\n      * Cancel by `Escape` key restores original state before drag.\n    * Add `setLayoutMode()` to change mode.\n* screenshot_ui.js:\n  * `ScreenshotVis.drawScreenshot()`: Simplify to synchronous function\n    that draws given `imgScreenshot` to canvas.\n* app.js:\n  * `MainElements`: Add `divControls`, `divMainSplitter`.\n  * `MainController`:\n    * Add `layoutCtrl`.\n    * `handleLoad()`: Update to run `model.load()`; uses screenshot\n      size to find best layout mode (`left` for portrait, `top` for\n      landscape).\n    * `bindAll()`: Refactor tooltip hooks use `mouseover` / `mouseout`\n      events of `#div-controls`, delegating by `data-hint` attributes.\n\nBug: 544811853\nChange-Id: I70ab6396cb2dd7e265685e71b0b54353d6ff6918\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8295946\nReviewed-by: Brandon Wylie \u003cwylieb@google.com\u003e\nCommit-Queue: Samuel Huang \u003chuangs@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1689272}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 3729b9c4a7ade557cf98fffc30f397cf32436d37\n"
    },
    {
      "commit": "e3808b8b92f2e26907d306e587c9f0aa6631f1f3",
      "tree": "9f2420f18c110449108314d9ab069d7658bbad70",
      "parents": [
        "156182a3aacb5c4b22a80adb9a6fbd9d9f441b90"
      ],
      "author": {
        "name": "Sky Malice",
        "email": "skym@chromium.org",
        "time": "Sat Aug 22 01:42:43 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Aug 22 01:45:52 2026"
      },
      "message": "[Clean] Remove redundant semicolons in tools/\n\nRemove redundant semicolons after declarations in tools/.\n\nTAG\u003dagy\nCONV\u003d8d98c5f3-d04f-477c-a582-8cd54c715611\n\nBug: 550418935\nChange-Id: I4abcecebfe115d2d57b2ce37cf6e59a8e6b46361\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8277351\nReviewed-by: Peter Wen \u003cwnwen@chromium.org\u003e\nCommit-Queue: Sky Malice \u003cskym@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1684402}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 92fa04b3503e737e598dbbd6e6331c860e32098d\n"
    },
    {
      "commit": "156182a3aacb5c4b22a80adb9a6fbd9d9f441b90",
      "tree": "e18c5adfef953b63710ca5d4160d9012c817bcb6",
      "parents": [
        "4f4452de02364b7e79364de1849da6cf44f1ca3f"
      ],
      "author": {
        "name": "Samuel Huang",
        "email": "huangs@chromium.org",
        "time": "Fri Aug 21 20:58:45 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Aug 21 21:04:49 2026"
      },
      "message": "[CALI] Add Load button to load screenshot\n\nThis CL adds the \"Load\" button to Chrome Android Layout Inspector (CALI).\nWhen pressed, the tool retrieves a screenshot from the server (via the\n`/api/screenshot.png` endpoint), draws the image to an HTML Canvas,\nand displays it on screen.\n\nIn total, the following UI components are introduced:\n* Controls: A top bar containing various UI actions (more to come).\n* \"Load\" Button: First item in the Controls bar. When hovered, displays\n  a tooltip hint. When pressed, fetches the device screenshot via the\n  Python server.\n* Screenshot Pane: The main central pane containing the canvas where the\n  device\u0027s screen is drawn.\n* InfoBar: A dedicated status bar at the bottom to display system state\n  and contextual hints.\n* Overlay: A modal gray overlay covering the entire page to block user\n  interaction and display loading status during network requests.\n\nCode details:\n* index.html: Update layout with elements for Controls (containing\n  \"Load\" Button), Screenshot, InfoBar, Overlay.\n  * `#div-main`: Main area between Controls and InfoBar. It will contain\n    two Panes: Screenshot and (upcoming) View Tree. We will have pane\n    resize and reposition.\n  * `#div-pane-screenshot`: Contains the Screenshot and the (upcoming)\n    info display. Why so many layers?\n    * `#div-screenshot`: Viewport for Screenshot responsible for placing\n      and (if necessary) scrolling.\n    * `.screenshot-inner`: Tight fit of Screenshot and (upcoming) SVG\n      markup; (upcoming) gets rescaled for different zoom.\n    * `.canv-base`: Canvas to contain screenshot image, to allow\n      (upcoming) pixel color values to be read and shown.\n* style.css:\n  * Add global styling: `button`, `.hidden`, `.action-button`.\n  * Add main component styling: `#div-controls`, `#div-main` (with first\n    pane `#div-pane-screenshot`), `#div-screenshot` (with\n    `.screenshot-inner`, `.canv-base`), `#div-info-bar` (with\n    `.hint-text`), `#div-overlay` (specified when not `.hidden`, and\n    with `.content`).\n* Add utils.js:\n  * Add `checkEnum()` utility to validate enums.\n* model.js:\n  * Add `VisOptions` to hold globally shared rendering configuration.\n    * Currently empty, added in this CL as placeholder.\n  * `MainModel`:\n    * Add `visOpts` and `screenshotBlob`.\n    * Add async `fetchData()` to fetch screenshot into `screenshotBlob`.\n* Add ui_common.js:\n  * Add `InfoBarVis` to show status text.\n    * Add `setHintText()`.\n  * Add `HINT` enum as keys to refer to hints in different UI surfaces.\n  * Add `HINT_STRINGS` constants (keyed on `HINT`) as on-hover help\n    texts for UI discoverability.\n  * Add `HintController` to manage hint display via `InfoBarVis`.\n    * Add `setHint()` and `clear()`.\n  * Add `OverlayVis` to show the modal loading screen.\n    * Add `show()`, `hide()`, `setContent()`.\n* Add screenshot_ui.js:\n  * Add `ScreenshotVis` to load and manage screenshot image.\n    * Add (effectively) async `drawScreenshot()`, handling image\n      processing and drawing onto Canvas, while emitting error on bad\n      screenshot.\n    * Add `clear()`.\n* app.js:\n  * `MainElements`: Add new high-level DOM elements: `btnLoad`,\n    `divInfoBar`, `divMain`, `divOverlay`, `divPaneScreenshot`,\n    `divScreenshot`.\n  * `MainVis`: Instantiate Vis for new components: `screenshotVis`,\n     `infoBarVis`, `overlayVis`.\n    * Add `clearUI()`, which only clears `screenshotVis` for now.\n  * `MainController`:\n    * Add async `handleLoad()` to handle `el.btnLoad` click:\n      Orchestrates overlay showing, data fetch, drawing, overlay\n      hiding, and handles error message.\n    * Add `bindAll()` to centralize high-level binding (in later CLs,\n      separate Controllers will manage their own binding).\n      * `btnLoad`:\n        * Handle `click` for `handleLoad()`, and handle\n        * Handle `mouseover`, `mouseout` for hint text. This will be\n          generalized in the future.\n    * `init()`: Call `bindAll()`, and set focus on `btnLoad` as QoL\n      feature (can press space on load to immediately load).\n\nBug: 544811853\nChange-Id: I9928a913fb8d47230f233f88fc079d68914a53ba\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8276130\nReviewed-by: Brandon Wylie \u003cwylieb@google.com\u003e\nCommit-Queue: Samuel Huang \u003chuangs@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1684205}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 0471469ac5e68e6547713f3aee15e7f0c7f032dd\n"
    },
    {
      "commit": "4f4452de02364b7e79364de1849da6cf44f1ca3f",
      "tree": "72c6b85bf87ea218b8cf5d2ab1c5c7445a8d20fe",
      "parents": [
        "3ccd959841ec1cc43d15d22a104d62ed91d5332b"
      ],
      "author": {
        "name": "Mohannad Farrag",
        "email": "aymanm@google.com",
        "time": "Wed Aug 19 02:15:43 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Aug 19 02:18:58 2026"
      },
      "message": "Roll generic_android24 AVD to 34.2.16\n\nUpdate emulator package to 34.2.16 and roll generic_android24 AVD\npackage created in android-avd-packager build 279:\nhttps://ci.chromium.org/ui/b/8673100766069419857\n\nBug: 548429319\nChange-Id: I988c859997dd21640070bee6c464a7f22c5c22d6\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8256874\nCommit-Queue: Mohannad Farrag \u003caymanm@google.com\u003e\nAuto-Submit: Mohannad Farrag \u003caymanm@google.com\u003e\nReviewed-by: Haiyang Pan \u003chypan@google.com\u003e\nCommit-Queue: Haiyang Pan \u003chypan@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1681946}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 5bdd8dbf7455cc2ba2884b1b221955c46467dbc9\n"
    },
    {
      "commit": "3ccd959841ec1cc43d15d22a104d62ed91d5332b",
      "tree": "09b2fa9050d94b801aac807ec0e2d95e1f451ead",
      "parents": [
        "6e61ca9635bc352e9726400fe427fcf807d00046"
      ],
      "author": {
        "name": "Mohannad Farrag",
        "email": "aymanm@google.com",
        "time": "Tue Aug 18 18:21:22 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Aug 18 18:25:36 2026"
      },
      "message": "Update emulator to 34.2.16 for Android 24 proto creation\n\nAVD start failure and QEMU snapshot restore hangs are hitting\nAndroid 24 (Nougat) builders.\n\nUpdate to emulator package 34.2.16 (Stable) for proto creation so that\nandroid-avd-packager can build a new AVD snapshot package with the\nupdated emulator.\n\nBug: 548429319\nChange-Id: I81e6c7f7bb78e69c52cb6ff3362effe7bfa39c0e\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8267801\nCommit-Queue: Haiyang Pan \u003chypan@google.com\u003e\nReviewed-by: Haiyang Pan \u003chypan@google.com\u003e\nAuto-Submit: Mohannad Farrag \u003caymanm@google.com\u003e\nCommit-Queue: Mohannad Farrag \u003caymanm@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1681545}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 7bf5e739f713f73d20430ee91c2e217c5eec7472\n"
    },
    {
      "commit": "6e61ca9635bc352e9726400fe427fcf807d00046",
      "tree": "3850e079ca11095cb21c7d4e0fefac2fb9fee6b9",
      "parents": [
        "449343be3851e0e54e318944601b2310537b325a"
      ],
      "author": {
        "name": "Alex Ovsienko",
        "email": "ovsienko@google.com",
        "time": "Mon Aug 17 02:22:19 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Aug 17 02:25:26 2026"
      },
      "message": "Ruff: reformat tools (part 1/3: accessibility .. generate_stubs).\n\nPreserve yapf style to the best capacity.\n\nLSC doc:\nhttps://docs.google.com/document/d/1P6AE9aeKuFkxPAYInYxLFIpDgpiCAT-S_BQkNU0lb3s/edit?tab\u003dt.0\n\nOnboarded using the following command: `~/cr/depot_tools/ruff_chromium format .`\n\nNO_IFTTT\u003dreformatting only.\nBYPASS_RECITATION_REASON\u003dreformatting only.\nBug: 40874143\n\nChange-Id: I101ab8185a98f6b5a2ce46c8503e8bf26a6a6964\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8260488\nOwners-Override: Alex Ovsienko \u003covsienko@google.com\u003e\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nSLSA-Policy-Verified: SLSA Policy Verification Service \u003cdevtools-gerritcodereview-exitgate@google.com\u003e\nCommit-Queue: Alex Ovsienko \u003covsienko@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1680318}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 6c9a0b79e95b693f05596b540879d15bc5d503dd\n"
    },
    {
      "commit": "449343be3851e0e54e318944601b2310537b325a",
      "tree": "cf730baf54bd90580216174f821a1f79037b2455",
      "parents": [
        "39ccd60450aa77e595c670359ddb795692a83924"
      ],
      "author": {
        "name": "Mau Camargo",
        "email": "camargomau@google.com",
        "time": "Fri Aug 14 18:16:46 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Aug 14 18:19:58 2026"
      },
      "message": "Revert \"Roll AVD configs for Android 10 (API 29)\"\n\nThis reverts commit 1fac0eb047031594a6ad8b1e1e36c649c64f72fc.\n\nReason for revert: reverting to see if this is causing BuilderTryPendingTimeHigh for chromium.try:android-x86-rel\n\nOriginal change\u0027s description:\n\u003e Roll AVD configs for Android 10 (API 29)\n\u003e\n\u003e Rolls AVD CIPD packages to apply updated 3072MB RAM configuration.\n\u003e\n\u003e Created in build https://ci.chromium.org/ui/b/8673559336450766849\n\u003e Creation config updated in https://crrev.com/c/8244054\n\u003e\n\u003e Bug: 356161365\n\u003e Change-Id: I6bb4139a2b0094189c9c606b8eb2f340b5269a15\n\u003e Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8252047\n\u003e Auto-Submit: Mau Camargo \u003ccamargomau@google.com\u003e\n\u003e Reviewed-by: Ben Pastene \u003cbpastene@chromium.org\u003e\n\u003e Commit-Queue: Haiyang Pan \u003chypan@google.com\u003e\n\u003e Reviewed-by: Haiyang Pan \u003chypan@google.com\u003e\n\u003e Cr-Commit-Position: refs/heads/main@{#1679197}\n\nBug: 356161365\nNo-Presubmit: true\nNo-Tree-Checks: true\nNo-Try: true\nChange-Id: I0afd097256fe8fb81c3d8ce9c61984beeadc7e6c\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8251610\nReviewed-by: Haiyang Pan \u003chypan@google.com\u003e\nReviewed-by: Benjamin Joyce (Ben) \u003cbjoyce@google.com\u003e\nCommit-Queue: Mau Camargo \u003ccamargomau@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1679711}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 1251e9a8bc4fffe90e324add20a2e8109cfac614\n"
    },
    {
      "commit": "39ccd60450aa77e595c670359ddb795692a83924",
      "tree": "241f6bc74c4019f3c36b3a799cebea30c8e1e1d5",
      "parents": [
        "63f0b8cc6290987bc1985474f232c0dc9cfb9fac"
      ],
      "author": {
        "name": "Mau Camargo",
        "email": "camargomau@google.com",
        "time": "Fri Aug 14 00:06:11 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Aug 14 00:09:41 2026"
      },
      "message": "Roll AVD configs for Android 10 (API 29)\n\nRolls AVD CIPD packages to apply updated 3072MB RAM configuration.\n\nCreated in build https://ci.chromium.org/ui/b/8673559336450766849\nCreation config updated in https://crrev.com/c/8244054\n\nBug: 356161365\nChange-Id: I6bb4139a2b0094189c9c606b8eb2f340b5269a15\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8252047\nAuto-Submit: Mau Camargo \u003ccamargomau@google.com\u003e\nReviewed-by: Ben Pastene \u003cbpastene@chromium.org\u003e\nCommit-Queue: Haiyang Pan \u003chypan@google.com\u003e\nReviewed-by: Haiyang Pan \u003chypan@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1679197}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 1fac0eb047031594a6ad8b1e1e36c649c64f72fc\n"
    },
    {
      "commit": "63f0b8cc6290987bc1985474f232c0dc9cfb9fac",
      "tree": "cf730baf54bd90580216174f821a1f79037b2455",
      "parents": [
        "676a8d5abdd8525036042acd53b6b6743373f0f5"
      ],
      "author": {
        "name": "Samuel Huang",
        "email": "huangs@chromium.org",
        "time": "Thu Aug 13 21:02:41 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Aug 13 21:05:36 2026"
      },
      "message": "[CALI] Chrome Android Layout Inspector: Initial commit: Add server\n\nThis is the initial commit of Chrome Android Layout Inspector (CALI),\nwhich is a light-weight, standalone tool to examine on-screen UI\nhierarchy of an Android device. CALI complements existing layout\ninspectors by supporting features useful for Chrome development on\nAndroid.\n\nHigh-level structure:\n* Requirements: ADB, Python 3, browser, attached Android device.\n* Steps to run session:\n  1. Run the Python server from terminal:\n\npython tools/android/layout_inspector/run_server.py\n\n    * Serves WebUI files (in static/) and executes ADB commands.\n    * Needs manual stopping to end session.\n\n  2. Visit provided WebUI (e.g., http://localhost:8000) from browser.\n    * The WebUI uses vanilla HTML / CSS / JS using MVC architecture.\n\nThis CL adds the server with stub WebUI. Key features:\n* Device selection if multiple exists (choose with `--serial / -s`,\n  or via prompt if unspecified).\n* Port selection (`--port / -p`, defaults to 8000).\n* Security features:\n  * Local host binding: Only accessible via http://localhost (defaults\n    on, disable with `--remote`).\n  * Imprinting: Remembers the IP address of the first client, and\n    ignores all other requests (defaults on, disable with `--open`).\n    A 120 second window is allotted for first connection.\n* Development features:\n  * Caching: Fetches data from ADB once, caches it, and repeatedly\n    serves it (defaults off, enable with `--cache`).\n\nADB endpoints:\n* /api/screenshot.png: Grabs device screenshot, performs PNG signature\n  scan to trim leading warning messages.\n* /api/ui-dump.xml: Grabs layout structure as XML.\n* /api/density.json: Gets screen density, for px / dp conversion.\n\nCode details:\n* Add .clang-format for JavaScript formatting.\n* Add .style.yapf for Python formatting.\n* Add run_server.py:\n  * Add `AdbClient`: Helper to find and run ADB.\n    * Add run() to execute ADB commands.\n    * Add `get_device()`: Gets ADB device serial: Prioritizes given\n      override; choose the only device as default, and if multiple,\n      prompts to select.\n  * Add `ServerConfig`: Global states.\n    * Owns `AdbClient` instance.\n    * Instantiate singleton `_config`.\n  * Add `MainRequestHandler`: Serves /static files and handles ADB\n    endpoints.\n    * Implements security features above.\n  * Add `CachingMainRequestHandler`: Wraps `MainRequestHandler` to\n    implement caching feature.\n  * Add `run()`: Instantiates handler and starts server loop.\n  * Add `main()`: Parse arguments, initialize states, calls `run()`.\n* Add run_server_test.py: Unit tests for the server logic.\n* Add run_server{_test}.pydeps: Python dependency tracking.\n* Add BUILD.gn:\n  * Add `layout_inspector_py`: Library for the server and static assets.\n  * Add `run_layout_inspector_test`: Test runner target.\n* Update //tools/android/BUILD.gn: Include layout_inspector in\n  `android_tools`.\n\nCode details for WebUI:\n* Add static/index.html:\n  * Add basic structure; add direct links to endpoints, as placeholder.\n* Add static/style.css: Main stylesheet.\n* Add static/model.js:\n  * Add `MainModel`: Main Model (\"M\" in MVC). Currently a stub.\n* Add static/app.js: Boilerplates.\n  * Add `MainElements`: Cached registry for permanent DOM nodes.\n  * Add `MainVis`: Main Vis (\"V\" in MVC, using \"Vis\" for \"Visualizer\"\n    instead of \"View\" to elide collision with Android Views).\n  * Add `MainController`: Main Coordinator (\"C\" in MVC).\n  * Add main initialization.\n\nBYPASS_LARGE_CHANGE_WARNING: This is initial commit of new internal tool.\n\nBug: 544811853\nChange-Id: Ida39fa1a0cc75c85702b6bda8e6b3e439ecc3aa2\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8240573\nReviewed-by: Brandon Wylie \u003cwylieb@google.com\u003e\nReviewed-by: Nico Weber \u003cthakis@chromium.org\u003e\nCommit-Queue: Samuel Huang \u003chuangs@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1679080}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: e519d140080e8bf3102d55ec57922bc781d05051\n"
    },
    {
      "commit": "676a8d5abdd8525036042acd53b6b6743373f0f5",
      "tree": "04a751e2315654ac6461422866af31c4c543aba5",
      "parents": [
        "7466dfd04e46e161e158a0547ed565dbc379b553"
      ],
      "author": {
        "name": "Mau Camargo",
        "email": "camargomau@google.com",
        "time": "Thu Aug 13 18:09:33 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Aug 13 18:13:21 2026"
      },
      "message": "Update RAM size in Android 10 creation config\n\nIncrease RAM size to 3072MB for Android 10 (API 29) AVD creation proto\nto reduce memory pressure during test execution.\n\nBug: 356161365\nChange-Id: I0d040a6493a71c2d2dac00bb3a4b9c04e13aad82\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8244054\nReviewed-by: Haiyang Pan \u003chypan@google.com\u003e\nCommit-Queue: Haiyang Pan \u003chypan@google.com\u003e\nReviewed-by: Ben Pastene \u003cbpastene@chromium.org\u003e\nAuto-Submit: Mau Camargo \u003ccamargomau@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1678966}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: cc506a4fd3af3cbea49cbc60b759b5d8808f7e9a\n"
    },
    {
      "commit": "7466dfd04e46e161e158a0547ed565dbc379b553",
      "tree": "f89b537baa505eb2f58a1650eebba1e5ca968a8f",
      "parents": [
        "d0e4774517ba198e4da826908c97dcae1c1e595d"
      ],
      "author": {
        "name": "Victor Hugo Vianna Silva",
        "email": "victorvianna@google.com",
        "time": "Mon Aug 10 21:37:08 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Aug 10 21:40:25 2026"
      },
      "message": "[java] Fix some LocalVariableName checkstyle violations\n\nNo behavior change.\n\nBug: 542921651\nChange-Id: I280f81bfb5a6b752283a5bdfb6400a2e23fb65b5\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8219872\nOwners-Override: Sam Maier \u003csmaier@google.com\u003e\nAuto-Submit: Victor Vianna \u003cvictorvianna@google.com\u003e\nReviewed-by: Sam Maier \u003csmaier@google.com\u003e\nCommit-Queue: Sam Maier \u003csmaier@google.com\u003e\nCommit-Queue: Victor Vianna \u003cvictorvianna@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1676730}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: e203c0216659fc6882d1baa32f546c68efcdb2f7\n"
    },
    {
      "commit": "d0e4774517ba198e4da826908c97dcae1c1e595d",
      "tree": "a55821ae99ff66947347a59ec2fba2b2477d3aac",
      "parents": [
        "8e68fbfb084ae801c605b38a07f9c352b0b4060e"
      ],
      "author": {
        "name": "Keigo Oka",
        "email": "oka@google.com",
        "time": "Fri Aug 07 06:54:01 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Aug 07 06:58:12 2026"
      },
      "message": "Omnibox: Fix pre-existing checkstyle warnings\n\nClean up pre-existing checkstyle and formatting warnings in Omnibox\ncomponents:\n1. Replace non-inclusive term in UrlBar input connection comment.\n2. Format lines exceeding 80 characters in LocationBarMediatorTest.\n3. Suppress SetTextColorAndSetTextSizeCheck warning in UrlBarUnitTest.\n\nTAG\u003dagy\nCONV\u003db897b73e-2848-4e0b-8bcc-d2edc6b192d8\n\nBug: 524044138\nChange-Id: I2430489248492094209489209489209489208500\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8186395\nReviewed-by: Patrick Noland \u003cpnoland@chromium.org\u003e\nReviewed-by: Peter Wen \u003cwnwen@chromium.org\u003e\nCommit-Queue: Keigo Oka \u003coka@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1675545}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 8c522ff337c6d54aabdb5978f06722f262102808\n"
    },
    {
      "commit": "8e68fbfb084ae801c605b38a07f9c352b0b4060e",
      "tree": "40a6df7509f1953493da641dbe381e7f8aedf39d",
      "parents": [
        "e8655402d29b382f18d21492929c923c0adbd76e"
      ],
      "author": {
        "name": "Keigo Oka",
        "email": "oka@google.com",
        "time": "Fri Aug 07 06:05:38 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Aug 07 06:09:22 2026"
      },
      "message": "Checkstyle: Suppress Omnibox AndroidContextMenu\n\nUrlBar and UrlBarContextMenuHelper intercept standard Android EditText\nContextMenu callbacks to render Chrome\u0027s theme-compatible ListMenu.\nSuppress false-positive AndroidContextMenu checkstyle warnings for\nthese files.\n\nTAG\u003dagy\nCONV\u003db897b73e-2848-4e0b-8bcc-d2edc6b192d8\n\nBug: 524044138\nChange-Id: I2430489248492094209489209489209489208499\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8186974\nCommit-Queue: Keigo Oka \u003coka@chromium.org\u003e\nReviewed-by: Peter Wen \u003cwnwen@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1675525}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: e18d0081519495bbb1ba4c87bf400578618aa4e8\n"
    },
    {
      "commit": "e8655402d29b382f18d21492929c923c0adbd76e",
      "tree": "fceb2461d84d41a4c3e1093bd92f44ed437f944f",
      "parents": [
        "ab7c6fe08fbf2e8780c6b2a060bb481854ba99f0"
      ],
      "author": {
        "name": "Victor Hugo Vianna Silva",
        "email": "victorvianna@google.com",
        "time": "Wed Aug 05 15:21:12 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Aug 05 15:24:40 2026"
      },
      "message": "Remove use of deprecated assertEquals() in customtabs_benchmark_unittest\n\nassertEqual() is preferred these days.\n\nBug: 542921651\nChange-Id: I97f62f4aae29c851f7066c506413d7f1a28d0722\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8199827\nReviewed-by: Peter Wen \u003cwnwen@chromium.org\u003e\nAuto-Submit: Victor Vianna \u003cvictorvianna@google.com\u003e\nCommit-Queue: Victor Vianna \u003cvictorvianna@google.com\u003e\nCommit-Queue: Peter Wen \u003cwnwen@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1674164}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 3abb7def980f158fe38c6f5fb3e5a9d539d7412a\n"
    },
    {
      "commit": "ab7c6fe08fbf2e8780c6b2a060bb481854ba99f0",
      "tree": "04722849fde6fd4c927c92f8b6eb5db5aeac26a8",
      "parents": [
        "6873e5e7a34c0bb8c468bc65a84a5228d6bfd2fc"
      ],
      "author": {
        "name": "Gazal",
        "email": "agazal@google.com",
        "time": "Wed Jul 29 18:44:11 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 29 18:47:30 2026"
      },
      "message": "[Code health] Add warning for string concatenation in Android logs\n\nThis CL adds a new presubmit warning\n(`_CheckAndroidLogStringConcatenation`) to discourage using string\nconcatenation (`+`) inside `Log.d` and `Log.v` statements in Java files.\n\nWhile ProGuard/R8 completely strips `Log.d` and `Log.v` method calls in\nrelease builds, it cannot always safely strip the method\u0027s arguments if\nthey involve string concatenation (due to the implicit `StringBuilder`\nallocations). Using format strings (e.g., `%s`) allows R8 to safely drop\nthe arguments along with the method call, improving performance and\nbinary size.\n\nBug: 529082276\nChange-Id: I246974b336dcc9883e77de7b896e6798b12b493d\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8038100\nReviewed-by: Andrew Grieve \u003cagrieve@chromium.org\u003e\nAuto-Submit: Gazal Agarwal \u003cagazal@google.com\u003e\nCommit-Queue: Gazal Agarwal \u003cagazal@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1670451}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: c839d6bd1925a26f52f43959ac1a0f2f62cad5c8\n"
    },
    {
      "commit": "6873e5e7a34c0bb8c468bc65a84a5228d6bfd2fc",
      "tree": "e7f09598059bff83a9b48fd2850649e2c5c82e20",
      "parents": [
        "8fb8d25abef7332491abf59858d409ad65600e2b"
      ],
      "author": {
        "name": "Yong Li",
        "email": "yyonglii@xwf.google.com",
        "time": "Tue Jul 28 16:48:07 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 28 16:52:30 2026"
      },
      "message": "immersive playback: enable talkback to show controls\n\nRe-show controls on double pinches in talkback mode.\n\nBug: 523303969\nChange-Id: I7abce64432cc172228f6e08406fa1a7702f42c27\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8100142\nReviewed-by: Yaron Friedman \u003cyfriedman@chromium.org\u003e\nCommit-Queue: Yong Li (xWF) \u003cyyonglii@google.com\u003e\nReviewed-by: Mark Schillaci \u003cmschillaci@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1669574}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 1690c4515b7beea577e2f29cf0195c32762ad632\n"
    },
    {
      "commit": "8fb8d25abef7332491abf59858d409ad65600e2b",
      "tree": "0de4aed4b4f1db790f0810668d35eedb9d2231a6",
      "parents": [
        "20cedb0ff42e239cce7a810c012436609e859bef"
      ],
      "author": {
        "name": "Alex Ovsienko",
        "email": "ovsienko@google.com",
        "time": "Tue Jul 28 04:31:58 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 28 04:38:18 2026"
      },
      "message": "Migrate RunPylint presubmit commands to Pylint 3.2 in tools.\n\nUpdate all RunPylint presubmit commands to use Pylint 3.2 and add breakages\nto list of disabled_warnings.\n\nBug: 537041607\nChange-Id: I927d06af2cb8456195efadf0b1342b4ebdbf5e59\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8131485\nReviewed-by: Richard Wang \u003crichardwa@google.com\u003e\nCommit-Queue: Alex Ovsienko \u003covsienko@google.com\u003e\nReviewed-by: Nico Weber \u003cthakis@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1669198}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 3bcd8366afe170041482357f26833f82da866de7\n"
    },
    {
      "commit": "20cedb0ff42e239cce7a810c012436609e859bef",
      "tree": "c16b89c9eb4a48b3c7926cfff0a4b88fa6a5929a",
      "parents": [
        "a79e9396a52aeb4120897368dfda93a47503f5f1"
      ],
      "author": {
        "name": "Benoît Lizé",
        "email": "lizeb@google.com",
        "time": "Wed Jul 22 16:13:17 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 22 16:16:34 2026"
      },
      "message": "[tools/android] Expand Android GPU memory dump tool\n\nThis adds a report of DMA buffers, and replaces the previous tool.\n\nBug: 519165469\nChange-Id: I48f750c8f95ad24213b6d8e8fc7b187ac525c354\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8129935\nReviewed-by: Yaron Friedman \u003cyfriedman@chromium.org\u003e\nCommit-Queue: Benoit Lize \u003clizeb@chromium.org\u003e\nReviewed-by: Egor Pasko \u003cpasko@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1666374}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 5848411f2fe8ac6a686b785839afeb09a0b1eaed\n"
    },
    {
      "commit": "a79e9396a52aeb4120897368dfda93a47503f5f1",
      "tree": "0364eb77041248b5c1d189732c2efd5e1f749108",
      "parents": [
        "a21cc06054f208b5a913934bfa03f3d4b8ae9f37"
      ],
      "author": {
        "name": "Victor Hugo Vianna Silva",
        "email": "victorvianna@google.com",
        "time": "Fri Jul 17 15:06:04 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 17 15:10:05 2026"
      },
      "message": "Add unnamed variable test to checkstyle_test.py\n\nFollow-up to crrev.com/c/8095002.\n\nChange-Id: I2c79cf8d1e5c81992d2e3d3146a0acf5e160d964\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8117847\nCommit-Queue: Andrew Grieve \u003cagrieve@chromium.org\u003e\nReviewed-by: Andrew Grieve \u003cagrieve@chromium.org\u003e\nAuto-Submit: Victor Vianna \u003cvictorvianna@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1663905}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 133b3e6832624a5a718192a30b2e419df8d32c10\n"
    },
    {
      "commit": "a21cc06054f208b5a913934bfa03f3d4b8ae9f37",
      "tree": "e3cf7b068ac8aafb0dce5e42da0e9eb0c3d26576",
      "parents": [
        "8224d47d130dbcfd0718063a7abe95b931572855"
      ],
      "author": {
        "name": "Victor Hugo Vianna Silva",
        "email": "victorvianna@google.com",
        "time": "Wed Jul 15 14:08:26 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 15 14:10:48 2026"
      },
      "message": "Fix error-prone warnings from upcoming roll\n\nBug: 534779546\nChange-Id: I233d0f22c034036ad04b56f1caceabbdae8edc47\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8091413\nAuto-Submit: Victor Vianna \u003cvictorvianna@google.com\u003e\nReviewed-by: Andrew Grieve \u003cagrieve@chromium.org\u003e\nCommit-Queue: Andrew Grieve \u003cagrieve@chromium.org\u003e\nOwners-Override: Andrew Grieve \u003cagrieve@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1662573}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 195962358a83d3d08c30236b80bf413002344868\n"
    },
    {
      "commit": "8224d47d130dbcfd0718063a7abe95b931572855",
      "tree": "f40de7f50a869f0475de1bc829338d15f763efbc",
      "parents": [
        "86b91aaba20fc729ee356fdc77da8ea4f9585afc"
      ],
      "author": {
        "name": "Gazal",
        "email": "agazal@google.com",
        "time": "Wed Jul 15 00:32:52 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 15 00:35:46 2026"
      },
      "message": "Update checkstyle config to allow Java 25 unnamed variables\n\nUpdate the regex patterns in chromium-style-5.0.xml to accept \u0027_\u0027 as a\nvalid identifier for parameters, local variables, and local final\nvariables. This prevents checkstyle warnings when using Java 25 unnamed\nvariables.\n\nChange-Id: Iff5cb6b704645939ed3a1b780b2120e95c98a139\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8095002\nCommit-Queue: Andrew Grieve \u003cagrieve@chromium.org\u003e\nReviewed-by: Andrew Grieve \u003cagrieve@chromium.org\u003e\nAuto-Submit: Gazal Agarwal \u003cagazal@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1662283}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 841badb8867cf445a36be6e47803d81ddbfe99a7\n"
    },
    {
      "commit": "86b91aaba20fc729ee356fdc77da8ea4f9585afc",
      "tree": "5efee650998b7e11db077250df5aefef8027e189",
      "parents": [
        "70f2ce1dc6760000a3f2de0bf76d51347173c853"
      ],
      "author": {
        "name": "Andrew Grieve",
        "email": "agrieve@chromium.org",
        "time": "Fri Jun 12 23:43:10 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jun 12 23:46:27 2026"
      },
      "message": "Android: Add Error Prone check to use Callback.bind() when applicable\n\nSaves on binary size and makes for less line wrapping.\n\nBug: None\nChange-Id: If277834913cf7772570e7bf6184e3eb8542b7e82\nCq-Include-Trybots: luci.chrome.try:android-internal-dbg,android-internal-binary-size\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7923607\nCommit-Queue: Andrew Grieve \u003cagrieve@chromium.org\u003e\nOwners-Override: Andrew Grieve \u003cagrieve@chromium.org\u003e\nReviewed-by: Henrique Nakashima \u003chnakashima@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1646319}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 65449394ca0ae45aa8427630f69c512bae24a15f\n"
    },
    {
      "commit": "70f2ce1dc6760000a3f2de0bf76d51347173c853",
      "tree": "80d58cea09311d80e191ba6855d7b7e587c4aa88",
      "parents": [
        "1fd5834b54fed6e00729821910c68d19612136dc"
      ],
      "author": {
        "name": "Haiyang Pan",
        "email": "hypan@google.com",
        "time": "Thu Jun 11 00:29:30 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jun 11 00:31:50 2026"
      },
      "message": "Update Android 17 AVDs to Image version 5\n\nThe AVDs are created in http://ci.chromium.org/b/8679428251591858497\n\nBug: 490498459\nChange-Id: I5f916c84b37526570697f09d122f4bda839d4b4a\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7803397\nCommit-Queue: Andrew Grieve \u003cagrieve@chromium.org\u003e\nAuto-Submit: Haiyang Pan \u003chypan@google.com\u003e\nReviewed-by: Andrew Grieve \u003cagrieve@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1645000}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 14ebe9558b1df360b7329c277757a5792008f346\n"
    },
    {
      "commit": "1fd5834b54fed6e00729821910c68d19612136dc",
      "tree": "0dfb99af90aef0655de7e9680e02e61fbb31867e",
      "parents": [
        "66a82f5ec7b98f521513984ab2004fd68751369e"
      ],
      "author": {
        "name": "Haiyang Pan",
        "email": "hypan@google.com",
        "time": "Tue Jun 09 23:49:15 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 09 23:51:41 2026"
      },
      "message": "android: Update Android 17 image to version 5 in creation config.\n\nBug: 490498459\nChange-Id: I1e1f3886e88ba5478ea3c2e31739a4d467c7f1ab\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7913899\nAuto-Submit: Haiyang Pan \u003chypan@google.com\u003e\nReviewed-by: Ben Pastene \u003cbpastene@chromium.org\u003e\nCommit-Queue: Ben Pastene \u003cbpastene@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1644325}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 17219914399843ebf49708b1cdabfbab8c5cb280\n"
    },
    {
      "commit": "66a82f5ec7b98f521513984ab2004fd68751369e",
      "tree": "bab7bd613d4039dd7219eb0da0c73dae3943eb7d",
      "parents": [
        "0125088c2bb4062a9ac65bc289da3e4dc1933ecd"
      ],
      "author": {
        "name": "Brian Lefler",
        "email": "bcl@google.com",
        "time": "Tue Jun 09 14:38:33 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 09 14:41:21 2026"
      },
      "message": "Log helpful warnings for limited permissions in avd.py\n\nAdds warnings when linux envs lack access to \u0027/dev/kvm\u0027 or when an\nemulator PID can\u0027t be determined.\n\nChange-Id: I74ad00cf9ac3ccf41aa33094255bfc406fbf961c\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7908817\nCommit-Queue: Brian Lefler \u003cbcl@google.com\u003e\nReviewed-by: Haiyang Pan \u003chypan@google.com\u003e\nReviewed-by: Brian Begnoche \u003cbcb@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1643950}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: c772d713281b1ed75aa77adfd969f8daae667889\n"
    },
    {
      "commit": "0125088c2bb4062a9ac65bc289da3e4dc1933ecd",
      "tree": "a57caee7de095518288485efce246b398317c9b7",
      "parents": [
        "07f88246b13604e46eb93cde64a93d92ea8895b5"
      ],
      "author": {
        "name": "Benoît Lizé",
        "email": "lizeb@google.com",
        "time": "Tue Jun 02 16:45:49 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 02 16:48:21 2026"
      },
      "message": "[tools/android] Add a tool to enumerate SurfaceFlinger buffers\n\nOn Android, Chrome has several layers, most commonly:\n- One mostly-tranparent one, holding the application Java UI (and thus\n  mostly transparent, since the bulk of the window is taken by the web\n  content)\n- Another one, used for final composition (Chrome-side)\n\nAt 120Hz, these layers each have 5 buffers, which are never released as\nlong as the Chrome window exists. On Phones, this means that Chrome is\nthe foreground app. With floating windows, we have many such windows.\n\nThis tool queries these buffers locally. On a Pixel 10 Pro Fold, the\noutput is:\n\n$ python3 /code/clankium/src/tools/android/parse_surface_flinger_buffers.py --filter chrome\n[...]\nOwner / Process / Window                                     | Buffer Name                                   | ID     | Size         | W x H\n-------------------------------------------------------------------------------------------------------------------------------------------------\ncom.chrome.dev (Window: Main)                                | VRI[Main]#92(BLAST Consumer)92                | 158102 | 17587.48KiB  | 2152x2076\ncom.chrome.dev (Window: Main)                                | VRI[Main]#92(BLAST Consumer)92                | 158088 | 17587.48KiB  | 2152x2076\ncom.chrome.dev (Window: Main)                                | VRI[Main]#92(BLAST Consumer)92                | 158090 | 17587.48KiB  | 2152x2076\ncom.chrome.dev (Window: Main)                                | VRI[Main]#92(BLAST Consumer)92                | 158104 | 17587.48KiB  | 2152x2076\ncom.chrome.dev (Window: Main)                                | VRI[Main]#92(BLAST Consumer)92                | 158106 | 17587.48KiB  | 2152x2076\ncom.chrome.dev:privileged_process0                           | AHardwareBuffer pid [21038]                   | 158098 | 16284.98KiB  | 1991x2076\ncom.chrome.dev:privileged_process0                           | AHardwareBuffer pid [21038]                   | 158092 | 16284.98KiB  | 1991x2076\ncom.chrome.dev:privileged_process0                           | AHardwareBuffer pid [21038]                   | 158100 | 16284.98KiB  | 1991x2076\ncom.chrome.dev:privileged_process0                           | AHardwareBuffer pid [21038]                   | 158096 | 16284.98KiB  | 1991x2076\ncom.chrome.dev:privileged_process0                           | AHardwareBuffer pid [21038]                   | 158094 | 16284.98KiB  | 1991x2076\n-------------------------------------------------------------------------------------------------------------------------------------------------\nTotal size of filtered buffers: 169362.30 KiB (165.39 MiB)\n\nWhich indeed shows the 5 buffers for the Java UI layer, and 5 buffers\nfor web content, for a total of 165MB.\n\nBug: 519165469\nChange-Id: I7c1d5d917d0fc2140c9b79fef4e40c183fa9bd10\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7896095\nCommit-Queue: Benoit Lize \u003clizeb@chromium.org\u003e\nReviewed-by: Egor Pasko \u003cpasko@chromium.org\u003e\nReviewed-by: Andrew Grieve \u003cagrieve@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1640253}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 9052742d9eae9069e34c0566229a924dd1715d1e\n"
    },
    {
      "commit": "07f88246b13604e46eb93cde64a93d92ea8895b5",
      "tree": "775159ff28ceecd0fb970f114b97798282fdc64b",
      "parents": [
        "f86c15248f9a4fe8c7bf51f3eb1ac5eafc5cf5a4"
      ],
      "author": {
        "name": "Anand Ravi",
        "email": "anandrv@google.com",
        "time": "Mon May 25 18:01:07 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon May 25 18:03:21 2026"
      },
      "message": "[colabutils] Add Speedometer 3.1 benchmark support\n\nIntroduce speedometer.py in colabutils/profile to run Speedometer 3.1 on\nAndroid devices using crossbench and parse the results into an object\nthat provides structured access to benchmark scores, geometric means,\nand individual story/iteration results.\n\nBug: 515025389\nChange-Id: Ia89a7fa72b4d788a90981800eb39d07068b6a4fd\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7862693\nReviewed-by: Andrew Grieve \u003cagrieve@chromium.org\u003e\nAuto-Submit: Anand Ravi \u003canandrv@google.com\u003e\nCommit-Queue: Anand Ravi \u003canandrv@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1635787}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 36b420d2e9029ddcc5842b93d64ef88be73f269a\n"
    },
    {
      "commit": "f86c15248f9a4fe8c7bf51f3eb1ac5eafc5cf5a4",
      "tree": "5538d1fbe4fe017cdcff4708a809287d42a41a56",
      "parents": [
        "8c835a68dbf0078f3daa141522130083b5686e03"
      ],
      "author": {
        "name": "Peter Wen",
        "email": "wnwen@chromium.org",
        "time": "Tue May 12 14:29:34 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue May 12 14:31:42 2026"
      },
      "message": "android: Add can_install\u003dTrue to al_cc benchmark\n\nThis was missing when the benchmark was added: https://crrev.com/c/7801177\n\nBug: 507810250\nChange-Id: Ia9c2cc5fdcedb9a98c108d76d0a408838bfc0922\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7841092\nCommit-Queue: Andrew Grieve \u003cagrieve@chromium.org\u003e\nCommit-Queue: Peter Wen \u003cwnwen@chromium.org\u003e\nReviewed-by: Andrew Grieve \u003cagrieve@chromium.org\u003e\nAuto-Submit: Peter Wen \u003cwnwen@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1629312}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: b7c74b0664fa9cee15cfb01630ee7291b957a1a4\n"
    },
    {
      "commit": "8c835a68dbf0078f3daa141522130083b5686e03",
      "tree": "a5c49c25dbd6ababf993dea5c19ce2f893c33c63",
      "parents": [
        "501b74ca1cd21d7bf5980bf9b79e811ffcdc6157"
      ],
      "author": {
        "name": "Victor Hugo Vianna Silva",
        "email": "victorvianna@google.com",
        "time": "Sat May 09 02:42:29 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat May 09 02:45:26 2026"
      },
      "message": "Remove unused chrome_proxy_utils\n\nThe last use was deleted in crrev.com/i/9269801.\n\nBug: 495366518\nChange-Id: Id51bed084f77960292f46c6c0d32298e883ee8a4\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7817662\nCommit-Queue: Victor Vianna \u003cvictorvianna@google.com\u003e\nReviewed-by: Andrew Grieve \u003cagrieve@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1628076}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 6a4b6f782aa0be8def629acd140f6dc99e6b0739\n"
    },
    {
      "commit": "501b74ca1cd21d7bf5980bf9b79e811ffcdc6157",
      "tree": "6cbe502fb8a2a0bef95319b3a3ac700f0855ea44",
      "parents": [
        "b1ae9918f6acc1ae8e367e89faeb7321777e3095"
      ],
      "author": {
        "name": "Sky Malice",
        "email": "skym@chromium.org",
        "time": "Fri May 08 18:11:26 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri May 08 18:14:45 2026"
      },
      "message": "Create a formatter for Android resource xml files.\n\nBug: 40281206\nChange-Id: I2bd4e3279184ce0a7d2216b6301d22b2a0b90f42\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7824582\nCommit-Queue: Sky Malice \u003cskym@chromium.org\u003e\nReviewed-by: Andrew Grieve \u003cagrieve@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1627783}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: a457d835b83ef2e042c23a24880eb49ce16e0326\n"
    },
    {
      "commit": "b1ae9918f6acc1ae8e367e89faeb7321777e3095",
      "tree": "4eeeb515a420ab3ed2a0aab114072e1acb033388",
      "parents": [
        "bdba55307d19808d1ce0ad30c067ab602484ca0a"
      ],
      "author": {
        "name": "Sky Malice",
        "email": "skym@chromium.org",
        "time": "Thu May 07 15:16:36 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu May 07 15:19:07 2026"
      },
      "message": "Improve xml resource formatting rules.\n\nBug: 40281206\nChange-Id: I15ed077babe6ec3db31f084a72c55f2ed9188fe8\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7821922\nReviewed-by: Andrew Grieve \u003cagrieve@chromium.org\u003e\nCommit-Queue: Sky Malice \u003cskym@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1626938}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: b9604ecafafdfcb33d7667ef2e471afe304b3df6\n"
    },
    {
      "commit": "bdba55307d19808d1ce0ad30c067ab602484ca0a",
      "tree": "2700e2849057061b03fe562e827ab833c5717d97",
      "parents": [
        "efefa1d650ddd0c245dfd82feaf0c7306ee1e59f"
      ],
      "author": {
        "name": "Jonathan Lee",
        "email": "jonathanjlee@google.com",
        "time": "Tue May 05 01:15:36 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue May 05 01:17:21 2026"
      },
      "message": "[l10n] Add `check_grd_for_unused_strings.py --fix`\n\nFold in `//tools/android/remove_strings.py`, since removing orphaned\nstrings is useful beyond Android. Also, try to delete `.png.sha1`s.\n\nBug: 502311511\nChange-Id: I466977a7aaeaee7e008e1c0988cd107404d3cc31\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7770303\nReviewed-by: Mustafa Emre Acer \u003cmeacer@chromium.org\u003e\nCommit-Queue: Jonathan Lee \u003cjonathanjlee@google.com\u003e\nReviewed-by: Yaron Friedman \u003cyfriedman@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1625082}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 3d28df3f1d5cba001c5938466695fc7f675d7a87\n"
    },
    {
      "commit": "efefa1d650ddd0c245dfd82feaf0c7306ee1e59f",
      "tree": "001280f8374375564ef2901ca5a9bf2e3a969925",
      "parents": [
        "a8ff2229c6d5653868e86f220d529c0a4a999e92"
      ],
      "author": {
        "name": "Jack Thiesen",
        "email": "jthiesen@chromium.org",
        "time": "Mon May 04 17:31:02 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon May 04 17:32:56 2026"
      },
      "message": "Add --no-mouse-reposition flag to avd.py\n\nPlumb --no-mouse-reposition flag from tools/android/avd/avd.py down to\nthe emulator invocation. This flag is suggested for using emulators on\nChrome Remote Desktop.\n\nChange-Id: I8d8ab80feb47ad6dcd9e911575b5ebb5601335dd\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7810734\nCommit-Queue: Jack Thiesen \u003cjthiesen@chromium.org\u003e\nReviewed-by: Haiyang Pan \u003chypan@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1624801}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 3636a462ab678fce56ac89f2f788704b309c2aa2\n"
    },
    {
      "commit": "a8ff2229c6d5653868e86f220d529c0a4a999e92",
      "tree": "a5953b5bbed841a807d004ca57f91894fe42ebc9",
      "parents": [
        "b6dbb5c7d3437815356ad01fc574c78200577d24"
      ],
      "author": {
        "name": "Peter Wen",
        "email": "wnwen@chromium.org",
        "time": "Thu Apr 30 17:25:48 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Apr 30 17:27:59 2026"
      },
      "message": "android: Add al_cc benchmark for Desktop\n\nAdd a compile benchmark for Android Desktop to benchmark.py. This\nbenchmark tracks incremental compilation speed of a commonly used C++\nfile (compositor_view.cc).\n\nAlso add the benchmark to timeall.py.\n\nBug: 507810250\nChange-Id: Icf24b2ed4261ff5efc37870b09fb80472306cfd9\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7801177\nAuto-Submit: Peter Wen \u003cwnwen@chromium.org\u003e\nCommit-Queue: Andrew Grieve \u003cagrieve@chromium.org\u003e\nReviewed-by: Andrew Grieve \u003cagrieve@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1623301}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 3745be6ffb695f6f7e752d6b22d9ef3ad69f012f\n"
    },
    {
      "commit": "b6dbb5c7d3437815356ad01fc574c78200577d24",
      "tree": "34a9c657d4d8ea5c19b8f90931f0ea7a30ced912",
      "parents": [
        "0e4a86ea2c47943721fb81e4c41c31f0b9983e5d"
      ],
      "author": {
        "name": "Haiyang Pan",
        "email": "hypan@google.com",
        "time": "Wed Apr 29 04:21:41 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Apr 29 04:24:14 2026"
      },
      "message": "Try the previous GPU mode for Android 17.\n\nThere are much more test failure after upgrading from Beta 3 to Beta 4,\ni.e. failed tests in chrome_public_test_apk increases from 15ish to\n200ish with timeout shards. And total runtime increases from 700 mins\nto 1200 mins.\n\nNeed to see if it is related to GPU mode, or system image\n\nBug: 490498459\nChange-Id: I48bf17506fbd4f204ee96ec0b3a0a4607c2c18ca\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7802637\nAuto-Submit: Haiyang Pan \u003chypan@google.com\u003e\nReviewed-by: Ben Pastene \u003cbpastene@chromium.org\u003e\nCommit-Queue: Ben Pastene \u003cbpastene@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1622224}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: ccf3b388888cc6f8cf3bab4c9fccb4477f077957\n"
    },
    {
      "commit": "0e4a86ea2c47943721fb81e4c41c31f0b9983e5d",
      "tree": "e8e29e59a3e3e78a6f517f62b022bf5fae29e2e6",
      "parents": [
        "57f44067e33c2ab95733350f29d34f748d0b63a1"
      ],
      "author": {
        "name": "Haiyang Pan",
        "email": "hypan@google.com",
        "time": "Fri Apr 24 21:59:20 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Apr 24 22:00:38 2026"
      },
      "message": "Roll Android 17 Beta 4 AVDs\n\nFollow up of https://crrev.com/c/7787095.\nAVDs are created in http://ci.chromium.org/b/8683708859047337777\n\nBug: 490498459\nChange-Id: I8326124ac472ee1fe85139f42044638986428047\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7791483\nReviewed-by: Renuga Nanjappan \u003crnanjappan@chromium.org\u003e\nCommit-Queue: Haiyang Pan \u003chypan@google.com\u003e\nAuto-Submit: Haiyang Pan \u003chypan@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1620496}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: c936970ee6afa0cf18f1f41ec6c7ff2c292138ac\n"
    },
    {
      "commit": "57f44067e33c2ab95733350f29d34f748d0b63a1",
      "tree": "91e2848196a210d7dbb1cce482d05d1f89c9ab98",
      "parents": [
        "733bd68bbd99ca644bd44a3468634f9f5d26346c"
      ],
      "author": {
        "name": "Kalvin Lee",
        "email": "kdlee@chromium.org",
        "time": "Fri Apr 24 12:53:54 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Apr 24 12:58:05 2026"
      },
      "message": "Busybody: `gn format` pass\n\nThis CL is a no-op. It was generated by\n\n```\ngit ls-files | rg \u0027\\.gn$\u0027 | xargs gn format\n```\n\nThis one is scoped to\ntools/android/errorprone_plugin\n\nThis CL was uploaded by git cl split.\n\nR\u003dwnwen@chromium.org\n\nChange-Id: I9058634b179fae4f17d6f6bd6f9078f13ecd9bac\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7790836\nAuto-Submit: Kalvin Lee \u003ckdlee@chromium.org\u003e\nReviewed-by: Peter Wen \u003cwnwen@chromium.org\u003e\nCommit-Queue: Peter Wen \u003cwnwen@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1620114}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 4f950bf8356b12be8fa36515312f0c20bde704d6\n"
    },
    {
      "commit": "733bd68bbd99ca644bd44a3468634f9f5d26346c",
      "tree": "0cf75be0c1658f58123f18e4948437976dd569a2",
      "parents": [
        "1d554ad21803ee59f3e303776d17629d42fc0213"
      ],
      "author": {
        "name": "Haiyang Pan",
        "email": "hypan@google.com",
        "time": "Wed Apr 22 22:36:13 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Apr 22 22:38:38 2026"
      },
      "message": "Update the AVD creation config for Android 17 beta.\n\nThe API level name changed from CinnamonBun to 37 in beta 4.\n\nBug: 490498459\nChange-Id: I0acac1028bee98ad68a3b3e81bdd9b5cf807db6f\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7787095\nCommit-Queue: Ben Pastene \u003cbpastene@chromium.org\u003e\nReviewed-by: Ben Pastene \u003cbpastene@chromium.org\u003e\nAuto-Submit: Haiyang Pan \u003chypan@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1619145}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 017fe042c6b88214727aee7b552cd755227dd199\n"
    },
    {
      "commit": "1d554ad21803ee59f3e303776d17629d42fc0213",
      "tree": "ca327f1c01ef5332dad963bf70fa96344c1c2adc",
      "parents": [
        "7e5ddc3fe30d4e69f68335d6da73f9c5a05de7b5"
      ],
      "author": {
        "name": "Haiyang Pan",
        "email": "hypan@google.com",
        "time": "Wed Apr 01 23:02:32 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Apr 01 23:04:46 2026"
      },
      "message": "Reland \"Roll Android 12L AVDs that are created with explicit gpu_mode\"\n\nThis reverts commit 441dcff58654ed2dded3dc51d4b0356c72e9639c.\n\nReason for revert: Test failure was due to skia gold image comparison.\nThe comparison is approved now so should be passing after this reland.\n\nOriginal change\u0027s description:\n\u003e Revert \"Roll Android 12L AVDs that are created with explicit gpu_mode\"\n\u003e\n\u003e This reverts commit 88b472bbc1bf36eab4beb5b8b2dbc162d37be35b.\n\u003e\n\u003e Reason for revert: Consistent failure of TabSwitcherSearchRenderTest#testHubSearchLoupe_Tablet_Incognito test https://ci.chromium.org/ui/p/chromium/builders/ci/android-12l-x64-rel-cq/38221/overview. Tested that reverting this CL fixes the bot https://chromium-review.git.corp.google.com/c/chromium/src/+/7696792\n\u003e\n\u003e Original change\u0027s description:\n\u003e \u003e Roll Android 12L AVDs that are created with explicit gpu_mode\n\u003e \u003e\n\u003e \u003e i.e. https://crrev.com/c/7651430\n\u003e \u003e\n\u003e \u003e Bug: 481100867\n\u003e \u003e Change-Id: Iacf1e4cdf56d53c46813a8f50f4f488b86201f04\n\u003e \u003e Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7681154\n\u003e \u003e Commit-Queue: Haiyang Pan \u003chypan@google.com\u003e\n\u003e \u003e Reviewed-by: Ben Pastene \u003cbpastene@chromium.org\u003e\n\u003e \u003e Cr-Commit-Position: refs/heads/main@{#1603707}\n\u003e\n\u003e Bug: 481100867, 495703072\n\u003e No-Presubmit: true\n\u003e No-Tree-Checks: true\n\u003e No-Try: true\n\u003e Bug: 481100867\n\u003e Change-Id: Iec001635d9f99e12244b497e5c33f34dafdecacf\n\u003e Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7693623\n\u003e Commit-Queue: Rubber Stamper \u003crubber-stamper@appspot.gserviceaccount.com\u003e\n\u003e Owners-Override: Anna Tsvirchkova \u003catsvirchkova@google.com\u003e\n\u003e Auto-Submit: Anna Tsvirchkova \u003catsvirchkova@google.com\u003e\n\u003e Bot-Commit: Rubber Stamper \u003crubber-stamper@appspot.gserviceaccount.com\u003e\n\u003e Cr-Commit-Position: refs/heads/main@{#1604020}\n\nBug: 481100867, 495703072\nBug: 481100867\nChange-Id: I43a0c79ab026207f3e80716ab73d8e2d0d91f153\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7722627\nReviewed-by: Ben Pastene \u003cbpastene@chromium.org\u003e\nCommit-Queue: Haiyang Pan \u003chypan@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1608837}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: b5662ca5e4902ca4997aef062b939d4e43e43173\n"
    },
    {
      "commit": "7e5ddc3fe30d4e69f68335d6da73f9c5a05de7b5",
      "tree": "c661b1c1141ea83d49c520fb884c1864bca11363",
      "parents": [
        "debf72d5eafa629f1bbb65fc237f8ef588584225"
      ],
      "author": {
        "name": "Haiyang Pan",
        "email": "hypan@google.com",
        "time": "Sat Mar 28 00:18:06 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Mar 28 00:20:03 2026"
      },
      "message": "Make the 17 beta AVD config file names all lowercase\n\nAs the filename is used as the swarming named cache. But swarming don\u0027t\nallow uppercase letters.\n\nBug: 490498459\nChange-Id: Iabf951cfb10312a785ad29d2f9353eb96941d006\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7708964\nAuto-Submit: Haiyang Pan \u003chypan@google.com\u003e\nCommit-Queue: Ben Pastene \u003cbpastene@chromium.org\u003e\nReviewed-by: Ben Pastene \u003cbpastene@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1606569}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 0b28ec6822156dac026a51a613ff334892d0ec73\n"
    },
    {
      "commit": "debf72d5eafa629f1bbb65fc237f8ef588584225",
      "tree": "b70c4fb53f9f76a1c443e196a29a6f4c81e423a0",
      "parents": [
        "1c2abb040d6e7d356ae04441f65e75377d1a1412"
      ],
      "author": {
        "name": "Haiyang Pan",
        "email": "hypan@google.com",
        "time": "Tue Mar 24 20:05:45 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Mar 24 20:07:52 2026"
      },
      "message": "Update all emulator mixins to be generated by a method\n\nThis makes the code much cleaner and easier to maintain.\nShould be a no-op CL, expect that it adds descriptions to more mixins.\n\nBug: 420639760\nChange-Id: Ief79d069dcf33b9c45989701c4a82805653e0397\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7695573\nReviewed-by: Ben Pastene \u003cbpastene@chromium.org\u003e\nAuto-Submit: Haiyang Pan \u003chypan@google.com\u003e\nCommit-Queue: Ben Pastene \u003cbpastene@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1604334}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 8327d89a4740050d03a5249ed4d37293128fe124\n"
    },
    {
      "commit": "1c2abb040d6e7d356ae04441f65e75377d1a1412",
      "tree": "9a3d5b1b152de8b607f98ace16ad95b4bae990c6",
      "parents": [
        "2e176f180426783973cfaf21fb948d58e110167f"
      ],
      "author": {
        "name": "Haiyang Pan",
        "email": "hypan@google.com",
        "time": "Tue Mar 24 16:39:37 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Mar 24 16:41:35 2026"
      },
      "message": "Remove all the Android atd images and unused Android FYI builders.\n\nWe use the same image for CI builders as well as for developers\u0027 local\ndebugging to makes it easier to repro issues. But atd images are\nnot good options for local debugging as it disables the rendering.\nSo remove all atd images for now.\n\nThe following Android fyi builders have been paused or duped with\nnon-fyi builders so remove them as well:\n* android-10-x86-fyi-rel\n* android-12-x64-fyi-rel\n* android-12l-x64-fyi-dbg\n* android-13-x64-fyi-rel\n* android-14-arm64-fyi-rel\n* android-14-x64-fyi-rel\n* android-15-x64-fyi-rel\n\nBug: 347759127, 40930660, 40263601\nChange-Id: I3a65e885ec8513e8b1747b98570ae57c4348302e\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7694232\nReviewed-by: Ben Pastene \u003cbpastene@chromium.org\u003e\nCommit-Queue: Haiyang Pan \u003chypan@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1604195}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: d791b7eb1211d53a879106167bc2da94f4fc00dc\n"
    },
    {
      "commit": "2e176f180426783973cfaf21fb948d58e110167f",
      "tree": "f3d499694f9a99c1dcaada729c02323eedf01ebe",
      "parents": [
        "aabe65dcf901776593fdb4f660e08e2a527cb0e8"
      ],
      "author": {
        "name": "Anna Tsvirchkova",
        "email": "atsvirchkova@google.com",
        "time": "Tue Mar 24 11:11:22 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Mar 24 11:13:24 2026"
      },
      "message": "Revert \"Roll Android 12L AVDs that are created with explicit gpu_mode\"\n\nThis reverts commit 88b472bbc1bf36eab4beb5b8b2dbc162d37be35b.\n\nReason for revert: Consistent failure of TabSwitcherSearchRenderTest#testHubSearchLoupe_Tablet_Incognito test https://ci.chromium.org/ui/p/chromium/builders/ci/android-12l-x64-rel-cq/38221/overview. Tested that reverting this CL fixes the bot https://chromium-review.git.corp.google.com/c/chromium/src/+/7696792\n\nOriginal change\u0027s description:\n\u003e Roll Android 12L AVDs that are created with explicit gpu_mode\n\u003e\n\u003e i.e. https://crrev.com/c/7651430\n\u003e\n\u003e Bug: 481100867\n\u003e Change-Id: Iacf1e4cdf56d53c46813a8f50f4f488b86201f04\n\u003e Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7681154\n\u003e Commit-Queue: Haiyang Pan \u003chypan@google.com\u003e\n\u003e Reviewed-by: Ben Pastene \u003cbpastene@chromium.org\u003e\n\u003e Cr-Commit-Position: refs/heads/main@{#1603707}\n\nBug: 481100867, 495703072\nNo-Presubmit: true\nNo-Tree-Checks: true\nNo-Try: true\nBug: 481100867\nChange-Id: Iec001635d9f99e12244b497e5c33f34dafdecacf\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7693623\nCommit-Queue: Rubber Stamper \u003crubber-stamper@appspot.gserviceaccount.com\u003e\nOwners-Override: Anna Tsvirchkova \u003catsvirchkova@google.com\u003e\nAuto-Submit: Anna Tsvirchkova \u003catsvirchkova@google.com\u003e\nBot-Commit: Rubber Stamper \u003crubber-stamper@appspot.gserviceaccount.com\u003e\nCr-Commit-Position: refs/heads/main@{#1604020}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 441dcff58654ed2dded3dc51d4b0356c72e9639c\n"
    },
    {
      "commit": "aabe65dcf901776593fdb4f660e08e2a527cb0e8",
      "tree": "6b09e31bf9a2f2ab85ff7bbb32e7ce4f7a129297",
      "parents": [
        "6215d9a617e2418542bf58d188df3341275a73f2"
      ],
      "author": {
        "name": "Haiyang Pan",
        "email": "hypan@google.com",
        "time": "Mon Mar 23 21:47:59 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Mar 23 21:50:56 2026"
      },
      "message": "Roll Android 12L AVDs that are created with explicit gpu_mode\n\ni.e. https://crrev.com/c/7651430\n\nBug: 481100867\nChange-Id: Iacf1e4cdf56d53c46813a8f50f4f488b86201f04\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7681154\nCommit-Queue: Haiyang Pan \u003chypan@google.com\u003e\nReviewed-by: Ben Pastene \u003cbpastene@chromium.org\u003e\nCr-Commit-Position: refs/heads/main@{#1603707}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 88b472bbc1bf36eab4beb5b8b2dbc162d37be35b\n"
    },
    {
      "commit": "6215d9a617e2418542bf58d188df3341275a73f2",
      "tree": "f3d499694f9a99c1dcaada729c02323eedf01ebe",
      "parents": [
        "618e4e9b04ea2084e286ae5f66245afca2b86b26"
      ],
      "author": {
        "name": "Haiyang Pan",
        "email": "hypan@google.com",
        "time": "Thu Mar 19 21:46:59 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Mar 19 21:49:43 2026"
      },
      "message": "Roll Android 13 AVDs that are created with explicit gpu_mode\n\ni.e. https://crrev.com/c/7651430\n\nBug: 481100867\nChange-Id: I375422a32f60365b87cfdcf5cbae2f37c2fecb0e\nReviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7679715\nReviewed-by: Ben Pastene \u003cbpastene@chromium.org\u003e\nCommit-Queue: Haiyang Pan \u003chypan@google.com\u003e\nCr-Commit-Position: refs/heads/main@{#1602241}\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: deb76f0aead2c462a180a95fa4b5ab8a8f39142f\n"
    }
  ],
  "next": "618e4e9b04ea2084e286ae5f66245afca2b86b26"
}
