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

Side by Side Diff: services/media/factory_service/mojo_publisher.h

Issue 1986303002: Motown: Use new TimelineTransform and related definitions (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Fixes per feedback. Created 4 years, 7 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 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 SERVICES_MEDIA_FRAMEWORK_MOJO_PUBLISHER_H_
6 #define SERVICES_MEDIA_FRAMEWORK_MOJO_PUBLISHER_H_
7
8 #include <functional>
9 #include <vector>
10
11 namespace mojo {
12 namespace media {
13
14 // Implements pull mode publishing (e.g. MediaPlayer::GetStatus).
15 template <typename TCallback>
16 class MojoPublisher {
17 public:
18 using CallbackRunner = std::function<void(const TCallback&, uint64_t)>;
19
20 // Sets the callback runner. This method must be called before calling Get
21 // or Updated. The callback runner calls a single callback using current
22 // information.
23 void SetCallbackRunner(const CallbackRunner& callback_runner) {
24 DCHECK(callback_runner);
25 callback_runner_ = callback_runner;
26 }
27
28 // Handles a get request from the client. This method should be called from
29 // the mojo 'get' method (e.g. MediaPlayer::GetStatus).
30 void Get(uint64_t version_last_seen, const TCallback& callback) {
31 DCHECK(callback_runner_);
32
33 if (version_last_seen < version_) {
34 callback_runner_(callback, version_);
35 } else {
36 pending_callbacks_.push_back(callback);
37 }
38 }
39
40 // Increments the version number and runs pending callbacks. This method
41 // should be called whenever the published information should be sent to
42 // subscribing clients.
43 void SendUpdates() {
44 DCHECK(callback_runner_);
45
46 ++version_;
47
48 std::vector<TCallback> pending_callbacks;
49 pending_callbacks_.swap(pending_callbacks);
50
51 for (const TCallback& pending_callback : pending_callbacks) {
52 callback_runner_(pending_callback, version_);
53 }
54 }
55
56 private:
57 uint64_t version_ = 1u;
58 std::vector<TCallback> pending_callbacks_;
59 CallbackRunner callback_runner_;
60 };
61
62 } // namespace media
63 } // namespace mojo
64
65 #endif // SERVICES_MEDIA_FRAMEWORK_MOJO_MOJO_ALLOCATOR_H_
OLDNEW
« no previous file with comments | « services/media/factory_service/media_source_impl.h ('k') | services/media/framework_mojo/mojo_formatting.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698