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

Side by Side Diff: unclean_shutdown_collector.cc

Issue 3644007: Crash reporter: collect suspend and resume info from power manager (Closed) Base URL: http://git.chromium.org/git/crash-reporter.git
Patch Set: ABC order, ASSERT_EQ order Created 10 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « unclean_shutdown_collector.h ('k') | unclean_shutdown_collector_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "crash-reporter/unclean_shutdown_collector.h" 5 #include "crash-reporter/unclean_shutdown_collector.h"
6 6
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "crash-reporter/system_logging.h" 9 #include "crash-reporter/system_logging.h"
10 10
11 static const char kUncleanShutdownFile[] = 11 static const char kUncleanShutdownFile[] =
12 "/var/lib/crash_reporter/pending_clean_shutdown"; 12 "/var/lib/crash_reporter/pending_clean_shutdown";
13 13
14 // Files created by power manager used for crash reporting.
15 static const char kPowerdTracePath[] = "/var/lib/power_manager";
16 // Presence of this file indicates that the system was suspended
17 static const char kPowerdSuspended[] = "powerd_suspended";
18 // Presence of this file indicates that the battery was critically low.
19 static const char kPowerdLowBattery[] = "powerd_low_battery";
20
14 UncleanShutdownCollector::UncleanShutdownCollector() 21 UncleanShutdownCollector::UncleanShutdownCollector()
15 : unclean_shutdown_file_(kUncleanShutdownFile) { 22 : unclean_shutdown_file_(kUncleanShutdownFile),
23 powerd_trace_path_(kPowerdTracePath),
24 powerd_suspended_file_(powerd_trace_path_.Append(kPowerdSuspended)),
25 powerd_low_battery_file_(powerd_trace_path_.Append(kPowerdLowBattery)) {
16 } 26 }
17 27
18 UncleanShutdownCollector::~UncleanShutdownCollector() { 28 UncleanShutdownCollector::~UncleanShutdownCollector() {
19 } 29 }
20 30
21 bool UncleanShutdownCollector::Enable() { 31 bool UncleanShutdownCollector::Enable() {
22 FilePath file_path(unclean_shutdown_file_); 32 FilePath file_path(unclean_shutdown_file_);
23 file_util::CreateDirectory(file_path.DirName()); 33 file_util::CreateDirectory(file_path.DirName());
24 if (file_util::WriteFile(file_path, "", 0) != 0) { 34 if (file_util::WriteFile(file_path, "", 0) != 0) {
25 logger_->LogError("Unable to create shutdown check file"); 35 logger_->LogError("Unable to create shutdown check file");
26 return false; 36 return false;
27 } 37 }
28 return true; 38 return true;
29 } 39 }
30 40
31 bool UncleanShutdownCollector::DeleteUncleanShutdownFile() { 41 bool UncleanShutdownCollector::DeleteUncleanShutdownFiles() {
32 if (!file_util::Delete(FilePath(unclean_shutdown_file_), false)) { 42 if (!file_util::Delete(FilePath(unclean_shutdown_file_), false)) {
33 logger_->LogError("Failed to delete unclean shutdown file %s", 43 logger_->LogError("Failed to delete unclean shutdown file %s",
34 unclean_shutdown_file_); 44 unclean_shutdown_file_);
35 return false; 45 return false;
36 } 46 }
47 // Delete power manager trace files if they exist.
48 file_util::Delete(powerd_suspended_file_, false);
49 file_util::Delete(powerd_low_battery_file_, false);
37 return true; 50 return true;
38 } 51 }
39 52
40 bool UncleanShutdownCollector::Collect() { 53 bool UncleanShutdownCollector::Collect() {
41 FilePath unclean_file_path(unclean_shutdown_file_); 54 FilePath unclean_file_path(unclean_shutdown_file_);
42 if (!file_util::PathExists(unclean_file_path)) { 55 if (!file_util::PathExists(unclean_file_path)) {
43 return false; 56 return false;
44 } 57 }
45 logger_->LogWarning("Last shutdown was not clean"); 58 logger_->LogWarning("Last shutdown was not clean");
46 DeleteUncleanShutdownFile(); 59 if (DeadBatteryCausedUncleanShutdown()) {
60 DeleteUncleanShutdownFiles();
61 return false;
62 }
63 DeleteUncleanShutdownFiles();
47 64
48 if (is_feedback_allowed_function_()) { 65 if (is_feedback_allowed_function_()) {
49 count_crash_function_(); 66 count_crash_function_();
50 } 67 }
51 return true; 68 return true;
52 } 69 }
53 70
54 bool UncleanShutdownCollector::Disable() { 71 bool UncleanShutdownCollector::Disable() {
55 logger_->LogInfo("Clean shutdown signalled"); 72 logger_->LogInfo("Clean shutdown signalled");
56 return DeleteUncleanShutdownFile(); 73 return DeleteUncleanShutdownFiles();
57 } 74 }
75
76 bool UncleanShutdownCollector::DeadBatteryCausedUncleanShutdown()
77 {
78 // Check for case of battery running out while suspended.
79 if (file_util::PathExists(powerd_suspended_file_)) {
80 logger_->LogInfo("Unclean shutdown occurred while suspended. Not counting "
81 "toward unclean shutdown statistic.");
82 return true;
83 }
84 // Check for case of battery running out after resuming from a low-battery
85 // suspend.
86 if (file_util::PathExists(powerd_low_battery_file_)) {
87 logger_->LogInfo("Unclean shutdown occurred while running with battery "
88 "critically low. Not counting toward unclean shutdown "
89 "statistic.");
90 return true;
91 }
92 return false;
93 }
OLDNEW
« no previous file with comments | « unclean_shutdown_collector.h ('k') | unclean_shutdown_collector_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698