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

Unified Diff: chrome/browser/chromeos/system/statistics_provider.cc

Issue 11549025: Read the ChromeOS channel info earlier during startup. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years 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/chromeos/system/statistics_provider.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/system/statistics_provider.cc
===================================================================
--- chrome/browser/chromeos/system/statistics_provider.cc (revision 172608)
+++ chrome/browser/chromeos/system/statistics_provider.cc (working copy)
@@ -70,6 +70,7 @@
class StatisticsProviderImpl : public StatisticsProvider {
public:
// StatisticsProvider implementation:
+ virtual void Init() OVERRIDE;
virtual bool GetMachineStatistic(const std::string& name,
std::string* result) OVERRIDE;
@@ -80,20 +81,40 @@
StatisticsProviderImpl();
+ // Loads the machine info file, which is necessary to get the Chrome channel.
+ // Treat MachineOSInfoFile specially, as distribution channel information
+ // (stable, beta, dev, canary) is required at earlier stage than everything
+ // else. Rather than posting a delayed task, read and parse the machine OS
+ // info file immediately.
+ void LoadMachineOSInfoFile();
+
// Starts loading the machine statistcs.
void StartLoadingMachineStatistics();
// Loads the machine statistcs by examining the system.
void LoadMachineStatistics();
+ bool initialized_;
NameValuePairsParser::NameValueMap machine_info_;
base::WaitableEvent on_statistics_loaded_;
DISALLOW_COPY_AND_ASSIGN(StatisticsProviderImpl);
};
+void StatisticsProviderImpl::Init() {
+ DCHECK(!initialized_);
+ initialized_ = true;
+
+ // Load the machine info file immediately to get the channel info and delay
+ // loading the remaining statistics.
+ LoadMachineOSInfoFile();
+ StartLoadingMachineStatistics();
+}
+
bool StatisticsProviderImpl::GetMachineStatistic(
const std::string& name, std::string* result) {
+ DCHECK(initialized_);
+
VLOG(1) << "Statistic is requested for " << name;
// Block if the statistics are not loaded yet. Per LOG(WARNING) below,
// the statistics are loaded before requested as of now. For regular
@@ -129,11 +150,26 @@
// manual_reset needs to be true, as we want to keep the signaled state.
StatisticsProviderImpl::StatisticsProviderImpl()
- : on_statistics_loaded_(true /* manual_reset */,
+ : initialized_(false),
+ on_statistics_loaded_(true /* manual_reset */,
false /* initially_signaled */) {
- StartLoadingMachineStatistics();
}
+void StatisticsProviderImpl::LoadMachineOSInfoFile() {
+ NameValuePairsParser parser(&machine_info_);
+ if (parser.GetNameValuePairsFromFile(FilePath(kMachineOSInfoFile),
+ kMachineOSInfoEq,
+ kMachineOSInfoDelim)) {
+#if defined(GOOGLE_CHROME_BUILD)
+ const char kChromeOSReleaseTrack[] = "CHROMEOS_RELEASE_TRACK";
+ NameValuePairsParser::NameValueMap::iterator iter =
+ machine_info_.find(kChromeOSReleaseTrack);
+ if (iter != machine_info_.end())
+ chrome::VersionInfo::SetChannel(iter->second);
+#endif
+ }
+}
+
void StatisticsProviderImpl::StartLoadingMachineStatistics() {
VLOG(1) << "Started loading statistics";
BrowserThread::PostBlockingPoolTask(
@@ -167,37 +203,11 @@
parser.GetNameValuePairsFromFile(FilePath(kEchoCouponFile),
kEchoCouponEq,
kEchoCouponDelim);
- parser.GetNameValuePairsFromFile(FilePath(kMachineOSInfoFile),
- kMachineOSInfoEq,
- kMachineOSInfoDelim);
parser.GetNameValuePairsFromFile(FilePath(kVpdFile), kVpdEq, kVpdDelim);
// Finished loading the statistics.
on_statistics_loaded_.Signal();
VLOG(1) << "Finished loading statistics";
-
-#if defined(GOOGLE_CHROME_BUILD)
- // TODO(kochi): This is for providing a channel information to
- // chrome::VersionInfo::GetChannel()/GetVersionStringModifier(),
- // but this is still late for some early customers such as
- // prerender::ConfigurePrefetchAndPrerender() and
- // ThreadWatcherList::ParseCommandLine().
- // See http://crbug.com/107333 .
- const char kChromeOSReleaseTrack[] = "CHROMEOS_RELEASE_TRACK";
- std::string channel;
- if (GetMachineStatistic(kChromeOSReleaseTrack, &channel)) {
- chrome::VersionInfo::SetChannel(channel);
- // Set the product channel for crash reports. We can't just do this in
- // ChromeBrowserMainParts::PreCreateThreads like we do for Linux because
- // the FILE thread hasn't been created yet there so we can't possibly
- // have read this yet. Note that this string isn't exactly the same as
- // 'channel', it's been parsed to be consistent with other platforms
- // (eg. "canary-channel" becomes "canary", "testimage-channel" becomes
- // "unknown").
- child_process_logging::SetChannel(
- chrome::VersionInfo::GetVersionStringModifier());
- }
-#endif
}
StatisticsProviderImpl* StatisticsProviderImpl::GetInstance() {
@@ -209,6 +219,9 @@
class StatisticsProviderStubImpl : public StatisticsProvider {
public:
// StatisticsProvider implementation:
+ virtual void Init() OVERRIDE {
+ }
+
virtual bool GetMachineStatistic(const std::string& name,
std::string* result) OVERRIDE {
if (name == "CHROMEOS_RELEASE_BOARD") {
« no previous file with comments | « chrome/browser/chromeos/system/statistics_provider.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698