Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5556)

Unified Diff: chrome/browser/performance_monitor/performance_monitor.cc

Issue 1002103004: NOT FOR REVIEW - Slow Reports Reference Implementation Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: First pass stringification. Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/performance_monitor/performance_monitor.cc
diff --git a/chrome/browser/performance_monitor/performance_monitor.cc b/chrome/browser/performance_monitor/performance_monitor.cc
index 5cf2ce4aee8d6136d9941b7c97f4d3ce87aa0f53..6a89539fee895cc703f35c7f885b43fda2f9f1cb 100644
--- a/chrome/browser/performance_monitor/performance_monitor.cc
+++ b/chrome/browser/performance_monitor/performance_monitor.cc
@@ -5,9 +5,16 @@
#include "chrome/browser/performance_monitor/performance_monitor.h"
#include "base/memory/singleton.h"
+#include "base/metrics/field_trial.h"
+#include "base/metrics/histogram_base.h"
+#include "base/metrics/statistics_recorder.h"
#include "base/process/process_iterator.h"
#include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/tracing/crash_service_uploader.h"
+#include "content/browser/tracing/background_tracing_endpoint.h"
+#include "content/browser/tracing/background_tracing_manager.h"
#include "content/public/browser/browser_child_process_host.h"
#include "content/public/browser/browser_child_process_host_iterator.h"
#include "content/public/browser/browser_thread.h"
@@ -29,6 +36,142 @@ namespace {
// collections.
const int kGatherIntervalInSeconds = 120;
+class CrashBackendEndpoint : public BackgroundTracingEndpoint {
+ public:
+ CrashBackendEndpoint() {
+ uploader_ = scoped_ptr<TraceCrashServiceUploader>(
+ new TraceCrashServiceUploader(
+ g_browser_process->system_request_context()));
+ }
+
+ void ReceiveTraceFinalContents(const std::string& file_contents) override {
+ printf("Size: %lu\n", file_contents.size());
+ printf("CrashBackendEndpoint: Uploading.\n");
+
+ uploader_->DoUpload(
+ file_contents,
+ base::Bind(&CrashBackendEndpoint::OnUploadProgress,
+ this),
+ base::Bind(&CrashBackendEndpoint::OnUploadComplete,
+ this));
+ }
+
+ class CrashBackendEndpointFactory : public BackgroundTracingManagerEndpointFactory {
+ public:
+ BackgroundTracingEndpoint* CreateFromString(const std::string&) const override {
+ return new CrashBackendEndpoint();
+ }
+ std::string GetClassName() const override {
+ return "crash_backend_endpoint";
+ }
+ };
+
+ static BackgroundTracingManagerEndpointFactory* GetFactory() {
+ return new CrashBackendEndpointFactory();
+ }
+
+ std::string ToString() const override {
+ return "crash_backend_endpoint";
+ }
+
+ private:
+ ~CrashBackendEndpoint() override {
+ }
+
+ void OnUploadProgress(int64 current, int64 total) {
+ }
+
+ void OnUploadComplete(bool success, const std::string& feedback) {
+ printf("CrashBackendEndpoint: Finished: %s\n", feedback.c_str());
+ done_callback_.Run();
+ }
+
+ scoped_ptr<TraceCrashServiceUploader> uploader_;
+};
+
+
+class FakeEndpoint : public BackgroundTracingEndpoint {
+ public:
+ FakeEndpoint() {
+ }
+
+ void ReceiveTraceFinalContents(const std::string& file_contents) override {
+ printf("Size: %lu\n", file_contents.size());
+ printf("FakeEndpoint: Not going to do anything.\n");
+ content::BrowserThread::PostDelayedTask(
+ content::BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(done_callback_),
+ base::TimeDelta::FromSeconds(5));
+ }
+
+ class FakeEndpointFactory : public BackgroundTracingManagerEndpointFactory {
+ public:
+ BackgroundTracingEndpoint* CreateFromString(const std::string&) const override {
+ return new FakeEndpoint();
+ }
+ std::string GetClassName() const override {
+ return "fake_endpoint";
+ }
+ };
+
+ static BackgroundTracingManagerEndpointFactory* GetFactory() {
+ return new FakeEndpointFactory();
+ }
+
+ std::string ToString() const override {
+ return "fake_endpoint";
+ }
+
+ private:
+ ~FakeEndpoint() override {
+ }
+};
+
+class PerformanceMonitorTrigger : public BackgroundTracingScenario {
+ public:
+ PerformanceMonitorTrigger(scoped_refptr<BackgroundTracingEndpoint> e) :
+ BackgroundTracingScenario(e) {
+ base::HistogramBase* histogram = base::StatisticsRecorder::FindHistogram(
+ "Navigation.TimeToURLJobStart");
+ if (histogram)
+ histogram->SetCallback(
+ base::Bind(&PerformanceMonitorTrigger::onUMAHistogramChanged,
+ base::Unretained(this)));
+ }
+
+ class PerformanceMonitorTriggerFactory : public BackgroundTracingManagerScenarioFactory {
+ public:
+ BackgroundTracingScenario* CreateFromString(
+ const std::string& contents,
+ scoped_refptr<BackgroundTracingEndpoint> endpoint) const override {
+ return new PerformanceMonitorTrigger(endpoint);
+ }
+ std::string GetClassName() const override {
+ return "perf_mon_trigger";
+ }
+ };
+
+ static BackgroundTracingManagerScenarioFactory* GetFactory() {
+ return new PerformanceMonitorTriggerFactory();
+ }
+
+ std::string ToString() const override {
+ return "perf_mon_trigger";
+ }
+
+ protected:
+
+ ~PerformanceMonitorTrigger() override {}
+
+ void onUMAHistogramChanged() {
+ printf("THIS IS A CLALBACK FROM HISTOGRAM\n");
+ BackgroundTracingManager::GetInstance()->
+ TryFinalizingBackgroundTracing(
+ BackgroundTracingManager::StartedFinalizingCallback());
+ }
+};
+
} // namespace
namespace performance_monitor {
@@ -44,11 +187,33 @@ PerformanceMonitor* PerformanceMonitor::GetInstance() {
return Singleton<PerformanceMonitor>::get();
}
+void CreateTestUMATrigger() {
+ BackgroundTracingManager::GetInstance()->RegisterFactory(
+ PerformanceMonitorTrigger::GetFactory());
+ BackgroundTracingManager::GetInstance()->RegisterFactory(
+ FakeEndpoint::GetFactory());
+ BackgroundTracingManager::GetInstance()->RegisterFactory(
+ CrashBackendEndpoint::GetFactory());
+ BackgroundTracingManager::GetInstance()->SetActiveScenario(
+ BackgroundTracingManager::GetInstance()->CreateFromString(
+ "crash_backend_endpoint|perf_mon_trigger"));
+}
+
void PerformanceMonitor::StartGatherCycle() {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
repeating_timer_.Start(FROM_HERE,
base::TimeDelta::FromSeconds(kGatherIntervalInSeconds),
this, &PerformanceMonitor::GatherMetricsMapOnUIThread);
+
+ if (base::FieldTrialList::FindFullName("SlowReportsContinualTracing") ==
+ "Enable" || 1) {
+
+ content::BrowserThread::PostDelayedTask(
+ content::BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(&CreateTestUMATrigger),
+ base::TimeDelta::FromSeconds(1));
+ }
}
namespace {

Powered by Google App Engine
This is Rietveld 408576698