1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chromeos/device_event_log.h"
9 #include "base/logging.h"
10 #include "chromeos/device_event_log_impl.h"
14 namespace device_event_log
{
18 const size_t kDefaultMaxEntries
= 4000;
20 const int kSlowMethodThresholdMs
= 10;
21 const int kVerySlowMethodThresholdMs
= 50;
23 DeviceEventLogImpl
* g_device_event_log
= NULL
;
27 const LogLevel kDefaultLogLevel
= LOG_LEVEL_EVENT
;
29 void Initialize(size_t max_entries
) {
30 CHECK(!g_device_event_log
);
32 max_entries
= kDefaultMaxEntries
;
33 g_device_event_log
= new DeviceEventLogImpl(max_entries
);
37 delete g_device_event_log
;
38 g_device_event_log
= NULL
;
41 void AddEntry(const char* file
,
45 const std::string
& event
) {
46 if (g_device_event_log
) {
47 g_device_event_log
->AddEntry(file
, line
, type
, level
, event
);
49 DeviceEventLogImpl::SendToVLogOrErrorLog(file
, line
, type
, level
, event
);
53 void AddEntryWithDescription(const char* file
,
57 const std::string
& event
,
58 const std::string
& desc
) {
59 std::string event_with_desc
= event
;
61 event_with_desc
+= ": " + desc
;
62 AddEntry(file
, line
, type
, level
, event_with_desc
);
65 std::string
GetAsString(StringOrder order
,
66 const std::string
& format
,
67 const std::string
& types
,
70 if (!g_device_event_log
)
71 return "DeviceEventLog not initialized.";
72 return g_device_event_log
->GetAsString(order
, format
, types
, max_level
,
78 DeviceEventLogInstance::DeviceEventLogInstance(const char* file
,
80 device_event_log::LogType type
,
81 device_event_log::LogLevel level
)
82 : file_(file
), line_(line
), type_(type
), level_(level
) {
85 DeviceEventLogInstance::~DeviceEventLogInstance() {
86 device_event_log::AddEntry(file_
, line_
, type_
, level_
, stream_
.str());
89 ScopedDeviceLogIfSlow::ScopedDeviceLogIfSlow(LogType type
,
91 const std::string
& name
)
92 : file_(file
), type_(type
), name_(name
) {
95 ScopedDeviceLogIfSlow::~ScopedDeviceLogIfSlow() {
96 if (timer_
.Elapsed().InMilliseconds() >= kSlowMethodThresholdMs
) {
97 LogLevel
level(LOG_LEVEL_DEBUG
);
98 if (timer_
.Elapsed().InMilliseconds() >= kVerySlowMethodThresholdMs
)
99 level
= LOG_LEVEL_ERROR
;
100 DEVICE_LOG(type_
, level
) << "@@@ Slow method: " << file_
<< ":" << name_
101 << ": " << timer_
.Elapsed().InMilliseconds()
106 } // namespace internal
108 } // namespace device_event_log
110 } // namespace chromeos