IndexedDB: Add memory dump reporting for SQLite backing store [chromium/src : main]

3 views
Skip to first unread message

Xiaohan Zhao (Gerrit)

unread,
May 18, 2026, 8:01:25 PMMay 18
to Abhishek Shanthkumar, Evan Stade, Steve Becker, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, chromium...@chromium.org, grt+...@chromium.org, dmurph+watching...@chromium.org, dmurph+wa...@chromium.org, edgesto...@microsoft.com, enne...@chromium.org, spang...@chromium.org, storage...@chromium.org, tracing...@chromium.org, wfh+...@chromium.org
Attention needed from Abhishek Shanthkumar, Evan Stade and Steve Becker

Xiaohan Zhao added 5 comments

Commit Message
Line 7, Patchset 2:Add memory dumping support for IndexedDB SQLite connections.
Abhishek Shanthkumar . resolved

Can we briefly describe the name and structure of the memory dumps being added?

Xiaohan Zhao

Done

Line 9, Patchset 2:Bug: 40253999
Evan Stade . resolved

can you file a more specific bug for this please?

Xiaohan Zhao

Done

File base/trace_event/memory_infra_background_allowlist.cc
Line 337, Patchset 2: "site_storage/index_db/db_0x?",
Evan Stade . resolved

nit: these should be indexed_db

Xiaohan Zhao

Done

Line 338, Patchset 2: "site_storage/index_db/memenv_0x?",
Evan Stade . resolved

memenv and db both seem unused? When did that become the case? Can we fix this?

Abhishek Shanthkumar

