Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ads] Optimize database queries serialization/deserialization overhead #26866

Merged
merged 3 commits into from
Dec 10, 2024

Conversation

aseren
Copy link
Collaborator

@aseren aseren commented Dec 4, 2024

Resolves brave/brave-browser#42598
Resolves brave/brave-browser#41632

Submitter Checklist:

  • I confirm that no security/privacy review is needed and no other type of reviews are needed, or that I have requested them
  • There is a ticket for my issue
  • Used Github auto-closing keywords in the PR description above
  • Wrote a good PR/commit description
  • Squashed any review feedback or "fixup" commits before merge, so that history is a record of what happened in the repo, not your PR
  • Added appropriate labels (QA/Yes or QA/No; release-notes/include or release-notes/exclude; OS/...) to the associated issue
  • Checked the PR locally:
    • npm run test -- brave_browser_tests, npm run test -- brave_unit_tests wiki
    • npm run presubmit wiki, npm run gn_check, npm run tslint
  • Ran git rebase master (if needed)

Reviewer Checklist:

  • A security review is not needed, or a link to one is included in the PR description
  • New files have MPL-2.0 license header
  • Adequate test coverage exists to prevent regressions
  • Major classes, functions and non-trivial code blocks are well-commented
  • Changes in component dependencies are properly reflected in gn
  • Code follows the style guide
  • Test plan is specified in PR before merging

After-merge Checklist:

Test Plan:

Make sure that Brave Ads core functionality works as expected:

  • Join Brave Rewards
  • Make sure that search Ads, NTT, Brave News, Notification ads can be served, viewed and clicked
  • Make sure that served, viewed and clicked confirmations are sent to the server

@aseren aseren requested review from a team as code owners December 4, 2024 17:42
@tmancey
Copy link
Collaborator

tmancey commented Dec 4, 2024

Discussed using run loops rather than test and background handlers. Thanks

Copy link
Collaborator

@tmancey tmancey left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM++ (please see comments)

Copy link
Contributor

[puLL-Merge] - brave/brave-core@26866

Description

This PR makes significant changes to the Brave Ads core implementation, primarily focusing on database management and initialization. The main changes include:

  1. Moving the Database class from public to internal.
  2. Introducing a DatabaseManager class to handle database operations.
  3. Modifying the Ads and GlobalState classes to use the new DatabaseManager.
  4. Removing the RunDBTransaction method from the AdsClient interface and implementing it within the DatabaseManager.
  5. Updating various test files to use the new database management approach.

The motivation for these changes appears to be improving the encapsulation of database operations and simplifying the public API of the Brave Ads core.

Changes

Changes

  1. components/brave_ads/core/internal/database/database.h:

    • Moved from public to internal directory.
  2. components/brave_ads/core/internal/database/database_manager.cc and database_manager.h:

    • New files implementing the DatabaseManager class.
  3. components/brave_ads/core/internal/global_state/global_state.cc and global_state.h:

    • Updated to use DatabaseManager.
  4. components/brave_ads/core/internal/ads_impl.cc and ads_impl.h:

    • Modified to use the new database management approach.
  5. components/brave_ads/core/public/ads_client/ads_client.h:

    • Removed RunDBTransaction method.
  6. Various test files:

    • Updated to use base::RunLoop for better synchronization in tests.
    • Modified to work with the new database management approach.
  7. components/brave_ads/browser/ads_service_impl.cc and ads_service_impl.h:

    • Updated to use the new DatabaseManager.
  8. ios/browser/brave_ads/ads_service_impl_ios.mm and ads_service_impl_ios.h:

    • Similar changes as in the browser version.
sequenceDiagram
    participant Ads
    participant GlobalState
    participant DatabaseManager
    participant Database

    Ads->>GlobalState: Create
    GlobalState->>DatabaseManager: Create(database_path)
    DatabaseManager->>Database: Create
    Ads->>GlobalState: GetDatabaseManager()
    GlobalState->>DatabaseManager: RunDBTransaction()
    DatabaseManager->>Database: RunDBTransaction()
    Database-->>DatabaseManager: Result
    DatabaseManager-->>GlobalState: Result
    GlobalState-->>Ads: Result
Loading

Possible Issues

  1. The removal of RunDBTransaction from the AdsClient interface might require updates in any external code that relied on this method.
  2. The changes in test files, particularly the use of base::RunLoop, might affect the timing and execution of tests.

Security Hotspots

No significant security issues are apparent in this change. The modifications to database management might indirectly improve security by better encapsulating database operations.

@aseren aseren enabled auto-merge December 10, 2024 18:34
@aseren aseren merged commit 55e552b into master Dec 10, 2024
20 checks passed
@aseren aseren deleted the issues/42598 branch December 10, 2024 20:23
@github-actions github-actions bot added this to the 1.75.x - Nightly milestone Dec 10, 2024
@brave-builds
Copy link
Collaborator

Released in v1.75.91

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
4 participants