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

Side by Side Diff: sdk/lib/html/scripts/databasebuilder.py

Issue 11280175: Use worker pools in go.sh/databasebuilder.py. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: merge to head Created 8 years 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 2 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
3 # for details. All rights reserved. Use of this source code is governed by a 3 # for details. All rights reserved. Use of this source code is governed by a
4 # BSD-style license that can be found in the LICENSE file. 4 # BSD-style license that can be found in the LICENSE file.
5 5
6 import copy 6 import copy
7 import database 7 import database
8 import idlparser 8 import idlparser
9 import logging 9 import logging
10 import multiprocessing 10 import multiprocessing
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 content = f.read() 67 content = f.read()
68 f.close() 68 f.close()
69 69
70 idl_ast = idl_parser.parse( 70 idl_ast = idl_parser.parse(
71 content, 71 content,
72 defines=import_options.idl_defines) 72 defines=import_options.idl_defines)
73 return IDLFile(idl_ast, file_name) 73 return IDLFile(idl_ast, file_name)
74 except SyntaxError, e: 74 except SyntaxError, e:
75 raise RuntimeError('Failed to load file %s: %s' 75 raise RuntimeError('Failed to load file %s: %s'
76 % (file_name, e)) 76 % (file_name, e))
77 77
78 def _load_idl_file_to_queue(file_name, import_options, result_queue):
79 """Loads an IDL file into a result_queue to process in the master thread"""
80 try:
81 result = _load_idl_file(file_name, import_options)
82 result_queue.put(result, False)
83 return 0
84 except RuntimeError, e:
85 result_queue.put(e, False)
86 return 1
87 except:
88 result_queue.put('Unknown error loading %s' % file_name, False)
89 return 1
90 78
91 class DatabaseBuilder(object): 79 class DatabaseBuilder(object):
92 def __init__(self, database): 80 def __init__(self, database):
93 """DatabaseBuilder is used for importing and merging interfaces into 81 """DatabaseBuilder is used for importing and merging interfaces into
94 the Database""" 82 the Database"""
95 self._database = database 83 self._database = database
96 self._imported_interfaces = [] 84 self._imported_interfaces = []
97 self._impl_stmts = [] 85 self._impl_stmts = []
98 86
99 def _resolve_type_defs(self, idl_file): 87 def _resolve_type_defs(self, idl_file):
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 # Step 4: Resolve 'implements' statements 410 # Step 4: Resolve 'implements' statements
423 for impl_stmt, import_options in self._impl_stmts: 411 for impl_stmt, import_options in self._impl_stmts:
424 self._merge_impl_stmt(impl_stmt, import_options) 412 self._merge_impl_stmt(impl_stmt, import_options)
425 413
426 self._impl_stmts = [] 414 self._impl_stmts = []
427 self._imported_interfaces = [] 415 self._imported_interfaces = []
428 416
429 def import_idl_files(self, file_paths, import_options, parallel): 417 def import_idl_files(self, file_paths, import_options, parallel):
430 if parallel: 418 if parallel:
431 # Parse the IDL files in parallel. 419 # Parse the IDL files in parallel.
432 result_queue = multiprocessing.Queue(len(file_paths)) 420 pool = multiprocessing.Pool()
433 jobs = [ multiprocessing.Process(target=_load_idl_file_to_queue,
434 args=(file_path, import_options,
435 result_queue))
436 for file_path in file_paths ]
437 try: 421 try:
438 for job in jobs: 422 for file_path in file_paths:
439 job.start() 423 pool.apply_async(_load_idl_file,
440 for job in jobs: 424 [ file_path, import_options],
441 # Timeout and throw after 5 sec. 425 callback = lambda idl_file:
442 result = result_queue.get(True, 5) 426 self._process_idl_file(idl_file, import_options))
443 if isinstance(result, IDLFile): 427 pool.close()
444 self._process_idl_file(result, import_options) 428 pool.join()
445 else:
446 raise result
447 except: 429 except:
448 # Clean up child processes on error. 430 pool.terminate()
449 for job in jobs:
450 job.terminate()
451 raise 431 raise
452 else: 432 else:
453 # Parse the IDL files in serial. 433 # Parse the IDL files in serial.
454 for file_path in file_paths: 434 for file_path in file_paths:
455 idl_file = _load_idl_file(file_path, import_options) 435 idl_file = _load_idl_file(file_path, import_options)
456 self._process_idl_file(idl_file, import_options) 436 self._process_idl_file(idl_file, import_options)
457 437
458 def _process_idl_file(self, idl_file, 438 def _process_idl_file(self, idl_file,
459 import_options): 439 import_options):
460 self._strip_ext_attributes(idl_file) 440 self._strip_ext_attributes(idl_file)
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
579 # TODO(antonm): Ideally we'd like to have pristine copy of WebKit IDLs and fetch 559 # TODO(antonm): Ideally we'd like to have pristine copy of WebKit IDLs and fetch
580 # this information directly from it. Unfortunately right now database is massaged 560 # this information directly from it. Unfortunately right now database is massaged
581 # a lot so it's difficult to maintain necessary information on DOMWindow i tself. 561 # a lot so it's difficult to maintain necessary information on DOMWindow i tself.
582 interface = self._database.GetInterface(type) 562 interface = self._database.GetInterface(type)
583 if 'V8EnabledPerContext' in attr.ext_attrs: 563 if 'V8EnabledPerContext' in attr.ext_attrs:
584 interface.ext_attrs['synthesizedV8EnabledPerContext'] = \ 564 interface.ext_attrs['synthesizedV8EnabledPerContext'] = \
585 attr.ext_attrs['V8EnabledPerContext'] 565 attr.ext_attrs['V8EnabledPerContext']
586 if 'V8EnabledAtRuntime' in attr.ext_attrs: 566 if 'V8EnabledAtRuntime' in attr.ext_attrs:
587 interface.ext_attrs['synthesizedV8EnabledAtRuntime'] = \ 567 interface.ext_attrs['synthesizedV8EnabledAtRuntime'] = \
588 attr.ext_attrs['V8EnabledAtRuntime'] or attr.id 568 attr.ext_attrs['V8EnabledAtRuntime'] or attr.id
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698