1// 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
12// 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
17namespace 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_
80