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

Side by Side Diff: src/trusted/plugin/delayed_callback.h

Issue 7799028: Remove src/trusted/plugin (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client
Patch Set: fix gyp file for necessary -I Created 9 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « src/trusted/plugin/build.scons ('k') | src/trusted/plugin/desc_based_handle.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright (c) 2011 The Native Client Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be
4 * found in the LICENSE file.
5 */
6
7 #ifndef NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_DELAYED_CALLBACK_H_
8 #define NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_DELAYED_CALLBACK_H_
9
10 #include "native_client/src/include/portability.h"
11
12 #include "native_client/src/include/nacl_macros.h"
13 #include "native_client/src/shared/platform/nacl_check.h"
14 #include "ppapi/c/pp_errors.h"
15 #include "ppapi/cpp/completion_callback.h"
16
17 namespace plugin {
18
19 // Delay a "Run(PP_OK)" of a pp::CompletionCallback after exactly N time ticks
20 // have passed. User should not attempt to count beyond N ticks.
21 // It is expected that this is only counted up on "good" code paths
22 // (when there are no errors), so that passing along a status code of
23 // PP_OK makes sense.
24 class DelayedCallback {
25 public:
26 DelayedCallback(pp::CompletionCallback continuation,
27 uint32_t initial_requirement)
28 : required_ticks_(initial_requirement),
29 continuation_(continuation),
30 started_(false) {
31 }
32
33 ~DelayedCallback() { }
34
35 // Advance time, and run the callback if it is finally time.
36 // This must be run on the main thread, since pp callbacks
37 // must be run on the main thread anyway. We also want to
38 // avoid race condtions. If we want to relax the requirement,
39 // we could add locks and use CallOnMainThread.
40 void RunIfTime() {
41 CHECK(required_ticks_ > 0);
42 started_ = true;
43 --required_ticks_;
44 if (0 == required_ticks_) {
45 continuation_.Run(PP_OK);
46 }
47 }
48
49 // Add another requirement before anything has run.
50 void IncrRequirements(uint32_t additional_requirements) {
51 CHECK(started_ == false);
52 required_ticks_ += additional_requirements;
53 }
54
55 private:
56 NACL_DISALLOW_COPY_AND_ASSIGN(DelayedCallback);
57
58 // How many time ticks are left before we run the callback.
59 uint32_t required_ticks_;
60
61 // The continuation to invoke when ticks passed.
62 pp::CompletionCallback continuation_;
63
64 // Some sanity checking to catch when people misuse the library.
65 bool started_;
66 };
67
68 } // namespace plugin
69
70 #endif // NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_DELAYED_CALLBACK_H_
OLDNEW
« no previous file with comments | « src/trusted/plugin/build.scons ('k') | src/trusted/plugin/desc_based_handle.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698