blob: 28f334db9955e5555259f3cdbc42fa60dd08a846 [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef MEDIA_BASE_KEY_SYSTEMS_SUPPORT_UMA_H_
#define MEDIA_BASE_KEY_SYSTEMS_SUPPORT_UMA_H_
#include <string>
#include "base/containers/scoped_ptr_hash_map.h"
namespace media {
// Key system support UMA statistics for queried key systems.
// 1. The key system is queried (with or without a MIME type).
// 2. The key system is queried with a MIME type.
// 3. The queried key system is supported (with or without a MIME type). This is
// reported when the key system is supported when queried, regardless of
// whether a MIME type is specified.
// 4. The queried key system is supported with a MIME type. This is reported
// when the key system is supported when queried without a MIME type
// specified.
// Note: All 4 stats are only reported once per renderer process per key system.
class KeySystemsSupportUMA {
public:
KeySystemsSupportUMA();
~KeySystemsSupportUMA();
// Adds a |key_system| for which query/support statistics are reported.
// If you use this function to add key system to report, make sure to update
// AddKeySystemSupportActions() in tools/metrics/actions/extract_actions.py.
void AddKeySystemToReport(const std::string& key_system);
// Reports that the |key_system| is queried. When |has_type|, also reports
// that the |key_system| with a MIME type is queried.
void ReportKeySystemQuery(const std::string& key_system, bool has_type);
// Reports that the queried |key_system| is supported. When |has_type| (a
// a MIME type is specified in the query), also reports that the queried
// |key_system| is supported with that MIME type.
void ReportKeySystemSupport(const std::string& key_system, bool has_type);
private:
class Reporter;
// Returns the Reporter for |key_system|. Returns NULL if |key_system| was not
// added for UMA reporting.
Reporter* GetReporter(const std::string& key_system);
// Key system <-> Reporter map.
typedef base::ScopedPtrHashMap<std::string, scoped_ptr<Reporter>> Reporters;
Reporters reporters_;
};
} // namespace media
#endif // MEDIA_BASE_KEY_SYSTEMS_SUPPORT_UMA_H_