15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef PPAPI_CPP_CORE_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PPAPI_CPP_CORE_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_core.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/// @file 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/// This file defines APIs related to memory management, time, and threads. 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace pp { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CompletionCallback; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Module; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/// APIs related to memory management, time, and threads. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Core { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note that we explicitly don't expose Resource& versions of this function 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // since Resource will normally manage the refcount properly. These should 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be called only when doing manual management on raw PP_Resource handles, 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // which should be fairly rare. 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// AddRefResource() increments the reference count for the provided 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// <code>resource</code>. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// @param[in] resource A <code>PP_Resource</code> corresponding to a 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// resource. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddRefResource(PP_Resource resource) { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) interface_->AddRefResource(resource); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// ReleaseResource() decrements the reference count for the provided 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// <code>resource</code>. The resource will be deallocated if the 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// reference count reaches zero. 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// @param[in] resource A <code>PP_Resource</code> corresponding to a 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// resource. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ReleaseResource(PP_Resource resource) { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) interface_->ReleaseResource(resource); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// GetTime() returns the "wall clock time" according to the 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// browser. 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// @return A <code>PP_Time</code> containing the "wall clock time" according 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// to the browser. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Time GetTime() { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return interface_->GetTime(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// GetTimeTicks() returns the "tick time" according to the browser. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// This clock is used by the browser when passing some event times to the 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// module (for example, using the 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// <code>PP_InputEvent::time_stamp_seconds</code> field). It is not 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// correlated to any actual wall clock time (like GetTime()). Because 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// of this, it will not change if the user changes their computer clock. 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// @return A <code>PP_TimeTicks</code> containing the "tick time" according 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// to the browser. 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_TimeTicks GetTimeTicks() { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return interface_->GetTimeTicks(); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// CallOnMainThread() schedules work to be executed on the main pepper 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// thread after the specified delay. The delay may be 0 to specify a call 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// back as soon as possible. 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// The |result| parameter will just be passed as the second argument to the 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// callback. Many applications won't need this, but it allows a module to 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// emulate calls of some callbacks which do use this value. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// <strong>Note:</strong> CallOnMainThread(), even when used from the main 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// thread with a delay of 0 milliseconds, will never directly invoke the 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// callback. Even in this case, the callback will be scheduled 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// asynchronously. 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// <strong>Note:</strong> If the browser is shutting down or if the module 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// has no instances, then the callback function may not be called. 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// @param[in] delay_in_milliseconds An int32_t delay in milliseconds. 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// @param[in] callback A <code>CompletionCallback</code> callback function 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// that the browser will call after the specified delay. 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// @param[in] result An int32_t that the browser will pass to the given 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// <code>CompletionCallback</code>. 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CallOnMainThread(int32_t delay_in_milliseconds, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CompletionCallback& callback, 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t result = 0); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// IsMainThread() returns true if the current thread is the main pepper 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// thread. 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// This function is useful for implementing sanity checks, and deciding if 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// dispatching using CallOnMainThread() is required. 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// @return true if the current thread is the main pepper thread, otherwise 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /// false. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsMainThread(); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Allow Module to construct. 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class Module; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Only module should make this class so this constructor is private. 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Core(const PPB_Core* inter) : interface_(inter) {} 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Copy and assignment are disallowed. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Core(const Core& other); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Core& operator=(const Core& other); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PPB_Core* interface_; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace pp 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // PPAPI_CPP_CORE_H_ 120