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

Unified Diff: ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_graphics_2d.cc

Issue 7740013: Cloning a bunch of stuff from the native_client repository at r6528 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 4 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
Index: ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_graphics_2d.cc
===================================================================
--- ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_graphics_2d.cc (revision 0)
+++ ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_graphics_2d.cc (revision 0)
@@ -0,0 +1,183 @@
+// Copyright (c) 2011 The Native Client Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "native_client/src/shared/ppapi_proxy/plugin_ppb_graphics_2d.h"
+
+#include <stdio.h>
+#include <string.h>
+#include "native_client/src/include/portability.h"
+#include "native_client/src/shared/ppapi_proxy/plugin_callback.h"
+#include "native_client/src/shared/ppapi_proxy/plugin_globals.h"
+#include "native_client/src/shared/ppapi_proxy/plugin_upcall.h"
+#include "native_client/src/shared/ppapi_proxy/utility.h"
+#include "native_client/src/shared/srpc/nacl_srpc.h"
+#include "ppapi/c/pp_completion_callback.h"
+#include "ppapi/c/pp_errors.h"
+#include "ppapi/c/pp_rect.h"
+#include "ppapi/c/pp_size.h"
+#include "ppapi/c/ppb_graphics_2d.h"
+#include "srpcgen/ppb_rpc.h"
+#include "srpcgen/upcall.h"
+
+namespace ppapi_proxy {
+
+namespace {
+
+const nacl_abi_size_t kPPSizeBytes =
+ static_cast<nacl_abi_size_t>(sizeof(struct PP_Size));
+const nacl_abi_size_t kPPPointBytes =
+ static_cast<nacl_abi_size_t>(sizeof(struct PP_Point));
+const nacl_abi_size_t kPPRectBytes =
+ static_cast<nacl_abi_size_t>(sizeof(struct PP_Rect));
+
+PP_Resource Create(PP_Instance instance,
+ const struct PP_Size* size,
+ PP_Bool is_always_opaque) {
+ DebugPrintf("PPB_Graphics2D::Create: instance=%"NACL_PRIu32"\n", instance);
+ char* size_as_char_ptr =
+ reinterpret_cast<char*>(const_cast<struct PP_Size*>(size));
+ int32_t is_always_opaque_as_int = static_cast<int32_t>(is_always_opaque);
+ PP_Resource resource = kInvalidResourceId;
+ NaClSrpcError srpc_result =
+ PpbGraphics2DRpcClient::PPB_Graphics2D_Create(
+ GetMainSrpcChannel(),
+ instance,
+ kPPSizeBytes,
+ size_as_char_ptr,
+ is_always_opaque_as_int,
+ &resource);
+ DebugPrintf("PPB_Graphics2D::Create: %s\n", NaClSrpcErrorString(srpc_result));
+ if (srpc_result == NACL_SRPC_RESULT_OK) {
+ scoped_refptr<PluginGraphics2D> graphics_2d =
+ PluginResource::AdoptAs<PluginGraphics2D>(resource);
+ if (graphics_2d.get()) {
+ return resource;
+ }
+ }
+ return kInvalidResourceId;
+}
+
+PP_Bool IsGraphics2D(PP_Resource resource) {
+ DebugPrintf("PPB_Graphics2D::IsGraphics2D: resource=%"NACL_PRIu32"\n",
+ resource);
+ return PluginResource::GetAs<PluginGraphics2D>(resource).get()
+ ? PP_TRUE : PP_FALSE;
+}
+
+PP_Bool Describe(PP_Resource graphics_2d,
+ struct PP_Size* size,
+ PP_Bool* is_always_opaque) {
+ DebugPrintf("PPB_Graphics2D::Describe: graphics_2d=%"NACL_PRIu32"\n",
+ graphics_2d);
+ if (size == NULL || is_always_opaque == NULL) {
+ return PP_FALSE;
+ }
+ int32_t is_always_opaque_as_int;
+ nacl_abi_size_t size_ret = kPPSizeBytes;
+ int32_t result;
+ NaClSrpcError srpc_result =
+ PpbGraphics2DRpcClient::PPB_Graphics2D_Describe(
+ GetMainSrpcChannel(),
+ graphics_2d,
+ &size_ret,
+ reinterpret_cast<char*>(size),
+ &is_always_opaque_as_int,
+ &result);
+ DebugPrintf("PPB_Graphics2D::Describe: %s\n",
+ NaClSrpcErrorString(srpc_result));
+ if (srpc_result == NACL_SRPC_RESULT_OK || size_ret != kPPSizeBytes) {
+ *is_always_opaque = is_always_opaque_as_int ? PP_TRUE : PP_FALSE;
+ return result ? PP_TRUE : PP_FALSE;
+ } else {
+ return PP_FALSE;
+ }
+}
+
+void PaintImageData(PP_Resource graphics_2d,
+ PP_Resource image,
+ const struct PP_Point* top_left,
+ const struct PP_Rect* src_rect) {
+ DebugPrintf("PPB_Graphics2D::PaintImageData: graphics_2d=%"NACL_PRIu32"\n",
+ graphics_2d);
+ nacl_abi_size_t rect_size = kPPRectBytes;
+ if (src_rect == NULL) { // Corresponds to the entire image.
+ rect_size = 0;
+ }
+ NaClSrpcError srpc_result =
+ PpbGraphics2DRpcClient::PPB_Graphics2D_PaintImageData(
+ GetMainSrpcChannel(),
+ graphics_2d,
+ image,
+ kPPPointBytes,
+ reinterpret_cast<char*>(const_cast<struct PP_Point*>(top_left)),
+ rect_size,
+ reinterpret_cast<char*>(const_cast<struct PP_Rect*>(src_rect)));
+ DebugPrintf("PPB_Graphics2D::PaintImageData: %s\n",
+ NaClSrpcErrorString(srpc_result));
+}
+
+void Scroll(PP_Resource graphics_2d,
+ const struct PP_Rect* clip_rect,
+ const struct PP_Point* amount) {
+ DebugPrintf("PPB_Graphics2D::Scroll: graphics_2d=%"NACL_PRIu32"\n",
+ graphics_2d);
+ nacl_abi_size_t rect_size = kPPRectBytes;
+ if (clip_rect == NULL) { // Corresponds to the entire graphics region.
+ rect_size = 0;
+ }
+ NaClSrpcError srpc_result = PpbGraphics2DRpcClient::PPB_Graphics2D_Scroll(
+ GetMainSrpcChannel(),
+ graphics_2d,
+ rect_size,
+ reinterpret_cast<char*>(const_cast<struct PP_Rect*>(clip_rect)),
+ kPPPointBytes,
+ reinterpret_cast<char*>(const_cast<struct PP_Point*>(amount)));
+ DebugPrintf("PPB_Graphics2D::Scroll: %s\n", NaClSrpcErrorString(srpc_result));
+}
+
+void ReplaceContents(PP_Resource graphics_2d, PP_Resource image) {
+ DebugPrintf("PPB_Graphics2D::ReplaceContents: graphics_2d=%"NACL_PRIu32"\n",
+ graphics_2d);
+ NaClSrpcError srpc_result =
+ PpbGraphics2DRpcClient::PPB_Graphics2D_ReplaceContents(
+ GetMainSrpcChannel(), graphics_2d, image);
+ DebugPrintf("PPB_Graphics2D::ReplaceContents: %s\n",
+ NaClSrpcErrorString(srpc_result));
+}
+
+int32_t Flush(PP_Resource graphics_2d,
+ struct PP_CompletionCallback callback) {
+ DebugPrintf("PPB_Graphics2D::Flush: graphics_2d=%"NACL_PRIu32"\n",
+ graphics_2d);
+ int32_t callback_id =
+ CompletionCallbackTable::Get()->AddCallback(callback);
+ if (callback_id == 0) // Just like Chrome, for now disallow blocking calls.
+ return PP_ERROR_BADARGUMENT;
+
+ int32_t pp_error;
+ NaClSrpcError srpc_result =
+ PpbGraphics2DRpcClient::PPB_Graphics2D_Flush(
+ GetMainSrpcChannel(), graphics_2d, callback_id, &pp_error);
+ DebugPrintf("PPB_Graphics2D::Flush: %s\n", NaClSrpcErrorString(srpc_result));
+ if (srpc_result != NACL_SRPC_RESULT_OK)
+ pp_error = PP_ERROR_FAILED;
+ return MayForceCallback(callback, pp_error);
+}
+
+} // namespace
+
+const PPB_Graphics2D* PluginGraphics2D::GetInterface() {
+ static const PPB_Graphics2D graphics_2d_interface = {
+ Create,
+ IsGraphics2D,
+ Describe,
+ PaintImageData,
+ Scroll,
+ ReplaceContents,
+ Flush,
+ };
+ return &graphics_2d_interface;
+}
+
+} // namespace ppapi_proxy

Powered by Google App Engine
This is Rietveld 408576698