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.
4
5#include "ppapi/cpp/private/uma_private.h"
6
7#include "ppapi/c/pp_errors.h"
8#include "ppapi/c/private/ppb_uma_private.h"
9#include "ppapi/cpp/completion_callback.h"
10#include "ppapi/cpp/module_impl.h"
11#include "ppapi/cpp/var.h"
12
13namespace pp {
14
15namespace {
16
17template <> const char* interface_name<PPB_UMA_Private_0_3>() {
18  return PPB_UMA_PRIVATE_INTERFACE_0_3;
19}
20
21}  // namespace
22
23UMAPrivate::UMAPrivate() {
24}
25
26UMAPrivate::UMAPrivate(
27    const InstanceHandle& instance) : instance_(instance.pp_instance()) {
28}
29
30UMAPrivate::~UMAPrivate() {
31}
32
33bool UMAPrivate::IsAvailable() {
34  return has_interface<PPB_UMA_Private_0_3>();
35}
36
37void UMAPrivate::HistogramCustomTimes(const std::string& name,
38                                      int64_t sample,
39                                      int64_t min,
40                                      int64_t max,
41                                      uint32_t bucket_count) {
42  if (!IsAvailable())
43    return;
44  get_interface<PPB_UMA_Private_0_3>()->
45      HistogramCustomTimes(instance_, pp::Var(name).pp_var(),
46                           sample, min, max, bucket_count);
47}
48
49void UMAPrivate::HistogramCustomCounts(const std::string& name,
50                                       int32_t sample,
51                                       int32_t min,
52                                       int32_t max,
53                                       uint32_t bucket_count) {
54  if (!IsAvailable())
55    return;
56  get_interface<PPB_UMA_Private_0_3>()->
57      HistogramCustomCounts(instance_, pp::Var(name).pp_var(),
58                            sample, min, max, bucket_count);
59}
60
61void UMAPrivate::HistogramEnumeration(const std::string& name,
62                                      int32_t sample,
63                                      int32_t boundary_value) {
64  if (!IsAvailable())
65    return;
66  get_interface<PPB_UMA_Private_0_3>()->
67      HistogramEnumeration(instance_, pp::Var(name).pp_var(),
68                           sample, boundary_value);
69}
70
71int32_t UMAPrivate::IsCrashReportingEnabled(const CompletionCallback& cc) {
72  if (!IsAvailable())
73    return PP_ERROR_NOINTERFACE;
74
75  return get_interface<PPB_UMA_Private_0_3>()->
76      IsCrashReportingEnabled(instance_, cc.pp_completion_callback());
77}
78
79}  // namespace pp
80