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

Unified Diff: chrome/browser/ui/webui/task_scheduler_internals/task_scheduler_internals_ui.cc

Issue 2420973002: Plumb Task Scheduler Histograms to the Task Scheduler Internals Page (Closed)
Patch Set: The Return of std::move Created 4 years, 2 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
« no previous file with comments | « chrome/browser/resources/task_scheduler_internals/resources.grd ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/webui/task_scheduler_internals/task_scheduler_internals_ui.cc
diff --git a/chrome/browser/ui/webui/task_scheduler_internals/task_scheduler_internals_ui.cc b/chrome/browser/ui/webui/task_scheduler_internals/task_scheduler_internals_ui.cc
index afec2204a08d08634de7a3d881bde8ec2051c505..e82305558fcca153d7479a556d5ed669e8be0fef 100644
--- a/chrome/browser/ui/webui/task_scheduler_internals/task_scheduler_internals_ui.cc
+++ b/chrome/browser/ui/webui/task_scheduler_internals/task_scheduler_internals_ui.cc
@@ -4,22 +4,104 @@
#include "chrome/browser/ui/webui/task_scheduler_internals/task_scheduler_internals_ui.h"
+#include <utility>
+
+#include "base/bind.h"
+#include "base/memory/ptr_util.h"
+#include "base/metrics/histogram_base.h"
+#include "base/metrics/histogram_samples.h"
#include "base/task_scheduler/task_scheduler.h"
+#include "base/values.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/url_constants.h"
#include "chrome/grit/task_scheduler_internals_resources.h"
#include "content/public/browser/web_ui_data_source.h"
+#include "content/public/browser/web_ui_message_handler.h"
+
+namespace {
+
+std::unique_ptr<base::Value> SnapshotHistogramToValue(
+ const base::HistogramBase* histogram) {
+ std::unique_ptr<base::ListValue> values =
+ base::MakeUnique<base::ListValue>();
+
+ std::unique_ptr<base::HistogramSamples> samples =
+ histogram->SnapshotSamples();
+ std::unique_ptr<base::SampleCountIterator> iterator = samples->Iterator();
+ while (!iterator->Done()) {
+ base::HistogramBase::Sample min;
+ base::HistogramBase::Sample max;
+ base::HistogramBase::Count count;
+ iterator->Get(&min, &max, &count);
+
+ std::unique_ptr<base::DictionaryValue> bucket =
+ base::MakeUnique<base::DictionaryValue>();
+ bucket->SetInteger("min", min);
+ bucket->SetInteger("max", max);
+ bucket->SetInteger("count", count);
+
+ values->Append(std::move(bucket));
+ iterator->Next();
+ }
+ return std::move(values);
+}
+
+class TaskSchedulerDataHandler : public content::WebUIMessageHandler {
+ public:
+ TaskSchedulerDataHandler() = default;
+
+ // content::WebUIMessageHandler:
+ void RegisterMessages() override {
+ web_ui()->RegisterMessageCallback(
+ "getTaskSchedulerData",
+ base::Bind(&TaskSchedulerDataHandler::GetTaskSchedulerData,
+ base::Unretained(this)));
+ }
+
+ private:
+ void GetTaskSchedulerData(const base::ListValue*) {
+ base::DictionaryValue data;
+
+ base::TaskScheduler* task_scheduler = base::TaskScheduler::GetInstance();
+ data.SetBoolean("instantiated", !!task_scheduler);
+
+ if (task_scheduler) {
+ std::unique_ptr<base::ListValue> histogram_value =
+ base::MakeUnique<base::ListValue>();
+ std::vector<const base::HistogramBase*> histograms =
+ task_scheduler->GetHistograms();
+
+ for (const base::HistogramBase* const histogram : histograms) {
+ std::unique_ptr<base::DictionaryValue> buckets =
+ base::MakeUnique<base::DictionaryValue>();
+ buckets->SetString("name", histogram->histogram_name());
+ buckets->Set("buckets", SnapshotHistogramToValue(histogram));
+ histogram_value->Append(std::move(buckets));
+ }
+
+ data.Set("histograms", std::move(histogram_value));
+ }
+
+ web_ui()->CallJavascriptFunctionUnsafe(
+ "TaskSchedulerInternals.onGetTaskSchedulerData", data);
+ }
+
+ DISALLOW_COPY_AND_ASSIGN(TaskSchedulerDataHandler);
+};
+
+} // namespace
TaskSchedulerInternalsUI::TaskSchedulerInternalsUI(content::WebUI* web_ui)
: content::WebUIController(web_ui) {
+ web_ui->AddMessageHandler(new TaskSchedulerDataHandler());
+
content::WebUIDataSource* html_source =
content::WebUIDataSource::Create(
chrome::kChromeUITaskSchedulerInternalsHost);
-
- html_source->AddString("status", base::TaskScheduler::GetInstance()
- ? "Instantiated"
- : "Not Instantiated");
-
+ html_source->AddResourcePath(
+ "index.css", IDR_TASK_SCHEDULER_INTERNALS_RESOURCES_INDEX_CSS);
+ html_source->AddResourcePath(
+ "index.js", IDR_TASK_SCHEDULER_INTERNALS_RESOURCES_INDEX_JS);
html_source->SetDefaultResource(
IDR_TASK_SCHEDULER_INTERNALS_RESOURCES_INDEX_HTML);
« no previous file with comments | « chrome/browser/resources/task_scheduler_internals/resources.grd ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698