Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(412)

Unified Diff: content/browser/media/media_internals.h

Issue 1169983003: media-internals: Store updates when cannot update. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments addressed Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | content/browser/media/media_internals.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/media/media_internals.h
diff --git a/content/browser/media/media_internals.h b/content/browser/media/media_internals.h
index 72efdd6b5e93d05d12289f1f5af63dc3989d6993..8eeb72939f1e7dc69664ac85f5acc242a2214744 100644
--- a/content/browser/media/media_internals.h
+++ b/content/browser/media/media_internals.h
@@ -5,6 +5,8 @@
#ifndef CONTENT_BROWSER_MEDIA_MEDIA_INTERNALS_H_
#define CONTENT_BROWSER_MEDIA_MEDIA_INTERNALS_H_
+#include <list>
+#include <map>
#include <string>
#include <vector>
@@ -15,6 +17,8 @@
#include "base/synchronization/lock.h"
#include "base/values.h"
#include "content/common/content_export.h"
+#include "content/public/browser/notification_observer.h"
+#include "content/public/browser/notification_registrar.h"
#include "media/audio/audio_logging.h"
#include "media/base/media_log.h"
#include "media/video/capture/video_capture_device_info.h"
@@ -28,7 +32,8 @@ namespace content {
// This class stores information about currently active media.
class CONTENT_EXPORT MediaInternals
- : NON_EXPORTED_BASE(public media::AudioLogFactory) {
+ : NON_EXPORTED_BASE(public media::AudioLogFactory),
+ public NotificationObserver {
public:
// Called with the update string.
typedef base::Callback<void(const base::string16&)> UpdateCallback;
@@ -37,6 +42,11 @@ class CONTENT_EXPORT MediaInternals
~MediaInternals() override;
+ // NotificationObserver implementation.
+ void Observe(int type,
+ const NotificationSource& source,
+ const NotificationDetails& details) override;
+
// Called when a MediaEvent occurs.
void OnMediaEvents(int render_process_id,
const std::vector<media::MediaLogEvent>& events);
@@ -50,6 +60,9 @@ class CONTENT_EXPORT MediaInternals
// thread.
bool CanUpdate();
+ // Replay all saved media events.
+ void SendHistoricalMediaEvents();
+
// Sends all audio cached data to each registered UpdateCallback.
void SendAudioStreamData();
@@ -80,12 +93,21 @@ class CONTENT_EXPORT MediaInternals
friend class MediaInternalsTest;
friend struct base::DefaultLazyInstanceTraits<MediaInternals>;
+ // Pending events for a particular process.
+ using PendingEvents = std::list<media::MediaLogEvent>;
+
+ // The maps between process ID and PendingEvents.
+ using PendingEventsMap = std::map<int, PendingEvents>;
+
MediaInternals();
// Sends |update| to each registered UpdateCallback. Safe to call from any
// thread, but will forward to the IO thread.
void SendUpdate(const base::string16& update);
+ // Saves |event| so that it can be sent later in SendHistoricalMediaEvents().
+ void SaveEvent(int process_id, const media::MediaLogEvent& event);
+
// Caches |value| under |cache_key| so that future SendAudioLogUpdate() calls
// will include the current data. Calls JavaScript |function|(|value|) for
// each registered UpdateCallback.
@@ -106,9 +128,12 @@ class CONTENT_EXPORT MediaInternals
// Must only be accessed on the IO thread.
base::ListValue video_capture_capabilities_cached_data_;
+ NotificationRegistrar registrar_;
+
// All variables below must be accessed under |lock_|.
base::Lock lock_;
bool can_update_;
+ PendingEventsMap pending_events_map_;
base::DictionaryValue audio_streams_cached_data_;
int owner_ids_[AUDIO_COMPONENT_MAX];
scoped_ptr<MediaInternalsUMAHandler> uma_handler_;
« no previous file with comments | « no previous file | content/browser/media/media_internals.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698