17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file. 47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#ifndef CHROME_BROWSER_DIAGNOSTICS_DIAGNOSTICS_CONTROLLER_H_ 67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#define CHROME_BROWSER_DIAGNOSTICS_DIAGNOSTICS_CONTROLLER_H_ 77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/memory/scoped_ptr.h" 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/memory/singleton.h" 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace base { 127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass CommandLine; 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace diagnostics { 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass DiagnosticsWriter; 187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass DiagnosticsModel; 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass DiagnosticsController { 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public: 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch static DiagnosticsController* GetInstance(); 237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Entry point for the diagnostics mode. Returns zero if able to run 257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // diagnostics successfully, regardless of the results of the diagnostics. 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int Run(const base::CommandLine& command_line, DiagnosticsWriter* writer); 277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 283240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Entry point for running recovery based on diagnostics that have already 293240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // been run. In order for this to do anything, Run() must be executed first. 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int RunRecovery(const base::CommandLine& command_line, 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DiagnosticsWriter* writer); 323240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 333240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Returns a model with the results that have accumulated. They can then be 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // queried for their attributes for human consumption later. 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const DiagnosticsModel& GetResults() const; 367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Returns true if there are any results available. 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool HasResults(); 397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Clears any results that have accumulated. After calling this, do not call 417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // GetResults until after Run is called again. 427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void ClearResults(); 437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 44424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Records UMA statistics indicating that a regular Chrome startup happened, 45424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // with no diagnostics or recovery being run. This is necessary to provide a 46424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // denominator for the diagnostics metrics. 47424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) void RecordRegularStartup(); 48424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch private: 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch friend struct DefaultSingletonTraits<DiagnosticsController>; 517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DiagnosticsController(); 537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ~DiagnosticsController(); 547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch scoped_ptr<DiagnosticsModel> model_; 567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DiagnosticsWriter* writer_; 577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DISALLOW_COPY_AND_ASSIGN(DiagnosticsController); 597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}; 607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} // namespace diagnostics 627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif // CHROME_BROWSER_DIAGNOSTICS_DIAGNOSTICS_CONTROLLER_H_ 64