Line data Source code
1 : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* Copyright (c) 2014, Mozilla
3 : *
4 : * Redistribution and use in source and binary forms, with or without
5 : * modification, are permitted provided that the following conditions are
6 : * met:
7 : *
8 : ** Redistributions of source code must retain the above copyright
9 : * notice, this list of conditions and the following disclaimer.
10 : *
11 : ** Redistributions in binary form must reproduce the above copyright
12 : * notice, this list of conditions and the following disclaimer in
13 : * the documentation and/or other materials provided with the
14 : * distribution.
15 : *
16 : ** Neither the name of Google nor the names of its contributors may
17 : * be used to endorse or promote products derived from this software
18 : * without specific prior written permission.
19 : *
20 : * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 : * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 : * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 : * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 : * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 : * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 : * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 : * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 : * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 : * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 : * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 : */
32 :
33 : #ifndef GMP_PLATFORM_h_
34 : #define GMP_PLATFORM_h_
35 :
36 : #include "gmp-errors.h"
37 : #include "gmp-storage.h"
38 : #include <stdint.h>
39 :
40 : /* Platform helper API. */
41 :
42 0 : class GMPTask {
43 : public:
44 : virtual void Destroy() = 0; // Deletes object.
45 0 : virtual ~GMPTask() {}
46 : virtual void Run() = 0;
47 : };
48 :
49 0 : class GMPThread {
50 : public:
51 0 : virtual ~GMPThread() {}
52 : virtual void Post(GMPTask* aTask) = 0;
53 : virtual void Join() = 0; // Deletes object after join completes.
54 : };
55 :
56 : // A re-entrant monitor; can be locked from the same thread multiple times.
57 : // Must be unlocked the same number of times it's locked.
58 0 : class GMPMutex {
59 : public:
60 0 : virtual ~GMPMutex() {}
61 : virtual void Acquire() = 0;
62 : virtual void Release() = 0;
63 : virtual void Destroy() = 0; // Deletes object.
64 : };
65 :
66 : // Time is defined as the number of milliseconds since the
67 : // Epoch (00:00:00 UTC, January 1, 1970).
68 : typedef int64_t GMPTimestamp;
69 :
70 : typedef GMPErr (*GMPCreateThreadPtr)(GMPThread** aThread);
71 : typedef GMPErr (*GMPRunOnMainThreadPtr)(GMPTask* aTask);
72 : typedef GMPErr (*GMPSyncRunOnMainThreadPtr)(GMPTask* aTask);
73 : typedef GMPErr (*GMPCreateMutexPtr)(GMPMutex** aMutex);
74 :
75 : // Call on main thread only.
76 : typedef GMPErr (*GMPCreateRecordPtr)(const char* aRecordName,
77 : uint32_t aRecordNameSize,
78 : GMPRecord** aOutRecord,
79 : GMPRecordClient* aClient);
80 :
81 : // Call on main thread only.
82 : typedef GMPErr (*GMPSetTimerOnMainThreadPtr)(GMPTask* aTask, int64_t aTimeoutMS);
83 : typedef GMPErr (*GMPGetCurrentTimePtr)(GMPTimestamp* aOutTime);
84 :
85 : struct GMPPlatformAPI {
86 : // Increment the version when things change. Can only add to the struct,
87 : // do not change what already exists. Pointers to functions may be NULL
88 : // when passed to plugins, but beware backwards compat implications of
89 : // doing that.
90 : uint16_t version; // Currently version 0
91 :
92 : GMPCreateThreadPtr createthread;
93 : GMPRunOnMainThreadPtr runonmainthread;
94 : GMPSyncRunOnMainThreadPtr syncrunonmainthread;
95 : GMPCreateMutexPtr createmutex;
96 : GMPCreateRecordPtr createrecord;
97 : GMPSetTimerOnMainThreadPtr settimer;
98 : GMPGetCurrentTimePtr getcurrenttime;
99 : };
100 :
101 : #endif // GMP_PLATFORM_h_
|