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

Unified Diff: tools/telemetry/telemetry/core/bitmaptools/__init__.py

Issue 108333004: [telemetry] Implement per-pixel algorithms in Bitmap as a C++ extension. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: delint Created 7 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 side-by-side diff with in-line comments
Download patch
Index: tools/telemetry/telemetry/core/bitmaptools/__init__.py
diff --git a/tools/telemetry/telemetry/core/bitmaptools/__init__.py b/tools/telemetry/telemetry/core/bitmaptools/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..30a351f63881fece40a054a7c019b6b167866601
--- /dev/null
+++ b/tools/telemetry/telemetry/core/bitmaptools/__init__.py
@@ -0,0 +1,72 @@
+# Copyright 2013 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+""" Bitmap processing routines.
+
+All functions accept a tuple of (pixels, width, channels) as the first argument.
+Bounding box is a tuple (left, right, width, height).
+"""
+
+
+def _FixDistutilsMsvcCompiler():
+ # To avoid runtime mismatch, distutils should use the compiler which was used
+ # to build python. But our module does not use the runtime much, so it should
+ # be fine to build within a different environment.
+ # See also: http://bugs.python.org/issue7511
+ from distutils import msvc9compiler
+ for version in [msvc9compiler.get_build_version(), 9.0, 10.0, 11.0, 12.0]:
+ msvc9compiler.VERSION = version
+ try:
+ msvc9compiler.MSVCCompiler().initialize()
+ break
+ except Exception:
+ pass
+
+
+def _BuildExtension():
+ """Builds the extension library on demand."""
+ from distutils import log
+ from distutils.core import Distribution, Extension
+ import os
+ import tempfile
+
+ if os.name == 'nt':
+ _FixDistutilsMsvcCompiler()
+
+ build_dir = tempfile.mkdtemp()
+ dirname = os.path.dirname(__file__)
+ # Source file paths must be relative to current path.
+ relpath = os.path.relpath(dirname, os.getcwd())
+ src_files = [
+ os.path.join(relpath, 'bitmaptools.cc')
+ ]
+ dist = Distribution({
+ 'ext_modules': [Extension('bitmaptools', src_files)]
+ })
+ dist.script_args = ['build_ext', '--build-temp', build_dir,
+ '--build-lib', dirname]
+ dist.parse_command_line()
+ log.set_threshold(log.ERROR)
+ dist.run_commands()
+ dist.script_args = ['clean', '--build-temp', build_dir, '--all']
+ dist.parse_command_line()
+ log.set_threshold(log.ERROR)
+ dist.run_commands()
+
+
+try:
+ # Always re-build from source. No-op if source file older than the library.
+ _BuildExtension()
+except Exception:
+ # TODO(tonyg): fetch from cloudstorage
+ pass
+
+
+try:
+ # pylint: disable=W0401,F0401
+ from .bitmaptools import *
+except ImportError:
+ raise NotImplementedError(
+ 'The bitmaptools module is not available for this platform.'
+ )
« no previous file with comments | « tools/telemetry/telemetry/core/bitmap_unittest.py ('k') | tools/telemetry/telemetry/core/bitmaptools/bitmaptools.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698