Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / content / browser / battery_status / battery_status_manager_win.cc
index d998d5a..9e717a8 100644 (file)
@@ -5,6 +5,7 @@
 #include "content/browser/battery_status/battery_status_manager_win.h"
 
 #include "base/memory/ref_counted.h"
+#include "base/metrics/histogram.h"
 #include "base/strings/string16.h"
 #include "base/win/message_window.h"
 #include "base/win/windows_version.h"
@@ -19,6 +20,36 @@ typedef BatteryStatusService::BatteryUpdateCallback BatteryCallback;
 
 const wchar_t kWindowClassName[] = L"BatteryStatusMessageWindow";
 
+// This enum is used for histogram. Don't change the order of the existing
+// values.
+enum NumberBatteriesType {
+  UNKNOWN_BATTERIES = 0,
+  NO_BATTERY = 1,
+  ONE_OR_MORE_BATTERIES = 2,
+  BATTERY_TYPES_COUNT = 3,
+};
+
+void UpdateNumberBatteriesHistogram(NumberBatteriesType count) {
+  UMA_HISTOGRAM_ENUMERATION("BatteryStatus.NumberBatteriesWin",
+                            count,
+                            BATTERY_TYPES_COUNT);
+}
+
+void UpdateNumberBatteriesHistogram() {
+  SYSTEM_POWER_STATUS win_status;
+  if (!GetSystemPowerStatus(&win_status)) {
+    UpdateNumberBatteriesHistogram(UNKNOWN_BATTERIES);
+    return;
+  }
+
+  if (win_status.BatteryFlag == 255)
+    UpdateNumberBatteriesHistogram(UNKNOWN_BATTERIES);
+  else if (win_status.BatteryFlag == 128)
+    UpdateNumberBatteriesHistogram(NO_BATTERY);
+  else
+    UpdateNumberBatteriesHistogram(ONE_OR_MORE_BATTERIES);
+}
+
 // Message-only window for handling battery changes on Windows.
 class BatteryStatusObserver
     : public base::RefCountedThreadSafe<BatteryStatusObserver> {
@@ -68,6 +99,8 @@ class BatteryStatusObserver
       // values.
       callback_.Run(blink::WebBatteryStatus());
     }
+
+    UpdateNumberBatteriesHistogram();
   }
 
   void StopOnUI() {