They are both set by [TransactionalLevelDBDatabase::OnMemoryDump](https://source.chromium.org/chromium/chromium/src/+/main:components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_database.cc?q=site_storage%2Findex_db&ss=chromium).

Xiaohan Zhao

Done

File content/browser/indexed_db/instance/bucket_context.cc
Line 1116, Patchset 2: static_cast<sqlite::BackingStoreImpl*>(backing_store())
Evan Stade . resolved

all interaction with the backing store (except construction) should go through the backing store interface, meaning this cast should not be necessary.

Abhishek Shanthkumar

Adding to this, I believe we need to redefine what memory dumps IndexedDB makes in the SQLite world. Currently, with LevelDB:
1. `BucketContext::OnMemoryDump` dumps in-flight memory.
2. `TransactionalLevelDBDatabase::OnMemoryDump` dumps db memory size + leveldb file name.

Both of the above emit to the same identifier presumably so that in-flight memory can be mapped to the origin (gleanable from the levelDB file name that appears against the db memory entry).

In the SQLite case, the existing `DatabaseMemoryDumpProvider::OnMemoryDump` dumps useful sizes under the "IndexedDB_connection" component, with the tag being the address of the specific instance.

It would be good to:

  • Sum and report all those individual db sizes under the `site_storage/index_db` component (similar to (2) for LevelDB above) per origin (BucketContext instance), and
  • Continue providing some attribution from opaque identifiers to the origin, similar to (1) for LevelDB above.
Xiaohan Zhao

Thanks @abhishek.s...@microsoft.com! I want to make sure I implement the intended dump shape.

For SQLite, do you want a single bucket-scoped total dump like `site_storage/indexed_db/sqlite_0x<bucket>` whose size is the sum of all open SQLite connections for that `BucketContext`, plus per-connection child dumps linked/suballocated to the existing `sqlite/IndexedDB_connection/0x...` dumps for attribution?

Also, when you say "per origin (BucketContext instance)", should this be scoped per `BucketContext` rather than adding up all buckets for the same origin?

Abhishek Shanthkumar

Yep, that sounds right structure-wise, thanks! We can iterate on the names (it kind of makes sense not to have "sqlite" in the name under indexed_db, but keeping it "db" to match LevelDB is also misleading) subsequently.

Also, when you say "per origin (BucketContext instance)", should this be scoped per BucketContext rather than adding up all buckets for the same origin?

`BucketContext` is one per origin (with the potential exception of special cases such as third-party origin embeddings), but yes, I do specifically mean one entry per `BucketContext`.

Xiaohan Zhao

Thanks for verifying this! The structure I'm seeing locally in chrome://tracing looks like these.

// site_storage/indexed_db/
// sqlite_0x<bucket> (total, + file_name for origin)
// connection_0x<conn> (per-connection, suballoc → sqlite/IndexedDB_connection/0x?)

I also uploaded the screenshots to the related [bug](https://issues.chromium.org/512908976#attachment76932310).
Please let me know if I should adjust anything. Thanks!

Open in Gerrit

Related details

Attention is currently required from:
  • Abhishek Shanthkumar
  • Evan Stade
  • Steve Becker
Submit Requirements:
  • requirement satisfiedCode-Coverage
  • requirement is not satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: chromium/src
Gerrit-Branch: main
Gerrit-Change-Id: Iaf253a9bb32ad3a4a07868d5e92878a33c3e32c6
Gerrit-Change-Number: 7807951
Gerrit-PatchSet: 4
Gerrit-Owner: Xiaohan Zhao <xiaoh...@microsoft.com>
Gerrit-Reviewer: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
Gerrit-Reviewer: Steve Becker <ste...@microsoft.com>
Gerrit-Reviewer: Xiaohan Zhao <xiaoh...@microsoft.com>
Gerrit-CC: Evan Stade <evan...@microsoft.com>
Gerrit-Attention: Evan Stade <evan...@microsoft.com>
Gerrit-Attention: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
Gerrit-Attention: Steve Becker <ste...@microsoft.com>
Gerrit-Comment-Date: Tue, 19 May 2026 00:01:16 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Xiaohan Zhao <xiaoh...@microsoft.com>
Comment-In-Reply-To: Evan Stade <evan...@microsoft.com>
Comment-In-Reply-To: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
satisfied_requirement
unsatisfied_requirement
open
diffy

Abhishek Shanthkumar (Gerrit)

unread,
May 20, 2026, 10:46:22 AMMay 20
to Xiaohan Zhao, Evan Stade, Steve Becker, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, chromium...@chromium.org, grt+...@chromium.org, dmurph+watching...@chromium.org, dmurph+wa...@chromium.org, edgesto...@microsoft.com, enne...@chromium.org, spang...@chromium.org, storage...@chromium.org, tracing...@chromium.org, wfh+...@chromium.org
Attention needed from Steve Becker and Xiaohan Zhao

Abhishek Shanthkumar added 8 comments

Patchset-level comments
File-level comment, Patchset 4 (Latest):
Abhishek Shanthkumar . resolved

Thanks! Some feedback on the high-level approach below.

Commit Message
Line 12, Patchset 4 (Latest):- `sqlite_0x<bucket>`: total SQLite memory across all open connections for the bucket. Includes a file_name attribute (non-background) for origin
Abhishek Shanthkumar . unresolved

nit: limit each line to 72 chars (you can just use the Format option while editing the commit message in Gerrit).

Line 19, Patchset 4 (Latest):`sql::Database::ReportMemoryUsage()` is restored to power the
Abhishek Shanthkumar . unresolved

Right, the [code comment on `DatabaseMemoryDumpProvider::ReportMemoryUsage`](https://source.chromium.org/chromium/chromium/src/+/main:sql/database_memory_dump_provider.h;l=44;bpv=1;bpt=1) refers to a call by `sql::Database` that does not exist currently. Were we able to find the commit that removed the call, just in case it has additional context that would be interesting to know?

File base/trace_event/memory_infra_background_allowlist.cc
Line 354, Patchset 4 (Latest): "sqlite/IndexedDB_connection/0x?",
Abhishek Shanthkumar . unresolved

The comment at the top of the file says "... providers can be added here only if the background mode dump has very little processor and memory overhead." Do we know that this sqlite trace has low overhead? If we're unsure, we should probably exclude considering that no other sqlite traces have been allowlisted currently.

File content/browser/indexed_db/instance/backing_store.h
Line 313, Patchset 4 (Latest): const std::string& dump_name) {}
Abhishek Shanthkumar . unresolved

We should make this pure virtual (`= 0`) and add a comment with empty body in the leveldb backing store explaining why it doesn't implement this.

File content/browser/indexed_db/instance/sqlite/backing_store_impl.cc
Line 262, Patchset 4 (Latest): total_size += connection->ReportMemoryUsage(
pmd, base::StringPrintf("%s/connection_0x%" PRIXPTR, dump_name.c_str(),
reinterpret_cast<uintptr_t>(connection.get())));
Abhishek Shanthkumar . unresolved

I believe we also need to `AddOwnershipEdge`s from the `sqlite_0x` dump name to the individual `connection_0x` dumps, without which this size and the individual sizes will be counted twice in overall memory usage. Note how the LevelDB backing store does the same (in `TransactionalLevelDBDatabase::OnMemoryDump`).

Line 275, Patchset 4 (Latest): dump->AddString("file_name", "", directory_.AsUTF8Unsafe());
Abhishek Shanthkumar . unresolved

perhaps we can just log the base name of the directory. But I wonder if we can somehow log the sanitized origin itself (if available with BucketContext) instead of this directory name. Is there precedence in other dump providers to log the origin?

File sql/database.h
Line 557, Patchset 4 (Latest): // Reports memory usage into provided memory dump with the given name.
Abhishek Shanthkumar . unresolved
vnit
```suggestion
// Reports memory usage into the provided memory dump with the given name.
```
Open in Gerrit

Related details

Attention is currently required from:
  • Steve Becker
  • Xiaohan Zhao
Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    • requirement is not satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Iaf253a9bb32ad3a4a07868d5e92878a33c3e32c6
    Gerrit-Change-Number: 7807951
    Gerrit-PatchSet: 4
    Gerrit-Owner: Xiaohan Zhao <xiaoh...@microsoft.com>
    Gerrit-Reviewer: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
    Gerrit-Reviewer: Steve Becker <ste...@microsoft.com>
    Gerrit-Reviewer: Xiaohan Zhao <xiaoh...@microsoft.com>
    Gerrit-CC: Evan Stade <evan...@microsoft.com>
    Gerrit-Attention: Xiaohan Zhao <xiaoh...@microsoft.com>
    Gerrit-Attention: Steve Becker <ste...@microsoft.com>
    Gerrit-Comment-Date: Wed, 20 May 2026 14:46:12 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Xiaohan Zhao (Gerrit)

    unread,
    Jun 1, 2026, 6:40:06 PM (9 days ago) Jun 1
    to Abhishek Shanthkumar, Evan Stade, Steve Becker, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, chromium...@chromium.org, grt+...@chromium.org, dmurph+watching...@chromium.org, dmurph+wa...@chromium.org, edgesto...@microsoft.com, enne...@chromium.org, spang...@chromium.org, storage...@chromium.org, tracing...@chromium.org, wfh+...@chromium.org
    Attention needed from Abhishek Shanthkumar and Steve Becker

    Xiaohan Zhao added 2 comments

    Commit Message
    Line 12, Patchset 4:- `sqlite_0x<bucket>`: total SQLite memory across all open connections for the bucket. Includes a file_name attribute (non-background) for origin
    Abhishek Shanthkumar . resolved

    nit: limit each line to 72 chars (you can just use the Format option while editing the commit message in Gerrit).

    Xiaohan Zhao

    Done

    Line 19, Patchset 4:`sql::Database::ReportMemoryUsage()` is restored to power the
    Abhishek Shanthkumar . unresolved

    Right, the [code comment on `DatabaseMemoryDumpProvider::ReportMemoryUsage`](https://source.chromium.org/chromium/chromium/src/+/main:sql/database_memory_dump_provider.h;l=44;bpv=1;bpt=1) refers to a call by `sql::Database` that does not exist currently. Were we able to find the commit that removed the call, just in case it has additional context that would be interesting to know?

    Xiaohan Zhao

    Yes, here is the change removing it. Looks like just a simple clean up due to no usage. https://chromium-review.googlesource.com/c/chromium/src/+/7687491

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Abhishek Shanthkumar
    • Steve Becker
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    • requirement is not satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Iaf253a9bb32ad3a4a07868d5e92878a33c3e32c6
    Gerrit-Change-Number: 7807951
    Gerrit-PatchSet: 5
    Gerrit-Owner: Xiaohan Zhao <xiaoh...@microsoft.com>
    Gerrit-Reviewer: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
    Gerrit-Reviewer: Steve Becker <ste...@microsoft.com>
    Gerrit-Reviewer: Xiaohan Zhao <xiaoh...@microsoft.com>
    Gerrit-CC: Evan Stade <evan...@microsoft.com>
    Gerrit-Attention: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
    Gerrit-Attention: Steve Becker <ste...@microsoft.com>
    Gerrit-Comment-Date: Mon, 01 Jun 2026 22:39:48 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Xiaohan Zhao (Gerrit)

    unread,
    Jun 4, 2026, 4:39:16 AM (7 days ago) Jun 4
    to Abhishek Shanthkumar, Evan Stade, Steve Becker, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, chromium...@chromium.org, grt+...@chromium.org, dmurph+watching...@chromium.org, dmurph+wa...@chromium.org, edgesto...@microsoft.com, enne...@chromium.org, spang...@chromium.org, storage...@chromium.org, tracing...@chromium.org, wfh+...@chromium.org
    Attention needed from Abhishek Shanthkumar and Steve Becker

    Xiaohan Zhao added 5 comments

    File base/trace_event/memory_infra_background_allowlist.cc
    Line 354, Patchset 4: "sqlite/IndexedDB_connection/0x?",
    Abhishek Shanthkumar . unresolved

    The comment at the top of the file says "... providers can be added here only if the background mode dump has very little processor and memory overhead." Do we know that this sqlite trace has low overhead? If we're unsure, we should probably exclude considering that no other sqlite traces have been allowlisted currently.

    Xiaohan Zhao

    I'm not sure about this. I can see DatabaseMemoryDumpProvider::InMemoryDump calls sqlite3_db_status 3x per connection. I may be missing something regarding the overhead expectations. I'll remove this entry for now.

    File content/browser/indexed_db/instance/backing_store.h
    Line 313, Patchset 4: const std::string& dump_name) {}
    Abhishek Shanthkumar . resolved

    We should make this pure virtual (`= 0`) and add a comment with empty body in the leveldb backing store explaining why it doesn't implement this.

    Xiaohan Zhao

    Done

    File content/browser/indexed_db/instance/sqlite/backing_store_impl.cc
    Line 262, Patchset 4: total_size += connection->ReportMemoryUsage(

    pmd, base::StringPrintf("%s/connection_0x%" PRIXPTR, dump_name.c_str(),
    reinterpret_cast<uintptr_t>(connection.get())));
    Abhishek Shanthkumar . resolved

    I believe we also need to `AddOwnershipEdge`s from the `sqlite_0x` dump name to the individual `connection_0x` dumps, without which this size and the individual sizes will be counted twice in overall memory usage. Note how the LevelDB backing store does the same (in `TransactionalLevelDBDatabase::OnMemoryDump`).

    Xiaohan Zhao

    Good catch! Added AddOwnershipEdge here.

    Line 275, Patchset 4: dump->AddString("file_name", "", directory_.AsUTF8Unsafe());
    Abhishek Shanthkumar . resolved

    perhaps we can just log the base name of the directory. But I wonder if we can somehow log the sanitized origin itself (if available with BucketContext) instead of this directory name. Is there precedence in other dump providers to log the origin?

    Xiaohan Zhao

    No site_storage dump provider logs origin directly. The only site_storage precedent (LevelDB IndexedDB) uses just the directory basename, and IDB directory basenames are already hashes of the storage key, so they're effectively sanitized per-bucket identifiers. I'll switch to `directory_.BaseName().AsUTF8Unsafe()` to mirror LevelDB exactly.

    File sql/database.h
    Line 557, Patchset 4: // Reports memory usage into provided memory dump with the given name.
    Abhishek Shanthkumar . resolved
    vnit
    ```suggestion
    // Reports memory usage into the provided memory dump with the given name.
    ```
    Xiaohan Zhao

    Done

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Abhishek Shanthkumar
    • Steve Becker
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    • requirement is not satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Iaf253a9bb32ad3a4a07868d5e92878a33c3e32c6
    Gerrit-Change-Number: 7807951
    Gerrit-PatchSet: 6
    Gerrit-Owner: Xiaohan Zhao <xiaoh...@microsoft.com>
    Gerrit-Reviewer: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
    Gerrit-Reviewer: Steve Becker <ste...@microsoft.com>
    Gerrit-Reviewer: Xiaohan Zhao <xiaoh...@microsoft.com>
    Gerrit-CC: Evan Stade <evan...@microsoft.com>
    Gerrit-Attention: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
    Gerrit-Attention: Steve Becker <ste...@microsoft.com>
    Gerrit-Comment-Date: Thu, 04 Jun 2026 08:39:03 +0000
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Abhishek Shanthkumar (Gerrit)

    unread,
    Jun 5, 2026, 10:16:22 AM (6 days ago) Jun 5
    to Xiaohan Zhao, Evan Stade, Steve Becker, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, chromium...@chromium.org, grt+...@chromium.org, dmurph+watching...@chromium.org, dmurph+wa...@chromium.org, edgesto...@microsoft.com, enne...@chromium.org, spang...@chromium.org, storage...@chromium.org, tracing...@chromium.org, wfh+...@chromium.org
    Attention needed from Steve Becker and Xiaohan Zhao

    Abhishek Shanthkumar added 9 comments

    Patchset-level comments
    File-level comment, Patchset 6 (Latest):
    Abhishek Shanthkumar . resolved

    Looking mostly good, thanks! Some suggestions on the dump names and origin attribution below. After addressing these comments, can you please post another screenshot of the final dumps on the issue?

    File base/trace_event/memory_infra_background_allowlist.cc
    Line 354, Patchset 4: "sqlite/IndexedDB_connection/0x?",
    Abhishek Shanthkumar . resolved

    The comment at the top of the file says "... providers can be added here only if the background mode dump has very little processor and memory overhead." Do we know that this sqlite trace has low overhead? If we're unsure, we should probably exclude considering that no other sqlite traces have been allowlisted currently.

    Xiaohan Zhao

    I'm not sure about this. I can see DatabaseMemoryDumpProvider::InMemoryDump calls sqlite3_db_status 3x per connection. I may be missing something regarding the overhead expectations. I'll remove this entry for now.

    Abhishek Shanthkumar

    Cool, sgtm!

    File content/browser/indexed_db/instance/backing_store.h
    Line 308, Patchset 6 (Latest): // Adds per-backing-store memory dumps under `dump_name`. Pure virtual so
    // every backend explicitly opts in or out of memory reporting. Currently
    // only the SQLite backend reports any memory usage at the bucket level; the
    // LevelDB backend implements this as a no-op.
    Abhishek Shanthkumar . unresolved

    This detail is unnecessary here.

    Line 308, Patchset 6 (Latest): // Adds per-backing-store memory dumps under `dump_name`. Pure virtual so
    Abhishek Shanthkumar . unresolved
    nit: since this comment is on a class method of a backing store instance, it might be better to reframe it.
    ```suggestion
    // Adds a memory dump for `this` under `dump_name`.
    ```
    File content/browser/indexed_db/instance/bucket_context.cc
    Line 1112, Patchset 6 (Latest): if (IsUsingSqlite()) {
    Abhishek Shanthkumar . unresolved

    The LevelDB backing store no-ops ReportMemoryUsage, so this gate isn't necessary (see comment below about the dump name).

    Line 1115, Patchset 6 (Latest): base::StringPrintf("site_storage/indexed_db/sqlite_0x%" PRIXPTR,
    Abhishek Shanthkumar . unresolved

    Bikeshedding on the dump names a bit, I feel like the following structure would make the most sense:
    Top-level: `site_storage/indexed_db/database_engine_0x<ptr>` <- used by both LevelDB and SQLite
    Children: `site_storage/indexed_db/database_engine_0x%/sqlite_db_0x<ptr>` <- passed down to `sql::Database::ReportMemoryUsage()`

    So this would entail changing the (misleading) `site_storage/indexed_db/db` prefix in `TransactionalLevelDBDatabase::OnMemoryDump()` to `site_storage/indexed_db/database_engine`. Since we are already changing `index_db` to `indexed_db`, this seems OK to do.

    WDYT?

    File content/browser/indexed_db/instance/leveldb/backing_store.cc
    Line 3086, Patchset 6 (Latest): // TransactionalLevelDBDatabase::OnMemoryDump, which is registered separately
    // with the MemoryDumpManager and keyed by GetIdentifierForMemoryDump(). Only
    Abhishek Shanthkumar . unresolved

    This detail too isn't necessary here.

    Line 3087, Patchset 6 (Latest): // with the MemoryDumpManager and keyed by GetIdentifierForMemoryDump(). Only
    // the SQLite backend needs to add per-bucket dumps under `dump_name` here.
    Abhishek Shanthkumar . unresolved

    Unnecessary comment

    File content/browser/indexed_db/instance/sqlite/backing_store_impl.cc
    Line 273, Patchset 6 (Latest): // Provide origin attribution similar to LevelDB's `db_0x?` dump. Only
    // exposed in non-background dumps, since file paths aren't allowlisted.
    // The basename encodes a hash of the bucket/storage key (via
    // `GetSqliteDbDirectory(bucket_locator)`), making it a sanitized per-bucket
    // identifier without exposing the full path.
    if (args.level_of_detail !=
    base::trace_event::MemoryDumpLevelOfDetail::kBackground &&
    !directory_.empty()) {
    dump->AddString("file_name", "", directory_.BaseName().AsUTF8Unsafe());
    }
    Abhishek Shanthkumar . unresolved

    On second thought, let's punt this for now. The folder name does not give the correct picture for non-default buckets, and origin attribution is better done at the BucketContext level. Can you please file a bug and link it in a TODO in `BucketContext::OnMemoryDump` regarding adding origin attribution?

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Steve Becker
    • Xiaohan Zhao
    Submit Requirements:
    • requirement satisfiedCode-Coverage
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    • requirement is not satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: Iaf253a9bb32ad3a4a07868d5e92878a33c3e32c6
    Gerrit-Change-Number: 7807951
    Gerrit-PatchSet: 6
    Gerrit-Owner: Xiaohan Zhao <xiaoh...@microsoft.com>
    Gerrit-Reviewer: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
    Gerrit-Reviewer: Steve Becker <ste...@microsoft.com>
    Gerrit-Reviewer: Xiaohan Zhao <xiaoh...@microsoft.com>
    Gerrit-CC: Evan Stade <evan...@microsoft.com>
    Gerrit-Attention: Xiaohan Zhao <xiaoh...@microsoft.com>
    Gerrit-Attention: Steve Becker <ste...@microsoft.com>
    Gerrit-Comment-Date: Fri, 05 Jun 2026 14:15:47 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Xiaohan Zhao <xiaoh...@microsoft.com>
    Comment-In-Reply-To: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
    satisfied_requirement
    unsatisfied_requirement
    open
    diffy

    Xiaohan Zhao (Gerrit)

    unread,
    Jun 8, 2026, 2:43:42 AM (3 days ago) Jun 8
    to Abhishek Shanthkumar, Evan Stade, Steve Becker, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, chromium...@chromium.org, grt+...@chromium.org, dmurph+watching...@chromium.org, dmurph+wa...@chromium.org, edgesto...@microsoft.com, enne...@chromium.org, spang...@chromium.org, storage...@chromium.org, tracing...@chromium.org, wfh+...@chromium.org
    Attention needed from Abhishek Shanthkumar and Steve Becker

    Xiaohan Zhao added 9 comments

    Patchset-level comments
    File-level comment, Patchset 6:
    Xiaohan Zhao . resolved

    Thanks for the comment! I've uploaded the screenshots here. https://issues.chromium.org/512908976#attachment77743024. Please let me know if that works. Thanks.

    Commit Message
    Line 19, Patchset 4:`sql::Database::ReportMemoryUsage()` is restored to power the
    Abhishek Shanthkumar . resolved

    Right, the [code comment on `DatabaseMemoryDumpProvider::ReportMemoryUsage`](https://source.chromium.org/chromium/chromium/src/+/main:sql/database_memory_dump_provider.h;l=44;bpv=1;bpt=1) refers to a call by `sql::Database` that does not exist currently. Were we able to find the commit that removed the call, just in case it has additional context that would be interesting to know?

    Xiaohan Zhao

    Yes, here is the change removing it. Looks like just a simple clean up due to no usage. https://chromium-review.googlesource.com/c/chromium/src/+/7687491

    Xiaohan Zhao

    Done

    File content/browser/indexed_db/instance/backing_store.h
    Line 308, Patchset 6: // Adds per-backing-store memory dumps under `dump_name`. Pure virtual so

    // every backend explicitly opts in or out of memory reporting. Currently
    // only the SQLite backend reports any memory usage at the bucket level; the
    // LevelDB backend implements this as a no-op.
    Abhishek Shanthkumar . resolved

    This detail is unnecessary here.

    Xiaohan Zhao

    Done

    Line 308, Patchset 6: // Adds per-backing-store memory dumps under `dump_name`. Pure virtual so
    Abhishek Shanthkumar . resolved
    nit: since this comment is on a class method of a backing store instance, it might be better to reframe it.
    ```suggestion
    // Adds a memory dump for `this` under `dump_name`.
    ```
    Xiaohan Zhao

    Done

    File content/browser/indexed_db/instance/bucket_context.cc
    Line 1112, Patchset 6: if (IsUsingSqlite()) {
    Abhishek Shanthkumar . resolved

    The LevelDB backing store no-ops ReportMemoryUsage, so this gate isn't necessary (see comment below about the dump name).

    Xiaohan Zhao

    Done

    Line 1115, Patchset 6: base::StringPrintf("site_storage/indexed_db/sqlite_0x%" PRIXPTR,
    Abhishek Shanthkumar . resolved

    Bikeshedding on the dump names a bit, I feel like the following structure would make the most sense:
    Top-level: `site_storage/indexed_db/database_engine_0x<ptr>` <- used by both LevelDB and SQLite
    Children: `site_storage/indexed_db/database_engine_0x%/sqlite_db_0x<ptr>` <- passed down to `sql::Database::ReportMemoryUsage()`

    So this would entail changing the (misleading) `site_storage/indexed_db/db` prefix in `TransactionalLevelDBDatabase::OnMemoryDump()` to `site_storage/indexed_db/database_engine`. Since we are already changing `index_db` to `indexed_db`, this seems OK to do.

    WDYT?

    Xiaohan Zhao

    LGTM!

    File content/browser/indexed_db/instance/leveldb/backing_store.cc
    Line 3086, Patchset 6: // TransactionalLevelDBDatabase::OnMemoryDump, which is registered separately

    // with the MemoryDumpManager and keyed by GetIdentifierForMemoryDump(). Only
    Abhishek Shanthkumar . resolved

    This detail too isn't necessary here.

    Xiaohan Zhao

    Done

    Line 3087, Patchset 6: // with the MemoryDumpManager and keyed by GetIdentifierForMemoryDump(). Only

    // the SQLite backend needs to add per-bucket dumps under `dump_name` here.
    Abhishek Shanthkumar . resolved

    Unnecessary comment

    Xiaohan Zhao

    Done

    File content/browser/indexed_db/instance/sqlite/backing_store_impl.cc
    Line 273, Patchset 6: // Provide origin attribution similar to LevelDB's `db_0x?` dump. Only

    // exposed in non-background dumps, since file paths aren't allowlisted.
    // The basename encodes a hash of the bucket/storage key (via
    // `GetSqliteDbDirectory(bucket_locator)`), making it a sanitized per-bucket
    // identifier without exposing the full path.
    if (args.level_of_detail !=
    base::trace_event::MemoryDumpLevelOfDetail::kBackground &&
    !directory_.empty()) {
    dump->AddString("file_name", "", directory_.BaseName().AsUTF8Unsafe());
    }
    Abhishek Shanthkumar . resolved

    On second thought, let's punt this for now. The folder name does not give the correct picture for non-default buckets, and origin attribution is better done at the BucketContext level. Can you please file a bug and link it in a TODO in `BucketContext::OnMemoryDump` regarding adding origin attribution?

    Xiaohan Zhao

    Done

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Abhishek Shanthkumar
    • Steve Becker
    Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement is not satisfiedCode-Owners
      • requirement is not satisfiedCode-Review
      • requirement is not satisfiedReview-Enforcement
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: Iaf253a9bb32ad3a4a07868d5e92878a33c3e32c6
      Gerrit-Change-Number: 7807951
      Gerrit-PatchSet: 6
      Gerrit-Owner: Xiaohan Zhao <xiaoh...@microsoft.com>
      Gerrit-Reviewer: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
      Gerrit-Reviewer: Steve Becker <ste...@microsoft.com>
      Gerrit-Reviewer: Xiaohan Zhao <xiaoh...@microsoft.com>
      Gerrit-CC: Evan Stade <evan...@microsoft.com>
      Gerrit-Attention: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
      Gerrit-Attention: Steve Becker <ste...@microsoft.com>
      Gerrit-Comment-Date: Mon, 08 Jun 2026 06:43:17 +0000
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Xiaohan Zhao (Gerrit)

      unread,
      Jun 8, 2026, 2:47:09 AM (3 days ago) Jun 8
      to Abhishek Shanthkumar, Evan Stade, Steve Becker, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, chromium...@chromium.org, grt+...@chromium.org, dmurph+watching...@chromium.org, dmurph+wa...@chromium.org, edgesto...@microsoft.com, enne...@chromium.org, spang...@chromium.org, storage...@chromium.org, tracing...@chromium.org, wfh+...@chromium.org
      Attention needed from Abhishek Shanthkumar and Steve Becker

      Xiaohan Zhao added 1 comment

      File content/browser/indexed_db/instance/sqlite/backing_store_impl.cc
      Line 263, Patchset 7 (Latest): for (const auto& [name, connection] : open_connections_) {
      connection->ReportMemoryUsage(
      pmd, base::StringPrintf("%s/sqlite_db_0x%" PRIXPTR, dump_name.c_str(),
      reinterpret_cast<uintptr_t>(connection.get())));
      Xiaohan Zhao . unresolved

      @abhishek.s...@microsoft.com Adding ownership edges here actually hits CHECK, because `ProcessMemoryDump::AddOwnershipEdge()` only permits one outgoing ownership edge per source GUID, and multiple open SQLite connections trigger a CHECK. To avoid double-counting, I removed the aggregate scalar from the bucket-level `database_engine_0x` dump; it is now only an organizational container, while the per-connection `sqlite_db_0x` dumps carry the actual sizes. WDYT? Please let me know if that works.

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Abhishek Shanthkumar
      • Steve Becker
      Submit Requirements:
        • requirement satisfiedCode-Coverage
        • requirement is not satisfiedCode-Owners
        • requirement is not satisfiedCode-Review
        • requirement is not satisfiedNo-Unresolved-Comments
        • requirement is not satisfiedReview-Enforcement
        Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
        Gerrit-MessageType: comment
        Gerrit-Project: chromium/src
        Gerrit-Branch: main
        Gerrit-Change-Id: Iaf253a9bb32ad3a4a07868d5e92878a33c3e32c6
        Gerrit-Change-Number: 7807951
        Gerrit-PatchSet: 7
        Gerrit-Owner: Xiaohan Zhao <xiaoh...@microsoft.com>
        Gerrit-Reviewer: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
        Gerrit-Reviewer: Steve Becker <ste...@microsoft.com>
        Gerrit-Reviewer: Xiaohan Zhao <xiaoh...@microsoft.com>
        Gerrit-CC: Evan Stade <evan...@microsoft.com>
        Gerrit-Attention: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
        Gerrit-Attention: Steve Becker <ste...@microsoft.com>
        Gerrit-Comment-Date: Mon, 08 Jun 2026 06:46:54 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: No
        satisfied_requirement
        unsatisfied_requirement
        open
        diffy

        Abhishek Shanthkumar (Gerrit)

        unread,
        Jun 8, 2026, 12:00:26 PM (3 days ago) Jun 8
        to Xiaohan Zhao, Evan Stade, Steve Becker, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, chromium...@chromium.org, grt+...@chromium.org, dmurph+watching...@chromium.org, dmurph+wa...@chromium.org, edgesto...@microsoft.com, enne...@chromium.org, spang...@chromium.org, storage...@chromium.org, tracing...@chromium.org, wfh+...@chromium.org
        Attention needed from Steve Becker and Xiaohan Zhao

        Abhishek Shanthkumar voted and added 5 comments

        Votes added by Abhishek Shanthkumar

        Code-Review+1

        5 comments

        Patchset-level comments
        File-level comment, Patchset 7 (Latest):
        Abhishek Shanthkumar . resolved

        LGTM, thanks! We should also get a memory-infra expert to take a look so we can be sure we're using the pieces correctly. I guess it will anyway be needed as part of ownership review of the allowlist file.

        File content/browser/indexed_db/instance/sqlite/backing_store_impl.cc
        Line 259, Patchset 7 (Latest): // Create the bucket-level dump as an organizational container. Each
        Abhishek Shanthkumar . unresolved
        nit: "bucket-level" is less appropriate IMO since this class is downstream of the whole bucket concept. Can just be:
        ```suggestion
        // Create the dump as an organizational container.
        ```
        Line 259, Patchset 7 (Latest): // Create the bucket-level dump as an organizational container. Each
        // per-connection child created below adds its own scalar and a suballocation
        // ownership edge to `sqlite/IndexedDB_connection/0x?`.
        Abhishek Shanthkumar . unresolved

        This too is unnecessary detail that does not belong here (I ask agents to aggressively cut down on the verbosity of comments and use existing code comments as a guide, and that seems to help to some extent).

        Line 264, Patchset 7 (Latest): connection->ReportMemoryUsage(
        Abhishek Shanthkumar . unresolved

        This need not return the size now if we are not aggregating manually.

        Line 263, Patchset 7 (Latest): for (const auto& [name, connection] : open_connections_) {
        connection->ReportMemoryUsage(
        pmd, base::StringPrintf("%s/sqlite_db_0x%" PRIXPTR, dump_name.c_str(),
        reinterpret_cast<uintptr_t>(connection.get())));
        Xiaohan Zhao . unresolved

        @abhishek.s...@microsoft.com Adding ownership edges here actually hits CHECK, because `ProcessMemoryDump::AddOwnershipEdge()` only permits one outgoing ownership edge per source GUID, and multiple open SQLite connections trigger a CHECK. To avoid double-counting, I removed the aggregate scalar from the bucket-level `database_engine_0x` dump; it is now only an organizational container, while the per-connection `sqlite_db_0x` dumps carry the actual sizes. WDYT? Please let me know if that works.

        Abhishek Shanthkumar

        Interesting that in the screenshots, the total for the organizational container is automatically being shown by the tracing UI itself without us having to add the size explicitly. Am I reading that right? If so, then this is definitely correct and a better approach than manually aggregating the sizes like we were doing in PS6.

        >actually hits CHECK, because ProcessMemoryDump::AddOwnershipEdge() only permits one outgoing ownership edge per source GUID

        But which CHECK is this? The comments above `AddOwnershipEdge()` and the code itself seems to indicate that a target node can have multiple sources (in which case the cost will be split across them). And there does not seem to be any restriction on one source owning multiple targets (which is the case with suballocations too).

        Also, the [doc to adding traces](https://source.chromium.org/chromium/chromium/src/+/main:docs/memory-infra/adding_memory_infra_tracing.md) talks about using `CreateSharedGlobalAllocatorDump()` when creating a source dump. Is that something we should explore/use?

        Open in Gerrit

        Related details

        Attention is currently required from:
        • Steve Becker
        • Xiaohan Zhao
        Submit Requirements:
        • requirement satisfiedCode-Coverage
        • requirement is not satisfiedCode-Owners
        • requirement is not satisfiedCode-Review
        • requirement is not satisfiedNo-Unresolved-Comments
        • requirement is not satisfiedReview-Enforcement
        Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
        Gerrit-MessageType: comment
        Gerrit-Project: chromium/src
        Gerrit-Branch: main
        Gerrit-Change-Id: Iaf253a9bb32ad3a4a07868d5e92878a33c3e32c6
        Gerrit-Change-Number: 7807951
        Gerrit-PatchSet: 7
        Gerrit-Owner: Xiaohan Zhao <xiaoh...@microsoft.com>
        Gerrit-Reviewer: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
        Gerrit-Reviewer: Steve Becker <ste...@microsoft.com>
        Gerrit-Reviewer: Xiaohan Zhao <xiaoh...@microsoft.com>
        Gerrit-CC: Evan Stade <evan...@microsoft.com>
        Gerrit-Attention: Xiaohan Zhao <xiaoh...@microsoft.com>
        Gerrit-Attention: Steve Becker <ste...@microsoft.com>
        Gerrit-Comment-Date: Mon, 08 Jun 2026 15:59:54 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: Yes
        Comment-In-Reply-To: Xiaohan Zhao <xiaoh...@microsoft.com>
        satisfied_requirement
        unsatisfied_requirement
        open
        diffy

        Xiaohan Zhao (Gerrit)

        unread,
        Jun 8, 2026, 5:20:54 PM (2 days ago) Jun 8
        to Abhishek Shanthkumar, Evan Stade, Steve Becker, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, chromium...@chromium.org, grt+...@chromium.org, dmurph+watching...@chromium.org, dmurph+wa...@chromium.org, edgesto...@microsoft.com, enne...@chromium.org, spang...@chromium.org, storage...@chromium.org, tracing...@chromium.org, wfh+...@chromium.org
        Attention needed from Abhishek Shanthkumar and Steve Becker

        Xiaohan Zhao added 3 comments

        File content/browser/indexed_db/instance/sqlite/backing_store_impl.cc
        Line 259, Patchset 7: // Create the bucket-level dump as an organizational container. Each
        Abhishek Shanthkumar . resolved
        nit: "bucket-level" is less appropriate IMO since this class is downstream of the whole bucket concept. Can just be:
        ```suggestion
        // Create the dump as an organizational container.
        ```
        Xiaohan Zhao

        Fix applied.

        Line 259, Patchset 7: // Create the bucket-level dump as an organizational container. Each
        Abhishek Shanthkumar . resolved
        nit: "bucket-level" is less appropriate IMO since this class is downstream of the whole bucket concept. Can just be:
        ```suggestion
        // Create the dump as an organizational container.
        ```
        Xiaohan Zhao

        Fix applied.

        Line 263, Patchset 7: for (const auto& [name, connection] : open_connections_) {

        connection->ReportMemoryUsage(
        pmd, base::StringPrintf("%s/sqlite_db_0x%" PRIXPTR, dump_name.c_str(),
        reinterpret_cast<uintptr_t>(connection.get())));
        Xiaohan Zhao . unresolved

        @abhishek.s...@microsoft.com Adding ownership edges here actually hits CHECK, because `ProcessMemoryDump::AddOwnershipEdge()` only permits one outgoing ownership edge per source GUID, and multiple open SQLite connections trigger a CHECK. To avoid double-counting, I removed the aggregate scalar from the bucket-level `database_engine_0x` dump; it is now only an organizational container, while the per-connection `sqlite_db_0x` dumps carry the actual sizes. WDYT? Please let me know if that works.

        Abhishek Shanthkumar

        Interesting that in the screenshots, the total for the organizational container is automatically being shown by the tracing UI itself without us having to add the size explicitly. Am I reading that right? If so, then this is definitely correct and a better approach than manually aggregating the sizes like we were doing in PS6.

        >actually hits CHECK, because ProcessMemoryDump::AddOwnershipEdge() only permits one outgoing ownership edge per source GUID

        But which CHECK is this? The comments above `AddOwnershipEdge()` and the code itself seems to indicate that a target node can have multiple sources (in which case the cost will be split across them). And there does not seem to be any restriction on one source owning multiple targets (which is the case with suballocations too).

        Also, the [doc to adding traces](https://source.chromium.org/chromium/chromium/src/+/main:docs/memory-infra/adding_memory_infra_tracing.md) talks about using `CreateSharedGlobalAllocatorDump()` when creating a source dump. Is that something we should explore/use?

        Xiaohan Zhao

        Yes, you're reading the screenshots correctly. The UI rolls up the children under the `database_engine_0x...` container., so we don't need to add an explicit aggregate size.

        The CHECK I hit is in `ProcessMemroyDump::AddOwnershipEdge()`: https://source.chromium.org/chromium/chromium/src/+/main:base/trace_event/process_memory_dump.cc?q=process_memory_dump&ss=chromium%2Fchromium%2Fsrc#:~:text=if%20(it%20!%3D%20allocator_dumps_edges_,%7D. Although multiple sources can own the same target, edges are stored by source GUID, and adding the same source with a different target hits `DCHECK_EQ(target.ToUint64(), it->second.target.ToUint64())`. The SQLite parent-to-many-children shape would use one `database_engine_0x...` source with multiple `sqlite_db_0x...` targets, which violates that invariant.

        I don’t think `CreateSharedGlobalAllocatorDump()` is needed here because the SQLite DB dumps are not modeling a separately shared global allocation; `sql::Database::ReportMemoryUsage()` already creates the concrete per-DB dump and suballocates it to the SQLite memory tracker. The parent `database_engine_0x...` is only an organizational container.

        Open in Gerrit

        Related details

        Attention is currently required from:
        • Abhishek Shanthkumar
        • Steve Becker
        Submit Requirements:
        • requirement satisfiedCode-Coverage
        • requirement is not satisfiedCode-Owners
        • requirement is not satisfiedCode-Review
        • requirement is not satisfiedNo-Unresolved-Comments
        • requirement is not satisfiedReview-Enforcement
        Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
        Gerrit-MessageType: comment
        Gerrit-Project: chromium/src
        Gerrit-Branch: main
        Gerrit-Change-Id: Iaf253a9bb32ad3a4a07868d5e92878a33c3e32c6
        Gerrit-Change-Number: 7807951
        Gerrit-PatchSet: 8
        Gerrit-Owner: Xiaohan Zhao <xiaoh...@microsoft.com>
        Gerrit-Reviewer: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
        Gerrit-Reviewer: Steve Becker <ste...@microsoft.com>
        Gerrit-Reviewer: Xiaohan Zhao <xiaoh...@microsoft.com>
        Gerrit-CC: Evan Stade <evan...@microsoft.com>
        Gerrit-Attention: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
        Gerrit-Attention: Steve Becker <ste...@microsoft.com>
        Gerrit-Comment-Date: Mon, 08 Jun 2026 21:20:44 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: No
        satisfied_requirement
        unsatisfied_requirement
        open
        diffy

        Xiaohan Zhao (Gerrit)

        unread,
        Jun 8, 2026, 5:39:38 PM (2 days ago) Jun 8
        to Abhishek Shanthkumar, Evan Stade, Steve Becker, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, chromium...@chromium.org, grt+...@chromium.org, dmurph+watching...@chromium.org, dmurph+wa...@chromium.org, edgesto...@microsoft.com, enne...@chromium.org, spang...@chromium.org, storage...@chromium.org, tracing...@chromium.org, wfh+...@chromium.org
        Attention needed from Abhishek Shanthkumar and Steve Becker

        Xiaohan Zhao added 2 comments

        File content/browser/indexed_db/instance/sqlite/backing_store_impl.cc
        Line 259, Patchset 7: // Create the bucket-level dump as an organizational container. Each

        // per-connection child created below adds its own scalar and a suballocation
        // ownership edge to `sqlite/IndexedDB_connection/0x?`.
        Abhishek Shanthkumar . resolved

        This too is unnecessary detail that does not belong here (I ask agents to aggressively cut down on the verbosity of comments and use existing code comments as a guide, and that seems to help to some extent).

        Xiaohan Zhao

        Done

        Line 264, Patchset 7: connection->ReportMemoryUsage(
        Abhishek Shanthkumar . resolved

        This need not return the size now if we are not aggregating manually.

        Xiaohan Zhao

        Done

        Gerrit-Comment-Date: Mon, 08 Jun 2026 21:39:29 +0000
        Gerrit-HasComments: Yes
        Gerrit-Has-Labels: No
        Comment-In-Reply-To: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
        satisfied_requirement
        unsatisfied_requirement
        open
        diffy

        Xiaohan Zhao (Gerrit)

        unread,
        Jun 8, 2026, 5:40:57 PM (2 days ago) Jun 8
        to Etienne Pierre-Doray, Greg Thompson, Abhishek Shanthkumar, Evan Stade, Steve Becker, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, chromium...@chromium.org, grt+...@chromium.org, dmurph+watching...@chromium.org, dmurph+wa...@chromium.org, edgesto...@microsoft.com, enne...@chromium.org, spang...@chromium.org, storage...@chromium.org, tracing...@chromium.org, wfh+...@chromium.org
        Attention needed from Abhishek Shanthkumar, Etienne Pierre-Doray, Greg Thompson and Steve Becker

        Xiaohan Zhao added 1 comment

        File content/browser/indexed_db/instance/sqlite/backing_store_impl.cc
        Line 263, Patchset 7: for (const auto& [name, connection] : open_connections_) {
        connection->ReportMemoryUsage(
        pmd, base::StringPrintf("%s/sqlite_db_0x%" PRIXPTR, dump_name.c_str(),
        reinterpret_cast<uintptr_t>(connection.get())));
        Xiaohan Zhao . resolved

        @abhishek.s...@microsoft.com Adding ownership edges here actually hits CHECK, because `ProcessMemoryDump::AddOwnershipEdge()` only permits one outgoing ownership edge per source GUID, and multiple open SQLite connections trigger a CHECK. To avoid double-counting, I removed the aggregate scalar from the bucket-level `database_engine_0x` dump; it is now only an organizational container, while the per-connection `sqlite_db_0x` dumps carry the actual sizes. WDYT? Please let me know if that works.

        Abhishek Shanthkumar

        Interesting that in the screenshots, the total for the organizational container is automatically being shown by the tracing UI itself without us having to add the size explicitly. Am I reading that right? If so, then this is definitely correct and a better approach than manually aggregating the sizes like we were doing in PS6.

        >actually hits CHECK, because ProcessMemoryDump::AddOwnershipEdge() only permits one outgoing ownership edge per source GUID

        But which CHECK is this? The comments above `AddOwnershipEdge()` and the code itself seems to indicate that a target node can have multiple sources (in which case the cost will be split across them). And there does not seem to be any restriction on one source owning multiple targets (which is the case with suballocations too).

        Also, the [doc to adding traces](https://source.chromium.org/chromium/chromium/src/+/main:docs/memory-infra/adding_memory_infra_tracing.md) talks about using `CreateSharedGlobalAllocatorDump()` when creating a source dump. Is that something we should explore/use?

        Xiaohan Zhao

        Yes, you're reading the screenshots correctly. The UI rolls up the children under the `database_engine_0x...` container., so we don't need to add an explicit aggregate size.

        The CHECK I hit is in `ProcessMemroyDump::AddOwnershipEdge()`: https://source.chromium.org/chromium/chromium/src/+/main:base/trace_event/process_memory_dump.cc?q=process_memory_dump&ss=chromium%2Fchromium%2Fsrc#:~:text=if%20(it%20!%3D%20allocator_dumps_edges_,%7D. Although multiple sources can own the same target, edges are stored by source GUID, and adding the same source with a different target hits `DCHECK_EQ(target.ToUint64(), it->second.target.ToUint64())`. The SQLite parent-to-many-children shape would use one `database_engine_0x...` source with multiple `sqlite_db_0x...` targets, which violates that invariant.

        I don’t think `CreateSharedGlobalAllocatorDump()` is needed here because the SQLite DB dumps are not modeling a separately shared global allocation; `sql::Database::ReportMemoryUsage()` already creates the concrete per-DB dump and suballocates it to the SQLite memory tracker. The parent `database_engine_0x...` is only an organizational container.

        Xiaohan Zhao

        Done

        Open in Gerrit

        Related details

        Attention is currently required from:
        • Abhishek Shanthkumar
        • Etienne Pierre-Doray
        • Greg Thompson
        • Steve Becker
        Submit Requirements:
          • requirement satisfiedCode-Coverage
          • requirement is not satisfiedCode-Owners
          • requirement is not satisfiedCode-Review
          • requirement is not satisfiedReview-Enforcement
          Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
          Gerrit-MessageType: comment
          Gerrit-Project: chromium/src
          Gerrit-Branch: main
          Gerrit-Change-Id: Iaf253a9bb32ad3a4a07868d5e92878a33c3e32c6
          Gerrit-Change-Number: 7807951
          Gerrit-PatchSet: 9
          Gerrit-Owner: Xiaohan Zhao <xiaoh...@microsoft.com>
          Gerrit-Reviewer: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
          Gerrit-Reviewer: Etienne Pierre-Doray <etie...@chromium.org>
          Gerrit-Reviewer: Greg Thompson <g...@chromium.org>
          Gerrit-Reviewer: Steve Becker <ste...@microsoft.com>
          Gerrit-Reviewer: Xiaohan Zhao <xiaoh...@microsoft.com>
          Gerrit-CC: Evan Stade <evan...@microsoft.com>
          Gerrit-Attention: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
          Gerrit-Attention: Steve Becker <ste...@microsoft.com>
          Gerrit-Attention: Etienne Pierre-Doray <etie...@chromium.org>
          Gerrit-Attention: Greg Thompson <g...@chromium.org>
          Gerrit-Comment-Date: Mon, 08 Jun 2026 21:40:43 +0000
          Gerrit-HasComments: Yes
          Gerrit-Has-Labels: No
          satisfied_requirement
          unsatisfied_requirement
          open
          diffy

          Abhishek Shanthkumar (Gerrit)

          unread,
          Jun 9, 2026, 2:45:05 AM (2 days ago) Jun 9
          to Xiaohan Zhao, Etienne Pierre-Doray, Greg Thompson, Evan Stade, Steve Becker, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, chromium...@chromium.org, grt+...@chromium.org, dmurph+watching...@chromium.org, dmurph+wa...@chromium.org, edgesto...@microsoft.com, enne...@chromium.org, spang...@chromium.org, storage...@chromium.org, tracing...@chromium.org, wfh+...@chromium.org
          Attention needed from Etienne Pierre-Doray, Greg Thompson, Steve Becker and Xiaohan Zhao

          Abhishek Shanthkumar voted and added 3 comments

          Votes added by Abhishek Shanthkumar

          Code-Review+1

          3 comments

          File content/browser/indexed_db/instance/sqlite/backing_store_impl.cc
          Line 259, Patchset 7: // Create the bucket-level dump as an organizational container. Each
          Abhishek Shanthkumar . resolved
          nit: "bucket-level" is less appropriate IMO since this class is downstream of the whole bucket concept. Can just be:
          ```suggestion
            // Create the dump as an organizational container.
          ```
          Xiaohan Zhao

          Fix applied.

          Abhishek Shanthkumar

          Looks like this got missed.

          Line 263, Patchset 7: for (const auto& [name, connection] : open_connections_) {
          connection->ReportMemoryUsage(
          pmd, base::StringPrintf("%s/sqlite_db_0x%" PRIXPTR, dump_name.c_str(),
          reinterpret_cast<uintptr_t>(connection.get())));
          Xiaohan Zhao . resolved

          @abhishek.s...@microsoft.com Adding ownership edges here actually hits CHECK, because `ProcessMemoryDump::AddOwnershipEdge()` only permits one outgoing ownership edge per source GUID, and multiple open SQLite connections trigger a CHECK. To avoid double-counting, I removed the aggregate scalar from the bucket-level `database_engine_0x` dump; it is now only an organizational container, while the per-connection `sqlite_db_0x` dumps carry the actual sizes. WDYT? Please let me know if that works.

          Abhishek Shanthkumar

          Interesting that in the screenshots, the total for the organizational container is automatically being shown by the tracing UI itself without us having to add the size explicitly. Am I reading that right? If so, then this is definitely correct and a better approach than manually aggregating the sizes like we were doing in PS6.

          >actually hits CHECK, because ProcessMemoryDump::AddOwnershipEdge() only permits one outgoing ownership edge per source GUID

          But which CHECK is this? The comments above `AddOwnershipEdge()` and the code itself seems to indicate that a target node can have multiple sources (in which case the cost will be split across them). And there does not seem to be any restriction on one source owning multiple targets (which is the case with suballocations too).

          Also, the [doc to adding traces](https://source.chromium.org/chromium/chromium/src/+/main:docs/memory-infra/adding_memory_infra_tracing.md) talks about using `CreateSharedGlobalAllocatorDump()` when creating a source dump. Is that something we should explore/use?

          Xiaohan Zhao

          Yes, you're reading the screenshots correctly. The UI rolls up the children under the `database_engine_0x...` container., so we don't need to add an explicit aggregate size.

          The CHECK I hit is in `ProcessMemroyDump::AddOwnershipEdge()`: https://source.chromium.org/chromium/chromium/src/+/main:base/trace_event/process_memory_dump.cc?q=process_memory_dump&ss=chromium%2Fchromium%2Fsrc#:~:text=if%20(it%20!%3D%20allocator_dumps_edges_,%7D. Although multiple sources can own the same target, edges are stored by source GUID, and adding the same source with a different target hits `DCHECK_EQ(target.ToUint64(), it->second.target.ToUint64())`. The SQLite parent-to-many-children shape would use one `database_engine_0x...` source with multiple `sqlite_db_0x...` targets, which violates that invariant.

          I don’t think `CreateSharedGlobalAllocatorDump()` is needed here because the SQLite DB dumps are not modeling a separately shared global allocation; `sql::Database::ReportMemoryUsage()` already creates the concrete per-DB dump and suballocates it to the SQLite memory tracker. The parent `database_engine_0x...` is only an organizational container.

          Xiaohan Zhao

          Done

          Abhishek Shanthkumar

          one ... source with multiple ... targets ... violates that invariant.

          Hmm, this is certainly weird. I would expect that one source can own multiple targets. Perhaps the recommendation is to use suballocations in that case.

          Anyway, thanks for checking!

          File content/browser/indexed_db/instance/sqlite/database_connection.cc
          Line 1422, Patchset 9 (Latest): if (!db_ || !db_->ReportMemoryUsage(pmd, dump_name)) {
          return;
          }
          Abhishek Shanthkumar . unresolved
          The null-check isn't necessary because `DatabaseConnection` does not outlive its `db_` member.
          ```suggestion
          db_->ReportMemoryUsage(pmd, dump_name);
          ```
          Open in Gerrit

          Related details

          Attention is currently required from:
          • Etienne Pierre-Doray
          • Greg Thompson
          • Steve Becker
          • Xiaohan Zhao
          Submit Requirements:
            • requirement satisfiedCode-Coverage
            • requirement is not satisfiedCode-Owners
            • requirement is not satisfiedCode-Review
            • requirement is not satisfiedNo-Unresolved-Comments
            • requirement is not satisfiedReview-Enforcement
            Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
            Gerrit-MessageType: comment
            Gerrit-Project: chromium/src
            Gerrit-Branch: main
            Gerrit-Change-Id: Iaf253a9bb32ad3a4a07868d5e92878a33c3e32c6
            Gerrit-Change-Number: 7807951
            Gerrit-PatchSet: 9
            Gerrit-Owner: Xiaohan Zhao <xiaoh...@microsoft.com>
            Gerrit-Reviewer: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
            Gerrit-Reviewer: Etienne Pierre-Doray <etie...@chromium.org>
            Gerrit-Reviewer: Greg Thompson <g...@chromium.org>
            Gerrit-Reviewer: Steve Becker <ste...@microsoft.com>
            Gerrit-Reviewer: Xiaohan Zhao <xiaoh...@microsoft.com>
            Gerrit-CC: Evan Stade <evan...@microsoft.com>
            Gerrit-Attention: Xiaohan Zhao <xiaoh...@microsoft.com>
            Gerrit-Attention: Steve Becker <ste...@microsoft.com>
            Gerrit-Attention: Etienne Pierre-Doray <etie...@chromium.org>
            Gerrit-Attention: Greg Thompson <g...@chromium.org>
            Gerrit-Comment-Date: Tue, 09 Jun 2026 06:44:39 +0000
            Gerrit-HasComments: Yes
            Gerrit-Has-Labels: Yes
            satisfied_requirement
            unsatisfied_requirement
            open
            diffy

            Greg Thompson (Gerrit)

            unread,
            Jun 9, 2026, 2:57:11 AM (2 days ago) Jun 9
            to Xiaohan Zhao, Abhishek Shanthkumar, Etienne Pierre-Doray, Evan Stade, Steve Becker, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, chromium...@chromium.org, grt+...@chromium.org, dmurph+watching...@chromium.org, dmurph+wa...@chromium.org, edgesto...@microsoft.com, enne...@chromium.org, spang...@chromium.org, storage...@chromium.org, tracing...@chromium.org, wfh+...@chromium.org
            Attention needed from Etienne Pierre-Doray, Steve Becker and Xiaohan Zhao

            Greg Thompson voted and added 1 comment

            Votes added by Greg Thompson

            Code-Review+1

            1 comment

            Patchset-level comments
            File-level comment, Patchset 9 (Latest):
            Greg Thompson . resolved

            //sql lgtm. please wait for etiennep to review //base. thanks.

            Open in Gerrit

            Related details

            Attention is currently required from:
            • Etienne Pierre-Doray
            • Steve Becker
            • Xiaohan Zhao
            Submit Requirements:
            • requirement satisfiedCode-Coverage
            • requirement satisfiedCode-Owners
            • requirement satisfiedCode-Review
            • requirement is not satisfiedNo-Unresolved-Comments
            • requirement satisfiedReview-Enforcement
            Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
            Gerrit-MessageType: comment
            Gerrit-Project: chromium/src
            Gerrit-Branch: main
            Gerrit-Change-Id: Iaf253a9bb32ad3a4a07868d5e92878a33c3e32c6
            Gerrit-Change-Number: 7807951
            Gerrit-PatchSet: 9
            Gerrit-Owner: Xiaohan Zhao <xiaoh...@microsoft.com>
            Gerrit-Reviewer: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
            Gerrit-Reviewer: Etienne Pierre-Doray <etie...@chromium.org>
            Gerrit-Reviewer: Greg Thompson <g...@chromium.org>
            Gerrit-Reviewer: Steve Becker <ste...@microsoft.com>
            Gerrit-Reviewer: Xiaohan Zhao <xiaoh...@microsoft.com>
            Gerrit-CC: Evan Stade <evan...@microsoft.com>
            Gerrit-Attention: Xiaohan Zhao <xiaoh...@microsoft.com>
            Gerrit-Attention: Steve Becker <ste...@microsoft.com>
            Gerrit-Attention: Etienne Pierre-Doray <etie...@chromium.org>
            Gerrit-Comment-Date: Tue, 09 Jun 2026 06:56:50 +0000
            Gerrit-HasComments: Yes
            Gerrit-Has-Labels: Yes
            satisfied_requirement
            unsatisfied_requirement
            open
            diffy

            Etienne Pierre-Doray (Gerrit)

            unread,
            Jun 9, 2026, 9:19:49 AM (2 days ago) Jun 9
            to Xiaohan Zhao, Greg Thompson, Abhishek Shanthkumar, Evan Stade, Steve Becker, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, chromium...@chromium.org, grt+...@chromium.org, dmurph+watching...@chromium.org, dmurph+wa...@chromium.org, edgesto...@microsoft.com, enne...@chromium.org, spang...@chromium.org, storage...@chromium.org, tracing...@chromium.org, wfh+...@chromium.org
            Attention needed from Steve Becker and Xiaohan Zhao

            Etienne Pierre-Doray voted and added 1 comment

            Votes added by Etienne Pierre-Doray

            Code-Review+1

            1 comment

            Patchset-level comments
            Etienne Pierre-Doray . resolved

            base/trace_event LGTM

            Open in Gerrit

            Related details

            Attention is currently required from:
            • Steve Becker
            • Xiaohan Zhao
            Gerrit-Comment-Date: Tue, 09 Jun 2026 13:19:38 +0000
            Gerrit-HasComments: Yes
            Gerrit-Has-Labels: Yes
            satisfied_requirement
            unsatisfied_requirement
            open
            diffy

            Xiaohan Zhao (Gerrit)

            unread,
            Jun 9, 2026, 1:50:28 PM (2 days ago) Jun 9
            to Etienne Pierre-Doray, Greg Thompson, Abhishek Shanthkumar, Evan Stade, Steve Becker, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, chromium...@chromium.org, grt+...@chromium.org, dmurph+watching...@chromium.org, dmurph+wa...@chromium.org, edgesto...@microsoft.com, enne...@chromium.org, spang...@chromium.org, storage...@chromium.org, tracing...@chromium.org, wfh+...@chromium.org
            Attention needed from Steve Becker

            Xiaohan Zhao added 1 comment

            File content/browser/indexed_db/instance/sqlite/database_connection.cc
            Line 1422, Patchset 9 (Latest): if (!db_ || !db_->ReportMemoryUsage(pmd, dump_name)) {
            return;
            }
            Abhishek Shanthkumar . resolved
            The null-check isn't necessary because `DatabaseConnection` does not outlive its `db_` member.
            ```suggestion
            db_->ReportMemoryUsage(pmd, dump_name);
            ```
            Xiaohan Zhao

            Thanks for the review! Since I'm not a Chromium committer yet, uploading a new patch set would reset the existing approvals, I'm going to land the current CL first since this seems non-blocking, and I'll address this in a small follow-up CL and add you as a reviewer very soon. Thanks again!

            Open in Gerrit

            Related details

            Attention is currently required from:
            • Steve Becker
            Submit Requirements:
              • requirement satisfiedCode-Coverage
              • requirement satisfiedCode-Owners
              • requirement satisfiedCode-Review
              • requirement satisfiedReview-Enforcement
              Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
              Gerrit-MessageType: comment
              Gerrit-Project: chromium/src
              Gerrit-Branch: main
              Gerrit-Change-Id: Iaf253a9bb32ad3a4a07868d5e92878a33c3e32c6
              Gerrit-Change-Number: 7807951
              Gerrit-PatchSet: 9
              Gerrit-Owner: Xiaohan Zhao <xiaoh...@microsoft.com>
              Gerrit-Reviewer: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
              Gerrit-Reviewer: Etienne Pierre-Doray <etie...@chromium.org>
              Gerrit-Reviewer: Greg Thompson <g...@chromium.org>
              Gerrit-Reviewer: Steve Becker <ste...@microsoft.com>
              Gerrit-Reviewer: Xiaohan Zhao <xiaoh...@microsoft.com>
              Gerrit-CC: Evan Stade <evan...@microsoft.com>
              Gerrit-Attention: Steve Becker <ste...@microsoft.com>
              Gerrit-Comment-Date: Tue, 09 Jun 2026 17:50:10 +0000
              Gerrit-HasComments: Yes
              Gerrit-Has-Labels: No
              Comment-In-Reply-To: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
              satisfied_requirement
              open
              diffy

              Xiaohan Zhao (Gerrit)

              unread,
              Jun 9, 2026, 1:50:53 PM (2 days ago) Jun 9
              to Etienne Pierre-Doray, Greg Thompson, Abhishek Shanthkumar, Evan Stade, Steve Becker, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, chromium...@chromium.org, grt+...@chromium.org, dmurph+watching...@chromium.org, dmurph+wa...@chromium.org, edgesto...@microsoft.com, enne...@chromium.org, spang...@chromium.org, storage...@chromium.org, tracing...@chromium.org, wfh+...@chromium.org
              Attention needed from Steve Becker

              Xiaohan Zhao voted Commit-Queue+2

              Commit-Queue+2
              Gerrit-Comment-Date: Tue, 09 Jun 2026 17:50:23 +0000
              Gerrit-HasComments: No
              Gerrit-Has-Labels: Yes
              satisfied_requirement
              open
              diffy

              Xiaohan Zhao (Gerrit)

              unread,
              Jun 9, 2026, 3:44:12 PM (2 days ago) Jun 9
              to Etienne Pierre-Doray, Greg Thompson, Abhishek Shanthkumar, Evan Stade, Steve Becker, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, chromium...@chromium.org, grt+...@chromium.org, dmurph+watching...@chromium.org, dmurph+wa...@chromium.org, edgesto...@microsoft.com, enne...@chromium.org, spang...@chromium.org, storage...@chromium.org, tracing...@chromium.org, wfh+...@chromium.org
              Gerrit-Comment-Date: Tue, 09 Jun 2026 19:44:03 +0000
              Gerrit-HasComments: No
              Gerrit-Has-Labels: Yes
              satisfied_requirement
              open
              diffy

              Chromium LUCI CQ (Gerrit)

              unread,
              Jun 9, 2026, 4:57:36 PM (2 days ago) Jun 9
              to Xiaohan Zhao, Etienne Pierre-Doray, Greg Thompson, Abhishek Shanthkumar, Evan Stade, Steve Becker, android-bu...@system.gserviceaccount.com, chromium...@chromium.org, grt+...@chromium.org, dmurph+watching...@chromium.org, dmurph+wa...@chromium.org, edgesto...@microsoft.com, enne...@chromium.org, spang...@chromium.org, storage...@chromium.org, tracing...@chromium.org, wfh+...@chromium.org

              Chromium LUCI CQ submitted the change

              Change information

              Commit message:
              IndexedDB: Add memory dump reporting for SQLite backing store

              Add `site_storage/indexed_db/` memory dumps for SQLite-backed IndexedDB
              buckets:


              - `sqlite_0x<bucket>`: total SQLite memory across all open connections
              for the bucket. Includes a file_name attribute (non-background) for
              origin attribution.
              - `sqlite_0x<bucket>/connection_0x<conn>`: per-connection
              child dump, suballocated to the existing
              `sqlite/IndexedDB_connection/0x?` dump for cross-tree attribution.

              Both paths are added to the background allowlist.

              `sql::Database::ReportMemoryUsage()` is restored to power the
              per-connection reporting via `DatabaseMemoryDumpProvider`. A
              `ReportMemoryUsage()` virtual method is added to the `BackingStore`
              interface.
              Bug: 512908976
              Change-Id: Iaf253a9bb32ad3a4a07868d5e92878a33c3e32c6
              Reviewed-by: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
              Reviewed-by: Greg Thompson <g...@chromium.org>
              Commit-Queue: Xiaohan Zhao <xiaoh...@microsoft.com>
              Reviewed-by: Etienne Pierre-Doray <etie...@chromium.org>
              Cr-Commit-Position: refs/heads/main@{#1644234}
              Files:
              • M base/trace_event/memory_infra_background_allowlist.cc
              • M components/services/storage/indexed_db/transactional_leveldb/transactional_leveldb_database.cc
              • M content/browser/indexed_db/instance/backing_store.h
              • M content/browser/indexed_db/instance/bucket_context.cc
              • M content/browser/indexed_db/instance/leveldb/backing_store.cc
              • M content/browser/indexed_db/instance/leveldb/backing_store.h
              • M content/browser/indexed_db/instance/sqlite/backing_store_impl.cc
              • M content/browser/indexed_db/instance/sqlite/backing_store_impl.h
              • M content/browser/indexed_db/instance/sqlite/database_connection.cc
              • M content/browser/indexed_db/instance/sqlite/database_connection.h
              • M sql/database.cc
              • M sql/database.h
              Change size: M
              Delta: 12 files changed, 94 insertions(+), 14 deletions(-)
              Branch: refs/heads/main
              Submit Requirements:
              • requirement satisfiedCode-Review: +1 by Greg Thompson, +1 by Etienne Pierre-Doray, +1 by Abhishek Shanthkumar
              Open in Gerrit
              Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
              Gerrit-MessageType: merged
              Gerrit-Project: chromium/src
              Gerrit-Branch: main
              Gerrit-Change-Id: Iaf253a9bb32ad3a4a07868d5e92878a33c3e32c6
              Gerrit-Change-Number: 7807951
              Gerrit-PatchSet: 10
              Gerrit-Owner: Xiaohan Zhao <xiaoh...@microsoft.com>
              Gerrit-Reviewer: Abhishek Shanthkumar <abhishek.s...@microsoft.com>
              Gerrit-Reviewer: Chromium LUCI CQ <chromiu...@luci-project-accounts.iam.gserviceaccount.com>
              Gerrit-Reviewer: Etienne Pierre-Doray <etie...@chromium.org>
              Gerrit-Reviewer: Greg Thompson <g...@chromium.org>
              Gerrit-Reviewer: Steve Becker <ste...@microsoft.com>
              Gerrit-Reviewer: Xiaohan Zhao <xiaoh...@microsoft.com>
              open
              diffy
              satisfied_requirement
              Reply all
              Reply to author
              Forward
              0 new messages