Browse Source

refactor: dynamically search defines from node (#30563)

Cheng Zhao 3 years ago
parent
commit
8699124397

+ 18 - 0
BUILD.gn

@@ -307,6 +307,23 @@ action("electron_fuses") {
   args = rebase_path(outputs)
 }
 
+action("electron_generate_node_defines") {
+  script = "build/generate_node_defines.py"
+
+  inputs = [
+    "//third_party/electron_node/src/tracing/trace_event_common.h",
+    "//third_party/electron_node/src/tracing/trace_event.h",
+    "//third_party/electron_node/src/util.h",
+  ]
+
+  outputs = [
+    "$target_gen_dir/push_and_undef_node_defines.h",
+    "$target_gen_dir/pop_node_defines.h",
+  ]
+
+  args = [ rebase_path(target_gen_dir) ] + rebase_path(inputs)
+}
+
 source_set("electron_lib") {
   configs += [ "//v8:external_startup_data" ]
   configs += [ "//third_party/electron_node:node_internals" ]
@@ -318,6 +335,7 @@ source_set("electron_lib") {
 
   deps = [
     ":electron_fuses",
+    ":electron_generate_node_defines",
     ":electron_js2c",
     ":electron_version_header",
     ":resources",

+ 34 - 0
build/generate_node_defines.py

@@ -0,0 +1,34 @@
+import os
+import re
+import sys
+
+DEFINE_EXTRACT_REGEX = re.compile('^ *# *define (\w*)', re.MULTILINE)
+
+def main(outDir, headers):
+  defines = []
+  for filename in headers:
+    with open(filename, 'r') as f:
+      content = f.read()
+      defines += read_defines(content)
+
+  push_and_undef = ''
+  for define in defines:
+    push_and_undef += '#pragma push_macro("%s")\n' % define
+    push_and_undef += '#undef %s\n' % define
+  with open(os.path.join(outDir, 'push_and_undef_node_defines.h'), 'w') as o:
+    o.write(push_and_undef)
+
+  pop = ''
+  for define in defines:
+    pop += '#pragma pop_macro("%s")\n' % define
+  with open(os.path.join(outDir, 'pop_node_defines.h'), 'w') as o:
+    o.write(pop)
+
+def read_defines(content):
+  defines = []
+  for match in DEFINE_EXTRACT_REGEX.finditer(content):
+    defines.append(match.group(1))
+  return defines
+
+if __name__ == '__main__':
+  main(sys.argv[1], sys.argv[2:])

+ 0 - 1
patches/node/.patches

@@ -10,7 +10,6 @@ feat_add_new_built_with_electron_variable_to_config_gypi.patch
 feat_add_flags_for_low-level_hooks_and_exceptions.patch
 fix_expose_tracing_agent_and_use_tracing_tracingcontroller_instead.patch
 pass_all_globals_through_require.patch
-fixme_comment_trace_event_macro.patch
 build_modify_js2c_py_to_allow_injection_of_original-fs_and_custom_embedder_js.patch
 refactor_allow_embedder_overriding_of_internal_fs_calls.patch
 chore_allow_the_node_entrypoint_to_be_a_builtin_module.patch

+ 0 - 26
patches/node/fixme_comment_trace_event_macro.patch

@@ -1,26 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Nitish Sakhawalkar <[email protected]>
-Date: Tue, 26 Mar 2019 11:28:05 -0700
-Subject: fixme: Comment trace event macro
-
-This broke the build at some point. Does it still? We should probably remove
-this patch and find out!
-
-diff --git a/src/node_internals.h b/src/node_internals.h
-index 8f7929994f3243fbd58b47374dfcadafb1feda8f..c333dc3464d2a23437fa22659d38dd17b6678112 100644
---- a/src/node_internals.h
-+++ b/src/node_internals.h
-@@ -386,10 +386,11 @@ class TraceEventScope {
-   TraceEventScope(const char* category,
-                   const char* name,
-                   void* id) : category_(category), name_(name), id_(id) {
--    TRACE_EVENT_NESTABLE_ASYNC_BEGIN0(category_, name_, id_);
-+    // TRACE_EVENT_NESTABLE_ASYNC_BEGIN0(category_, name_, id_);
-+    (void) category_; (void)name_; (void)id_;
-   }
-   ~TraceEventScope() {
--    TRACE_EVENT_NESTABLE_ASYNC_END0(category_, name_, id_);
-+    // TRACE_EVENT_NESTABLE_ASYNC_END0(category_, name_, id_);
-   }
- 
-  private:

+ 1 - 1
shell/app/node_main.cc

@@ -212,7 +212,7 @@ int NodeMain(int argc, char* argv[]) {
 
       env = node::CreateEnvironment(isolate_data, gin_env.context(),
                                     result.args, result.exec_args);
-      CHECK_NOT_NULL(env);
+      CHECK_NE(nullptr, env);
 
       node::IsolateSettings is;
       node::SetIsolateUpForNode(isolate, is);

+ 0 - 1
shell/browser/javascript_environment.cc

@@ -21,7 +21,6 @@
 #include "shell/browser/microtasks_runner.h"
 #include "shell/common/gin_helper/cleaned_up_at_exit.h"
 #include "shell/common/node_includes.h"
-#include "tracing/trace_event.h"
 
 namespace {
 v8::Isolate* g_isolate;

+ 5 - 79
shell/common/node_includes.h

@@ -5,109 +5,35 @@
 #ifndef SHELL_COMMON_NODE_INCLUDES_H_
 #define SHELL_COMMON_NODE_INCLUDES_H_
 
-#include "base/check.h"
-
 // Include common headers for using node APIs.
 
 #ifdef NODE_SHARED_MODE
 #define BUILDING_NODE_EXTENSION
 #endif
 
-// The following define makes sure that we do not include the macros
-// again. But we still need the tracing functions, so declaring them.
-#define SRC_TRACING_TRACE_EVENT_H_
-
-#pragma push_macro("ASSERT")
-#pragma push_macro("CHECK")
-#pragma push_macro("CHECK_EQ")
-#pragma push_macro("CHECK_GE")
-#pragma push_macro("CHECK_GT")
-#pragma push_macro("CHECK_LE")
-#pragma push_macro("CHECK_LT")
-#pragma push_macro("CHECK_NE")
-#pragma push_macro("DCHECK")
-#pragma push_macro("DCHECK_EQ")
-#pragma push_macro("DCHECK_GE")
-#pragma push_macro("DCHECK_GT")
-#pragma push_macro("DCHECK_LE")
-#pragma push_macro("DCHECK_LT")
-#pragma push_macro("DCHECK_NE")
-#pragma push_macro("DISALLOW_COPY_AND_ASSIGN")
-#pragma push_macro("LIKELY")
-#pragma push_macro("NO_RETURN")
-#pragma push_macro("UNLIKELY")
-
-#undef ASSERT
-#undef CHECK
-#undef CHECK_EQ
-#undef CHECK_GE
-#undef CHECK_GT
-#undef CHECK_LE
-#undef CHECK_LT
-#undef CHECK_NE
-#undef DCHECK
-#undef DCHECK_EQ
-#undef DCHECK_GE
-#undef DCHECK_GT
-#undef DCHECK_LE
-#undef DCHECK_LT
-#undef DCHECK_NE
-#undef DISALLOW_COPY_AND_ASSIGN
-#undef LIKELY
-#undef NO_RETURN
-#undef UNLIKELY
-
 #undef debug_string    // This is defined in macOS SDK in AssertMacros.h.
 #undef require_string  // This is defined in macOS SDK in AssertMacros.h.
 
+#include "electron/push_and_undef_node_defines.h"
+
 #include "env-inl.h"
 #include "env.h"
 #include "node.h"
 #include "node_buffer.h"
 #include "node_errors.h"
 #include "node_internals.h"
+#include "node_native_module_env.h"
 #include "node_options-inl.h"
 #include "node_options.h"
 #include "node_platform.h"
 #include "tracing/agent.h"
 
+#include "electron/pop_node_defines.h"
+
 // Alternative to NODE_MODULE_CONTEXT_AWARE_X.
 // Allows to explicitly register builtin modules instead of using
 // __attribute__((constructor)).
 #define NODE_LINKED_MODULE_CONTEXT_AWARE(modname, regfunc) \
   NODE_MODULE_CONTEXT_AWARE_CPP(modname, regfunc, nullptr, NM_F_LINKED)
 
-#pragma pop_macro("ASSERT")
-#pragma pop_macro("CHECK")
-#pragma pop_macro("CHECK_EQ")
-#pragma pop_macro("CHECK_GE")
-#pragma pop_macro("CHECK_GT")
-#pragma pop_macro("CHECK_LE")
-#pragma pop_macro("CHECK_LT")
-#pragma pop_macro("CHECK_NE")
-#pragma pop_macro("DCHECK")
-#pragma pop_macro("DCHECK_EQ")
-#pragma pop_macro("DCHECK_GE")
-#pragma pop_macro("DCHECK_GT")
-#pragma pop_macro("DCHECK_LE")
-#pragma pop_macro("DCHECK_LT")
-#pragma pop_macro("DCHECK_NE")
-#pragma pop_macro("DISALLOW_COPY_AND_ASSIGN")
-#pragma pop_macro("LIKELY")
-#pragma pop_macro("NO_RETURN")
-#pragma pop_macro("UNLIKELY")
-
-namespace node {
-namespace tracing {
-
-class TraceEventHelper {
- public:
-  static v8::TracingController* GetTracingController();
-  static node::tracing::Agent* GetAgent();
-  static void SetAgent(node::tracing::Agent* agent);
-};
-
-}  // namespace tracing
-}  // namespace node
-
 #endif  // SHELL_COMMON_NODE_INCLUDES_H_

+ 1 - 1
shell/common/node_util.cc

@@ -3,9 +3,9 @@
 // found in the LICENSE file.
 
 #include "shell/common/node_util.h"
+
 #include "base/logging.h"
 #include "shell/common/node_includes.h"
-#include "third_party/electron_node/src/node_native_module_env.h"
 
 namespace electron {