Reland "Add timing histograms and trace events to sql database ops"
This reverts commitda20bfc1dd
. Reason for revert: Fixed races in Compose tests, and changed other instances of ScopedMockElapsedTimersForTest being initialized late to instead be bound to the test class' scope. Original change's description: > Revert "Add timing histograms and trace events to sql database ops" > > This reverts commit0fae0abfd2
. > > Reason for revert: Race access to base::ScopedMockElapsedTimersForTest > https://ci.chromium.org/ui/p/chromium/builders/ci/Linux%20TSan%20Tests/92754/overview > > Original change's description: > > Add timing histograms and trace events to sql database ops > > > > This CL adds a few histograms: > > - Sql.Statement.StepTime.{DatabaseTag}: time spent in each > > single `Step()` call > > - Sql.Statement.ExecutionTime.{DatabaseTag}: total time > > spent in `Step()` within the lifetime of each statement > > - Sql.Database.Success.OpenInternalTime.{DatabaseTag}: time > > spent in `Database::OpenInternal()` > > - Sql.Database.Success.SqliteOpenTime.{DatabaseTag}: time taken > > by the `sqlite3_open_v2()` call within `Database` > > > > It also adds a few trace events: > > - "Database::OpenInternal sqlite3_open_v2" directly around > > the `sqlite3_open_v2()` call > > - "Database::Statement", spanning the time spent stepping for > > each statement. These are emitted in new tracks named > > "Database: {Tag}" parented on the track of the thread calling > > `Step()`. These events also contain the associated prepared > > statements (without bound parameters). > > > > Bug:40949392
> > Change-Id: I2de4a0359e68961f58d5e7f0434b5c56292626d1 > > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6019886 > > Reviewed-by: Greg Thompson <grt@chromium.org> > > Commit-Queue: Anthony Vallée-Dubois <anthonyvd@chromium.org> > > Reviewed-by: Etienne Bergeron <etienneb@chromium.org> > > Reviewed-by: Ayu Ishii <ayui@chromium.org> > > Cr-Commit-Position: refs/heads/main@{#1385191} > > Bug:40949392
> Change-Id: Ie5af7e4ef64d26e868d40cda803ed376b4c84763 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6034678 > Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> > Owners-Override: Mikihito Matsuura <mikt@google.com> > Auto-Submit: Mikihito Matsuura <mikt@google.com> > Commit-Queue: Mikihito Matsuura <mikt@google.com> > Cr-Commit-Position: refs/heads/main@{#1385457} Bug:40949392
Change-Id: Id8218c6fc7c6d2a9aed187e94df26e6749003933 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6039012 Commit-Queue: Anthony Vallée-Dubois <anthonyvd@chromium.org> Reviewed-by: Greg Thompson <grt@chromium.org> Reviewed-by: Kouhei Ueno <kouhei@chromium.org> Reviewed-by: Ayu Ishii <ayui@chromium.org> Cr-Commit-Position: refs/heads/main@{#1386862}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
ea4d1a4a52
commit
4b297791be
chrome/browser
compose
navigation_predictor
predictors
preloading
ui
views
bookmarks
content/browser/preloading
prefetch
prerender
sql
tools/metrics/histograms/metadata/storage
@@ -244,8 +244,6 @@ class ChromeComposeClientTest : public BrowserWithTestWindowTest {
|
|||||||
metadata->SetAnyMetadataForTesting(compose_hint_metadata);
|
metadata->SetAnyMetadataForTesting(compose_hint_metadata);
|
||||||
return optimization_guide::OptimizationGuideDecision::kTrue;
|
return optimization_guide::OptimizationGuideDecision::kTrue;
|
||||||
});
|
});
|
||||||
|
|
||||||
test_timer_ = std::make_unique<base::ScopedMockElapsedTimersForTest>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TearDown() override {
|
void TearDown() override {
|
||||||
@@ -467,6 +465,7 @@ class ChromeComposeClientTest : public BrowserWithTestWindowTest {
|
|||||||
MockHatsService* mock_hats_service() { return mock_hats_service_; }
|
MockHatsService* mock_hats_service() { return mock_hats_service_; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
base::ScopedMockElapsedTimersForTest test_timer_;
|
||||||
raw_ptr<ChromeComposeClient> client_;
|
raw_ptr<ChromeComposeClient> client_;
|
||||||
testing::NiceMock<optimization_guide::MockOptimizationGuideModelExecutor>
|
testing::NiceMock<optimization_guide::MockOptimizationGuideModelExecutor>
|
||||||
model_executor_;
|
model_executor_;
|
||||||
@@ -490,7 +489,6 @@ class ChromeComposeClientTest : public BrowserWithTestWindowTest {
|
|||||||
client_page_handler_;
|
client_page_handler_;
|
||||||
mojo::Remote<compose::mojom::ComposeSessionUntrustedPageHandler>
|
mojo::Remote<compose::mojom::ComposeSessionUntrustedPageHandler>
|
||||||
page_handler_;
|
page_handler_;
|
||||||
std::unique_ptr<base::ScopedMockElapsedTimersForTest> test_timer_;
|
|
||||||
ComposeEnabling::ScopedOverride scoped_compose_enabled_;
|
ComposeEnabling::ScopedOverride scoped_compose_enabled_;
|
||||||
raw_ptr<MockHatsService> mock_hats_service_;
|
raw_ptr<MockHatsService> mock_hats_service_;
|
||||||
};
|
};
|
||||||
|
@@ -77,7 +77,6 @@ class AnchorElementPreloaderBrowserTest
|
|||||||
ukm_entry_builder_ =
|
ukm_entry_builder_ =
|
||||||
std::make_unique<content::test::PreloadingAttemptUkmEntryBuilder>(
|
std::make_unique<content::test::PreloadingAttemptUkmEntryBuilder>(
|
||||||
chrome_preloading_predictor::kPointerDownOnAnchor);
|
chrome_preloading_predictor::kPointerDownOnAnchor);
|
||||||
test_timer_ = std::make_unique<base::ScopedMockElapsedTimersForTest>();
|
|
||||||
ASSERT_TRUE(loading_predictor);
|
ASSERT_TRUE(loading_predictor);
|
||||||
loading_predictor->preconnect_manager()->SetObserverForTesting(this);
|
loading_predictor->preconnect_manager()->SetObserverForTesting(this);
|
||||||
}
|
}
|
||||||
@@ -153,13 +152,13 @@ class AnchorElementPreloaderBrowserTest
|
|||||||
content::test::PreloadingConfigOverride preloading_config_override_;
|
content::test::PreloadingConfigOverride preloading_config_override_;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
base::ScopedMockElapsedTimersForTest test_timer_;
|
||||||
std::unique_ptr<net::EmbeddedTestServer> https_server_;
|
std::unique_ptr<net::EmbeddedTestServer> https_server_;
|
||||||
std::unique_ptr<base::RunLoop> run_loop_;
|
std::unique_ptr<base::RunLoop> run_loop_;
|
||||||
std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_;
|
std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_;
|
||||||
std::unique_ptr<base::HistogramTester> histogram_tester_;
|
std::unique_ptr<base::HistogramTester> histogram_tester_;
|
||||||
std::unique_ptr<content::test::PreloadingAttemptUkmEntryBuilder>
|
std::unique_ptr<content::test::PreloadingAttemptUkmEntryBuilder>
|
||||||
ukm_entry_builder_;
|
ukm_entry_builder_;
|
||||||
std::unique_ptr<base::ScopedMockElapsedTimersForTest> test_timer_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(AnchorElementPreloaderBrowserTest, OneAnchor) {
|
IN_PROC_BROWSER_TEST_F(AnchorElementPreloaderBrowserTest, OneAnchor) {
|
||||||
|
@@ -134,7 +134,6 @@ class AutocompleteActionPredictorTest : public testing::Test {
|
|||||||
std::make_unique<content::test::PreloadingPredictionUkmEntryBuilder>(
|
std::make_unique<content::test::PreloadingPredictionUkmEntryBuilder>(
|
||||||
chrome_preloading_predictor::kOmniboxDirectURLInput);
|
chrome_preloading_predictor::kOmniboxDirectURLInput);
|
||||||
test_ukm_recorder_ = std::make_unique<ukm::TestAutoSetUkmRecorder>();
|
test_ukm_recorder_ = std::make_unique<ukm::TestAutoSetUkmRecorder>();
|
||||||
test_timer_ = std::make_unique<base::ScopedMockElapsedTimersForTest>();
|
|
||||||
|
|
||||||
predictor_ = std::make_unique<AutocompleteActionPredictor>(profile_.get());
|
predictor_ = std::make_unique<AutocompleteActionPredictor>(profile_.get());
|
||||||
profile_->BlockUntilHistoryProcessesPendingRequests();
|
profile_->BlockUntilHistoryProcessesPendingRequests();
|
||||||
@@ -335,7 +334,7 @@ class AutocompleteActionPredictorTest : public testing::Test {
|
|||||||
std::unique_ptr<WebContents> web_contents_;
|
std::unique_ptr<WebContents> web_contents_;
|
||||||
content::RenderViewHostTestEnabler rvh_test_enabler_;
|
content::RenderViewHostTestEnabler rvh_test_enabler_;
|
||||||
std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_;
|
std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_;
|
||||||
std::unique_ptr<base::ScopedMockElapsedTimersForTest> test_timer_;
|
base::ScopedMockElapsedTimersForTest test_timer_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -330,7 +330,6 @@ class NoStatePrefetchBrowserTest
|
|||||||
link_rel_attempt_entry_builder_ =
|
link_rel_attempt_entry_builder_ =
|
||||||
std::make_unique<content::test::PreloadingAttemptUkmEntryBuilder>(
|
std::make_unique<content::test::PreloadingAttemptUkmEntryBuilder>(
|
||||||
content::preloading_predictor::kLinkRel);
|
content::preloading_predictor::kLinkRel);
|
||||||
test_timer_ = std::make_unique<base::ScopedMockElapsedTimersForTest>();
|
|
||||||
host_resolver()->AddRule("*", "127.0.0.1");
|
host_resolver()->AddRule("*", "127.0.0.1");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -483,12 +482,12 @@ class NoStatePrefetchBrowserTest
|
|||||||
base::SimpleTestTickClock clock_;
|
base::SimpleTestTickClock clock_;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
base::ScopedMockElapsedTimersForTest test_timer_;
|
||||||
// Disable sampling of UKM preloading logs.
|
// Disable sampling of UKM preloading logs.
|
||||||
content::test::PreloadingConfigOverride preloading_config_override_;
|
content::test::PreloadingConfigOverride preloading_config_override_;
|
||||||
std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_;
|
std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_;
|
||||||
std::unique_ptr<content::test::PreloadingAttemptUkmEntryBuilder>
|
std::unique_ptr<content::test::PreloadingAttemptUkmEntryBuilder>
|
||||||
link_rel_attempt_entry_builder_;
|
link_rel_attempt_entry_builder_;
|
||||||
std::unique_ptr<base::ScopedMockElapsedTimersForTest> test_timer_;
|
|
||||||
base::test::ScopedFeatureList feature_list_;
|
base::test::ScopedFeatureList feature_list_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -53,7 +53,6 @@ class PrefetchBrowserTest : public PlatformBrowserTest {
|
|||||||
attempt_entry_builder_ =
|
attempt_entry_builder_ =
|
||||||
std::make_unique<content::test::PreloadingAttemptUkmEntryBuilder>(
|
std::make_unique<content::test::PreloadingAttemptUkmEntryBuilder>(
|
||||||
PredictorToExpectInUkm());
|
PredictorToExpectInUkm());
|
||||||
test_timer_ = std::make_unique<base::ScopedMockElapsedTimersForTest>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TearDownOnMainThread() override {
|
void TearDownOnMainThread() override {
|
||||||
@@ -89,6 +88,7 @@ class PrefetchBrowserTest : public PlatformBrowserTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
base::ScopedMockElapsedTimersForTest test_timer_;
|
||||||
net::test_server::EmbeddedTestServer ssl_server_{
|
net::test_server::EmbeddedTestServer ssl_server_{
|
||||||
net::test_server::EmbeddedTestServer::TYPE_HTTPS};
|
net::test_server::EmbeddedTestServer::TYPE_HTTPS};
|
||||||
base::test::ScopedFeatureList feature_list_;
|
base::test::ScopedFeatureList feature_list_;
|
||||||
@@ -96,7 +96,6 @@ class PrefetchBrowserTest : public PlatformBrowserTest {
|
|||||||
std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_;
|
std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_;
|
||||||
std::unique_ptr<content::test::PreloadingAttemptUkmEntryBuilder>
|
std::unique_ptr<content::test::PreloadingAttemptUkmEntryBuilder>
|
||||||
attempt_entry_builder_;
|
attempt_entry_builder_;
|
||||||
std::unique_ptr<base::ScopedMockElapsedTimersForTest> test_timer_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#if BUILDFLAG(IS_ANDROID)
|
#if BUILDFLAG(IS_ANDROID)
|
||||||
|
@@ -360,8 +360,6 @@ class SearchPrefetchHoldbackBrowserTest : public SearchPrefetchBaseBrowserTest {
|
|||||||
attempt_entry_builder_ =
|
attempt_entry_builder_ =
|
||||||
std::make_unique<content::test::PreloadingAttemptUkmEntryBuilder>(
|
std::make_unique<content::test::PreloadingAttemptUkmEntryBuilder>(
|
||||||
chrome_preloading_predictor::kDefaultSearchEngine);
|
chrome_preloading_predictor::kDefaultSearchEngine);
|
||||||
scoped_test_timer_ =
|
|
||||||
std::make_unique<base::ScopedMockElapsedTimersForTest>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ukm::TestAutoSetUkmRecorder* test_ukm_recorder() {
|
ukm::TestAutoSetUkmRecorder* test_ukm_recorder() {
|
||||||
@@ -374,11 +372,11 @@ class SearchPrefetchHoldbackBrowserTest : public SearchPrefetchBaseBrowserTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
base::ScopedMockElapsedTimersForTest scoped_test_timer_;
|
||||||
base::test::ScopedFeatureList feature_list_;
|
base::test::ScopedFeatureList feature_list_;
|
||||||
std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_;
|
std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_;
|
||||||
std::unique_ptr<content::test::PreloadingAttemptUkmEntryBuilder>
|
std::unique_ptr<content::test::PreloadingAttemptUkmEntryBuilder>
|
||||||
attempt_entry_builder_;
|
attempt_entry_builder_;
|
||||||
std::unique_ptr<base::ScopedMockElapsedTimersForTest> scoped_test_timer_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(SearchPrefetchHoldbackBrowserTest,
|
IN_PROC_BROWSER_TEST_F(SearchPrefetchHoldbackBrowserTest,
|
||||||
@@ -452,8 +450,6 @@ class SearchPrefetchServiceEnabledBrowserTest
|
|||||||
attempt_entry_builder_ =
|
attempt_entry_builder_ =
|
||||||
std::make_unique<content::test::PreloadingAttemptUkmEntryBuilder>(
|
std::make_unique<content::test::PreloadingAttemptUkmEntryBuilder>(
|
||||||
chrome_preloading_predictor::kDefaultSearchEngine);
|
chrome_preloading_predictor::kDefaultSearchEngine);
|
||||||
scoped_test_timer_ =
|
|
||||||
std::make_unique<base::ScopedMockElapsedTimersForTest>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddCacheEntry(const GURL& search_url, const GURL& prefetch_url) {
|
void AddCacheEntry(const GURL& search_url, const GURL& prefetch_url) {
|
||||||
@@ -484,11 +480,11 @@ class SearchPrefetchServiceEnabledBrowserTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
base::ScopedMockElapsedTimersForTest scoped_test_timer_;
|
||||||
base::test::ScopedFeatureList feature_list_;
|
base::test::ScopedFeatureList feature_list_;
|
||||||
std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_;
|
std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_;
|
||||||
std::unique_ptr<content::test::PreloadingAttemptUkmEntryBuilder>
|
std::unique_ptr<content::test::PreloadingAttemptUkmEntryBuilder>
|
||||||
attempt_entry_builder_;
|
attempt_entry_builder_;
|
||||||
std::unique_ptr<base::ScopedMockElapsedTimersForTest> scoped_test_timer_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(SearchPrefetchServiceEnabledBrowserTest,
|
IN_PROC_BROWSER_TEST_F(SearchPrefetchServiceEnabledBrowserTest,
|
||||||
@@ -3448,8 +3444,6 @@ class SearchPrefetchServiceNavigationPrefetchBrowserTest
|
|||||||
SearchPrefetchBaseBrowserTest::SetUpOnMainThread();
|
SearchPrefetchBaseBrowserTest::SetUpOnMainThread();
|
||||||
// Initialize PreloadingAttempt for this test suite.
|
// Initialize PreloadingAttempt for this test suite.
|
||||||
test_ukm_recorder_ = std::make_unique<ukm::TestAutoSetUkmRecorder>();
|
test_ukm_recorder_ = std::make_unique<ukm::TestAutoSetUkmRecorder>();
|
||||||
scoped_test_timer_ =
|
|
||||||
std::make_unique<base::ScopedMockElapsedTimersForTest>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<content::test::PreloadingAttemptUkmEntryBuilder>
|
std::unique_ptr<content::test::PreloadingAttemptUkmEntryBuilder>
|
||||||
@@ -3469,9 +3463,9 @@ class SearchPrefetchServiceNavigationPrefetchBrowserTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
base::ScopedMockElapsedTimersForTest scoped_test_timer_;
|
||||||
base::test::ScopedFeatureList feature_list_;
|
base::test::ScopedFeatureList feature_list_;
|
||||||
std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_;
|
std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_;
|
||||||
std::unique_ptr<base::ScopedMockElapsedTimersForTest> scoped_test_timer_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(SearchPrefetchServiceNavigationPrefetchBrowserTest,
|
IN_PROC_BROWSER_TEST_F(SearchPrefetchServiceNavigationPrefetchBrowserTest,
|
||||||
|
@@ -148,8 +148,6 @@ class SearchPreloadUnifiedBrowserTest : public PlatformBrowserTest,
|
|||||||
prediction_entry_builder_ =
|
prediction_entry_builder_ =
|
||||||
std::make_unique<content::test::PreloadingPredictionUkmEntryBuilder>(
|
std::make_unique<content::test::PreloadingPredictionUkmEntryBuilder>(
|
||||||
chrome_preloading_predictor::kDefaultSearchEngine);
|
chrome_preloading_predictor::kDefaultSearchEngine);
|
||||||
scoped_test_timer_ =
|
|
||||||
std::make_unique<base::ScopedMockElapsedTimersForTest>();
|
|
||||||
|
|
||||||
// Reset pointer position to avoid the pointer hover on the back button
|
// Reset pointer position to avoid the pointer hover on the back button
|
||||||
// that unintentionally triggers `kBackButtonHover` preloading, which may
|
// that unintentionally triggers `kBackButtonHover` preloading, which may
|
||||||
@@ -441,6 +439,7 @@ class SearchPreloadUnifiedBrowserTest : public PlatformBrowserTest,
|
|||||||
|
|
||||||
constexpr static char kSearchDomain[] = "a.test";
|
constexpr static char kSearchDomain[] = "a.test";
|
||||||
constexpr static char16_t kSearchDomain16[] = u"a.test";
|
constexpr static char16_t kSearchDomain16[] = u"a.test";
|
||||||
|
base::ScopedMockElapsedTimersForTest scoped_test_timer_;
|
||||||
raw_ptr<PrerenderManager, AcrossTasksDanglingUntriaged> prerender_manager_ =
|
raw_ptr<PrerenderManager, AcrossTasksDanglingUntriaged> prerender_manager_ =
|
||||||
nullptr;
|
nullptr;
|
||||||
raw_ptr<SearchPrefetchService, AcrossTasksDanglingUntriaged>
|
raw_ptr<SearchPrefetchService, AcrossTasksDanglingUntriaged>
|
||||||
@@ -456,7 +455,6 @@ class SearchPreloadUnifiedBrowserTest : public PlatformBrowserTest,
|
|||||||
|
|
||||||
content::test::PrerenderTestHelper prerender_helper_;
|
content::test::PrerenderTestHelper prerender_helper_;
|
||||||
base::test::ScopedFeatureList scoped_feature_list_;
|
base::test::ScopedFeatureList scoped_feature_list_;
|
||||||
std::unique_ptr<base::ScopedMockElapsedTimersForTest> scoped_test_timer_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Tests that the SearchSuggestionService can trigger prerendering after the
|
// Tests that the SearchSuggestionService can trigger prerendering after the
|
||||||
|
@@ -78,7 +78,6 @@ class OmniboxPrerenderBrowserTest : public PlatformBrowserTest {
|
|||||||
ukm_entry_builder_ =
|
ukm_entry_builder_ =
|
||||||
std::make_unique<content::test::PreloadingAttemptUkmEntryBuilder>(
|
std::make_unique<content::test::PreloadingAttemptUkmEntryBuilder>(
|
||||||
chrome_preloading_predictor::kOmniboxDirectURLInput);
|
chrome_preloading_predictor::kOmniboxDirectURLInput);
|
||||||
test_timer_ = std::make_unique<base::ScopedMockElapsedTimersForTest>();
|
|
||||||
ASSERT_TRUE(embedded_test_server()->Start());
|
ASSERT_TRUE(embedded_test_server()->Start());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -117,11 +116,11 @@ class OmniboxPrerenderBrowserTest : public PlatformBrowserTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
base::ScopedMockElapsedTimersForTest test_timer_;
|
||||||
content::test::PrerenderTestHelper prerender_helper_;
|
content::test::PrerenderTestHelper prerender_helper_;
|
||||||
std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_;
|
std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_;
|
||||||
std::unique_ptr<content::test::PreloadingAttemptUkmEntryBuilder>
|
std::unique_ptr<content::test::PreloadingAttemptUkmEntryBuilder>
|
||||||
ukm_entry_builder_;
|
ukm_entry_builder_;
|
||||||
std::unique_ptr<base::ScopedMockElapsedTimersForTest> test_timer_;
|
|
||||||
// Disable sampling of UKM preloading logs.
|
// Disable sampling of UKM preloading logs.
|
||||||
content::test::PreloadingConfigOverride preloading_config_override_;
|
content::test::PreloadingConfigOverride preloading_config_override_;
|
||||||
};
|
};
|
||||||
|
@@ -690,7 +690,6 @@ class PrerenderNewTabPageBrowserTest
|
|||||||
attempt_entry_builder_ =
|
attempt_entry_builder_ =
|
||||||
std::make_unique<content::test::PreloadingAttemptUkmEntryBuilder>(
|
std::make_unique<content::test::PreloadingAttemptUkmEntryBuilder>(
|
||||||
chrome_preloading_predictor::kMouseHoverOrMouseDownOnNewTabPage);
|
chrome_preloading_predictor::kMouseHoverOrMouseDownOnNewTabPage);
|
||||||
test_timer_ = std::make_unique<base::ScopedMockElapsedTimersForTest>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SimulateNewTabNavigation(const GURL& url) {
|
void SimulateNewTabNavigation(const GURL& url) {
|
||||||
@@ -739,11 +738,11 @@ class PrerenderNewTabPageBrowserTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
// This timer is for making TimeToNextNavigation in UKM consistent.
|
||||||
|
base::ScopedMockElapsedTimersForTest test_timer_;
|
||||||
std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_;
|
std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_;
|
||||||
std::unique_ptr<content::test::PreloadingAttemptUkmEntryBuilder>
|
std::unique_ptr<content::test::PreloadingAttemptUkmEntryBuilder>
|
||||||
attempt_entry_builder_;
|
attempt_entry_builder_;
|
||||||
// This timer is for making TimeToNextNavigation in UKM consistent.
|
|
||||||
std::unique_ptr<base::ScopedMockElapsedTimersForTest> test_timer_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(PrerenderNewTabPageBrowserTest,
|
IN_PROC_BROWSER_TEST_F(PrerenderNewTabPageBrowserTest,
|
||||||
|
@@ -130,8 +130,6 @@ class PrerenderOmniboxUIBrowserTest : public InProcessBrowserTest,
|
|||||||
chrome_preloading_predictor::kOmniboxDirectURLInput);
|
chrome_preloading_predictor::kOmniboxDirectURLInput);
|
||||||
|
|
||||||
ASSERT_TRUE(embedded_test_server()->Start());
|
ASSERT_TRUE(embedded_test_server()->Start());
|
||||||
scoped_test_timer_ =
|
|
||||||
std::make_unique<base::ScopedMockElapsedTimersForTest>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TearDownOnMainThread() override {
|
void TearDownOnMainThread() override {
|
||||||
@@ -248,13 +246,13 @@ class PrerenderOmniboxUIBrowserTest : public InProcessBrowserTest,
|
|||||||
is_prerendering_page_ = navigation_handle->IsPrerenderedPageActivation();
|
is_prerendering_page_ = navigation_handle->IsPrerenderedPageActivation();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
base::ScopedMockElapsedTimersForTest scoped_test_timer_;
|
||||||
content::test::PrerenderTestHelper prerender_helper_;
|
content::test::PrerenderTestHelper prerender_helper_;
|
||||||
ui::PageTransition last_finished_page_transition_type_;
|
ui::PageTransition last_finished_page_transition_type_;
|
||||||
std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_;
|
std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_;
|
||||||
std::unique_ptr<content::test::PreloadingAttemptUkmEntryBuilder>
|
std::unique_ptr<content::test::PreloadingAttemptUkmEntryBuilder>
|
||||||
ukm_entry_builder_;
|
ukm_entry_builder_;
|
||||||
bool is_prerendering_page_;
|
bool is_prerendering_page_;
|
||||||
std::unique_ptr<base::ScopedMockElapsedTimersForTest> scoped_test_timer_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// This test covers the path from starting a omnibox triggered prerendering
|
// This test covers the path from starting a omnibox triggered prerendering
|
||||||
@@ -661,8 +659,6 @@ class PrerenderOmniboxSearchSuggestionUIBrowserTest
|
|||||||
prediction_entry_builder_ =
|
prediction_entry_builder_ =
|
||||||
std::make_unique<content::test::PreloadingPredictionUkmEntryBuilder>(
|
std::make_unique<content::test::PreloadingPredictionUkmEntryBuilder>(
|
||||||
chrome_preloading_predictor::kDefaultSearchEngine);
|
chrome_preloading_predictor::kDefaultSearchEngine);
|
||||||
scoped_test_timer_ =
|
|
||||||
std::make_unique<base::ScopedMockElapsedTimersForTest>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetUp() override {
|
void SetUp() override {
|
||||||
@@ -826,6 +822,7 @@ class PrerenderOmniboxSearchSuggestionUIBrowserTest
|
|||||||
constexpr static char kSearchDomain[] = "a.test";
|
constexpr static char kSearchDomain[] = "a.test";
|
||||||
constexpr static char kSuggestDomain[] = "b.test";
|
constexpr static char kSuggestDomain[] = "b.test";
|
||||||
constexpr static char16_t kSearchDomain16[] = u"a.test";
|
constexpr static char16_t kSearchDomain16[] = u"a.test";
|
||||||
|
base::ScopedMockElapsedTimersForTest scoped_test_timer_;
|
||||||
content::test::PrerenderTestHelper prerender_helper_;
|
content::test::PrerenderTestHelper prerender_helper_;
|
||||||
base::test::ScopedFeatureList scoped_feature_list_;
|
base::test::ScopedFeatureList scoped_feature_list_;
|
||||||
net::test_server::EmbeddedTestServer search_engine_server_{
|
net::test_server::EmbeddedTestServer search_engine_server_{
|
||||||
@@ -837,7 +834,6 @@ class PrerenderOmniboxSearchSuggestionUIBrowserTest
|
|||||||
attempt_entry_builder_;
|
attempt_entry_builder_;
|
||||||
std::unique_ptr<content::test::PreloadingPredictionUkmEntryBuilder>
|
std::unique_ptr<content::test::PreloadingPredictionUkmEntryBuilder>
|
||||||
prediction_entry_builder_;
|
prediction_entry_builder_;
|
||||||
std::unique_ptr<base::ScopedMockElapsedTimersForTest> scoped_test_timer_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Tests that prerender is cancelled if a different prerendering starts.
|
// Tests that prerender is cancelled if a different prerendering starts.
|
||||||
|
@@ -379,8 +379,6 @@ class PrerenderBookmarkBarNavigationTestBase
|
|||||||
void SetUpOnMainThread() override {
|
void SetUpOnMainThread() override {
|
||||||
BookmarkBarNavigationTest::SetUpOnMainThread();
|
BookmarkBarNavigationTest::SetUpOnMainThread();
|
||||||
test_ukm_recorder_ = std::make_unique<ukm::TestAutoSetUkmRecorder>();
|
test_ukm_recorder_ = std::make_unique<ukm::TestAutoSetUkmRecorder>();
|
||||||
scoped_test_timer_ =
|
|
||||||
std::make_unique<base::ScopedMockElapsedTimersForTest>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ukm::TestAutoSetUkmRecorder* test_ukm_recorder() {
|
ukm::TestAutoSetUkmRecorder* test_ukm_recorder() {
|
||||||
@@ -432,9 +430,9 @@ class PrerenderBookmarkBarNavigationTestBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
base::ScopedMockElapsedTimersForTest scoped_test_timer_;
|
||||||
content::test::PrerenderTestHelper prerender_helper_;
|
content::test::PrerenderTestHelper prerender_helper_;
|
||||||
std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_;
|
std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_;
|
||||||
std::unique_ptr<base::ScopedMockElapsedTimersForTest> scoped_test_timer_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Following definitions are equal to content::PrerenderFinalStatus.
|
// Following definitions are equal to content::PrerenderFinalStatus.
|
||||||
|
@@ -39,7 +39,6 @@ class NavPrefetchBrowserTest : public ContentBrowserTest {
|
|||||||
attempt_ukm_entry_builder_ =
|
attempt_ukm_entry_builder_ =
|
||||||
std::make_unique<test::PreloadingAttemptUkmEntryBuilder>(
|
std::make_unique<test::PreloadingAttemptUkmEntryBuilder>(
|
||||||
content_preloading_predictor::kSpeculationRules);
|
content_preloading_predictor::kSpeculationRules);
|
||||||
test_timer_ = std::make_unique<base::ScopedMockElapsedTimersForTest>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void StartPrefetch(const GURL& url) {
|
void StartPrefetch(const GURL& url) {
|
||||||
@@ -88,13 +87,13 @@ class NavPrefetchBrowserTest : public ContentBrowserTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
base::ScopedMockElapsedTimersForTest test_timer_;
|
||||||
std::map<std::string, int> request_count_by_path_ GUARDED_BY(lock_);
|
std::map<std::string, int> request_count_by_path_ GUARDED_BY(lock_);
|
||||||
std::unique_ptr<ukm::TestAutoSetUkmRecorder> ukm_recorder_;
|
std::unique_ptr<ukm::TestAutoSetUkmRecorder> ukm_recorder_;
|
||||||
std::unique_ptr<test::PreloadingAttemptUkmEntryBuilder>
|
std::unique_ptr<test::PreloadingAttemptUkmEntryBuilder>
|
||||||
attempt_ukm_entry_builder_;
|
attempt_ukm_entry_builder_;
|
||||||
// Disable sampling for UKM preloading logs.
|
// Disable sampling for UKM preloading logs.
|
||||||
test::PreloadingConfigOverride preloading_config_override_;
|
test::PreloadingConfigOverride preloading_config_override_;
|
||||||
std::unique_ptr<base::ScopedMockElapsedTimersForTest> test_timer_;
|
|
||||||
|
|
||||||
base::Lock lock_;
|
base::Lock lock_;
|
||||||
};
|
};
|
||||||
|
@@ -281,9 +281,6 @@ class PrefetchServiceTestBase : public RenderViewHostTestHarness {
|
|||||||
attempt_entry_builder_ =
|
attempt_entry_builder_ =
|
||||||
std::make_unique<test::PreloadingAttemptUkmEntryBuilder>(
|
std::make_unique<test::PreloadingAttemptUkmEntryBuilder>(
|
||||||
content_preloading_predictor::kSpeculationRules);
|
content_preloading_predictor::kSpeculationRules);
|
||||||
|
|
||||||
scoped_test_timer_ =
|
|
||||||
std::make_unique<base::ScopedMockElapsedTimersForTest>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TearDown() override {
|
void TearDown() override {
|
||||||
@@ -1239,6 +1236,8 @@ class PrefetchServiceTestBase : public RenderViewHostTestHarness {
|
|||||||
test_url_loader_factory_.ClearResponses();
|
test_url_loader_factory_.ClearResponses();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
base::ScopedMockElapsedTimersForTest scoped_test_timer_;
|
||||||
|
|
||||||
std::unique_ptr<PrefetchFakeServiceWorkerContext> service_worker_context_;
|
std::unique_ptr<PrefetchFakeServiceWorkerContext> service_worker_context_;
|
||||||
mojo::Remote<network::mojom::CookieManager> cookie_manager_;
|
mojo::Remote<network::mojom::CookieManager> cookie_manager_;
|
||||||
|
|
||||||
@@ -1263,8 +1262,6 @@ class PrefetchServiceTestBase : public RenderViewHostTestHarness {
|
|||||||
std::unique_ptr<test::PreloadingAttemptUkmEntryBuilder>
|
std::unique_ptr<test::PreloadingAttemptUkmEntryBuilder>
|
||||||
attempt_entry_builder_;
|
attempt_entry_builder_;
|
||||||
|
|
||||||
std::unique_ptr<base::ScopedMockElapsedTimersForTest> scoped_test_timer_;
|
|
||||||
|
|
||||||
std::vector<PrefetchRequestHandler> request_handler_keep_alive_;
|
std::vector<PrefetchRequestHandler> request_handler_keep_alive_;
|
||||||
|
|
||||||
variations::ScopedVariationsIdsProvider scoped_variations_ids_provider_{
|
variations::ScopedVariationsIdsProvider scoped_variations_ids_provider_{
|
||||||
|
@@ -270,9 +270,6 @@ class PrefetchURLLoaderInterceptorTestBase : public RenderViewHostTestHarness {
|
|||||||
attempt_entry_builder_ =
|
attempt_entry_builder_ =
|
||||||
std::make_unique<test::PreloadingAttemptUkmEntryBuilder>(
|
std::make_unique<test::PreloadingAttemptUkmEntryBuilder>(
|
||||||
content_preloading_predictor::kSpeculationRules);
|
content_preloading_predictor::kSpeculationRules);
|
||||||
|
|
||||||
scoped_test_timer_ =
|
|
||||||
std::make_unique<base::ScopedMockElapsedTimersForTest>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TearDown() override {
|
void TearDown() override {
|
||||||
@@ -515,6 +512,8 @@ class PrefetchURLLoaderInterceptorTestBase : public RenderViewHostTestHarness {
|
|||||||
base::test::ScopedFeatureList scoped_feature_list_for_new_wait_loop_;
|
base::test::ScopedFeatureList scoped_feature_list_for_new_wait_loop_;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
base::ScopedMockElapsedTimersForTest scoped_test_timer_;
|
||||||
|
|
||||||
std::unique_ptr<PrefetchURLLoaderInterceptor> interceptor_;
|
std::unique_ptr<PrefetchURLLoaderInterceptor> interceptor_;
|
||||||
|
|
||||||
base::HistogramTester histogram_tester_;
|
base::HistogramTester histogram_tester_;
|
||||||
@@ -529,7 +528,6 @@ class PrefetchURLLoaderInterceptorTestBase : public RenderViewHostTestHarness {
|
|||||||
std::unique_ptr<test::PreloadingAttemptUkmEntryBuilder>
|
std::unique_ptr<test::PreloadingAttemptUkmEntryBuilder>
|
||||||
attempt_entry_builder_;
|
attempt_entry_builder_;
|
||||||
|
|
||||||
std::unique_ptr<base::ScopedMockElapsedTimersForTest> scoped_test_timer_;
|
|
||||||
// Disable sampling of UKM preloading logs.
|
// Disable sampling of UKM preloading logs.
|
||||||
content::test::PreloadingConfigOverride preloading_config_override_;
|
content::test::PreloadingConfigOverride preloading_config_override_;
|
||||||
|
|
||||||
|
@@ -377,8 +377,6 @@ class PrerenderBrowserTest : public ContentBrowserTest,
|
|||||||
WebContentsObserver::Observe(shell()->web_contents());
|
WebContentsObserver::Observe(shell()->web_contents());
|
||||||
|
|
||||||
ukm_recorder_ = std::make_unique<ukm::TestAutoSetUkmRecorder>();
|
ukm_recorder_ = std::make_unique<ukm::TestAutoSetUkmRecorder>();
|
||||||
scoped_test_timer_ =
|
|
||||||
std::make_unique<base::ScopedMockElapsedTimersForTest>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TearDownOnMainThread() override {
|
void TearDownOnMainThread() override {
|
||||||
@@ -844,6 +842,8 @@ class PrerenderBrowserTest : public ContentBrowserTest,
|
|||||||
navigation_ids_.push_back(handle->GetNavigationId());
|
navigation_ids_.push_back(handle->GetNavigationId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
base::ScopedMockElapsedTimersForTest scoped_test_timer_;
|
||||||
|
|
||||||
net::test_server::EmbeddedTestServer ssl_server_{
|
net::test_server::EmbeddedTestServer ssl_server_{
|
||||||
net::test_server::EmbeddedTestServer::TYPE_HTTPS};
|
net::test_server::EmbeddedTestServer::TYPE_HTTPS};
|
||||||
|
|
||||||
@@ -860,7 +860,6 @@ class PrerenderBrowserTest : public ContentBrowserTest,
|
|||||||
std::unique_ptr<PreloadingPredictionPreviousPrimaryPageUkmEntryBuilder>
|
std::unique_ptr<PreloadingPredictionPreviousPrimaryPageUkmEntryBuilder>
|
||||||
prediction_previous_ukm_entry_builder_;
|
prediction_previous_ukm_entry_builder_;
|
||||||
base::test::ScopedFeatureList feature_list_;
|
base::test::ScopedFeatureList feature_list_;
|
||||||
std::unique_ptr<base::ScopedMockElapsedTimersForTest> scoped_test_timer_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class NoVarySearchPrerenderBrowserTest : public PrerenderBrowserTest {
|
class NoVarySearchPrerenderBrowserTest : public PrerenderBrowserTest {
|
||||||
|
@@ -34,6 +34,7 @@
|
|||||||
#include "base/memory/raw_ptr.h"
|
#include "base/memory/raw_ptr.h"
|
||||||
#include "base/memory/scoped_refptr.h"
|
#include "base/memory/scoped_refptr.h"
|
||||||
#include "base/memory/weak_ptr.h"
|
#include "base/memory/weak_ptr.h"
|
||||||
|
#include "base/metrics/histogram_functions.h"
|
||||||
#include "base/no_destructor.h"
|
#include "base/no_destructor.h"
|
||||||
#include "base/notimplemented.h"
|
#include "base/notimplemented.h"
|
||||||
#include "base/notreached.h"
|
#include "base/notreached.h"
|
||||||
@@ -48,6 +49,7 @@
|
|||||||
#include "base/synchronization/lock.h"
|
#include "base/synchronization/lock.h"
|
||||||
#include "base/threading/scoped_blocking_call.h"
|
#include "base/threading/scoped_blocking_call.h"
|
||||||
#include "base/time/time.h"
|
#include "base/time/time.h"
|
||||||
|
#include "base/timer/elapsed_timer.h"
|
||||||
#include "base/trace_event/memory_dump_manager.h"
|
#include "base/trace_event/memory_dump_manager.h"
|
||||||
#include "base/trace_event/trace_event.h"
|
#include "base/trace_event/trace_event.h"
|
||||||
#include "base/tracing/protos/chrome_track_event.pbzero.h" // IWYU pragma: keep
|
#include "base/tracing/protos/chrome_track_event.pbzero.h" // IWYU pragma: keep
|
||||||
@@ -319,7 +321,9 @@ void DatabaseDiagnostics::WriteIntoTrace(
|
|||||||
Database::Database() : Database(DatabaseOptions{}) {}
|
Database::Database() : Database(DatabaseOptions{}) {}
|
||||||
|
|
||||||
Database::Database(DatabaseOptions options)
|
Database::Database(DatabaseOptions options)
|
||||||
: options_(options), mmap_disabled_(!enable_mmap_by_default_) {
|
: options_(options),
|
||||||
|
mmap_disabled_(!enable_mmap_by_default_),
|
||||||
|
tracing_track_name_("Database: NoTag") {
|
||||||
DCHECK_GE(options.page_size, 512);
|
DCHECK_GE(options.page_size, 512);
|
||||||
DCHECK_LE(options.page_size, 65536);
|
DCHECK_LE(options.page_size, 65536);
|
||||||
DCHECK(!(options.page_size & (options.page_size - 1)))
|
DCHECK(!(options.page_size & (options.page_size - 1)))
|
||||||
@@ -995,6 +999,24 @@ sqlite3_file* Database::GetSqliteVfsFile() {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Database::RecordTimingHistogram(std::string_view name_prefix,
|
||||||
|
base::TimeDelta timing) const {
|
||||||
|
std::string_view tag("NoTag");
|
||||||
|
if (!histogram_tag().empty()) {
|
||||||
|
tag = histogram_tag();
|
||||||
|
}
|
||||||
|
base::UmaHistogramCustomMicrosecondsTimes(base::StrCat({name_prefix, tag}),
|
||||||
|
timing, base::Microseconds(0),
|
||||||
|
base::Minutes(1), 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
perfetto::NamedTrack Database::GetTracingNamedTrack() const {
|
||||||
|
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
|
||||||
|
return perfetto::NamedTrack(perfetto::DynamicString(tracing_track_name_),
|
||||||
|
reinterpret_cast<uint64_t>(this),
|
||||||
|
perfetto::ThreadTrack::Current());
|
||||||
|
}
|
||||||
|
|
||||||
void Database::TrimMemory() {
|
void Database::TrimMemory() {
|
||||||
TRACE_EVENT0("sql", "Database::TrimMemory");
|
TRACE_EVENT0("sql", "Database::TrimMemory");
|
||||||
|
|
||||||
@@ -1859,6 +1881,7 @@ const char* Database::GetErrorMessage() const {
|
|||||||
bool Database::OpenInternal(const std::string& db_file_path) {
|
bool Database::OpenInternal(const std::string& db_file_path) {
|
||||||
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
|
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
|
||||||
TRACE_EVENT1("sql", "Database::OpenInternal", "path", db_file_path);
|
TRACE_EVENT1("sql", "Database::OpenInternal", "path", db_file_path);
|
||||||
|
base::ElapsedTimer timer;
|
||||||
|
|
||||||
if (is_open()) {
|
if (is_open()) {
|
||||||
DLOG(FATAL) << "sql::Database is already open.";
|
DLOG(FATAL) << "sql::Database is already open.";
|
||||||
@@ -1907,8 +1930,16 @@ bool Database::OpenInternal(const std::string& db_file_path) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sqlite3* db = nullptr;
|
sqlite3* db = nullptr;
|
||||||
auto sqlite_result_code = ToSqliteResultCode(sqlite3_open_v2(
|
SqliteResultCode sqlite_result_code;
|
||||||
uri_file_path.c_str(), &db, open_flags, /*zVfs=*/nullptr));
|
{
|
||||||
|
TRACE_EVENT1("sql", "Database::OpenInternal sqlite3_open_v2", "path",
|
||||||
|
db_file_path);
|
||||||
|
base::ElapsedTimer library_call_timer;
|
||||||
|
sqlite_result_code = ToSqliteResultCode(sqlite3_open_v2(
|
||||||
|
uri_file_path.c_str(), &db, open_flags, /*zVfs=*/nullptr));
|
||||||
|
RecordTimingHistogram("Sql.Database.Success.SqliteOpenTime.",
|
||||||
|
library_call_timer.Elapsed());
|
||||||
|
}
|
||||||
if (sqlite_result_code == SqliteResultCode::kOk) {
|
if (sqlite_result_code == SqliteResultCode::kOk) {
|
||||||
db_ = db;
|
db_ = db;
|
||||||
} else {
|
} else {
|
||||||
@@ -2101,6 +2132,9 @@ bool Database::OpenInternal(const std::string& db_file_path) {
|
|||||||
base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
|
base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
|
||||||
memory_dump_provider_.get(), "sql::Database", /*task_runner=*/nullptr);
|
memory_dump_provider_.get(), "sql::Database", /*task_runner=*/nullptr);
|
||||||
|
|
||||||
|
RecordTimingHistogram("Sql.Database.Success.OpenInternalTime.",
|
||||||
|
timer.Elapsed());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -33,6 +33,7 @@
|
|||||||
#include "base/strings/cstring_view.h"
|
#include "base/strings/cstring_view.h"
|
||||||
#include "base/threading/scoped_blocking_call.h"
|
#include "base/threading/scoped_blocking_call.h"
|
||||||
#include "base/time/time.h"
|
#include "base/time/time.h"
|
||||||
|
#include "base/trace_event/base_tracing.h"
|
||||||
#include "base/types/pass_key.h"
|
#include "base/types/pass_key.h"
|
||||||
#include "sql/internal_api_token.h"
|
#include "sql/internal_api_token.h"
|
||||||
#include "sql/sql_features.h"
|
#include "sql/sql_features.h"
|
||||||
@@ -336,6 +337,7 @@ class COMPONENT_EXPORT(SQL) Database {
|
|||||||
void set_histogram_tag(const std::string& histogram_tag) {
|
void set_histogram_tag(const std::string& histogram_tag) {
|
||||||
DCHECK(!is_open());
|
DCHECK(!is_open());
|
||||||
histogram_tag_ = histogram_tag;
|
histogram_tag_ = histogram_tag;
|
||||||
|
tracing_track_name_ = "Database: " + histogram_tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string& histogram_tag() const { return histogram_tag_; }
|
const std::string& histogram_tag() const { return histogram_tag_; }
|
||||||
@@ -944,6 +946,19 @@ class COMPONENT_EXPORT(SQL) Database {
|
|||||||
// This method must only be called while the database is successfully opened.
|
// This method must only be called while the database is successfully opened.
|
||||||
sqlite3_file* GetSqliteVfsFile();
|
sqlite3_file* GetSqliteVfsFile();
|
||||||
|
|
||||||
|
// Records a histogram named `name_prefix` suffixed with this database's
|
||||||
|
// histogram tag (or "NoTag" if the tag isn't set). For instance,
|
||||||
|
// `RecordTimingHistogram("Foo.", ...)` called on a database with the tag
|
||||||
|
// "Bar" will record into "Foo.Bar". This function chooses reasonable
|
||||||
|
// bucketing parameters for typical database operations timing and reports in
|
||||||
|
// microseconds.
|
||||||
|
void RecordTimingHistogram(std::string_view name_prefix,
|
||||||
|
base::TimeDelta timing) const;
|
||||||
|
|
||||||
|
// Returns the name of the track in which to record this database's events
|
||||||
|
// based on its histogram tag.
|
||||||
|
perfetto::NamedTrack GetTracingNamedTrack() const;
|
||||||
|
|
||||||
void SetEnableVirtualTablesForTesting(bool enable) {
|
void SetEnableVirtualTablesForTesting(bool enable) {
|
||||||
enable_virtual_tables_ = enable;
|
enable_virtual_tables_ = enable;
|
||||||
}
|
}
|
||||||
@@ -1018,6 +1033,10 @@ class COMPONENT_EXPORT(SQL) Database {
|
|||||||
// Developer-friendly database ID used in logging output and memory dumps.
|
// Developer-friendly database ID used in logging output and memory dumps.
|
||||||
std::string histogram_tag_;
|
std::string histogram_tag_;
|
||||||
|
|
||||||
|
// Persist the track name as a member since perfetto needs the original string
|
||||||
|
// for the name to remain alive (without taking ownership of it).
|
||||||
|
std::string tracing_track_name_;
|
||||||
|
|
||||||
// Stores the dump provider object when db is open.
|
// Stores the dump provider object when db is open.
|
||||||
std::unique_ptr<DatabaseMemoryDumpProvider> memory_dump_provider_;
|
std::unique_ptr<DatabaseMemoryDumpProvider> memory_dump_provider_;
|
||||||
|
|
||||||
|
@@ -32,6 +32,8 @@
|
|||||||
#include "base/strings/utf_string_conversions.h"
|
#include "base/strings/utf_string_conversions.h"
|
||||||
#include "base/threading/scoped_blocking_call.h"
|
#include "base/threading/scoped_blocking_call.h"
|
||||||
#include "base/time/time.h"
|
#include "base/time/time.h"
|
||||||
|
#include "base/timer/elapsed_timer.h"
|
||||||
|
#include "base/trace_event/base_tracing.h"
|
||||||
#include "sql/database.h"
|
#include "sql/database.h"
|
||||||
#include "sql/sqlite_result_code.h"
|
#include "sql/sqlite_result_code.h"
|
||||||
#include "sql/sqlite_result_code_values.h"
|
#include "sql/sqlite_result_code_values.h"
|
||||||
@@ -94,10 +96,24 @@ SqliteResultCode Statement::StepInternal() {
|
|||||||
if (!CheckValid())
|
if (!CheckValid())
|
||||||
return SqliteResultCode::kError;
|
return SqliteResultCode::kError;
|
||||||
|
|
||||||
|
base::ElapsedTimer timer;
|
||||||
|
if (!time_spent_stepping_) {
|
||||||
|
time_spent_stepping_ = base::TimeDelta();
|
||||||
|
TRACE_EVENT_BEGIN("sql", "Database::Statement",
|
||||||
|
ref_->database()->GetTracingNamedTrack(),
|
||||||
|
timer.start_time(), "statement",
|
||||||
|
std::string(sqlite3_sql(ref_->stmt())));
|
||||||
|
}
|
||||||
|
|
||||||
std::optional<base::ScopedBlockingCall> scoped_blocking_call;
|
std::optional<base::ScopedBlockingCall> scoped_blocking_call;
|
||||||
ref_->InitScopedBlockingCall(FROM_HERE, &scoped_blocking_call);
|
ref_->InitScopedBlockingCall(FROM_HERE, &scoped_blocking_call);
|
||||||
|
|
||||||
auto sqlite_result_code = ToSqliteResultCode(sqlite3_step(ref_->stmt()));
|
auto sqlite_result_code = ToSqliteResultCode(sqlite3_step(ref_->stmt()));
|
||||||
|
|
||||||
|
auto elapsed = timer.Elapsed();
|
||||||
|
ref_->database()->RecordTimingHistogram("Sql.Statement.StepTime.", elapsed);
|
||||||
|
*time_spent_stepping_ += elapsed;
|
||||||
|
|
||||||
return CheckSqliteResultCode(sqlite_result_code);
|
return CheckSqliteResultCode(sqlite_result_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,13 +126,18 @@ void Statement::ReportQueryExecutionMetrics() const {
|
|||||||
const int kResetVMStepsToZero = 1;
|
const int kResetVMStepsToZero = 1;
|
||||||
const int vm_steps = sqlite3_stmt_status(
|
const int vm_steps = sqlite3_stmt_status(
|
||||||
ref_->stmt(), SQLITE_STMTSTATUS_VM_STEP, kResetVMStepsToZero);
|
ref_->stmt(), SQLITE_STMTSTATUS_VM_STEP, kResetVMStepsToZero);
|
||||||
if (vm_steps > 0) {
|
const Database* database = ref_->database();
|
||||||
const Database* database = ref_->database();
|
if (vm_steps > 0 && !database->histogram_tag().empty()) {
|
||||||
if (!database->histogram_tag().empty()) {
|
const std::string histogram_name =
|
||||||
const std::string histogram_name =
|
"Sql.Statement." + database->histogram_tag() + ".VMSteps";
|
||||||
"Sql.Statement." + database->histogram_tag() + ".VMSteps";
|
base::UmaHistogramCounts10000(histogram_name, vm_steps);
|
||||||
base::UmaHistogramCounts10000(histogram_name, vm_steps);
|
}
|
||||||
}
|
|
||||||
|
if (time_spent_stepping_) {
|
||||||
|
TRACE_EVENT_END("sql", database->GetTracingNamedTrack(), "statement",
|
||||||
|
std::string(sqlite3_sql(ref_->stmt())));
|
||||||
|
database->RecordTimingHistogram("Sql.Statement.ExecutionTime.",
|
||||||
|
*time_spent_stepping_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,6 +191,8 @@ void Statement::Reset(bool clear_bound_vars) {
|
|||||||
run_called_ = false;
|
run_called_ = false;
|
||||||
step_called_ = false;
|
step_called_ = false;
|
||||||
#endif // DCHECK_IS_ON()
|
#endif // DCHECK_IS_ON()
|
||||||
|
|
||||||
|
time_spent_stepping_ = std::nullopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Statement::Succeeded() const {
|
bool Statement::Succeeded() const {
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include <optional>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <string_view>
|
#include <string_view>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@@ -309,6 +310,8 @@ class COMPONENT_EXPORT(SQL) Statement {
|
|||||||
bool run_called_ GUARDED_BY_CONTEXT(sequence_checker_) = false;
|
bool run_called_ GUARDED_BY_CONTEXT(sequence_checker_) = false;
|
||||||
#endif // DCHECK_IS_ON()
|
#endif // DCHECK_IS_ON()
|
||||||
|
|
||||||
|
std::optional<base::TimeDelta> time_spent_stepping_ = std::nullopt;
|
||||||
|
|
||||||
SEQUENCE_CHECKER(sequence_checker_);
|
SEQUENCE_CHECKER(sequence_checker_);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -471,6 +471,32 @@ chromium-metrics-reviews@google.com.
|
|||||||
</summary>
|
</summary>
|
||||||
</histogram>
|
</histogram>
|
||||||
|
|
||||||
|
<histogram name="Sql.Database.Success.OpenInternalTime.{DatabaseTag}"
|
||||||
|
units="microseconds" expires_after="2025-11-15">
|
||||||
|
<owner>anthonyvd@chromium.org</owner>
|
||||||
|
<owner>etienneb@chromium.org</owner>
|
||||||
|
<summary>
|
||||||
|
Reports the time spent in OpenInternal, in microseconds, when opening the
|
||||||
|
{DatabaseTag} database.
|
||||||
|
|
||||||
|
Only reported for clients with high-resolution clocks.
|
||||||
|
</summary>
|
||||||
|
<token key="DatabaseTag" variants="DatabaseTag"/>
|
||||||
|
</histogram>
|
||||||
|
|
||||||
|
<histogram name="Sql.Database.Success.SqliteOpenTime.{DatabaseTag}"
|
||||||
|
units="microseconds" expires_after="2025-11-15">
|
||||||
|
<owner>anthonyvd@chromium.org</owner>
|
||||||
|
<owner>etienneb@chromium.org</owner>
|
||||||
|
<summary>
|
||||||
|
Reports the time spent in the sqlite3_open_v2 library call, in microseconds,
|
||||||
|
when opening the {DatabaseTag} database.
|
||||||
|
|
||||||
|
Only reported for clients with high-resolution clocks.
|
||||||
|
</summary>
|
||||||
|
<token key="DatabaseTag" variants="DatabaseTag"/>
|
||||||
|
</histogram>
|
||||||
|
|
||||||
<histogram name="Sql.Recovery.Result" enum="SqlRecoveryResult"
|
<histogram name="Sql.Recovery.Result" enum="SqlRecoveryResult"
|
||||||
expires_after="2025-09-15">
|
expires_after="2025-09-15">
|
||||||
<owner>asully@chromium.org</owner>
|
<owner>asully@chromium.org</owner>
|
||||||
@@ -518,6 +544,34 @@ chromium-metrics-reviews@google.com.
|
|||||||
<token key="DatabaseTag" variants="DatabaseTag"/>
|
<token key="DatabaseTag" variants="DatabaseTag"/>
|
||||||
</histogram>
|
</histogram>
|
||||||
|
|
||||||
|
<histogram name="Sql.Statement.ExecutionTime.{DatabaseTag}"
|
||||||
|
units="microseconds" expires_after="2025-11-15">
|
||||||
|
<owner>anthonyvd@chromium.org</owner>
|
||||||
|
<owner>etienneb@chromium.org</owner>
|
||||||
|
<summary>
|
||||||
|
Reports the total time spent stepping for a given statement in database
|
||||||
|
{DatabaseTag}, in microseconds. Recorded when the statement is
|
||||||
|
reset/destructed, but only includes the time spent in `StepInternal` since
|
||||||
|
the statement's last reset.
|
||||||
|
|
||||||
|
Only reported for clients with high-resolution clocks.
|
||||||
|
</summary>
|
||||||
|
<token key="DatabaseTag" variants="DatabaseTag"/>
|
||||||
|
</histogram>
|
||||||
|
|
||||||
|
<histogram name="Sql.Statement.StepTime.{DatabaseTag}" units="microseconds"
|
||||||
|
expires_after="2025-11-15">
|
||||||
|
<owner>anthonyvd@chromium.org</owner>
|
||||||
|
<owner>etienneb@chromium.org</owner>
|
||||||
|
<summary>
|
||||||
|
Reports the time of a single step of a statement running against
|
||||||
|
{DatabaseTag}, in microseconds. Recorded every time `Step` is called.
|
||||||
|
|
||||||
|
Only reported for clients with high-resolution clocks.
|
||||||
|
</summary>
|
||||||
|
<token key="DatabaseTag" variants="DatabaseTag"/>
|
||||||
|
</histogram>
|
||||||
|
|
||||||
<histogram name="Sql.Statement.{DatabaseTag}.VMSteps" units="count"
|
<histogram name="Sql.Statement.{DatabaseTag}.VMSteps" units="count"
|
||||||
expires_after="2025-04-13">
|
expires_after="2025-04-13">
|
||||||
<owner>etienneb@chromium.org</owner>
|
<owner>etienneb@chromium.org</owner>
|
||||||
|
Reference in New Issue
Block a user