blob: e0355582aab1c1a865dc1e8cbadfdcba24f7be9e [file] [log] [blame]
stevenjb@chromium.org3199bd12012-11-15 06:03:29 +09001// Copyright (c) 2012 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.
4
5#ifndef DBUS_DBUS_STATISTICS_H_
6#define DBUS_DBUS_STATISTICS_H_
7
8#include <string>
9
10#include "dbus/dbus_export.h"
11
stevenjb@chromium.orgfa0b3232013-01-09 13:41:04 +090012// The functions defined here are used to gather DBus statistics, and
13// provide them in a format convenient for debugging. These functions are only
14// valid when called from the main thread (the thread which Initialize() was
15// called from). Calls from other threads will be ignored.
16
stevenjb@chromium.org3199bd12012-11-15 06:03:29 +090017namespace dbus {
18namespace statistics {
19
20// Enum to specify what level of detail to show in GetAsString
21enum ShowInString {
22 SHOW_SERVICE = 0, // Service totals only
23 SHOW_INTERFACE = 1, // Service + interface totals
24 SHOW_METHOD = 2, // Service + interface + method totals
25};
26
27// Enum to specify how to format the display in GetAsString
28enum FormatString {
29 FORMAT_TOTALS = 0, // Raw totals only
30 FORMAT_PER_MINUTE = 1, // Per-minute only
31 FORMAT_ALL = 2 // Include all format details
32};
33
34// Initializes / shuts down dbus statistics gathering. Calling Initialize
35// more than once will reset the statistics.
36CHROME_DBUS_EXPORT void Initialize();
37CHROME_DBUS_EXPORT void Shutdown();
38
39// Add sent/received calls to the statistics gathering class. These methods
40// do nothing unless Initialize() was called.
41CHROME_DBUS_EXPORT void AddSentMethodCall(const std::string& service,
42 const std::string& interface,
43 const std::string& method);
44CHROME_DBUS_EXPORT void AddReceivedSignal(const std::string& service,
45 const std::string& interface,
46 const std::string& method);
47// Track synchronous calls independently since we want to highlight
48// (and remove) these.
49CHROME_DBUS_EXPORT void AddBlockingSentMethodCall(const std::string& service,
50 const std::string& interface,
51 const std::string& method);
52
53// Output the calls into a formatted string. |show| determines what level
54// of detail to show: one line per service, per interface, or per method.
55// If |show_per_minute| is true include per minute stats.
56// Example output for SHOW_METHOD, FORMAT_TOTALS:
57// org.chromium.Mtpd.EnumerateStorage: Sent: 100
58// org.chromium.Mtpd.MTPStorageSignal: Received: 20
59// Example output for SHOW_INTERFACE, FORMAT_ALL:
60// org.chromium.Mtpd: Sent: 100 (10/min) Received: 20 (2/min)
61CHROME_DBUS_EXPORT std::string GetAsString(ShowInString show,
62 FormatString format);
63
64namespace testing {
65// Sets |sent| to the number of sent calls, |received| to the number of
66// received calls, and |blocking| to the number of sent blocking calls for
67// service+interface+method. Used in unittests.
68CHROME_DBUS_EXPORT bool GetCalls(const std::string& service,
69 const std::string& interface,
70 const std::string& method,
71 int* sent,
72 int* received,
73 int* blocking);
74} // namespace testing
75
76} // namespace statistics
77} // namespace dbus
78
79#endif // DBUS_DBUS_STATISTICS_H_