OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright (c) 2011 The Chromium 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 // A collection of debugging related interfaces. | |
8 | |
9 #ifndef NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_UTILITY_H_ | |
10 #define NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_UTILITY_H_ | |
11 | |
12 #include "native_client/src/include/nacl_macros.h" | |
13 #include "native_client/src/include/portability.h" | |
14 #include "native_client/src/shared/platform/nacl_threads.h" | |
15 #include "native_client/src/shared/platform/nacl_time.h" | |
16 #include "ppapi/c/private/pp_file_handle.h" | |
17 #include "ppapi/c/private/ppb_nacl_private.h" | |
18 | |
19 #define SRPC_PLUGIN_DEBUG 1 | |
20 | |
21 namespace plugin { | |
22 | |
23 // Tests that a string is a valid JavaScript identifier. According to the | |
24 // ECMAScript spec, this should be done in terms of unicode character | |
25 // categories. For now, we are simply limiting identifiers to the ASCII | |
26 // subset of that spec. If successful, it returns the length of the | |
27 // identifier in the location pointed to by length (if it is not NULL). | |
28 // TODO(sehr): add Unicode identifier support. | |
29 bool IsValidIdentifierString(const char* strval, uint32_t* length); | |
30 | |
31 const PPB_NaCl_Private* GetNaClInterface(); | |
32 void SetNaClInterface(const PPB_NaCl_Private* nacl_interface); | |
33 | |
34 void CloseFileHandle(PP_FileHandle file_handle); | |
35 | |
36 // Converts a PP_FileHandle to a POSIX file descriptor. | |
37 int32_t ConvertFileDescriptor(PP_FileHandle handle, bool read_only); | |
38 | |
39 // Debugging print utility | |
40 extern int gNaClPluginDebugPrintEnabled; | |
41 extern int NaClPluginPrintLog(const char *format, ...); | |
42 extern int NaClPluginDebugPrintCheckEnv(); | |
43 #if SRPC_PLUGIN_DEBUG | |
44 #define INIT_PLUGIN_LOGGING() do { \ | |
45 if (-1 == ::plugin::gNaClPluginDebugPrintEnabled) { \ | |
46 ::plugin::gNaClPluginDebugPrintEnabled = \ | |
47 ::plugin::NaClPluginDebugPrintCheckEnv(); \ | |
48 } \ | |
49 } while (0) | |
50 | |
51 #define PLUGIN_PRINTF(args) do { \ | |
52 INIT_PLUGIN_LOGGING(); \ | |
53 if (0 != ::plugin::gNaClPluginDebugPrintEnabled) { \ | |
54 ::plugin::NaClPluginPrintLog("PLUGIN %" NACL_PRIu64 ": ", \ | |
55 NaClGetTimeOfDayMicroseconds()); \ | |
56 ::plugin::NaClPluginPrintLog args; \ | |
57 } \ | |
58 } while (0) | |
59 | |
60 // MODULE_PRINTF is used in the module because PLUGIN_PRINTF uses a | |
61 // a timer that may not yet be initialized. | |
62 #define MODULE_PRINTF(args) do { \ | |
63 INIT_PLUGIN_LOGGING(); \ | |
64 if (0 != ::plugin::gNaClPluginDebugPrintEnabled) { \ | |
65 ::plugin::NaClPluginPrintLog("MODULE: "); \ | |
66 ::plugin::NaClPluginPrintLog args; \ | |
67 } \ | |
68 } while (0) | |
69 #else | |
70 # define PLUGIN_PRINTF(args) do { if (0) { printf args; } } while (0) | |
71 # define MODULE_PRINTF(args) do { if (0) { printf args; } } while (0) | |
72 /* allows DCE but compiler can still do format string checks */ | |
73 #endif | |
74 | |
75 } // namespace plugin | |
76 | |
77 #endif // NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_UTILITY_H_ | |
OLD | NEW |