Commit 31e46450 authored by Yuki Shiino's avatar Yuki Shiino Committed by Commit Bot

IDL compiler: Optimize compilation (make_copy + cPickle)

Bug: 839389
Change-Id: Idbbec4740bc7b2ded6d2149206f70740a9acb2f4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2050298Reviewed-by: default avatarHitoshi Yoshida <peria@chromium.org>
Commit-Queue: Yuki Shiino <yukishiino@chromium.org>
Cr-Commit-Position: refs/heads/master@{#740949}
parent 8a8cc4d8
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
# found in the LICENSE file. # found in the LICENSE file.
import os import os
import pickle import cPickle as pickle # 'cPickle' is faster than 'pickle'
def read_pickle_file(filepath): def read_pickle_file(filepath):
......
...@@ -115,6 +115,11 @@ class IdlCompiler(object): ...@@ -115,6 +115,11 @@ class IdlCompiler(object):
return Database(self._db) return Database(self._db)
def _maybe_make_copy(self, ir):
# You can make this function return make_copy(ir) for debugging
# purpose, etc.
return ir # Skip copying as an optimization.
def _record_defined_in_partial_and_mixin(self): def _record_defined_in_partial_and_mixin(self):
old_irs = self._ir_map.irs_of_kinds( old_irs = self._ir_map.irs_of_kinds(
IRMap.IR.Kind.DICTIONARY, IRMap.IR.Kind.INTERFACE, IRMap.IR.Kind.DICTIONARY, IRMap.IR.Kind.INTERFACE,
...@@ -126,7 +131,7 @@ class IdlCompiler(object): ...@@ -126,7 +131,7 @@ class IdlCompiler(object):
self._ir_map.move_to_new_phase() self._ir_map.move_to_new_phase()
for old_ir in old_irs: for old_ir in old_irs:
new_ir = make_copy(old_ir) new_ir = self._maybe_make_copy(old_ir)
self._ir_map.add(new_ir) self._ir_map.add(new_ir)
is_partial = False is_partial = False
is_mixin = False is_mixin = False
...@@ -185,7 +190,7 @@ class IdlCompiler(object): ...@@ -185,7 +190,7 @@ class IdlCompiler(object):
apply_to(member) apply_to(member)
def process_interface_like(ir): def process_interface_like(ir):
ir = make_copy(ir) ir = self._maybe_make_copy(ir)
self._ir_map.add(ir) self._ir_map.add(ir)
propagate = functools.partial(propagate_extattr, ir=ir) propagate = functools.partial(propagate_extattr, ir=ir)
...@@ -231,7 +236,7 @@ class IdlCompiler(object): ...@@ -231,7 +236,7 @@ class IdlCompiler(object):
self._ir_map.move_to_new_phase() self._ir_map.move_to_new_phase()
for old_ir in irs: for old_ir in irs:
new_ir = make_copy(old_ir) new_ir = self._maybe_make_copy(old_ir)
self._ir_map.add(new_ir) self._ir_map.add(new_ir)
if (new_ir.is_mixin and 'LegacyTreatAsPartialInterface' not in if (new_ir.is_mixin and 'LegacyTreatAsPartialInterface' not in
...@@ -289,7 +294,7 @@ class IdlCompiler(object): ...@@ -289,7 +294,7 @@ class IdlCompiler(object):
self._ir_map.move_to_new_phase() self._ir_map.move_to_new_phase()
for old_ir in mixins: for old_ir in mixins:
new_ir = make_copy(old_ir) new_ir = self._maybe_make_copy(old_ir)
self._ir_map.add(new_ir) self._ir_map.add(new_ir)
ref_to_mixin = self._ref_to_idl_def_factory.create( ref_to_mixin = self._ref_to_idl_def_factory.create(
new_ir.identifier) new_ir.identifier)
...@@ -385,7 +390,7 @@ class IdlCompiler(object): ...@@ -385,7 +390,7 @@ class IdlCompiler(object):
for old_ir in old_irs: for old_ir in old_irs:
assert not old_ir.constructor_groups assert not old_ir.constructor_groups
assert not old_ir.operation_groups assert not old_ir.operation_groups
new_ir = make_copy(old_ir) new_ir = self._maybe_make_copy(old_ir)
self._ir_map.add(new_ir) self._ir_map.add(new_ir)
sort_key = lambda x: x.identifier sort_key = lambda x: x.identifier
new_ir.constructor_groups = [ new_ir.constructor_groups = [
...@@ -411,7 +416,7 @@ class IdlCompiler(object): ...@@ -411,7 +416,7 @@ class IdlCompiler(object):
self._ir_map.move_to_new_phase() self._ir_map.move_to_new_phase()
for old_ir in old_irs: for old_ir in old_irs:
new_ir = make_copy(old_ir) new_ir = self._maybe_make_copy(old_ir)
self._ir_map.add(new_ir) self._ir_map.add(new_ir)
for group in new_ir.constructor_groups + new_ir.operation_groups: for group in new_ir.constructor_groups + new_ir.operation_groups:
...@@ -432,7 +437,7 @@ class IdlCompiler(object): ...@@ -432,7 +437,7 @@ class IdlCompiler(object):
self._ir_map.move_to_new_phase() self._ir_map.move_to_new_phase()
for old_ir in old_irs: for old_ir in old_irs:
new_ir = make_copy(old_ir) new_ir = self._maybe_make_copy(old_ir)
self._ir_map.add(new_ir) self._ir_map.add(new_ir)
for group in new_ir.constructor_groups + new_ir.operation_groups: for group in new_ir.constructor_groups + new_ir.operation_groups:
...@@ -495,7 +500,7 @@ class IdlCompiler(object): ...@@ -495,7 +500,7 @@ class IdlCompiler(object):
self._ir_map.move_to_new_phase() self._ir_map.move_to_new_phase()
for old_ir in old_interfaces: for old_ir in old_interfaces:
new_ir = make_copy(old_ir) new_ir = self._maybe_make_copy(old_ir)
self._ir_map.add(new_ir) self._ir_map.add(new_ir)
assert not new_ir.exposed_constructs assert not new_ir.exposed_constructs
...@@ -515,7 +520,7 @@ class IdlCompiler(object): ...@@ -515,7 +520,7 @@ class IdlCompiler(object):
self._ir_map.move_to_new_phase() self._ir_map.move_to_new_phase()
for old_ir in old_irs: for old_ir in old_irs:
new_ir = make_copy(old_ir) new_ir = self._maybe_make_copy(old_ir)
self._ir_map.add(new_ir) self._ir_map.add(new_ir)
new_ir.own_members.sort(key=lambda x: x.identifier) new_ir.own_members.sort(key=lambda x: x.identifier)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment