Home | History | Annotate | Download | only in dbus
      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 
     17 namespace dbus {
     18 namespace statistics {
     19 
     20 // Enum to specify what level of detail to show in GetAsString
     21 enum 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
     28 enum 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.
     36 CHROME_DBUS_EXPORT void Initialize();
     37 CHROME_DBUS_EXPORT void Shutdown();
     38 
     39 // Add sent/received calls to the statistics gathering class. These methods
     40 // do nothing unless Initialize() was called.
     41 CHROME_DBUS_EXPORT void AddSentMethodCall(const std::string& service,
     42                                           const std::string& interface,
     43                                           const std::string& method);
     44 CHROME_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.
     49 CHROME_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)
     61 CHROME_DBUS_EXPORT std::string GetAsString(ShowInString show,
     62                                            FormatString format);
     63 
     64 namespace 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.
     68 CHROME_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