summaryrefslogtreecommitdiff
path: root/chromium/tools
diff options
context:
space:
mode:
authorJocelyn Turcotte <jocelyn.turcotte@digia.com>2014-08-08 14:30:41 +0200
committerJocelyn Turcotte <jocelyn.turcotte@digia.com>2014-08-12 13:49:54 +0200
commitab0a50979b9eb4dfa3320eff7e187e41efedf7a9 (patch)
tree498dfb8a97ff3361a9f7486863a52bb4e26bb898 /chromium/tools
parent4ce69f7403811819800e7c5ae1318b2647e778d1 (diff)
downloadqtwebengine-chromium-ab0a50979b9eb4dfa3320eff7e187e41efedf7a9.tar.gz
Update Chromium to beta version 37.0.2062.68
Change-Id: I188e3b5aff1bec75566014291b654eb19f5bc8ca Reviewed-by: Andras Becsi <andras.becsi@digia.com>
Diffstat (limited to 'chromium/tools')
-rw-r--r--chromium/tools/DEPS6
-rw-r--r--chromium/tools/OWNERS3
-rw-r--r--chromium/tools/PRESUBMIT.py50
-rw-r--r--chromium/tools/android/android_tools.gyp10
-rw-r--r--chromium/tools/android/file_poller/file_poller.gyp18
-rw-r--r--chromium/tools/android/forwarder2/forwarder.gyp20
-rw-r--r--chromium/tools/android/memdump/memdump.gyp36
-rw-r--r--chromium/tools/android/ps_ext/ps_ext.gyp36
-rw-r--r--chromium/tools/android/purge_ashmem/purge_ashmem.gyp13
-rw-r--r--chromium/tools/android/run_pie/run_pie.gyp49
-rw-r--r--chromium/tools/bash-completion25
-rwxr-xr-xchromium/tools/bisect-builds.py859
-rwxr-xr-xchromium/tools/bisect-manual-test.py53
-rwxr-xr-xchromium/tools/bisect-perf-regression.py2948
-rw-r--r--chromium/tools/bisect_test.py53
-rw-r--r--chromium/tools/bisect_utils.py503
-rwxr-xr-xchromium/tools/check_ecs_deps/check_ecs_deps.py202
-rwxr-xr-xchromium/tools/checkbins/checkbins.py109
-rw-r--r--chromium/tools/checkdeps/DEPS3
-rw-r--r--chromium/tools/checkdeps/PRESUBMIT.py25
-rwxr-xr-xchromium/tools/checkdeps/builddeps.py348
-rwxr-xr-xchromium/tools/checkdeps/checkdeps.py229
-rwxr-xr-xchromium/tools/checkdeps/checkdeps_test.py177
-rw-r--r--chromium/tools/checkdeps/cpp_checker.py113
-rwxr-xr-xchromium/tools/checkdeps/graphdeps.py407
-rw-r--r--chromium/tools/checkdeps/java_checker.py107
-rw-r--r--chromium/tools/checkdeps/results.py178
-rw-r--r--chromium/tools/checkdeps/rules.py178
-rw-r--r--chromium/tools/checklicenses/OWNERS3
-rwxr-xr-xchromium/tools/checklicenses/checklicenses.py506
-rw-r--r--chromium/tools/checkperms/OWNERS1
-rw-r--r--chromium/tools/checkperms/PRESUBMIT.py27
-rwxr-xr-xchromium/tools/checkperms/checkperms.py544
-rw-r--r--chromium/tools/clang/blink_gc_plugin/BlinkGCPlugin.cpp1486
-rw-r--r--chromium/tools/clang/blink_gc_plugin/Config.h173
-rw-r--r--chromium/tools/clang/blink_gc_plugin/Edge.cpp75
-rw-r--r--chromium/tools/clang/blink_gc_plugin/Edge.h245
-rw-r--r--chromium/tools/clang/blink_gc_plugin/JsonWriter.h73
-rw-r--r--chromium/tools/clang/blink_gc_plugin/Makefile21
-rw-r--r--chromium/tools/clang/blink_gc_plugin/NeedsTracing.h31
-rw-r--r--chromium/tools/clang/blink_gc_plugin/OWNERS3
-rw-r--r--chromium/tools/clang/blink_gc_plugin/README.chromium2
-rw-r--r--chromium/tools/clang/blink_gc_plugin/RecordInfo.cpp515
-rw-r--r--chromium/tools/clang/blink_gc_plugin/RecordInfo.h173
-rw-r--r--chromium/tools/clang/blink_gc_plugin/TracingStatus.h29
-rwxr-xr-xchromium/tools/clang/blink_gc_plugin/process-graph.py464
-rw-r--r--chromium/tools/clang/plugins/ChromeClassTester.cpp34
-rw-r--r--chromium/tools/clang/plugins/ChromeClassTester.h12
-rw-r--r--chromium/tools/clang/plugins/FindBadConstructs.cpp731
-rw-r--r--chromium/tools/clang/plugins/FindBadConstructsAction.cpp55
-rw-r--r--chromium/tools/clang/plugins/FindBadConstructsAction.h32
-rw-r--r--chromium/tools/clang/plugins/FindBadConstructsConsumer.cpp687
-rw-r--r--chromium/tools/clang/plugins/FindBadConstructsConsumer.h100
-rw-r--r--chromium/tools/clang/plugins/Makefile2
-rw-r--r--chromium/tools/clang/plugins/Options.h25
-rwxr-xr-xchromium/tools/clang/scripts/blink_gc_plugin_flags.sh31
-rwxr-xr-xchromium/tools/clang/scripts/package.sh105
-rwxr-xr-xchromium/tools/clang/scripts/repackage.sh63
-rwxr-xr-xchromium/tools/clang/scripts/update.py216
-rwxr-xr-xchromium/tools/clang/scripts/update.sh323
-rw-r--r--chromium/tools/code_coverage/croc.css102
-rwxr-xr-xchromium/tools/code_coverage/croc.py722
-rw-r--r--chromium/tools/code_coverage/croc_html.py451
-rw-r--r--chromium/tools/code_coverage/croc_scan.py164
-rwxr-xr-xchromium/tools/code_coverage/croc_scan_test.py187
-rwxr-xr-xchromium/tools/code_coverage/croc_test.py758
-rw-r--r--chromium/tools/code_coverage/example.croc197
-rw-r--r--chromium/tools/code_coverage/third_party/README.chromium11
-rw-r--r--chromium/tools/code_coverage/third_party/sorttable.js494
-rwxr-xr-xchromium/tools/compile_test/compile_test.py65
-rwxr-xr-xchromium/tools/coverity/coverity.py308
-rw-r--r--chromium/tools/cr/OWNERS2
-rw-r--r--chromium/tools/cr/README14
-rwxr-xr-xchromium/tools/cr/cr-bash-helpers.sh48
-rwxr-xr-xchromium/tools/cr/cr.sh14
-rw-r--r--chromium/tools/cr/cr/__init__.py15
-rw-r--r--chromium/tools/cr/cr/actions/__init__.py10
-rw-r--r--chromium/tools/cr/cr/actions/action.py49
-rw-r--r--chromium/tools/cr/cr/actions/adb.py144
-rw-r--r--chromium/tools/cr/cr/actions/builder.py72
-rw-r--r--chromium/tools/cr/cr/actions/debugger.py51
-rw-r--r--chromium/tools/cr/cr/actions/gdb.py40
-rw-r--r--chromium/tools/cr/cr/actions/gyp.py26
-rw-r--r--chromium/tools/cr/cr/actions/installer.py55
-rw-r--r--chromium/tools/cr/cr/actions/linux.py50
-rw-r--r--chromium/tools/cr/cr/actions/ninja.py86
-rw-r--r--chromium/tools/cr/cr/actions/runner.py87
-rw-r--r--chromium/tools/cr/cr/auto/__init__.py10
-rw-r--r--chromium/tools/cr/cr/auto/build/__init__.py5
-rw-r--r--chromium/tools/cr/cr/auto/client/__init__.py5
-rw-r--r--chromium/tools/cr/cr/auto/user/__init__.py5
-rw-r--r--chromium/tools/cr/cr/autocomplete.py27
-rw-r--r--chromium/tools/cr/cr/base/__init__.py5
-rw-r--r--chromium/tools/cr/cr/base/android.py116
-rw-r--r--chromium/tools/cr/cr/base/arch.py70
-rw-r--r--chromium/tools/cr/cr/base/buildtype.py58
-rw-r--r--chromium/tools/cr/cr/base/client.py215
-rw-r--r--chromium/tools/cr/cr/base/host.py149
-rw-r--r--chromium/tools/cr/cr/base/linux.py44
-rw-r--r--chromium/tools/cr/cr/base/platform.py70
-rw-r--r--chromium/tools/cr/cr/commands/__init__.py9
-rw-r--r--chromium/tools/cr/cr/commands/build.py81
-rw-r--r--chromium/tools/cr/cr/commands/command.py104
-rw-r--r--chromium/tools/cr/cr/commands/debug.py40
-rw-r--r--chromium/tools/cr/cr/commands/info.py43
-rw-r--r--chromium/tools/cr/cr/commands/init.py180
-rw-r--r--chromium/tools/cr/cr/commands/install.py36
-rw-r--r--chromium/tools/cr/cr/commands/prepare.py48
-rw-r--r--chromium/tools/cr/cr/commands/run.py50
-rw-r--r--chromium/tools/cr/cr/commands/select.py61
-rw-r--r--chromium/tools/cr/cr/commands/shell.py53
-rw-r--r--chromium/tools/cr/cr/commands/sync.py55
-rw-r--r--chromium/tools/cr/cr/config.py240
-rw-r--r--chromium/tools/cr/cr/context.py217
-rw-r--r--chromium/tools/cr/cr/fixups/__init__.py9
-rw-r--r--chromium/tools/cr/cr/fixups/arch.py54
-rw-r--r--chromium/tools/cr/cr/loader.py123
-rw-r--r--chromium/tools/cr/cr/plugin.py320
-rw-r--r--chromium/tools/cr/cr/targets/__init__.py9
-rw-r--r--chromium/tools/cr/cr/targets/chrome.py26
-rw-r--r--chromium/tools/cr/cr/targets/chromium_testshell.py29
-rw-r--r--chromium/tools/cr/cr/targets/content_shell.py28
-rw-r--r--chromium/tools/cr/cr/targets/target.py157
-rw-r--r--chromium/tools/cr/cr/visitor.py257
-rw-r--r--chromium/tools/cr/main.py94
-rw-r--r--chromium/tools/crx_id/PRESUBMIT.py27
-rw-r--r--chromium/tools/crx_id/__init__.py8
-rwxr-xr-xchromium/tools/crx_id/crx_id.py151
-rwxr-xr-xchromium/tools/crx_id/crx_id_unittest.py85
-rw-r--r--chromium/tools/crx_id/jebgalgnebhfojomionfpkfelancnnkf.crxbin1843 -> 0 bytes
-rw-r--r--chromium/tools/cygprofile/cygprofile.cc401
-rw-r--r--chromium/tools/cygprofile/cygprofile.gyp23
-rwxr-xr-xchromium/tools/cygprofile/mergetraces.py186
-rwxr-xr-xchromium/tools/cygprofile/patch_orderfile.py117
-rwxr-xr-xchromium/tools/cygprofile/symbolize.py251
-rw-r--r--chromium/tools/deps2git/PRESUBMIT.py32
-rw-r--r--chromium/tools/deps2git/WATCHLISTS23
-rw-r--r--chromium/tools/deps2git/codereview.settings4
-rwxr-xr-xchromium/tools/deps2git/deps2git.py228
-rw-r--r--chromium/tools/deps2git/deps2submodules.py168
-rwxr-xr-xchromium/tools/deps2git/deps2submodules_unittest.py84
-rw-r--r--chromium/tools/deps2git/deps_utils.py135
-rw-r--r--chromium/tools/deps2git/git_tools.py210
-rwxr-xr-xchromium/tools/deps2git/svn_to_git_public.py188
-rwxr-xr-xchromium/tools/diagnose-me.py109
-rwxr-xr-xchromium/tools/dromaeo_benchmark_runner/dromaeo_benchmark_runner.py266
-rw-r--r--chromium/tools/emacs/chrome-filetypes.el16
-rw-r--r--chromium/tools/emacs/flymake-chromium.el122
-rw-r--r--chromium/tools/emacs/trybot-linux.txt6
-rw-r--r--chromium/tools/emacs/trybot-mac.txt1985
-rw-r--r--chromium/tools/emacs/trybot-windows.txt72
-rw-r--r--chromium/tools/emacs/trybot.el176
-rwxr-xr-xchromium/tools/export_tarball/export_tarball.py172
-rwxr-xr-xchromium/tools/export_tarball/export_v8_tarball.py135
-rw-r--r--chromium/tools/find_depot_tools.py40
-rw-r--r--chromium/tools/find_runtime_symbols/OWNERS1
-rw-r--r--chromium/tools/find_runtime_symbols/PRESUBMIT.py45
-rw-r--r--chromium/tools/find_runtime_symbols/README24
-rwxr-xr-xchromium/tools/find_runtime_symbols/find_runtime_symbols.py214
-rwxr-xr-xchromium/tools/find_runtime_symbols/prepare_symbol_info.py231
-rwxr-xr-xchromium/tools/find_runtime_symbols/reduce_debugline.py68
-rw-r--r--chromium/tools/find_runtime_symbols/static_symbols.py277
-rwxr-xr-xchromium/tools/flakiness/find_flakiness.py179
-rw-r--r--chromium/tools/gdb/gdb_chrome.py297
-rwxr-xr-xchromium/tools/gen_keyboard_overlay_data/gen_keyboard_overlay_data.py529
-rwxr-xr-xchromium/tools/generate_stubs/generate_stubs.py4
-rwxr-xr-xchromium/tools/generate_stubs/generate_stubs_unittest.py6
-rw-r--r--chromium/tools/git/README16
-rwxr-xr-xchromium/tools/git/for-all-touched-files.py114
-rwxr-xr-xchromium/tools/git/git-diff-ide.py93
-rwxr-xr-xchromium/tools/git/git-utils.sh17
-rwxr-xr-xchromium/tools/git/graph.sh42
-rwxr-xr-xchromium/tools/git/mass-rename.py50
-rwxr-xr-xchromium/tools/git/mass-rename.sh17
-rwxr-xr-xchromium/tools/git/mffr.py169
-rwxr-xr-xchromium/tools/git/move_source_file.bat6
-rwxr-xr-xchromium/tools/git/move_source_file.py194
-rwxr-xr-xchromium/tools/git/post-checkout22
-rwxr-xr-xchromium/tools/git/post-merge12
-rwxr-xr-xchromium/tools/git/update-copyrights.sh7
-rw-r--r--chromium/tools/gn/gn.gyp57
-rw-r--r--chromium/tools/grit/grit/format/chrome_messages_json.py5
-rw-r--r--chromium/tools/grit/grit/format/chrome_messages_json_unittest.py26
-rwxr-xr-xchromium/tools/grit/grit/format/data_pack.py117
-rw-r--r--chromium/tools/grit/grit/format/data_pack_unittest.py29
-rwxr-xr-xchromium/tools/grit/grit/format/html_inline.py24
-rw-r--r--chromium/tools/grit/grit/format/policy_templates/policy_template_generator.py34
-rw-r--r--chromium/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py2
-rw-r--r--chromium/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py2
-rw-r--r--chromium/tools/grit/grit/format/policy_templates/writers/doc_writer.py65
-rw-r--r--chromium/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py12
-rw-r--r--chromium/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py122
-rw-r--r--chromium/tools/grit/grit/format/policy_templates/writers/ios_plist_writer_unittest.py208
-rw-r--r--chromium/tools/grit/grit/format/policy_templates/writers/json_writer.py24
-rw-r--r--chromium/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py12
-rw-r--r--chromium/tools/grit/grit/format/policy_templates/writers/plist_writer.py16
-rw-r--r--chromium/tools/grit/grit/format/policy_templates/writers/reg_writer.py11
-rw-r--r--chromium/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py12
-rw-r--r--chromium/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py8
-rw-r--r--chromium/tools/grit/grit/format/rc_header.py14
-rw-r--r--chromium/tools/grit/grit/format/rc_header_unittest.py34
-rwxr-xr-xchromium/tools/grit/grit/format/repack.py22
-rw-r--r--chromium/tools/grit/grit/format/resource_map_unittest.py4
-rw-r--r--chromium/tools/grit/grit/grd_reader.py12
-rw-r--r--chromium/tools/grit/grit/grd_reader_unittest.py24
-rw-r--r--chromium/tools/grit/grit/node/base.py105
-rw-r--r--chromium/tools/grit/grit/node/base_unittest.py61
-rw-r--r--chromium/tools/grit/grit/node/io.py13
-rw-r--r--chromium/tools/grit/grit/node/io_unittest.py16
-rwxr-xr-xchromium/tools/grit/grit/node/misc.py11
-rw-r--r--chromium/tools/grit/grit/test_suite_all.py9
-rw-r--r--chromium/tools/grit/grit/tool/android2grd.py8
-rw-r--r--chromium/tools/grit/grit/tool/build.py51
-rw-r--r--chromium/tools/grit/grit/tool/build_unittest.py6
-rwxr-xr-xchromium/tools/grit/grit_info.py2
-rw-r--r--chromium/tools/gritsettings/resource_ids62
-rw-r--r--chromium/tools/gtk_clipboard_dump/gtk_clipboard_dump.cc85
-rw-r--r--chromium/tools/gtk_clipboard_dump/gtk_clipboard_dump.gyp14
-rw-r--r--chromium/tools/gyp/AUTHORS1
-rw-r--r--chromium/tools/gyp/PRESUBMIT.py2
-rwxr-xr-xchromium/tools/gyp/buildbot/buildbot_run.py45
-rw-r--r--chromium/tools/gyp/gyp_dummy.c7
-rw-r--r--chromium/tools/gyp/pylib/gyp/MSVSSettings.py65
-rwxr-xr-xchromium/tools/gyp/pylib/gyp/MSVSSettings_test.py1
-rw-r--r--chromium/tools/gyp/pylib/gyp/MSVSUtil.py21
-rw-r--r--chromium/tools/gyp/pylib/gyp/MSVSVersion.py8
-rw-r--r--chromium/tools/gyp/pylib/gyp/common.py75
-rw-r--r--chromium/tools/gyp/pylib/gyp/generator/analyzer.py192
-rw-r--r--chromium/tools/gyp/pylib/gyp/generator/android.py108
-rw-r--r--chromium/tools/gyp/pylib/gyp/generator/cmake.py9
-rw-r--r--chromium/tools/gyp/pylib/gyp/generator/eclipse.py64
-rw-r--r--chromium/tools/gyp/pylib/gyp/generator/make.py26
-rw-r--r--chromium/tools/gyp/pylib/gyp/generator/msvs.py184
-rw-r--r--chromium/tools/gyp/pylib/gyp/generator/ninja.py348
-rw-r--r--chromium/tools/gyp/pylib/gyp/generator/xcode.py16
-rw-r--r--chromium/tools/gyp/pylib/gyp/input.py408
-rwxr-xr-xchromium/tools/gyp/pylib/gyp/mac_tool.py6
-rw-r--r--chromium/tools/gyp/pylib/gyp/msvs_emulation.py128
-rw-r--r--chromium/tools/gyp/pylib/gyp/ordered_dict.py289
-rw-r--r--chromium/tools/gyp/pylib/gyp/simple_copy.py46
-rwxr-xr-xchromium/tools/gyp/pylib/gyp/win_tool.py142
-rw-r--r--chromium/tools/gyp/pylib/gyp/xcode_emulation.py376
-rw-r--r--chromium/tools/gyp/pylib/gyp/xcode_ninja.py257
-rw-r--r--chromium/tools/gyp/pylib/gyp/xcodeproj_file.py1
-rw-r--r--chromium/tools/gyp/pylintrc307
-rw-r--r--chromium/tools/gyp/test/analyzer/subdir/subdir.gyp19
-rw-r--r--chromium/tools/gyp/test/analyzer/test.gyp54
-rw-r--r--chromium/tools/gyp/test/android/hello.gyp15
-rw-r--r--chromium/tools/gyp/test/android/make_functions.gyp31
-rw-r--r--chromium/tools/gyp/test/android/space_filenames.gyp18
-rw-r--r--chromium/tools/gyp/test/compiler-override/compiler-host.gyp2
-rw-r--r--chromium/tools/gyp/test/configurations/inheritance/duplicates.gyp27
-rw-r--r--chromium/tools/gyp/test/cxxflags/cxxflags.gyp1
-rw-r--r--chromium/tools/gyp/test/ios/app-bundle/test-archs.gyp129
-rw-r--r--chromium/tools/gyp/test/ios/app-bundle/test-crosscompile.gyp47
-rw-r--r--chromium/tools/gyp/test/ios/app-bundle/test.gyp1
-rw-r--r--chromium/tools/gyp/test/link-dependency/test.gyp37
-rw-r--r--chromium/tools/gyp/test/mac/archs/test-archs-multiarch.gyp32
-rw-r--r--chromium/tools/gyp/test/mac/archs/test-valid-archs.gyp28
-rw-r--r--chromium/tools/gyp/test/mac/xcode-gcc/test.gyp5
-rw-r--r--chromium/tools/gyp/test/mac/xcode-support-actions/test.gyp26
-rw-r--r--chromium/tools/gyp/test/make_global_settings/ar/make_global_settings_ar.gyp29
-rw-r--r--chromium/tools/gyp/test/make_global_settings/ld/make_global_settings_ld.gyp29
-rw-r--r--chromium/tools/gyp/test/msvs/buildevents/buildevents.gyp14
-rw-r--r--chromium/tools/gyp/test/msvs/filters/filters.gyp47
-rw-r--r--chromium/tools/gyp/test/ninja/normalize-paths-win/normalize-paths.gyp12
-rw-r--r--chromium/tools/gyp/test/rules-dirname/src/subdir/input-rule-dirname.gyp76
-rw-r--r--chromium/tools/gyp/test/rules/src/actions.gyp1
-rw-r--r--chromium/tools/gyp/test/rules/src/special-variables.gyp1
-rw-r--r--chromium/tools/gyp/test/rules/src/subdir2/both_rule_and_action_input.gyp50
-rw-r--r--chromium/tools/gyp/test/variables/commands/repeated_multidir/dir_1/test_1.gyp13
-rw-r--r--chromium/tools/gyp/test/variables/commands/repeated_multidir/dir_2/test_2.gyp13
-rw-r--r--chromium/tools/gyp/test/variables/commands/repeated_multidir/main.gyp16
-rw-r--r--chromium/tools/gyp/test/variables/commands/repeated_multidir/repeated_command_common.gypi25
-rw-r--r--chromium/tools/gyp/test/win/command-quote/command-quote.gyp5
-rw-r--r--chromium/tools/gyp/test/win/command-quote/subdir/and/another/in-subdir.gyp1
-rw-r--r--chromium/tools/gyp/test/win/compiler-flags/enable-enhanced-instruction-set.gyp54
-rw-r--r--chromium/tools/gyp/test/win/idl-excluded/idl-excluded.gyp58
-rw-r--r--chromium/tools/gyp/test/win/linker-flags/force-symbol-reference.gyp39
-rw-r--r--chromium/tools/gyp/test/win/linker-flags/generate-manifest.gyp10
-rw-r--r--chromium/tools/gyp/test/win/linker-flags/link-ordering.gyp95
-rw-r--r--chromium/tools/gyp/test/win/linker-flags/pdb-output.gyp36
-rw-r--r--chromium/tools/gyp/test/win/linker-flags/pgo.gyp2
-rw-r--r--chromium/tools/gyp/test/win/linker-flags/program-database.gyp7
-rw-r--r--chromium/tools/gyp/test/win/linker-flags/safeseh.gyp47
-rw-r--r--chromium/tools/gyp/test/win/linker-flags/unsupported-manifest.gyp13
-rw-r--r--chromium/tools/gyp/test/win/linker-flags/warn-as-error.gyp66
-rw-r--r--chromium/tools/gyp/test/win/ml-safeseh/ml-safeseh.gyp24
-rw-r--r--chromium/tools/gyp/test/win/shard/shard.gyp11
-rw-r--r--chromium/tools/gyp/test/win/shard/shard_ref.gyp41
-rw-r--r--chromium/tools/gyp/test/win/vs-macros/containing-gyp.gyp1
-rw-r--r--chromium/tools/gyp/test/win/vs-macros/input-output-macros.gyp1
-rw-r--r--chromium/tools/gyp/test/win/win-tool/copies_readonly_files.gyp29
-rwxr-xr-xchromium/tools/gypv8sh.py26
-rwxr-xr-xchromium/tools/idl_parser/idl_lexer.py3
-rwxr-xr-xchromium/tools/idl_parser/idl_node.py2
-rwxr-xr-xchromium/tools/idl_parser/idl_parser.py243
-rwxr-xr-xchromium/tools/idl_parser/idl_ppapi_lexer.py5
-rwxr-xr-xchromium/tools/idl_parser/idl_ppapi_parser.py4
-rw-r--r--chromium/tools/idl_parser/test_lexer/keywords.in3
-rw-r--r--chromium/tools/idl_parser/test_parser/enum_web.idl20
-rw-r--r--chromium/tools/idl_parser/test_parser/interface_web.idl28
-rw-r--r--chromium/tools/imagediff/DEPS4
-rw-r--r--chromium/tools/imagediff/image_diff.cc449
-rw-r--r--chromium/tools/imagediff/image_diff_png.cc650
-rw-r--r--chromium/tools/imagediff/image_diff_png.h35
-rwxr-xr-xchromium/tools/include_tracer.py202
-rw-r--r--chromium/tools/ipc_fuzzer/DEPS3
-rw-r--r--chromium/tools/ipc_fuzzer/OWNERS2
-rw-r--r--chromium/tools/ipc_fuzzer/ipc_fuzzer.gyp2
-rw-r--r--chromium/tools/ipc_fuzzer/message_lib/DEPS8
-rw-r--r--chromium/tools/ipc_fuzzer/message_lib/all_messages.h14
-rw-r--r--chromium/tools/ipc_fuzzer/message_lib/message_cracker.h32
-rw-r--r--chromium/tools/ipc_fuzzer/message_lib/message_file.h27
-rw-r--r--chromium/tools/ipc_fuzzer/message_lib/message_file_format.h63
-rw-r--r--chromium/tools/ipc_fuzzer/message_lib/message_file_reader.cc230
-rw-r--r--chromium/tools/ipc_fuzzer/message_lib/message_file_writer.cc176
-rw-r--r--chromium/tools/ipc_fuzzer/message_lib/message_lib.gyp9
-rw-r--r--chromium/tools/ipc_fuzzer/message_lib/message_names.cc37
-rw-r--r--chromium/tools/ipc_fuzzer/message_lib/message_names.h59
-rw-r--r--chromium/tools/ipc_fuzzer/mutate/mutate.cc10
-rw-r--r--chromium/tools/ipc_fuzzer/mutate/mutate.gyp81
-rwxr-xr-xchromium/tools/ipc_fuzzer/play_testcase.py86
-rw-r--r--chromium/tools/ipc_fuzzer/replay/DEPS3
-rw-r--r--chromium/tools/ipc_fuzzer/replay/replay.cc20
-rw-r--r--chromium/tools/ipc_fuzzer/replay/replay.gyp6
-rw-r--r--chromium/tools/ipc_fuzzer/replay/replay_process.cc106
-rw-r--r--chromium/tools/ipc_fuzzer/replay/replay_process.h59
-rwxr-xr-xchromium/tools/ipc_messages_log.py168
-rw-r--r--chromium/tools/json_schema_compiler/BUILD.gn13
-rw-r--r--chromium/tools/json_schema_compiler/cc_generator.py263
-rwxr-xr-xchromium/tools/json_schema_compiler/compiler.py45
-rw-r--r--chromium/tools/json_schema_compiler/cpp_bundle_generator.py22
-rw-r--r--chromium/tools/json_schema_compiler/cpp_type_generator.py30
-rw-r--r--chromium/tools/json_schema_compiler/cpp_util.py8
-rwxr-xr-xchromium/tools/json_schema_compiler/dart_generator_test.py2
-rw-r--r--chromium/tools/json_schema_compiler/dart_test/comments.dart2
-rw-r--r--chromium/tools/json_schema_compiler/dart_test/dictionaries.dart2
-rw-r--r--chromium/tools/json_schema_compiler/dart_test/empty_namespace.dart2
-rw-r--r--chromium/tools/json_schema_compiler/dart_test/empty_type.dart2
-rw-r--r--chromium/tools/json_schema_compiler/dart_test/events.dart2
-rw-r--r--chromium/tools/json_schema_compiler/dart_test/functions.dart2
-rw-r--r--chromium/tools/json_schema_compiler/dart_test/operatable_type.dart2
-rw-r--r--chromium/tools/json_schema_compiler/dart_test/tags.dart2
-rw-r--r--chromium/tools/json_schema_compiler/h_generator.py29
-rw-r--r--chromium/tools/json_schema_compiler/idl_schema.py53
-rwxr-xr-xchromium/tools/json_schema_compiler/idl_schema_test.py219
-rw-r--r--chromium/tools/json_schema_compiler/model.py20
-rwxr-xr-xchromium/tools/json_schema_compiler/model_test.py15
-rw-r--r--chromium/tools/json_schema_compiler/schema_loader.py10
-rw-r--r--chromium/tools/json_schema_compiler/test/json_schema_compiler_tests.gyp2
-rw-r--r--chromium/tools/json_schema_compiler/util.cc18
-rw-r--r--chromium/tools/json_schema_compiler/util.h2
-rw-r--r--chromium/tools/json_schema_compiler/util_cc_helper.py42
-rw-r--r--chromium/tools/json_to_struct/PRESUBMIT.py20
-rw-r--r--chromium/tools/json_to_struct/element_generator.py122
-rwxr-xr-xchromium/tools/json_to_struct/element_generator_test.py160
-rwxr-xr-xchromium/tools/json_to_struct/json_to_struct.py211
-rw-r--r--chromium/tools/json_to_struct/struct_generator.py43
-rwxr-xr-xchromium/tools/json_to_struct/struct_generator_test.py58
-rwxr-xr-xchromium/tools/licenses.py470
-rw-r--r--chromium/tools/linux/PRESUBMIT.py45
-rwxr-xr-xchromium/tools/linux/dump-static-initializers.py231
-rwxr-xr-xchromium/tools/linux/procfs.py729
-rw-r--r--chromium/tools/lsan/PRESUBMIT.py36
-rw-r--r--chromium/tools/lsan/suppressions.txt113
-rwxr-xr-xchromium/tools/mac/dump-static-initializers.py69
-rwxr-xr-xchromium/tools/mac/symbolicate_crash.py504
-rw-r--r--chromium/tools/measure_page_load_time/ff_ext/chrome.manifest2
-rw-r--r--chromium/tools/measure_page_load_time/ff_ext/content/firefoxOverlay.xul7
-rw-r--r--chromium/tools/measure_page_load_time/ff_ext/content/measure_page_load_time.js209
-rw-r--r--chromium/tools/measure_page_load_time/ff_ext/install.rdf17
-rw-r--r--chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.cpp72
-rw-r--r--chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.def9
-rw-r--r--chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.idl40
-rw-r--r--chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.rc121
-rw-r--r--chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.rgs29
-rw-r--r--chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.vcproj320
-rw-r--r--chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTimeBHO.cpp292
-rw-r--r--chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTimeBHO.h87
-rw-r--r--chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTimeBHO.rgs27
-rw-r--r--chromium/tools/measure_page_load_time/ie_bho/resource.h18
-rw-r--r--chromium/tools/memory_watcher/DEPS3
-rw-r--r--chromium/tools/memory_watcher/README17
-rw-r--r--chromium/tools/memory_watcher/call_stack.cc399
-rw-r--r--chromium/tools/memory_watcher/call_stack.h168
-rw-r--r--chromium/tools/memory_watcher/dllmain.cc155
-rw-r--r--chromium/tools/memory_watcher/hotkey.h48
-rw-r--r--chromium/tools/memory_watcher/ia32_modrm_map.cc94
-rw-r--r--chromium/tools/memory_watcher/ia32_opcode_map.cc1161
-rw-r--r--chromium/tools/memory_watcher/memory_hook.cc562
-rw-r--r--chromium/tools/memory_watcher/memory_hook.h153
-rw-r--r--chromium/tools/memory_watcher/memory_watcher.cc255
-rw-r--r--chromium/tools/memory_watcher/memory_watcher.gyp48
-rw-r--r--chromium/tools/memory_watcher/memory_watcher.h95
-rw-r--r--chromium/tools/memory_watcher/mini_disassembler.cc392
-rw-r--r--chromium/tools/memory_watcher/mini_disassembler.h163
-rw-r--r--chromium/tools/memory_watcher/mini_disassembler_types.h199
-rw-r--r--chromium/tools/memory_watcher/preamble_patcher.cc228
-rw-r--r--chromium/tools/memory_watcher/preamble_patcher.h293
-rw-r--r--chromium/tools/memory_watcher/preamble_patcher_with_stub.cc174
-rwxr-xr-xchromium/tools/memory_watcher/scripts/finditem.pl56
-rwxr-xr-xchromium/tools/memory_watcher/scripts/memprof.pl116
-rwxr-xr-xchromium/tools/memory_watcher/scripts/memtrace.pl146
-rwxr-xr-xchromium/tools/memory_watcher/scripts/summary.pl154
-rw-r--r--chromium/tools/metrics/OWNERS10
-rw-r--r--chromium/tools/metrics/actions/OWNERS2
-rw-r--r--chromium/tools/metrics/actions/chromeactions.txt1878
-rwxr-xr-xchromium/tools/metrics/actions/extract_actions.py636
-rwxr-xr-xchromium/tools/metrics/actions/extract_actions.sh13
-rw-r--r--chromium/tools/metrics/histograms/PRESUBMIT.py39
-rw-r--r--chromium/tools/metrics/histograms/diffutil.py47
-rw-r--r--chromium/tools/metrics/histograms/extract_histograms.py421
-rw-r--r--chromium/tools/metrics/histograms/find_unmapped_histograms.py227
-rw-r--r--chromium/tools/metrics/histograms/histograms.xml33764
-rwxr-xr-xchromium/tools/metrics/histograms/pretty_print.py358
-rw-r--r--chromium/tools/metrics/histograms/update_extension_functions.py148
-rw-r--r--chromium/tools/metrics/histograms/update_policies.py133
-rw-r--r--chromium/tools/metrics/histograms/validate_format.py20
-rwxr-xr-xchromium/tools/multi-process-rss.py143
-rwxr-xr-xchromium/tools/nocompile_driver.py472
-rwxr-xr-xchromium/tools/omahaproxy.py90
-rw-r--r--chromium/tools/oopif/OWNERS4
-rw-r--r--chromium/tools/oopif/iframe_server.py224
-rwxr-xr-xchromium/tools/prepare-bisect-perf-regression.py70
-rw-r--r--chromium/tools/python/google/__init__.py1
-rwxr-xr-xchromium/tools/python/google/gethash_timer.py149
-rw-r--r--chromium/tools/python/google/httpd_config/httpd.conf734
-rw-r--r--chromium/tools/python/google/httpd_config/httpd2.conf280
-rw-r--r--chromium/tools/python/google/httpd_config/httpd2.pem110
-rw-r--r--chromium/tools/python/google/httpd_config/httpd2_linux.conf144
-rw-r--r--chromium/tools/python/google/httpd_config/httpd2_mac.conf229
-rw-r--r--chromium/tools/python/google/httpd_config/mime.types599
-rw-r--r--chromium/tools/python/google/httpd_config/root_ca_cert.pem102
-rwxr-xr-xchromium/tools/python/google/httpd_utils.py200
-rw-r--r--chromium/tools/python/google/logging_utils.py82
-rw-r--r--chromium/tools/python/google/path_utils.py84
-rw-r--r--chromium/tools/python/google/platform_utils.py23
-rw-r--r--chromium/tools/python/google/platform_utils_linux.py148
-rw-r--r--chromium/tools/python/google/platform_utils_mac.py145
-rw-r--r--chromium/tools/python/google/platform_utils_win.py194
-rw-r--r--chromium/tools/python/google/process_utils.py221
-rw-r--r--chromium/tools/relocation_packer/relocation_packer.gyp66
-rwxr-xr-xchromium/tools/resources/find_unused_resources.py194
-rwxr-xr-xchromium/tools/resources/optimize-png-files.sh472
-rwxr-xr-xchromium/tools/run-bisect-manual-test.py128
-rw-r--r--chromium/tools/run-bisect-perf-regression.cfg88
-rwxr-xr-xchromium/tools/run-bisect-perf-regression.py424
-rw-r--r--chromium/tools/run-perf-test.cfg77
-rwxr-xr-xchromium/tools/safely-roll-blink.py127
-rw-r--r--chromium/tools/set_default_handler/DEPS4
-rw-r--r--chromium/tools/set_default_handler/set_default_handler.gyp5
-rw-r--r--chromium/tools/set_default_handler/set_default_handler_main.cc67
-rwxr-xr-xchromium/tools/site_compare/command_line.py802
-rw-r--r--chromium/tools/site_compare/commands/__init__.py0
-rw-r--r--chromium/tools/site_compare/commands/compare2.py170
-rw-r--r--chromium/tools/site_compare/commands/maskmaker.py272
-rw-r--r--chromium/tools/site_compare/commands/measure.py52
-rw-r--r--chromium/tools/site_compare/commands/scrape.py59
-rw-r--r--chromium/tools/site_compare/commands/timeload.py144
-rw-r--r--chromium/tools/site_compare/drivers/__init__.py13
-rw-r--r--chromium/tools/site_compare/drivers/win32/__init__.py0
-rwxr-xr-xchromium/tools/site_compare/drivers/win32/keyboard.py201
-rwxr-xr-xchromium/tools/site_compare/drivers/win32/mouse.py222
-rwxr-xr-xchromium/tools/site_compare/drivers/win32/windowing.py366
-rw-r--r--chromium/tools/site_compare/operators/__init__.py23
-rw-r--r--chromium/tools/site_compare/operators/equals.py37
-rw-r--r--chromium/tools/site_compare/operators/equals_with_mask.py57
-rwxr-xr-xchromium/tools/site_compare/scrapers/__init__.py33
-rwxr-xr-xchromium/tools/site_compare/scrapers/chrome/__init__.py36
-rw-r--r--chromium/tools/site_compare/scrapers/chrome/chrome011010.py42
-rw-r--r--chromium/tools/site_compare/scrapers/chrome/chrome01970.py42
-rwxr-xr-xchromium/tools/site_compare/scrapers/chrome/chromebase.py199
-rwxr-xr-xchromium/tools/site_compare/scrapers/firefox/__init__.py28
-rwxr-xr-xchromium/tools/site_compare/scrapers/firefox/firefox2.py249
-rwxr-xr-xchromium/tools/site_compare/scrapers/ie/__init__.py28
-rwxr-xr-xchromium/tools/site_compare/scrapers/ie/ie7.py210
-rwxr-xr-xchromium/tools/site_compare/site_compare.py176
-rw-r--r--chromium/tools/site_compare/utils/__init__.py0
-rw-r--r--chromium/tools/site_compare/utils/browser_iterate.py199
-rwxr-xr-xchromium/tools/sort-headers.py185
-rw-r--r--chromium/tools/stats_viewer/OpenDialog.Designer.cs88
-rw-r--r--chromium/tools/stats_viewer/OpenDialog.cs45
-rw-r--r--chromium/tools/stats_viewer/OpenDialog.resx120
-rw-r--r--chromium/tools/stats_viewer/Properties/AssemblyInfo.cs33
-rw-r--r--chromium/tools/stats_viewer/Properties/Resources.Designer.cs71
-rw-r--r--chromium/tools/stats_viewer/Properties/Resources.resx117
-rw-r--r--chromium/tools/stats_viewer/Properties/Settings.Designer.cs30
-rw-r--r--chromium/tools/stats_viewer/Properties/Settings.settings7
-rw-r--r--chromium/tools/stats_viewer/Resources.Designer.cs77
-rw-r--r--chromium/tools/stats_viewer/Resources.resx127
-rw-r--r--chromium/tools/stats_viewer/Resources/kitten.pngbin36163 -> 0 bytes
-rw-r--r--chromium/tools/stats_viewer/Resources/kittenbackground.pngbin1275 -> 0 bytes
-rw-r--r--chromium/tools/stats_viewer/program.cs23
-rw-r--r--chromium/tools/stats_viewer/stats_table.cs546
-rw-r--r--chromium/tools/stats_viewer/stats_viewer.Designer.cs392
-rw-r--r--chromium/tools/stats_viewer/stats_viewer.cs510
-rw-r--r--chromium/tools/stats_viewer/stats_viewer.csproj107
-rw-r--r--chromium/tools/stats_viewer/stats_viewer.resx1129
-rw-r--r--chromium/tools/stats_viewer/win32.cs50
-rw-r--r--chromium/tools/swarming_client/example/payload/hello_world.isolate49
-rw-r--r--chromium/tools/swarming_client/googletest/tests/isolate_test_cases/gtest_fake_pass.isolate13
-rw-r--r--chromium/tools/swarming_client/tests/isolate/all_items_invalid.isolate25
-rw-r--r--chromium/tools/swarming_client/tests/isolate/fail.isolate18
-rw-r--r--chromium/tools/swarming_client/tests/isolate/missing_trailing_slash.isolate11
-rw-r--r--chromium/tools/swarming_client/tests/isolate/no_run.isolate14
-rw-r--r--chromium/tools/swarming_client/tests/isolate/non_existent.isolate10
-rw-r--r--chromium/tools/swarming_client/tests/isolate/simple.isolate18
-rw-r--r--chromium/tools/swarming_client/tests/isolate/split.isolate16
-rw-r--r--chromium/tools/swarming_client/tests/isolate/symlink_full.isolate21
-rw-r--r--chromium/tools/swarming_client/tests/isolate/symlink_outside_build_root.isolate21
-rw-r--r--chromium/tools/swarming_client/tests/isolate/symlink_partial.isolate21
-rw-r--r--chromium/tools/swarming_client/tests/isolate/touch_only.isolate18
-rw-r--r--chromium/tools/swarming_client/tests/isolate/touch_root.isolate19
-rw-r--r--chromium/tools/swarming_client/tests/isolate/with_flag.isolate22
-rwxr-xr-xchromium/tools/swig/swig.py45
-rw-r--r--chromium/tools/symsrc/COPYING-pefile27
-rw-r--r--chromium/tools/symsrc/README.chromium14
-rwxr-xr-xchromium/tools/symsrc/img_fingerprint.py34
-rwxr-xr-xchromium/tools/symsrc/pdb_fingerprint_from_img.py64
-rw-r--r--chromium/tools/symsrc/pefile.py3729
-rwxr-xr-xchromium/tools/symsrc/source_index.py226
-rwxr-xr-xchromium/tools/sync-webkit-git.py221
-rwxr-xr-xchromium/tools/tcmalloc/print-live-objects.py91
-rw-r--r--chromium/tools/telemetry/telemetry.gyp16
-rw-r--r--chromium/tools/trace/trace.html287
-rw-r--r--chromium/tools/trace/trace_data.js1050
-rw-r--r--chromium/tools/traceline/svgui/README12
-rw-r--r--chromium/tools/traceline/svgui/startup-release.json178
-rw-r--r--chromium/tools/traceline/svgui/traceline.css73
-rw-r--r--chromium/tools/traceline/svgui/traceline.js693
-rw-r--r--chromium/tools/traceline/svgui/traceline.xml11
-rw-r--r--chromium/tools/traceline/traceline/Makefile30
-rw-r--r--chromium/tools/traceline/traceline/README21
-rw-r--r--chromium/tools/traceline/traceline/assembler.h576
-rw-r--r--chromium/tools/traceline/traceline/assembler_unittest.cc83
-rwxr-xr-xchromium/tools/traceline/traceline/assembler_unittest.sh7
-rw-r--r--chromium/tools/traceline/traceline/assembler_unittest.sh.expected54
-rwxr-xr-xchromium/tools/traceline/traceline/dump_syscalls_idarub.rb32
-rw-r--r--chromium/tools/traceline/traceline/logging.h28
-rw-r--r--chromium/tools/traceline/traceline/main.cc1339
-rw-r--r--chromium/tools/traceline/traceline/rdtsc.h43
-rw-r--r--chromium/tools/traceline/traceline/scripts/__init__.py0
-rwxr-xr-xchromium/tools/traceline/traceline/scripts/alloc.py27
-rw-r--r--chromium/tools/traceline/traceline/scripts/crit_sec.js87
-rwxr-xr-xchromium/tools/traceline/traceline/scripts/crit_sec.py57
-rwxr-xr-xchromium/tools/traceline/traceline/scripts/filter_short.py34
-rwxr-xr-xchromium/tools/traceline/traceline/scripts/filter_split.sh14
-rw-r--r--chromium/tools/traceline/traceline/scripts/heap.js69
-rwxr-xr-xchromium/tools/traceline/traceline/scripts/scstats.py32
-rwxr-xr-xchromium/tools/traceline/traceline/scripts/split.py31
-rw-r--r--chromium/tools/traceline/traceline/scripts/syscalls.py942
-rw-r--r--chromium/tools/traceline/traceline/sidestep/ia32_modrm_map.cc92
-rw-r--r--chromium/tools/traceline/traceline/sidestep/ia32_opcode_map.cc1159
-rw-r--r--chromium/tools/traceline/traceline/sidestep/mini_disassembler.cc416
-rw-r--r--chromium/tools/traceline/traceline/sidestep/mini_disassembler.h156
-rw-r--r--chromium/tools/traceline/traceline/sidestep/mini_disassembler_types.h197
-rw-r--r--chromium/tools/traceline/traceline/stubs.asm132
-rw-r--r--chromium/tools/traceline/traceline/sym_resolver.h167
-rw-r--r--chromium/tools/traceline/traceline/syscall_map.h2116
-rwxr-xr-xchromium/tools/unused-symbols-report.py171
-rwxr-xr-xchromium/tools/update_reference_build.py335
-rw-r--r--chromium/tools/usb_ids/usb_ids.py110
-rw-r--r--chromium/tools/valgrind/OWNERS5
-rwxr-xr-xchromium/tools/valgrind/asan/asan_symbolize.py49
-rwxr-xr-xchromium/tools/valgrind/asan/asan_wrapper.sh16
-rw-r--r--chromium/tools/valgrind/asan/third_party/README.chromium6
-rw-r--r--chromium/tools/valgrind/asan/third_party/__init__.py0
-rwxr-xr-xchromium/tools/valgrind/asan/third_party/asan_symbolize.py365
-rw-r--r--chromium/tools/valgrind/browser_wrapper_win.py49
-rwxr-xr-xchromium/tools/valgrind/chrome_tests.bat70
-rwxr-xr-xchromium/tools/valgrind/chrome_tests.py652
-rwxr-xr-xchromium/tools/valgrind/chrome_tests.sh122
-rw-r--r--chromium/tools/valgrind/common.py252
-rwxr-xr-xchromium/tools/valgrind/drmemory.bat5
-rw-r--r--chromium/tools/valgrind/drmemory/OWNERS1
-rw-r--r--chromium/tools/valgrind/drmemory/PRESUBMIT.py35
-rw-r--r--chromium/tools/valgrind/drmemory/suppressions.txt430
-rw-r--r--chromium/tools/valgrind/drmemory/suppressions_full.txt1337
-rwxr-xr-xchromium/tools/valgrind/drmemory_analyze.py193
-rw-r--r--chromium/tools/valgrind/gdb_helper.py87
-rw-r--r--chromium/tools/valgrind/gtest_exclude/OWNERS1
-rw-r--r--chromium/tools/valgrind/gtest_exclude/base_unittests.gtest-drmemory_win32.txt26
-rw-r--r--chromium/tools/valgrind/gtest_exclude/base_unittests.gtest-tsan.txt10
-rw-r--r--chromium/tools/valgrind/gtest_exclude/base_unittests.gtest-tsan_win32.txt28
-rw-r--r--chromium/tools/valgrind/gtest_exclude/base_unittests.gtest.txt26
-rw-r--r--chromium/tools/valgrind/gtest_exclude/base_unittests.gtest_mac.txt20
-rw-r--r--chromium/tools/valgrind/gtest_exclude/base_unittests.gtest_win-8.txt2
-rw-r--r--chromium/tools/valgrind/gtest_exclude/base_unittests.gtest_win32.txt12
-rw-r--r--chromium/tools/valgrind/gtest_exclude/browser_tests.gtest-drmemory_win32.txt56
-rw-r--r--chromium/tools/valgrind/gtest_exclude/browser_tests.gtest-memcheck.txt60
-rw-r--r--chromium/tools/valgrind/gtest_exclude/components_unittests.gtest-tsan_win32.txt6
-rw-r--r--chromium/tools/valgrind/gtest_exclude/content_unittests.gtest-tsan.txt2
-rw-r--r--chromium/tools/valgrind/gtest_exclude/content_unittests.gtest.txt5
-rw-r--r--chromium/tools/valgrind/gtest_exclude/content_unittests.gtest_mac.txt58
-rw-r--r--chromium/tools/valgrind/gtest_exclude/crypto_unittests.gtest-tsan_win32.txt2
-rw-r--r--chromium/tools/valgrind/gtest_exclude/interactive_ui_tests.gtest.txt34
-rw-r--r--chromium/tools/valgrind/gtest_exclude/ipc_tests.gtest-drmemory_win32.txt2
-rw-r--r--chromium/tools/valgrind/gtest_exclude/ipc_tests.gtest-tsan_win32.txt2
-rw-r--r--chromium/tools/valgrind/gtest_exclude/ipc_tests.gtest.txt6
-rw-r--r--chromium/tools/valgrind/gtest_exclude/media_unittests.gtest-drmemory_win32.txt4
-rw-r--r--chromium/tools/valgrind/gtest_exclude/media_unittests.gtest-tsan_win32.txt3
-rw-r--r--chromium/tools/valgrind/gtest_exclude/media_unittests.gtest.txt6
-rw-r--r--chromium/tools/valgrind/gtest_exclude/message_center_unittests.gtest.txt3
-rw-r--r--chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-drmemory_win-xp.txt3
-rw-r--r--chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-drmemory_win32.txt24
-rw-r--r--chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-memcheck.txt26
-rw-r--r--chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-tsan.txt27
-rw-r--r--chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-tsan_win32.txt40
-rw-r--r--chromium/tools/valgrind/gtest_exclude/net_unittests.gtest.txt21
-rw-r--r--chromium/tools/valgrind/gtest_exclude/net_unittests.gtest_linux.txt5
-rw-r--r--chromium/tools/valgrind/gtest_exclude/net_unittests.gtest_mac.txt6
-rw-r--r--chromium/tools/valgrind/gtest_exclude/printing_unittests.gtest-drmemory_win32.txt3
-rw-r--r--chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest-drmemory_win32.txt9
-rw-r--r--chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest-tsan_win32.txt2
-rw-r--r--chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest.txt2
-rw-r--r--chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest_win-8.txt2
-rw-r--r--chromium/tools/valgrind/gtest_exclude/safe_browsing_tests.gtest_mac.txt2
-rw-r--r--chromium/tools/valgrind/gtest_exclude/suppressions.txt39
-rw-r--r--chromium/tools/valgrind/gtest_exclude/sync_unit_tests.gtest-asan.txt2
-rw-r--r--chromium/tools/valgrind/gtest_exclude/sync_unit_tests.gtest-tsan.txt5
-rw-r--r--chromium/tools/valgrind/gtest_exclude/ui_unittests.gtest-memcheck.txt2
-rw-r--r--chromium/tools/valgrind/gtest_exclude/ui_unittests.gtest-tsan.txt2
-rw-r--r--chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-drmemory_win-xp.txt7
-rw-r--r--chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-drmemory_win32.txt76
-rw-r--r--chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-memcheck.txt19
-rw-r--r--chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-tsan.txt12
-rw-r--r--chromium/tools/valgrind/gtest_exclude/unit_tests.gtest.txt34
-rw-r--r--chromium/tools/valgrind/gtest_exclude/unit_tests.gtest_linux.txt31
-rw-r--r--chromium/tools/valgrind/gtest_exclude/unit_tests.gtest_mac.txt39
-rwxr-xr-xchromium/tools/valgrind/locate_valgrind.sh77
-rw-r--r--chromium/tools/valgrind/memcheck/OWNERS1
-rw-r--r--chromium/tools/valgrind/memcheck/PRESUBMIT.py81
-rw-r--r--chromium/tools/valgrind/memcheck/suppressions.txt6359
-rw-r--r--chromium/tools/valgrind/memcheck/suppressions_linux.txt24
-rw-r--r--chromium/tools/valgrind/memcheck/suppressions_mac.txt2378
-rwxr-xr-xchromium/tools/valgrind/memcheck_analyze.py634
-rwxr-xr-xchromium/tools/valgrind/regrind.sh138
-rw-r--r--chromium/tools/valgrind/reliability/url_list.txt11
-rwxr-xr-xchromium/tools/valgrind/scan-build.py227
-rwxr-xr-xchromium/tools/valgrind/suppressions.py1018
-rwxr-xr-xchromium/tools/valgrind/test_suppressions.py182
-rw-r--r--chromium/tools/valgrind/tsan/OWNERS1
-rw-r--r--chromium/tools/valgrind/tsan/PRESUBMIT.py35
-rw-r--r--chromium/tools/valgrind/tsan/ignores.txt189
-rw-r--r--chromium/tools/valgrind/tsan/ignores_win32.txt64
-rw-r--r--chromium/tools/valgrind/tsan/suppressions.txt1141
-rw-r--r--chromium/tools/valgrind/tsan/suppressions_win32.txt321
-rwxr-xr-xchromium/tools/valgrind/tsan_analyze.py271
-rw-r--r--chromium/tools/valgrind/tsan_v2/ignores.txt12
-rw-r--r--chromium/tools/valgrind/tsan_v2/suppressions.txt137
-rwxr-xr-xchromium/tools/valgrind/unused_suppressions.py24
-rwxr-xr-xchromium/tools/valgrind/valgrind.sh124
-rw-r--r--chromium/tools/valgrind/valgrind_test.py1235
-rwxr-xr-xchromium/tools/valgrind/waterfall.sh222
-rw-r--r--chromium/tools/vim/chromium.ycm_extra_conf.py203
-rw-r--r--chromium/tools/vim/filetypes.vim9
-rw-r--r--chromium/tools/vim/ninja-build.vim129
-rw-r--r--chromium/tools/win/static_initializers/static_initializers.gyp28
-rwxr-xr-xchromium/tools/win/toolchain/7z/7z.dllbin1422336 -> 0 bytes
-rwxr-xr-xchromium/tools/win/toolchain/7z/7z.exebin284160 -> 0 bytes
-rw-r--r--chromium/tools/win/toolchain/7z/LICENSE57
-rw-r--r--chromium/tools/win/toolchain/get_toolchain_if_necessary.py138
-rw-r--r--chromium/tools/win/toolchain/toolchain.py714
-rw-r--r--chromium/tools/win/toolchain/toolchain2013.py229
-rw-r--r--chromium/tools/xdisplaycheck/xdisplaycheck.cc115
666 files changed, 10634 insertions, 124675 deletions
diff --git a/chromium/tools/DEPS b/chromium/tools/DEPS
deleted file mode 100644
index dc04e3dfc6b..00000000000
--- a/chromium/tools/DEPS
+++ /dev/null
@@ -1,6 +0,0 @@
-# checkdeps.py shouldn't check include paths for files in these dirs:
-skip_child_includes = [
- "clang",
- "gyp",
- "traceline",
-]
diff --git a/chromium/tools/OWNERS b/chromium/tools/OWNERS
deleted file mode 100644
index 4cd808f0409..00000000000
--- a/chromium/tools/OWNERS
+++ /dev/null
@@ -1,3 +0,0 @@
-*
-
-per-file bisect-builds.py=rsesek@chromium.org
diff --git a/chromium/tools/PRESUBMIT.py b/chromium/tools/PRESUBMIT.py
deleted file mode 100644
index aff6048f1a8..00000000000
--- a/chromium/tools/PRESUBMIT.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright (c) 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.
-
-"""Top-level presubmit script for bisect/perf trybot.
-
-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for
-details on the presubmit API built into gcl.
-"""
-
-import imp
-import os
-
-def _ExamineConfigFiles(input_api):
- for f in input_api.AffectedFiles():
- if (not f.LocalPath().endswith('run-bisect-perf-regression.cfg') and
- not f.LocalPath().endswith('run-perf-test.cfg')):
- continue
-
- try:
- cfg_file = imp.load_source('config', os.path.basename(f.LocalPath()))
-
- for k, v in cfg_file.config.iteritems():
- if v:
- return f.LocalPath()
- except (IOError, AttributeError, TypeError):
- return f.LocalPath()
-
- return None
-
-def _CheckNoChangesToBisectConfigFile(input_api, output_api):
- results = _ExamineConfigFiles(input_api)
- if results:
- return [output_api.PresubmitError(
- 'The bisection config file should only contain a config dict with '
- 'empty fields. Changes to this file should never be submitted.',
- items=[results])]
-
- return []
-
-def CommonChecks(input_api, output_api):
- results = []
- results.extend(_CheckNoChangesToBisectConfigFile(input_api, output_api))
- return results
-
-def CheckChangeOnUpload(input_api, output_api):
- return CommonChecks(input_api, output_api)
-
-def CheckChangeOnCommit(input_api, output_api):
- return CommonChecks(input_api, output_api)
diff --git a/chromium/tools/android/android_tools.gyp b/chromium/tools/android/android_tools.gyp
index ed5e905c814..3fe1c6d8c62 100644
--- a/chromium/tools/android/android_tools.gyp
+++ b/chromium/tools/android/android_tools.gyp
@@ -11,9 +11,12 @@
'type': 'none',
'dependencies': [
'adb_reboot/adb_reboot.gyp:adb_reboot',
+ 'file_poller/file_poller.gyp:file_poller',
'forwarder2/forwarder.gyp:forwarder2',
'md5sum/md5sum.gyp:md5sum',
'purge_ashmem/purge_ashmem.gyp:purge_ashmem',
+ 'run_pie/run_pie.gyp:run_pie',
+ '../../tools/telemetry/telemetry.gyp:*#host',
],
},
{
@@ -30,5 +33,12 @@
'memconsumer/memconsumer.gyp:memconsumer',
],
},
+ {
+ 'target_name': 'ps_ext',
+ 'type': 'none',
+ 'dependencies': [
+ 'ps_ext/ps_ext.gyp:ps_ext',
+ ],
+ },
],
}
diff --git a/chromium/tools/android/file_poller/file_poller.gyp b/chromium/tools/android/file_poller/file_poller.gyp
new file mode 100644
index 00000000000..097344d2d29
--- /dev/null
+++ b/chromium/tools/android/file_poller/file_poller.gyp
@@ -0,0 +1,18 @@
+# Copyright 2014 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.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'file_poller',
+ 'type': 'executable',
+ 'dependencies': [
+ '../../../base/base.gyp:base',
+ ],
+ 'sources': [
+ 'file_poller.cc',
+ ],
+ },
+ ],
+}
diff --git a/chromium/tools/android/forwarder2/forwarder.gyp b/chromium/tools/android/forwarder2/forwarder.gyp
index 3f84e43bd66..fbf5eba6f2f 100644
--- a/chromium/tools/android/forwarder2/forwarder.gyp
+++ b/chromium/tools/android/forwarder2/forwarder.gyp
@@ -30,19 +30,6 @@
'include_dirs': [
'../../..',
],
- 'conditions': [
- # Warning: A PIE tool cannot run on ICS 4.0.4, so only
- # build it as position-independent when ASAN
- # is activated. See b/6587214 for details.
- [ 'asan==1', {
- 'cflags': [
- '-fPIE',
- ],
- 'ldflags': [
- '-pie',
- ],
- }],
- ],
'sources': [
'command.cc',
'common.cc',
@@ -51,6 +38,7 @@
'device_forwarder_main.cc',
'device_listener.cc',
'forwarder.cc',
+ 'forwarders_manager.cc',
'pipe_notifier.cc',
'socket.cc',
],
@@ -61,7 +49,6 @@
'toolsets': ['host'],
'dependencies': [
'../../../base/base.gyp:base',
- '../../../build/linux/system.gyp:x11',
'../common/common.gyp:android_tools_common',
],
'include_dirs': [
@@ -72,14 +59,11 @@
'common.cc',
'daemon.cc',
'forwarder.cc',
+ 'forwarders_manager.cc',
'host_controller.cc',
'host_forwarder_main.cc',
'pipe_notifier.cc',
'socket.cc',
- # TODO(pliard): Remove this and x11 dependency above. This is needed
- # to avoid undefined references at link time.
- '../../../base/message_loop/message_pump_glib.cc',
- '../../../base/message_loop/message_pump_gtk.cc',
],
},
],
diff --git a/chromium/tools/android/memdump/memdump.gyp b/chromium/tools/android/memdump/memdump.gyp
index faa24d0737b..f47cedf0048 100644
--- a/chromium/tools/android/memdump/memdump.gyp
+++ b/chromium/tools/android/memdump/memdump.gyp
@@ -5,27 +5,35 @@
{
'targets': [
{
- 'target_name': 'memdump',
+ 'target_name': 'memdump-unstripped',
'type': 'executable',
'dependencies': [
'../../../base/base.gyp:base',
],
- 'conditions': [
- # Warning: A PIE tool cannot run on ICS 4.0.4, so only
- # build it as position-independent when ASAN
- # is activated. See b/6587214 for details.
- [ 'asan==1', {
- 'cflags': [
- '-fPIE',
- ],
- 'ldflags': [
- '-pie',
- ],
- }],
- ],
'sources': [
'memdump.cc',
],
},
+ {
+ 'target_name': 'memdump',
+ 'type': 'none',
+ 'dependencies': [
+ 'memdump-unstripped',
+ ],
+ 'actions': [
+ {
+ 'action_name': 'strip_memdump',
+ 'inputs': ['<(PRODUCT_DIR)/memdump-unstripped'],
+ 'outputs': ['<(PRODUCT_DIR)/memdump'],
+ 'action': [
+ '<(android_strip)',
+ '--strip-unneeded',
+ '<@(_inputs)',
+ '-o',
+ '<@(_outputs)',
+ ],
+ },
+ ],
+ },
],
}
diff --git a/chromium/tools/android/ps_ext/ps_ext.gyp b/chromium/tools/android/ps_ext/ps_ext.gyp
new file mode 100644
index 00000000000..f467d93cf04
--- /dev/null
+++ b/chromium/tools/android/ps_ext/ps_ext.gyp
@@ -0,0 +1,36 @@
+# Copyright 2014 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.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'ps_ext-unstripped',
+ 'type': 'executable',
+ 'sources': [
+ 'ps_ext.c',
+ ],
+ },
+ {
+ 'target_name': 'ps_ext',
+ 'type': 'none',
+ 'dependencies': [
+ 'ps_ext-unstripped',
+ ],
+ 'actions': [
+ {
+ 'action_name': 'strip_ps_ext',
+ 'inputs': ['<(PRODUCT_DIR)/ps_ext-unstripped'],
+ 'outputs': ['<(PRODUCT_DIR)/ps_ext'],
+ 'action': [
+ '<(android_strip)',
+ '--strip-unneeded',
+ '<@(_inputs)',
+ '-o',
+ '<@(_outputs)',
+ ],
+ },
+ ],
+ },
+ ],
+}
diff --git a/chromium/tools/android/purge_ashmem/purge_ashmem.gyp b/chromium/tools/android/purge_ashmem/purge_ashmem.gyp
index 842d7561bb3..d563b1fa982 100644
--- a/chromium/tools/android/purge_ashmem/purge_ashmem.gyp
+++ b/chromium/tools/android/purge_ashmem/purge_ashmem.gyp
@@ -13,19 +13,6 @@
'include_dirs': [
'../../../',
],
- 'conditions': [
- # Warning: A PIE tool cannot run on ICS 4.0.4, so only
- # build it as position-independent when ASAN
- # is activated. See b/6587214 for details.
- [ 'asan==1', {
- 'cflags': [
- '-fPIE',
- ],
- 'ldflags': [
- '-pie',
- ],
- }],
- ],
'sources': [
'purge_ashmem.c',
],
diff --git a/chromium/tools/android/run_pie/run_pie.gyp b/chromium/tools/android/run_pie/run_pie.gyp
new file mode 100644
index 00000000000..b713dc4f855
--- /dev/null
+++ b/chromium/tools/android/run_pie/run_pie.gyp
@@ -0,0 +1,49 @@
+# Copyright 2014 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.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'run_pie-unstripped',
+ 'type': 'executable',
+ 'sources': [
+ 'run_pie.c',
+ ],
+ # See crbug.com/373219. This is the only Android executable which must be
+ # non PIE.
+ 'cflags!': [
+ '-fPIE',
+ ],
+ 'ldflags!': [
+ '-pie',
+ ],
+ # Don't inherit unneeded dependencies on stlport.so, so the binary remains
+ # self-contained also in component=shared_library builds.
+ 'libraries!': [
+ '-l<(android_stlport_library)',
+ ],
+ },
+ {
+ 'target_name': 'run_pie',
+ 'type': 'none',
+ 'dependencies': [
+ 'run_pie-unstripped',
+ ],
+ 'actions': [
+ {
+ 'action_name': 'strip_run_pie',
+ 'inputs': ['<(PRODUCT_DIR)/run_pie-unstripped'],
+ 'outputs': ['<(PRODUCT_DIR)/run_pie'],
+ 'action': [
+ '<(android_strip)',
+ '--strip-unneeded',
+ '<@(_inputs)',
+ '-o',
+ '<@(_outputs)',
+ ],
+ },
+ ],
+ },
+ ],
+}
diff --git a/chromium/tools/bash-completion b/chromium/tools/bash-completion
deleted file mode 100644
index 19172dab145..00000000000
--- a/chromium/tools/bash-completion
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright (c) 2012 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.
-
-# Flag completion rule for bash.
-# To load in your shell, "source path/to/this/file".
-
-chrome_source=$(cd $(dirname $BASH_SOURCE)/.. && pwd)
-
-_chrome_flag() {
- local cur targets
- cur="${COMP_WORDS[COMP_CWORD]}"
- targets=$(cd $chrome_source; \
- git ls-files '*switches*' | \
- xargs sed -ne 's/^[^/]*"\([^" /]\{1,\}\)".*/--\1/p')
- COMPREPLY=($(compgen -W "$targets" -- "$cur"))
- return 0
-}
-
-complete -F _chrome_flag google-chrome
-complete -F _chrome_flag chrome
-if [ $(uname) = "Darwin" ]
-then
- complete -F _chrome_flag Chromium
-fi
diff --git a/chromium/tools/bisect-builds.py b/chromium/tools/bisect-builds.py
deleted file mode 100755
index 00128fbd161..00000000000
--- a/chromium/tools/bisect-builds.py
+++ /dev/null
@@ -1,859 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-"""Snapshot Build Bisect Tool
-
-This script bisects a snapshot archive using binary search. It starts at
-a bad revision (it will try to guess HEAD) and asks for a last known-good
-revision. It will then binary search across this revision range by downloading,
-unzipping, and opening Chromium for you. After testing the specific revision,
-it will ask you whether it is good or bad before continuing the search.
-"""
-
-# The root URL for storage.
-CHROMIUM_BASE_URL = 'http://commondatastorage.googleapis.com/chromium-browser-snapshots'
-WEBKIT_BASE_URL = 'http://commondatastorage.googleapis.com/chromium-webkit-snapshots'
-
-# The root URL for official builds.
-OFFICIAL_BASE_URL = 'http://master.chrome.corp.google.com/official_builds'
-
-# Changelogs URL.
-CHANGELOG_URL = 'http://build.chromium.org/f/chromium/' \
- 'perf/dashboard/ui/changelog.html?' \
- 'url=/trunk/src&range=%d%%3A%d'
-
-# Official Changelogs URL.
-OFFICIAL_CHANGELOG_URL = 'http://omahaproxy.appspot.com/'\
- 'changelog?old_version=%s&new_version=%s'
-
-# DEPS file URL.
-DEPS_FILE = 'http://src.chromium.org/viewvc/chrome/trunk/src/DEPS?revision=%d'
-# Blink Changelogs URL.
-BLINK_CHANGELOG_URL = 'http://build.chromium.org/f/chromium/' \
- 'perf/dashboard/ui/changelog_blink.html?' \
- 'url=/trunk&range=%d%%3A%d'
-
-DONE_MESSAGE_GOOD_MIN = 'You are probably looking for a change made after %s ' \
- '(known good), but no later than %s (first known bad).'
-DONE_MESSAGE_GOOD_MAX = 'You are probably looking for a change made after %s ' \
- '(known bad), but no later than %s (first known good).'
-
-###############################################################################
-
-import json
-import optparse
-import os
-import re
-import shlex
-import shutil
-import subprocess
-import sys
-import tempfile
-import threading
-import urllib
-from distutils.version import LooseVersion
-from xml.etree import ElementTree
-import zipfile
-
-
-class PathContext(object):
- """A PathContext is used to carry the information used to construct URLs and
- paths when dealing with the storage server and archives."""
- def __init__(self, base_url, platform, good_revision, bad_revision,
- is_official, is_aura, flash_path = None):
- super(PathContext, self).__init__()
- # Store off the input parameters.
- self.base_url = base_url
- self.platform = platform # What's passed in to the '-a/--archive' option.
- self.good_revision = good_revision
- self.bad_revision = bad_revision
- self.is_official = is_official
- self.is_aura = is_aura
- self.flash_path = flash_path
-
- # The name of the ZIP file in a revision directory on the server.
- self.archive_name = None
-
- # Set some internal members:
- # _listing_platform_dir = Directory that holds revisions. Ends with a '/'.
- # _archive_extract_dir = Uncompressed directory in the archive_name file.
- # _binary_name = The name of the executable to run.
- if self.platform in ('linux', 'linux64', 'linux-arm'):
- self._binary_name = 'chrome'
- elif self.platform == 'mac':
- self.archive_name = 'chrome-mac.zip'
- self._archive_extract_dir = 'chrome-mac'
- elif self.platform == 'win':
- self.archive_name = 'chrome-win32.zip'
- self._archive_extract_dir = 'chrome-win32'
- self._binary_name = 'chrome.exe'
- else:
- raise Exception('Invalid platform: %s' % self.platform)
-
- if is_official:
- if self.platform == 'linux':
- self._listing_platform_dir = 'precise32bit/'
- self.archive_name = 'chrome-precise32bit.zip'
- self._archive_extract_dir = 'chrome-precise32bit'
- elif self.platform == 'linux64':
- self._listing_platform_dir = 'precise64bit/'
- self.archive_name = 'chrome-precise64bit.zip'
- self._archive_extract_dir = 'chrome-precise64bit'
- elif self.platform == 'mac':
- self._listing_platform_dir = 'mac/'
- self._binary_name = 'Google Chrome.app/Contents/MacOS/Google Chrome'
- elif self.platform == 'win':
- if self.is_aura:
- self._listing_platform_dir = 'win-aura/'
- else:
- self._listing_platform_dir = 'win/'
- else:
- if self.platform in ('linux', 'linux64', 'linux-arm'):
- self.archive_name = 'chrome-linux.zip'
- self._archive_extract_dir = 'chrome-linux'
- if self.platform == 'linux':
- self._listing_platform_dir = 'Linux/'
- elif self.platform == 'linux64':
- self._listing_platform_dir = 'Linux_x64/'
- elif self.platform == 'linux-arm':
- self._listing_platform_dir = 'Linux_ARM_Cross-Compile/'
- elif self.platform == 'mac':
- self._listing_platform_dir = 'Mac/'
- self._binary_name = 'Chromium.app/Contents/MacOS/Chromium'
- elif self.platform == 'win':
- self._listing_platform_dir = 'Win/'
-
- def GetListingURL(self, marker=None):
- """Returns the URL for a directory listing, with an optional marker."""
- marker_param = ''
- if marker:
- marker_param = '&marker=' + str(marker)
- return self.base_url + '/?delimiter=/&prefix=' + \
- self._listing_platform_dir + marker_param
-
- def GetDownloadURL(self, revision):
- """Gets the download URL for a build archive of a specific revision."""
- if self.is_official:
- return "%s/%s/%s%s" % (
- OFFICIAL_BASE_URL, revision, self._listing_platform_dir,
- self.archive_name)
- else:
- return "%s/%s%s/%s" % (self.base_url, self._listing_platform_dir,
- revision, self.archive_name)
-
- def GetLastChangeURL(self):
- """Returns a URL to the LAST_CHANGE file."""
- return self.base_url + '/' + self._listing_platform_dir + 'LAST_CHANGE'
-
- def GetLaunchPath(self):
- """Returns a relative path (presumably from the archive extraction location)
- that is used to run the executable."""
- return os.path.join(self._archive_extract_dir, self._binary_name)
-
- def IsAuraBuild(self, build):
- """Check the given build is Aura."""
- return build.split('.')[3] == '1'
-
- def IsASANBuild(self, build):
- """Check the given build is ASAN build."""
- return build.split('.')[3] == '2'
-
- def ParseDirectoryIndex(self):
- """Parses the Google Storage directory listing into a list of revision
- numbers."""
-
- def _FetchAndParse(url):
- """Fetches a URL and returns a 2-Tuple of ([revisions], next-marker). If
- next-marker is not None, then the listing is a partial listing and another
- fetch should be performed with next-marker being the marker= GET
- parameter."""
- handle = urllib.urlopen(url)
- document = ElementTree.parse(handle)
-
- # All nodes in the tree are namespaced. Get the root's tag name to extract
- # the namespace. Etree does namespaces as |{namespace}tag|.
- root_tag = document.getroot().tag
- end_ns_pos = root_tag.find('}')
- if end_ns_pos == -1:
- raise Exception("Could not locate end namespace for directory index")
- namespace = root_tag[:end_ns_pos + 1]
-
- # Find the prefix (_listing_platform_dir) and whether or not the list is
- # truncated.
- prefix_len = len(document.find(namespace + 'Prefix').text)
- next_marker = None
- is_truncated = document.find(namespace + 'IsTruncated')
- if is_truncated is not None and is_truncated.text.lower() == 'true':
- next_marker = document.find(namespace + 'NextMarker').text
-
- # Get a list of all the revisions.
- all_prefixes = document.findall(namespace + 'CommonPrefixes/' +
- namespace + 'Prefix')
- # The <Prefix> nodes have content of the form of
- # |_listing_platform_dir/revision/|. Strip off the platform dir and the
- # trailing slash to just have a number.
- revisions = []
- for prefix in all_prefixes:
- revnum = prefix.text[prefix_len:-1]
- try:
- revnum = int(revnum)
- revisions.append(revnum)
- except ValueError:
- pass
- return (revisions, next_marker)
-
- # Fetch the first list of revisions.
- (revisions, next_marker) = _FetchAndParse(self.GetListingURL())
-
- # If the result list was truncated, refetch with the next marker. Do this
- # until an entire directory listing is done.
- while next_marker:
- next_url = self.GetListingURL(next_marker)
- (new_revisions, next_marker) = _FetchAndParse(next_url)
- revisions.extend(new_revisions)
- return revisions
-
- def GetRevList(self):
- """Gets the list of revision numbers between self.good_revision and
- self.bad_revision."""
- # Download the revlist and filter for just the range between good and bad.
- minrev = min(self.good_revision, self.bad_revision)
- maxrev = max(self.good_revision, self.bad_revision)
- revlist_all = map(int, self.ParseDirectoryIndex())
-
- revlist = [x for x in revlist_all if x >= int(minrev) and x <= int(maxrev)]
- revlist.sort()
-
- # Set good and bad revisions to be legit revisions.
- if revlist:
- if self.good_revision < self.bad_revision:
- self.good_revision = revlist[0]
- self.bad_revision = revlist[-1]
- else:
- self.bad_revision = revlist[0]
- self.good_revision = revlist[-1]
-
- # Fix chromium rev so that the deps blink revision matches REVISIONS file.
- if self.base_url == WEBKIT_BASE_URL:
- revlist_all.sort()
- self.good_revision = FixChromiumRevForBlink(revlist,
- revlist_all,
- self,
- self.good_revision)
- self.bad_revision = FixChromiumRevForBlink(revlist,
- revlist_all,
- self,
- self.bad_revision)
- return revlist
-
- def GetOfficialBuildsList(self):
- """Gets the list of official build numbers between self.good_revision and
- self.bad_revision."""
- # Download the revlist and filter for just the range between good and bad.
- minrev = min(self.good_revision, self.bad_revision)
- maxrev = max(self.good_revision, self.bad_revision)
- handle = urllib.urlopen(OFFICIAL_BASE_URL)
- dirindex = handle.read()
- handle.close()
- build_numbers = re.findall(r'<a href="([0-9][0-9].*)/">', dirindex)
- final_list = []
- i = 0
- parsed_build_numbers = [LooseVersion(x) for x in build_numbers]
- for build_number in sorted(parsed_build_numbers):
- path = OFFICIAL_BASE_URL + '/' + str(build_number) + '/' + \
- self._listing_platform_dir + self.archive_name
- i = i + 1
- try:
- connection = urllib.urlopen(path)
- connection.close()
- if build_number > maxrev:
- break
- if build_number >= minrev:
- # If we are bisecting Aura, we want to include only builds which
- # ends with ".1".
- if self.is_aura:
- if self.IsAuraBuild(str(build_number)):
- final_list.append(str(build_number))
- # If we are bisecting only official builds (without --aura),
- # we can not include builds which ends with '.1' or '.2' since
- # they have different folder hierarchy inside.
- elif (not self.IsAuraBuild(str(build_number)) and
- not self.IsASANBuild(str(build_number))):
- final_list.append(str(build_number))
- except urllib.HTTPError, e:
- pass
- return final_list
-
-def UnzipFilenameToDir(filename, directory):
- """Unzip |filename| to |directory|."""
- cwd = os.getcwd()
- if not os.path.isabs(filename):
- filename = os.path.join(cwd, filename)
- zf = zipfile.ZipFile(filename)
- # Make base.
- if not os.path.isdir(directory):
- os.mkdir(directory)
- os.chdir(directory)
- # Extract files.
- for info in zf.infolist():
- name = info.filename
- if name.endswith('/'): # dir
- if not os.path.isdir(name):
- os.makedirs(name)
- else: # file
- directory = os.path.dirname(name)
- if not os.path.isdir(directory):
- os.makedirs(directory)
- out = open(name, 'wb')
- out.write(zf.read(name))
- out.close()
- # Set permissions. Permission info in external_attr is shifted 16 bits.
- os.chmod(name, info.external_attr >> 16L)
- os.chdir(cwd)
-
-
-def FetchRevision(context, rev, filename, quit_event=None, progress_event=None):
- """Downloads and unzips revision |rev|.
- @param context A PathContext instance.
- @param rev The Chromium revision number/tag to download.
- @param filename The destination for the downloaded file.
- @param quit_event A threading.Event which will be set by the master thread to
- indicate that the download should be aborted.
- @param progress_event A threading.Event which will be set by the master thread
- to indicate that the progress of the download should be
- displayed.
- """
- def ReportHook(blocknum, blocksize, totalsize):
- if quit_event and quit_event.isSet():
- raise RuntimeError("Aborting download of revision %s" % str(rev))
- if progress_event and progress_event.isSet():
- size = blocknum * blocksize
- if totalsize == -1: # Total size not known.
- progress = "Received %d bytes" % size
- else:
- size = min(totalsize, size)
- progress = "Received %d of %d bytes, %.2f%%" % (
- size, totalsize, 100.0 * size / totalsize)
- # Send a \r to let all progress messages use just one line of output.
- sys.stdout.write("\r" + progress)
- sys.stdout.flush()
-
- download_url = context.GetDownloadURL(rev)
- try:
- urllib.urlretrieve(download_url, filename, ReportHook)
- if progress_event and progress_event.isSet():
- print
- except RuntimeError, e:
- pass
-
-
-def RunRevision(context, revision, zipfile, profile, num_runs, command, args):
- """Given a zipped revision, unzip it and run the test."""
- print "Trying revision %s..." % str(revision)
-
- # Create a temp directory and unzip the revision into it.
- cwd = os.getcwd()
- tempdir = tempfile.mkdtemp(prefix='bisect_tmp')
- UnzipFilenameToDir(zipfile, tempdir)
- os.chdir(tempdir)
-
- # Run the build as many times as specified.
- testargs = ['--user-data-dir=%s' % profile] + args
- # The sandbox must be run as root on Official Chrome, so bypass it.
- if ((context.is_official or context.flash_path) and
- context.platform.startswith('linux')):
- testargs.append('--no-sandbox')
- if context.flash_path:
- testargs.append('--ppapi-flash-path=%s' % context.flash_path)
- # We have to pass a large enough Flash version, which currently needs not
- # be correct. Instead of requiring the user of the script to figure out and
- # pass the correct version we just spoof it.
- testargs.append('--ppapi-flash-version=99.9.999.999')
-
- runcommand = []
- for token in shlex.split(command):
- if token == "%a":
- runcommand.extend(testargs)
- else:
- runcommand.append( \
- token.replace('%p', context.GetLaunchPath()) \
- .replace('%s', ' '.join(testargs)))
-
- for i in range(0, num_runs):
- subproc = subprocess.Popen(runcommand,
- bufsize=-1,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- (stdout, stderr) = subproc.communicate()
-
- os.chdir(cwd)
- try:
- shutil.rmtree(tempdir, True)
- except Exception, e:
- pass
-
- return (subproc.returncode, stdout, stderr)
-
-
-def AskIsGoodBuild(rev, official_builds, status, stdout, stderr):
- """Ask the user whether build |rev| is good or bad."""
- # Loop until we get a response that we can parse.
- while True:
- response = raw_input('Revision %s is ' \
- '[(g)ood/(b)ad/(r)etry/(u)nknown/(q)uit]: ' %
- str(rev))
- if response and response in ('g', 'b', 'r', 'u'):
- return response
- if response and response == 'q':
- raise SystemExit()
-
-
-class DownloadJob(object):
- """DownloadJob represents a task to download a given Chromium revision."""
- def __init__(self, context, name, rev, zipfile):
- super(DownloadJob, self).__init__()
- # Store off the input parameters.
- self.context = context
- self.name = name
- self.rev = rev
- self.zipfile = zipfile
- self.quit_event = threading.Event()
- self.progress_event = threading.Event()
-
- def Start(self):
- """Starts the download."""
- fetchargs = (self.context,
- self.rev,
- self.zipfile,
- self.quit_event,
- self.progress_event)
- self.thread = threading.Thread(target=FetchRevision,
- name=self.name,
- args=fetchargs)
- self.thread.start()
-
- def Stop(self):
- """Stops the download which must have been started previously."""
- self.quit_event.set()
- self.thread.join()
- os.unlink(self.zipfile)
-
- def WaitFor(self):
- """Prints a message and waits for the download to complete. The download
- must have been started previously."""
- print "Downloading revision %s..." % str(self.rev)
- self.progress_event.set() # Display progress of download.
- self.thread.join()
-
-
-def Bisect(base_url,
- platform,
- official_builds,
- is_aura,
- good_rev=0,
- bad_rev=0,
- num_runs=1,
- command="%p %a",
- try_args=(),
- profile=None,
- flash_path=None,
- evaluate=AskIsGoodBuild):
- """Given known good and known bad revisions, run a binary search on all
- archived revisions to determine the last known good revision.
-
- @param platform Which build to download/run ('mac', 'win', 'linux64', etc.).
- @param official_builds Specify build type (Chromium or Official build).
- @param good_rev Number/tag of the known good revision.
- @param bad_rev Number/tag of the known bad revision.
- @param num_runs Number of times to run each build for asking good/bad.
- @param try_args A tuple of arguments to pass to the test application.
- @param profile The name of the user profile to run with.
- @param evaluate A function which returns 'g' if the argument build is good,
- 'b' if it's bad or 'u' if unknown.
-
- Threading is used to fetch Chromium revisions in the background, speeding up
- the user's experience. For example, suppose the bounds of the search are
- good_rev=0, bad_rev=100. The first revision to be checked is 50. Depending on
- whether revision 50 is good or bad, the next revision to check will be either
- 25 or 75. So, while revision 50 is being checked, the script will download
- revisions 25 and 75 in the background. Once the good/bad verdict on rev 50 is
- known:
-
- - If rev 50 is good, the download of rev 25 is cancelled, and the next test
- is run on rev 75.
-
- - If rev 50 is bad, the download of rev 75 is cancelled, and the next test
- is run on rev 25.
- """
-
- if not profile:
- profile = 'profile'
-
- context = PathContext(base_url, platform, good_rev, bad_rev,
- official_builds, is_aura, flash_path)
- cwd = os.getcwd()
-
- print "Downloading list of known revisions..."
- _GetDownloadPath = lambda rev: os.path.join(cwd,
- '%s-%s' % (str(rev), context.archive_name))
- if official_builds:
- revlist = context.GetOfficialBuildsList()
- else:
- revlist = context.GetRevList()
-
- # Get a list of revisions to bisect across.
- if len(revlist) < 2: # Don't have enough builds to bisect.
- msg = 'We don\'t have enough builds to bisect. revlist: %s' % revlist
- raise RuntimeError(msg)
-
- # Figure out our bookends and first pivot point; fetch the pivot revision.
- minrev = 0
- maxrev = len(revlist) - 1
- pivot = maxrev / 2
- rev = revlist[pivot]
- zipfile = _GetDownloadPath(rev)
- fetch = DownloadJob(context, 'initial_fetch', rev, zipfile)
- fetch.Start()
- fetch.WaitFor()
-
- # Binary search time!
- while fetch and fetch.zipfile and maxrev - minrev > 1:
- if bad_rev < good_rev:
- min_str, max_str = "bad", "good"
- else:
- min_str, max_str = "good", "bad"
- print 'Bisecting range [%s (%s), %s (%s)].' % (revlist[minrev], min_str, \
- revlist[maxrev], max_str)
-
- # Pre-fetch next two possible pivots
- # - down_pivot is the next revision to check if the current revision turns
- # out to be bad.
- # - up_pivot is the next revision to check if the current revision turns
- # out to be good.
- down_pivot = int((pivot - minrev) / 2) + minrev
- down_fetch = None
- if down_pivot != pivot and down_pivot != minrev:
- down_rev = revlist[down_pivot]
- down_fetch = DownloadJob(context, 'down_fetch', down_rev,
- _GetDownloadPath(down_rev))
- down_fetch.Start()
-
- up_pivot = int((maxrev - pivot) / 2) + pivot
- up_fetch = None
- if up_pivot != pivot and up_pivot != maxrev:
- up_rev = revlist[up_pivot]
- up_fetch = DownloadJob(context, 'up_fetch', up_rev,
- _GetDownloadPath(up_rev))
- up_fetch.Start()
-
- # Run test on the pivot revision.
- status = None
- stdout = None
- stderr = None
- try:
- (status, stdout, stderr) = RunRevision(context,
- rev,
- fetch.zipfile,
- profile,
- num_runs,
- command,
- try_args)
- except Exception, e:
- print >> sys.stderr, e
-
- # Call the evaluate function to see if the current revision is good or bad.
- # On that basis, kill one of the background downloads and complete the
- # other, as described in the comments above.
- try:
- answer = evaluate(rev, official_builds, status, stdout, stderr)
- if answer == 'g' and good_rev < bad_rev or \
- answer == 'b' and bad_rev < good_rev:
- fetch.Stop()
- minrev = pivot
- if down_fetch:
- down_fetch.Stop() # Kill the download of the older revision.
- fetch = None
- if up_fetch:
- up_fetch.WaitFor()
- pivot = up_pivot
- fetch = up_fetch
- elif answer == 'b' and good_rev < bad_rev or \
- answer == 'g' and bad_rev < good_rev:
- fetch.Stop()
- maxrev = pivot
- if up_fetch:
- up_fetch.Stop() # Kill the download of the newer revision.
- fetch = None
- if down_fetch:
- down_fetch.WaitFor()
- pivot = down_pivot
- fetch = down_fetch
- elif answer == 'r':
- pass # Retry requires no changes.
- elif answer == 'u':
- # Nuke the revision from the revlist and choose a new pivot.
- fetch.Stop()
- revlist.pop(pivot)
- maxrev -= 1 # Assumes maxrev >= pivot.
-
- if maxrev - minrev > 1:
- # Alternate between using down_pivot or up_pivot for the new pivot
- # point, without affecting the range. Do this instead of setting the
- # pivot to the midpoint of the new range because adjacent revisions
- # are likely affected by the same issue that caused the (u)nknown
- # response.
- if up_fetch and down_fetch:
- fetch = [up_fetch, down_fetch][len(revlist) % 2]
- elif up_fetch:
- fetch = up_fetch
- else:
- fetch = down_fetch
- fetch.WaitFor()
- if fetch == up_fetch:
- pivot = up_pivot - 1 # Subtracts 1 because revlist was resized.
- else:
- pivot = down_pivot
- zipfile = fetch.zipfile
-
- if down_fetch and fetch != down_fetch:
- down_fetch.Stop()
- if up_fetch and fetch != up_fetch:
- up_fetch.Stop()
- else:
- assert False, "Unexpected return value from evaluate(): " + answer
- except SystemExit:
- print "Cleaning up..."
- for f in [_GetDownloadPath(revlist[down_pivot]),
- _GetDownloadPath(revlist[up_pivot])]:
- try:
- os.unlink(f)
- except OSError:
- pass
- sys.exit(0)
-
- rev = revlist[pivot]
-
- return (revlist[minrev], revlist[maxrev])
-
-
-def GetBlinkDEPSRevisionForChromiumRevision(rev):
- """Returns the blink revision that was in REVISIONS file at
- chromium revision |rev|."""
- # . doesn't match newlines without re.DOTALL, so this is safe.
- blink_re = re.compile(r'webkit_revision\D*(\d+)')
- url = urllib.urlopen(DEPS_FILE % rev)
- m = blink_re.search(url.read())
- url.close()
- if m:
- return int(m.group(1))
- else:
- raise Exception('Could not get Blink revision for Chromium rev %d'
- % rev)
-
-
-def GetBlinkRevisionForChromiumRevision(self, rev):
- """Returns the blink revision that was in REVISIONS file at
- chromium revision |rev|."""
- file_url = "%s/%s%d/REVISIONS" % (self.base_url,
- self._listing_platform_dir, rev)
- url = urllib.urlopen(file_url)
- data = json.loads(url.read())
- url.close()
- if 'webkit_revision' in data:
- return data['webkit_revision']
- else:
- raise Exception('Could not get blink revision for cr rev %d' % rev)
-
-def FixChromiumRevForBlink(revisions_final, revisions, self, rev):
- """Returns the chromium revision that has the correct blink revision
- for blink bisect, DEPS and REVISIONS file might not match since
- blink snapshots point to tip of tree blink.
- Note: The revisions_final variable might get modified to include
- additional revisions."""
-
- blink_deps_rev = GetBlinkDEPSRevisionForChromiumRevision(rev)
-
- while (GetBlinkRevisionForChromiumRevision(self, rev) > blink_deps_rev):
- idx = revisions.index(rev)
- if idx > 0:
- rev = revisions[idx-1]
- if rev not in revisions_final:
- revisions_final.insert(0, rev)
-
- revisions_final.sort()
- return rev
-
-def GetChromiumRevision(url):
- """Returns the chromium revision read from given URL."""
- try:
- # Location of the latest build revision number
- return int(urllib.urlopen(url).read())
- except Exception, e:
- print('Could not determine latest revision. This could be bad...')
- return 999999999
-
-
-def main():
- usage = ('%prog [options] [-- chromium-options]\n'
- 'Perform binary search on the snapshot builds to find a minimal\n'
- 'range of revisions where a behavior change happened. The\n'
- 'behaviors are described as "good" and "bad".\n'
- 'It is NOT assumed that the behavior of the later revision is\n'
- 'the bad one.\n'
- '\n'
- 'Revision numbers should use\n'
- ' Official versions (e.g. 1.0.1000.0) for official builds. (-o)\n'
- ' SVN revisions (e.g. 123456) for chromium builds, from trunk.\n'
- ' Use base_trunk_revision from http://omahaproxy.appspot.com/\n'
- ' for earlier revs.\n'
- ' Chrome\'s about: build number and omahaproxy branch_revision\n'
- ' are incorrect, they are from branches.\n'
- '\n'
- 'Tip: add "-- --no-first-run" to bypass the first run prompts.')
- parser = optparse.OptionParser(usage=usage)
- # Strangely, the default help output doesn't include the choice list.
- choices = ['mac', 'win', 'linux', 'linux64', 'linux-arm']
- # linux-chromiumos lacks a continuous archive http://crbug.com/78158
- parser.add_option('-a', '--archive',
- choices = choices,
- help = 'The buildbot archive to bisect [%s].' %
- '|'.join(choices))
- parser.add_option('-o', action="store_true", dest='official_builds',
- help = 'Bisect across official ' +
- 'Chrome builds (internal only) instead of ' +
- 'Chromium archives.')
- parser.add_option('-b', '--bad', type = 'str',
- help = 'A bad revision to start bisection. ' +
- 'May be earlier or later than the good revision. ' +
- 'Default is HEAD.')
- parser.add_option('-f', '--flash_path', type = 'str',
- help = 'Absolute path to a recent Adobe Pepper Flash ' +
- 'binary to be used in this bisection (e.g. ' +
- 'on Windows C:\...\pepflashplayer.dll and on Linux ' +
- '/opt/google/chrome/PepperFlash/libpepflashplayer.so).')
- parser.add_option('-g', '--good', type = 'str',
- help = 'A good revision to start bisection. ' +
- 'May be earlier or later than the bad revision. ' +
- 'Default is 0.')
- parser.add_option('-p', '--profile', '--user-data-dir', type = 'str',
- help = 'Profile to use; this will not reset every run. ' +
- 'Defaults to a clean profile.', default = 'profile')
- parser.add_option('-t', '--times', type = 'int',
- help = 'Number of times to run each build before asking ' +
- 'if it\'s good or bad. Temporary profiles are reused.',
- default = 1)
- parser.add_option('-c', '--command', type = 'str',
- help = 'Command to execute. %p and %a refer to Chrome ' +
- 'executable and specified extra arguments respectively. ' +
- 'Use %s to specify all extra arguments as one string. ' +
- 'Defaults to "%p %a". Note that any extra paths ' +
- 'specified should be absolute.',
- default = '%p %a')
- parser.add_option('-l', '--blink', action='store_true',
- help = 'Use Blink bisect instead of Chromium. ')
- parser.add_option('--aura',
- dest='aura',
- action='store_true',
- default=False,
- help='Allow the script to bisect aura builds')
-
- (opts, args) = parser.parse_args()
-
- if opts.archive is None:
- print 'Error: missing required parameter: --archive'
- print
- parser.print_help()
- return 1
-
- if opts.aura:
- if opts.archive != 'win' or not opts.official_builds:
- print 'Error: Aura is supported only on Windows platform '\
- 'and official builds.'
- return 1
-
- if opts.blink:
- base_url = WEBKIT_BASE_URL
- else:
- base_url = CHROMIUM_BASE_URL
-
- # Create the context. Initialize 0 for the revisions as they are set below.
- context = PathContext(base_url, opts.archive, 0, 0,
- opts.official_builds, opts.aura, None)
- # Pick a starting point, try to get HEAD for this.
- if opts.bad:
- bad_rev = opts.bad
- else:
- bad_rev = '999.0.0.0'
- if not opts.official_builds:
- bad_rev = GetChromiumRevision(context.GetLastChangeURL())
-
- # Find out when we were good.
- if opts.good:
- good_rev = opts.good
- else:
- good_rev = '0.0.0.0' if opts.official_builds else 0
-
- if opts.flash_path:
- flash_path = opts.flash_path
- msg = 'Could not find Flash binary at %s' % flash_path
- assert os.path.exists(flash_path), msg
-
- if opts.official_builds:
- good_rev = LooseVersion(good_rev)
- bad_rev = LooseVersion(bad_rev)
- else:
- good_rev = int(good_rev)
- bad_rev = int(bad_rev)
-
- if opts.times < 1:
- print('Number of times to run (%d) must be greater than or equal to 1.' %
- opts.times)
- parser.print_help()
- return 1
-
- (min_chromium_rev, max_chromium_rev) = Bisect(
- base_url, opts.archive, opts.official_builds, opts.aura, good_rev,
- bad_rev, opts.times, opts.command, args, opts.profile, opts.flash_path)
-
- # Get corresponding blink revisions.
- try:
- min_blink_rev = GetBlinkRevisionForChromiumRevision(context,
- min_chromium_rev)
- max_blink_rev = GetBlinkRevisionForChromiumRevision(context,
- max_chromium_rev)
- except Exception, e:
- # Silently ignore the failure.
- min_blink_rev, max_blink_rev = 0, 0
-
- if opts.blink:
- # We're done. Let the user know the results in an official manner.
- if good_rev > bad_rev:
- print DONE_MESSAGE_GOOD_MAX % (str(min_blink_rev), str(max_blink_rev))
- else:
- print DONE_MESSAGE_GOOD_MIN % (str(min_blink_rev), str(max_blink_rev))
-
- print 'BLINK CHANGELOG URL:'
- print ' ' + BLINK_CHANGELOG_URL % (max_blink_rev, min_blink_rev)
-
- else:
- # We're done. Let the user know the results in an official manner.
- if good_rev > bad_rev:
- print DONE_MESSAGE_GOOD_MAX % (str(min_chromium_rev),
- str(max_chromium_rev))
- else:
- print DONE_MESSAGE_GOOD_MIN % (str(min_chromium_rev),
- str(max_chromium_rev))
- if min_blink_rev != max_blink_rev:
- print ("NOTE: There is a Blink roll in the range, "
- "you might also want to do a Blink bisect.")
-
- print 'CHANGELOG URL:'
- if opts.official_builds:
- print OFFICIAL_CHANGELOG_URL % (min_chromium_rev, max_chromium_rev)
- else:
- print ' ' + CHANGELOG_URL % (min_chromium_rev, max_chromium_rev)
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/bisect-manual-test.py b/chromium/tools/bisect-manual-test.py
deleted file mode 100755
index 81519cb0cf4..00000000000
--- a/chromium/tools/bisect-manual-test.py
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/env python
-# 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.
-
-"""Simple script which asks user to manually check result of bisection.
-
-Typically used as by the run-bisect-manual-test.py script.
-"""
-
-import os
-import sys
-
-sys.path.append(os.path.join(os.path.dirname(__file__), 'telemetry'))
-from telemetry.core import browser_finder
-from telemetry.core import browser_options
-
-
-def _StartManualTest(options):
- """Start browser then ask the user whether build is good or bad."""
- browser_to_create = browser_finder.FindBrowser(options)
- print 'Starting browser: %s.' % options.browser_type
- with browser_to_create.Create() as browser:
- browser.Start();
-
- # Loop until we get a response that we can parse.
- while True:
- sys.stderr.write('Revision is [(g)ood/(b)ad]: ')
- response = raw_input()
- if response and response in ('g', 'b'):
- if response in ('g'):
- print "RESULT manual_test: manual_test= 1"
- else:
- print "RESULT manual_test: manual_test= 0"
- break
-
- browser.Close()
-
-
-def main():
- usage = ('%prog [options]\n'
- 'Starts browser with an optional url and asks user whether '
- 'revision is good or bad.\n')
-
- options = browser_options.BrowserFinderOptions()
- parser = options.CreateParser(usage)
- options, args = parser.parse_args()
-
- _StartManualTest(options)
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/bisect-perf-regression.py b/chromium/tools/bisect-perf-regression.py
deleted file mode 100755
index fa087b6e97f..00000000000
--- a/chromium/tools/bisect-perf-regression.py
+++ /dev/null
@@ -1,2948 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 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.
-
-"""Performance Test Bisect Tool
-
-This script bisects a series of changelists using binary search. It starts at
-a bad revision where a performance metric has regressed, and asks for a last
-known-good revision. It will then binary search across this revision range by
-syncing, building, and running a performance test. If the change is
-suspected to occur as a result of WebKit/V8 changes, the script will
-further bisect changes to those depots and attempt to narrow down the revision
-range.
-
-
-An example usage (using svn cl's):
-
-./tools/bisect-perf-regression.py -c\
-"out/Release/performance_ui_tests --gtest_filter=ShutdownTest.SimpleUserQuit"\
--g 168222 -b 168232 -m shutdown/simple-user-quit
-
-Be aware that if you're using the git workflow and specify an svn revision,
-the script will attempt to find the git SHA1 where svn changes up to that
-revision were merged in.
-
-
-An example usage (using git hashes):
-
-./tools/bisect-perf-regression.py -c\
-"out/Release/performance_ui_tests --gtest_filter=ShutdownTest.SimpleUserQuit"\
--g 1f6e67861535121c5c819c16a666f2436c207e7b\
--b b732f23b4f81c382db0b23b9035f3dadc7d925bb\
--m shutdown/simple-user-quit
-
-"""
-
-import copy
-import datetime
-import errno
-import imp
-import math
-import optparse
-import os
-import re
-import shlex
-import shutil
-import StringIO
-import subprocess
-import sys
-import time
-
-import bisect_utils
-
-
-# The additional repositories that might need to be bisected.
-# If the repository has any dependant repositories (such as skia/src needs
-# skia/include and skia/gyp to be updated), specify them in the 'depends'
-# so that they're synced appropriately.
-# Format is:
-# src: path to the working directory.
-# recurse: True if this repositry will get bisected.
-# depends: A list of other repositories that are actually part of the same
-# repository in svn.
-# svn: Needed for git workflow to resolve hashes to svn revisions.
-# from: Parent depot that must be bisected before this is bisected.
-DEPOT_DEPS_NAME = {
- 'chromium' : {
- "src" : "src",
- "recurse" : True,
- "depends" : None,
- "from" : ['cros', 'android-chrome'],
- 'viewvc': 'http://src.chromium.org/viewvc/chrome?view=revision&revision='
- },
- 'webkit' : {
- "src" : "src/third_party/WebKit",
- "recurse" : True,
- "depends" : None,
- "from" : ['chromium'],
- 'viewvc': 'http://src.chromium.org/viewvc/blink?view=revision&revision='
- },
- 'angle' : {
- "src" : "src/third_party/angle",
- "src_old" : "src/third_party/angle_dx11",
- "recurse" : True,
- "depends" : None,
- "from" : ['chromium'],
- "platform": 'nt',
- },
- 'v8' : {
- "src" : "src/v8",
- "recurse" : True,
- "depends" : None,
- "from" : ['chromium'],
- "custom_deps": bisect_utils.GCLIENT_CUSTOM_DEPS_V8,
- 'viewvc': 'https://code.google.com/p/v8/source/detail?r=',
- },
- 'v8_bleeding_edge' : {
- "src" : "src/v8_bleeding_edge",
- "recurse" : True,
- "depends" : None,
- "svn": "https://v8.googlecode.com/svn/branches/bleeding_edge",
- "from" : ['v8'],
- 'viewvc': 'https://code.google.com/p/v8/source/detail?r=',
- },
- 'skia/src' : {
- "src" : "src/third_party/skia/src",
- "recurse" : True,
- "svn" : "http://skia.googlecode.com/svn/trunk/src",
- "depends" : ['skia/include', 'skia/gyp'],
- "from" : ['chromium'],
- 'viewvc': 'https://code.google.com/p/skia/source/detail?r=',
- },
- 'skia/include' : {
- "src" : "src/third_party/skia/include",
- "recurse" : False,
- "svn" : "http://skia.googlecode.com/svn/trunk/include",
- "depends" : None,
- "from" : ['chromium'],
- 'viewvc': 'https://code.google.com/p/skia/source/detail?r=',
- },
- 'skia/gyp' : {
- "src" : "src/third_party/skia/gyp",
- "recurse" : False,
- "svn" : "http://skia.googlecode.com/svn/trunk/gyp",
- "depends" : None,
- "from" : ['chromium'],
- 'viewvc': 'https://code.google.com/p/skia/source/detail?r=',
- },
-}
-
-DEPOT_NAMES = DEPOT_DEPS_NAME.keys()
-CROS_SDK_PATH = os.path.join('..', 'cros', 'chromite', 'bin', 'cros_sdk')
-CROS_VERSION_PATTERN = 'new version number from %s'
-CROS_CHROMEOS_PATTERN = 'chromeos-base/chromeos-chrome'
-CROS_TEST_KEY_PATH = os.path.join('..', 'cros', 'chromite', 'ssh_keys',
- 'testing_rsa')
-CROS_SCRIPT_KEY_PATH = os.path.join('..', 'cros', 'src', 'scripts',
- 'mod_for_test_scripts', 'ssh_keys',
- 'testing_rsa')
-
-BUILD_RESULT_SUCCEED = 0
-BUILD_RESULT_FAIL = 1
-BUILD_RESULT_SKIPPED = 2
-
-
-def _AddAdditionalDepotInfo(depot_info):
- """Adds additional depot info to the global depot variables."""
- global DEPOT_DEPS_NAME
- global DEPOT_NAMES
- DEPOT_DEPS_NAME = dict(DEPOT_DEPS_NAME.items() +
- depot_info.items())
- DEPOT_NAMES = DEPOT_DEPS_NAME.keys()
-
-
-def CalculateTruncatedMean(data_set, truncate_percent):
- """Calculates the truncated mean of a set of values.
-
- Args:
- data_set: Set of values to use in calculation.
- truncate_percent: The % from the upper/lower portions of the data set to
- discard, expressed as a value in [0, 1].
-
- Returns:
- The truncated mean as a float.
- """
- if len(data_set) > 2:
- data_set = sorted(data_set)
-
- discard_num_float = len(data_set) * truncate_percent
- discard_num_int = int(math.floor(discard_num_float))
- kept_weight = len(data_set) - discard_num_float * 2
-
- data_set = data_set[discard_num_int:len(data_set)-discard_num_int]
-
- weight_left = 1.0 - (discard_num_float - discard_num_int)
-
- if weight_left < 1:
- # If the % to discard leaves a fractional portion, need to weight those
- # values.
- unweighted_vals = data_set[1:len(data_set)-1]
- weighted_vals = [data_set[0], data_set[len(data_set)-1]]
- weighted_vals = [w * weight_left for w in weighted_vals]
- data_set = weighted_vals + unweighted_vals
- else:
- kept_weight = len(data_set)
-
- truncated_mean = reduce(lambda x, y: float(x) + float(y),
- data_set) / kept_weight
-
- return truncated_mean
-
-
-def CalculateStandardDeviation(v):
- if len(v) == 1:
- return 0.0
-
- mean = CalculateTruncatedMean(v, 0.0)
- variances = [float(x) - mean for x in v]
- variances = [x * x for x in variances]
- variance = reduce(lambda x, y: float(x) + float(y), variances) / (len(v) - 1)
- std_dev = math.sqrt(variance)
-
- return std_dev
-
-
-def CalculatePooledStandardError(work_sets):
- numerator = 0.0
- denominator1 = 0.0
- denominator2 = 0.0
-
- for current_set in work_sets:
- std_dev = CalculateStandardDeviation(current_set)
- numerator += (len(current_set) - 1) * std_dev ** 2
- denominator1 += len(current_set) - 1
- denominator2 += 1.0 / len(current_set)
-
- if denominator1:
- return math.sqrt(numerator / denominator1) * math.sqrt(denominator2)
- return 0.0
-
-
-def CalculateStandardError(v):
- if len(v) <= 1:
- return 0.0
-
- std_dev = CalculateStandardDeviation(v)
-
- return std_dev / math.sqrt(len(v))
-
-
-def IsStringFloat(string_to_check):
- """Checks whether or not the given string can be converted to a floating
- point number.
-
- Args:
- string_to_check: Input string to check if it can be converted to a float.
-
- Returns:
- True if the string can be converted to a float.
- """
- try:
- float(string_to_check)
-
- return True
- except ValueError:
- return False
-
-
-def IsStringInt(string_to_check):
- """Checks whether or not the given string can be converted to a integer.
-
- Args:
- string_to_check: Input string to check if it can be converted to an int.
-
- Returns:
- True if the string can be converted to an int.
- """
- try:
- int(string_to_check)
-
- return True
- except ValueError:
- return False
-
-
-def IsWindows():
- """Checks whether or not the script is running on Windows.
-
- Returns:
- True if running on Windows.
- """
- return os.name == 'nt'
-
-
-def RunProcess(command):
- """Run an arbitrary command. If output from the call is needed, use
- RunProcessAndRetrieveOutput instead.
-
- Args:
- command: A list containing the command and args to execute.
-
- Returns:
- The return code of the call.
- """
- # On Windows, use shell=True to get PATH interpretation.
- shell = IsWindows()
- return subprocess.call(command, shell=shell)
-
-
-def RunProcessAndRetrieveOutput(command, cwd=None):
- """Run an arbitrary command, returning its output and return code. Since
- output is collected via communicate(), there will be no output until the
- call terminates. If you need output while the program runs (ie. so
- that the buildbot doesn't terminate the script), consider RunProcess().
-
- Args:
- command: A list containing the command and args to execute.
-
- Returns:
- A tuple of the output and return code.
- """
- # On Windows, use shell=True to get PATH interpretation.
- shell = IsWindows()
- proc = subprocess.Popen(command, shell=shell, stdout=subprocess.PIPE, cwd=cwd)
-
- (output, _) = proc.communicate()
-
- return (output, proc.returncode)
-
-
-def RunGit(command, cwd=None):
- """Run a git subcommand, returning its output and return code.
-
- Args:
- command: A list containing the args to git.
-
- Returns:
- A tuple of the output and return code.
- """
- command = ['git'] + command
-
- return RunProcessAndRetrieveOutput(command, cwd=cwd)
-
-
-def CheckRunGit(command, cwd=None):
- """Run a git subcommand, returning its output and return code. Asserts if
- the return code of the call is non-zero.
-
- Args:
- command: A list containing the args to git.
-
- Returns:
- A tuple of the output and return code.
- """
- (output, return_code) = RunGit(command, cwd=cwd)
-
- assert not return_code, 'An error occurred while running'\
- ' "git %s"' % ' '.join(command)
- return output
-
-
-def SetBuildSystemDefault(build_system):
- """Sets up any environment variables needed to build with the specified build
- system.
-
- Args:
- build_system: A string specifying build system. Currently only 'ninja' or
- 'make' are supported."""
- if build_system == 'ninja':
- gyp_var = os.getenv('GYP_GENERATORS')
-
- if not gyp_var or not 'ninja' in gyp_var:
- if gyp_var:
- os.environ['GYP_GENERATORS'] = gyp_var + ',ninja'
- else:
- os.environ['GYP_GENERATORS'] = 'ninja'
-
- if IsWindows():
- os.environ['GYP_DEFINES'] = 'component=shared_library '\
- 'incremental_chrome_dll=1 disable_nacl=1 fastbuild=1 '\
- 'chromium_win_pch=0'
- elif build_system == 'make':
- os.environ['GYP_GENERATORS'] = 'make'
- else:
- raise RuntimeError('%s build not supported.' % build_system)
-
-
-def BuildWithMake(threads, targets):
- cmd = ['make', 'BUILDTYPE=Release']
-
- if threads:
- cmd.append('-j%d' % threads)
-
- cmd += targets
-
- return_code = RunProcess(cmd)
-
- return not return_code
-
-
-def BuildWithNinja(threads, targets):
- cmd = ['ninja', '-C', os.path.join('out', 'Release')]
-
- if threads:
- cmd.append('-j%d' % threads)
-
- cmd += targets
-
- return_code = RunProcess(cmd)
-
- return not return_code
-
-
-def BuildWithVisualStudio(targets):
- path_to_devenv = os.path.abspath(
- os.path.join(os.environ['VS100COMNTOOLS'], '..', 'IDE', 'devenv.com'))
- path_to_sln = os.path.join(os.getcwd(), 'chrome', 'chrome.sln')
- cmd = [path_to_devenv, '/build', 'Release', path_to_sln]
-
- for t in targets:
- cmd.extend(['/Project', t])
-
- return_code = RunProcess(cmd)
-
- return not return_code
-
-
-class Builder(object):
- """Builder is used by the bisect script to build relevant targets and deploy.
- """
- def __init__(self, opts):
- """Performs setup for building with target build system.
-
- Args:
- opts: Options parsed from command line.
- """
- if IsWindows():
- if not opts.build_preference:
- opts.build_preference = 'msvs'
-
- if opts.build_preference == 'msvs':
- if not os.getenv('VS100COMNTOOLS'):
- raise RuntimeError(
- 'Path to visual studio could not be determined.')
- else:
- SetBuildSystemDefault(opts.build_preference)
- else:
- if not opts.build_preference:
- if 'ninja' in os.getenv('GYP_GENERATORS'):
- opts.build_preference = 'ninja'
- else:
- opts.build_preference = 'make'
-
- SetBuildSystemDefault(opts.build_preference)
-
- if not bisect_utils.SetupPlatformBuildEnvironment(opts):
- raise RuntimeError('Failed to set platform environment.')
-
- bisect_utils.RunGClient(['runhooks'])
-
- @staticmethod
- def FromOpts(opts):
- builder = None
- if opts.target_platform == 'cros':
- builder = CrosBuilder(opts)
- elif opts.target_platform == 'android':
- builder = AndroidBuilder(opts)
- elif opts.target_platform == 'android-chrome':
- builder = AndroidChromeBuilder(opts)
- else:
- builder = DesktopBuilder(opts)
- return builder
-
- def Build(self, depot, opts):
- raise NotImplementedError()
-
-
-class DesktopBuilder(Builder):
- """DesktopBuilder is used to build Chromium on linux/mac/windows."""
- def __init__(self, opts):
- super(DesktopBuilder, self).__init__(opts)
-
- def Build(self, depot, opts):
- """Builds chromium_builder_perf target using options passed into
- the script.
-
- Args:
- depot: Current depot being bisected.
- opts: The options parsed from the command line.
-
- Returns:
- True if build was successful.
- """
- targets = ['chromium_builder_perf']
-
- threads = None
- if opts.use_goma:
- threads = 64
-
- build_success = False
- if opts.build_preference == 'make':
- build_success = BuildWithMake(threads, targets)
- elif opts.build_preference == 'ninja':
- build_success = BuildWithNinja(threads, targets)
- elif opts.build_preference == 'msvs':
- assert IsWindows(), 'msvs is only supported on Windows.'
- build_success = BuildWithVisualStudio(targets)
- else:
- assert False, 'No build system defined.'
- return build_success
-
-
-class AndroidBuilder(Builder):
- """AndroidBuilder is used to build on android."""
- def __init__(self, opts):
- super(AndroidBuilder, self).__init__(opts)
-
- def _GetTargets(self):
- return ['chromium_testshell', 'cc_perftests_apk', 'android_tools']
-
- def Build(self, depot, opts):
- """Builds the android content shell and other necessary tools using options
- passed into the script.
-
- Args:
- depot: Current depot being bisected.
- opts: The options parsed from the command line.
-
- Returns:
- True if build was successful.
- """
- threads = None
- if opts.use_goma:
- threads = 64
-
- build_success = False
- if opts.build_preference == 'ninja':
- build_success = BuildWithNinja(threads, self._GetTargets())
- else:
- assert False, 'No build system defined.'
-
- return build_success
-
-
-class AndroidChromeBuilder(AndroidBuilder):
- """AndroidBuilder is used to build on android's chrome."""
- def __init__(self, opts):
- super(AndroidChromeBuilder, self).__init__(opts)
-
- def _GetTargets(self):
- return AndroidBuilder._GetTargets(self) + ['chrome_apk']
-
-
-class CrosBuilder(Builder):
- """CrosBuilder is used to build and image ChromeOS/Chromium when cros is the
- target platform."""
- def __init__(self, opts):
- super(CrosBuilder, self).__init__(opts)
-
- def ImageToTarget(self, opts):
- """Installs latest image to target specified by opts.cros_remote_ip.
-
- Args:
- opts: Program options containing cros_board and cros_remote_ip.
-
- Returns:
- True if successful.
- """
- try:
- # Keys will most likely be set to 0640 after wiping the chroot.
- os.chmod(CROS_SCRIPT_KEY_PATH, 0600)
- os.chmod(CROS_TEST_KEY_PATH, 0600)
- cmd = [CROS_SDK_PATH, '--', './bin/cros_image_to_target.py',
- '--remote=%s' % opts.cros_remote_ip,
- '--board=%s' % opts.cros_board, '--test', '--verbose']
-
- return_code = RunProcess(cmd)
- return not return_code
- except OSError, e:
- return False
-
- def BuildPackages(self, opts, depot):
- """Builds packages for cros.
-
- Args:
- opts: Program options containing cros_board.
- depot: The depot being bisected.
-
- Returns:
- True if successful.
- """
- cmd = [CROS_SDK_PATH]
-
- if depot != 'cros':
- path_to_chrome = os.path.join(os.getcwd(), '..')
- cmd += ['--chrome_root=%s' % path_to_chrome]
-
- cmd += ['--']
-
- if depot != 'cros':
- cmd += ['CHROME_ORIGIN=LOCAL_SOURCE']
-
- cmd += ['BUILDTYPE=Release', './build_packages',
- '--board=%s' % opts.cros_board]
- return_code = RunProcess(cmd)
-
- return not return_code
-
- def BuildImage(self, opts, depot):
- """Builds test image for cros.
-
- Args:
- opts: Program options containing cros_board.
- depot: The depot being bisected.
-
- Returns:
- True if successful.
- """
- cmd = [CROS_SDK_PATH]
-
- if depot != 'cros':
- path_to_chrome = os.path.join(os.getcwd(), '..')
- cmd += ['--chrome_root=%s' % path_to_chrome]
-
- cmd += ['--']
-
- if depot != 'cros':
- cmd += ['CHROME_ORIGIN=LOCAL_SOURCE']
-
- cmd += ['BUILDTYPE=Release', '--', './build_image',
- '--board=%s' % opts.cros_board, 'test']
-
- return_code = RunProcess(cmd)
-
- return not return_code
-
- def Build(self, depot, opts):
- """Builds targets using options passed into the script.
-
- Args:
- depot: Current depot being bisected.
- opts: The options parsed from the command line.
-
- Returns:
- True if build was successful.
- """
- if self.BuildPackages(opts, depot):
- if self.BuildImage(opts, depot):
- return self.ImageToTarget(opts)
- return False
-
-
-class SourceControl(object):
- """SourceControl is an abstraction over the underlying source control
- system used for chromium. For now only git is supported, but in the
- future, the svn workflow could be added as well."""
- def __init__(self):
- super(SourceControl, self).__init__()
-
- def SyncToRevisionWithGClient(self, revision):
- """Uses gclient to sync to the specified revision.
-
- ie. gclient sync --revision <revision>
-
- Args:
- revision: The git SHA1 or svn CL (depending on workflow).
-
- Returns:
- The return code of the call.
- """
- return bisect_utils.RunGClient(['sync', '--revision',
- revision, '--verbose', '--nohooks', '--reset', '--force'])
-
- def SyncToRevisionWithRepo(self, timestamp):
- """Uses repo to sync all the underlying git depots to the specified
- time.
-
- Args:
- timestamp: The unix timestamp to sync to.
-
- Returns:
- The return code of the call.
- """
- return bisect_utils.RunRepoSyncAtTimestamp(timestamp)
-
-
-class GitSourceControl(SourceControl):
- """GitSourceControl is used to query the underlying source control. """
- def __init__(self, opts):
- super(GitSourceControl, self).__init__()
- self.opts = opts
-
- def IsGit(self):
- return True
-
- def GetRevisionList(self, revision_range_end, revision_range_start, cwd=None):
- """Retrieves a list of revisions between |revision_range_start| and
- |revision_range_end|.
-
- Args:
- revision_range_end: The SHA1 for the end of the range.
- revision_range_start: The SHA1 for the beginning of the range.
-
- Returns:
- A list of the revisions between |revision_range_start| and
- |revision_range_end| (inclusive).
- """
- revision_range = '%s..%s' % (revision_range_start, revision_range_end)
- cmd = ['log', '--format=%H', '-10000', '--first-parent', revision_range]
- log_output = CheckRunGit(cmd, cwd=cwd)
-
- revision_hash_list = log_output.split()
- revision_hash_list.append(revision_range_start)
-
- return revision_hash_list
-
- def SyncToRevision(self, revision, sync_client=None):
- """Syncs to the specified revision.
-
- Args:
- revision: The revision to sync to.
- use_gclient: Specifies whether or not we should sync using gclient or
- just use source control directly.
-
- Returns:
- True if successful.
- """
-
- if not sync_client:
- results = RunGit(['checkout', revision])[1]
- elif sync_client == 'gclient':
- results = self.SyncToRevisionWithGClient(revision)
- elif sync_client == 'repo':
- results = self.SyncToRevisionWithRepo(revision)
-
- return not results
-
- def ResolveToRevision(self, revision_to_check, depot, search, cwd=None):
- """If an SVN revision is supplied, try to resolve it to a git SHA1.
-
- Args:
- revision_to_check: The user supplied revision string that may need to be
- resolved to a git SHA1.
- depot: The depot the revision_to_check is from.
- search: The number of changelists to try if the first fails to resolve
- to a git hash. If the value is negative, the function will search
- backwards chronologically, otherwise it will search forward.
-
- Returns:
- A string containing a git SHA1 hash, otherwise None.
- """
- # Android-chrome is git only, so no need to resolve this to anything else.
- if depot == 'android-chrome':
- return revision_to_check
-
- if depot != 'cros':
- if not IsStringInt(revision_to_check):
- return revision_to_check
-
- depot_svn = 'svn://svn.chromium.org/chrome/trunk/src'
-
- if depot != 'chromium':
- depot_svn = DEPOT_DEPS_NAME[depot]['svn']
-
- svn_revision = int(revision_to_check)
- git_revision = None
-
- if search > 0:
- search_range = xrange(svn_revision, svn_revision + search, 1)
- else:
- search_range = xrange(svn_revision, svn_revision + search, -1)
-
- for i in search_range:
- svn_pattern = 'git-svn-id: %s@%d' % (depot_svn, i)
- cmd = ['log', '--format=%H', '-1', '--grep', svn_pattern,
- 'origin/master']
-
- (log_output, return_code) = RunGit(cmd, cwd=cwd)
-
- assert not return_code, 'An error occurred while running'\
- ' "git %s"' % ' '.join(cmd)
-
- if not return_code:
- log_output = log_output.strip()
-
- if log_output:
- git_revision = log_output
-
- break
-
- return git_revision
- else:
- if IsStringInt(revision_to_check):
- return int(revision_to_check)
- else:
- cwd = os.getcwd()
- os.chdir(os.path.join(os.getcwd(), 'src', 'third_party',
- 'chromiumos-overlay'))
- pattern = CROS_VERSION_PATTERN % revision_to_check
- cmd = ['log', '--format=%ct', '-1', '--grep', pattern]
-
- git_revision = None
-
- log_output = CheckRunGit(cmd, cwd=cwd)
- if log_output:
- git_revision = log_output
- git_revision = int(log_output.strip())
- os.chdir(cwd)
-
- return git_revision
-
- def IsInProperBranch(self):
- """Confirms they're in the master branch for performing the bisection.
- This is needed or gclient will fail to sync properly.
-
- Returns:
- True if the current branch on src is 'master'
- """
- cmd = ['rev-parse', '--abbrev-ref', 'HEAD']
- log_output = CheckRunGit(cmd)
- log_output = log_output.strip()
-
- return log_output == "master"
-
- def SVNFindRev(self, revision):
- """Maps directly to the 'git svn find-rev' command.
-
- Args:
- revision: The git SHA1 to use.
-
- Returns:
- An integer changelist #, otherwise None.
- """
-
- cmd = ['svn', 'find-rev', revision]
-
- output = CheckRunGit(cmd)
- svn_revision = output.strip()
-
- if IsStringInt(svn_revision):
- return int(svn_revision)
-
- return None
-
- def QueryRevisionInfo(self, revision, cwd=None):
- """Gathers information on a particular revision, such as author's name,
- email, subject, and date.
-
- Args:
- revision: Revision you want to gather information on.
- Returns:
- A dict in the following format:
- {
- 'author': %s,
- 'email': %s,
- 'date': %s,
- 'subject': %s,
- 'body': %s,
- }
- """
- commit_info = {}
-
- formats = ['%cN', '%cE', '%s', '%cD', '%b']
- targets = ['author', 'email', 'subject', 'date', 'body']
-
- for i in xrange(len(formats)):
- cmd = ['log', '--format=%s' % formats[i], '-1', revision]
- output = CheckRunGit(cmd, cwd=cwd)
- commit_info[targets[i]] = output.rstrip()
-
- return commit_info
-
- def CheckoutFileAtRevision(self, file_name, revision, cwd=None):
- """Performs a checkout on a file at the given revision.
-
- Returns:
- True if successful.
- """
- return not RunGit(['checkout', revision, file_name], cwd=cwd)[1]
-
- def RevertFileToHead(self, file_name):
- """Unstages a file and returns it to HEAD.
-
- Returns:
- True if successful.
- """
- # Reset doesn't seem to return 0 on success.
- RunGit(['reset', 'HEAD', bisect_utils.FILE_DEPS_GIT])
-
- return not RunGit(['checkout', bisect_utils.FILE_DEPS_GIT])[1]
-
- def QueryFileRevisionHistory(self, filename, revision_start, revision_end):
- """Returns a list of commits that modified this file.
-
- Args:
- filename: Name of file.
- revision_start: Start of revision range.
- revision_end: End of revision range.
-
- Returns:
- Returns a list of commits that touched this file.
- """
- cmd = ['log', '--format=%H', '%s~1..%s' % (revision_start, revision_end),
- filename]
- output = CheckRunGit(cmd)
-
- return [o for o in output.split('\n') if o]
-
-class BisectPerformanceMetrics(object):
- """BisectPerformanceMetrics performs a bisection against a list of range
- of revisions to narrow down where performance regressions may have
- occurred."""
-
- def __init__(self, source_control, opts):
- super(BisectPerformanceMetrics, self).__init__()
-
- self.opts = opts
- self.source_control = source_control
- self.src_cwd = os.getcwd()
- self.cros_cwd = os.path.join(os.getcwd(), '..', 'cros')
- self.depot_cwd = {}
- self.cleanup_commands = []
- self.warnings = []
- self.builder = Builder.FromOpts(opts)
-
- # This always starts true since the script grabs latest first.
- self.was_blink = True
-
- for d in DEPOT_NAMES:
- # The working directory of each depot is just the path to the depot, but
- # since we're already in 'src', we can skip that part.
-
- self.depot_cwd[d] = os.path.join(
- self.src_cwd, DEPOT_DEPS_NAME[d]['src'][4:])
-
- def PerformCleanup(self):
- """Performs cleanup when script is finished."""
- os.chdir(self.src_cwd)
- for c in self.cleanup_commands:
- if c[0] == 'mv':
- shutil.move(c[1], c[2])
- else:
- assert False, 'Invalid cleanup command.'
-
- def GetRevisionList(self, depot, bad_revision, good_revision):
- """Retrieves a list of all the commits between the bad revision and
- last known good revision."""
-
- revision_work_list = []
-
- if depot == 'cros':
- revision_range_start = good_revision
- revision_range_end = bad_revision
-
- cwd = os.getcwd()
- self.ChangeToDepotWorkingDirectory('cros')
-
- # Print the commit timestamps for every commit in the revision time
- # range. We'll sort them and bisect by that. There is a remote chance that
- # 2 (or more) commits will share the exact same timestamp, but it's
- # probably safe to ignore that case.
- cmd = ['repo', 'forall', '-c',
- 'git log --format=%%ct --before=%d --after=%d' % (
- revision_range_end, revision_range_start)]
- (output, return_code) = RunProcessAndRetrieveOutput(cmd)
-
- assert not return_code, 'An error occurred while running'\
- ' "%s"' % ' '.join(cmd)
-
- os.chdir(cwd)
-
- revision_work_list = list(set(
- [int(o) for o in output.split('\n') if IsStringInt(o)]))
- revision_work_list = sorted(revision_work_list, reverse=True)
- else:
- cwd = self._GetDepotDirectory(depot)
- revision_work_list = self.source_control.GetRevisionList(bad_revision,
- good_revision, cwd=cwd)
-
- return revision_work_list
-
- def _GetV8BleedingEdgeFromV8TrunkIfMappable(self, revision):
- svn_revision = self.source_control.SVNFindRev(revision)
-
- if IsStringInt(svn_revision):
- # V8 is tricky to bisect, in that there are only a few instances when
- # we can dive into bleeding_edge and get back a meaningful result.
- # Try to detect a V8 "business as usual" case, which is when:
- # 1. trunk revision N has description "Version X.Y.Z"
- # 2. bleeding_edge revision (N-1) has description "Prepare push to
- # trunk. Now working on X.Y.(Z+1)."
- v8_dir = self._GetDepotDirectory('v8')
- v8_bleeding_edge_dir = self._GetDepotDirectory('v8_bleeding_edge')
-
- revision_info = self.source_control.QueryRevisionInfo(revision,
- cwd=v8_dir)
-
- version_re = re.compile("Version (?P<values>[0-9,.]+)")
-
- regex_results = version_re.search(revision_info['subject'])
-
- if regex_results:
- version = regex_results.group('values')
-
- git_revision = self.source_control.ResolveToRevision(
- int(svn_revision) - 1, 'v8_bleeding_edge', -1,
- cwd=v8_bleeding_edge_dir)
-
- if git_revision:
- revision_info = self.source_control.QueryRevisionInfo(git_revision,
- cwd=v8_bleeding_edge_dir)
-
- if 'Prepare push to trunk' in revision_info['subject']:
- return git_revision
- return None
-
- def _GetNearestV8BleedingEdgeFromTrunk(self, revision, search_forward=True):
- cwd = self._GetDepotDirectory('v8')
- cmd = ['log', '--format=%ct', '-1', revision]
- output = CheckRunGit(cmd, cwd=cwd)
- commit_time = int(output)
- commits = []
-
- if search_forward:
- cmd = ['log', '--format=%H', '-10', '--after=%d' % commit_time,
- 'origin/master']
- output = CheckRunGit(cmd, cwd=cwd)
- output = output.split()
- commits = output
- commits = reversed(commits)
- else:
- cmd = ['log', '--format=%H', '-10', '--before=%d' % commit_time,
- 'origin/master']
- output = CheckRunGit(cmd, cwd=cwd)
- output = output.split()
- commits = output
-
- bleeding_edge_revision = None
-
- for c in commits:
- bleeding_edge_revision = self._GetV8BleedingEdgeFromV8TrunkIfMappable(c)
- if bleeding_edge_revision:
- break
-
- return bleeding_edge_revision
-
- def Get3rdPartyRevisionsFromCurrentRevision(self, depot, revision):
- """Parses the DEPS file to determine WebKit/v8/etc... versions.
-
- Returns:
- A dict in the format {depot:revision} if successful, otherwise None.
- """
-
- cwd = os.getcwd()
- self.ChangeToDepotWorkingDirectory(depot)
-
- results = {}
-
- if depot == 'chromium' or depot == 'android-chrome':
- locals = {'Var': lambda _: locals["vars"][_],
- 'From': lambda *args: None}
- execfile(bisect_utils.FILE_DEPS_GIT, {}, locals)
-
- os.chdir(cwd)
-
- rxp = re.compile(".git@(?P<revision>[a-fA-F0-9]+)")
-
- for d in DEPOT_NAMES:
- if DEPOT_DEPS_NAME[d].has_key('platform'):
- if DEPOT_DEPS_NAME[d]['platform'] != os.name:
- continue
-
- if (DEPOT_DEPS_NAME[d]['recurse'] and
- depot in DEPOT_DEPS_NAME[d]['from']):
- if (locals['deps'].has_key(DEPOT_DEPS_NAME[d]['src']) or
- locals['deps'].has_key(DEPOT_DEPS_NAME[d]['src_old'])):
- if locals['deps'].has_key(DEPOT_DEPS_NAME[d]['src']):
- re_results = rxp.search(locals['deps'][DEPOT_DEPS_NAME[d]['src']])
- self.depot_cwd[d] =\
- os.path.join(self.src_cwd, DEPOT_DEPS_NAME[d]['src'][4:])
- elif locals['deps'].has_key(DEPOT_DEPS_NAME[d]['src_old']):
- re_results =\
- rxp.search(locals['deps'][DEPOT_DEPS_NAME[d]['src_old']])
- self.depot_cwd[d] =\
- os.path.join(self.src_cwd, DEPOT_DEPS_NAME[d]['src_old'][4:])
-
- if re_results:
- results[d] = re_results.group('revision')
- else:
- print 'Couldn\'t parse revision for %s.' % d
- print
- return None
- else:
- print 'Couldn\'t find %s while parsing .DEPS.git.' % d
- print
- return None
- elif depot == 'cros':
- cmd = [CROS_SDK_PATH, '--', 'portageq-%s' % self.opts.cros_board,
- 'best_visible', '/build/%s' % self.opts.cros_board, 'ebuild',
- CROS_CHROMEOS_PATTERN]
- (output, return_code) = RunProcessAndRetrieveOutput(cmd)
-
- assert not return_code, 'An error occurred while running'\
- ' "%s"' % ' '.join(cmd)
-
- if len(output) > CROS_CHROMEOS_PATTERN:
- output = output[len(CROS_CHROMEOS_PATTERN):]
-
- if len(output) > 1:
- output = output.split('_')[0]
-
- if len(output) > 3:
- contents = output.split('.')
-
- version = contents[2]
-
- if contents[3] != '0':
- warningText = 'Chrome version: %s.%s but using %s.0 to bisect.' %\
- (version, contents[3], version)
- if not warningText in self.warnings:
- self.warnings.append(warningText)
-
- cwd = os.getcwd()
- self.ChangeToDepotWorkingDirectory('chromium')
- return_code = CheckRunGit(['log', '-1', '--format=%H',
- '--author=chrome-release@google.com', '--grep=to %s' % version,
- 'origin/master'])
- os.chdir(cwd)
-
- results['chromium'] = output.strip()
- elif depot == 'v8':
- # We can't try to map the trunk revision to bleeding edge yet, because
- # we don't know which direction to try to search in. Have to wait until
- # the bisect has narrowed the results down to 2 v8 rolls.
- results['v8_bleeding_edge'] = None
-
- return results
-
- def BuildCurrentRevision(self, depot):
- """Builds chrome and performance_ui_tests on the current revision.
-
- Returns:
- True if the build was successful.
- """
- if self.opts.debug_ignore_build:
- return True
-
- cwd = os.getcwd()
- os.chdir(self.src_cwd)
-
- build_success = self.builder.Build(depot, self.opts)
-
- os.chdir(cwd)
-
- return build_success
-
- def RunGClientHooks(self):
- """Runs gclient with runhooks command.
-
- Returns:
- True if gclient reports no errors.
- """
-
- if self.opts.debug_ignore_build:
- return True
-
- return not bisect_utils.RunGClient(['runhooks'], cwd=self.src_cwd)
-
- def TryParseHistogramValuesFromOutput(self, metric, text):
- """Attempts to parse a metric in the format HISTOGRAM <graph: <trace>.
-
- Args:
- metric: The metric as a list of [<trace>, <value>] strings.
- text: The text to parse the metric values from.
-
- Returns:
- A list of floating point numbers found.
- """
- metric_formatted = 'HISTOGRAM %s: %s= ' % (metric[0], metric[1])
-
- text_lines = text.split('\n')
- values_list = []
-
- for current_line in text_lines:
- if metric_formatted in current_line:
- current_line = current_line[len(metric_formatted):]
-
- try:
- histogram_values = eval(current_line)
-
- for b in histogram_values['buckets']:
- average_for_bucket = float(b['high'] + b['low']) * 0.5
- # Extends the list with N-elements with the average for that bucket.
- values_list.extend([average_for_bucket] * b['count'])
- except:
- pass
-
- return values_list
-
- def TryParseResultValuesFromOutput(self, metric, text):
- """Attempts to parse a metric in the format RESULT <graph: <trace>.
-
- Args:
- metric: The metric as a list of [<trace>, <value>] strings.
- text: The text to parse the metric values from.
-
- Returns:
- A list of floating point numbers found.
- """
- # Format is: RESULT <graph>: <trace>= <value> <units>
- metric_formatted = re.escape('RESULT %s: %s=' % (metric[0], metric[1]))
-
- text_lines = text.split('\n')
- values_list = []
-
- for current_line in text_lines:
- # Parse the output from the performance test for the metric we're
- # interested in.
- metric_re = metric_formatted +\
- "(\s)*(?P<values>[0-9]+(\.[0-9]*)?)"
- metric_re = re.compile(metric_re)
- regex_results = metric_re.search(current_line)
-
- if not regex_results is None:
- values_list += [regex_results.group('values')]
- else:
- metric_re = metric_formatted +\
- "(\s)*\[(\s)*(?P<values>[0-9,.]+)\]"
- metric_re = re.compile(metric_re)
- regex_results = metric_re.search(current_line)
-
- if not regex_results is None:
- metric_values = regex_results.group('values')
-
- values_list += metric_values.split(',')
-
- values_list = [float(v) for v in values_list if IsStringFloat(v)]
-
- # If the metric is times/t, we need to sum the timings in order to get
- # similar regression results as the try-bots.
- metrics_to_sum = [['times', 't'], ['times', 'page_load_time'],
- ['cold_times', 'page_load_time'], ['warm_times', 'page_load_time']]
-
- if metric in metrics_to_sum:
- if values_list:
- values_list = [reduce(lambda x, y: float(x) + float(y), values_list)]
-
- return values_list
-
- def ParseMetricValuesFromOutput(self, metric, text):
- """Parses output from performance_ui_tests and retrieves the results for
- a given metric.
-
- Args:
- metric: The metric as a list of [<trace>, <value>] strings.
- text: The text to parse the metric values from.
-
- Returns:
- A list of floating point numbers found.
- """
- metric_values = self.TryParseResultValuesFromOutput(metric, text)
-
- if not metric_values:
- metric_values = self.TryParseHistogramValuesFromOutput(metric, text)
-
- return metric_values
-
- def _GenerateProfileIfNecessary(self, command_args):
- """Checks the command line of the performance test for dependencies on
- profile generation, and runs tools/perf/generate_profile as necessary.
-
- Args:
- command_args: Command line being passed to performance test, as a list.
-
- Returns:
- False if profile generation was necessary and failed, otherwise True.
- """
-
- if '--profile-dir' in ' '.join(command_args):
- # If we were using python 2.7+, we could just use the argparse
- # module's parse_known_args to grab --profile-dir. Since some of the
- # bots still run 2.6, have to grab the arguments manually.
- arg_dict = {}
- args_to_parse = ['--profile-dir', '--browser']
-
- for arg_to_parse in args_to_parse:
- for i, current_arg in enumerate(command_args):
- if arg_to_parse in current_arg:
- current_arg_split = current_arg.split('=')
-
- # Check 2 cases, --arg=<val> and --arg <val>
- if len(current_arg_split) == 2:
- arg_dict[arg_to_parse] = current_arg_split[1]
- elif i + 1 < len(command_args):
- arg_dict[arg_to_parse] = command_args[i+1]
-
- path_to_generate = os.path.join('tools', 'perf', 'generate_profile')
-
- if arg_dict.has_key('--profile-dir') and arg_dict.has_key('--browser'):
- profile_path, profile_type = os.path.split(arg_dict['--profile-dir'])
- return not RunProcess(['python', path_to_generate,
- '--profile-type-to-generate', profile_type,
- '--browser', arg_dict['--browser'], '--output-dir', profile_path])
- return False
- return True
-
- def RunPerformanceTestAndParseResults(self, command_to_run, metric,
- reset_on_first_run=False, upload_on_last_run=False, results_label=None):
- """Runs a performance test on the current revision by executing the
- 'command_to_run' and parses the results.
-
- Args:
- command_to_run: The command to be run to execute the performance test.
- metric: The metric to parse out from the results of the performance test.
-
- Returns:
- On success, it will return a tuple of the average value of the metric,
- and a success code of 0.
- """
-
- if self.opts.debug_ignore_perf_test:
- return ({'mean': 0.0, 'std_err': 0.0, 'std_dev': 0.0, 'values': [0.0]}, 0)
-
- if IsWindows():
- command_to_run = command_to_run.replace('/', r'\\')
-
- args = shlex.split(command_to_run)
-
- if not self._GenerateProfileIfNecessary(args):
- return ('Failed to generate profile for performance test.', -1)
-
- # If running a telemetry test for cros, insert the remote ip, and
- # identity parameters.
- is_telemetry = bisect_utils.IsTelemetryCommand(command_to_run)
- if self.opts.target_platform == 'cros' and is_telemetry:
- args.append('--remote=%s' % self.opts.cros_remote_ip)
- args.append('--identity=%s' % CROS_TEST_KEY_PATH)
-
- cwd = os.getcwd()
- os.chdir(self.src_cwd)
-
- start_time = time.time()
-
- metric_values = []
- output_of_all_runs = ''
- for i in xrange(self.opts.repeat_test_count):
- # Can ignore the return code since if the tests fail, it won't return 0.
- try:
- current_args = copy.copy(args)
- if is_telemetry:
- if i == 0 and reset_on_first_run:
- current_args.append('--reset-results')
- elif i == self.opts.repeat_test_count - 1 and upload_on_last_run:
- current_args.append('--upload-results')
- if results_label:
- current_args.append('--results-label=%s' % results_label)
- (output, return_code) = RunProcessAndRetrieveOutput(current_args)
- except OSError, e:
- if e.errno == errno.ENOENT:
- err_text = ("Something went wrong running the performance test. "
- "Please review the command line:\n\n")
- if 'src/' in ' '.join(args):
- err_text += ("Check that you haven't accidentally specified a path "
- "with src/ in the command.\n\n")
- err_text += ' '.join(args)
- err_text += '\n'
-
- return (err_text, -1)
- raise
-
- output_of_all_runs += output
- if self.opts.output_buildbot_annotations:
- print output
-
- metric_values += self.ParseMetricValuesFromOutput(metric, output)
-
- elapsed_minutes = (time.time() - start_time) / 60.0
-
- if elapsed_minutes >= self.opts.max_time_minutes or not metric_values:
- break
-
- os.chdir(cwd)
-
- # Need to get the average value if there were multiple values.
- if metric_values:
- truncated_mean = CalculateTruncatedMean(metric_values,
- self.opts.truncate_percent)
- standard_err = CalculateStandardError(metric_values)
- standard_dev = CalculateStandardDeviation(metric_values)
-
- values = {
- 'mean': truncated_mean,
- 'std_err': standard_err,
- 'std_dev': standard_dev,
- 'values': metric_values,
- }
-
- print 'Results of performance test: %12f %12f' % (
- truncated_mean, standard_err)
- print
- return (values, 0, output_of_all_runs)
- else:
- return ('Invalid metric specified, or no values returned from '
- 'performance test.', -1, output_of_all_runs)
-
- def FindAllRevisionsToSync(self, revision, depot):
- """Finds all dependant revisions and depots that need to be synced for a
- given revision. This is only useful in the git workflow, as an svn depot
- may be split into multiple mirrors.
-
- ie. skia is broken up into 3 git mirrors over skia/src, skia/gyp, and
- skia/include. To sync skia/src properly, one has to find the proper
- revisions in skia/gyp and skia/include.
-
- Args:
- revision: The revision to sync to.
- depot: The depot in use at the moment (probably skia).
-
- Returns:
- A list of [depot, revision] pairs that need to be synced.
- """
- revisions_to_sync = [[depot, revision]]
-
- is_base = ((depot == 'chromium') or (depot == 'cros') or
- (depot == 'android-chrome'))
-
- # Some SVN depots were split into multiple git depots, so we need to
- # figure out for each mirror which git revision to grab. There's no
- # guarantee that the SVN revision will exist for each of the dependant
- # depots, so we have to grep the git logs and grab the next earlier one.
- if not is_base and\
- DEPOT_DEPS_NAME[depot]['depends'] and\
- self.source_control.IsGit():
- svn_rev = self.source_control.SVNFindRev(revision)
-
- for d in DEPOT_DEPS_NAME[depot]['depends']:
- self.ChangeToDepotWorkingDirectory(d)
-
- dependant_rev = self.source_control.ResolveToRevision(svn_rev, d, -1000)
-
- if dependant_rev:
- revisions_to_sync.append([d, dependant_rev])
-
- num_resolved = len(revisions_to_sync)
- num_needed = len(DEPOT_DEPS_NAME[depot]['depends'])
-
- self.ChangeToDepotWorkingDirectory(depot)
-
- if not ((num_resolved - 1) == num_needed):
- return None
-
- return revisions_to_sync
-
- def PerformPreBuildCleanup(self):
- """Performs necessary cleanup between runs."""
- print 'Cleaning up between runs.'
- print
-
- # Having these pyc files around between runs can confuse the
- # perf tests and cause them to crash.
- for (path, dir, files) in os.walk(self.src_cwd):
- for cur_file in files:
- if cur_file.endswith('.pyc'):
- path_to_file = os.path.join(path, cur_file)
- os.remove(path_to_file)
-
- def PerformWebkitDirectoryCleanup(self, revision):
- """If the script is switching between Blink and WebKit during bisect,
- its faster to just delete the directory rather than leave it up to git
- to sync.
-
- Returns:
- True if successful.
- """
- if not self.source_control.CheckoutFileAtRevision(
- bisect_utils.FILE_DEPS_GIT, revision, cwd=self.src_cwd):
- return False
-
- cwd = os.getcwd()
- os.chdir(self.src_cwd)
-
- is_blink = bisect_utils.IsDepsFileBlink()
-
- os.chdir(cwd)
-
- if not self.source_control.RevertFileToHead(
- bisect_utils.FILE_DEPS_GIT):
- return False
-
- if self.was_blink != is_blink:
- self.was_blink = is_blink
- return bisect_utils.RemoveThirdPartyWebkitDirectory()
- return True
-
- def PerformCrosChrootCleanup(self):
- """Deletes the chroot.
-
- Returns:
- True if successful.
- """
- cwd = os.getcwd()
- self.ChangeToDepotWorkingDirectory('cros')
- cmd = [CROS_SDK_PATH, '--delete']
- return_code = RunProcess(cmd)
- os.chdir(cwd)
- return not return_code
-
- def CreateCrosChroot(self):
- """Creates a new chroot.
-
- Returns:
- True if successful.
- """
- cwd = os.getcwd()
- self.ChangeToDepotWorkingDirectory('cros')
- cmd = [CROS_SDK_PATH, '--create']
- return_code = RunProcess(cmd)
- os.chdir(cwd)
- return not return_code
-
- def PerformPreSyncCleanup(self, revision, depot):
- """Performs any necessary cleanup before syncing.
-
- Returns:
- True if successful.
- """
- if depot == 'chromium':
- if not bisect_utils.RemoveThirdPartyLibjingleDirectory():
- return False
- return self.PerformWebkitDirectoryCleanup(revision)
- elif depot == 'cros':
- return self.PerformCrosChrootCleanup()
- return True
-
- def RunPostSync(self, depot):
- """Performs any work after syncing.
-
- Returns:
- True if successful.
- """
- if self.opts.target_platform == 'android':
- if not bisect_utils.SetupAndroidBuildEnvironment(self.opts,
- path_to_src=self.src_cwd):
- return False
-
- if depot == 'cros':
- return self.CreateCrosChroot()
- else:
- return self.RunGClientHooks()
- return True
-
- def ShouldSkipRevision(self, depot, revision):
- """Some commits can be safely skipped (such as a DEPS roll), since the tool
- is git based those changes would have no effect.
-
- Args:
- depot: The depot being bisected.
- revision: Current revision we're synced to.
-
- Returns:
- True if we should skip building/testing this revision.
- """
- if depot == 'chromium':
- if self.source_control.IsGit():
- cmd = ['diff-tree', '--no-commit-id', '--name-only', '-r', revision]
- output = CheckRunGit(cmd)
-
- files = output.splitlines()
-
- if len(files) == 1 and files[0] == 'DEPS':
- return True
-
- return False
-
- def SyncBuildAndRunRevision(self, revision, depot, command_to_run, metric,
- skippable=False):
- """Performs a full sync/build/run of the specified revision.
-
- Args:
- revision: The revision to sync to.
- depot: The depot that's being used at the moment (src, webkit, etc.)
- command_to_run: The command to execute the performance test.
- metric: The performance metric being tested.
-
- Returns:
- On success, a tuple containing the results of the performance test.
- Otherwise, a tuple with the error message.
- """
- sync_client = None
- if depot == 'chromium' or depot == 'android-chrome':
- sync_client = 'gclient'
- elif depot == 'cros':
- sync_client = 'repo'
-
- revisions_to_sync = self.FindAllRevisionsToSync(revision, depot)
-
- if not revisions_to_sync:
- return ('Failed to resolve dependant depots.', BUILD_RESULT_FAIL)
-
- if not self.PerformPreSyncCleanup(revision, depot):
- return ('Failed to perform pre-sync cleanup.', BUILD_RESULT_FAIL)
-
- success = True
-
- if not self.opts.debug_ignore_sync:
- for r in revisions_to_sync:
- self.ChangeToDepotWorkingDirectory(r[0])
-
- if sync_client:
- self.PerformPreBuildCleanup()
-
- # If you're using gclient to sync, you need to specify the depot you
- # want so that all the dependencies sync properly as well.
- # ie. gclient sync src@<SHA1>
- current_revision = r[1]
- if sync_client == 'gclient':
- current_revision = '%s@%s' % (DEPOT_DEPS_NAME[depot]['src'],
- current_revision)
- if not self.source_control.SyncToRevision(current_revision,
- sync_client):
- success = False
-
- break
-
- if success:
- success = self.RunPostSync(depot)
-
- if success:
- if skippable and self.ShouldSkipRevision(depot, revision):
- return ('Skipped revision: [%s]' % str(revision),
- BUILD_RESULT_SKIPPED)
-
- start_build_time = time.time()
- if self.BuildCurrentRevision(depot):
- after_build_time = time.time()
- results = self.RunPerformanceTestAndParseResults(command_to_run,
- metric)
-
- if results[1] == 0:
- external_revisions = self.Get3rdPartyRevisionsFromCurrentRevision(
- depot, revision)
-
- if not external_revisions is None:
- return (results[0], results[1], external_revisions,
- time.time() - after_build_time, time.time() -
- start_build_time)
- else:
- return ('Failed to parse DEPS file for external revisions.',
- BUILD_RESULT_FAIL)
- else:
- return results
- else:
- return ('Failed to build revision: [%s]' % (str(revision, )),
- BUILD_RESULT_FAIL)
- else:
- return ('Failed to run [gclient runhooks].', BUILD_RESULT_FAIL)
- else:
- return ('Failed to sync revision: [%s]' % (str(revision, )),
- BUILD_RESULT_FAIL)
-
- def CheckIfRunPassed(self, current_value, known_good_value, known_bad_value):
- """Given known good and bad values, decide if the current_value passed
- or failed.
-
- Args:
- current_value: The value of the metric being checked.
- known_bad_value: The reference value for a "failed" run.
- known_good_value: The reference value for a "passed" run.
-
- Returns:
- True if the current_value is closer to the known_good_value than the
- known_bad_value.
- """
- dist_to_good_value = abs(current_value['mean'] - known_good_value['mean'])
- dist_to_bad_value = abs(current_value['mean'] - known_bad_value['mean'])
-
- return dist_to_good_value < dist_to_bad_value
-
- def _GetDepotDirectory(self, depot_name):
- if depot_name == 'chromium':
- return self.src_cwd
- elif depot_name == 'cros':
- return self.cros_cwd
- elif depot_name in DEPOT_NAMES:
- return self.depot_cwd[depot_name]
- else:
- assert False, 'Unknown depot [ %s ] encountered. Possibly a new one'\
- ' was added without proper support?' %\
- (depot_name,)
-
- def ChangeToDepotWorkingDirectory(self, depot_name):
- """Given a depot, changes to the appropriate working directory.
-
- Args:
- depot_name: The name of the depot (see DEPOT_NAMES).
- """
- os.chdir(self._GetDepotDirectory(depot_name))
-
- def _FillInV8BleedingEdgeInfo(self, min_revision_data, max_revision_data):
- r1 = self._GetNearestV8BleedingEdgeFromTrunk(min_revision_data['revision'],
- search_forward=True)
- r2 = self._GetNearestV8BleedingEdgeFromTrunk(max_revision_data['revision'],
- search_forward=False)
- min_revision_data['external']['v8_bleeding_edge'] = r1
- max_revision_data['external']['v8_bleeding_edge'] = r2
-
- if (not self._GetV8BleedingEdgeFromV8TrunkIfMappable(
- min_revision_data['revision']) or
- not self._GetV8BleedingEdgeFromV8TrunkIfMappable(
- max_revision_data['revision'])):
- self.warnings.append('Trunk revisions in V8 did not map directly to '
- 'bleeding_edge. Attempted to expand the range to find V8 rolls which '
- 'did map directly to bleeding_edge revisions, but results might not '
- 'be valid.')
-
- def _FindNextDepotToBisect(self, current_depot, current_revision,
- min_revision_data, max_revision_data):
- """Given the state of the bisect, decides which depot the script should
- dive into next (if any).
-
- Args:
- current_depot: Current depot being bisected.
- current_revision: Current revision synced to.
- min_revision_data: Data about the earliest revision in the bisect range.
- max_revision_data: Data about the latest revision in the bisect range.
-
- Returns:
- The depot to bisect next, or None.
- """
- external_depot = None
- for next_depot in DEPOT_NAMES:
- if DEPOT_DEPS_NAME[next_depot].has_key('platform'):
- if DEPOT_DEPS_NAME[next_depot]['platform'] != os.name:
- continue
-
- if not (DEPOT_DEPS_NAME[next_depot]["recurse"] and
- min_revision_data['depot'] in DEPOT_DEPS_NAME[next_depot]['from']):
- continue
-
- if current_depot == 'v8':
- # We grab the bleeding_edge info here rather than earlier because we
- # finally have the revision range. From that we can search forwards and
- # backwards to try to match trunk revisions to bleeding_edge.
- self._FillInV8BleedingEdgeInfo(min_revision_data, max_revision_data)
-
- if (min_revision_data['external'][next_depot] ==
- max_revision_data['external'][next_depot]):
- continue
-
- if (min_revision_data['external'][next_depot] and
- max_revision_data['external'][next_depot]):
- external_depot = next_depot
- break
-
- return external_depot
-
- def PrepareToBisectOnDepot(self,
- current_depot,
- end_revision,
- start_revision,
- previous_depot,
- previous_revision):
- """Changes to the appropriate directory and gathers a list of revisions
- to bisect between |start_revision| and |end_revision|.
-
- Args:
- current_depot: The depot we want to bisect.
- end_revision: End of the revision range.
- start_revision: Start of the revision range.
- previous_depot: The depot we were previously bisecting.
- previous_revision: The last revision we synced to on |previous_depot|.
-
- Returns:
- A list containing the revisions between |start_revision| and
- |end_revision| inclusive.
- """
- # Change into working directory of external library to run
- # subsequent commands.
- self.ChangeToDepotWorkingDirectory(current_depot)
-
- # V8 (and possibly others) is merged in periodically. Bisecting
- # this directory directly won't give much good info.
- if DEPOT_DEPS_NAME[current_depot].has_key('custom_deps'):
- config_path = os.path.join(self.src_cwd, '..')
- if bisect_utils.RunGClientAndCreateConfig(self.opts,
- DEPOT_DEPS_NAME[current_depot]['custom_deps'], cwd=config_path):
- return []
- if bisect_utils.RunGClient(
- ['sync', '--revision', previous_revision], cwd=self.src_cwd):
- return []
-
- if current_depot == 'v8_bleeding_edge':
- self.ChangeToDepotWorkingDirectory('chromium')
-
- shutil.move('v8', 'v8.bak')
- shutil.move('v8_bleeding_edge', 'v8')
-
- self.cleanup_commands.append(['mv', 'v8', 'v8_bleeding_edge'])
- self.cleanup_commands.append(['mv', 'v8.bak', 'v8'])
-
- self.depot_cwd['v8_bleeding_edge'] = os.path.join(self.src_cwd, 'v8')
- self.depot_cwd['v8'] = os.path.join(self.src_cwd, 'v8.bak')
-
- self.ChangeToDepotWorkingDirectory(current_depot)
-
- depot_revision_list = self.GetRevisionList(current_depot,
- end_revision,
- start_revision)
-
- self.ChangeToDepotWorkingDirectory('chromium')
-
- return depot_revision_list
-
- def GatherReferenceValues(self, good_rev, bad_rev, cmd, metric, target_depot):
- """Gathers reference values by running the performance tests on the
- known good and bad revisions.
-
- Args:
- good_rev: The last known good revision where the performance regression
- has not occurred yet.
- bad_rev: A revision where the performance regression has already occurred.
- cmd: The command to execute the performance test.
- metric: The metric being tested for regression.
-
- Returns:
- A tuple with the results of building and running each revision.
- """
- bad_run_results = self.SyncBuildAndRunRevision(bad_rev,
- target_depot,
- cmd,
- metric)
-
- good_run_results = None
-
- if not bad_run_results[1]:
- good_run_results = self.SyncBuildAndRunRevision(good_rev,
- target_depot,
- cmd,
- metric)
-
- return (bad_run_results, good_run_results)
-
- def AddRevisionsIntoRevisionData(self, revisions, depot, sort, revision_data):
- """Adds new revisions to the revision_data dict and initializes them.
-
- Args:
- revisions: List of revisions to add.
- depot: Depot that's currently in use (src, webkit, etc...)
- sort: Sorting key for displaying revisions.
- revision_data: A dict to add the new revisions into. Existing revisions
- will have their sort keys offset.
- """
-
- num_depot_revisions = len(revisions)
-
- for k, v in revision_data.iteritems():
- if v['sort'] > sort:
- v['sort'] += num_depot_revisions
-
- for i in xrange(num_depot_revisions):
- r = revisions[i]
-
- revision_data[r] = {'revision' : r,
- 'depot' : depot,
- 'value' : None,
- 'perf_time' : 0,
- 'build_time' : 0,
- 'passed' : '?',
- 'sort' : i + sort + 1}
-
- def PrintRevisionsToBisectMessage(self, revision_list, depot):
- if self.opts.output_buildbot_annotations:
- step_name = 'Bisection Range: [%s - %s]' % (
- revision_list[len(revision_list)-1], revision_list[0])
- bisect_utils.OutputAnnotationStepStart(step_name)
-
- print
- print 'Revisions to bisect on [%s]:' % depot
- for revision_id in revision_list:
- print ' -> %s' % (revision_id, )
- print
-
- if self.opts.output_buildbot_annotations:
- bisect_utils.OutputAnnotationStepClosed()
-
- def NudgeRevisionsIfDEPSChange(self, bad_revision, good_revision):
- """Checks to see if changes to DEPS file occurred, and that the revision
- range also includes the change to .DEPS.git. If it doesn't, attempts to
- expand the revision range to include it.
-
- Args:
- bad_rev: First known bad revision.
- good_revision: Last known good revision.
-
- Returns:
- A tuple with the new bad and good revisions.
- """
- if self.source_control.IsGit() and self.opts.target_platform == 'chromium':
- changes_to_deps = self.source_control.QueryFileRevisionHistory(
- 'DEPS', good_revision, bad_revision)
-
- if changes_to_deps:
- # DEPS file was changed, search from the oldest change to DEPS file to
- # bad_revision to see if there are matching .DEPS.git changes.
- oldest_deps_change = changes_to_deps[-1]
- changes_to_gitdeps = self.source_control.QueryFileRevisionHistory(
- bisect_utils.FILE_DEPS_GIT, oldest_deps_change, bad_revision)
-
- if len(changes_to_deps) != len(changes_to_gitdeps):
- # Grab the timestamp of the last DEPS change
- cmd = ['log', '--format=%ct', '-1', changes_to_deps[0]]
- output = CheckRunGit(cmd)
- commit_time = int(output)
-
- # Try looking for a commit that touches the .DEPS.git file in the
- # next 15 minutes after the DEPS file change.
- cmd = ['log', '--format=%H', '-1',
- '--before=%d' % (commit_time + 900), '--after=%d' % commit_time,
- 'origin/master', bisect_utils.FILE_DEPS_GIT]
- output = CheckRunGit(cmd)
- output = output.strip()
- if output:
- self.warnings.append('Detected change to DEPS and modified '
- 'revision range to include change to .DEPS.git')
- return (output, good_revision)
- else:
- self.warnings.append('Detected change to DEPS but couldn\'t find '
- 'matching change to .DEPS.git')
- return (bad_revision, good_revision)
-
- def CheckIfRevisionsInProperOrder(self,
- target_depot,
- good_revision,
- bad_revision):
- """Checks that |good_revision| is an earlier revision than |bad_revision|.
-
- Args:
- good_revision: Number/tag of the known good revision.
- bad_revision: Number/tag of the known bad revision.
-
- Returns:
- True if the revisions are in the proper order (good earlier than bad).
- """
- if self.source_control.IsGit() and target_depot != 'cros':
- cmd = ['log', '--format=%ct', '-1', good_revision]
- cwd = self._GetDepotDirectory(target_depot)
-
- output = CheckRunGit(cmd, cwd=cwd)
- good_commit_time = int(output)
-
- cmd = ['log', '--format=%ct', '-1', bad_revision]
- output = CheckRunGit(cmd, cwd=cwd)
- bad_commit_time = int(output)
-
- return good_commit_time <= bad_commit_time
- else:
- # Cros/svn use integers
- return int(good_revision) <= int(bad_revision)
-
- def Run(self, command_to_run, bad_revision_in, good_revision_in, metric):
- """Given known good and bad revisions, run a binary search on all
- intermediate revisions to determine the CL where the performance regression
- occurred.
-
- Args:
- command_to_run: Specify the command to execute the performance test.
- good_revision: Number/tag of the known good revision.
- bad_revision: Number/tag of the known bad revision.
- metric: The performance metric to monitor.
-
- Returns:
- A dict with 2 members, 'revision_data' and 'error'. On success,
- 'revision_data' will contain a dict mapping revision ids to
- data about that revision. Each piece of revision data consists of a
- dict with the following keys:
-
- 'passed': Represents whether the performance test was successful at
- that revision. Possible values include: 1 (passed), 0 (failed),
- '?' (skipped), 'F' (build failed).
- 'depot': The depot that this revision is from (ie. WebKit)
- 'external': If the revision is a 'src' revision, 'external' contains
- the revisions of each of the external libraries.
- 'sort': A sort value for sorting the dict in order of commits.
-
- For example:
- {
- 'error':None,
- 'revision_data':
- {
- 'CL #1':
- {
- 'passed':False,
- 'depot':'chromium',
- 'external':None,
- 'sort':0
- }
- }
- }
-
- If an error occurred, the 'error' field will contain the message and
- 'revision_data' will be empty.
- """
-
- results = {'revision_data' : {},
- 'error' : None}
-
- # Choose depot to bisect first
- target_depot = 'chromium'
- if self.opts.target_platform == 'cros':
- target_depot = 'cros'
- elif self.opts.target_platform == 'android-chrome':
- target_depot = 'android-chrome'
-
- cwd = os.getcwd()
- self.ChangeToDepotWorkingDirectory(target_depot)
-
- # If they passed SVN CL's, etc... we can try match them to git SHA1's.
- bad_revision = self.source_control.ResolveToRevision(bad_revision_in,
- target_depot, 100)
- good_revision = self.source_control.ResolveToRevision(good_revision_in,
- target_depot, -100)
-
- os.chdir(cwd)
-
-
- if bad_revision is None:
- results['error'] = 'Could\'t resolve [%s] to SHA1.' % (bad_revision_in,)
- return results
-
- if good_revision is None:
- results['error'] = 'Could\'t resolve [%s] to SHA1.' % (good_revision_in,)
- return results
-
- # Check that they didn't accidentally swap good and bad revisions.
- if not self.CheckIfRevisionsInProperOrder(
- target_depot, good_revision, bad_revision):
- results['error'] = 'bad_revision < good_revision, did you swap these '\
- 'by mistake?'
- return results
-
- (bad_revision, good_revision) = self.NudgeRevisionsIfDEPSChange(
- bad_revision, good_revision)
-
- if self.opts.output_buildbot_annotations:
- bisect_utils.OutputAnnotationStepStart('Gathering Revisions')
-
- print 'Gathering revision range for bisection.'
-
- # Retrieve a list of revisions to do bisection on.
- src_revision_list = self.GetRevisionList(target_depot,
- bad_revision,
- good_revision)
-
- if self.opts.output_buildbot_annotations:
- bisect_utils.OutputAnnotationStepClosed()
-
- if src_revision_list:
- # revision_data will store information about a revision such as the
- # depot it came from, the webkit/V8 revision at that time,
- # performance timing, build state, etc...
- revision_data = results['revision_data']
-
- # revision_list is the list we're binary searching through at the moment.
- revision_list = []
-
- sort_key_ids = 0
-
- for current_revision_id in src_revision_list:
- sort_key_ids += 1
-
- revision_data[current_revision_id] = {'value' : None,
- 'passed' : '?',
- 'depot' : target_depot,
- 'external' : None,
- 'perf_time' : 0,
- 'build_time' : 0,
- 'sort' : sort_key_ids}
- revision_list.append(current_revision_id)
-
- min_revision = 0
- max_revision = len(revision_list) - 1
-
- self.PrintRevisionsToBisectMessage(revision_list, target_depot)
-
- if self.opts.output_buildbot_annotations:
- bisect_utils.OutputAnnotationStepStart('Gathering Reference Values')
-
- print 'Gathering reference values for bisection.'
-
- # Perform the performance tests on the good and bad revisions, to get
- # reference values.
- (bad_results, good_results) = self.GatherReferenceValues(good_revision,
- bad_revision,
- command_to_run,
- metric,
- target_depot)
-
- if self.opts.output_buildbot_annotations:
- bisect_utils.OutputAnnotationStepClosed()
-
- if bad_results[1]:
- results['error'] = ('An error occurred while building and running '
- 'the \'bad\' reference value. The bisect cannot continue without '
- 'a working \'bad\' revision to start from.\n\nError: %s' %
- bad_results[0])
- return results
-
- if good_results[1]:
- results['error'] = ('An error occurred while building and running '
- 'the \'good\' reference value. The bisect cannot continue without '
- 'a working \'good\' revision to start from.\n\nError: %s' %
- good_results[0])
- return results
-
-
- # We need these reference values to determine if later runs should be
- # classified as pass or fail.
- known_bad_value = bad_results[0]
- known_good_value = good_results[0]
-
- # Can just mark the good and bad revisions explicitly here since we
- # already know the results.
- bad_revision_data = revision_data[revision_list[0]]
- bad_revision_data['external'] = bad_results[2]
- bad_revision_data['perf_time'] = bad_results[3]
- bad_revision_data['build_time'] = bad_results[4]
- bad_revision_data['passed'] = False
- bad_revision_data['value'] = known_bad_value
-
- good_revision_data = revision_data[revision_list[max_revision]]
- good_revision_data['external'] = good_results[2]
- good_revision_data['perf_time'] = good_results[3]
- good_revision_data['build_time'] = good_results[4]
- good_revision_data['passed'] = True
- good_revision_data['value'] = known_good_value
-
- next_revision_depot = target_depot
-
- while True:
- if not revision_list:
- break
-
- min_revision_data = revision_data[revision_list[min_revision]]
- max_revision_data = revision_data[revision_list[max_revision]]
-
- if max_revision - min_revision <= 1:
- current_depot = min_revision_data['depot']
- if min_revision_data['passed'] == '?':
- next_revision_index = min_revision
- elif max_revision_data['passed'] == '?':
- next_revision_index = max_revision
- elif current_depot in ['android-chrome', 'cros', 'chromium', 'v8']:
- previous_revision = revision_list[min_revision]
- # If there were changes to any of the external libraries we track,
- # should bisect the changes there as well.
- external_depot = self._FindNextDepotToBisect(current_depot,
- previous_revision, min_revision_data, max_revision_data)
-
- # If there was no change in any of the external depots, the search
- # is over.
- if not external_depot:
- if current_depot == 'v8':
- self.warnings.append('Unfortunately, V8 bisection couldn\'t '
- 'continue any further. The script can only bisect into '
- 'V8\'s bleeding_edge repository if both the current and '
- 'previous revisions in trunk map directly to revisions in '
- 'bleeding_edge.')
- break
-
- earliest_revision = max_revision_data['external'][external_depot]
- latest_revision = min_revision_data['external'][external_depot]
-
- new_revision_list = self.PrepareToBisectOnDepot(external_depot,
- latest_revision,
- earliest_revision,
- next_revision_depot,
- previous_revision)
-
- if not new_revision_list:
- results['error'] = 'An error occurred attempting to retrieve'\
- ' revision range: [%s..%s]' %\
- (earliest_revision, latest_revision)
- return results
-
- self.AddRevisionsIntoRevisionData(new_revision_list,
- external_depot,
- min_revision_data['sort'],
- revision_data)
-
- # Reset the bisection and perform it on the newly inserted
- # changelists.
- revision_list = new_revision_list
- min_revision = 0
- max_revision = len(revision_list) - 1
- sort_key_ids += len(revision_list)
-
- print 'Regression in metric:%s appears to be the result of changes'\
- ' in [%s].' % (metric, external_depot)
-
- self.PrintRevisionsToBisectMessage(revision_list, external_depot)
-
- continue
- else:
- break
- else:
- next_revision_index = int((max_revision - min_revision) / 2) +\
- min_revision
-
- next_revision_id = revision_list[next_revision_index]
- next_revision_data = revision_data[next_revision_id]
- next_revision_depot = next_revision_data['depot']
-
- self.ChangeToDepotWorkingDirectory(next_revision_depot)
-
- if self.opts.output_buildbot_annotations:
- step_name = 'Working on [%s]' % next_revision_id
- bisect_utils.OutputAnnotationStepStart(step_name)
-
- print 'Working on revision: [%s]' % next_revision_id
-
- run_results = self.SyncBuildAndRunRevision(next_revision_id,
- next_revision_depot,
- command_to_run,
- metric, skippable=True)
-
- # If the build is successful, check whether or not the metric
- # had regressed.
- if not run_results[1]:
- if len(run_results) > 2:
- next_revision_data['external'] = run_results[2]
- next_revision_data['perf_time'] = run_results[3]
- next_revision_data['build_time'] = run_results[4]
-
- passed_regression = self.CheckIfRunPassed(run_results[0],
- known_good_value,
- known_bad_value)
-
- next_revision_data['passed'] = passed_regression
- next_revision_data['value'] = run_results[0]
-
- if passed_regression:
- max_revision = next_revision_index
- else:
- min_revision = next_revision_index
- else:
- if run_results[1] == BUILD_RESULT_SKIPPED:
- next_revision_data['passed'] = 'Skipped'
- elif run_results[1] == BUILD_RESULT_FAIL:
- next_revision_data['passed'] = 'Build Failed'
-
- print run_results[0]
-
- # If the build is broken, remove it and redo search.
- revision_list.pop(next_revision_index)
-
- max_revision -= 1
-
- if self.opts.output_buildbot_annotations:
- bisect_utils.OutputAnnotationStepClosed()
- else:
- # Weren't able to sync and retrieve the revision range.
- results['error'] = 'An error occurred attempting to retrieve revision '\
- 'range: [%s..%s]' % (good_revision, bad_revision)
-
- return results
-
- def _PrintBanner(self, results_dict):
- print
- print " __o_\___ Aw Snap! We hit a speed bump!"
- print "=-O----O-'__.~.___________________________________"
- print
- print 'Bisect reproduced a %.02f%% (+-%.02f%%) change in the %s metric.' % (
- results_dict['regression_size'], results_dict['regression_std_err'],
- '/'.join(self.opts.metric))
- # The perf dashboard specifically looks for the string
- # "Confidence in Bisection Results: 100%" to decide whether or not
- # to cc the author(s). If you change this, please update the perf
- # dashboard as well.
- print 'Confidence in Bisection Results: %d%%' % results_dict['confidence']
-
- def _PrintRevisionInfo(self, cl, info, depot=None):
- # The perf dashboard specifically looks for the string
- # "Author : " to parse out who to cc on a bug. If you change the
- # formatting here, please update the perf dashboard as well.
- print
- print 'Subject : %s' % info['subject']
- print 'Author : %s' % info['author']
- if not info['email'].startswith(info['author']):
- print 'Email : %s' % info['email']
- if depot and DEPOT_DEPS_NAME[depot].has_key('viewvc'):
- try:
- # Format is "git-svn-id: svn://....@123456 <other data>"
- svn_line = [i for i in info['body'].splitlines() if 'git-svn-id:' in i]
- svn_revision = svn_line[0].split('@')
- svn_revision = svn_revision[1].split(' ')[0]
- print 'Link : %s' % DEPOT_DEPS_NAME[depot]['viewvc'] + svn_revision
- except IndexError:
- print
- print 'Failed to parse svn revision from body:'
- print
- print info['body']
- print
- print 'Commit : %s' % cl
- print 'Date : %s' % info['date']
-
- def _PrintTestedCommitsTable(self, revision_data_sorted,
- first_working_revision, last_broken_revision):
- print
- print 'Tested commits:'
- print ' %20s %40s %12s %14s %13s' % ('Depot'.center(20, ' '),
- 'Commit SHA'.center(40, ' '), 'Mean'.center(12, ' '),
- 'Std. Error'.center(14, ' '), 'State'.center(13, ' '))
- state = 0
- for current_id, current_data in revision_data_sorted:
- if current_data['value']:
- if (current_id == last_broken_revision or
- current_id == first_working_revision):
- print
- state += 1
-
- state_str = 'Bad'
- if state == 1:
- state_str = 'Suspected CL'
- elif state == 2:
- state_str = 'Good'
- state_str = state_str.center(13, ' ')
-
- std_error = ('+-%.02f' %
- current_data['value']['std_err']).center(14, ' ')
- mean = ('%.02f' % current_data['value']['mean']).center(12, ' ')
- print ' %20s %40s %12s %14s %13s' % (
- current_data['depot'].center(20, ' '), current_id, mean,
- std_error, state_str)
-
- def _PrintReproSteps(self):
- print
- print 'To reproduce locally:'
- print '$ ' + self.opts.command
- if bisect_utils.IsTelemetryCommand(self.opts.command):
- print
- print 'Also consider passing --profiler=list to see available profilers.'
-
- def _PrintOtherRegressions(self, other_regressions, revision_data):
- print
- print 'Other regressions may have occurred:'
- for regression in other_regressions:
- current_id, previous_id, percent_change, deviations = regression
- current_data = revision_data[current_id]
- previous_data = revision_data[previous_id]
-
- if deviations is None:
- deviations = 'N/A'
- else:
- deviations = '%.2f' % deviations
-
- if percent_change is None:
- percent_change = 0
-
- print ' %8s %s [%.2f%%, %s x std.dev]' % (
- previous_data['depot'], previous_id, 100 * percent_change, deviations)
- print ' %8s %s' % (current_data['depot'], current_id)
- print
-
- def _PrintStepTime(self, revision_data_sorted):
- step_perf_time_avg = 0.0
- step_build_time_avg = 0.0
- step_count = 0.0
- for _, current_data in revision_data_sorted:
- step_perf_time_avg += current_data['perf_time']
- step_build_time_avg += current_data['build_time']
- step_count += 1
- if step_count:
- step_perf_time_avg = step_perf_time_avg / step_count
- step_build_time_avg = step_build_time_avg / step_count
- print
- print 'Average build time : %s' % datetime.timedelta(
- seconds=int(step_build_time_avg))
- print 'Average test time : %s' % datetime.timedelta(
- seconds=int(step_perf_time_avg))
-
- def _PrintWarnings(self):
- if not self.warnings:
- return
- print
- print 'WARNINGS:'
- for w in self.warnings:
- print ' !!! %s' % w
-
- def _GetResultsDict(self, revision_data, revision_data_sorted):
- # Find range where it possibly broke.
- first_working_revision = None
- first_working_revision_index = -1
- last_broken_revision = None
- last_broken_revision_index = -1
-
- for i in xrange(len(revision_data_sorted)):
- k, v = revision_data_sorted[i]
- if v['passed'] == 1:
- if not first_working_revision:
- first_working_revision = k
- first_working_revision_index = i
-
- if not v['passed']:
- last_broken_revision = k
- last_broken_revision_index = i
-
- if last_broken_revision != None and first_working_revision != None:
- bounds_broken = [revision_data[last_broken_revision]['value']['mean'],
- revision_data[last_broken_revision]['value']['mean']]
- broken_mean = []
- for i in xrange(0, last_broken_revision_index + 1):
- if revision_data_sorted[i][1]['value']:
- bounds_broken[0] = min(bounds_broken[0],
- revision_data_sorted[i][1]['value']['mean'])
- bounds_broken[1] = max(bounds_broken[1],
- revision_data_sorted[i][1]['value']['mean'])
- broken_mean.extend(revision_data_sorted[i][1]['value']['values'])
-
- bounds_working = [revision_data[first_working_revision]['value']['mean'],
- revision_data[first_working_revision]['value']['mean']]
- working_mean = []
- for i in xrange(first_working_revision_index, len(revision_data_sorted)):
- if revision_data_sorted[i][1]['value']:
- bounds_working[0] = min(bounds_working[0],
- revision_data_sorted[i][1]['value']['mean'])
- bounds_working[1] = max(bounds_working[1],
- revision_data_sorted[i][1]['value']['mean'])
- working_mean.extend(revision_data_sorted[i][1]['value']['values'])
-
- # Calculate the approximate size of the regression
- mean_of_bad_runs = CalculateTruncatedMean(broken_mean, 0.0)
- mean_of_good_runs = CalculateTruncatedMean(working_mean, 0.0)
-
- regression_size = math.fabs(max(mean_of_good_runs, mean_of_bad_runs) /
- max(0.0001, min(mean_of_good_runs, mean_of_bad_runs))) * 100.0 - 100.0
-
- regression_std_err = math.fabs(CalculatePooledStandardError(
- [working_mean, broken_mean]) /
- max(0.0001, min(mean_of_good_runs, mean_of_bad_runs))) * 100.0
-
- # Give a "confidence" in the bisect. At the moment we use how distinct the
- # values are before and after the last broken revision, and how noisy the
- # overall graph is.
- dist_between_groups = min(math.fabs(bounds_broken[1] - bounds_working[0]),
- math.fabs(bounds_broken[0] - bounds_working[1]))
- len_working_group = CalculateStandardDeviation(working_mean)
- len_broken_group = CalculateStandardDeviation(broken_mean)
-
- confidence = (dist_between_groups / (
- max(0.0001, (len_broken_group + len_working_group ))))
- confidence = int(min(1.0, max(confidence, 0.0)) * 100.0)
-
- culprit_revisions = []
-
- cwd = os.getcwd()
- self.ChangeToDepotWorkingDirectory(
- revision_data[last_broken_revision]['depot'])
-
- if revision_data[last_broken_revision]['depot'] == 'cros':
- # Want to get a list of all the commits and what depots they belong
- # to so that we can grab info about each.
- cmd = ['repo', 'forall', '-c',
- 'pwd ; git log --pretty=oneline --before=%d --after=%d' % (
- last_broken_revision, first_working_revision + 1)]
- (output, return_code) = RunProcessAndRetrieveOutput(cmd)
-
- changes = []
- assert not return_code, 'An error occurred while running'\
- ' "%s"' % ' '.join(cmd)
- last_depot = None
- cwd = os.getcwd()
- for l in output.split('\n'):
- if l:
- # Output will be in form:
- # /path_to_depot
- # /path_to_other_depot
- # <SHA1>
- # /path_again
- # <SHA1>
- # etc.
- if l[0] == '/':
- last_depot = l
- else:
- contents = l.split(' ')
- if len(contents) > 1:
- changes.append([last_depot, contents[0]])
- for c in changes:
- os.chdir(c[0])
- info = self.source_control.QueryRevisionInfo(c[1])
- culprit_revisions.append((c[1], info, None))
- else:
- for i in xrange(last_broken_revision_index, len(revision_data_sorted)):
- k, v = revision_data_sorted[i]
- if k == first_working_revision:
- break
- self.ChangeToDepotWorkingDirectory(v['depot'])
- info = self.source_control.QueryRevisionInfo(k)
- culprit_revisions.append((k, info, v['depot']))
- os.chdir(cwd)
-
- # Check for any other possible regression ranges
- good_std_dev = revision_data[first_working_revision]['value']['std_err']
- good_mean = revision_data[first_working_revision]['value']['mean']
- bad_mean = revision_data[last_broken_revision]['value']['mean']
- prev_revision_data = revision_data_sorted[0][1]
- prev_revision_id = revision_data_sorted[0][0]
- other_regressions = []
- for current_id, current_data in revision_data_sorted:
- if current_data['value']:
- prev_mean = prev_revision_data['value']['mean']
- cur_mean = current_data['value']['mean']
-
- if good_std_dev:
- deviations = math.fabs(prev_mean - cur_mean) / good_std_dev
- else:
- deviations = None
-
- if good_mean:
- percent_change = (prev_mean - cur_mean) / good_mean
-
- # If the "good" valuse are supposed to be higher than the "bad"
- # values (ie. scores), flip the sign of the percent change so that
- # a positive value always represents a regression.
- if bad_mean < good_mean:
- percent_change *= -1.0
- else:
- percent_change = None
-
- if deviations >= 1.5 or percent_change > 0.01:
- if current_id != first_working_revision:
- other_regressions.append(
- [current_id, prev_revision_id, percent_change, deviations])
- prev_revision_data = current_data
- prev_revision_id = current_id
-
- # Check for warnings:
- if len(culprit_revisions) > 1:
- self.warnings.append('Due to build errors, regression range could '
- 'not be narrowed down to a single commit.')
- if self.opts.repeat_test_count == 1:
- self.warnings.append('Tests were only set to run once. This may '
- 'be insufficient to get meaningful results.')
- if confidence < 100:
- self.warnings.append(
- 'Confidence is less than 100%. There could be other candidates for '
- 'this regression. Try bisecting again with increased repeat_count or '
- 'on a sub-metric that shows the regression more clearly.')
-
- return {
- 'first_working_revision': first_working_revision,
- 'last_broken_revision': last_broken_revision,
- 'culprit_revisions': culprit_revisions,
- 'other_regressions': other_regressions,
- 'regression_size': regression_size,
- 'regression_std_err': regression_std_err,
- 'confidence': confidence,
- }
-
- def FormatAndPrintResults(self, bisect_results):
- """Prints the results from a bisection run in a readable format.
-
- Args
- bisect_results: The results from a bisection test run.
- """
- revision_data = bisect_results['revision_data']
- revision_data_sorted = sorted(revision_data.iteritems(),
- key = lambda x: x[1]['sort'])
- results_dict = self._GetResultsDict(revision_data, revision_data_sorted)
-
- if self.opts.output_buildbot_annotations:
- bisect_utils.OutputAnnotationStepStart('Build Status Per Revision')
-
- print
- print 'Full results of bisection:'
- for current_id, current_data in revision_data_sorted:
- build_status = current_data['passed']
-
- if type(build_status) is bool:
- if build_status:
- build_status = 'Good'
- else:
- build_status = 'Bad'
-
- print ' %20s %40s %s' % (current_data['depot'],
- current_id, build_status)
- print
-
- if self.opts.output_buildbot_annotations:
- bisect_utils.OutputAnnotationStepClosed()
- # The perf dashboard scrapes the "results" step in order to comment on
- # bugs. If you change this, please update the perf dashboard as well.
- bisect_utils.OutputAnnotationStepStart('Results')
-
- if results_dict['culprit_revisions']:
- self._PrintBanner(results_dict)
- for culprit in results_dict['culprit_revisions']:
- cl, info, depot = culprit
- self._PrintRevisionInfo(cl, info, depot)
- self._PrintReproSteps()
- if results_dict['other_regressions']:
- self._PrintOtherRegressions(results_dict['other_regressions'],
- revision_data)
-
- self._PrintTestedCommitsTable(revision_data_sorted,
- results_dict['first_working_revision'],
- results_dict['last_broken_revision'])
- self._PrintStepTime(revision_data_sorted)
- self._PrintWarnings()
-
- if self.opts.output_buildbot_annotations:
- bisect_utils.OutputAnnotationStepClosed()
-
-
-def DetermineAndCreateSourceControl(opts):
- """Attempts to determine the underlying source control workflow and returns
- a SourceControl object.
-
- Returns:
- An instance of a SourceControl object, or None if the current workflow
- is unsupported.
- """
-
- (output, return_code) = RunGit(['rev-parse', '--is-inside-work-tree'])
-
- if output.strip() == 'true':
- return GitSourceControl(opts)
-
- return None
-
-
-def IsPlatformSupported(opts):
- """Checks that this platform and build system are supported.
-
- Args:
- opts: The options parsed from the command line.
-
- Returns:
- True if the platform and build system are supported.
- """
- # Haven't tested the script out on any other platforms yet.
- supported = ['posix', 'nt']
- return os.name in supported
-
-
-def RmTreeAndMkDir(path_to_dir):
- """Removes the directory tree specified, and then creates an empty
- directory in the same location.
-
- Args:
- path_to_dir: Path to the directory tree.
-
- Returns:
- True if successful, False if an error occurred.
- """
- try:
- if os.path.exists(path_to_dir):
- shutil.rmtree(path_to_dir)
- except OSError, e:
- if e.errno != errno.ENOENT:
- return False
-
- try:
- os.makedirs(path_to_dir)
- except OSError, e:
- if e.errno != errno.EEXIST:
- return False
-
- return True
-
-
-def RemoveBuildFiles():
- """Removes build files from previous runs."""
- if RmTreeAndMkDir(os.path.join('out', 'Release')):
- if RmTreeAndMkDir(os.path.join('build', 'Release')):
- return True
- return False
-
-
-class BisectOptions(object):
- """Options to be used when running bisection."""
- def __init__(self):
- super(BisectOptions, self).__init__()
-
- self.target_platform = 'chromium'
- self.build_preference = None
- self.good_revision = None
- self.bad_revision = None
- self.use_goma = None
- self.cros_board = None
- self.cros_remote_ip = None
- self.repeat_test_count = 20
- self.truncate_percent = 25
- self.max_time_minutes = 20
- self.metric = None
- self.command = None
- self.output_buildbot_annotations = None
- self.no_custom_deps = False
- self.working_directory = None
- self.extra_src = None
- self.debug_ignore_build = None
- self.debug_ignore_sync = None
- self.debug_ignore_perf_test = None
-
- def _CreateCommandLineParser(self):
- """Creates a parser with bisect options.
-
- Returns:
- An instance of optparse.OptionParser.
- """
- usage = ('%prog [options] [-- chromium-options]\n'
- 'Perform binary search on revision history to find a minimal '
- 'range of revisions where a peformance metric regressed.\n')
-
- parser = optparse.OptionParser(usage=usage)
-
- group = optparse.OptionGroup(parser, 'Bisect options')
- group.add_option('-c', '--command',
- type='str',
- help='A command to execute your performance test at' +
- ' each point in the bisection.')
- group.add_option('-b', '--bad_revision',
- type='str',
- help='A bad revision to start bisection. ' +
- 'Must be later than good revision. May be either a git' +
- ' or svn revision.')
- group.add_option('-g', '--good_revision',
- type='str',
- help='A revision to start bisection where performance' +
- ' test is known to pass. Must be earlier than the ' +
- 'bad revision. May be either a git or svn revision.')
- group.add_option('-m', '--metric',
- type='str',
- help='The desired metric to bisect on. For example ' +
- '"vm_rss_final_b/vm_rss_f_b"')
- group.add_option('-r', '--repeat_test_count',
- type='int',
- default=20,
- help='The number of times to repeat the performance '
- 'test. Values will be clamped to range [1, 100]. '
- 'Default value is 20.')
- group.add_option('--max_time_minutes',
- type='int',
- default=20,
- help='The maximum time (in minutes) to take running the '
- 'performance tests. The script will run the performance '
- 'tests according to --repeat_test_count, so long as it '
- 'doesn\'t exceed --max_time_minutes. Values will be '
- 'clamped to range [1, 60].'
- 'Default value is 20.')
- group.add_option('-t', '--truncate_percent',
- type='int',
- default=25,
- help='The highest/lowest % are discarded to form a '
- 'truncated mean. Values will be clamped to range [0, '
- '25]. Default value is 25 (highest/lowest 25% will be '
- 'discarded).')
- parser.add_option_group(group)
-
- group = optparse.OptionGroup(parser, 'Build options')
- group.add_option('-w', '--working_directory',
- type='str',
- help='Path to the working directory where the script '
- 'will do an initial checkout of the chromium depot. The '
- 'files will be placed in a subdirectory "bisect" under '
- 'working_directory and that will be used to perform the '
- 'bisection. This parameter is optional, if it is not '
- 'supplied, the script will work from the current depot.')
- group.add_option('--build_preference',
- type='choice',
- choices=['msvs', 'ninja', 'make'],
- help='The preferred build system to use. On linux/mac '
- 'the options are make/ninja. On Windows, the options '
- 'are msvs/ninja.')
- group.add_option('--target_platform',
- type='choice',
- choices=['chromium', 'cros', 'android', 'android-chrome'],
- default='chromium',
- help='The target platform. Choices are "chromium" '
- '(current platform), "cros", or "android". If you '
- 'specify something other than "chromium", you must be '
- 'properly set up to build that platform.')
- group.add_option('--no_custom_deps',
- dest='no_custom_deps',
- action="store_true",
- default=False,
- help='Run the script with custom_deps or not.')
- group.add_option('--extra_src',
- type='str',
- help='Path to a script which can be used to modify '
- 'the bisect script\'s behavior.')
- group.add_option('--cros_board',
- type='str',
- help='The cros board type to build.')
- group.add_option('--cros_remote_ip',
- type='str',
- help='The remote machine to image to.')
- group.add_option('--use_goma',
- action="store_true",
- help='Add a bunch of extra threads for goma.')
- group.add_option('--output_buildbot_annotations',
- action="store_true",
- help='Add extra annotation output for buildbot.')
- parser.add_option_group(group)
-
- group = optparse.OptionGroup(parser, 'Debug options')
- group.add_option('--debug_ignore_build',
- action="store_true",
- help='DEBUG: Don\'t perform builds.')
- group.add_option('--debug_ignore_sync',
- action="store_true",
- help='DEBUG: Don\'t perform syncs.')
- group.add_option('--debug_ignore_perf_test',
- action="store_true",
- help='DEBUG: Don\'t perform performance tests.')
- parser.add_option_group(group)
-
-
- return parser
-
- def ParseCommandLine(self):
- """Parses the command line for bisect options."""
- parser = self._CreateCommandLineParser()
- (opts, args) = parser.parse_args()
-
- try:
- if not opts.command:
- raise RuntimeError('missing required parameter: --command')
-
- if not opts.good_revision:
- raise RuntimeError('missing required parameter: --good_revision')
-
- if not opts.bad_revision:
- raise RuntimeError('missing required parameter: --bad_revision')
-
- if not opts.metric:
- raise RuntimeError('missing required parameter: --metric')
-
- if opts.target_platform == 'cros':
- # Run sudo up front to make sure credentials are cached for later.
- print 'Sudo is required to build cros:'
- print
- RunProcess(['sudo', 'true'])
-
- if not opts.cros_board:
- raise RuntimeError('missing required parameter: --cros_board')
-
- if not opts.cros_remote_ip:
- raise RuntimeError('missing required parameter: --cros_remote_ip')
-
- if not opts.working_directory:
- raise RuntimeError('missing required parameter: --working_directory')
-
- metric_values = opts.metric.split('/')
- if len(metric_values) != 2:
- raise RuntimeError("Invalid metric specified: [%s]" % opts.metric)
-
- opts.metric = metric_values
- opts.repeat_test_count = min(max(opts.repeat_test_count, 1), 100)
- opts.max_time_minutes = min(max(opts.max_time_minutes, 1), 60)
- opts.truncate_percent = min(max(opts.truncate_percent, 0), 25)
- opts.truncate_percent = opts.truncate_percent / 100.0
-
- for k, v in opts.__dict__.iteritems():
- assert hasattr(self, k), "Invalid %s attribute in BisectOptions." % k
- setattr(self, k, v)
- except RuntimeError, e:
- output_string = StringIO.StringIO()
- parser.print_help(file=output_string)
- error_message = '%s\n\n%s' % (e.message, output_string.getvalue())
- output_string.close()
- raise RuntimeError(error_message)
-
- @staticmethod
- def FromDict(values):
- """Creates an instance of BisectOptions with the values parsed from a
- .cfg file.
-
- Args:
- values: a dict containing options to set.
-
- Returns:
- An instance of BisectOptions.
- """
- opts = BisectOptions()
-
- for k, v in values.iteritems():
- assert hasattr(opts, k), 'Invalid %s attribute in '\
- 'BisectOptions.' % k
- setattr(opts, k, v)
-
- metric_values = opts.metric.split('/')
- if len(metric_values) != 2:
- raise RuntimeError("Invalid metric specified: [%s]" % opts.metric)
-
- opts.metric = metric_values
- opts.repeat_test_count = min(max(opts.repeat_test_count, 1), 100)
- opts.max_time_minutes = min(max(opts.max_time_minutes, 1), 60)
- opts.truncate_percent = min(max(opts.truncate_percent, 0), 25)
- opts.truncate_percent = opts.truncate_percent / 100.0
-
- return opts
-
-
-def main():
-
- try:
- opts = BisectOptions()
- parse_results = opts.ParseCommandLine()
-
- if opts.extra_src:
- extra_src = bisect_utils.LoadExtraSrc(opts.extra_src)
- if not extra_src:
- raise RuntimeError("Invalid or missing --extra_src.")
- _AddAdditionalDepotInfo(extra_src.GetAdditionalDepotInfo())
-
- if opts.working_directory:
- custom_deps = bisect_utils.DEFAULT_GCLIENT_CUSTOM_DEPS
- if opts.no_custom_deps:
- custom_deps = None
- bisect_utils.CreateBisectDirectoryAndSetupDepot(opts, custom_deps)
-
- os.chdir(os.path.join(os.getcwd(), 'src'))
-
- if not RemoveBuildFiles():
- raise RuntimeError('Something went wrong removing the build files.')
-
- if not IsPlatformSupported(opts):
- raise RuntimeError("Sorry, this platform isn't supported yet.")
-
- # Check what source control method they're using. Only support git workflow
- # at the moment.
- source_control = DetermineAndCreateSourceControl(opts)
-
- if not source_control:
- raise RuntimeError("Sorry, only the git workflow is supported at the "
- "moment.")
-
- # gClient sync seems to fail if you're not in master branch.
- if (not source_control.IsInProperBranch() and
- not opts.debug_ignore_sync and
- not opts.working_directory):
- raise RuntimeError("You must switch to master branch to run bisection.")
-
- bisect_test = BisectPerformanceMetrics(source_control, opts)
- try:
- bisect_results = bisect_test.Run(opts.command,
- opts.bad_revision,
- opts.good_revision,
- opts.metric)
- if bisect_results['error']:
- raise RuntimeError(bisect_results['error'])
- bisect_test.FormatAndPrintResults(bisect_results)
- return 0
- finally:
- bisect_test.PerformCleanup()
- except RuntimeError, e:
- if opts.output_buildbot_annotations:
- # The perf dashboard scrapes the "results" step in order to comment on
- # bugs. If you change this, please update the perf dashboard as well.
- bisect_utils.OutputAnnotationStepStart('Results')
- print 'Error: %s' % e.message
- if opts.output_buildbot_annotations:
- bisect_utils.OutputAnnotationStepClosed()
- return 1
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/bisect_test.py b/chromium/tools/bisect_test.py
deleted file mode 100644
index b970f84e36d..00000000000
--- a/chromium/tools/bisect_test.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright (c) 2012 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.
-
-import unittest
-
-bisect_builds = __import__('bisect-builds')
-
-
-class BisectTest(unittest.TestCase):
-
- patched = []
- max_rev = 10000
-
- def monkey_patch(self, obj, name, new):
- self.patched.append((obj, name, getattr(obj, name)))
- setattr(obj, name, new)
-
- def clear_patching(self):
- for obj, name, old in self.patched:
- setattr(obj, name, old)
- self.patched = []
-
- def setUp(self):
- self.monkey_patch(bisect_builds.DownloadJob, 'Start', lambda *args: None)
- self.monkey_patch(bisect_builds.DownloadJob, 'Stop', lambda *args: None)
- self.monkey_patch(bisect_builds.DownloadJob, 'WaitFor', lambda *args: None)
- self.monkey_patch(bisect_builds, 'RunRevision', lambda *args: (0, "", ""))
- self.monkey_patch(bisect_builds.PathContext, 'ParseDirectoryIndex',
- lambda *args: range(self.max_rev))
-
- def tearDown(self):
- self.clear_patching()
-
- def bisect(self, good_rev, bad_rev, evaluate):
- return bisect_builds.Bisect(good_rev=good_rev,
- bad_rev=bad_rev,
- evaluate=evaluate,
- num_runs=1,
- official_builds=False,
- platform='linux',
- profile=None,
- try_args=())
-
- def testBisectConsistentAnswer(self):
- self.assertEqual(self.bisect(1000, 100, lambda *args: 'g'), (100, 101))
- self.assertEqual(self.bisect(100, 1000, lambda *args: 'b'), (100, 101))
- self.assertEqual(self.bisect(2000, 200, lambda *args: 'b'), (1999, 2000))
- self.assertEqual(self.bisect(200, 2000, lambda *args: 'g'), (1999, 2000))
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/chromium/tools/bisect_utils.py b/chromium/tools/bisect_utils.py
deleted file mode 100644
index 7bb33a31e73..00000000000
--- a/chromium/tools/bisect_utils.py
+++ /dev/null
@@ -1,503 +0,0 @@
-# Copyright (c) 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.
-
-"""Set of operations/utilities related to checking out the depot, and
-outputting annotations on the buildbot waterfall. These are intended to be
-used by the bisection scripts."""
-
-import errno
-import imp
-import os
-import shutil
-import stat
-import subprocess
-import sys
-
-DEFAULT_GCLIENT_CUSTOM_DEPS = {
- "src/data/page_cycler": "https://chrome-internal.googlesource.com/"
- "chrome/data/page_cycler/.git",
- "src/data/dom_perf": "https://chrome-internal.googlesource.com/"
- "chrome/data/dom_perf/.git",
- "src/data/mach_ports": "https://chrome-internal.googlesource.com/"
- "chrome/data/mach_ports/.git",
- "src/tools/perf/data": "https://chrome-internal.googlesource.com/"
- "chrome/tools/perf/data/.git",
- "src/third_party/adobe/flash/binaries/ppapi/linux":
- "https://chrome-internal.googlesource.com/"
- "chrome/deps/adobe/flash/binaries/ppapi/linux/.git",
- "src/third_party/adobe/flash/binaries/ppapi/linux_x64":
- "https://chrome-internal.googlesource.com/"
- "chrome/deps/adobe/flash/binaries/ppapi/linux_x64/.git",
- "src/third_party/adobe/flash/binaries/ppapi/mac":
- "https://chrome-internal.googlesource.com/"
- "chrome/deps/adobe/flash/binaries/ppapi/mac/.git",
- "src/third_party/adobe/flash/binaries/ppapi/mac_64":
- "https://chrome-internal.googlesource.com/"
- "chrome/deps/adobe/flash/binaries/ppapi/mac_64/.git",
- "src/third_party/adobe/flash/binaries/ppapi/win":
- "https://chrome-internal.googlesource.com/"
- "chrome/deps/adobe/flash/binaries/ppapi/win/.git",
- "src/third_party/adobe/flash/binaries/ppapi/win_x64":
- "https://chrome-internal.googlesource.com/"
- "chrome/deps/adobe/flash/binaries/ppapi/win_x64/.git",}
-
-GCLIENT_SPEC_DATA = [
- { "name" : "src",
- "url" : "https://chromium.googlesource.com/chromium/src.git",
- "deps_file" : ".DEPS.git",
- "managed" : True,
- "custom_deps" : {},
- "safesync_url": "",
- },
-]
-GCLIENT_SPEC_ANDROID = "\ntarget_os = ['android']"
-GCLIENT_CUSTOM_DEPS_V8 = {"src/v8_bleeding_edge": "git://github.com/v8/v8.git"}
-FILE_DEPS_GIT = '.DEPS.git'
-
-REPO_PARAMS = [
- 'https://chrome-internal.googlesource.com/chromeos/manifest-internal/',
- '--repo-url',
- 'https://git.chromium.org/external/repo.git'
-]
-
-REPO_SYNC_COMMAND = 'git checkout -f $(git rev-list --max-count=1 '\
- '--before=%d remotes/m/master)'
-
-ORIGINAL_ENV = {}
-
-def OutputAnnotationStepStart(name):
- """Outputs appropriate annotation to signal the start of a step to
- a trybot.
-
- Args:
- name: The name of the step.
- """
- print
- print '@@@SEED_STEP %s@@@' % name
- print '@@@STEP_CURSOR %s@@@' % name
- print '@@@STEP_STARTED@@@'
- print
- sys.stdout.flush()
-
-
-def OutputAnnotationStepClosed():
- """Outputs appropriate annotation to signal the closing of a step to
- a trybot."""
- print
- print '@@@STEP_CLOSED@@@'
- print
- sys.stdout.flush()
-
-
-def OutputAnnotationStepLink(label, url):
- """Outputs appropriate annotation to print a link.
-
- Args:
- label: The name to print.
- url: The url to print.
- """
- print
- print '@@@STEP_LINK@%s@%s@@@' % (label, url)
- print
- sys.stdout.flush()
-
-
-def LoadExtraSrc(path_to_file):
- """Attempts to load an extra source file. If this is successful, uses the
- new module to override some global values, such as gclient spec data.
-
- Returns:
- The loaded src module, or None."""
- try:
- global GCLIENT_SPEC_DATA
- global GCLIENT_SPEC_ANDROID
- extra_src = imp.load_source('data', path_to_file)
- GCLIENT_SPEC_DATA = extra_src.GetGClientSpec()
- GCLIENT_SPEC_ANDROID = extra_src.GetGClientSpecExtraParams()
- return extra_src
- except ImportError, e:
- return None
-
-
-def IsTelemetryCommand(command):
- """Attempts to discern whether or not a given command is running telemetry."""
- return ('tools/perf/run_' in command or 'tools\\perf\\run_' in command)
-
-
-def CreateAndChangeToSourceDirectory(working_directory):
- """Creates a directory 'bisect' as a subdirectory of 'working_directory'. If
- the function is successful, the current working directory will change to that
- of the new 'bisect' directory.
-
- Returns:
- True if the directory was successfully created (or already existed).
- """
- cwd = os.getcwd()
- os.chdir(working_directory)
- try:
- os.mkdir('bisect')
- except OSError, e:
- if e.errno != errno.EEXIST:
- return False
- os.chdir('bisect')
- return True
-
-
-def SubprocessCall(cmd, cwd=None):
- """Runs a subprocess with specified parameters.
-
- Args:
- params: A list of parameters to pass to gclient.
- cwd: Working directory to run from.
-
- Returns:
- The return code of the call.
- """
- if os.name == 'nt':
- # "HOME" isn't normally defined on windows, but is needed
- # for git to find the user's .netrc file.
- if not os.getenv('HOME'):
- os.environ['HOME'] = os.environ['USERPROFILE']
- shell = os.name == 'nt'
- return subprocess.call(cmd, shell=shell, cwd=cwd)
-
-
-def RunGClient(params, cwd=None):
- """Runs gclient with the specified parameters.
-
- Args:
- params: A list of parameters to pass to gclient.
- cwd: Working directory to run from.
-
- Returns:
- The return code of the call.
- """
- cmd = ['gclient'] + params
-
- return SubprocessCall(cmd, cwd=cwd)
-
-
-def RunRepo(params):
- """Runs cros repo command with specified parameters.
-
- Args:
- params: A list of parameters to pass to gclient.
-
- Returns:
- The return code of the call.
- """
- cmd = ['repo'] + params
-
- return SubprocessCall(cmd)
-
-
-def RunRepoSyncAtTimestamp(timestamp):
- """Syncs all git depots to the timestamp specified using repo forall.
-
- Args:
- params: Unix timestamp to sync to.
-
- Returns:
- The return code of the call.
- """
- repo_sync = REPO_SYNC_COMMAND % timestamp
- cmd = ['forall', '-c', REPO_SYNC_COMMAND % timestamp]
- return RunRepo(cmd)
-
-
-def RunGClientAndCreateConfig(opts, custom_deps=None, cwd=None):
- """Runs gclient and creates a config containing both src and src-internal.
-
- Args:
- opts: The options parsed from the command line through parse_args().
- custom_deps: A dictionary of additional dependencies to add to .gclient.
- cwd: Working directory to run from.
-
- Returns:
- The return code of the call.
- """
- spec = GCLIENT_SPEC_DATA
-
- if custom_deps:
- for k, v in custom_deps.iteritems():
- spec[0]['custom_deps'][k] = v
-
- # Cannot have newlines in string on windows
- spec = 'solutions =' + str(spec)
- spec = ''.join([l for l in spec.splitlines()])
-
- if 'android' in opts.target_platform:
- spec += GCLIENT_SPEC_ANDROID
-
- return_code = RunGClient(
- ['config', '--spec=%s' % spec, '--git-deps'], cwd=cwd)
- return return_code
-
-
-def IsDepsFileBlink():
- """Reads .DEPS.git and returns whether or not we're using blink.
-
- Returns:
- True if blink, false if webkit.
- """
- locals = {'Var': lambda _: locals["vars"][_],
- 'From': lambda *args: None}
- execfile(FILE_DEPS_GIT, {}, locals)
- return 'blink.git' in locals['vars']['webkit_url']
-
-
-def RemoveThirdPartyWebkitDirectory():
- """Removes third_party/WebKit.
-
- Returns:
- True on success.
- """
- try:
- path_to_dir = os.path.join(os.getcwd(), 'third_party', 'WebKit')
- if os.path.exists(path_to_dir):
- shutil.rmtree(path_to_dir)
- except OSError, e:
- if e.errno != errno.ENOENT:
- return False
- return True
-
-
-def OnAccessError(func, path, exc_info):
- """
- Source: http://stackoverflow.com/questions/2656322/python-shutil-rmtree-fails-on-windows-with-access-is-denied
-
- Error handler for ``shutil.rmtree``.
-
- If the error is due to an access error (read only file)
- it attempts to add write permission and then retries.
-
- If the error is for another reason it re-raises the error.
-
- Args:
- func: The function that raised the error.
- path: The path name passed to func.
- exc_info: Exception information returned by sys.exc_info().
- """
- if not os.access(path, os.W_OK):
- # Is the error an access error ?
- os.chmod(path, stat.S_IWUSR)
- func(path)
- else:
- raise
-
-
-def RemoveThirdPartyLibjingleDirectory():
- """Removes third_party/libjingle. At some point, libjingle was causing issues
- syncing when using the git workflow (crbug.com/266324).
-
- Returns:
- True on success.
- """
- path_to_dir = os.path.join(os.getcwd(), 'third_party', 'libjingle')
- try:
- if os.path.exists(path_to_dir):
- shutil.rmtree(path_to_dir, onerror=OnAccessError)
- except OSError, e:
- print 'Error #%d while running shutil.rmtree(%s): %s' % (
- e.errno, path_to_dir, str(e))
- if e.errno != errno.ENOENT:
- return False
- return True
-
-
-def _CleanupPreviousGitRuns():
- """Performs necessary cleanup between runs."""
- # If a previous run of git crashed, bot was reset, etc... we
- # might end up with leftover index.lock files.
- for (path, dir, files) in os.walk(os.getcwd()):
- for cur_file in files:
- if cur_file.endswith('index.lock'):
- path_to_file = os.path.join(path, cur_file)
- os.remove(path_to_file)
-
-
-def RunGClientAndSync(cwd=None):
- """Runs gclient and does a normal sync.
-
- Args:
- cwd: Working directory to run from.
-
- Returns:
- The return code of the call.
- """
- params = ['sync', '--verbose', '--nohooks', '--reset', '--force']
- return RunGClient(params, cwd=cwd)
-
-
-def SetupGitDepot(opts, custom_deps):
- """Sets up the depot for the bisection. The depot will be located in a
- subdirectory called 'bisect'.
-
- Args:
- opts: The options parsed from the command line through parse_args().
- custom_deps: A dictionary of additional dependencies to add to .gclient.
-
- Returns:
- True if gclient successfully created the config file and did a sync, False
- otherwise.
- """
- name = 'Setting up Bisection Depot'
-
- if opts.output_buildbot_annotations:
- OutputAnnotationStepStart(name)
-
- passed = False
-
- if not RunGClientAndCreateConfig(opts, custom_deps):
- passed_deps_check = True
- if os.path.isfile(os.path.join('src', FILE_DEPS_GIT)):
- cwd = os.getcwd()
- os.chdir('src')
- if not IsDepsFileBlink():
- passed_deps_check = RemoveThirdPartyWebkitDirectory()
- else:
- passed_deps_check = True
- if passed_deps_check:
- passed_deps_check = RemoveThirdPartyLibjingleDirectory()
- os.chdir(cwd)
-
- if passed_deps_check:
- _CleanupPreviousGitRuns()
-
- RunGClient(['revert'])
- if not RunGClientAndSync():
- passed = True
-
- if opts.output_buildbot_annotations:
- print
- OutputAnnotationStepClosed()
-
- return passed
-
-
-def SetupCrosRepo():
- """Sets up cros repo for bisecting chromeos.
-
- Returns:
- Returns 0 on success.
- """
- cwd = os.getcwd()
- try:
- os.mkdir('cros')
- except OSError, e:
- if e.errno != errno.EEXIST:
- return False
- os.chdir('cros')
-
- cmd = ['init', '-u'] + REPO_PARAMS
-
- passed = False
-
- if not RunRepo(cmd):
- if not RunRepo(['sync']):
- passed = True
- os.chdir(cwd)
-
- return passed
-
-
-def CopyAndSaveOriginalEnvironmentVars():
- """Makes a copy of the current environment variables."""
- # TODO: Waiting on crbug.com/255689, will remove this after.
- vars_to_remove = []
- for k, v in os.environ.iteritems():
- if 'ANDROID' in k:
- vars_to_remove.append(k)
- vars_to_remove.append('CHROME_SRC')
- vars_to_remove.append('CHROMIUM_GYP_FILE')
- vars_to_remove.append('GYP_CROSSCOMPILE')
- vars_to_remove.append('GYP_DEFINES')
- vars_to_remove.append('GYP_GENERATORS')
- vars_to_remove.append('GYP_GENERATOR_FLAGS')
- vars_to_remove.append('OBJCOPY')
- for k in vars_to_remove:
- if os.environ.has_key(k):
- del os.environ[k]
-
- global ORIGINAL_ENV
- ORIGINAL_ENV = os.environ.copy()
-
-
-def SetupAndroidBuildEnvironment(opts, path_to_src=None):
- """Sets up the android build environment.
-
- Args:
- opts: The options parsed from the command line through parse_args().
- path_to_src: Path to the src checkout.
-
- Returns:
- True if successful.
- """
-
- # Revert the environment variables back to default before setting them up
- # with envsetup.sh.
- env_vars = os.environ.copy()
- for k, _ in env_vars.iteritems():
- del os.environ[k]
- for k, v in ORIGINAL_ENV.iteritems():
- os.environ[k] = v
-
- path_to_file = os.path.join('build', 'android', 'envsetup.sh')
- proc = subprocess.Popen(['bash', '-c', 'source %s && env' % path_to_file],
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- cwd=path_to_src)
- (out, _) = proc.communicate()
-
- for line in out.splitlines():
- (k, _, v) = line.partition('=')
- os.environ[k] = v
-
- return not proc.returncode
-
-
-def SetupPlatformBuildEnvironment(opts):
- """Performs any platform specific setup.
-
- Args:
- opts: The options parsed from the command line through parse_args().
-
- Returns:
- True if successful.
- """
- if 'android' in opts.target_platform:
- CopyAndSaveOriginalEnvironmentVars()
- return SetupAndroidBuildEnvironment(opts)
- elif opts.target_platform == 'cros':
- return SetupCrosRepo()
-
- return True
-
-
-def CheckIfBisectDepotExists(opts):
- """Checks if the bisect directory already exists.
-
- Args:
- opts: The options parsed from the command line through parse_args().
-
- Returns:
- Returns True if it exists.
- """
- path_to_dir = os.path.join(opts.working_directory, 'bisect', 'src')
- return os.path.exists(path_to_dir)
-
-
-def CreateBisectDirectoryAndSetupDepot(opts, custom_deps):
- """Sets up a subdirectory 'bisect' and then retrieves a copy of the depot
- there using gclient.
-
- Args:
- opts: The options parsed from the command line through parse_args().
- custom_deps: A dictionary of additional dependencies to add to .gclient.
- """
- if not CreateAndChangeToSourceDirectory(opts.working_directory):
- raise RuntimeError('Could not create bisect directory.')
-
- if not SetupGitDepot(opts, custom_deps):
- raise RuntimeError('Failed to grab source.')
diff --git a/chromium/tools/check_ecs_deps/check_ecs_deps.py b/chromium/tools/check_ecs_deps/check_ecs_deps.py
deleted file mode 100755
index f6760d65b5f..00000000000
--- a/chromium/tools/check_ecs_deps/check_ecs_deps.py
+++ /dev/null
@@ -1,202 +0,0 @@
-#!/usr/bin/env python
-# 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.
-
-''' Verifies that builds of the embedded content_shell do not included
-unnecessary dependencies.'''
-
-import os
-import re
-import string
-import subprocess
-import sys
-import optparse
-
-kUndesiredLibraryList = [
- 'libX11',
- 'libXau',
- 'libXcomposite',
- 'libXcursor',
- 'libXdamage',
- 'libXdmcp',
- 'libXext',
- 'libXfixes',
- 'libXi',
- 'libXrandr',
- 'libXrender',
- 'libXtst',
- 'libasound',
- 'libcairo',
- 'libdbus',
- 'libffi',
- 'libgconf',
- 'libgio',
- 'libglib',
- 'libgmodule',
- 'libgobject',
- 'libpango',
- 'libpcre',
- 'libpixman',
- 'libpng',
- 'libresolv',
- 'libselinux',
- 'libudev',
- 'libxcb',
-]
-
-kAllowedLibraryList = [
- # Toolchain libraries (gcc/glibc)
- 'ld-linux',
- 'libc',
- 'libdl',
- 'libgcc_s',
- 'libm',
- 'libpthread',
- 'librt',
- 'libstdc++',
- 'linux-vdso',
-
- # Needed for default ozone platforms
- 'libdrm',
-
- # NSS & NSPR
- 'libnss3',
- 'libnssutil3',
- 'libnspr4',
- 'libplc4',
- 'libplds4',
- 'libsmime3',
-
- # Miscellaneous
- 'libcap',
- 'libexpat',
- 'libfontconfig',
- 'libz',
-]
-
-binary_target = 'content_shell'
-
-def stdmsg(_final, errors):
- if errors:
- for message in errors:
- print message
-
-def bbmsg(final, errors):
- if errors:
- for message in errors:
- print '@@@STEP_TEXT@%s@@@' % message
- if final:
- print '\n@@@STEP_%s@@@' % final
-
-
-def _main():
- output = {
- 'message': lambda x: stdmsg(None, x),
- 'fail': lambda x: stdmsg('FAILED', x),
- 'warn': lambda x: stdmsg('WARNING', x),
- 'abend': lambda x: stdmsg('FAILED', x),
- 'ok': lambda x: stdmsg('SUCCESS', x),
- 'verbose': lambda x: None,
- }
-
- parser = optparse.OptionParser(
- "usage: %prog -b <dir> --target <Debug|Release>")
- parser.add_option("", "--annotate", dest='annotate', action='store_true',
- default=False, help="include buildbot annotations in output")
- parser.add_option("", "--noannotate", dest='annotate', action='store_false')
- parser.add_option("-b", "--build-dir",
- help="the location of the compiler output")
- parser.add_option("--target", help="Debug or Release")
- parser.add_option('-v', '--verbose', default=False, action='store_true')
-
- options, args = parser.parse_args()
- if args:
- parser.usage()
- return -1
-
- # Bake target into build_dir.
- if options.target and options.build_dir:
- assert (options.target !=
- os.path.basename(os.path.dirname(options.build_dir)))
- options.build_dir = os.path.join(os.path.abspath(options.build_dir),
- options.target)
-
- if options.build_dir != None:
- build_dir = os.path.abspath(options.build_dir)
- else:
- build_dir = os.getcwd()
-
- target = os.path.join(build_dir, binary_target)
-
- if options.annotate:
- output.update({
- 'message': lambda x: bbmsg(None, x),
- 'fail': lambda x: bbmsg('FAILURE', x),
- 'warn': lambda x: bbmsg('WARNINGS', x),
- 'abend': lambda x: bbmsg('EXCEPTIONS', x),
- 'ok': lambda x: bbmsg(None, x),
- })
-
- if options.verbose:
- output['verbose'] = lambda x: stdmsg(None, x)
-
- forbidden_regexp = re.compile(string.join(map(re.escape,
- kUndesiredLibraryList), '|'))
- mapping_regexp = re.compile(r"\s*([^/]*) => (.*)")
- blessed_regexp = re.compile(r"(%s)[-0-9.]*\.so" % string.join(map(re.escape,
- kAllowedLibraryList), '|'))
- built_regexp = re.compile(re.escape(build_dir + os.sep))
-
- success = 0
- warning = 0
-
- p = subprocess.Popen(['ldd', target], stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- out, err = p.communicate()
-
- if err != '':
- output['abend']([
- 'Failed to execute ldd to analyze dependencies for ' + target + ':',
- ' ' + err,
- ])
- return 1
-
- if out == '':
- output['abend']([
- 'No output to scan for forbidden dependencies.'
- ])
- return 1
-
- success = 1
- deps = string.split(out, '\n')
- for d in deps:
- libmatch = mapping_regexp.match(d)
- if libmatch:
- lib = libmatch.group(1)
- source = libmatch.group(2)
- if forbidden_regexp.search(lib):
- success = 0
- output['message'](['Forbidden library: ' + lib])
- elif built_regexp.match(source):
- output['verbose'](['Built library: ' + lib])
- elif blessed_regexp.match(lib):
- output['verbose'](['Blessed library: ' + lib])
- else:
- warning = 1
- output['message'](['Unexpected library: ' + lib])
-
- if success == 1:
- if warning == 1:
- output['warn'](None)
- else:
- output['ok'](None)
- return 0
- else:
- output['fail'](None)
- return 1
-
-if __name__ == "__main__":
- # handle arguments...
- # do something reasonable if not run with one...
- sys.exit(_main())
diff --git a/chromium/tools/checkbins/checkbins.py b/chromium/tools/checkbins/checkbins.py
deleted file mode 100755
index e166eec5514..00000000000
--- a/chromium/tools/checkbins/checkbins.py
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""Makes sure that all EXE and DLL files in the provided directory were built
-correctly.
-
-In essense it runs a subset of BinScope tests ensuring that binaries have
-/NXCOMPAT, /DYNAMICBASE and /SAFESEH.
-"""
-
-import os
-import optparse
-import sys
-
-# Find /third_party/pefile based on current directory and script path.
-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..',
- 'third_party', 'pefile'))
-import pefile
-
-PE_FILE_EXTENSIONS = ['.exe', '.dll']
-DYNAMICBASE_FLAG = 0x0040
-NXCOMPAT_FLAG = 0x0100
-NO_SEH_FLAG = 0x0400
-MACHINE_TYPE_AMD64 = 0x8664
-
-# Please do not add your file here without confirming that it indeed doesn't
-# require /NXCOMPAT and /DYNAMICBASE. Contact cpu@chromium.org or your local
-# Windows guru for advice.
-EXCLUDED_FILES = ['chrome_frame_mini_installer.exe',
- 'mini_installer.exe',
- 'wow_helper.exe',
- 'xinput1_3.dll' # Microsoft DirectX redistributable.
- ]
-
-def IsPEFile(path):
- return (os.path.isfile(path) and
- os.path.splitext(path)[1].lower() in PE_FILE_EXTENSIONS and
- os.path.basename(path) not in EXCLUDED_FILES)
-
-def main(options, args):
- directory = args[0]
- pe_total = 0
- pe_passed = 0
-
- for file in os.listdir(directory):
- path = os.path.abspath(os.path.join(directory, file))
- if not IsPEFile(path):
- continue
- pe = pefile.PE(path, fast_load=True)
- pe.parse_data_directories(directories=[
- pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG']])
- pe_total = pe_total + 1
- success = True
-
- # Check for /DYNAMICBASE.
- if pe.OPTIONAL_HEADER.DllCharacteristics & DYNAMICBASE_FLAG:
- if options.verbose:
- print "Checking %s for /DYNAMICBASE... PASS" % path
- else:
- success = False
- print "Checking %s for /DYNAMICBASE... FAIL" % path
-
- # Check for /NXCOMPAT.
- if pe.OPTIONAL_HEADER.DllCharacteristics & NXCOMPAT_FLAG:
- if options.verbose:
- print "Checking %s for /NXCOMPAT... PASS" % path
- else:
- success = False
- print "Checking %s for /NXCOMPAT... FAIL" % path
-
- # Check for /SAFESEH. Binaries should meet one of the following
- # criteria:
- # 1) Have no SEH table as indicated by the DLL characteristics
- # 2) Have a LOAD_CONFIG section containing a valid SEH table
- # 3) Be a 64-bit binary, in which case /SAFESEH isn't required
- #
- # Refer to the following MSDN article for more information:
- # http://msdn.microsoft.com/en-us/library/9a89h429.aspx
- if (pe.OPTIONAL_HEADER.DllCharacteristics & NO_SEH_FLAG or
- (hasattr(pe, "DIRECTORY_ENTRY_LOAD_CONFIG") and
- pe.DIRECTORY_ENTRY_LOAD_CONFIG.struct.SEHandlerCount > 0 and
- pe.DIRECTORY_ENTRY_LOAD_CONFIG.struct.SEHandlerTable != 0) or
- pe.FILE_HEADER.Machine == MACHINE_TYPE_AMD64):
- if options.verbose:
- print "Checking %s for /SAFESEH... PASS" % path
- else:
- success = False
- print "Checking %s for /SAFESEH... FAIL" % path
-
- # Update tally.
- if success:
- pe_passed = pe_passed + 1
-
- print "Result: %d files found, %d files passed" % (pe_total, pe_passed)
- if pe_passed != pe_total:
- sys.exit(1)
-
-if __name__ == '__main__':
- usage = "Usage: %prog [options] DIRECTORY"
- option_parser = optparse.OptionParser(usage=usage)
- option_parser.add_option("-v", "--verbose", action="store_true",
- default=False, help="Print debug logging")
- options, args = option_parser.parse_args()
- if not args:
- option_parser.print_help()
- sys.exit(0)
- main(options, args)
diff --git a/chromium/tools/checkdeps/DEPS b/chromium/tools/checkdeps/DEPS
deleted file mode 100644
index 7a57b0bcc8e..00000000000
--- a/chromium/tools/checkdeps/DEPS
+++ /dev/null
@@ -1,3 +0,0 @@
-skip_child_includes = [
- "testdata",
-]
diff --git a/chromium/tools/checkdeps/PRESUBMIT.py b/chromium/tools/checkdeps/PRESUBMIT.py
deleted file mode 100644
index 10ef63212fa..00000000000
--- a/chromium/tools/checkdeps/PRESUBMIT.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright (c) 2012 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.
-
-"""Presubmit script for checkdeps tool.
-"""
-
-
-def CheckChange(input_api, output_api):
- results = []
- results.extend(input_api.canned_checks.RunUnitTests(
- input_api, output_api,
- [input_api.os_path.join(input_api.PresubmitLocalPath(),
- 'checkdeps_test.py')]))
- return results
-
-
-# Mandatory entrypoint.
-def CheckChangeOnUpload(input_api, output_api):
- return CheckChange(input_api, output_api)
-
-
-# Mandatory entrypoint.
-def CheckChangeOnCommit(input_api, output_api):
- return CheckChange(input_api, output_api)
diff --git a/chromium/tools/checkdeps/builddeps.py b/chromium/tools/checkdeps/builddeps.py
deleted file mode 100755
index 5fa37934cbb..00000000000
--- a/chromium/tools/checkdeps/builddeps.py
+++ /dev/null
@@ -1,348 +0,0 @@
-#!/usr/bin/env python
-# 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.
-
-"""Traverses the source tree, parses all found DEPS files, and constructs
-a dependency rule table to be used by subclasses.
-
-The format of the deps file:
-
-First you have the normal module-level deps. These are the ones used by
-gclient. An example would be:
-
- deps = {
- "base":"http://foo.bar/trunk/base"
- }
-
-DEPS files not in the top-level of a module won't need this. Then you
-have any additional include rules. You can add (using "+") or subtract
-(using "-") from the previously specified rules (including
-module-level deps). You can also specify a path that is allowed for
-now but that we intend to remove, using "!"; this is treated the same
-as "+" when check_deps is run by our bots, but a presubmit step will
-show a warning if you add a new include of a file that is only allowed
-by "!".
-
-Note that for .java files, there is currently no difference between
-"+" and "!", even in the presubmit step.
-
- include_rules = [
- # Code should be able to use base (it's specified in the module-level
- # deps above), but nothing in "base/evil" because it's evil.
- "-base/evil",
-
- # But this one subdirectory of evil is OK.
- "+base/evil/not",
-
- # And it can include files from this other directory even though there is
- # no deps rule for it.
- "+tools/crime_fighter",
-
- # This dependency is allowed for now but work is ongoing to remove it,
- # so you shouldn't add further dependencies on it.
- "!base/evil/ok_for_now.h",
- ]
-
-If you have certain include rules that should only be applied for some
-files within this directory and subdirectories, you can write a
-section named specific_include_rules that is a hash map of regular
-expressions to the list of rules that should apply to files matching
-them. Note that such rules will always be applied before the rules
-from 'include_rules' have been applied, but the order in which rules
-associated with different regular expressions is applied is arbitrary.
-
- specific_include_rules = {
- ".*_(unit|browser|api)test\.cc": [
- "+libraries/testsupport",
- ],
- }
-
-DEPS files may be placed anywhere in the tree. Each one applies to all
-subdirectories, where there may be more DEPS files that provide additions or
-subtractions for their own sub-trees.
-
-There is an implicit rule for the current directory (where the DEPS file lives)
-and all of its subdirectories. This prevents you from having to explicitly
-allow the current directory everywhere. This implicit rule is applied first,
-so you can modify or remove it using the normal include rules.
-
-The rules are processed in order. This means you can explicitly allow a higher
-directory and then take away permissions from sub-parts, or the reverse.
-
-Note that all directory separators must be slashes (Unix-style) and not
-backslashes. All directories should be relative to the source root and use
-only lowercase.
-"""
-
-import os
-import subprocess
-import copy
-
-from rules import Rule, Rules
-
-
-# Variable name used in the DEPS file to add or subtract include files from
-# the module-level deps.
-INCLUDE_RULES_VAR_NAME = 'include_rules'
-
-# Variable name used in the DEPS file to add or subtract include files
-# from module-level deps specific to files whose basename (last
-# component of path) matches a given regular expression.
-SPECIFIC_INCLUDE_RULES_VAR_NAME = 'specific_include_rules'
-
-# Optionally present in the DEPS file to list subdirectories which should not
-# be checked. This allows us to skip third party code, for example.
-SKIP_SUBDIRS_VAR_NAME = 'skip_child_includes'
-
-
-def NormalizePath(path):
- """Returns a path normalized to how we write DEPS rules and compare paths.
- """
- return path.lower().replace('\\', '/')
-
-
-class DepsBuilder(object):
- """Parses include_rules from DEPS files.
- """
-
- def __init__(self,
- base_directory=None,
- verbose=False,
- being_tested=False,
- ignore_temp_rules=False,
- ignore_specific_rules=False):
- """Creates a new DepsBuilder.
-
- Args:
- base_directory: OS-compatible path to root of checkout, e.g. C:\chr\src.
- verbose: Set to true for debug output.
- being_tested: Set to true to ignore the DEPS file at tools/checkdeps/DEPS.
- ignore_temp_rules: Ignore rules that start with Rule.TEMP_ALLOW ("!").
- """
- self.base_directory = base_directory
- self.verbose = verbose
- self._under_test = being_tested
- self._ignore_temp_rules = ignore_temp_rules
- self._ignore_specific_rules = ignore_specific_rules
-
- if not base_directory:
- self.base_directory = os.path.abspath(
- os.path.join(os.path.abspath(os.path.dirname(__file__)), '..', '..'))
-
- self.git_source_directories = set()
- self._AddGitSourceDirectories()
-
- # Map of normalized directory paths to rules to use for those
- # directories, or None for directories that should be skipped.
- self.directory_rules = {}
- self._ApplyDirectoryRulesAndSkipSubdirs(Rules(), self.base_directory)
-
- def _ApplyRules(self, existing_rules, includes, specific_includes, cur_dir):
- """Applies the given include rules, returning the new rules.
-
- Args:
- existing_rules: A set of existing rules that will be combined.
- include: The list of rules from the "include_rules" section of DEPS.
- specific_includes: E.g. {'.*_unittest\.cc': ['+foo', '-blat']} rules
- from the "specific_include_rules" section of DEPS.
- cur_dir: The current directory, normalized path. We will create an
- implicit rule that allows inclusion from this directory.
-
- Returns: A new set of rules combining the existing_rules with the other
- arguments.
- """
- rules = copy.deepcopy(existing_rules)
-
- # First apply the implicit "allow" rule for the current directory.
- if cur_dir.startswith(
- NormalizePath(os.path.normpath(self.base_directory))):
- relative_dir = cur_dir[len(self.base_directory) + 1:]
-
- source = relative_dir
- if len(source) == 0:
- source = 'top level' # Make the help string a little more meaningful.
- rules.AddRule('+' + relative_dir,
- relative_dir,
- 'Default rule for ' + source)
- else:
- raise Exception('Internal error: base directory is not at the beginning' +
- ' for\n %s and base dir\n %s' %
- (cur_dir, self.base_directory))
-
- def ApplyOneRule(rule_str, cur_dir, dependee_regexp=None):
- """Deduces a sensible description for the rule being added, and
- adds the rule with its description to |rules|.
-
- If we are ignoring temporary rules, this function does nothing
- for rules beginning with the Rule.TEMP_ALLOW character.
- """
- if self._ignore_temp_rules and rule_str.startswith(Rule.TEMP_ALLOW):
- return
-
- rule_block_name = 'include_rules'
- if dependee_regexp:
- rule_block_name = 'specific_include_rules'
- if not relative_dir:
- rule_description = 'the top level %s' % rule_block_name
- else:
- rule_description = relative_dir + "'s %s" % rule_block_name
- rules.AddRule(rule_str, relative_dir, rule_description, dependee_regexp)
-
- # Apply the additional explicit rules.
- for (_, rule_str) in enumerate(includes):
- ApplyOneRule(rule_str, cur_dir)
-
- # Finally, apply the specific rules.
- if not self._ignore_specific_rules:
- for regexp, specific_rules in specific_includes.iteritems():
- for rule_str in specific_rules:
- ApplyOneRule(rule_str, cur_dir, regexp)
-
- return rules
-
- def _ApplyDirectoryRules(self, existing_rules, dir_name):
- """Combines rules from the existing rules and the new directory.
-
- Any directory can contain a DEPS file. Toplevel DEPS files can contain
- module dependencies which are used by gclient. We use these, along with
- additional include rules and implicit rules for the given directory, to
- come up with a combined set of rules to apply for the directory.
-
- Args:
- existing_rules: The rules for the parent directory. We'll add-on to these.
- dir_name: The directory name that the deps file may live in (if
- it exists). This will also be used to generate the
- implicit rules. This is a non-normalized path.
-
- Returns: A tuple containing: (1) the combined set of rules to apply to the
- sub-tree, and (2) a list of all subdirectories that should NOT be
- checked, as specified in the DEPS file (if any).
- """
- norm_dir_name = NormalizePath(dir_name)
-
- # Check for a .svn directory in this directory or check this directory is
- # contained in git source direcotries. This will tell us if it's a source
- # directory and should be checked.
- if not (os.path.exists(os.path.join(dir_name, ".svn")) or
- (norm_dir_name in self.git_source_directories)):
- return (None, [])
-
- # Check the DEPS file in this directory.
- if self.verbose:
- print 'Applying rules from', dir_name
- def FromImpl(_unused, _unused2):
- pass # NOP function so "From" doesn't fail.
-
- def FileImpl(_unused):
- pass # NOP function so "File" doesn't fail.
-
- class _VarImpl:
- def __init__(self, local_scope):
- self._local_scope = local_scope
-
- def Lookup(self, var_name):
- """Implements the Var syntax."""
- if var_name in self._local_scope.get('vars', {}):
- return self._local_scope['vars'][var_name]
- raise Exception('Var is not defined: %s' % var_name)
-
- local_scope = {}
- global_scope = {
- 'File': FileImpl,
- 'From': FromImpl,
- 'Var': _VarImpl(local_scope).Lookup,
- }
- deps_file = os.path.join(dir_name, 'DEPS')
-
- # The second conditional here is to disregard the
- # tools/checkdeps/DEPS file while running tests. This DEPS file
- # has a skip_child_includes for 'testdata' which is necessary for
- # running production tests, since there are intentional DEPS
- # violations under the testdata directory. On the other hand when
- # running tests, we absolutely need to verify the contents of that
- # directory to trigger those intended violations and see that they
- # are handled correctly.
- if os.path.isfile(deps_file) and (
- not self._under_test or not os.path.split(dir_name)[1] == 'checkdeps'):
- execfile(deps_file, global_scope, local_scope)
- elif self.verbose:
- print ' No deps file found in', dir_name
-
- # Even if a DEPS file does not exist we still invoke ApplyRules
- # to apply the implicit "allow" rule for the current directory
- include_rules = local_scope.get(INCLUDE_RULES_VAR_NAME, [])
- specific_include_rules = local_scope.get(SPECIFIC_INCLUDE_RULES_VAR_NAME,
- {})
- skip_subdirs = local_scope.get(SKIP_SUBDIRS_VAR_NAME, [])
-
- return (self._ApplyRules(existing_rules, include_rules,
- specific_include_rules, norm_dir_name),
- skip_subdirs)
-
- def _ApplyDirectoryRulesAndSkipSubdirs(self, parent_rules, dir_path):
- """Given |parent_rules| and a subdirectory |dir_path| from the
- directory that owns the |parent_rules|, add |dir_path|'s rules to
- |self.directory_rules|, and add None entries for any of its
- subdirectories that should be skipped.
- """
- directory_rules, excluded_subdirs = self._ApplyDirectoryRules(parent_rules,
- dir_path)
- self.directory_rules[NormalizePath(dir_path)] = directory_rules
- for subdir in excluded_subdirs:
- self.directory_rules[NormalizePath(
- os.path.normpath(os.path.join(dir_path, subdir)))] = None
-
- def GetDirectoryRules(self, dir_path):
- """Returns a Rules object to use for the given directory, or None
- if the given directory should be skipped. This takes care of
- first building rules for parent directories (up to
- self.base_directory) if needed.
-
- Args:
- dir_path: A real (non-normalized) path to the directory you want
- rules for.
- """
- norm_dir_path = NormalizePath(dir_path)
-
- if not norm_dir_path.startswith(
- NormalizePath(os.path.normpath(self.base_directory))):
- dir_path = os.path.join(self.base_directory, dir_path)
- norm_dir_path = NormalizePath(dir_path)
-
- parent_dir = os.path.dirname(dir_path)
- parent_rules = None
- if not norm_dir_path in self.directory_rules:
- parent_rules = self.GetDirectoryRules(parent_dir)
-
- # We need to check for an entry for our dir_path again, in case we
- # are at a path e.g. A/B/C where A/B/DEPS specifies the C
- # subdirectory to be skipped; in this case, the invocation to
- # GetDirectoryRules(parent_dir) has already filled in an entry for
- # A/B/C.
- if not norm_dir_path in self.directory_rules:
- if not parent_rules:
- # If the parent directory should be skipped, then the current
- # directory should also be skipped.
- self.directory_rules[norm_dir_path] = None
- else:
- self._ApplyDirectoryRulesAndSkipSubdirs(parent_rules, dir_path)
- return self.directory_rules[norm_dir_path]
-
- def _AddGitSourceDirectories(self):
- """Adds any directories containing sources managed by git to
- self.git_source_directories.
- """
- if not os.path.exists(os.path.join(self.base_directory, '.git')):
- return
-
- popen_out = os.popen('cd %s && git ls-files --full-name .' %
- subprocess.list2cmdline([self.base_directory]))
- for line in popen_out.readlines():
- dir_name = os.path.join(self.base_directory, os.path.dirname(line))
- # Add the directory as well as all the parent directories. Use
- # forward slashes and lower case to normalize paths.
- while dir_name != self.base_directory:
- self.git_source_directories.add(NormalizePath(dir_name))
- dir_name = os.path.dirname(dir_name)
- self.git_source_directories.add(NormalizePath(self.base_directory))
diff --git a/chromium/tools/checkdeps/checkdeps.py b/chromium/tools/checkdeps/checkdeps.py
deleted file mode 100755
index c486a6270a4..00000000000
--- a/chromium/tools/checkdeps/checkdeps.py
+++ /dev/null
@@ -1,229 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2012 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.
-
-"""Makes sure that files include headers from allowed directories.
-
-Checks DEPS files in the source tree for rules, and applies those rules to
-"#include" and "import" directives in the .cpp and .java source files.
-Any source file including something not permitted by the DEPS files will fail.
-
-See builddeps.py for a detailed description of the DEPS format.
-"""
-
-import os
-import optparse
-import re
-import sys
-
-import cpp_checker
-import java_checker
-import results
-
-from builddeps import DepsBuilder
-from rules import Rule, Rules
-
-
-def _IsTestFile(filename):
- """Does a rudimentary check to try to skip test files; this could be
- improved but is good enough for now.
- """
- return re.match('(test|mock|dummy)_.*|.*_[a-z]*test\.(cc|mm|java)', filename)
-
-
-class DepsChecker(DepsBuilder):
- """Parses include_rules from DEPS files and erifies files in the
- source tree against them.
- """
-
- def __init__(self,
- base_directory=None,
- verbose=False,
- being_tested=False,
- ignore_temp_rules=False,
- skip_tests=False):
- """Creates a new DepsChecker.
-
- Args:
- base_directory: OS-compatible path to root of checkout, e.g. C:\chr\src.
- verbose: Set to true for debug output.
- being_tested: Set to true to ignore the DEPS file at tools/checkdeps/DEPS.
- ignore_temp_rules: Ignore rules that start with Rule.TEMP_ALLOW ("!").
- """
- DepsBuilder.__init__(
- self, base_directory, verbose, being_tested, ignore_temp_rules)
-
- self._skip_tests = skip_tests
- self.results_formatter = results.NormalResultsFormatter(verbose)
-
- def Report(self):
- """Prints a report of results, and returns an exit code for the process."""
- if self.results_formatter.GetResults():
- self.results_formatter.PrintResults()
- return 1
- print '\nSUCCESS\n'
- return 0
-
- def CheckDirectory(self, start_dir):
- """Checks all relevant source files in the specified directory and
- its subdirectories for compliance with DEPS rules throughout the
- tree (starting at |self.base_directory|). |start_dir| must be a
- subdirectory of |self.base_directory|.
-
- On completion, self.results_formatter has the results of
- processing, and calling Report() will print a report of results.
- """
- java = java_checker.JavaChecker(self.base_directory, self.verbose)
- cpp = cpp_checker.CppChecker(self.verbose)
- checkers = dict(
- (extension, checker)
- for checker in [java, cpp] for extension in checker.EXTENSIONS)
- self._CheckDirectoryImpl(checkers, start_dir)
-
- def _CheckDirectoryImpl(self, checkers, dir_name):
- rules = self.GetDirectoryRules(dir_name)
- if rules == None:
- return
-
- # Collect a list of all files and directories to check.
- files_to_check = []
- dirs_to_check = []
- contents = os.listdir(dir_name)
- for cur in contents:
- full_name = os.path.join(dir_name, cur)
- if os.path.isdir(full_name):
- dirs_to_check.append(full_name)
- elif os.path.splitext(full_name)[1] in checkers:
- if not self._skip_tests or not _IsTestFile(cur):
- files_to_check.append(full_name)
-
- # First check all files in this directory.
- for cur in files_to_check:
- checker = checkers[os.path.splitext(cur)[1]]
- file_status = checker.CheckFile(rules, cur)
- if file_status.HasViolations():
- self.results_formatter.AddError(file_status)
-
- # Next recurse into the subdirectories.
- for cur in dirs_to_check:
- self._CheckDirectoryImpl(checkers, cur)
-
- def CheckAddedCppIncludes(self, added_includes):
- """This is used from PRESUBMIT.py to check new #include statements added in
- the change being presubmit checked.
-
- Args:
- added_includes: ((file_path, (include_line, include_line, ...), ...)
-
- Return:
- A list of tuples, (bad_file_path, rule_type, rule_description)
- where rule_type is one of Rule.DISALLOW or Rule.TEMP_ALLOW and
- rule_description is human-readable. Empty if no problems.
- """
- cpp = cpp_checker.CppChecker(self.verbose)
- problems = []
- for file_path, include_lines in added_includes:
- if not cpp.IsCppFile(file_path):
- pass
- rules_for_file = self.GetDirectoryRules(os.path.dirname(file_path))
- if rules_for_file:
- for line in include_lines:
- is_include, violation = cpp.CheckLine(
- rules_for_file, line, file_path, True)
- if violation:
- rule_type = violation.violated_rule.allow
- if rule_type != Rule.ALLOW:
- violation_text = results.NormalResultsFormatter.FormatViolation(
- violation, self.verbose)
- problems.append((file_path, rule_type, violation_text))
- return problems
-
-
-def PrintUsage():
- print """Usage: python checkdeps.py [--root <root>] [tocheck]
-
- --root ROOT Specifies the repository root. This defaults to "../../.."
- relative to the script file. This will be correct given the
- normal location of the script in "<root>/tools/checkdeps".
-
- --(others) There are a few lesser-used options; run with --help to show them.
-
- tocheck Specifies the directory, relative to root, to check. This defaults
- to "." so it checks everything.
-
-Examples:
- python checkdeps.py
- python checkdeps.py --root c:\\source chrome"""
-
-
-def main():
- option_parser = optparse.OptionParser()
- option_parser.add_option(
- '', '--root',
- default='', dest='base_directory',
- help='Specifies the repository root. This defaults '
- 'to "../../.." relative to the script file, which '
- 'will normally be the repository root.')
- option_parser.add_option(
- '', '--ignore-temp-rules',
- action='store_true', dest='ignore_temp_rules', default=False,
- help='Ignore !-prefixed (temporary) rules.')
- option_parser.add_option(
- '', '--generate-temp-rules',
- action='store_true', dest='generate_temp_rules', default=False,
- help='Print rules to temporarily allow files that fail '
- 'dependency checking.')
- option_parser.add_option(
- '', '--count-violations',
- action='store_true', dest='count_violations', default=False,
- help='Count #includes in violation of intended rules.')
- option_parser.add_option(
- '', '--skip-tests',
- action='store_true', dest='skip_tests', default=False,
- help='Skip checking test files (best effort).')
- option_parser.add_option(
- '-v', '--verbose',
- action='store_true', default=False,
- help='Print debug logging')
- option_parser.add_option(
- '', '--json',
- help='Path to JSON output file')
- options, args = option_parser.parse_args()
-
- deps_checker = DepsChecker(options.base_directory,
- verbose=options.verbose,
- ignore_temp_rules=options.ignore_temp_rules,
- skip_tests=options.skip_tests)
-
- # Figure out which directory we have to check.
- start_dir = deps_checker.base_directory
- if len(args) == 1:
- # Directory specified. Start here. It's supposed to be relative to the
- # base directory.
- start_dir = os.path.abspath(
- os.path.join(deps_checker.base_directory, args[0]))
- elif len(args) >= 2 or (options.generate_temp_rules and
- options.count_violations):
- # More than one argument, or incompatible flags, we don't handle this.
- PrintUsage()
- return 1
-
- print 'Using base directory:', deps_checker.base_directory
- print 'Checking:', start_dir
-
- if options.generate_temp_rules:
- deps_checker.results_formatter = results.TemporaryRulesFormatter()
- elif options.count_violations:
- deps_checker.results_formatter = results.CountViolationsFormatter()
-
- if options.json:
- deps_checker.results_formatter = results.JSONResultsFormatter(
- options.json, deps_checker.results_formatter)
-
- deps_checker.CheckDirectory(start_dir)
- return deps_checker.Report()
-
-
-if '__main__' == __name__:
- sys.exit(main())
diff --git a/chromium/tools/checkdeps/checkdeps_test.py b/chromium/tools/checkdeps/checkdeps_test.py
deleted file mode 100755
index e8835a5ca8f..00000000000
--- a/chromium/tools/checkdeps/checkdeps_test.py
+++ /dev/null
@@ -1,177 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-"""Tests for checkdeps.
-"""
-
-import os
-import unittest
-
-
-import checkdeps
-import results
-
-
-class CheckDepsTest(unittest.TestCase):
-
- def setUp(self):
- self.deps_checker = checkdeps.DepsChecker(being_tested=True)
-
- def ImplTestRegularCheckDepsRun(self, ignore_temp_rules, skip_tests):
- self.deps_checker._ignore_temp_rules = ignore_temp_rules
- self.deps_checker._skip_tests = skip_tests
- self.deps_checker.CheckDirectory(
- os.path.join(self.deps_checker.base_directory,
- 'tools/checkdeps/testdata'))
-
- problems = self.deps_checker.results_formatter.GetResults()
- if skip_tests:
- self.failUnlessEqual(3, len(problems))
- else:
- self.failUnlessEqual(4, len(problems))
-
- def VerifySubstringsInProblems(key_path, substrings_in_sequence):
- """Finds the problem in |problems| that contains |key_path|,
- then verifies that each of |substrings_in_sequence| occurs in
- that problem, in the order they appear in
- |substrings_in_sequence|.
- """
- found = False
- key_path = os.path.normpath(key_path)
- for problem in problems:
- index = problem.find(key_path)
- if index != -1:
- for substring in substrings_in_sequence:
- index = problem.find(substring, index + 1)
- self.failUnless(index != -1, '%s in %s' % (substring, problem))
- found = True
- break
- if not found:
- self.fail('Found no problem for file %s' % key_path)
-
- if ignore_temp_rules:
- VerifySubstringsInProblems('testdata/allowed/test.h',
- ['-tools/checkdeps/testdata/disallowed',
- 'temporarily_allowed.h',
- '-third_party/explicitly_disallowed',
- 'Because of no rule applying'])
- else:
- VerifySubstringsInProblems('testdata/allowed/test.h',
- ['-tools/checkdeps/testdata/disallowed',
- '-third_party/explicitly_disallowed',
- 'Because of no rule applying'])
-
- VerifySubstringsInProblems('testdata/disallowed/test.h',
- ['-third_party/explicitly_disallowed',
- 'Because of no rule applying',
- 'Because of no rule applying'])
- VerifySubstringsInProblems('disallowed/allowed/test.h',
- ['-third_party/explicitly_disallowed',
- 'Because of no rule applying',
- 'Because of no rule applying'])
-
- if not skip_tests:
- VerifySubstringsInProblems('allowed/not_a_test.cc',
- ['-tools/checkdeps/testdata/disallowed'])
-
- def testRegularCheckDepsRun(self):
- self.ImplTestRegularCheckDepsRun(False, False)
-
- def testRegularCheckDepsRunIgnoringTempRules(self):
- self.ImplTestRegularCheckDepsRun(True, False)
-
- def testRegularCheckDepsRunSkipTests(self):
- self.ImplTestRegularCheckDepsRun(False, True)
-
- def testRegularCheckDepsRunIgnoringTempRulesSkipTests(self):
- self.ImplTestRegularCheckDepsRun(True, True)
-
- def CountViolations(self, ignore_temp_rules):
- self.deps_checker._ignore_temp_rules = ignore_temp_rules
- self.deps_checker.results_formatter = results.CountViolationsFormatter()
- self.deps_checker.CheckDirectory(
- os.path.join(self.deps_checker.base_directory,
- 'tools/checkdeps/testdata'))
- return self.deps_checker.results_formatter.GetResults()
-
- def testCountViolations(self):
- self.failUnlessEqual('10', self.CountViolations(False))
-
- def testCountViolationsIgnoringTempRules(self):
- self.failUnlessEqual('11', self.CountViolations(True))
-
- def testTempRulesGenerator(self):
- self.deps_checker.results_formatter = results.TemporaryRulesFormatter()
- self.deps_checker.CheckDirectory(
- os.path.join(self.deps_checker.base_directory,
- 'tools/checkdeps/testdata/allowed'))
- temp_rules = self.deps_checker.results_formatter.GetResults()
- expected = [u' "!third_party/explicitly_disallowed/bad.h",',
- u' "!third_party/no_rule/bad.h",',
- u' "!tools/checkdeps/testdata/disallowed/bad.h",',
- u' "!tools/checkdeps/testdata/disallowed/teststuff/bad.h",']
- self.failUnlessEqual(expected, temp_rules)
-
- def testCheckAddedIncludesAllGood(self):
- problems = self.deps_checker.CheckAddedCppIncludes(
- [['tools/checkdeps/testdata/allowed/test.cc',
- ['#include "tools/checkdeps/testdata/allowed/good.h"',
- '#include "tools/checkdeps/testdata/disallowed/allowed/good.h"']
- ]])
- self.failIf(problems)
-
- def testCheckAddedIncludesManyGarbageLines(self):
- garbage_lines = ["My name is Sam%d\n" % num for num in range(50)]
- problems = self.deps_checker.CheckAddedCppIncludes(
- [['tools/checkdeps/testdata/allowed/test.cc', garbage_lines]])
- self.failIf(problems)
-
- def testCheckAddedIncludesNoRule(self):
- problems = self.deps_checker.CheckAddedCppIncludes(
- [['tools/checkdeps/testdata/allowed/test.cc',
- ['#include "no_rule_for_this/nogood.h"']
- ]])
- self.failUnless(problems)
-
- def testCheckAddedIncludesSkippedDirectory(self):
- problems = self.deps_checker.CheckAddedCppIncludes(
- [['tools/checkdeps/testdata/disallowed/allowed/skipped/test.cc',
- ['#include "whatever/whocares.h"']
- ]])
- self.failIf(problems)
-
- def testCheckAddedIncludesTempAllowed(self):
- problems = self.deps_checker.CheckAddedCppIncludes(
- [['tools/checkdeps/testdata/allowed/test.cc',
- ['#include "tools/checkdeps/testdata/disallowed/temporarily_allowed.h"']
- ]])
- self.failUnless(problems)
-
- def testCopyIsDeep(self):
- # Regression test for a bug where we were making shallow copies of
- # Rules objects and therefore all Rules objects shared the same
- # dictionary for specific rules.
- #
- # The first pair should bring in a rule from testdata/allowed/DEPS
- # into that global dictionary that allows the
- # temp_allowed_for_tests.h file to be included in files ending
- # with _unittest.cc, and the second pair should completely fail
- # once the bug is fixed, but succeed (with a temporary allowance)
- # if the bug is in place.
- problems = self.deps_checker.CheckAddedCppIncludes(
- [['tools/checkdeps/testdata/allowed/test.cc',
- ['#include "tools/checkdeps/testdata/disallowed/temporarily_allowed.h"']
- ],
- ['tools/checkdeps/testdata/disallowed/foo_unittest.cc',
- ['#include "tools/checkdeps/testdata/bongo/temp_allowed_for_tests.h"']
- ]])
- # With the bug in place, there would be two problems reported, and
- # the second would be for foo_unittest.cc.
- self.failUnless(len(problems) == 1)
- self.failUnless(problems[0][0].endswith('/test.cc'))
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/chromium/tools/checkdeps/cpp_checker.py b/chromium/tools/checkdeps/cpp_checker.py
deleted file mode 100644
index 9bcd14d75cc..00000000000
--- a/chromium/tools/checkdeps/cpp_checker.py
+++ /dev/null
@@ -1,113 +0,0 @@
-# Copyright (c) 2012 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.
-
-"""Checks C++ and Objective-C files for illegal includes."""
-
-import codecs
-import os
-import re
-
-import results
-from rules import Rule, MessageRule
-
-
-class CppChecker(object):
-
- EXTENSIONS = [
- '.h',
- '.cc',
- '.cpp',
- '.m',
- '.mm',
- ]
-
- # The maximum number of non-include lines we can see before giving up.
- _MAX_UNINTERESTING_LINES = 50
-
- # The maximum line length, this is to be efficient in the case of very long
- # lines (which can't be #includes).
- _MAX_LINE_LENGTH = 128
-
- # This regular expression will be used to extract filenames from include
- # statements.
- _EXTRACT_INCLUDE_PATH = re.compile(
- '[ \t]*#[ \t]*(?:include|import)[ \t]+"(.*)"')
-
- def __init__(self, verbose):
- self._verbose = verbose
-
- def CheckLine(self, rules, line, dependee_path, fail_on_temp_allow=False):
- """Checks the given line with the given rule set.
-
- Returns a tuple (is_include, dependency_violation) where
- is_include is True only if the line is an #include or #import
- statement, and dependency_violation is an instance of
- results.DependencyViolation if the line violates a rule, or None
- if it does not.
- """
- found_item = self._EXTRACT_INCLUDE_PATH.match(line)
- if not found_item:
- return False, None # Not a match
-
- include_path = found_item.group(1)
-
- if '\\' in include_path:
- return True, results.DependencyViolation(
- include_path,
- MessageRule('Include paths may not include backslashes.'),
- rules)
-
- if '/' not in include_path:
- # Don't fail when no directory is specified. We may want to be more
- # strict about this in the future.
- if self._verbose:
- print ' WARNING: directory specified with no path: ' + include_path
- return True, None
-
- rule = rules.RuleApplyingTo(include_path, dependee_path)
- if (rule.allow == Rule.DISALLOW or
- (fail_on_temp_allow and rule.allow == Rule.TEMP_ALLOW)):
- return True, results.DependencyViolation(include_path, rule, rules)
- return True, None
-
- def CheckFile(self, rules, filepath):
- if self._verbose:
- print 'Checking: ' + filepath
-
- dependee_status = results.DependeeStatus(filepath)
- ret_val = '' # We'll collect the error messages in here
- last_include = 0
- with codecs.open(filepath, encoding='utf-8') as f:
- in_if0 = 0
- for line_num, line in enumerate(f):
- if line_num - last_include > self._MAX_UNINTERESTING_LINES:
- break
-
- line = line.strip()
-
- # Check to see if we're at / inside a #if 0 block
- if line.startswith('#if 0'):
- in_if0 += 1
- continue
- if in_if0 > 0:
- if line.startswith('#if'):
- in_if0 += 1
- elif line.startswith('#endif'):
- in_if0 -= 1
- continue
-
- is_include, violation = self.CheckLine(rules, line, filepath)
- if is_include:
- last_include = line_num
- if violation:
- dependee_status.AddViolation(violation)
-
- return dependee_status
-
- @staticmethod
- def IsCppFile(file_path):
- """Returns True iff the given path ends in one of the extensions
- handled by this checker.
- """
- return os.path.splitext(file_path)[1] in CppChecker.EXTENSIONS
diff --git a/chromium/tools/checkdeps/graphdeps.py b/chromium/tools/checkdeps/graphdeps.py
deleted file mode 100755
index c04af2399b8..00000000000
--- a/chromium/tools/checkdeps/graphdeps.py
+++ /dev/null
@@ -1,407 +0,0 @@
-#!/usr/bin/env python
-# 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.
-
-"""Dumps a graph of allowed and disallowed inter-module dependencies described
-by the DEPS files in the source tree. Supports DOT and PNG as the output format.
-
-Enables filtering and differential highlighting of parts of the graph based on
-the specified criteria. This allows for a much easier visual analysis of the
-dependencies, including answering questions such as "if a new source must
-depend on modules A, B, and C, what valid options among the existing modules
-are there to put it in."
-
-See builddeps.py for a detailed description of the DEPS format.
-"""
-
-import os
-import optparse
-import pipes
-import re
-import sys
-
-from builddeps import DepsBuilder
-from rules import Rule
-
-
-class DepsGrapher(DepsBuilder):
- """Parses include_rules from DEPS files and outputs a DOT graph of the
- allowed and disallowed dependencies between directories and specific file
- regexps. Can generate only a subgraph of the whole dependency graph
- corresponding to the provided inclusion and exclusion regexp filters.
- Also can highlight fanins and/or fanouts of certain nodes matching the
- provided regexp patterns.
- """
-
- def __init__(self,
- base_directory,
- verbose,
- being_tested,
- ignore_temp_rules,
- ignore_specific_rules,
- hide_disallowed_deps,
- out_file,
- out_format,
- layout_engine,
- unflatten_graph,
- incl,
- excl,
- hilite_fanins,
- hilite_fanouts):
- """Creates a new DepsGrapher.
-
- Args:
- base_directory: OS-compatible path to root of checkout, e.g. C:\chr\src.
- verbose: Set to true for debug output.
- being_tested: Set to true to ignore the DEPS file at tools/graphdeps/DEPS.
- ignore_temp_rules: Ignore rules that start with Rule.TEMP_ALLOW ("!").
- ignore_specific_rules: Ignore rules from specific_include_rules sections.
- hide_disallowed_deps: Hide disallowed dependencies from the output graph.
- out_file: Output file name.
- out_format: Output format (anything GraphViz dot's -T option supports).
- layout_engine: Layout engine for formats other than 'dot'
- (anything that GraphViz dot's -K option supports).
- unflatten_graph: Try to reformat the output graph so it is narrower and
- taller. Helps fight overly flat and wide graphs, but
- sometimes produces a worse result.
- incl: Include only nodes matching this regexp; such nodes' fanin/fanout
- is also included.
- excl: Exclude nodes matching this regexp; such nodes' fanin/fanout is
- processed independently.
- hilite_fanins: Highlight fanins of nodes matching this regexp with a
- different edge and node color.
- hilite_fanouts: Highlight fanouts of nodes matching this regexp with a
- different edge and node color.
- """
- DepsBuilder.__init__(
- self,
- base_directory,
- verbose,
- being_tested,
- ignore_temp_rules,
- ignore_specific_rules)
-
- self.ignore_temp_rules = ignore_temp_rules
- self.ignore_specific_rules = ignore_specific_rules
- self.hide_disallowed_deps = hide_disallowed_deps
- self.out_file = out_file
- self.out_format = out_format
- self.layout_engine = layout_engine
- self.unflatten_graph = unflatten_graph
- self.incl = incl
- self.excl = excl
- self.hilite_fanins = hilite_fanins
- self.hilite_fanouts = hilite_fanouts
-
- self.deps = set()
-
- def DumpDependencies(self):
- """ Builds a dependency rule table and dumps the corresponding dependency
- graph to all requested formats."""
- self._BuildDepsGraph(self.base_directory)
- self._DumpDependencies()
-
- def _BuildDepsGraph(self, full_path):
- """Recursively traverses the source tree starting at the specified directory
- and builds a dependency graph representation in self.deps."""
- rel_path = os.path.relpath(full_path, self.base_directory)
- #if re.search(self.incl, rel_path) and not re.search(self.excl, rel_path):
- rules = self.GetDirectoryRules(full_path)
- if rules:
- deps = rules.AsDependencyTuples(
- include_general_rules=True,
- include_specific_rules=not self.ignore_specific_rules)
- self.deps.update(deps)
-
- for item in os.listdir(full_path):
- next_full_path = os.path.join(full_path, item)
- if os.path.isdir(next_full_path):
- self._BuildDepsGraph(next_full_path)
-
- def _DumpDependencies(self):
- """Dumps the built dependency graph to the specified file with specified
- format."""
- if self.out_format == 'dot' and not self.layout_engine:
- if self.unflatten_graph:
- pipe = pipes.Template()
- pipe.append('unflatten -l 2 -c 3', '--')
- out = pipe.open(self.out_file, 'w')
- else:
- out = open(self.out_file, 'w')
- else:
- pipe = pipes.Template()
- if self.unflatten_graph:
- pipe.append('unflatten -l 2 -c 3', '--')
- dot_cmd = 'dot -T' + self.out_format
- if self.layout_engine:
- dot_cmd += ' -K' + self.layout_engine
- pipe.append(dot_cmd, '--')
- out = pipe.open(self.out_file, 'w')
-
- self._DumpDependenciesImpl(self.deps, out)
- out.close()
-
- def _DumpDependenciesImpl(self, deps, out):
- """Computes nodes' and edges' properties for the dependency graph |deps| and
- carries out the actual dumping to a file/pipe |out|."""
- deps_graph = dict()
- deps_srcs = set()
-
- # Pre-initialize the graph with src->(dst, allow) pairs.
- for (allow, src, dst) in deps:
- if allow == Rule.TEMP_ALLOW and self.ignore_temp_rules:
- continue
-
- deps_srcs.add(src)
- if src not in deps_graph:
- deps_graph[src] = []
- deps_graph[src].append((dst, allow))
-
- # Add all hierarchical parents too, in case some of them don't have their
- # own DEPS, and therefore are missing from the list of rules. Those will
- # be recursively populated with their parents' rules in the next block.
- parent_src = os.path.dirname(src)
- while parent_src:
- if parent_src not in deps_graph:
- deps_graph[parent_src] = []
- parent_src = os.path.dirname(parent_src)
-
- # For every node, propagate its rules down to all its children.
- deps_srcs = list(deps_srcs)
- deps_srcs.sort()
- for src in deps_srcs:
- parent_src = os.path.dirname(src)
- if parent_src:
- # We presort the list, so parents are guaranteed to precede children.
- assert parent_src in deps_graph,\
- "src: %s, parent_src: %s" % (src, parent_src)
- for (dst, allow) in deps_graph[parent_src]:
- # Check that this node does not explicitly override a rule from the
- # parent that we're about to add.
- if ((dst, Rule.ALLOW) not in deps_graph[src]) and \
- ((dst, Rule.TEMP_ALLOW) not in deps_graph[src]) and \
- ((dst, Rule.DISALLOW) not in deps_graph[src]):
- deps_graph[src].append((dst, allow))
-
- node_props = {}
- edges = []
-
- # 1) Populate a list of edge specifications in DOT format;
- # 2) Populate a list of computed raw node attributes to be output as node
- # specifications in DOT format later on.
- # Edges and nodes are emphasized with color and line/border weight depending
- # on how many of incl/excl/hilite_fanins/hilite_fanouts filters they hit,
- # and in what way.
- for src in deps_graph.keys():
- for (dst, allow) in deps_graph[src]:
- if allow == Rule.DISALLOW and self.hide_disallowed_deps:
- continue
-
- if allow == Rule.ALLOW and src == dst:
- continue
-
- edge_spec = "%s->%s" % (src, dst)
- if not re.search(self.incl, edge_spec) or \
- re.search(self.excl, edge_spec):
- continue
-
- if src not in node_props:
- node_props[src] = {'hilite': None, 'degree': 0}
- if dst not in node_props:
- node_props[dst] = {'hilite': None, 'degree': 0}
-
- edge_weight = 1
-
- if self.hilite_fanouts and re.search(self.hilite_fanouts, src):
- node_props[src]['hilite'] = 'lightgreen'
- node_props[dst]['hilite'] = 'lightblue'
- node_props[dst]['degree'] += 1
- edge_weight += 1
-
- if self.hilite_fanins and re.search(self.hilite_fanins, dst):
- node_props[src]['hilite'] = 'lightblue'
- node_props[dst]['hilite'] = 'lightgreen'
- node_props[src]['degree'] += 1
- edge_weight += 1
-
- if allow == Rule.ALLOW:
- edge_color = (edge_weight > 1) and 'blue' or 'green'
- edge_style = 'solid'
- elif allow == Rule.TEMP_ALLOW:
- edge_color = (edge_weight > 1) and 'blue' or 'green'
- edge_style = 'dashed'
- else:
- edge_color = 'red'
- edge_style = 'dashed'
- edges.append(' "%s" -> "%s" [style=%s,color=%s,penwidth=%d];' % \
- (src, dst, edge_style, edge_color, edge_weight))
-
- # Reformat the computed raw node attributes into a final DOT representation.
- nodes = []
- for (node, attrs) in node_props.iteritems():
- attr_strs = []
- if attrs['hilite']:
- attr_strs.append('style=filled,fillcolor=%s' % attrs['hilite'])
- attr_strs.append('penwidth=%d' % (attrs['degree'] or 1))
- nodes.append(' "%s" [%s];' % (node, ','.join(attr_strs)))
-
- # Output nodes and edges to |out| (can be a file or a pipe).
- edges.sort()
- nodes.sort()
- out.write('digraph DEPS {\n'
- ' fontsize=8;\n')
- out.write('\n'.join(nodes))
- out.write('\n\n')
- out.write('\n'.join(edges))
- out.write('\n}\n')
- out.close()
-
-
-def PrintUsage():
- print """Usage: python graphdeps.py [--root <root>]
-
- --root ROOT Specifies the repository root. This defaults to "../../.."
- relative to the script file. This will be correct given the
- normal location of the script in "<root>/tools/graphdeps".
-
- --(others) There are a few lesser-used options; run with --help to show them.
-
-Examples:
- Dump the whole dependency graph:
- graphdeps.py
- Find a suitable place for a new source that must depend on /apps and
- /content/browser/renderer_host. Limit potential candidates to /apps,
- /chrome/browser and content/browser, and descendants of those three.
- Generate both DOT and PNG output. The output will highlight the fanins
- of /apps and /content/browser/renderer_host. Overlapping nodes in both fanins
- will be emphasized by a thicker border. Those nodes are the ones that are
- allowed to depend on both targets, therefore they are all legal candidates
- to place the new source in:
- graphdeps.py \
- --root=./src \
- --out=./DEPS.svg \
- --format=svg \
- --incl='^(apps|chrome/browser|content/browser)->.*' \
- --excl='.*->third_party' \
- --fanin='^(apps|content/browser/renderer_host)$' \
- --ignore-specific-rules \
- --ignore-temp-rules"""
-
-
-def main():
- option_parser = optparse.OptionParser()
- option_parser.add_option(
- "", "--root",
- default="", dest="base_directory",
- help="Specifies the repository root. This defaults "
- "to '../../..' relative to the script file, which "
- "will normally be the repository root.")
- option_parser.add_option(
- "-f", "--format",
- dest="out_format", default="dot",
- help="Output file format. "
- "Can be anything that GraphViz dot's -T option supports. "
- "The most useful ones are: dot (text), svg (image), pdf (image)."
- "NOTES: dotty has a known problem with fonts when displaying DOT "
- "files on Ubuntu - if labels are unreadable, try other formats.")
- option_parser.add_option(
- "-o", "--out",
- dest="out_file", default="DEPS",
- help="Output file name. If the name does not end in an extension "
- "matching the output format, that extension is automatically "
- "appended.")
- option_parser.add_option(
- "-l", "--layout-engine",
- dest="layout_engine", default="",
- help="Layout rendering engine. "
- "Can be anything that GraphViz dot's -K option supports. "
- "The most useful are in decreasing order: dot, fdp, circo, osage. "
- "NOTE: '-f dot' and '-f dot -l dot' are different: the former "
- "will dump a raw DOT graph and stop; the latter will further "
- "filter it through 'dot -Tdot -Kdot' layout engine.")
- option_parser.add_option(
- "-i", "--incl",
- default="^.*$", dest="incl",
- help="Include only edges of the graph that match the specified regexp. "
- "The regexp is applied to edges of the graph formatted as "
- "'source_node->target_node', where the '->' part is vebatim. "
- "Therefore, a reliable regexp should look like "
- "'^(chrome|chrome/browser|chrome/common)->content/public/browser$' "
- "or similar, with both source and target node regexps present, "
- "explicit ^ and $, and otherwise being as specific as possible.")
- option_parser.add_option(
- "-e", "--excl",
- default="^$", dest="excl",
- help="Exclude dependent nodes that match the specified regexp. "
- "See --incl for details on the format.")
- option_parser.add_option(
- "", "--fanin",
- default="", dest="hilite_fanins",
- help="Highlight fanins of nodes matching the specified regexp.")
- option_parser.add_option(
- "", "--fanout",
- default="", dest="hilite_fanouts",
- help="Highlight fanouts of nodes matching the specified regexp.")
- option_parser.add_option(
- "", "--ignore-temp-rules",
- action="store_true", dest="ignore_temp_rules", default=False,
- help="Ignore !-prefixed (temporary) rules in DEPS files.")
- option_parser.add_option(
- "", "--ignore-specific-rules",
- action="store_true", dest="ignore_specific_rules", default=False,
- help="Ignore specific_include_rules section of DEPS files.")
- option_parser.add_option(
- "", "--hide-disallowed-deps",
- action="store_true", dest="hide_disallowed_deps", default=False,
- help="Hide disallowed dependencies in the output graph.")
- option_parser.add_option(
- "", "--unflatten",
- action="store_true", dest="unflatten_graph", default=False,
- help="Try to reformat the output graph so it is narrower and taller. "
- "Helps fight overly flat and wide graphs, but sometimes produces "
- "inferior results.")
- option_parser.add_option(
- "-v", "--verbose",
- action="store_true", default=False,
- help="Print debug logging")
- options, args = option_parser.parse_args()
-
- if not options.out_file.endswith(options.out_format):
- options.out_file += '.' + options.out_format
-
- deps_grapher = DepsGrapher(
- base_directory=options.base_directory,
- verbose=options.verbose,
- being_tested=False,
-
- ignore_temp_rules=options.ignore_temp_rules,
- ignore_specific_rules=options.ignore_specific_rules,
- hide_disallowed_deps=options.hide_disallowed_deps,
-
- out_file=options.out_file,
- out_format=options.out_format,
- layout_engine=options.layout_engine,
- unflatten_graph=options.unflatten_graph,
-
- incl=options.incl,
- excl=options.excl,
- hilite_fanins=options.hilite_fanins,
- hilite_fanouts=options.hilite_fanouts)
-
- if len(args) > 0:
- PrintUsage()
- return 1
-
- print 'Using base directory: ', deps_grapher.base_directory
- print 'include nodes : ', options.incl
- print 'exclude nodes : ', options.excl
- print 'highlight fanins of : ', options.hilite_fanins
- print 'highlight fanouts of: ', options.hilite_fanouts
-
- deps_grapher.DumpDependencies()
- return 0
-
-
-if '__main__' == __name__:
- sys.exit(main())
diff --git a/chromium/tools/checkdeps/java_checker.py b/chromium/tools/checkdeps/java_checker.py
deleted file mode 100644
index 670eac21645..00000000000
--- a/chromium/tools/checkdeps/java_checker.py
+++ /dev/null
@@ -1,107 +0,0 @@
-# Copyright (c) 2012 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.
-
-"""Checks Java files for illegal imports."""
-
-import codecs
-import os
-import re
-
-import results
-from rules import Rule
-
-
-class JavaChecker(object):
- """Import checker for Java files.
-
- The CheckFile method uses real filesystem paths, but Java imports work in
- terms of package names. To deal with this, we have an extra "prescan" pass
- that reads all the .java files and builds a mapping of class name -> filepath.
- In CheckFile, we convert each import statement into a real filepath, and check
- that against the rules in the DEPS files.
-
- Note that in Java you can always use classes in the same directory without an
- explicit import statement, so these imports can't be blocked with DEPS files.
- But that shouldn't be a problem, because same-package imports are pretty much
- always correct by definition. (If we find a case where this is *not* correct,
- it probably means the package is too big and needs to be split up.)
-
- Properties:
- _classmap: dict of fully-qualified Java class name -> filepath
- """
-
- EXTENSIONS = ['.java']
-
- def __init__(self, base_directory, verbose):
- self._base_directory = base_directory
- self._verbose = verbose
- self._classmap = {}
- self._PrescanFiles()
-
- def _PrescanFiles(self):
- for root, dirs, files in os.walk(self._base_directory):
- # Skip unwanted subdirectories. TODO(husky): it would be better to do
- # this via the skip_child_includes flag in DEPS files. Maybe hoist this
- # prescan logic into checkdeps.py itself?
- for d in dirs:
- # Skip hidden directories.
- if d.startswith('.'):
- dirs.remove(d)
- # Skip the "out" directory, as dealing with generated files is awkward.
- # We don't want paths like "out/Release/lib.java" in our DEPS files.
- # TODO(husky): We need some way of determining the "real" path to
- # a generated file -- i.e., where it would be in source control if
- # it weren't generated.
- if d == 'out':
- dirs.remove(d)
- # Skip third-party directories.
- if d == 'third_party':
- dirs.remove(d)
- for f in files:
- if f.endswith('.java'):
- self._PrescanFile(os.path.join(root, f))
-
- def _PrescanFile(self, filepath):
- if self._verbose:
- print 'Prescanning: ' + filepath
- with codecs.open(filepath, encoding='utf-8') as f:
- short_class_name, _ = os.path.splitext(os.path.basename(filepath))
- for line in f:
- for package in re.findall('^package ([\w\.]+);', line):
- full_class_name = package + '.' + short_class_name
- if full_class_name in self._classmap:
- print 'WARNING: multiple definitions of %s:' % full_class_name
- print ' ' + filepath
- print ' ' + self._classmap[full_class_name]
- print
- else:
- self._classmap[full_class_name] = filepath
- return
- print 'WARNING: no package definition found in %s' % filepath
-
- def CheckFile(self, rules, filepath):
- if self._verbose:
- print 'Checking: ' + filepath
-
- dependee_status = results.DependeeStatus(filepath)
- with codecs.open(filepath, encoding='utf-8') as f:
- for line in f:
- for clazz in re.findall('^import\s+(?:static\s+)?([\w\.]+)\s*;', line):
- if clazz not in self._classmap:
- # Importing a class from outside the Chromium tree. That's fine --
- # it's probably a Java or Android system class.
- continue
- include_path = os.path.relpath(
- self._classmap[clazz], self._base_directory)
- # Convert Windows paths to Unix style, as used in DEPS files.
- include_path = include_path.replace(os.path.sep, '/')
- rule = rules.RuleApplyingTo(include_path, filepath)
- if rule.allow == Rule.DISALLOW:
- dependee_status.AddViolation(
- results.DependencyViolation(include_path, rule, rules))
- if '{' in line:
- # This is code, so we're finished reading imports for this file.
- break
-
- return dependee_status
diff --git a/chromium/tools/checkdeps/results.py b/chromium/tools/checkdeps/results.py
deleted file mode 100644
index b52880ccca3..00000000000
--- a/chromium/tools/checkdeps/results.py
+++ /dev/null
@@ -1,178 +0,0 @@
-# Copyright (c) 2012 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.
-
-
-"""Results object and results formatters for checkdeps tool."""
-
-
-import json
-
-
-class DependencyViolation(object):
- """A single dependency violation."""
-
- def __init__(self, include_path, violated_rule, rules):
- # The include or import path that is in violation of a rule.
- self.include_path = include_path
-
- # The violated rule.
- self.violated_rule = violated_rule
-
- # The set of rules containing self.violated_rule.
- self.rules = rules
-
-
-class DependeeStatus(object):
- """Results object for a dependee file."""
-
- def __init__(self, dependee_path):
- # Path of the file whose nonconforming dependencies are listed in
- # self.violations.
- self.dependee_path = dependee_path
-
- # List of DependencyViolation objects that apply to the dependee
- # file. May be empty.
- self.violations = []
-
- def AddViolation(self, violation):
- """Adds a violation."""
- self.violations.append(violation)
-
- def HasViolations(self):
- """Returns True if this dependee is violating one or more rules."""
- return not not self.violations
-
-
-class ResultsFormatter(object):
- """Base class for results formatters."""
-
- def AddError(self, dependee_status):
- """Add a formatted result to |self.results| for |dependee_status|,
- which is guaranteed to return True for
- |dependee_status.HasViolations|.
- """
- raise NotImplementedError()
-
- def GetResults(self):
- """Returns the results. May be overridden e.g. to process the
- results that have been accumulated.
- """
- raise NotImplementedError()
-
- def PrintResults(self):
- """Prints the results to stdout."""
- raise NotImplementedError()
-
-
-class NormalResultsFormatter(ResultsFormatter):
- """A results formatting object that produces the classical,
- detailed, human-readable output of the checkdeps tool.
- """
-
- def __init__(self, verbose):
- self.results = []
- self.verbose = verbose
-
- def AddError(self, dependee_status):
- lines = []
- lines.append('\nERROR in %s' % dependee_status.dependee_path)
- for violation in dependee_status.violations:
- lines.append(self.FormatViolation(violation, self.verbose))
- self.results.append('\n'.join(lines))
-
- @staticmethod
- def FormatViolation(violation, verbose=False):
- lines = []
- if verbose:
- lines.append(' For %s' % violation.rules)
- lines.append(
- ' Illegal include: "%s"\n Because of %s' %
- (violation.include_path, str(violation.violated_rule)))
- return '\n'.join(lines)
-
- def GetResults(self):
- return self.results
-
- def PrintResults(self):
- for result in self.results:
- print result
- if self.results:
- print '\nFAILED\n'
-
-
-class JSONResultsFormatter(ResultsFormatter):
- """A results formatter that outputs results to a file as JSON."""
-
- def __init__(self, output_path, wrapped_formatter=None):
- self.output_path = output_path
- self.wrapped_formatter = wrapped_formatter
-
- self.results = []
-
- def AddError(self, dependee_status):
- self.results.append({
- 'dependee_path': dependee_status.dependee_path,
- 'violations': [{
- 'include_path': violation.include_path,
- 'violated_rule': violation.violated_rule.AsDependencyTuple(),
- } for violation in dependee_status.violations]
- })
-
- if self.wrapped_formatter:
- self.wrapped_formatter.AddError(dependee_status)
-
- def GetResults(self):
- with open(self.output_path, 'w') as f:
- f.write(json.dumps(self.results))
-
- return self.results
-
- def PrintResults(self):
- if self.wrapped_formatter:
- self.wrapped_formatter.PrintResults()
- return
-
- print self.results
-
-
-class TemporaryRulesFormatter(ResultsFormatter):
- """A results formatter that produces a single line per nonconforming
- include. The combined output is suitable for directly pasting into a
- DEPS file as a list of temporary-allow rules.
- """
-
- def __init__(self):
- self.violations = set()
-
- def AddError(self, dependee_status):
- for violation in dependee_status.violations:
- self.violations.add(violation.include_path)
-
- def GetResults(self):
- return [' "!%s",' % path for path in sorted(self.violations)]
-
- def PrintResults(self):
- for result in self.GetResults():
- print result
-
-
-class CountViolationsFormatter(ResultsFormatter):
- """A results formatter that produces a number, the count of #include
- statements that are in violation of the dependency rules.
-
- Note that you normally want to instantiate DepsChecker with
- ignore_temp_rules=True when you use this formatter.
- """
-
- def __init__(self):
- self.count = 0
-
- def AddError(self, dependee_status):
- self.count += len(dependee_status.violations)
-
- def GetResults(self):
- return '%d' % self.count
-
- def PrintResults(self):
- print self.count
diff --git a/chromium/tools/checkdeps/rules.py b/chromium/tools/checkdeps/rules.py
deleted file mode 100644
index b8a07df0050..00000000000
--- a/chromium/tools/checkdeps/rules.py
+++ /dev/null
@@ -1,178 +0,0 @@
-# Copyright 2012 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.
-
-"""Base classes to represent dependency rules, used by checkdeps.py"""
-
-
-import os
-import re
-
-
-class Rule(object):
- """Specifies a single rule for an include, which can be one of
- ALLOW, DISALLOW and TEMP_ALLOW.
- """
-
- # These are the prefixes used to indicate each type of rule. These
- # are also used as values for self.allow to indicate which type of
- # rule this is.
- ALLOW = '+'
- DISALLOW = '-'
- TEMP_ALLOW = '!'
-
- def __init__(self, allow, directory, dependent_directory, source):
- self.allow = allow
- self._dir = directory
- self._dependent_dir = dependent_directory
- self._source = source
-
- def __str__(self):
- return '"%s%s" from %s.' % (self.allow, self._dir, self._source)
-
- def AsDependencyTuple(self):
- """Returns a tuple (allow, dependent dir, dependee dir) for this rule,
- which is fully self-sufficient to answer the question whether the dependent
- is allowed to depend on the dependee, without knowing the external
- context."""
- return (self.allow, self._dependent_dir or '.', self._dir or '.')
-
- def ParentOrMatch(self, other):
- """Returns true if the input string is an exact match or is a parent
- of the current rule. For example, the input "foo" would match "foo/bar"."""
- return self._dir == other or self._dir.startswith(other + '/')
-
- def ChildOrMatch(self, other):
- """Returns true if the input string would be covered by this rule. For
- example, the input "foo/bar" would match the rule "foo"."""
- return self._dir == other or other.startswith(self._dir + '/')
-
-
-class MessageRule(Rule):
- """A rule that has a simple message as the reason for failing,
- unrelated to directory or source.
- """
-
- def __init__(self, reason):
- super(MessageRule, self).__init__(Rule.DISALLOW, '', '', '')
- self._reason = reason
-
- def __str__(self):
- return self._reason
-
-
-def ParseRuleString(rule_string, source):
- """Returns a tuple of a character indicating what type of rule this
- is, and a string holding the path the rule applies to.
- """
- if not rule_string:
- raise Exception('The rule string "%s" is empty\nin %s' %
- (rule_string, source))
-
- if not rule_string[0] in [Rule.ALLOW, Rule.DISALLOW, Rule.TEMP_ALLOW]:
- raise Exception(
- 'The rule string "%s" does not begin with a "+", "-" or "!".' %
- rule_string)
-
- return (rule_string[0], rule_string[1:])
-
-
-class Rules(object):
- """Sets of rules for files in a directory.
-
- By default, rules are added to the set of rules applicable to all
- dependee files in the directory. Rules may also be added that apply
- only to dependee files whose filename (last component of their path)
- matches a given regular expression; hence there is one additional
- set of rules per unique regular expression.
- """
-
- def __init__(self):
- """Initializes the current rules with an empty rule list for all
- files.
- """
- # We keep the general rules out of the specific rules dictionary,
- # as we need to always process them last.
- self._general_rules = []
-
- # Keys are regular expression strings, values are arrays of rules
- # that apply to dependee files whose basename matches the regular
- # expression. These are applied before the general rules, but
- # their internal order is arbitrary.
- self._specific_rules = {}
-
- def __str__(self):
- result = ['Rules = {\n (apply to all files): [\n%s\n ],' % '\n'.join(
- ' %s' % x for x in self._general_rules)]
- for regexp, rules in self._specific_rules.iteritems():
- result.append(' (limited to files matching %s): [\n%s\n ]' % (
- regexp, '\n'.join(' %s' % x for x in rules)))
- result.append(' }')
- return '\n'.join(result)
-
- def AsDependencyTuples(self, include_general_rules, include_specific_rules):
- """Returns a list of tuples (allow, dependent dir, dependee dir) for the
- specified rules (general/specific). Currently only general rules are
- supported."""
- def AddDependencyTuplesImpl(deps, rules, extra_dependent_suffix=""):
- for rule in rules:
- (allow, dependent, dependee) = rule.AsDependencyTuple()
- tup = (allow, dependent + extra_dependent_suffix, dependee)
- deps.add(tup)
-
- deps = set()
- if include_general_rules:
- AddDependencyTuplesImpl(deps, self._general_rules)
- if include_specific_rules:
- for regexp, rules in self._specific_rules.iteritems():
- AddDependencyTuplesImpl(deps, rules, "/" + regexp)
- return deps
-
- def AddRule(self, rule_string, dependent_dir, source, dependee_regexp=None):
- """Adds a rule for the given rule string.
-
- Args:
- rule_string: The include_rule string read from the DEPS file to apply.
- source: A string representing the location of that string (filename, etc.)
- so that we can give meaningful errors.
- dependent_dir: The directory to which this rule applies.
- dependee_regexp: The rule will only be applied to dependee files
- whose filename (last component of their path)
- matches the expression. None to match all
- dependee files.
- """
- (rule_type, rule_dir) = ParseRuleString(rule_string, source)
-
- if not dependee_regexp:
- rules_to_update = self._general_rules
- else:
- if dependee_regexp in self._specific_rules:
- rules_to_update = self._specific_rules[dependee_regexp]
- else:
- rules_to_update = []
-
- # Remove any existing rules or sub-rules that apply. For example, if we're
- # passed "foo", we should remove "foo", "foo/bar", but not "foobar".
- rules_to_update = [x for x in rules_to_update
- if not x.ParentOrMatch(rule_dir)]
- rules_to_update.insert(0, Rule(rule_type, rule_dir, dependent_dir, source))
-
- if not dependee_regexp:
- self._general_rules = rules_to_update
- else:
- self._specific_rules[dependee_regexp] = rules_to_update
-
- def RuleApplyingTo(self, include_path, dependee_path):
- """Returns the rule that applies to |include_path| for a dependee
- file located at |dependee_path|.
- """
- dependee_filename = os.path.basename(dependee_path)
- for regexp, specific_rules in self._specific_rules.iteritems():
- if re.match(regexp, dependee_filename):
- for rule in specific_rules:
- if rule.ChildOrMatch(include_path):
- return rule
- for rule in self._general_rules:
- if rule.ChildOrMatch(include_path):
- return rule
- return MessageRule('no rule applying.')
diff --git a/chromium/tools/checklicenses/OWNERS b/chromium/tools/checklicenses/OWNERS
deleted file mode 100644
index 2abfa66e8a9..00000000000
--- a/chromium/tools/checklicenses/OWNERS
+++ /dev/null
@@ -1,3 +0,0 @@
-set noparent
-phajdan.jr@chromium.org
-thestig@chromium.org
diff --git a/chromium/tools/checklicenses/checklicenses.py b/chromium/tools/checklicenses/checklicenses.py
deleted file mode 100755
index b1cc0a73af6..00000000000
--- a/chromium/tools/checklicenses/checklicenses.py
+++ /dev/null
@@ -1,506 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-"""Makes sure that all files contain proper licensing information."""
-
-
-import optparse
-import os.path
-import subprocess
-import sys
-
-
-def PrintUsage():
- print """Usage: python checklicenses.py [--root <root>] [tocheck]
- --root Specifies the repository root. This defaults to "../.." relative
- to the script file. This will be correct given the normal location
- of the script in "<root>/tools/checklicenses".
-
- --ignore-suppressions Ignores path-specific license whitelist. Useful when
- trying to remove a suppression/whitelist entry.
-
- tocheck Specifies the directory, relative to root, to check. This defaults
- to "." so it checks everything.
-
-Examples:
- python checklicenses.py
- python checklicenses.py --root ~/chromium/src third_party"""
-
-
-WHITELISTED_LICENSES = [
- 'Apache (v2.0)',
- 'Apache (v2.0) BSD (2 clause)',
- 'Apache (v2.0) GPL (v2)',
- 'Apple MIT', # https://fedoraproject.org/wiki/Licensing/Apple_MIT_License
- 'APSL (v2)',
- 'APSL (v2) BSD (4 clause)',
- 'BSD',
- 'BSD (2 clause)',
- 'BSD (2 clause) ISC',
- 'BSD (2 clause) MIT/X11 (BSD like)',
- 'BSD (3 clause)',
- 'BSD (3 clause) GPL (v2)',
- 'BSD (3 clause) ISC',
- 'BSD (3 clause) LGPL (v2 or later)',
- 'BSD (3 clause) LGPL (v2.1 or later)',
- 'BSD (3 clause) MIT/X11 (BSD like)',
- 'BSD (4 clause)',
- 'BSD-like',
-
- # TODO(phajdan.jr): Make licensecheck not print BSD-like twice.
- 'BSD-like MIT/X11 (BSD like)',
-
- 'BSL (v1.0)',
- 'GPL (v2) LGPL (v2.1 or later)',
- 'GPL (v2 or later) with Bison parser exception',
- 'GPL (v2 or later) with libtool exception',
- 'GPL (v3 or later) with Bison parser exception',
- 'GPL with Bison parser exception',
- 'ISC',
- 'LGPL (unversioned/unknown version)',
- 'LGPL (v2)',
- 'LGPL (v2 or later)',
- 'LGPL (v2.1)',
- 'LGPL (v2.1 or later)',
- 'LGPL (v3 or later)',
- 'MIT/X11 (BSD like)',
- 'MIT/X11 (BSD like) LGPL (v2.1 or later)',
- 'MPL (v1.0) LGPL (v2 or later)',
- 'MPL (v1.1)',
- 'MPL (v1.1) BSD (3 clause) GPL (v2) LGPL (v2.1 or later)',
- 'MPL (v1.1) BSD (3 clause) LGPL (v2.1 or later)',
- 'MPL (v1.1) BSD-like',
- 'MPL (v1.1) BSD-like GPL (unversioned/unknown version)',
- 'MPL (v1.1) BSD-like GPL (v2) LGPL (v2.1 or later)',
- 'MPL (v1.1) GPL (v2)',
- 'MPL (v1.1) GPL (v2) LGPL (v2 or later)',
- 'MPL (v1.1) GPL (v2) LGPL (v2.1 or later)',
- 'MPL (v1.1) GPL (unversioned/unknown version)',
- 'MPL (v1.1) LGPL (v2 or later)',
- 'MPL (v1.1) LGPL (v2.1 or later)',
- 'MPL (v2.0)',
- 'Ms-PL',
- 'Public domain',
- 'Public domain BSD',
- 'Public domain BSD (3 clause)',
- 'Public domain BSD-like',
- 'Public domain LGPL (v2.1 or later)',
- 'libpng',
- 'zlib/libpng',
- 'SGI Free Software License B',
- 'University of Illinois/NCSA Open Source License (BSD like)',
-]
-
-
-PATH_SPECIFIC_WHITELISTED_LICENSES = {
- 'base/hash.cc': [ # http://crbug.com/98100
- 'UNKNOWN',
- ],
- 'base/third_party/icu': [ # http://crbug.com/98087
- 'UNKNOWN',
- ],
-
- # http://code.google.com/p/google-breakpad/issues/detail?id=450
- 'breakpad/src': [
- 'UNKNOWN',
- ],
-
- 'chrome/common/extensions/docs/examples': [ # http://crbug.com/98092
- 'UNKNOWN',
- ],
- 'chrome/test/data/gpu/vt': [
- 'UNKNOWN',
- ],
- 'courgette/third_party/bsdiff_create.cc': [ # http://crbug.com/98095
- 'UNKNOWN',
- ],
- 'data/tab_switching': [
- 'UNKNOWN',
- ],
- 'native_client': [ # http://crbug.com/98099
- 'UNKNOWN',
- ],
- 'native_client/toolchain': [
- 'BSD GPL (v2 or later)',
- 'BSD (2 clause) GPL (v2 or later)',
- 'BSD (3 clause) GPL (v2 or later)',
- 'BSL (v1.0) GPL',
- 'BSL (v1.0) GPL (v3.1)',
- 'GPL',
- 'GPL (unversioned/unknown version)',
- 'GPL (v2)',
- 'GPL (v2 or later)',
- 'GPL (v3.1)',
- 'GPL (v3 or later)',
- ],
- 'net/tools/spdyshark': [
- 'GPL (v2 or later)',
- 'UNKNOWN',
- ],
- 'third_party/WebKit': [
- 'UNKNOWN',
- ],
- 'third_party/active_doc': [ # http://crbug.com/98113
- 'UNKNOWN',
- ],
-
- # http://code.google.com/p/angleproject/issues/detail?id=217
- 'third_party/angle': [
- 'UNKNOWN',
- ],
-
- # http://crbug.com/222828
- # http://bugs.python.org/issue17514
- 'third_party/chromite/third_party/argparse.py': [
- 'UNKNOWN',
- ],
-
- # http://crbug.com/326117
- # https://bitbucket.org/chrisatlee/poster/issue/21
- 'third_party/chromite/third_party/poster': [
- 'UNKNOWN',
- ],
-
- # Not used. http://crbug.com/156020
- # Using third_party/cros_dbus_cplusplus/cros_dbus_cplusplus.gyp instead.
- 'third_party/cros_dbus_cplusplus/source/autogen.sh': [
- 'UNKNOWN',
- ],
- # Included in the source tree but not built. http://crbug.com/156020
- 'third_party/cros_dbus_cplusplus/source/examples': [
- 'UNKNOWN',
- ],
- 'third_party/devscripts': [
- 'GPL (v2 or later)',
- ],
- 'third_party/expat/files/lib': [ # http://crbug.com/98121
- 'UNKNOWN',
- ],
- 'third_party/ffmpeg': [
- 'GPL',
- 'GPL (v2)',
- 'GPL (v2 or later)',
- 'UNKNOWN', # http://crbug.com/98123
- ],
- 'third_party/freetype2': [ # http://crbug.com/177319
- 'UNKNOWN',
- ],
- 'third_party/gles2_conform/GTF_ES': [ # http://crbug.com/98131
- 'UNKNOWN',
- ],
- 'third_party/hunspell': [ # http://crbug.com/98134
- 'UNKNOWN',
- ],
- 'third_party/iccjpeg': [ # http://crbug.com/98137
- 'UNKNOWN',
- ],
- 'third_party/icu': [ # http://crbug.com/98301
- 'UNKNOWN',
- ],
- 'third_party/jemalloc': [ # http://crbug.com/98302
- 'UNKNOWN',
- ],
- 'third_party/JSON': [
- 'Perl', # Build-only.
- # License missing upstream on 3 minor files.
- 'UNKNOWN', # https://rt.cpan.org/Public/Bug/Display.html?id=85915
- ],
- 'third_party/lcov': [ # http://crbug.com/98304
- 'UNKNOWN',
- ],
- 'third_party/lcov/contrib/galaxy/genflat.pl': [
- 'GPL (v2 or later)',
- ],
- 'third_party/libevent': [ # http://crbug.com/98309
- 'UNKNOWN',
- ],
- 'third_party/libjingle/source/talk': [ # http://crbug.com/98310
- 'UNKNOWN',
- ],
- 'third_party/libjpeg': [ # http://crbug.com/98313
- 'UNKNOWN',
- ],
- 'third_party/libjpeg_turbo': [ # http://crbug.com/98314
- 'UNKNOWN',
- ],
- 'third_party/libpng': [ # http://crbug.com/98318
- 'UNKNOWN',
- ],
-
- # The following files lack license headers, but are trivial.
- 'third_party/libusb/src/libusb/os/poll_posix.h': [
- 'UNKNOWN',
- ],
-
- 'third_party/libvpx/source': [ # http://crbug.com/98319
- 'UNKNOWN',
- ],
- 'third_party/libvpx/source/libvpx/examples/includes': [
- 'GPL (v2 or later)',
- ],
- 'third_party/libxml': [
- 'UNKNOWN',
- ],
- 'third_party/libxslt': [
- 'UNKNOWN',
- ],
- 'third_party/lzma_sdk': [
- 'UNKNOWN',
- ],
- 'third_party/mesa/src': [
- 'GPL (v2)',
- 'GPL (v3 or later)',
- 'MIT/X11 (BSD like) GPL (v3 or later) with Bison parser exception',
- 'UNKNOWN', # http://crbug.com/98450
- ],
- 'third_party/modp_b64': [
- 'UNKNOWN',
- ],
- 'third_party/openmax_dl/dl' : [
- 'Khronos Group',
- ],
- 'third_party/openssl': [ # http://crbug.com/98451
- 'UNKNOWN',
- ],
- 'third_party/ots/tools/ttf-checksum.py': [ # http://code.google.com/p/ots/issues/detail?id=2
- 'UNKNOWN',
- ],
- 'third_party/molokocacao': [ # http://crbug.com/98453
- 'UNKNOWN',
- ],
- 'third_party/npapi/npspy': [
- 'UNKNOWN',
- ],
- 'third_party/ocmock/OCMock': [ # http://crbug.com/98454
- 'UNKNOWN',
- ],
- 'third_party/ply/__init__.py': [
- 'UNKNOWN',
- ],
- 'third_party/protobuf': [ # http://crbug.com/98455
- 'UNKNOWN',
- ],
-
- # http://crbug.com/222831
- # https://bitbucket.org/eliben/pyelftools/issue/12
- 'third_party/pyelftools': [
- 'UNKNOWN',
- ],
-
- 'third_party/scons-2.0.1/engine/SCons': [ # http://crbug.com/98462
- 'UNKNOWN',
- ],
- 'third_party/simplejson': [
- 'UNKNOWN',
- ],
- 'third_party/skia': [ # http://crbug.com/98463
- 'UNKNOWN',
- ],
- 'third_party/snappy/src': [ # http://crbug.com/98464
- 'UNKNOWN',
- ],
- 'third_party/smhasher/src': [ # http://crbug.com/98465
- 'UNKNOWN',
- ],
- 'third_party/speech-dispatcher/libspeechd.h': [
- 'GPL (v2 or later)',
- ],
- 'third_party/sqlite': [
- 'UNKNOWN',
- ],
-
- # https://code.google.com/p/colorama/issues/detail?id=44
- 'tools/swarming_client/third_party/colorama': [
- 'UNKNOWN',
- ],
-
- # https://github.com/kennethreitz/requests/issues/1610
- 'tools/swarming_client/third_party/requests': [
- 'UNKNOWN',
- ],
-
- 'third_party/swig/Lib/linkruntime.c': [ # http://crbug.com/98585
- 'UNKNOWN',
- ],
- 'third_party/talloc': [
- 'GPL (v3 or later)',
- 'UNKNOWN', # http://crbug.com/98588
- ],
- 'third_party/tcmalloc': [
- 'UNKNOWN', # http://crbug.com/98589
- ],
- 'third_party/tlslite': [
- 'UNKNOWN',
- ],
- 'third_party/webdriver': [ # http://crbug.com/98590
- 'UNKNOWN',
- ],
-
- # https://github.com/html5lib/html5lib-python/issues/125
- # https://github.com/KhronosGroup/WebGL/issues/435
- 'third_party/webgl/src': [
- 'UNKNOWN',
- ],
-
- 'third_party/webrtc': [ # http://crbug.com/98592
- 'UNKNOWN',
- ],
- 'third_party/xdg-utils': [ # http://crbug.com/98593
- 'UNKNOWN',
- ],
- 'third_party/yasm/source': [ # http://crbug.com/98594
- 'UNKNOWN',
- ],
- 'third_party/zlib/contrib/minizip': [
- 'UNKNOWN',
- ],
- 'third_party/zlib/trees.h': [
- 'UNKNOWN',
- ],
- 'tools/emacs': [ # http://crbug.com/98595
- 'UNKNOWN',
- ],
- 'tools/gyp/test': [
- 'UNKNOWN',
- ],
- 'tools/histograms': [
- 'UNKNOWN',
- ],
- 'tools/python/google/__init__.py': [
- 'UNKNOWN',
- ],
- 'tools/stats_viewer/Properties/AssemblyInfo.cs': [
- 'UNKNOWN',
- ],
- 'tools/symsrc/pefile.py': [
- 'UNKNOWN',
- ],
- 'v8/test/cctest': [ # http://crbug.com/98597
- 'UNKNOWN',
- ],
-}
-
-
-def check_licenses(options, args):
- # Figure out which directory we have to check.
- if len(args) == 0:
- # No directory to check specified, use the repository root.
- start_dir = options.base_directory
- elif len(args) == 1:
- # Directory specified. Start here. It's supposed to be relative to the
- # base directory.
- start_dir = os.path.abspath(os.path.join(options.base_directory, args[0]))
- else:
- # More than one argument, we don't handle this.
- PrintUsage()
- return 1
-
- print "Using base directory:", options.base_directory
- print "Checking:", start_dir
- print
-
- licensecheck_path = os.path.abspath(os.path.join(options.base_directory,
- 'third_party',
- 'devscripts',
- 'licensecheck.pl'))
-
- licensecheck = subprocess.Popen([licensecheck_path,
- '-l', '100',
- '-r', start_dir],
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- stdout, stderr = licensecheck.communicate()
- if options.verbose:
- print '----------- licensecheck stdout -----------'
- print stdout
- print '--------- end licensecheck stdout ---------'
- if licensecheck.returncode != 0 or stderr:
- print '----------- licensecheck stderr -----------'
- print stderr
- print '--------- end licensecheck stderr ---------'
- print "\nFAILED\n"
- return 1
-
- used_suppressions = set()
-
- success = True
- for line in stdout.splitlines():
- filename, license = line.split(':', 1)
- filename = os.path.relpath(filename.strip(), options.base_directory)
-
- # All files in the build output directory are generated one way or another.
- # There's no need to check them.
- if filename.startswith('out/'):
- continue
-
- # For now we're just interested in the license.
- license = license.replace('*No copyright*', '').strip()
-
- # Skip generated files.
- if 'GENERATED FILE' in license:
- continue
-
- if license in WHITELISTED_LICENSES:
- continue
-
- if not options.ignore_suppressions:
- matched_prefixes = [
- prefix for prefix in PATH_SPECIFIC_WHITELISTED_LICENSES
- if filename.startswith(prefix) and
- license in PATH_SPECIFIC_WHITELISTED_LICENSES[prefix]]
- if matched_prefixes:
- used_suppressions.update(set(matched_prefixes))
- continue
-
- print "'%s' has non-whitelisted license '%s'" % (filename, license)
- success = False
-
- if success:
- print "\nSUCCESS\n"
-
- unused_suppressions = set(
- PATH_SPECIFIC_WHITELISTED_LICENSES.keys()).difference(used_suppressions)
- if unused_suppressions:
- print "\nNOTE: unused suppressions detected:\n"
- print '\n'.join(unused_suppressions)
-
- return 0
- else:
- print "\nFAILED\n"
- print "Please read",
- print "http://www.chromium.org/developers/adding-3rd-party-libraries"
- print "for more info how to handle the failure."
- print
- print "Please respect OWNERS of checklicenses.py. Changes violating"
- print "this requirement may be reverted."
-
- # Do not print unused suppressions so that above message is clearly
- # visible and gets proper attention. Too much unrelated output
- # would be distracting and make the important points easier to miss.
-
- return 1
-
-
-def main():
- default_root = os.path.abspath(
- os.path.join(os.path.dirname(__file__), '..', '..'))
- option_parser = optparse.OptionParser()
- option_parser.add_option('--root', default=default_root,
- dest='base_directory',
- help='Specifies the repository root. This defaults '
- 'to "../.." relative to the script file, which '
- 'will normally be the repository root.')
- option_parser.add_option('-v', '--verbose', action='store_true',
- default=False, help='Print debug logging')
- option_parser.add_option('--ignore-suppressions',
- action='store_true',
- default=False,
- help='Ignore path-specific license whitelist.')
- options, args = option_parser.parse_args()
- return check_licenses(options, args)
-
-
-if '__main__' == __name__:
- sys.exit(main())
diff --git a/chromium/tools/checkperms/OWNERS b/chromium/tools/checkperms/OWNERS
deleted file mode 100644
index 1967bf567e8..00000000000
--- a/chromium/tools/checkperms/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-thestig@chromium.org
diff --git a/chromium/tools/checkperms/PRESUBMIT.py b/chromium/tools/checkperms/PRESUBMIT.py
deleted file mode 100644
index c2f93567da3..00000000000
--- a/chromium/tools/checkperms/PRESUBMIT.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright (c) 2012 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.
-
-"""Top-level presubmit script for checkperms.
-
-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for
-details on the presubmit API built into gcl.
-"""
-
-
-def CommonChecks(input_api, output_api):
- output = []
- output.extend(input_api.canned_checks.RunPylint(input_api, output_api))
- # Run it like if it were a unit test.
- output.extend(
- input_api.canned_checks.RunUnitTests(
- input_api, output_api, ['./checkperms.py']))
- return output
-
-
-def CheckChangeOnUpload(input_api, output_api):
- return CommonChecks(input_api, output_api)
-
-
-def CheckChangeOnCommit(input_api, output_api):
- return CommonChecks(input_api, output_api)
diff --git a/chromium/tools/checkperms/checkperms.py b/chromium/tools/checkperms/checkperms.py
deleted file mode 100755
index 9395c00d276..00000000000
--- a/chromium/tools/checkperms/checkperms.py
+++ /dev/null
@@ -1,544 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-"""Makes sure files have the right permissions.
-
-Some developers have broken SCM configurations that flip the svn:executable
-permission on for no good reason. Unix developers who run ls --color will then
-see .cc files in green and get confused.
-
-- For file extensions that must be executable, add it to EXECUTABLE_EXTENSIONS.
-- For file extensions that must not be executable, add it to
- NOT_EXECUTABLE_EXTENSIONS.
-- To ignore all the files inside a directory, add it to IGNORED_PATHS.
-- For file base name with ambiguous state and that should not be checked for
- shebang, add it to IGNORED_FILENAMES.
-
-Any file not matching the above will be opened and looked if it has a shebang
-or an ELF header. If this does not match the executable bit on the file, the
-file will be flagged.
-
-Note that all directory separators must be slashes (Unix-style) and not
-backslashes. All directories should be relative to the source root and all
-file paths should be only lowercase.
-"""
-
-import logging
-import optparse
-import os
-import stat
-import string
-import subprocess
-import sys
-
-#### USER EDITABLE SECTION STARTS HERE ####
-
-# Files with these extensions must have executable bit set.
-#
-# Case-sensitive.
-EXECUTABLE_EXTENSIONS = (
- 'bat',
- 'dll',
- 'dylib',
- 'exe',
-)
-
-# These files must have executable bit set.
-#
-# Case-insensitive, lower-case only.
-EXECUTABLE_PATHS = (
- 'chrome/test/data/extensions/uitest/plugins/plugin.plugin/contents/'
- 'macos/testnetscapeplugin',
- 'chrome/test/data/extensions/uitest/plugins_private/plugin.plugin/contents/'
- 'macos/testnetscapeplugin',
-)
-
-# These files must not have the executable bit set. This is mainly a performance
-# optimization as these files are not checked for shebang. The list was
-# partially generated from:
-# git ls-files | grep "\\." | sed 's/.*\.//' | sort | uniq -c | sort -b -g
-#
-# Case-sensitive.
-NON_EXECUTABLE_EXTENSIONS = (
- '1',
- '3ds',
- 'S',
- 'am',
- 'applescript',
- 'asm',
- 'c',
- 'cc',
- 'cfg',
- 'chromium',
- 'cpp',
- 'crx',
- 'cs',
- 'css',
- 'cur',
- 'def',
- 'der',
- 'expected',
- 'gif',
- 'grd',
- 'gyp',
- 'gypi',
- 'h',
- 'hh',
- 'htm',
- 'html',
- 'hyph',
- 'ico',
- 'idl',
- 'java',
- 'jpg',
- 'js',
- 'json',
- 'm',
- 'm4',
- 'mm',
- 'mms',
- 'mock-http-headers',
- 'nexe',
- 'nmf',
- 'onc',
- 'pat',
- 'patch',
- 'pdf',
- 'pem',
- 'plist',
- 'png',
- 'proto',
- 'rc',
- 'rfx',
- 'rgs',
- 'rules',
- 'spec',
- 'sql',
- 'srpc',
- 'svg',
- 'tcl',
- 'test',
- 'tga',
- 'txt',
- 'vcproj',
- 'vsprops',
- 'webm',
- 'word',
- 'xib',
- 'xml',
- 'xtb',
- 'zip',
-)
-
-# These files must not have executable bit set.
-#
-# Case-insensitive, lower-case only.
-NON_EXECUTABLE_PATHS = (
- 'build/android/tests/symbolize/liba.so',
- 'build/android/tests/symbolize/libb.so',
- 'chrome/installer/mac/sign_app.sh.in',
- 'chrome/installer/mac/sign_versioned_dir.sh.in',
- 'chrome/test/data/components/ihfokbkgjpifnbbojhneepfflplebdkc/'
- 'ihfokbkgjpifnbbojhneepfflplebdkc_1/a_changing_binary_file',
- 'chrome/test/data/components/ihfokbkgjpifnbbojhneepfflplebdkc/'
- 'ihfokbkgjpifnbbojhneepfflplebdkc_2/a_changing_binary_file',
- 'chrome/test/data/extensions/uitest/plugins/plugin32.so',
- 'chrome/test/data/extensions/uitest/plugins/plugin64.so',
- 'chrome/test/data/extensions/uitest/plugins_private/plugin32.so',
- 'chrome/test/data/extensions/uitest/plugins_private/plugin64.so',
- 'courgette/testdata/elf-32-1',
- 'courgette/testdata/elf-32-2',
- 'courgette/testdata/elf-64',
-)
-
-# File names that are always whitelisted. (These are mostly autoconf spew.)
-#
-# Case-sensitive.
-IGNORED_FILENAMES = (
- 'config.guess',
- 'config.sub',
- 'configure',
- 'depcomp',
- 'install-sh',
- 'missing',
- 'mkinstalldirs',
- 'naclsdk',
- 'scons',
-)
-
-# File paths starting with one of these will be ignored as well.
-# Please consider fixing your file permissions, rather than adding to this list.
-#
-# Case-insensitive, lower-case only.
-IGNORED_PATHS = (
- 'native_client_sdk/src/build_tools/sdk_tools/third_party/fancy_urllib/'
- '__init__.py',
- 'out/',
- # TODO(maruel): Fix these.
- 'third_party/android_testrunner/',
- 'third_party/bintrees/',
- 'third_party/closure_linter/',
- 'third_party/devscripts/licensecheck.pl.vanilla',
- 'third_party/hyphen/',
- 'third_party/jemalloc/',
- 'third_party/lcov-1.9/contrib/galaxy/conglomerate_functions.pl',
- 'third_party/lcov-1.9/contrib/galaxy/gen_makefile.sh',
- 'third_party/lcov/contrib/galaxy/conglomerate_functions.pl',
- 'third_party/lcov/contrib/galaxy/gen_makefile.sh',
- 'third_party/libevent/autogen.sh',
- 'third_party/libevent/test/test.sh',
- 'third_party/libxml/linux/xml2-config',
- 'third_party/libxml/src/ltmain.sh',
- 'third_party/mesa/',
- 'third_party/protobuf/',
- 'third_party/python_gflags/gflags.py',
- 'third_party/sqlite/',
- 'third_party/talloc/script/mksyms.sh',
- 'third_party/tcmalloc/',
- 'third_party/tlslite/setup.py',
-)
-
-#### USER EDITABLE SECTION ENDS HERE ####
-
-assert set(EXECUTABLE_EXTENSIONS) & set(NON_EXECUTABLE_EXTENSIONS) == set()
-assert set(EXECUTABLE_PATHS) & set(NON_EXECUTABLE_PATHS) == set()
-
-VALID_CHARS = set(string.ascii_lowercase + string.digits + '/-_.')
-for paths in (EXECUTABLE_PATHS, NON_EXECUTABLE_PATHS, IGNORED_PATHS):
- assert all([set(path).issubset(VALID_CHARS) for path in paths])
-
-
-def capture(cmd, cwd):
- """Returns the output of a command.
-
- Ignores the error code or stderr.
- """
- logging.debug('%s; cwd=%s' % (' '.join(cmd), cwd))
- env = os.environ.copy()
- env['LANGUAGE'] = 'en_US.UTF-8'
- p = subprocess.Popen(
- cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=cwd, env=env)
- return p.communicate()[0]
-
-
-def get_svn_info(dir_path):
- """Returns svn meta-data for a svn checkout."""
- if not os.path.isdir(dir_path):
- return {}
- out = capture(['svn', 'info', '.', '--non-interactive'], dir_path)
- return dict(l.split(': ', 1) for l in out.splitlines() if l)
-
-
-def get_svn_url(dir_path):
- return get_svn_info(dir_path).get('URL')
-
-
-def get_svn_root(dir_path):
- """Returns the svn checkout root or None."""
- svn_url = get_svn_url(dir_path)
- if not svn_url:
- return None
- logging.info('svn url: %s' % svn_url)
- while True:
- parent = os.path.dirname(dir_path)
- if parent == dir_path:
- return None
- svn_url = svn_url.rsplit('/', 1)[0]
- if svn_url != get_svn_url(parent):
- return dir_path
- dir_path = parent
-
-
-def get_git_root(dir_path):
- """Returns the git checkout root or None."""
- root = capture(['git', 'rev-parse', '--show-toplevel'], dir_path).strip()
- if root:
- return root
-
-
-def is_ignored(rel_path):
- """Returns True if rel_path is in our whitelist of files to ignore."""
- rel_path = rel_path.lower()
- return (
- os.path.basename(rel_path) in IGNORED_FILENAMES or
- rel_path.lower().startswith(IGNORED_PATHS))
-
-
-def must_be_executable(rel_path):
- """The file name represents a file type that must have the executable bit
- set.
- """
- return (os.path.splitext(rel_path)[1][1:] in EXECUTABLE_EXTENSIONS or
- rel_path.lower() in EXECUTABLE_PATHS)
-
-
-def must_not_be_executable(rel_path):
- """The file name represents a file type that must not have the executable
- bit set.
- """
- return (os.path.splitext(rel_path)[1][1:] in NON_EXECUTABLE_EXTENSIONS or
- rel_path.lower() in NON_EXECUTABLE_PATHS)
-
-
-def has_executable_bit(full_path):
- """Returns if any executable bit is set."""
- permission = stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH
- return bool(permission & os.stat(full_path).st_mode)
-
-
-def has_shebang_or_is_elf(full_path):
- """Returns if the file starts with #!/ or is an ELF binary.
-
- full_path is the absolute path to the file.
- """
- with open(full_path, 'rb') as f:
- data = f.read(4)
- return (data[:3] == '#!/', data == '\x7fELF')
-
-
-def check_file(root_path, rel_path, bare_output):
- """Checks the permissions of the file whose path is root_path + rel_path and
- returns an error if it is inconsistent.
-
- It is assumed that the file is not ignored by is_ignored().
-
- If the file name is matched with must_be_executable() or
- must_not_be_executable(), only its executable bit is checked.
- Otherwise, the first few bytes of the file are read to verify if it has a
- shebang or ELF header and compares this with the executable bit on the file.
- """
- full_path = os.path.join(root_path, rel_path)
- try:
- bit = has_executable_bit(full_path)
- except OSError:
- # It's faster to catch exception than call os.path.islink(). Chromium
- # tree happens to have invalid symlinks under
- # third_party/openssl/openssl/test/.
- return None
-
- if must_be_executable(rel_path):
- if not bit:
- if bare_output:
- return full_path
- return '%s: Must have executable bit set' % full_path
- return
- if must_not_be_executable(rel_path):
- if bit:
- if bare_output:
- return full_path
- return '%s: Must not have executable bit set' % full_path
- return
-
- # For the others, it depends on the file header.
- (shebang, elf) = has_shebang_or_is_elf(full_path)
- if bit != (shebang or elf):
- if bare_output:
- return full_path
- if bit:
- return '%s: Has executable bit but not shebang or ELF header' % full_path
- if shebang:
- return '%s: Has shebang but not executable bit' % full_path
- return '%s: Has ELF header but not executable bit' % full_path
-
-
-def check_files(root, files, bare_output):
- errors = []
- for rel_path in files:
- if is_ignored(rel_path):
- continue
-
- error = check_file(root, rel_path, bare_output)
- if error:
- errors.append(error)
-
- return errors
-
-
-class ApiBase(object):
- def __init__(self, root_dir, bare_output):
- self.root_dir = root_dir
- self.bare_output = bare_output
- self.count = 0
- self.count_read_header = 0
-
- def check_file(self, rel_path):
- logging.debug('check_file(%s)' % rel_path)
- self.count += 1
-
- if (not must_be_executable(rel_path) and
- not must_not_be_executable(rel_path)):
- self.count_read_header += 1
-
- return check_file(self.root_dir, rel_path, self.bare_output)
-
- def check_dir(self, rel_path):
- return self.check(rel_path)
-
- def check(self, start_dir):
- """Check the files in start_dir, recursively check its subdirectories."""
- errors = []
- items = self.list_dir(start_dir)
- logging.info('check(%s) -> %d' % (start_dir, len(items)))
- for item in items:
- full_path = os.path.join(self.root_dir, start_dir, item)
- rel_path = full_path[len(self.root_dir) + 1:]
- if is_ignored(rel_path):
- continue
- if os.path.isdir(full_path):
- # Depth first.
- errors.extend(self.check_dir(rel_path))
- else:
- error = self.check_file(rel_path)
- if error:
- errors.append(error)
- return errors
-
- def list_dir(self, start_dir):
- """Lists all the files and directory inside start_dir."""
- return sorted(
- x for x in os.listdir(os.path.join(self.root_dir, start_dir))
- if not x.startswith('.')
- )
-
-
-class ApiSvnQuick(ApiBase):
- """Returns all files in svn-versioned directories, independent of the fact if
- they are versionned.
-
- Uses svn info in each directory to determine which directories should be
- crawled.
- """
- def __init__(self, *args):
- super(ApiSvnQuick, self).__init__(*args)
- self.url = get_svn_url(self.root_dir)
-
- def check_dir(self, rel_path):
- url = self.url + '/' + rel_path
- if get_svn_url(os.path.join(self.root_dir, rel_path)) != url:
- return []
- return super(ApiSvnQuick, self).check_dir(rel_path)
-
-
-class ApiAllFilesAtOnceBase(ApiBase):
- _files = None
-
- def list_dir(self, start_dir):
- """Lists all the files and directory inside start_dir."""
- if self._files is None:
- self._files = sorted(self._get_all_files())
- if not self.bare_output:
- print 'Found %s files' % len(self._files)
- start_dir = start_dir[len(self.root_dir) + 1:]
- return [
- x[len(start_dir):] for x in self._files if x.startswith(start_dir)
- ]
-
- def _get_all_files(self):
- """Lists all the files and directory inside self._root_dir."""
- raise NotImplementedError()
-
-
-class ApiSvn(ApiAllFilesAtOnceBase):
- """Returns all the subversion controlled files.
-
- Warning: svn ls is abnormally slow.
- """
- def _get_all_files(self):
- cmd = ['svn', 'ls', '--non-interactive', '--recursive']
- return (
- x for x in capture(cmd, self.root_dir).splitlines()
- if not x.endswith(os.path.sep))
-
-
-class ApiGit(ApiAllFilesAtOnceBase):
- def _get_all_files(self):
- return capture(['git', 'ls-files'], cwd=self.root_dir).splitlines()
-
-
-def get_scm(dir_path, bare):
- """Returns a properly configured ApiBase instance."""
- cwd = os.getcwd()
- root = get_svn_root(dir_path or cwd)
- if root:
- if not bare:
- print('Found subversion checkout at %s' % root)
- return ApiSvnQuick(dir_path or root, bare)
- root = get_git_root(dir_path or cwd)
- if root:
- if not bare:
- print('Found git repository at %s' % root)
- return ApiGit(dir_path or root, bare)
-
- # Returns a non-scm aware checker.
- if not bare:
- print('Failed to determine the SCM for %s' % dir_path)
- return ApiBase(dir_path or cwd, bare)
-
-
-def main():
- usage = """Usage: python %prog [--root <root>] [tocheck]
- tocheck Specifies the directory, relative to root, to check. This defaults
- to "." so it checks everything.
-
-Examples:
- python %prog
- python %prog --root /path/to/source chrome"""
-
- parser = optparse.OptionParser(usage=usage)
- parser.add_option(
- '--root',
- help='Specifies the repository root. This defaults '
- 'to the checkout repository root')
- parser.add_option(
- '-v', '--verbose', action='count', default=0, help='Print debug logging')
- parser.add_option(
- '--bare',
- action='store_true',
- default=False,
- help='Prints the bare filename triggering the checks')
- parser.add_option(
- '--file', action='append', dest='files',
- help='Specifics a list of files to check the permissions of. Only these '
- 'files will be checked')
- options, args = parser.parse_args()
-
- levels = [logging.ERROR, logging.INFO, logging.DEBUG]
- logging.basicConfig(level=levels[min(len(levels) - 1, options.verbose)])
-
- if len(args) > 1:
- parser.error('Too many arguments used')
-
- if options.root:
- options.root = os.path.abspath(options.root)
-
- if options.files:
- errors = check_files(options.root, options.files, options.bare)
- print '\n'.join(errors)
- return bool(errors)
-
- api = get_scm(options.root, options.bare)
- if args:
- start_dir = args[0]
- else:
- start_dir = api.root_dir
-
- errors = api.check(start_dir)
-
- if not options.bare:
- print 'Processed %s files, %d files where tested for shebang/ELF header' % (
- api.count, api.count_read_header)
-
- if errors:
- if not options.bare:
- print '\nFAILED\n'
- print '\n'.join(errors)
- return 1
- if not options.bare:
- print '\nSUCCESS\n'
- return 0
-
-
-if '__main__' == __name__:
- sys.exit(main())
diff --git a/chromium/tools/clang/blink_gc_plugin/BlinkGCPlugin.cpp b/chromium/tools/clang/blink_gc_plugin/BlinkGCPlugin.cpp
new file mode 100644
index 00000000000..d1d3a468ec8
--- /dev/null
+++ b/chromium/tools/clang/blink_gc_plugin/BlinkGCPlugin.cpp
@@ -0,0 +1,1486 @@
+// Copyright 2014 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.
+
+// This clang plugin checks various invariants of the Blink garbage
+// collection infrastructure.
+//
+// Errors are described at:
+// http://www.chromium.org/developers/blink-gc-plugin-errors
+
+#include "Config.h"
+#include "JsonWriter.h"
+#include "RecordInfo.h"
+
+#include "clang/AST/AST.h"
+#include "clang/AST/ASTConsumer.h"
+#include "clang/AST/RecursiveASTVisitor.h"
+#include "clang/Frontend/CompilerInstance.h"
+#include "clang/Frontend/FrontendPluginRegistry.h"
+
+using namespace clang;
+using std::string;
+
+namespace {
+
+const char kClassMustLeftMostlyDeriveGC[] =
+ "[blink-gc] Class %0 must derive its GC base in the left-most position.";
+
+const char kClassRequiresTraceMethod[] =
+ "[blink-gc] Class %0 requires a trace method.";
+
+const char kBaseRequiresTracing[] =
+ "[blink-gc] Base class %0 of derived class %1 requires tracing.";
+
+const char kBaseRequiresTracingNote[] =
+ "[blink-gc] Untraced base class %0 declared here:";
+
+const char kFieldsRequireTracing[] =
+ "[blink-gc] Class %0 has untraced fields that require tracing.";
+
+const char kFieldRequiresTracingNote[] =
+ "[blink-gc] Untraced field %0 declared here:";
+
+const char kClassContainsInvalidFields[] =
+ "[blink-gc] Class %0 contains invalid fields.";
+
+const char kClassContainsGCRoot[] =
+ "[blink-gc] Class %0 contains GC root in field %1.";
+
+const char kClassRequiresFinalization[] =
+ "[blink-gc] Class %0 requires finalization.";
+
+const char kFinalizerAccessesFinalizedField[] =
+ "[blink-gc] Finalizer %0 accesses potentially finalized field %1.";
+
+const char kRawPtrToGCManagedClassNote[] =
+ "[blink-gc] Raw pointer field %0 to a GC managed class declared here:";
+
+const char kRefPtrToGCManagedClassNote[] =
+ "[blink-gc] RefPtr field %0 to a GC managed class declared here:";
+
+const char kOwnPtrToGCManagedClassNote[] =
+ "[blink-gc] OwnPtr field %0 to a GC managed class declared here:";
+
+const char kStackAllocatedFieldNote[] =
+ "[blink-gc] Stack-allocated field %0 declared here:";
+
+const char kMemberInUnmanagedClassNote[] =
+ "[blink-gc] Member field %0 in unmanaged class declared here:";
+
+const char kPartObjectToGCDerivedClassNote[] =
+ "[blink-gc] Part-object field %0 to a GC derived class declared here:";
+
+const char kPartObjectContainsGCRootNote[] =
+ "[blink-gc] Field %0 with embedded GC root in %1 declared here:";
+
+const char kFieldContainsGCRootNote[] =
+ "[blink-gc] Field %0 defining a GC root declared here:";
+
+const char kOverriddenNonVirtualTrace[] =
+ "[blink-gc] Class %0 overrides non-virtual trace of base class %1.";
+
+const char kOverriddenNonVirtualTraceNote[] =
+ "[blink-gc] Non-virtual trace method declared here:";
+
+const char kMissingTraceDispatchMethod[] =
+ "[blink-gc] Class %0 is missing manual trace dispatch.";
+
+const char kMissingFinalizeDispatchMethod[] =
+ "[blink-gc] Class %0 is missing manual finalize dispatch.";
+
+const char kVirtualAndManualDispatch[] =
+ "[blink-gc] Class %0 contains or inherits virtual methods"
+ " but implements manual dispatching.";
+
+const char kMissingTraceDispatch[] =
+ "[blink-gc] Missing dispatch to class %0 in manual trace dispatch.";
+
+const char kMissingFinalizeDispatch[] =
+ "[blink-gc] Missing dispatch to class %0 in manual finalize dispatch.";
+
+const char kFinalizedFieldNote[] =
+ "[blink-gc] Potentially finalized field %0 declared here:";
+
+const char kUserDeclaredDestructorNote[] =
+ "[blink-gc] User-declared destructor declared here:";
+
+const char kUserDeclaredFinalizerNote[] =
+ "[blink-gc] User-declared finalizer declared here:";
+
+const char kBaseRequiresFinalizationNote[] =
+ "[blink-gc] Base class %0 requiring finalization declared here:";
+
+const char kFieldRequiresFinalizationNote[] =
+ "[blink-gc] Field %0 requiring finalization declared here:";
+
+const char kManualDispatchMethodNote[] =
+ "[blink-gc] Manual dispatch %0 declared here:";
+
+const char kDerivesNonStackAllocated[] =
+ "[blink-gc] Stack-allocated class %0 derives class %1"
+ " which is not stack allocated.";
+
+const char kClassOverridesNew[] =
+ "[blink-gc] Garbage collected class %0"
+ " is not permitted to override its new operator.";
+
+const char kClassDeclaresPureVirtualTrace[] =
+ "[blink-gc] Garbage collected class %0"
+ " is not permitted to declare a pure-virtual trace method.";
+
+struct BlinkGCPluginOptions {
+ BlinkGCPluginOptions() : enable_oilpan(false), dump_graph(false) {}
+ bool enable_oilpan;
+ bool dump_graph;
+ std::set<std::string> ignored_classes;
+ std::set<std::string> checked_namespaces;
+ std::vector<std::string> ignored_directories;
+};
+
+typedef std::vector<CXXRecordDecl*> RecordVector;
+typedef std::vector<CXXMethodDecl*> MethodVector;
+
+// Test if a template specialization is an instantiation.
+static bool IsTemplateInstantiation(CXXRecordDecl* record) {
+ ClassTemplateSpecializationDecl* spec =
+ dyn_cast<ClassTemplateSpecializationDecl>(record);
+ if (!spec)
+ return false;
+ switch (spec->getTemplateSpecializationKind()) {
+ case TSK_ImplicitInstantiation:
+ case TSK_ExplicitInstantiationDefinition:
+ return true;
+ case TSK_Undeclared:
+ case TSK_ExplicitSpecialization:
+ return false;
+ // TODO: unsupported cases.
+ case TSK_ExplicitInstantiationDeclaration:
+ return false;
+ }
+ assert(false && "Unknown template specialization kind");
+}
+
+// This visitor collects the entry points for the checker.
+class CollectVisitor : public RecursiveASTVisitor<CollectVisitor> {
+ public:
+ CollectVisitor() {}
+
+ RecordVector& record_decls() { return record_decls_; }
+ MethodVector& trace_decls() { return trace_decls_; }
+
+ bool shouldVisitTemplateInstantiations() { return false; }
+
+ // Collect record declarations, including nested declarations.
+ bool VisitCXXRecordDecl(CXXRecordDecl* record) {
+ if (record->hasDefinition() && record->isCompleteDefinition())
+ record_decls_.push_back(record);
+ return true;
+ }
+
+ // Collect tracing method definitions, but don't traverse method bodies.
+ bool TraverseCXXMethodDecl(CXXMethodDecl* method) {
+ if (method->isThisDeclarationADefinition() && Config::IsTraceMethod(method))
+ trace_decls_.push_back(method);
+ return true;
+ }
+
+ private:
+ RecordVector record_decls_;
+ MethodVector trace_decls_;
+};
+
+// This visitor checks that a finalizer method does not have invalid access to
+// fields that are potentially finalized. A potentially finalized field is
+// either a Member, a heap-allocated collection or an off-heap collection that
+// contains Members. Invalid uses are currently identified as passing the field
+// as the argument of a procedure call or using the -> or [] operators on it.
+class CheckFinalizerVisitor
+ : public RecursiveASTVisitor<CheckFinalizerVisitor> {
+ private:
+ // Simple visitor to determine if the content of a field might be collected
+ // during finalization.
+ class MightBeCollectedVisitor : public EdgeVisitor {
+ public:
+ MightBeCollectedVisitor() : might_be_collected_(false) {}
+ bool might_be_collected() { return might_be_collected_; }
+ void VisitMember(Member* edge) override { might_be_collected_ = true; }
+ void VisitCollection(Collection* edge) override {
+ if (edge->on_heap()) {
+ might_be_collected_ = !edge->is_root();
+ } else {
+ edge->AcceptMembers(this);
+ }
+ }
+
+ private:
+ bool might_be_collected_;
+ };
+
+ public:
+ typedef std::vector<std::pair<MemberExpr*, FieldPoint*> > Errors;
+
+ CheckFinalizerVisitor(RecordCache* cache)
+ : blacklist_context_(false), cache_(cache) {}
+
+ Errors& finalized_fields() { return finalized_fields_; }
+
+ bool WalkUpFromCXXOperatorCallExpr(CXXOperatorCallExpr* expr) {
+ // Only continue the walk-up if the operator is a blacklisted one.
+ switch (expr->getOperator()) {
+ case OO_Arrow:
+ case OO_Subscript:
+ this->WalkUpFromCallExpr(expr);
+ default:
+ return true;
+ }
+ }
+
+ // We consider all non-operator calls to be blacklisted contexts.
+ bool WalkUpFromCallExpr(CallExpr* expr) {
+ bool prev_blacklist_context = blacklist_context_;
+ blacklist_context_ = true;
+ for (size_t i = 0; i < expr->getNumArgs(); ++i)
+ this->TraverseStmt(expr->getArg(i));
+ blacklist_context_ = prev_blacklist_context;
+ return true;
+ }
+
+ bool VisitMemberExpr(MemberExpr* member) {
+ FieldDecl* field = dyn_cast<FieldDecl>(member->getMemberDecl());
+ if (!field)
+ return true;
+
+ RecordInfo* info = cache_->Lookup(field->getParent());
+ if (!info)
+ return true;
+
+ RecordInfo::Fields::iterator it = info->GetFields().find(field);
+ if (it == info->GetFields().end())
+ return true;
+
+ if (blacklist_context_ && MightBeCollected(&it->second))
+ finalized_fields_.push_back(std::make_pair(member, &it->second));
+ return true;
+ }
+
+ bool MightBeCollected(FieldPoint* point) {
+ MightBeCollectedVisitor visitor;
+ point->edge()->Accept(&visitor);
+ return visitor.might_be_collected();
+ }
+
+ private:
+ bool blacklist_context_;
+ Errors finalized_fields_;
+ RecordCache* cache_;
+};
+
+// This visitor checks that a method contains within its body, a call to a
+// method on the provided receiver class. This is used to check manual
+// dispatching for trace and finalize methods.
+class CheckDispatchVisitor : public RecursiveASTVisitor<CheckDispatchVisitor> {
+ public:
+ CheckDispatchVisitor(RecordInfo* receiver)
+ : receiver_(receiver), dispatched_to_receiver_(false) {}
+
+ bool dispatched_to_receiver() { return dispatched_to_receiver_; }
+
+ bool VisitMemberExpr(MemberExpr* member) {
+ if (CXXMethodDecl* fn = dyn_cast<CXXMethodDecl>(member->getMemberDecl())) {
+ if (fn->getParent() == receiver_->record())
+ dispatched_to_receiver_ = true;
+ }
+ return true;
+ }
+
+ private:
+ RecordInfo* receiver_;
+ bool dispatched_to_receiver_;
+};
+
+// This visitor checks a tracing method by traversing its body.
+// - A member field is considered traced if it is referenced in the body.
+// - A base is traced if a base-qualified call to a trace method is found.
+class CheckTraceVisitor : public RecursiveASTVisitor<CheckTraceVisitor> {
+ public:
+ CheckTraceVisitor(CXXMethodDecl* trace, RecordInfo* info)
+ : trace_(trace), info_(info) {}
+
+ // Allow recursive traversal by using VisitMemberExpr.
+ bool VisitMemberExpr(MemberExpr* member) {
+ // If this member expression references a field decl, mark it as traced.
+ if (FieldDecl* field = dyn_cast<FieldDecl>(member->getMemberDecl())) {
+ if (IsTemplateInstantiation(info_->record())) {
+ // Pointer equality on fields does not work for template instantiations.
+ // The trace method refers to fields of the template definition which
+ // are different from the instantiated fields that need to be traced.
+ const string& name = field->getNameAsString();
+ for (RecordInfo::Fields::iterator it = info_->GetFields().begin();
+ it != info_->GetFields().end();
+ ++it) {
+ if (it->first->getNameAsString() == name) {
+ MarkTraced(it);
+ break;
+ }
+ }
+ } else {
+ RecordInfo::Fields::iterator it = info_->GetFields().find(field);
+ if (it != info_->GetFields().end())
+ MarkTraced(it);
+ }
+ return true;
+ }
+
+ // If this is a weak callback function we only check field tracing.
+ if (IsWeakCallback())
+ return true;
+
+ // For method calls, check tracing of bases and other special GC methods.
+ if (CXXMethodDecl* fn = dyn_cast<CXXMethodDecl>(member->getMemberDecl())) {
+ const string& name = fn->getNameAsString();
+ // Check weak callbacks.
+ if (name == kRegisterWeakMembersName) {
+ if (fn->isTemplateInstantiation()) {
+ const TemplateArgumentList& args =
+ *fn->getTemplateSpecializationInfo()->TemplateArguments;
+ // The second template argument is the callback method.
+ if (args.size() > 1 &&
+ args[1].getKind() == TemplateArgument::Declaration) {
+ if (FunctionDecl* callback =
+ dyn_cast<FunctionDecl>(args[1].getAsDecl())) {
+ if (callback->hasBody()) {
+ CheckTraceVisitor nested_visitor(info_);
+ nested_visitor.TraverseStmt(callback->getBody());
+ }
+ }
+ }
+ }
+ return true;
+ }
+
+ // Currently, a manually dispatched class cannot have mixin bases (having
+ // one would add a vtable which we explicitly check against). This means
+ // that we can only make calls to a trace method of the same name. Revisit
+ // this if our mixin/vtable assumption changes.
+ if (Config::IsTraceMethod(fn) &&
+ fn->getName() == trace_->getName() &&
+ member->hasQualifier()) {
+ if (const Type* type = member->getQualifier()->getAsType()) {
+ if (CXXRecordDecl* decl = type->getAsCXXRecordDecl()) {
+ RecordInfo::Bases::iterator it = info_->GetBases().find(decl);
+ if (it != info_->GetBases().end())
+ it->second.MarkTraced();
+ }
+ }
+ }
+ }
+ return true;
+ }
+
+ private:
+ // Nested checking for weak callbacks.
+ CheckTraceVisitor(RecordInfo* info) : trace_(0), info_(info) {}
+
+ bool IsWeakCallback() { return !trace_; }
+
+ void MarkTraced(RecordInfo::Fields::iterator it) {
+ // In a weak callback we can't mark strong fields as traced.
+ if (IsWeakCallback() && !it->second.edge()->IsWeakMember())
+ return;
+ it->second.MarkTraced();
+ }
+
+ CXXMethodDecl* trace_;
+ RecordInfo* info_;
+};
+
+// This visitor checks that the fields of a class and the fields of
+// its part objects don't define GC roots.
+class CheckGCRootsVisitor : public RecursiveEdgeVisitor {
+ public:
+ typedef std::vector<FieldPoint*> RootPath;
+ typedef std::vector<RootPath> Errors;
+
+ CheckGCRootsVisitor() {}
+
+ Errors& gc_roots() { return gc_roots_; }
+
+ bool ContainsGCRoots(RecordInfo* info) {
+ for (RecordInfo::Fields::iterator it = info->GetFields().begin();
+ it != info->GetFields().end();
+ ++it) {
+ current_.push_back(&it->second);
+ it->second.edge()->Accept(this);
+ current_.pop_back();
+ }
+ return !gc_roots_.empty();
+ }
+
+ void VisitValue(Value* edge) override {
+ // TODO: what should we do to check unions?
+ if (edge->value()->record()->isUnion())
+ return;
+
+ // If the value is a part object, then continue checking for roots.
+ for (Context::iterator it = context().begin();
+ it != context().end();
+ ++it) {
+ if (!(*it)->IsCollection())
+ return;
+ }
+ ContainsGCRoots(edge->value());
+ }
+
+ void VisitPersistent(Persistent* edge) override {
+ gc_roots_.push_back(current_);
+ }
+
+ void AtCollection(Collection* edge) override {
+ if (edge->is_root())
+ gc_roots_.push_back(current_);
+ }
+
+ protected:
+ RootPath current_;
+ Errors gc_roots_;
+};
+
+// This visitor checks that the fields of a class are "well formed".
+// - OwnPtr, RefPtr and RawPtr must not point to a GC derived types.
+// - Part objects must not be GC derived types.
+// - An on-heap class must never contain GC roots.
+// - Only stack-allocated types may point to stack-allocated types.
+class CheckFieldsVisitor : public RecursiveEdgeVisitor {
+ public:
+
+ enum Error {
+ kRawPtrToGCManaged,
+ kRefPtrToGCManaged,
+ kOwnPtrToGCManaged,
+ kMemberInUnmanaged,
+ kPtrFromHeapToStack,
+ kGCDerivedPartObject
+ };
+
+ typedef std::vector<std::pair<FieldPoint*, Error> > Errors;
+
+ CheckFieldsVisitor(const BlinkGCPluginOptions& options)
+ : options_(options), current_(0), stack_allocated_host_(false) {}
+
+ Errors& invalid_fields() { return invalid_fields_; }
+
+ bool ContainsInvalidFields(RecordInfo* info) {
+ stack_allocated_host_ = info->IsStackAllocated();
+ managed_host_ = stack_allocated_host_ ||
+ info->IsGCAllocated() ||
+ info->IsNonNewable() ||
+ info->IsOnlyPlacementNewable();
+ for (RecordInfo::Fields::iterator it = info->GetFields().begin();
+ it != info->GetFields().end();
+ ++it) {
+ context().clear();
+ current_ = &it->second;
+ current_->edge()->Accept(this);
+ }
+ return !invalid_fields_.empty();
+ }
+
+ void AtMember(Member* edge) override {
+ if (managed_host_)
+ return;
+ // A member is allowed to appear in the context of a root.
+ for (Context::iterator it = context().begin();
+ it != context().end();
+ ++it) {
+ if ((*it)->Kind() == Edge::kRoot)
+ return;
+ }
+ invalid_fields_.push_back(std::make_pair(current_, kMemberInUnmanaged));
+ }
+
+ void AtValue(Value* edge) override {
+ // TODO: what should we do to check unions?
+ if (edge->value()->record()->isUnion())
+ return;
+
+ if (!stack_allocated_host_ && edge->value()->IsStackAllocated()) {
+ invalid_fields_.push_back(std::make_pair(current_, kPtrFromHeapToStack));
+ return;
+ }
+
+ if (!Parent() &&
+ edge->value()->IsGCDerived() &&
+ !edge->value()->IsGCMixin()) {
+ invalid_fields_.push_back(std::make_pair(current_, kGCDerivedPartObject));
+ return;
+ }
+
+ if (!Parent() || !edge->value()->IsGCAllocated())
+ return;
+
+ // In transition mode, disallow OwnPtr<T>, RawPtr<T> to GC allocated T's,
+ // also disallow T* in stack-allocated types.
+ if (options_.enable_oilpan) {
+ if (Parent()->IsOwnPtr() ||
+ Parent()->IsRawPtrClass() ||
+ (stack_allocated_host_ && Parent()->IsRawPtr())) {
+ invalid_fields_.push_back(std::make_pair(
+ current_, InvalidSmartPtr(Parent())));
+ return;
+ }
+
+ return;
+ }
+
+ if (Parent()->IsRawPtr() || Parent()->IsRefPtr() || Parent()->IsOwnPtr()) {
+ invalid_fields_.push_back(std::make_pair(
+ current_, InvalidSmartPtr(Parent())));
+ return;
+ }
+ }
+
+ void AtCollection(Collection* edge) override {
+ if (edge->on_heap() && Parent() && Parent()->IsOwnPtr())
+ invalid_fields_.push_back(std::make_pair(current_, kOwnPtrToGCManaged));
+ }
+
+ private:
+ Error InvalidSmartPtr(Edge* ptr) {
+ if (ptr->IsRawPtr())
+ return kRawPtrToGCManaged;
+ if (ptr->IsRefPtr())
+ return kRefPtrToGCManaged;
+ if (ptr->IsOwnPtr())
+ return kOwnPtrToGCManaged;
+ assert(false && "Unknown smart pointer kind");
+ }
+
+ const BlinkGCPluginOptions& options_;
+ FieldPoint* current_;
+ bool stack_allocated_host_;
+ bool managed_host_;
+ Errors invalid_fields_;
+};
+
+// Main class containing checks for various invariants of the Blink
+// garbage collection infrastructure.
+class BlinkGCPluginConsumer : public ASTConsumer {
+ public:
+ BlinkGCPluginConsumer(CompilerInstance& instance,
+ const BlinkGCPluginOptions& options)
+ : instance_(instance),
+ diagnostic_(instance.getDiagnostics()),
+ options_(options),
+ json_(0) {
+
+ // Only check structures in the blink, WebCore and WebKit namespaces.
+ options_.checked_namespaces.insert("blink");
+ options_.checked_namespaces.insert("WebCore");
+ options_.checked_namespaces.insert("WebKit");
+
+ // Ignore GC implementation files.
+ options_.ignored_directories.push_back("/heap/");
+
+ // Register warning/error messages.
+ diag_class_must_left_mostly_derive_gc_ = diagnostic_.getCustomDiagID(
+ getErrorLevel(), kClassMustLeftMostlyDeriveGC);
+ diag_class_requires_trace_method_ =
+ diagnostic_.getCustomDiagID(getErrorLevel(), kClassRequiresTraceMethod);
+ diag_base_requires_tracing_ =
+ diagnostic_.getCustomDiagID(getErrorLevel(), kBaseRequiresTracing);
+ diag_fields_require_tracing_ =
+ diagnostic_.getCustomDiagID(getErrorLevel(), kFieldsRequireTracing);
+ diag_class_contains_invalid_fields_ = diagnostic_.getCustomDiagID(
+ getErrorLevel(), kClassContainsInvalidFields);
+ diag_class_contains_gc_root_ =
+ diagnostic_.getCustomDiagID(getErrorLevel(), kClassContainsGCRoot);
+ diag_class_requires_finalization_ = diagnostic_.getCustomDiagID(
+ getErrorLevel(), kClassRequiresFinalization);
+ diag_finalizer_accesses_finalized_field_ = diagnostic_.getCustomDiagID(
+ getErrorLevel(), kFinalizerAccessesFinalizedField);
+ diag_overridden_non_virtual_trace_ = diagnostic_.getCustomDiagID(
+ getErrorLevel(), kOverriddenNonVirtualTrace);
+ diag_missing_trace_dispatch_method_ = diagnostic_.getCustomDiagID(
+ getErrorLevel(), kMissingTraceDispatchMethod);
+ diag_missing_finalize_dispatch_method_ = diagnostic_.getCustomDiagID(
+ getErrorLevel(), kMissingFinalizeDispatchMethod);
+ diag_virtual_and_manual_dispatch_ =
+ diagnostic_.getCustomDiagID(getErrorLevel(), kVirtualAndManualDispatch);
+ diag_missing_trace_dispatch_ =
+ diagnostic_.getCustomDiagID(getErrorLevel(), kMissingTraceDispatch);
+ diag_missing_finalize_dispatch_ =
+ diagnostic_.getCustomDiagID(getErrorLevel(), kMissingFinalizeDispatch);
+ diag_derives_non_stack_allocated_ =
+ diagnostic_.getCustomDiagID(getErrorLevel(), kDerivesNonStackAllocated);
+ diag_class_overrides_new_ =
+ diagnostic_.getCustomDiagID(getErrorLevel(), kClassOverridesNew);
+ diag_class_declares_pure_virtual_trace_ = diagnostic_.getCustomDiagID(
+ getErrorLevel(), kClassDeclaresPureVirtualTrace);
+
+ // Register note messages.
+ diag_base_requires_tracing_note_ = diagnostic_.getCustomDiagID(
+ DiagnosticsEngine::Note, kBaseRequiresTracingNote);
+ diag_field_requires_tracing_note_ = diagnostic_.getCustomDiagID(
+ DiagnosticsEngine::Note, kFieldRequiresTracingNote);
+ diag_raw_ptr_to_gc_managed_class_note_ = diagnostic_.getCustomDiagID(
+ DiagnosticsEngine::Note, kRawPtrToGCManagedClassNote);
+ diag_ref_ptr_to_gc_managed_class_note_ = diagnostic_.getCustomDiagID(
+ DiagnosticsEngine::Note, kRefPtrToGCManagedClassNote);
+ diag_own_ptr_to_gc_managed_class_note_ = diagnostic_.getCustomDiagID(
+ DiagnosticsEngine::Note, kOwnPtrToGCManagedClassNote);
+ diag_stack_allocated_field_note_ = diagnostic_.getCustomDiagID(
+ DiagnosticsEngine::Note, kStackAllocatedFieldNote);
+ diag_member_in_unmanaged_class_note_ = diagnostic_.getCustomDiagID(
+ DiagnosticsEngine::Note, kMemberInUnmanagedClassNote);
+ diag_part_object_to_gc_derived_class_note_ = diagnostic_.getCustomDiagID(
+ DiagnosticsEngine::Note, kPartObjectToGCDerivedClassNote);
+ diag_part_object_contains_gc_root_note_ = diagnostic_.getCustomDiagID(
+ DiagnosticsEngine::Note, kPartObjectContainsGCRootNote);
+ diag_field_contains_gc_root_note_ = diagnostic_.getCustomDiagID(
+ DiagnosticsEngine::Note, kFieldContainsGCRootNote);
+ diag_finalized_field_note_ = diagnostic_.getCustomDiagID(
+ DiagnosticsEngine::Note, kFinalizedFieldNote);
+ diag_user_declared_destructor_note_ = diagnostic_.getCustomDiagID(
+ DiagnosticsEngine::Note, kUserDeclaredDestructorNote);
+ diag_user_declared_finalizer_note_ = diagnostic_.getCustomDiagID(
+ DiagnosticsEngine::Note, kUserDeclaredFinalizerNote);
+ diag_base_requires_finalization_note_ = diagnostic_.getCustomDiagID(
+ DiagnosticsEngine::Note, kBaseRequiresFinalizationNote);
+ diag_field_requires_finalization_note_ = diagnostic_.getCustomDiagID(
+ DiagnosticsEngine::Note, kFieldRequiresFinalizationNote);
+ diag_overridden_non_virtual_trace_note_ = diagnostic_.getCustomDiagID(
+ DiagnosticsEngine::Note, kOverriddenNonVirtualTraceNote);
+ diag_manual_dispatch_method_note_ = diagnostic_.getCustomDiagID(
+ DiagnosticsEngine::Note, kManualDispatchMethodNote);
+ }
+
+ void HandleTranslationUnit(ASTContext& context) override {
+ CollectVisitor visitor;
+ visitor.TraverseDecl(context.getTranslationUnitDecl());
+
+ if (options_.dump_graph) {
+ string err;
+ // TODO: Make createDefaultOutputFile or a shorter createOutputFile work.
+ json_ = JsonWriter::from(instance_.createOutputFile(
+ "", // OutputPath
+ err, // Errors
+ true, // Binary
+ true, // RemoveFileOnSignal
+ instance_.getFrontendOpts().OutputFile, // BaseInput
+ "graph.json", // Extension
+ false, // UseTemporary
+ false, // CreateMissingDirectories
+ 0, // ResultPathName
+ 0)); // TempPathName
+ if (err.empty() && json_) {
+ json_->OpenList();
+ } else {
+ json_ = 0;
+ llvm::errs()
+ << "[blink-gc] "
+ << "Failed to create an output file for the object graph.\n";
+ }
+ }
+
+ for (RecordVector::iterator it = visitor.record_decls().begin();
+ it != visitor.record_decls().end();
+ ++it) {
+ CheckRecord(cache_.Lookup(*it));
+ }
+
+ for (MethodVector::iterator it = visitor.trace_decls().begin();
+ it != visitor.trace_decls().end();
+ ++it) {
+ CheckTracingMethod(*it);
+ }
+
+ if (json_) {
+ json_->CloseList();
+ delete json_;
+ json_ = 0;
+ }
+ }
+
+ // Main entry for checking a record declaration.
+ void CheckRecord(RecordInfo* info) {
+ if (IsIgnored(info))
+ return;
+
+ CXXRecordDecl* record = info->record();
+
+ // TODO: what should we do to check unions?
+ if (record->isUnion())
+ return;
+
+ // If this is the primary template declaration, check its specializations.
+ if (record->isThisDeclarationADefinition() &&
+ record->getDescribedClassTemplate()) {
+ ClassTemplateDecl* tmpl = record->getDescribedClassTemplate();
+ for (ClassTemplateDecl::spec_iterator it = tmpl->spec_begin();
+ it != tmpl->spec_end();
+ ++it) {
+ CheckClass(cache_.Lookup(*it));
+ }
+ return;
+ }
+
+ CheckClass(info);
+ }
+
+ // Check a class-like object (eg, class, specialization, instantiation).
+ void CheckClass(RecordInfo* info) {
+ if (!info)
+ return;
+
+ // Check consistency of stack-allocated hierarchies.
+ if (info->IsStackAllocated()) {
+ for (RecordInfo::Bases::iterator it = info->GetBases().begin();
+ it != info->GetBases().end();
+ ++it) {
+ if (!it->second.info()->IsStackAllocated())
+ ReportDerivesNonStackAllocated(info, &it->second);
+ }
+ }
+
+ if (CXXMethodDecl* trace = info->GetTraceMethod()) {
+ if (trace->isPure())
+ ReportClassDeclaresPureVirtualTrace(info, trace);
+ } else if (info->RequiresTraceMethod()) {
+ ReportClassRequiresTraceMethod(info);
+ }
+
+ {
+ CheckFieldsVisitor visitor(options_);
+ if (visitor.ContainsInvalidFields(info))
+ ReportClassContainsInvalidFields(info, &visitor.invalid_fields());
+ }
+
+ if (info->IsGCDerived()) {
+
+ if (!info->IsGCMixin()) {
+ CheckLeftMostDerived(info);
+ CheckDispatch(info);
+ if (CXXMethodDecl* newop = info->DeclaresNewOperator())
+ ReportClassOverridesNew(info, newop);
+ }
+
+ {
+ CheckGCRootsVisitor visitor;
+ if (visitor.ContainsGCRoots(info))
+ ReportClassContainsGCRoots(info, &visitor.gc_roots());
+ }
+
+ if (info->NeedsFinalization())
+ CheckFinalization(info);
+ }
+
+ DumpClass(info);
+ }
+
+ void CheckLeftMostDerived(RecordInfo* info) {
+ CXXRecordDecl* left_most = info->record();
+ CXXRecordDecl::base_class_iterator it = left_most->bases_begin();
+ while (it != left_most->bases_end()) {
+ left_most = it->getType()->getAsCXXRecordDecl();
+ it = left_most->bases_begin();
+ }
+ if (!Config::IsGCBase(left_most->getName()))
+ ReportClassMustLeftMostlyDeriveGC(info);
+ }
+
+ void CheckDispatch(RecordInfo* info) {
+ bool finalized = info->IsGCFinalized();
+ CXXMethodDecl* trace_dispatch = info->GetTraceDispatchMethod();
+ CXXMethodDecl* finalize_dispatch = info->GetFinalizeDispatchMethod();
+ if (!trace_dispatch && !finalize_dispatch)
+ return;
+
+ CXXRecordDecl* base = trace_dispatch ? trace_dispatch->getParent()
+ : finalize_dispatch->getParent();
+
+ // Check that dispatch methods are defined at the base.
+ if (base == info->record()) {
+ if (!trace_dispatch)
+ ReportMissingTraceDispatchMethod(info);
+ if (finalized && !finalize_dispatch)
+ ReportMissingFinalizeDispatchMethod(info);
+ if (!finalized && finalize_dispatch) {
+ ReportClassRequiresFinalization(info);
+ NoteUserDeclaredFinalizer(finalize_dispatch);
+ }
+ }
+
+ // Check that classes implementing manual dispatch do not have vtables.
+ if (info->record()->isPolymorphic())
+ ReportVirtualAndManualDispatch(
+ info, trace_dispatch ? trace_dispatch : finalize_dispatch);
+
+ // If this is a non-abstract class check that it is dispatched to.
+ // TODO: Create a global variant of this local check. We can only check if
+ // the dispatch body is known in this compilation unit.
+ if (info->IsConsideredAbstract())
+ return;
+
+ const FunctionDecl* defn;
+
+ if (trace_dispatch && trace_dispatch->isDefined(defn)) {
+ CheckDispatchVisitor visitor(info);
+ visitor.TraverseStmt(defn->getBody());
+ if (!visitor.dispatched_to_receiver())
+ ReportMissingTraceDispatch(defn, info);
+ }
+
+ if (finalized && finalize_dispatch && finalize_dispatch->isDefined(defn)) {
+ CheckDispatchVisitor visitor(info);
+ visitor.TraverseStmt(defn->getBody());
+ if (!visitor.dispatched_to_receiver())
+ ReportMissingFinalizeDispatch(defn, info);
+ }
+ }
+
+ // TODO: Should we collect destructors similar to trace methods?
+ void CheckFinalization(RecordInfo* info) {
+ CXXDestructorDecl* dtor = info->record()->getDestructor();
+
+ // For finalized classes, check the finalization method if possible.
+ if (info->IsGCFinalized()) {
+ if (dtor && dtor->hasBody()) {
+ CheckFinalizerVisitor visitor(&cache_);
+ visitor.TraverseCXXMethodDecl(dtor);
+ if (!visitor.finalized_fields().empty()) {
+ ReportFinalizerAccessesFinalizedFields(
+ dtor, &visitor.finalized_fields());
+ }
+ }
+ return;
+ }
+
+ // Don't require finalization of a mixin that has not yet been "mixed in".
+ if (info->IsGCMixin())
+ return;
+
+ // Report the finalization error, and proceed to print possible causes for
+ // the finalization requirement.
+ ReportClassRequiresFinalization(info);
+
+ if (dtor && dtor->isUserProvided())
+ NoteUserDeclaredDestructor(dtor);
+
+ for (RecordInfo::Bases::iterator it = info->GetBases().begin();
+ it != info->GetBases().end();
+ ++it) {
+ if (it->second.info()->NeedsFinalization())
+ NoteBaseRequiresFinalization(&it->second);
+ }
+
+ for (RecordInfo::Fields::iterator it = info->GetFields().begin();
+ it != info->GetFields().end();
+ ++it) {
+ if (it->second.edge()->NeedsFinalization())
+ NoteField(&it->second, diag_field_requires_finalization_note_);
+ }
+ }
+
+ // This is the main entry for tracing method definitions.
+ void CheckTracingMethod(CXXMethodDecl* method) {
+ RecordInfo* parent = cache_.Lookup(method->getParent());
+ if (IsIgnored(parent))
+ return;
+
+ // Check templated tracing methods by checking the template instantiations.
+ // Specialized templates are handled as ordinary classes.
+ if (ClassTemplateDecl* tmpl =
+ parent->record()->getDescribedClassTemplate()) {
+ for (ClassTemplateDecl::spec_iterator it = tmpl->spec_begin();
+ it != tmpl->spec_end();
+ ++it) {
+ // Check trace using each template instantiation as the holder.
+ if (IsTemplateInstantiation(*it))
+ CheckTraceOrDispatchMethod(cache_.Lookup(*it), method);
+ }
+ return;
+ }
+
+ CheckTraceOrDispatchMethod(parent, method);
+ }
+
+ // Determine what type of tracing method this is (dispatch or trace).
+ void CheckTraceOrDispatchMethod(RecordInfo* parent, CXXMethodDecl* method) {
+ bool isTraceAfterDispatch;
+ if (Config::IsTraceMethod(method, &isTraceAfterDispatch)) {
+ if (isTraceAfterDispatch || !parent->GetTraceDispatchMethod()) {
+ CheckTraceMethod(parent, method, isTraceAfterDispatch);
+ }
+ // Dispatch methods are checked when we identify subclasses.
+ }
+ }
+
+ // Check an actual trace method.
+ void CheckTraceMethod(RecordInfo* parent,
+ CXXMethodDecl* trace,
+ bool isTraceAfterDispatch) {
+ // A non-virtual trace method must not override another trace.
+ if (!isTraceAfterDispatch && !trace->isVirtual()) {
+ for (RecordInfo::Bases::iterator it = parent->GetBases().begin();
+ it != parent->GetBases().end();
+ ++it) {
+ RecordInfo* base = it->second.info();
+ // We allow mixin bases to contain a non-virtual trace since it will
+ // never be used for dispatching.
+ if (base->IsGCMixin())
+ continue;
+ if (CXXMethodDecl* other = base->InheritsNonVirtualTrace())
+ ReportOverriddenNonVirtualTrace(parent, trace, other);
+ }
+ }
+
+ CheckTraceVisitor visitor(trace, parent);
+ visitor.TraverseCXXMethodDecl(trace);
+
+ for (RecordInfo::Bases::iterator it = parent->GetBases().begin();
+ it != parent->GetBases().end();
+ ++it) {
+ if (!it->second.IsProperlyTraced())
+ ReportBaseRequiresTracing(parent, trace, it->first);
+ }
+
+ for (RecordInfo::Fields::iterator it = parent->GetFields().begin();
+ it != parent->GetFields().end();
+ ++it) {
+ if (!it->second.IsProperlyTraced()) {
+ // Discontinue once an untraced-field error is found.
+ ReportFieldsRequireTracing(parent, trace);
+ break;
+ }
+ }
+ }
+
+ void DumpClass(RecordInfo* info) {
+ if (!json_)
+ return;
+
+ json_->OpenObject();
+ json_->Write("name", info->record()->getQualifiedNameAsString());
+ json_->Write("loc", GetLocString(info->record()->getLocStart()));
+ json_->CloseObject();
+
+ class DumpEdgeVisitor : public RecursiveEdgeVisitor {
+ public:
+ DumpEdgeVisitor(JsonWriter* json) : json_(json) {}
+ void DumpEdge(RecordInfo* src,
+ RecordInfo* dst,
+ const string& lbl,
+ const Edge::LivenessKind& kind,
+ const string& loc) {
+ json_->OpenObject();
+ json_->Write("src", src->record()->getQualifiedNameAsString());
+ json_->Write("dst", dst->record()->getQualifiedNameAsString());
+ json_->Write("lbl", lbl);
+ json_->Write("kind", kind);
+ json_->Write("loc", loc);
+ json_->Write("ptr",
+ !Parent() ? "val" :
+ Parent()->IsRawPtr() ? "raw" :
+ Parent()->IsRefPtr() ? "ref" :
+ Parent()->IsOwnPtr() ? "own" :
+ (Parent()->IsMember() ||
+ Parent()->IsWeakMember()) ? "mem" :
+ "val");
+ json_->CloseObject();
+ }
+
+ void DumpField(RecordInfo* src, FieldPoint* point, const string& loc) {
+ src_ = src;
+ point_ = point;
+ loc_ = loc;
+ point_->edge()->Accept(this);
+ }
+
+ void AtValue(Value* e) override {
+ // The liveness kind of a path from the point to this value
+ // is given by the innermost place that is non-strong.
+ Edge::LivenessKind kind = Edge::kStrong;
+ if (Config::IsIgnoreCycleAnnotated(point_->field())) {
+ kind = Edge::kWeak;
+ } else {
+ for (Context::iterator it = context().begin();
+ it != context().end();
+ ++it) {
+ Edge::LivenessKind pointer_kind = (*it)->Kind();
+ if (pointer_kind != Edge::kStrong) {
+ kind = pointer_kind;
+ break;
+ }
+ }
+ }
+ DumpEdge(
+ src_, e->value(), point_->field()->getNameAsString(), kind, loc_);
+ }
+
+ private:
+ JsonWriter* json_;
+ RecordInfo* src_;
+ FieldPoint* point_;
+ string loc_;
+ };
+
+ DumpEdgeVisitor visitor(json_);
+
+ RecordInfo::Bases& bases = info->GetBases();
+ for (RecordInfo::Bases::iterator it = bases.begin();
+ it != bases.end();
+ ++it) {
+ visitor.DumpEdge(info,
+ it->second.info(),
+ "<super>",
+ Edge::kStrong,
+ GetLocString(it->second.spec().getLocStart()));
+ }
+
+ RecordInfo::Fields& fields = info->GetFields();
+ for (RecordInfo::Fields::iterator it = fields.begin();
+ it != fields.end();
+ ++it) {
+ visitor.DumpField(info,
+ &it->second,
+ GetLocString(it->second.field()->getLocStart()));
+ }
+ }
+
+ // Adds either a warning or error, based on the current handling of -Werror.
+ DiagnosticsEngine::Level getErrorLevel() {
+ return diagnostic_.getWarningsAsErrors() ? DiagnosticsEngine::Error
+ : DiagnosticsEngine::Warning;
+ }
+
+ const string GetLocString(SourceLocation loc) {
+ const SourceManager& source_manager = instance_.getSourceManager();
+ PresumedLoc ploc = source_manager.getPresumedLoc(loc);
+ if (ploc.isInvalid())
+ return "";
+ string loc_str;
+ llvm::raw_string_ostream OS(loc_str);
+ OS << ploc.getFilename()
+ << ":" << ploc.getLine()
+ << ":" << ploc.getColumn();
+ return OS.str();
+ }
+
+ bool IsIgnored(RecordInfo* record) {
+ return !record ||
+ !InCheckedNamespace(record) ||
+ IsIgnoredClass(record) ||
+ InIgnoredDirectory(record);
+ }
+
+ bool IsIgnoredClass(RecordInfo* info) {
+ // Ignore any class prefixed by SameSizeAs. These are used in
+ // Blink to verify class sizes and don't need checking.
+ const string SameSizeAs = "SameSizeAs";
+ if (info->name().compare(0, SameSizeAs.size(), SameSizeAs) == 0)
+ return true;
+ return options_.ignored_classes.find(info->name()) !=
+ options_.ignored_classes.end();
+ }
+
+ bool InIgnoredDirectory(RecordInfo* info) {
+ string filename;
+ if (!GetFilename(info->record()->getLocStart(), &filename))
+ return false; // TODO: should we ignore non-existing file locations?
+ std::vector<string>::iterator it = options_.ignored_directories.begin();
+ for (; it != options_.ignored_directories.end(); ++it)
+ if (filename.find(*it) != string::npos)
+ return true;
+ return false;
+ }
+
+ bool InCheckedNamespace(RecordInfo* info) {
+ if (!info)
+ return false;
+ for (DeclContext* context = info->record()->getDeclContext();
+ !context->isTranslationUnit();
+ context = context->getParent()) {
+ if (NamespaceDecl* decl = dyn_cast<NamespaceDecl>(context)) {
+ if (options_.checked_namespaces.find(decl->getNameAsString()) !=
+ options_.checked_namespaces.end()) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ bool GetFilename(SourceLocation loc, string* filename) {
+ const SourceManager& source_manager = instance_.getSourceManager();
+ SourceLocation spelling_location = source_manager.getSpellingLoc(loc);
+ PresumedLoc ploc = source_manager.getPresumedLoc(spelling_location);
+ if (ploc.isInvalid()) {
+ // If we're in an invalid location, we're looking at things that aren't
+ // actually stated in the source.
+ return false;
+ }
+ *filename = ploc.getFilename();
+ return true;
+ }
+
+ void ReportClassMustLeftMostlyDeriveGC(RecordInfo* info) {
+ SourceLocation loc = info->record()->getInnerLocStart();
+ SourceManager& manager = instance_.getSourceManager();
+ FullSourceLoc full_loc(loc, manager);
+ diagnostic_.Report(full_loc, diag_class_must_left_mostly_derive_gc_)
+ << info->record();
+ }
+
+ void ReportClassRequiresTraceMethod(RecordInfo* info) {
+ SourceLocation loc = info->record()->getInnerLocStart();
+ SourceManager& manager = instance_.getSourceManager();
+ FullSourceLoc full_loc(loc, manager);
+ diagnostic_.Report(full_loc, diag_class_requires_trace_method_)
+ << info->record();
+
+ for (RecordInfo::Bases::iterator it = info->GetBases().begin();
+ it != info->GetBases().end();
+ ++it) {
+ if (it->second.NeedsTracing().IsNeeded())
+ NoteBaseRequiresTracing(&it->second);
+ }
+
+ for (RecordInfo::Fields::iterator it = info->GetFields().begin();
+ it != info->GetFields().end();
+ ++it) {
+ if (!it->second.IsProperlyTraced())
+ NoteFieldRequiresTracing(info, it->first);
+ }
+ }
+
+ void ReportBaseRequiresTracing(RecordInfo* derived,
+ CXXMethodDecl* trace,
+ CXXRecordDecl* base) {
+ SourceLocation loc = trace->getLocStart();
+ SourceManager& manager = instance_.getSourceManager();
+ FullSourceLoc full_loc(loc, manager);
+ diagnostic_.Report(full_loc, diag_base_requires_tracing_)
+ << base << derived->record();
+ }
+
+ void ReportFieldsRequireTracing(RecordInfo* info, CXXMethodDecl* trace) {
+ SourceLocation loc = trace->getLocStart();
+ SourceManager& manager = instance_.getSourceManager();
+ FullSourceLoc full_loc(loc, manager);
+ diagnostic_.Report(full_loc, diag_fields_require_tracing_)
+ << info->record();
+ for (RecordInfo::Fields::iterator it = info->GetFields().begin();
+ it != info->GetFields().end();
+ ++it) {
+ if (!it->second.IsProperlyTraced())
+ NoteFieldRequiresTracing(info, it->first);
+ }
+ }
+
+ void ReportClassContainsInvalidFields(RecordInfo* info,
+ CheckFieldsVisitor::Errors* errors) {
+ SourceLocation loc = info->record()->getLocStart();
+ SourceManager& manager = instance_.getSourceManager();
+ FullSourceLoc full_loc(loc, manager);
+ diagnostic_.Report(full_loc, diag_class_contains_invalid_fields_)
+ << info->record();
+ for (CheckFieldsVisitor::Errors::iterator it = errors->begin();
+ it != errors->end();
+ ++it) {
+ unsigned error;
+ if (it->second == CheckFieldsVisitor::kRawPtrToGCManaged) {
+ error = diag_raw_ptr_to_gc_managed_class_note_;
+ } else if (it->second == CheckFieldsVisitor::kRefPtrToGCManaged) {
+ error = diag_ref_ptr_to_gc_managed_class_note_;
+ } else if (it->second == CheckFieldsVisitor::kOwnPtrToGCManaged) {
+ error = diag_own_ptr_to_gc_managed_class_note_;
+ } else if (it->second == CheckFieldsVisitor::kMemberInUnmanaged) {
+ error = diag_member_in_unmanaged_class_note_;
+ } else if (it->second == CheckFieldsVisitor::kPtrFromHeapToStack) {
+ error = diag_stack_allocated_field_note_;
+ } else if (it->second == CheckFieldsVisitor::kGCDerivedPartObject) {
+ error = diag_part_object_to_gc_derived_class_note_;
+ } else {
+ assert(false && "Unknown field error");
+ }
+ NoteField(it->first, error);
+ }
+ }
+
+ void ReportClassContainsGCRoots(RecordInfo* info,
+ CheckGCRootsVisitor::Errors* errors) {
+ SourceLocation loc = info->record()->getLocStart();
+ SourceManager& manager = instance_.getSourceManager();
+ FullSourceLoc full_loc(loc, manager);
+ for (CheckGCRootsVisitor::Errors::iterator it = errors->begin();
+ it != errors->end();
+ ++it) {
+ CheckGCRootsVisitor::RootPath::iterator path = it->begin();
+ FieldPoint* point = *path;
+ diagnostic_.Report(full_loc, diag_class_contains_gc_root_)
+ << info->record() << point->field();
+ while (++path != it->end()) {
+ NotePartObjectContainsGCRoot(point);
+ point = *path;
+ }
+ NoteFieldContainsGCRoot(point);
+ }
+ }
+
+ void ReportFinalizerAccessesFinalizedFields(
+ CXXMethodDecl* dtor,
+ CheckFinalizerVisitor::Errors* fields) {
+ for (CheckFinalizerVisitor::Errors::iterator it = fields->begin();
+ it != fields->end();
+ ++it) {
+ SourceLocation loc = it->first->getLocStart();
+ SourceManager& manager = instance_.getSourceManager();
+ FullSourceLoc full_loc(loc, manager);
+ diagnostic_.Report(full_loc, diag_finalizer_accesses_finalized_field_)
+ << dtor << it->second->field();
+ NoteField(it->second, diag_finalized_field_note_);
+ }
+ }
+
+ void ReportClassRequiresFinalization(RecordInfo* info) {
+ SourceLocation loc = info->record()->getInnerLocStart();
+ SourceManager& manager = instance_.getSourceManager();
+ FullSourceLoc full_loc(loc, manager);
+ diagnostic_.Report(full_loc, diag_class_requires_finalization_)
+ << info->record();
+ }
+
+ void ReportOverriddenNonVirtualTrace(RecordInfo* info,
+ CXXMethodDecl* trace,
+ CXXMethodDecl* overridden) {
+ SourceLocation loc = trace->getLocStart();
+ SourceManager& manager = instance_.getSourceManager();
+ FullSourceLoc full_loc(loc, manager);
+ diagnostic_.Report(full_loc, diag_overridden_non_virtual_trace_)
+ << info->record() << overridden->getParent();
+ NoteOverriddenNonVirtualTrace(overridden);
+ }
+
+ void ReportMissingTraceDispatchMethod(RecordInfo* info) {
+ ReportMissingDispatchMethod(info, diag_missing_trace_dispatch_method_);
+ }
+
+ void ReportMissingFinalizeDispatchMethod(RecordInfo* info) {
+ ReportMissingDispatchMethod(info, diag_missing_finalize_dispatch_method_);
+ }
+
+ void ReportMissingDispatchMethod(RecordInfo* info, unsigned error) {
+ SourceLocation loc = info->record()->getInnerLocStart();
+ SourceManager& manager = instance_.getSourceManager();
+ FullSourceLoc full_loc(loc, manager);
+ diagnostic_.Report(full_loc, error) << info->record();
+ }
+
+ void ReportVirtualAndManualDispatch(RecordInfo* info,
+ CXXMethodDecl* dispatch) {
+ SourceLocation loc = info->record()->getInnerLocStart();
+ SourceManager& manager = instance_.getSourceManager();
+ FullSourceLoc full_loc(loc, manager);
+ diagnostic_.Report(full_loc, diag_virtual_and_manual_dispatch_)
+ << info->record();
+ NoteManualDispatchMethod(dispatch);
+ }
+
+ void ReportMissingTraceDispatch(const FunctionDecl* dispatch,
+ RecordInfo* receiver) {
+ ReportMissingDispatch(dispatch, receiver, diag_missing_trace_dispatch_);
+ }
+
+ void ReportMissingFinalizeDispatch(const FunctionDecl* dispatch,
+ RecordInfo* receiver) {
+ ReportMissingDispatch(dispatch, receiver, diag_missing_finalize_dispatch_);
+ }
+
+ void ReportMissingDispatch(const FunctionDecl* dispatch,
+ RecordInfo* receiver,
+ unsigned error) {
+ SourceLocation loc = dispatch->getLocStart();
+ SourceManager& manager = instance_.getSourceManager();
+ FullSourceLoc full_loc(loc, manager);
+ diagnostic_.Report(full_loc, error) << receiver->record();
+ }
+
+ void ReportDerivesNonStackAllocated(RecordInfo* info, BasePoint* base) {
+ SourceLocation loc = base->spec().getLocStart();
+ SourceManager& manager = instance_.getSourceManager();
+ FullSourceLoc full_loc(loc, manager);
+ diagnostic_.Report(full_loc, diag_derives_non_stack_allocated_)
+ << info->record() << base->info()->record();
+ }
+
+ void ReportClassOverridesNew(RecordInfo* info, CXXMethodDecl* newop) {
+ SourceLocation loc = newop->getLocStart();
+ SourceManager& manager = instance_.getSourceManager();
+ FullSourceLoc full_loc(loc, manager);
+ diagnostic_.Report(full_loc, diag_class_overrides_new_) << info->record();
+ }
+
+ void ReportClassDeclaresPureVirtualTrace(RecordInfo* info,
+ CXXMethodDecl* trace) {
+ SourceLocation loc = trace->getLocStart();
+ SourceManager& manager = instance_.getSourceManager();
+ FullSourceLoc full_loc(loc, manager);
+ diagnostic_.Report(full_loc, diag_class_declares_pure_virtual_trace_)
+ << info->record();
+ }
+
+ void NoteManualDispatchMethod(CXXMethodDecl* dispatch) {
+ SourceLocation loc = dispatch->getLocStart();
+ SourceManager& manager = instance_.getSourceManager();
+ FullSourceLoc full_loc(loc, manager);
+ diagnostic_.Report(full_loc, diag_manual_dispatch_method_note_) << dispatch;
+ }
+
+ void NoteBaseRequiresTracing(BasePoint* base) {
+ SourceLocation loc = base->spec().getLocStart();
+ SourceManager& manager = instance_.getSourceManager();
+ FullSourceLoc full_loc(loc, manager);
+ diagnostic_.Report(full_loc, diag_base_requires_tracing_note_)
+ << base->info()->record();
+ }
+
+ void NoteFieldRequiresTracing(RecordInfo* holder, FieldDecl* field) {
+ NoteField(field, diag_field_requires_tracing_note_);
+ }
+
+ void NotePartObjectContainsGCRoot(FieldPoint* point) {
+ FieldDecl* field = point->field();
+ SourceLocation loc = field->getLocStart();
+ SourceManager& manager = instance_.getSourceManager();
+ FullSourceLoc full_loc(loc, manager);
+ diagnostic_.Report(full_loc, diag_part_object_contains_gc_root_note_)
+ << field << field->getParent();
+ }
+
+ void NoteFieldContainsGCRoot(FieldPoint* point) {
+ NoteField(point, diag_field_contains_gc_root_note_);
+ }
+
+ void NoteUserDeclaredDestructor(CXXMethodDecl* dtor) {
+ SourceLocation loc = dtor->getLocStart();
+ SourceManager& manager = instance_.getSourceManager();
+ FullSourceLoc full_loc(loc, manager);
+ diagnostic_.Report(full_loc, diag_user_declared_destructor_note_);
+ }
+
+ void NoteUserDeclaredFinalizer(CXXMethodDecl* dtor) {
+ SourceLocation loc = dtor->getLocStart();
+ SourceManager& manager = instance_.getSourceManager();
+ FullSourceLoc full_loc(loc, manager);
+ diagnostic_.Report(full_loc, diag_user_declared_finalizer_note_);
+ }
+
+ void NoteBaseRequiresFinalization(BasePoint* base) {
+ SourceLocation loc = base->spec().getLocStart();
+ SourceManager& manager = instance_.getSourceManager();
+ FullSourceLoc full_loc(loc, manager);
+ diagnostic_.Report(full_loc, diag_base_requires_finalization_note_)
+ << base->info()->record();
+ }
+
+ void NoteField(FieldPoint* point, unsigned note) {
+ NoteField(point->field(), note);
+ }
+
+ void NoteField(FieldDecl* field, unsigned note) {
+ SourceLocation loc = field->getLocStart();
+ SourceManager& manager = instance_.getSourceManager();
+ FullSourceLoc full_loc(loc, manager);
+ diagnostic_.Report(full_loc, note) << field;
+ }
+
+ void NoteOverriddenNonVirtualTrace(CXXMethodDecl* overridden) {
+ SourceLocation loc = overridden->getLocStart();
+ SourceManager& manager = instance_.getSourceManager();
+ FullSourceLoc full_loc(loc, manager);
+ diagnostic_.Report(full_loc, diag_overridden_non_virtual_trace_note_)
+ << overridden;
+ }
+
+ unsigned diag_class_must_left_mostly_derive_gc_;
+ unsigned diag_class_requires_trace_method_;
+ unsigned diag_base_requires_tracing_;
+ unsigned diag_fields_require_tracing_;
+ unsigned diag_class_contains_invalid_fields_;
+ unsigned diag_class_contains_gc_root_;
+ unsigned diag_class_requires_finalization_;
+ unsigned diag_finalizer_accesses_finalized_field_;
+ unsigned diag_overridden_non_virtual_trace_;
+ unsigned diag_missing_trace_dispatch_method_;
+ unsigned diag_missing_finalize_dispatch_method_;
+ unsigned diag_virtual_and_manual_dispatch_;
+ unsigned diag_missing_trace_dispatch_;
+ unsigned diag_missing_finalize_dispatch_;
+ unsigned diag_derives_non_stack_allocated_;
+ unsigned diag_class_overrides_new_;
+ unsigned diag_class_declares_pure_virtual_trace_;
+
+ unsigned diag_base_requires_tracing_note_;
+ unsigned diag_field_requires_tracing_note_;
+ unsigned diag_raw_ptr_to_gc_managed_class_note_;
+ unsigned diag_ref_ptr_to_gc_managed_class_note_;
+ unsigned diag_own_ptr_to_gc_managed_class_note_;
+ unsigned diag_stack_allocated_field_note_;
+ unsigned diag_member_in_unmanaged_class_note_;
+ unsigned diag_part_object_to_gc_derived_class_note_;
+ unsigned diag_part_object_contains_gc_root_note_;
+ unsigned diag_field_contains_gc_root_note_;
+ unsigned diag_finalized_field_note_;
+ unsigned diag_user_declared_destructor_note_;
+ unsigned diag_user_declared_finalizer_note_;
+ unsigned diag_base_requires_finalization_note_;
+ unsigned diag_field_requires_finalization_note_;
+ unsigned diag_overridden_non_virtual_trace_note_;
+ unsigned diag_manual_dispatch_method_note_;
+
+ CompilerInstance& instance_;
+ DiagnosticsEngine& diagnostic_;
+ BlinkGCPluginOptions options_;
+ RecordCache cache_;
+ JsonWriter* json_;
+};
+
+class BlinkGCPluginAction : public PluginASTAction {
+ public:
+ BlinkGCPluginAction() {}
+
+ protected:
+ // Overridden from PluginASTAction:
+ virtual ASTConsumer* CreateASTConsumer(CompilerInstance& instance,
+ llvm::StringRef ref) {
+ return new BlinkGCPluginConsumer(instance, options_);
+ }
+
+ virtual bool ParseArgs(const CompilerInstance& instance,
+ const std::vector<string>& args) {
+ bool parsed = true;
+
+ for (size_t i = 0; i < args.size() && parsed; ++i) {
+ if (args[i] == "enable-oilpan") {
+ options_.enable_oilpan = true;
+ } else if (args[i] == "dump-graph") {
+ options_.dump_graph = true;
+ } else {
+ parsed = false;
+ llvm::errs() << "Unknown blink-gc-plugin argument: " << args[i] << "\n";
+ }
+ }
+
+ return parsed;
+ }
+
+ private:
+ BlinkGCPluginOptions options_;
+};
+
+} // namespace
+
+static FrontendPluginRegistry::Add<BlinkGCPluginAction> X(
+ "blink-gc-plugin",
+ "Check Blink GC invariants");
diff --git a/chromium/tools/clang/blink_gc_plugin/Config.h b/chromium/tools/clang/blink_gc_plugin/Config.h
new file mode 100644
index 00000000000..765e32ae8db
--- /dev/null
+++ b/chromium/tools/clang/blink_gc_plugin/Config.h
@@ -0,0 +1,173 @@
+// Copyright 2014 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.
+
+// This file defines the names used by GC infrastructure.
+
+#ifndef TOOLS_BLINK_GC_PLUGIN_CONFIG_H_
+#define TOOLS_BLINK_GC_PLUGIN_CONFIG_H_
+
+#include "clang/AST/AST.h"
+#include "clang/AST/Attr.h"
+
+const char kNewOperatorName[] = "operator new";
+const char kCreateName[] = "create";
+const char kTraceName[] = "trace";
+const char kFinalizeName[] = "finalizeGarbageCollectedObject";
+const char kTraceAfterDispatchName[] = "traceAfterDispatch";
+const char kRegisterWeakMembersName[] = "registerWeakMembers";
+const char kHeapAllocatorName[] = "HeapAllocator";
+
+class Config {
+ public:
+ static bool IsMember(const std::string& name) {
+ return name == "Member";
+ }
+
+ static bool IsWeakMember(const std::string& name) {
+ return name == "WeakMember";
+ }
+
+ static bool IsMemberHandle(const std::string& name) {
+ return IsMember(name) ||
+ IsWeakMember(name);
+ }
+
+ static bool IsPersistent(const std::string& name) {
+ return name == "Persistent";
+ }
+
+ static bool IsPersistentHandle(const std::string& name) {
+ return IsPersistent(name) ||
+ IsPersistentGCCollection(name);
+ }
+
+ static bool IsRawPtr(const std::string& name) {
+ return name == "RawPtr";
+ }
+
+ static bool IsRefPtr(const std::string& name) {
+ return name == "RefPtr";
+ }
+
+ static bool IsOwnPtr(const std::string& name) {
+ return name == "OwnPtr";
+ }
+
+ static bool IsWTFCollection(const std::string& name) {
+ return name == "Vector" ||
+ name == "Deque" ||
+ name == "HashSet" ||
+ name == "ListHashSet" ||
+ name == "LinkedHashSet" ||
+ name == "HashCountedSet" ||
+ name == "HashMap";
+ }
+
+ static bool IsGCCollection(const std::string& name) {
+ return name == "HeapVector" ||
+ name == "HeapDeque" ||
+ name == "HeapHashSet" ||
+ name == "HeapListHashSet" ||
+ name == "HeapLinkedHashSet" ||
+ name == "HeapHashCountedSet" ||
+ name == "HeapHashMap" ||
+ IsPersistentGCCollection(name);
+ }
+
+ static bool IsPersistentGCCollection(const std::string& name) {
+ return name == "PersistentHeapVector" ||
+ name == "PersistentHeapDeque" ||
+ name == "PersistentHeapHashSet" ||
+ name == "PersistentHeapListHashSet" ||
+ name == "PersistentHeapLinkedHashSet" ||
+ name == "PersistentHeapHashCountedSet" ||
+ name == "PersistentHeapHashMap";
+ }
+
+ static bool IsHashMap(const std::string& name) {
+ return name == "HashMap" ||
+ name == "HeapHashMap" ||
+ name == "PersistentHeapHashMap";
+ }
+
+ // Assumes name is a valid collection name.
+ static size_t CollectionDimension(const std::string& name) {
+ return (IsHashMap(name) || name == "pair") ? 2 : 1;
+ }
+
+ static bool IsGCMixinBase(const std::string& name) {
+ return name == "GarbageCollectedMixin";
+ }
+
+ static bool IsGCFinalizedBase(const std::string& name) {
+ return name == "GarbageCollectedFinalized" ||
+ name == "RefCountedGarbageCollected";
+ }
+
+ static bool IsGCBase(const std::string& name) {
+ return name == "GarbageCollected" ||
+ IsGCFinalizedBase(name) ||
+ IsGCMixinBase(name);
+ }
+
+ static bool IsAnnotated(clang::Decl* decl, const std::string& anno) {
+ clang::AnnotateAttr* attr = decl->getAttr<clang::AnnotateAttr>();
+ return attr && (attr->getAnnotation() == anno);
+ }
+
+ static bool IsStackAnnotated(clang::Decl* decl) {
+ return IsAnnotated(decl, "blink_stack_allocated");
+ }
+
+ static bool IsIgnoreAnnotated(clang::Decl* decl) {
+ return IsAnnotated(decl, "blink_gc_plugin_ignore");
+ }
+
+ static bool IsIgnoreCycleAnnotated(clang::Decl* decl) {
+ return IsAnnotated(decl, "blink_gc_plugin_ignore_cycle") ||
+ IsIgnoreAnnotated(decl);
+ }
+
+ static bool IsVisitor(const std::string& name) { return name == "Visitor"; }
+
+ static bool IsTraceMethod(clang::CXXMethodDecl* method,
+ bool* isTraceAfterDispatch = 0) {
+ if (method->getNumParams() != 1)
+ return false;
+
+ const std::string& name = method->getNameAsString();
+ if (name != kTraceName && name != kTraceAfterDispatchName)
+ return false;
+
+ const clang::QualType& formal_type = method->getParamDecl(0)->getType();
+ if (!formal_type->isPointerType())
+ return false;
+
+ clang::CXXRecordDecl* pointee_type =
+ formal_type->getPointeeType()->getAsCXXRecordDecl();
+ if (!pointee_type)
+ return false;
+
+ if (!IsVisitor(pointee_type->getName()))
+ return false;
+
+ if (isTraceAfterDispatch)
+ *isTraceAfterDispatch = (name == kTraceAfterDispatchName);
+ return true;
+ }
+
+ static bool StartsWith(const std::string& str, const std::string& prefix) {
+ if (prefix.size() > str.size())
+ return false;
+ return str.compare(0, prefix.size(), prefix) == 0;
+ }
+
+ static bool EndsWith(const std::string& str, const std::string& suffix) {
+ if (suffix.size() > str.size())
+ return false;
+ return str.compare(str.size() - suffix.size(), suffix.size(), suffix) == 0;
+ }
+};
+
+#endif // TOOLS_BLINK_GC_PLUGIN_CONFIG_H_
diff --git a/chromium/tools/clang/blink_gc_plugin/Edge.cpp b/chromium/tools/clang/blink_gc_plugin/Edge.cpp
new file mode 100644
index 00000000000..c56a5764148
--- /dev/null
+++ b/chromium/tools/clang/blink_gc_plugin/Edge.cpp
@@ -0,0 +1,75 @@
+// Copyright 2014 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.
+
+#include "Config.h"
+#include "Edge.h"
+#include "RecordInfo.h"
+
+TracingStatus Value::NeedsTracing(NeedsTracingOption option) {
+ return value_->NeedsTracing(option);
+}
+
+bool Value::NeedsFinalization() { return value_->NeedsFinalization(); }
+bool Collection::NeedsFinalization() { return info_->NeedsFinalization(); }
+
+void RecursiveEdgeVisitor::AtValue(Value*) {}
+void RecursiveEdgeVisitor::AtRawPtr(RawPtr*) {}
+void RecursiveEdgeVisitor::AtRefPtr(RefPtr*) {}
+void RecursiveEdgeVisitor::AtOwnPtr(OwnPtr*) {}
+void RecursiveEdgeVisitor::AtMember(Member*) {}
+void RecursiveEdgeVisitor::AtWeakMember(WeakMember*) {}
+void RecursiveEdgeVisitor::AtPersistent(Persistent*) {}
+void RecursiveEdgeVisitor::AtCollection(Collection*) {}
+
+void RecursiveEdgeVisitor::VisitValue(Value* e) {
+ AtValue(e);
+}
+
+void RecursiveEdgeVisitor::VisitRawPtr(RawPtr* e) {
+ AtRawPtr(e);
+ Enter(e);
+ e->ptr()->Accept(this);
+ Leave();
+}
+
+void RecursiveEdgeVisitor::VisitRefPtr(RefPtr* e) {
+ AtRefPtr(e);
+ Enter(e);
+ e->ptr()->Accept(this);
+ Leave();
+}
+void RecursiveEdgeVisitor::VisitOwnPtr(OwnPtr* e) {
+ AtOwnPtr(e);
+ Enter(e);
+ e->ptr()->Accept(this);
+ Leave();
+}
+
+void RecursiveEdgeVisitor::VisitMember(Member* e) {
+ AtMember(e);
+ Enter(e);
+ e->ptr()->Accept(this);
+ Leave();
+}
+
+void RecursiveEdgeVisitor::VisitWeakMember(WeakMember* e) {
+ AtWeakMember(e);
+ Enter(e);
+ e->ptr()->Accept(this);
+ Leave();
+}
+
+void RecursiveEdgeVisitor::VisitPersistent(Persistent* e) {
+ AtPersistent(e);
+ Enter(e);
+ e->ptr()->Accept(this);
+ Leave();
+}
+
+void RecursiveEdgeVisitor::VisitCollection(Collection* e) {
+ AtCollection(e);
+ Enter(e);
+ e->AcceptMembers(this);
+ Leave();
+}
diff --git a/chromium/tools/clang/blink_gc_plugin/Edge.h b/chromium/tools/clang/blink_gc_plugin/Edge.h
new file mode 100644
index 00000000000..d0b78b58a1f
--- /dev/null
+++ b/chromium/tools/clang/blink_gc_plugin/Edge.h
@@ -0,0 +1,245 @@
+// Copyright 2014 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.
+
+#ifndef TOOLS_BLINK_GC_PLUGIN_EDGE_H_
+#define TOOLS_BLINK_GC_PLUGIN_EDGE_H_
+
+#include <deque>
+
+#include "TracingStatus.h"
+
+class RecordInfo;
+
+class Edge;
+class Value;
+class RawPtr;
+class RefPtr;
+class OwnPtr;
+class Member;
+class WeakMember;
+class Persistent;
+class Collection;
+
+// Bare-bones visitor.
+class EdgeVisitor {
+ public:
+ virtual void VisitValue(Value*) {}
+ virtual void VisitRawPtr(RawPtr*) {}
+ virtual void VisitRefPtr(RefPtr*) {}
+ virtual void VisitOwnPtr(OwnPtr*) {}
+ virtual void VisitMember(Member*) {}
+ virtual void VisitWeakMember(WeakMember*) {}
+ virtual void VisitPersistent(Persistent*) {}
+ virtual void VisitCollection(Collection*) {}
+};
+
+// Recursive edge visitor. The traversed path is accessible in context.
+class RecursiveEdgeVisitor : public EdgeVisitor {
+ public:
+ // Overrides that recursively walk the edges and record the path.
+ virtual void VisitValue(Value*) override;
+ virtual void VisitRawPtr(RawPtr*) override;
+ virtual void VisitRefPtr(RefPtr*) override;
+ virtual void VisitOwnPtr(OwnPtr*) override;
+ virtual void VisitMember(Member*) override;
+ virtual void VisitWeakMember(WeakMember*) override;
+ virtual void VisitPersistent(Persistent*) override;
+ virtual void VisitCollection(Collection*) override;
+
+ protected:
+ typedef std::deque<Edge*> Context;
+ Context& context() { return context_; }
+ Edge* Parent() { return context_.empty() ? 0 : context_.front(); }
+ void Enter(Edge* e) { return context_.push_front(e); }
+ void Leave() { context_.pop_front(); }
+
+ // Default callback to overwrite in visitor subclass.
+ virtual void AtValue(Value*);
+ virtual void AtRawPtr(RawPtr*);
+ virtual void AtRefPtr(RefPtr*);
+ virtual void AtOwnPtr(OwnPtr*);
+ virtual void AtMember(Member*);
+ virtual void AtWeakMember(WeakMember*);
+ virtual void AtPersistent(Persistent*);
+ virtual void AtCollection(Collection*);
+
+ private:
+ Context context_;
+};
+
+// Base class for all edges.
+class Edge {
+ public:
+ enum NeedsTracingOption { kRecursive, kNonRecursive };
+ enum LivenessKind { kWeak, kStrong, kRoot };
+
+ virtual ~Edge() {}
+ virtual LivenessKind Kind() = 0;
+ virtual void Accept(EdgeVisitor*) = 0;
+ virtual bool NeedsFinalization() = 0;
+ virtual TracingStatus NeedsTracing(NeedsTracingOption) {
+ return TracingStatus::Unknown();
+ }
+
+ virtual bool IsValue() { return false; }
+ virtual bool IsRawPtr() { return false; }
+ virtual bool IsRawPtrClass() { return false; }
+ virtual bool IsRefPtr() { return false; }
+ virtual bool IsOwnPtr() { return false; }
+ virtual bool IsMember() { return false; }
+ virtual bool IsWeakMember() { return false; }
+ virtual bool IsPersistent() { return false; }
+ virtual bool IsCollection() { return false; }
+};
+
+// A value edge is a direct edge to some type, eg, part-object edges.
+class Value : public Edge {
+ public:
+ explicit Value(RecordInfo* value) : value_(value) {};
+ bool IsValue() override { return true; }
+ LivenessKind Kind() override { return kStrong; }
+ bool NeedsFinalization() override;
+ TracingStatus NeedsTracing(NeedsTracingOption) override;
+ void Accept(EdgeVisitor* visitor) override { visitor->VisitValue(this); }
+ RecordInfo* value() { return value_; }
+
+ private:
+ RecordInfo* value_;
+};
+
+// Shared base for smart-pointer edges.
+class PtrEdge : public Edge {
+ public:
+ ~PtrEdge() { delete ptr_; }
+ Edge* ptr() { return ptr_; }
+ protected:
+ PtrEdge(Edge* ptr) : ptr_(ptr) {
+ assert(ptr && "EdgePtr pointer must be non-null");
+ }
+ private:
+ Edge* ptr_;
+};
+
+class RawPtr : public PtrEdge {
+ public:
+ explicit RawPtr(Edge* ptr, bool is_ptr_class)
+ : PtrEdge(ptr), is_ptr_class_(is_ptr_class) { }
+ bool IsRawPtr() { return true; }
+ bool IsRawPtrClass() { return is_ptr_class_; }
+ LivenessKind Kind() { return kWeak; }
+ bool NeedsFinalization() { return false; }
+ TracingStatus NeedsTracing(NeedsTracingOption) {
+ return TracingStatus::Unneeded();
+ }
+ void Accept(EdgeVisitor* visitor) { visitor->VisitRawPtr(this); }
+ private:
+ bool is_ptr_class_;
+};
+
+class RefPtr : public PtrEdge {
+ public:
+ explicit RefPtr(Edge* ptr) : PtrEdge(ptr) { }
+ bool IsRefPtr() { return true; }
+ LivenessKind Kind() { return kStrong; }
+ bool NeedsFinalization() { return true; }
+ TracingStatus NeedsTracing(NeedsTracingOption) {
+ return TracingStatus::Unneeded();
+ }
+ void Accept(EdgeVisitor* visitor) { visitor->VisitRefPtr(this); }
+};
+
+class OwnPtr : public PtrEdge {
+ public:
+ explicit OwnPtr(Edge* ptr) : PtrEdge(ptr) { }
+ bool IsOwnPtr() { return true; }
+ LivenessKind Kind() { return kStrong; }
+ bool NeedsFinalization() { return true; }
+ TracingStatus NeedsTracing(NeedsTracingOption) {
+ return TracingStatus::Unneeded();
+ }
+ void Accept(EdgeVisitor* visitor) { visitor->VisitOwnPtr(this); }
+};
+
+class Member : public PtrEdge {
+ public:
+ explicit Member(Edge* ptr) : PtrEdge(ptr) { }
+ bool IsMember() { return true; }
+ LivenessKind Kind() { return kStrong; }
+ bool NeedsFinalization() { return false; }
+ TracingStatus NeedsTracing(NeedsTracingOption) {
+ return TracingStatus::Needed();
+ }
+ void Accept(EdgeVisitor* visitor) { visitor->VisitMember(this); }
+};
+
+class WeakMember : public PtrEdge {
+ public:
+ explicit WeakMember(Edge* ptr) : PtrEdge(ptr) { }
+ bool IsWeakMember() { return true; }
+ LivenessKind Kind() { return kWeak; }
+ bool NeedsFinalization() { return false; }
+ TracingStatus NeedsTracing(NeedsTracingOption) {
+ return TracingStatus::Needed();
+ }
+ void Accept(EdgeVisitor* visitor) { visitor->VisitWeakMember(this); }
+};
+
+class Persistent : public PtrEdge {
+ public:
+ explicit Persistent(Edge* ptr) : PtrEdge(ptr) { }
+ bool IsPersistent() { return true; }
+ LivenessKind Kind() { return kRoot; }
+ bool NeedsFinalization() { return true; }
+ TracingStatus NeedsTracing(NeedsTracingOption) {
+ return TracingStatus::Unneeded();
+ }
+ void Accept(EdgeVisitor* visitor) { visitor->VisitPersistent(this); }
+};
+
+class Collection : public Edge {
+ public:
+ typedef std::vector<Edge*> Members;
+ Collection(RecordInfo* info, bool on_heap, bool is_root)
+ : info_(info),
+ on_heap_(on_heap),
+ is_root_(is_root) {}
+ ~Collection() {
+ for (Members::iterator it = members_.begin(); it != members_.end(); ++it) {
+ assert(*it && "Collection-edge members must be non-null");
+ delete *it;
+ }
+ }
+ bool IsCollection() { return true; }
+ LivenessKind Kind() { return is_root_ ? kRoot : kStrong; }
+ bool on_heap() { return on_heap_; }
+ bool is_root() { return is_root_; }
+ Members& members() { return members_; }
+ void Accept(EdgeVisitor* visitor) { visitor->VisitCollection(this); }
+ void AcceptMembers(EdgeVisitor* visitor) {
+ for (Members::iterator it = members_.begin(); it != members_.end(); ++it)
+ (*it)->Accept(visitor);
+ }
+ bool NeedsFinalization();
+ TracingStatus NeedsTracing(NeedsTracingOption) {
+ if (is_root_)
+ return TracingStatus::Unneeded();
+ if (on_heap_)
+ return TracingStatus::Needed();
+ // For off-heap collections, determine tracing status of members.
+ TracingStatus status = TracingStatus::Unneeded();
+ for (Members::iterator it = members_.begin(); it != members_.end(); ++it) {
+ // Do a non-recursive test here since members could equal the holder.
+ status = status.LUB((*it)->NeedsTracing(kNonRecursive));
+ }
+ return status;
+ }
+
+ private:
+ RecordInfo* info_;
+ Members members_;
+ bool on_heap_;
+ bool is_root_;
+};
+
+#endif // TOOLS_BLINK_GC_PLUGIN_EDGE_H_
diff --git a/chromium/tools/clang/blink_gc_plugin/JsonWriter.h b/chromium/tools/clang/blink_gc_plugin/JsonWriter.h
new file mode 100644
index 00000000000..54a87aae59e
--- /dev/null
+++ b/chromium/tools/clang/blink_gc_plugin/JsonWriter.h
@@ -0,0 +1,73 @@
+// Copyright 2014 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.
+
+#ifndef TOOLS_BLINK_GC_PLUGIN_JSON_WRITER_H_
+#define TOOLS_BLINK_GC_PLUGIN_JSON_WRITER_H_
+
+#include "llvm/Support/raw_ostream.h"
+
+// Helper to write information for the points-to graph.
+class JsonWriter {
+ public:
+ static JsonWriter* from(llvm::raw_fd_ostream* os) {
+ return os ? new JsonWriter(os) : 0;
+ }
+ ~JsonWriter() {
+ os_.close();
+ }
+ void OpenList() {
+ Separator();
+ os_ << "[";
+ state_.push(false);
+ }
+ void OpenList(const std::string key) {
+ Write(key);
+ os_ << ":";
+ OpenList();
+ }
+ void CloseList() {
+ os_ << "]";
+ state_.pop();
+ }
+ void OpenObject() {
+ Separator();
+ os_ << "{";
+ state_.push(false);
+ }
+ void CloseObject() {
+ os_ << "}\n";
+ state_.pop();
+ }
+ void Write(const size_t val) {
+ Separator();
+ os_ << val;
+ }
+ void Write(const std::string val) {
+ Separator();
+ os_ << "\"" << val << "\"";
+ }
+ void Write(const std::string key, const size_t val) {
+ Separator();
+ os_ << "\"" << key << "\":" << val;
+ }
+ void Write(const std::string key, const std::string val) {
+ Separator();
+ os_ << "\"" << key << "\":\"" << val << "\"";
+ }
+ private:
+ JsonWriter(llvm::raw_fd_ostream* os) : os_(*os) {}
+ void Separator() {
+ if (state_.empty())
+ return;
+ if (state_.top()) {
+ os_ << ",";
+ return;
+ }
+ state_.top() = true;
+ }
+ llvm::raw_fd_ostream& os_;
+ std::stack<bool> state_;
+};
+
+#endif // TOOLS_BLINK_GC_PLUGIN_JSON_WRITER_H_
diff --git a/chromium/tools/clang/blink_gc_plugin/Makefile b/chromium/tools/clang/blink_gc_plugin/Makefile
new file mode 100644
index 00000000000..0b274489a4a
--- /dev/null
+++ b/chromium/tools/clang/blink_gc_plugin/Makefile
@@ -0,0 +1,21 @@
+# This file requires the clang build system, at least for now. So to use this
+# Makefile, you should execute the following commands to copy this directory
+# into a clang checkout:
+#
+# cp -R <this directory> third_party/llvm/tools/clang/tools/chrome-plugin
+# cd third_party/llvm/tools/clang/tools/chrome-plugin
+# make
+
+CLANG_LEVEL := ../..
+
+# This line is read by update.sh and other scripts in tools/clang/scripts
+LIBRARYNAME = BlinkGCPlugin_8
+
+LINK_LIBS_IN_SHARED = 0
+SHARED_LIBRARY = 1
+
+include $(CLANG_LEVEL)/Makefile
+
+ifeq ($(OS),Darwin)
+ LDFLAGS+=-Wl,-undefined,dynamic_lookup
+endif
diff --git a/chromium/tools/clang/blink_gc_plugin/NeedsTracing.h b/chromium/tools/clang/blink_gc_plugin/NeedsTracing.h
new file mode 100644
index 00000000000..cf4c2c1f70a
--- /dev/null
+++ b/chromium/tools/clang/blink_gc_plugin/NeedsTracing.h
@@ -0,0 +1,31 @@
+// Copyright 2014 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.
+
+// NeedsTracing is a three-point value ordered by unneeded < unknown < needed.
+// Unneeded means that the point definitively does not need to be traced.
+
+#ifndef TOOLS_BLINK_GC_PLUGIN_NEEDS_TRACING_H_
+#define TOOLS_BLINK_GC_PLUGIN_NEEDS_TRACING_H_
+
+class NeedsTracing {
+ public:
+ static NeedsTracing Unneeded() { return kUnneeded; }
+ static NeedsTracing Unknown() { return kUnknown; }
+ static NeedsTracing Needed() { return kNeeded; }
+ bool IsUnneeded() { return value_ == kUnneeded; }
+ bool IsUnknown() { return value_ == kUnknown; }
+ bool IsNeeded() { return value_ == kNeeded; }
+ NeedsTracing LUB(const NeedsTracing& other) {
+ return value_ > other.value_ ? value_ : other.value_;
+ }
+ bool operator==(const NeedsTracing& other) {
+ return value_ == other.value_;
+ }
+ private:
+ enum Value { kUnneeded, kUnknown, kNeeded };
+ NeedsTracing(Value value) : value_(value) {}
+ Value value_;
+};
+
+#endif // TOOLS_BLINK_GC_PLUGIN_NEEDS_TRACING_H_
diff --git a/chromium/tools/clang/blink_gc_plugin/OWNERS b/chromium/tools/clang/blink_gc_plugin/OWNERS
new file mode 100644
index 00000000000..2eb596cfdc9
--- /dev/null
+++ b/chromium/tools/clang/blink_gc_plugin/OWNERS
@@ -0,0 +1,3 @@
+zerny@chromium.org
+vegorov@chromium.org
+ager@chromium.org
diff --git a/chromium/tools/clang/blink_gc_plugin/README.chromium b/chromium/tools/clang/blink_gc_plugin/README.chromium
new file mode 100644
index 00000000000..294833c3cf8
--- /dev/null
+++ b/chromium/tools/clang/blink_gc_plugin/README.chromium
@@ -0,0 +1,2 @@
+This clang plugin checks various invariants of the Blink garbage
+collection infrastructure.
diff --git a/chromium/tools/clang/blink_gc_plugin/RecordInfo.cpp b/chromium/tools/clang/blink_gc_plugin/RecordInfo.cpp
new file mode 100644
index 00000000000..5250eaa084d
--- /dev/null
+++ b/chromium/tools/clang/blink_gc_plugin/RecordInfo.cpp
@@ -0,0 +1,515 @@
+// Copyright 2014 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.
+
+#include "Config.h"
+#include "RecordInfo.h"
+
+using namespace clang;
+using std::string;
+
+RecordInfo::RecordInfo(CXXRecordDecl* record, RecordCache* cache)
+ : cache_(cache),
+ record_(record),
+ name_(record->getName()),
+ fields_need_tracing_(TracingStatus::Unknown()),
+ bases_(0),
+ fields_(0),
+ is_stack_allocated_(kNotComputed),
+ is_non_newable_(kNotComputed),
+ is_only_placement_newable_(kNotComputed),
+ determined_trace_methods_(false),
+ trace_method_(0),
+ trace_dispatch_method_(0),
+ finalize_dispatch_method_(0),
+ is_gc_derived_(false),
+ base_paths_(0) {}
+
+RecordInfo::~RecordInfo() {
+ delete fields_;
+ delete bases_;
+ delete base_paths_;
+}
+
+// Get |count| number of template arguments. Returns false if there
+// are fewer than |count| arguments or any of the arguments are not
+// of a valid Type structure. If |count| is non-positive, all
+// arguments are collected.
+bool RecordInfo::GetTemplateArgs(size_t count, TemplateArgs* output_args) {
+ ClassTemplateSpecializationDecl* tmpl =
+ dyn_cast<ClassTemplateSpecializationDecl>(record_);
+ if (!tmpl)
+ return false;
+ const TemplateArgumentList& args = tmpl->getTemplateArgs();
+ if (args.size() < count)
+ return false;
+ if (count <= 0)
+ count = args.size();
+ for (unsigned i = 0; i < count; ++i) {
+ TemplateArgument arg = args[i];
+ if (arg.getKind() == TemplateArgument::Type && !arg.getAsType().isNull()) {
+ output_args->push_back(arg.getAsType().getTypePtr());
+ } else {
+ return false;
+ }
+ }
+ return true;
+}
+
+// Test if a record is a HeapAllocated collection.
+bool RecordInfo::IsHeapAllocatedCollection() {
+ if (!Config::IsGCCollection(name_) && !Config::IsWTFCollection(name_))
+ return false;
+
+ TemplateArgs args;
+ if (GetTemplateArgs(0, &args)) {
+ for (TemplateArgs::iterator it = args.begin(); it != args.end(); ++it) {
+ if (CXXRecordDecl* decl = (*it)->getAsCXXRecordDecl())
+ if (decl->getName() == kHeapAllocatorName)
+ return true;
+ }
+ }
+
+ return Config::IsGCCollection(name_);
+}
+
+static bool IsGCBaseCallback(const CXXBaseSpecifier* specifier,
+ CXXBasePath& path,
+ void* data) {
+ if (CXXRecordDecl* record = specifier->getType()->getAsCXXRecordDecl())
+ return Config::IsGCBase(record->getName());
+ return false;
+}
+
+// Test if a record is derived from a garbage collected base.
+bool RecordInfo::IsGCDerived() {
+ // If already computed, return the known result.
+ if (base_paths_)
+ return is_gc_derived_;
+
+ base_paths_ = new CXXBasePaths(true, true, false);
+
+ if (!record_->hasDefinition())
+ return false;
+
+ // The base classes are not themselves considered garbage collected objects.
+ if (Config::IsGCBase(name_))
+ return false;
+
+ // Walk the inheritance tree to find GC base classes.
+ is_gc_derived_ = record_->lookupInBases(IsGCBaseCallback, 0, *base_paths_);
+ return is_gc_derived_;
+}
+
+bool RecordInfo::IsGCFinalized() {
+ if (!IsGCDerived())
+ return false;
+ for (CXXBasePaths::paths_iterator it = base_paths_->begin();
+ it != base_paths_->end();
+ ++it) {
+ const CXXBasePathElement& elem = (*it)[it->size() - 1];
+ CXXRecordDecl* base = elem.Base->getType()->getAsCXXRecordDecl();
+ if (Config::IsGCFinalizedBase(base->getName()))
+ return true;
+ }
+ return false;
+}
+
+// A GC mixin is a class that inherits from a GC mixin base and has
+// not yet been "mixed in" with another GC base class.
+bool RecordInfo::IsGCMixin() {
+ if (!IsGCDerived() || base_paths_->begin() == base_paths_->end())
+ return false;
+ for (CXXBasePaths::paths_iterator it = base_paths_->begin();
+ it != base_paths_->end();
+ ++it) {
+ // Get the last element of the path.
+ const CXXBasePathElement& elem = (*it)[it->size() - 1];
+ CXXRecordDecl* base = elem.Base->getType()->getAsCXXRecordDecl();
+ // If it is not a mixin base we are done.
+ if (!Config::IsGCMixinBase(base->getName()))
+ return false;
+ }
+ // This is a mixin if all GC bases are mixins.
+ return true;
+}
+
+// Test if a record is allocated on the managed heap.
+bool RecordInfo::IsGCAllocated() {
+ return IsGCDerived() || IsHeapAllocatedCollection();
+}
+
+RecordInfo* RecordCache::Lookup(CXXRecordDecl* record) {
+ // Ignore classes annotated with the GC_PLUGIN_IGNORE macro.
+ if (!record || Config::IsIgnoreAnnotated(record))
+ return 0;
+ Cache::iterator it = cache_.find(record);
+ if (it != cache_.end())
+ return &it->second;
+ return &cache_.insert(std::make_pair(record, RecordInfo(record, this)))
+ .first->second;
+}
+
+bool RecordInfo::IsStackAllocated() {
+ if (is_stack_allocated_ == kNotComputed) {
+ is_stack_allocated_ = kFalse;
+ for (Bases::iterator it = GetBases().begin();
+ it != GetBases().end();
+ ++it) {
+ if (it->second.info()->IsStackAllocated()) {
+ is_stack_allocated_ = kTrue;
+ return is_stack_allocated_;
+ }
+ }
+ for (CXXRecordDecl::method_iterator it = record_->method_begin();
+ it != record_->method_end();
+ ++it) {
+ if (it->getNameAsString() == kNewOperatorName &&
+ it->isDeleted() &&
+ Config::IsStackAnnotated(*it)) {
+ is_stack_allocated_ = kTrue;
+ return is_stack_allocated_;
+ }
+ }
+ }
+ return is_stack_allocated_;
+}
+
+bool RecordInfo::IsNonNewable() {
+ if (is_non_newable_ == kNotComputed) {
+ bool deleted = false;
+ bool all_deleted = true;
+ for (CXXRecordDecl::method_iterator it = record_->method_begin();
+ it != record_->method_end();
+ ++it) {
+ if (it->getNameAsString() == kNewOperatorName) {
+ deleted = it->isDeleted();
+ all_deleted = all_deleted && deleted;
+ }
+ }
+ is_non_newable_ = (deleted && all_deleted) ? kTrue : kFalse;
+ }
+ return is_non_newable_;
+}
+
+bool RecordInfo::IsOnlyPlacementNewable() {
+ if (is_only_placement_newable_ == kNotComputed) {
+ bool placement = false;
+ bool new_deleted = false;
+ for (CXXRecordDecl::method_iterator it = record_->method_begin();
+ it != record_->method_end();
+ ++it) {
+ if (it->getNameAsString() == kNewOperatorName) {
+ if (it->getNumParams() == 1) {
+ new_deleted = it->isDeleted();
+ } else if (it->getNumParams() == 2) {
+ placement = !it->isDeleted();
+ }
+ }
+ }
+ is_only_placement_newable_ = (placement && new_deleted) ? kTrue : kFalse;
+ }
+ return is_only_placement_newable_;
+}
+
+CXXMethodDecl* RecordInfo::DeclaresNewOperator() {
+ for (CXXRecordDecl::method_iterator it = record_->method_begin();
+ it != record_->method_end();
+ ++it) {
+ if (it->getNameAsString() == kNewOperatorName && it->getNumParams() == 1)
+ return *it;
+ }
+ return 0;
+}
+
+// An object requires a tracing method if it has any fields that need tracing
+// or if it inherits from multiple bases that need tracing.
+bool RecordInfo::RequiresTraceMethod() {
+ if (IsStackAllocated())
+ return false;
+ unsigned bases_with_trace = 0;
+ for (Bases::iterator it = GetBases().begin(); it != GetBases().end(); ++it) {
+ if (it->second.NeedsTracing().IsNeeded())
+ ++bases_with_trace;
+ }
+ if (bases_with_trace > 1)
+ return true;
+ GetFields();
+ return fields_need_tracing_.IsNeeded();
+}
+
+// Get the actual tracing method (ie, can be traceAfterDispatch if there is a
+// dispatch method).
+CXXMethodDecl* RecordInfo::GetTraceMethod() {
+ DetermineTracingMethods();
+ return trace_method_;
+}
+
+// Get the static trace dispatch method.
+CXXMethodDecl* RecordInfo::GetTraceDispatchMethod() {
+ DetermineTracingMethods();
+ return trace_dispatch_method_;
+}
+
+CXXMethodDecl* RecordInfo::GetFinalizeDispatchMethod() {
+ DetermineTracingMethods();
+ return finalize_dispatch_method_;
+}
+
+RecordInfo::Bases& RecordInfo::GetBases() {
+ if (!bases_)
+ bases_ = CollectBases();
+ return *bases_;
+}
+
+bool RecordInfo::InheritsTrace() {
+ if (GetTraceMethod())
+ return true;
+ for (Bases::iterator it = GetBases().begin(); it != GetBases().end(); ++it) {
+ if (it->second.info()->InheritsTrace())
+ return true;
+ }
+ return false;
+}
+
+CXXMethodDecl* RecordInfo::InheritsNonVirtualTrace() {
+ if (CXXMethodDecl* trace = GetTraceMethod())
+ return trace->isVirtual() ? 0 : trace;
+ for (Bases::iterator it = GetBases().begin(); it != GetBases().end(); ++it) {
+ if (CXXMethodDecl* trace = it->second.info()->InheritsNonVirtualTrace())
+ return trace;
+ }
+ return 0;
+}
+
+// A (non-virtual) class is considered abstract in Blink if it has
+// no public constructors and no create methods.
+bool RecordInfo::IsConsideredAbstract() {
+ for (CXXRecordDecl::ctor_iterator it = record_->ctor_begin();
+ it != record_->ctor_end();
+ ++it) {
+ if (!it->isCopyOrMoveConstructor() && it->getAccess() == AS_public)
+ return false;
+ }
+ for (CXXRecordDecl::method_iterator it = record_->method_begin();
+ it != record_->method_end();
+ ++it) {
+ if (it->getNameAsString() == kCreateName)
+ return false;
+ }
+ return true;
+}
+
+RecordInfo::Bases* RecordInfo::CollectBases() {
+ // Compute the collection locally to avoid inconsistent states.
+ Bases* bases = new Bases;
+ if (!record_->hasDefinition())
+ return bases;
+ for (CXXRecordDecl::base_class_iterator it = record_->bases_begin();
+ it != record_->bases_end();
+ ++it) {
+ const CXXBaseSpecifier& spec = *it;
+ RecordInfo* info = cache_->Lookup(spec.getType());
+ if (!info)
+ continue;
+ CXXRecordDecl* base = info->record();
+ TracingStatus status = info->InheritsTrace()
+ ? TracingStatus::Needed()
+ : TracingStatus::Unneeded();
+ bases->insert(std::make_pair(base, BasePoint(spec, info, status)));
+ }
+ return bases;
+}
+
+RecordInfo::Fields& RecordInfo::GetFields() {
+ if (!fields_)
+ fields_ = CollectFields();
+ return *fields_;
+}
+
+RecordInfo::Fields* RecordInfo::CollectFields() {
+ // Compute the collection locally to avoid inconsistent states.
+ Fields* fields = new Fields;
+ if (!record_->hasDefinition())
+ return fields;
+ TracingStatus fields_status = TracingStatus::Unneeded();
+ for (RecordDecl::field_iterator it = record_->field_begin();
+ it != record_->field_end();
+ ++it) {
+ FieldDecl* field = *it;
+ // Ignore fields annotated with the GC_PLUGIN_IGNORE macro.
+ if (Config::IsIgnoreAnnotated(field))
+ continue;
+ if (Edge* edge = CreateEdge(field->getType().getTypePtrOrNull())) {
+ fields_status = fields_status.LUB(edge->NeedsTracing(Edge::kRecursive));
+ fields->insert(std::make_pair(field, FieldPoint(field, edge)));
+ }
+ }
+ fields_need_tracing_ = fields_status;
+ return fields;
+}
+
+void RecordInfo::DetermineTracingMethods() {
+ if (determined_trace_methods_)
+ return;
+ determined_trace_methods_ = true;
+ if (Config::IsGCBase(name_))
+ return;
+ CXXMethodDecl* trace = 0;
+ CXXMethodDecl* traceAfterDispatch = 0;
+ bool isTraceAfterDispatch;
+ for (CXXRecordDecl::method_iterator it = record_->method_begin();
+ it != record_->method_end();
+ ++it) {
+ if (Config::IsTraceMethod(*it, &isTraceAfterDispatch)) {
+ if (isTraceAfterDispatch) {
+ traceAfterDispatch = *it;
+ } else {
+ trace = *it;
+ }
+ } else if (it->getNameAsString() == kFinalizeName) {
+ finalize_dispatch_method_ = *it;
+ }
+ }
+ if (traceAfterDispatch) {
+ trace_method_ = traceAfterDispatch;
+ trace_dispatch_method_ = trace;
+ } else {
+ // TODO: Can we never have a dispatch method called trace without the same
+ // class defining a traceAfterDispatch method?
+ trace_method_ = trace;
+ trace_dispatch_method_ = 0;
+ }
+ if (trace_dispatch_method_ && finalize_dispatch_method_)
+ return;
+ // If this class does not define dispatching methods inherit them.
+ for (Bases::iterator it = GetBases().begin(); it != GetBases().end(); ++it) {
+ // TODO: Does it make sense to inherit multiple dispatch methods?
+ if (CXXMethodDecl* dispatch = it->second.info()->GetTraceDispatchMethod()) {
+ assert(!trace_dispatch_method_ && "Multiple trace dispatching methods");
+ trace_dispatch_method_ = dispatch;
+ }
+ if (CXXMethodDecl* dispatch =
+ it->second.info()->GetFinalizeDispatchMethod()) {
+ assert(!finalize_dispatch_method_ &&
+ "Multiple finalize dispatching methods");
+ finalize_dispatch_method_ = dispatch;
+ }
+ }
+}
+
+// TODO: Add classes with a finalize() method that specialize FinalizerTrait.
+bool RecordInfo::NeedsFinalization() {
+ return record_->hasNonTrivialDestructor();
+}
+
+// A class needs tracing if:
+// - it is allocated on the managed heap,
+// - it is derived from a class that needs tracing, or
+// - it contains fields that need tracing.
+// TODO: Defining NeedsTracing based on whether a class defines a trace method
+// (of the proper signature) over approximates too much. The use of transition
+// types causes some classes to have trace methods without them needing to be
+// traced.
+TracingStatus RecordInfo::NeedsTracing(Edge::NeedsTracingOption option) {
+ if (IsGCAllocated())
+ return TracingStatus::Needed();
+
+ if (IsStackAllocated())
+ return TracingStatus::Unneeded();
+
+ for (Bases::iterator it = GetBases().begin(); it != GetBases().end(); ++it) {
+ if (it->second.info()->NeedsTracing(option).IsNeeded())
+ return TracingStatus::Needed();
+ }
+
+ if (option == Edge::kRecursive)
+ GetFields();
+
+ return fields_need_tracing_;
+}
+
+Edge* RecordInfo::CreateEdge(const Type* type) {
+ if (!type) {
+ return 0;
+ }
+
+ if (type->isPointerType()) {
+ if (Edge* ptr = CreateEdge(type->getPointeeType().getTypePtrOrNull()))
+ return new RawPtr(ptr, false);
+ return 0;
+ }
+
+ RecordInfo* info = cache_->Lookup(type);
+
+ // If the type is neither a pointer or a C++ record we ignore it.
+ if (!info) {
+ return 0;
+ }
+
+ TemplateArgs args;
+
+ if (Config::IsRawPtr(info->name()) && info->GetTemplateArgs(1, &args)) {
+ if (Edge* ptr = CreateEdge(args[0]))
+ return new RawPtr(ptr, true);
+ return 0;
+ }
+
+ if (Config::IsRefPtr(info->name()) && info->GetTemplateArgs(1, &args)) {
+ if (Edge* ptr = CreateEdge(args[0]))
+ return new RefPtr(ptr);
+ return 0;
+ }
+
+ if (Config::IsOwnPtr(info->name()) && info->GetTemplateArgs(1, &args)) {
+ if (Edge* ptr = CreateEdge(args[0]))
+ return new OwnPtr(ptr);
+ return 0;
+ }
+
+ if (Config::IsMember(info->name()) && info->GetTemplateArgs(1, &args)) {
+ if (Edge* ptr = CreateEdge(args[0]))
+ return new Member(ptr);
+ return 0;
+ }
+
+ if (Config::IsWeakMember(info->name()) && info->GetTemplateArgs(1, &args)) {
+ if (Edge* ptr = CreateEdge(args[0]))
+ return new WeakMember(ptr);
+ return 0;
+ }
+
+ if (Config::IsPersistent(info->name())) {
+ // Persistent might refer to v8::Persistent, so check the name space.
+ // TODO: Consider using a more canonical identification than names.
+ NamespaceDecl* ns =
+ dyn_cast<NamespaceDecl>(info->record()->getDeclContext());
+ if (!ns || ns->getName() != "WebCore")
+ return 0;
+ if (!info->GetTemplateArgs(1, &args))
+ return 0;
+ if (Edge* ptr = CreateEdge(args[0]))
+ return new Persistent(ptr);
+ return 0;
+ }
+
+ if (Config::IsGCCollection(info->name()) ||
+ Config::IsWTFCollection(info->name())) {
+ bool is_root = Config::IsPersistentGCCollection(info->name());
+ bool on_heap = is_root || info->IsHeapAllocatedCollection();
+ size_t count = Config::CollectionDimension(info->name());
+ if (!info->GetTemplateArgs(count, &args))
+ return 0;
+ Collection* edge = new Collection(info, on_heap, is_root);
+ for (TemplateArgs::iterator it = args.begin(); it != args.end(); ++it) {
+ if (Edge* member = CreateEdge(*it)) {
+ edge->members().push_back(member);
+ }
+ // TODO: Handle the case where we fail to create an edge (eg, if the
+ // argument is a primitive type or just not fully known yet).
+ }
+ return edge;
+ }
+
+ return new Value(info);
+}
diff --git a/chromium/tools/clang/blink_gc_plugin/RecordInfo.h b/chromium/tools/clang/blink_gc_plugin/RecordInfo.h
new file mode 100644
index 00000000000..a2fa10e7a7a
--- /dev/null
+++ b/chromium/tools/clang/blink_gc_plugin/RecordInfo.h
@@ -0,0 +1,173 @@
+// Copyright 2014 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.
+
+// This file provides a wrapper for CXXRecordDecl that accumulates GC related
+// information about a class. Accumulated information is memoized and the info
+// objects are stored in a RecordCache.
+
+#ifndef TOOLS_BLINK_GC_PLUGIN_RECORD_INFO_H_
+#define TOOLS_BLINK_GC_PLUGIN_RECORD_INFO_H_
+
+#include <map>
+#include <vector>
+
+#include "Edge.h"
+
+#include "clang/AST/AST.h"
+#include "clang/AST/CXXInheritance.h"
+
+class RecordCache;
+
+// A potentially tracable and/or lifetime affecting point in the object graph.
+class GraphPoint {
+ public:
+ GraphPoint() : traced_(false) {}
+ void MarkTraced() { traced_ = true; }
+ bool IsProperlyTraced() { return traced_ || !NeedsTracing().IsNeeded(); }
+ virtual const TracingStatus NeedsTracing() = 0;
+
+ private:
+ bool traced_;
+};
+
+class BasePoint : public GraphPoint {
+ public:
+ BasePoint(const clang::CXXBaseSpecifier& spec,
+ RecordInfo* info,
+ const TracingStatus& status)
+ : spec_(spec), info_(info), status_(status) {}
+ const TracingStatus NeedsTracing() { return status_; }
+ const clang::CXXBaseSpecifier& spec() { return spec_; }
+ RecordInfo* info() { return info_; }
+
+ private:
+ const clang::CXXBaseSpecifier& spec_;
+ RecordInfo* info_;
+ TracingStatus status_;
+};
+
+class FieldPoint : public GraphPoint {
+ public:
+ FieldPoint(clang::FieldDecl* field, Edge* edge)
+ : field_(field), edge_(edge) {}
+ const TracingStatus NeedsTracing() {
+ return edge_->NeedsTracing(Edge::kRecursive);
+ }
+ clang::FieldDecl* field() { return field_; }
+ Edge* edge() { return edge_; }
+
+ private:
+ clang::FieldDecl* field_;
+ Edge* edge_;
+
+ friend class RecordCache;
+ void deleteEdge() { delete edge_; }
+};
+
+// Wrapper class to lazily collect information about a C++ record.
+class RecordInfo {
+ public:
+ typedef std::map<clang::CXXRecordDecl*, BasePoint> Bases;
+ typedef std::map<clang::FieldDecl*, FieldPoint> Fields;
+ typedef std::vector<const clang::Type*> TemplateArgs;
+
+ ~RecordInfo();
+
+ clang::CXXRecordDecl* record() const { return record_; }
+ const std::string& name() const { return name_; }
+ Fields& GetFields();
+ Bases& GetBases();
+ clang::CXXMethodDecl* GetTraceMethod();
+ clang::CXXMethodDecl* GetTraceDispatchMethod();
+ clang::CXXMethodDecl* GetFinalizeDispatchMethod();
+
+ bool GetTemplateArgs(size_t count, TemplateArgs* output_args);
+
+ bool IsHeapAllocatedCollection();
+ bool IsGCDerived();
+ bool IsGCAllocated();
+ bool IsGCFinalized();
+ bool IsGCMixin();
+ bool IsStackAllocated();
+ bool IsNonNewable();
+ bool IsOnlyPlacementNewable();
+ clang::CXXMethodDecl* DeclaresNewOperator();
+
+ bool RequiresTraceMethod();
+ bool NeedsFinalization();
+ TracingStatus NeedsTracing(Edge::NeedsTracingOption);
+ clang::CXXMethodDecl* InheritsNonVirtualTrace();
+ bool IsConsideredAbstract();
+
+ private:
+ RecordInfo(clang::CXXRecordDecl* record, RecordCache* cache);
+
+ Fields* CollectFields();
+ Bases* CollectBases();
+ void DetermineTracingMethods();
+ bool InheritsTrace();
+
+ Edge* CreateEdge(const clang::Type* type);
+
+ RecordCache* cache_;
+ clang::CXXRecordDecl* record_;
+ const std::string name_;
+ TracingStatus fields_need_tracing_;
+ Bases* bases_;
+ Fields* fields_;
+
+ enum CachedBool { kFalse = 0, kTrue = 1, kNotComputed = 2 };
+ CachedBool is_stack_allocated_;
+ CachedBool is_non_newable_;
+ CachedBool is_only_placement_newable_;
+
+ bool determined_trace_methods_;
+ clang::CXXMethodDecl* trace_method_;
+ clang::CXXMethodDecl* trace_dispatch_method_;
+ clang::CXXMethodDecl* finalize_dispatch_method_;
+
+ bool is_gc_derived_;
+ clang::CXXBasePaths* base_paths_;
+
+ friend class RecordCache;
+};
+
+class RecordCache {
+ public:
+ RecordInfo* Lookup(clang::CXXRecordDecl* record);
+
+ RecordInfo* Lookup(const clang::CXXRecordDecl* record) {
+ return Lookup(const_cast<clang::CXXRecordDecl*>(record));
+ }
+
+ RecordInfo* Lookup(clang::DeclContext* decl) {
+ return Lookup(clang::dyn_cast<clang::CXXRecordDecl>(decl));
+ }
+
+ RecordInfo* Lookup(const clang::Type* type) {
+ return Lookup(type->getAsCXXRecordDecl());
+ }
+
+ RecordInfo* Lookup(const clang::QualType& type) {
+ return Lookup(type.getTypePtr());
+ }
+
+ ~RecordCache() {
+ for (Cache::iterator it = cache_.begin(); it != cache_.end(); ++it) {
+ if (!it->second.fields_)
+ continue;
+ for (RecordInfo::Fields::iterator fit = it->second.fields_->begin();
+ fit != it->second.fields_->end();
+ ++fit) {
+ fit->second.deleteEdge();
+ }
+ }
+ }
+
+ private:
+ typedef std::map<clang::CXXRecordDecl*, RecordInfo> Cache;
+ Cache cache_;
+};
+
+#endif // TOOLS_BLINK_GC_PLUGIN_RECORD_INFO_H_
diff --git a/chromium/tools/clang/blink_gc_plugin/TracingStatus.h b/chromium/tools/clang/blink_gc_plugin/TracingStatus.h
new file mode 100644
index 00000000000..9eb1080de85
--- /dev/null
+++ b/chromium/tools/clang/blink_gc_plugin/TracingStatus.h
@@ -0,0 +1,29 @@
+// Copyright 2014 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.
+
+#ifndef TOOLS_BLINK_GC_PLUGIN_TRACING_STATUS_H_
+#define TOOLS_BLINK_GC_PLUGIN_TRACING_STATUS_H_
+
+// TracingStatus is a three-point value ordered by unneeded < unknown < needed.
+class TracingStatus {
+ public:
+ static TracingStatus Unneeded() { return kUnneeded; }
+ static TracingStatus Unknown() { return kUnknown; }
+ static TracingStatus Needed() { return kNeeded; }
+ bool IsUnneeded() const { return status_ == kUnneeded; }
+ bool IsUnknown() const { return status_ == kUnknown; }
+ bool IsNeeded() const { return status_ == kNeeded; }
+ TracingStatus LUB(const TracingStatus& other) const {
+ return status_ > other.status_ ? status_ : other.status_;
+ }
+ bool operator==(const TracingStatus& other) const {
+ return status_ == other.status_;
+ }
+ private:
+ enum Status { kUnneeded, kUnknown, kNeeded };
+ TracingStatus(Status status) : status_(status) {}
+ Status status_;
+};
+
+#endif // TOOLS_BLINK_GC_PLUGIN_TRACING_STATUS_H_
diff --git a/chromium/tools/clang/blink_gc_plugin/process-graph.py b/chromium/tools/clang/blink_gc_plugin/process-graph.py
new file mode 100755
index 00000000000..2bff96f76ad
--- /dev/null
+++ b/chromium/tools/clang/blink_gc_plugin/process-graph.py
@@ -0,0 +1,464 @@
+#!/usr/bin/env python
+# Copyright 2014 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.
+
+import argparse, os, sys, json, subprocess, pickle, StringIO
+
+parser = argparse.ArgumentParser(
+ description =
+ "Process the Blink points-to graph generated by the Blink GC plugin.")
+
+parser.add_argument(
+ '-', dest='use_stdin', action='store_true',
+ help='Read JSON graph files from stdin')
+
+parser.add_argument(
+ '-c', '--detect-cycles', action='store_true',
+ help='Detect cycles containing GC roots')
+
+parser.add_argument(
+ '-s', '--print-stats', action='store_true',
+ help='Statistics about ref-counted and traced objects')
+
+parser.add_argument(
+ '-v', '--verbose', action='store_true',
+ help='Verbose output')
+
+parser.add_argument(
+ '--ignore-cycles', default=None, metavar='FILE',
+ help='File with cycles to ignore')
+
+parser.add_argument(
+ '--ignore-classes', nargs='*', default=[], metavar='CLASS',
+ help='Classes to ignore when detecting cycles')
+
+parser.add_argument(
+ '--pickle-graph', default=None, metavar='FILE',
+ help='File to read/save the graph from/to')
+
+parser.add_argument(
+ 'files', metavar='FILE_OR_DIR', nargs='*', default=[],
+ help='JSON graph files or directories containing them')
+
+# Command line args after parsing.
+args = None
+
+# Map from node labels to nodes.
+graph = {}
+
+# Set of root nodes.
+roots = []
+
+# List of cycles to ignore.
+ignored_cycles = []
+
+# Global flag to determine exit code.
+global_reported_error = False
+
+def set_reported_error(value):
+ global global_reported_error
+ global_reported_error = value
+
+def reported_error():
+ return global_reported_error
+
+def log(msg):
+ if args.verbose:
+ print msg
+
+global_inc_copy = 0
+def inc_copy():
+ global global_inc_copy
+ global_inc_copy += 1
+
+def get_node(name):
+ return graph.setdefault(name, Node(name))
+
+ptr_types = ('raw', 'ref', 'mem')
+
+def inc_ptr(dst, ptr):
+ if ptr in ptr_types:
+ node = graph.get(dst)
+ if not node: return
+ node.counts[ptr] += 1
+
+def add_counts(s1, s2):
+ for (k, v) in s2.iteritems():
+ s1[k] += s2[k]
+
+# Representation of graph nodes. Basically a map of directed edges.
+class Node:
+ def __init__(self, name):
+ self.name = name
+ self.edges = {}
+ self.reset()
+ def __repr__(self):
+ return "%s(%s) %s" % (self.name, self.visited, self.edges)
+ def update_node(self, decl):
+ # Currently we don't track any node info besides its edges.
+ pass
+ def update_edge(self, e):
+ new_edge = Edge(**e)
+ edge = self.edges.get(new_edge.key)
+ if edge:
+ # If an edge exist, its kind is the strongest of the two.
+ edge.kind = max(edge.kind, new_edge.kind)
+ else:
+ self.edges[new_edge.key] = new_edge
+ def super_edges(self):
+ return [ e for e in self.edges.itervalues() if e.is_super() ]
+ def subclass_edges(self):
+ return [ e for e in self.edges.itervalues() if e.is_subclass() ]
+ def reset(self):
+ self.cost = sys.maxint
+ self.visited = False
+ self.path = None
+ self.counts = {}
+ for ptr in ptr_types:
+ self.counts[ptr] = 0
+ def update_counts(self):
+ for e in self.edges.itervalues():
+ inc_ptr(e.dst, e.ptr)
+
+# Representation of directed graph edges.
+class Edge:
+ def __init__(self, **decl):
+ self.src = decl['src']
+ self.dst = decl['dst']
+ self.lbl = decl['lbl']
+ self.ptr = decl['ptr']
+ self.kind = decl['kind'] # 0 = weak, 1 = strong, 2 = root
+ self.loc = decl['loc']
+ # The label does not uniquely determine an edge from a node. We
+ # define the semi-unique key to be the concatenation of the
+ # label and dst name. This is sufficient to track the strongest
+ # edge to a particular type. For example, if the field A::m_f
+ # has type HashMap<WeakMember<B>, Member<B>> we will have a
+ # strong edge with key m_f#B from A to B.
+ self.key = '%s#%s' % (self.lbl, self.dst)
+ def __repr__(self):
+ return '%s (%s) => %s' % (self.src, self.lbl, self.dst)
+ def is_root(self):
+ return self.kind == 2
+ def is_weak(self):
+ return self.kind == 0
+ def keeps_alive(self):
+ return self.kind > 0
+ def is_subclass(self):
+ return self.lbl.startswith('<subclass>')
+ def is_super(self):
+ return self.lbl.startswith('<super>')
+
+def parse_file(filename):
+ obj = json.load(open(filename))
+ return obj
+
+def build_graphs_in_dir(dirname):
+ # TODO: Use plateform independent code, eg, os.walk
+ files = subprocess.check_output(
+ ['find', dirname, '-name', '*.graph.json']).split('\n')
+ log("Found %d files" % len(files))
+ for f in files:
+ f.strip()
+ if len(f) < 1:
+ continue
+ build_graph(f)
+
+def build_graph(filename):
+ for decl in parse_file(filename):
+ if decl.has_key('name'):
+ # Add/update a node entry
+ name = decl['name']
+ node = get_node(name)
+ node.update_node(decl)
+ else:
+ # Add/update an edge entry
+ name = decl['src']
+ node = get_node(name)
+ node.update_edge(decl)
+
+# Copy all non-weak edges from super classes to their subclasses.
+# This causes all fields of a super to be considered fields of a
+# derived class without tranitively relating derived classes with
+# each other. For example, if B <: A, C <: A, and for some D, D => B,
+# we don't want that to entail that D => C.
+def copy_super_edges(edge):
+ if edge.is_weak() or not edge.is_super():
+ return
+ inc_copy()
+ # Make the super-class edge weak (prohibits processing twice).
+ edge.kind = 0
+ # If the super class is not in our graph exit early.
+ super_node = graph.get(edge.dst)
+ if super_node is None: return
+ # Recursively copy all super-class edges.
+ for e in super_node.super_edges():
+ copy_super_edges(e)
+ # Copy strong super-class edges (ignoring sub-class edges) to the sub class.
+ sub_node = graph[edge.src]
+ for e in super_node.edges.itervalues():
+ if e.keeps_alive() and not e.is_subclass():
+ new_edge = Edge(
+ src = sub_node.name,
+ dst = e.dst,
+ lbl = '%s <: %s' % (super_node.name, e.lbl),
+ ptr = e.ptr,
+ kind = e.kind,
+ loc = e.loc,
+ )
+ sub_node.edges[new_edge.key] = new_edge
+ # Add a strong sub-class edge.
+ sub_edge = Edge(
+ src = super_node.name,
+ dst = sub_node.name,
+ lbl = '<subclass>',
+ ptr = edge.ptr,
+ kind = 1,
+ loc = edge.loc,
+ )
+ super_node.edges[sub_edge.key] = sub_edge
+
+def complete_graph():
+ for node in graph.itervalues():
+ for edge in node.super_edges():
+ copy_super_edges(edge)
+ for edge in node.edges.itervalues():
+ if edge.is_root():
+ roots.append(edge)
+ log("Copied edges down <super> edges for %d graph nodes" % global_inc_copy)
+
+def reset_graph():
+ for n in graph.itervalues():
+ n.reset()
+
+def shortest_path(start, end):
+ start.cost = 0
+ minlist = [start]
+ while len(minlist) > 0:
+ minlist.sort(key=lambda n: -n.cost)
+ current = minlist.pop()
+ current.visited = True
+ if current == end or current.cost >= end.cost + 1:
+ return
+ for e in current.edges.itervalues():
+ if not e.keeps_alive():
+ continue
+ dst = graph.get(e.dst)
+ if dst is None or dst.visited:
+ continue
+ if current.cost < dst.cost:
+ dst.cost = current.cost + 1
+ dst.path = e
+ minlist.append(dst)
+
+def detect_cycles():
+ for root_edge in roots:
+ reset_graph()
+ # Mark ignored classes as already visited
+ for ignore in args.ignore_classes:
+ name = ignore.find("::") > 0 and ignore or ("WebCore::" + ignore)
+ node = graph.get(name)
+ if node:
+ node.visited = True
+ src = graph[root_edge.src]
+ dst = graph.get(root_edge.dst)
+ if src.visited:
+ continue
+ if root_edge.dst == "WTF::String":
+ continue
+ if dst is None:
+ print "\nPersistent root to incomplete destination object:"
+ print root_edge
+ set_reported_error(True)
+ continue
+ # Find the shortest path from the root target (dst) to its host (src)
+ shortest_path(dst, src)
+ if src.cost < sys.maxint:
+ report_cycle(root_edge)
+
+def is_ignored_cycle(cycle):
+ for block in ignored_cycles:
+ if block_match(cycle, block):
+ return True
+
+def block_match(b1, b2):
+ if len(b1) != len(b2):
+ return False
+ for (l1, l2) in zip(b1, b2):
+ if l1 != l2:
+ return False
+ return True
+
+def report_cycle(root_edge):
+ dst = graph[root_edge.dst]
+ path = []
+ edge = root_edge
+ dst.path = None
+ while edge:
+ path.append(edge)
+ edge = graph[edge.src].path
+ path.append(root_edge)
+ path.reverse()
+ # Find the max loc length for pretty printing.
+ max_loc = 0
+ for p in path:
+ if len(p.loc) > max_loc:
+ max_loc = len(p.loc)
+ out = StringIO.StringIO()
+ for p in path[:-1]:
+ print >>out, (p.loc + ':').ljust(max_loc + 1), p
+ sout = out.getvalue()
+ if not is_ignored_cycle(sout):
+ print "\nFound a potentially leaking cycle starting from a GC root:\n", sout
+ set_reported_error(True)
+
+def load_graph():
+ global graph
+ global roots
+ log("Reading graph from pickled file: " + args.pickle_graph)
+ dump = pickle.load(open(args.pickle_graph, 'rb'))
+ graph = dump[0]
+ roots = dump[1]
+
+def save_graph():
+ log("Saving graph to pickle file: " + args.pickle_graph)
+ dump = (graph, roots)
+ pickle.dump(dump, open(args.pickle_graph, 'wb'))
+
+def read_ignored_cycles():
+ global ignored_cycles
+ if not args.ignore_cycles:
+ return
+ log("Reading ignored cycles from file: " + args.ignore_cycles)
+ block = []
+ for l in open(args.ignore_cycles):
+ line = l.strip()
+ if not line or line.startswith('Found'):
+ if len(block) > 0:
+ ignored_cycles.append(block)
+ block = []
+ else:
+ block += l
+ if len(block) > 0:
+ ignored_cycles.append(block)
+
+gc_bases = (
+ 'WebCore::GarbageCollected',
+ 'WebCore::GarbageCollectedFinalized',
+ 'WebCore::GarbageCollectedMixin',
+)
+ref_bases = (
+ 'WTF::RefCounted',
+ 'WTF::ThreadSafeRefCounted',
+)
+gcref_bases = (
+ 'WebCore::RefCountedGarbageCollected',
+ 'WebCore::ThreadSafeRefCountedGarbageCollected',
+)
+ref_mixins = (
+ 'WebCore::EventTarget',
+ 'WebCore::EventTargetWithInlineData',
+ 'WebCore::ActiveDOMObject',
+)
+
+def print_stats():
+ gcref_managed = []
+ ref_managed = []
+ gc_managed = []
+ hierarchies = []
+
+ for node in graph.itervalues():
+ node.update_counts()
+ for sup in node.super_edges():
+ if sup.dst in gcref_bases:
+ gcref_managed.append(node)
+ elif sup.dst in ref_bases:
+ ref_managed.append(node)
+ elif sup.dst in gc_bases:
+ gc_managed.append(node)
+
+ groups = [("GC manged ", gc_managed),
+ ("ref counted ", ref_managed),
+ ("in transition", gcref_managed)]
+ total = sum([len(g) for (s,g) in groups])
+ for (s, g) in groups:
+ percent = len(g) * 100 / total
+ print "%2d%% is %s (%d hierarchies)" % (percent, s, len(g))
+
+ for base in gcref_managed:
+ stats = dict({ 'classes': 0, 'ref-mixins': 0 })
+ for ptr in ptr_types: stats[ptr] = 0
+ hierarchy_stats(base, stats)
+ hierarchies.append((base, stats))
+
+ print "\nHierarchies in transition (RefCountedGarbageCollected):"
+ hierarchies.sort(key=lambda (n,s): -s['classes'])
+ for (node, stats) in hierarchies:
+ total = stats['mem'] + stats['ref'] + stats['raw']
+ print (
+ "%s %3d%% of %-30s: %3d cls, %3d mem, %3d ref, %3d raw, %3d ref-mixins" %
+ (stats['ref'] == 0 and stats['ref-mixins'] == 0 and "*" or " ",
+ total == 0 and 100 or stats['mem'] * 100 / total,
+ node.name.replace('WebCore::', ''),
+ stats['classes'],
+ stats['mem'],
+ stats['ref'],
+ stats['raw'],
+ stats['ref-mixins'],
+ ))
+
+def hierarchy_stats(node, stats):
+ if not node: return
+ stats['classes'] += 1
+ add_counts(stats, node.counts)
+ for edge in node.super_edges():
+ if edge.dst in ref_mixins:
+ stats['ref-mixins'] += 1
+ for edge in node.subclass_edges():
+ hierarchy_stats(graph.get(edge.dst), stats)
+
+def main():
+ global args
+ args = parser.parse_args()
+ if not (args.detect_cycles or args.print_stats):
+ print "Please select an operation to perform (eg, -c to detect cycles)"
+ parser.print_help()
+ return 1
+ if args.pickle_graph and os.path.isfile(args.pickle_graph):
+ load_graph()
+ else:
+ if args.use_stdin:
+ log("Reading files from stdin")
+ for f in sys.stdin:
+ build_graph(f.strip())
+ else:
+ log("Reading files and directories from command line")
+ if len(args.files) == 0:
+ print "Please provide files or directores for building the graph"
+ parser.print_help()
+ return 1
+ for f in args.files:
+ if os.path.isdir(f):
+ log("Building graph from files in directory: " + f)
+ build_graphs_in_dir(f)
+ else:
+ log("Building graph from file: " + f)
+ build_graph(f)
+ log("Completing graph construction (%d graph nodes)" % len(graph))
+ complete_graph()
+ if args.pickle_graph:
+ save_graph()
+ if args.detect_cycles:
+ read_ignored_cycles()
+ log("Detecting cycles containg GC roots")
+ detect_cycles()
+ if args.print_stats:
+ log("Printing statistics")
+ print_stats()
+ if reported_error():
+ return 1
+ return 0
+
+if __name__ == '__main__':
+ sys.exit(main())
diff --git a/chromium/tools/clang/plugins/ChromeClassTester.cpp b/chromium/tools/clang/plugins/ChromeClassTester.cpp
index e44e7da7e50..5ce04e557f3 100644
--- a/chromium/tools/clang/plugins/ChromeClassTester.cpp
+++ b/chromium/tools/clang/plugins/ChromeClassTester.cpp
@@ -36,11 +36,9 @@ bool ends_with(const std::string& one, const std::string& two) {
} // namespace
-ChromeClassTester::ChromeClassTester(CompilerInstance& instance,
- bool check_url_directory)
+ChromeClassTester::ChromeClassTester(CompilerInstance& instance)
: instance_(instance),
- diagnostic_(instance.getDiagnostics()),
- check_url_directory_(check_url_directory) {
+ diagnostic_(instance.getDiagnostics()) {
BuildBannedLists();
}
@@ -93,6 +91,16 @@ void ChromeClassTester::CheckTag(TagDecl* tag) {
return;
CheckChromeClass(record_location, record);
+ } else if (EnumDecl* enum_decl = dyn_cast<EnumDecl>(tag)) {
+ SourceLocation enum_location = enum_decl->getInnerLocStart();
+ if (InBannedDirectory(enum_location))
+ return;
+
+ std::string base_name = enum_decl->getNameAsString();
+ if (IsIgnoredType(base_name))
+ return;
+
+ CheckChromeEnum(enum_location, enum_decl);
}
}
@@ -102,11 +110,11 @@ void ChromeClassTester::emitWarning(SourceLocation loc,
std::string err;
err = "[chromium-style] ";
err += raw_error;
- DiagnosticsEngine::Level level =
+ DiagnosticIDs::Level level =
diagnostic().getWarningsAsErrors() ?
- DiagnosticsEngine::Error :
- DiagnosticsEngine::Warning;
- unsigned id = diagnostic().getCustomDiagID(level, err);
+ DiagnosticIDs::Error :
+ DiagnosticIDs::Warning;
+ unsigned id = diagnostic().getDiagnosticIDs()->getCustomDiagID(level, err);
DiagnosticBuilder builder = diagnostic().Report(full, id);
}
@@ -140,7 +148,6 @@ bool ChromeClassTester::InImplementationFile(SourceLocation record_location) {
void ChromeClassTester::BuildBannedLists() {
banned_namespaces_.push_back("std");
banned_namespaces_.push_back("__gnu_cxx");
- banned_namespaces_.push_back("WebTestRunner");
// We're in the process of renaming WebKit to blink.
// TODO(abarth): Remove WebKit once the rename is complete.
@@ -161,9 +168,6 @@ void ChromeClassTester::BuildBannedLists() {
banned_directories_.push_back("icu4c/");
banned_directories_.push_back("frameworks/");
- if (!check_url_directory_)
- banned_directories_.push_back("url/");
-
// Don't check autogenerated headers.
// Make puts them below $(builddir_name)/.../gen and geni.
// Ninja puts them below OUTPUT_DIR/.../gen
@@ -201,6 +205,9 @@ void ChromeClassTester::BuildBannedLists() {
// non-pod class member. Probably harmless.
ignored_record_names_.insert("MockTransaction");
+ // Enum type with _LAST members where _LAST doesn't mean last enum value.
+ ignored_record_names_.insert("ServerFieldType");
+
// Used heavily in ui_unittests and once in views_unittests. Fixing this
// isn't worth the overhead of an additional library.
ignored_record_names_.insert("TestAnimationDelegate");
@@ -212,6 +219,9 @@ void ChromeClassTester::BuildBannedLists() {
// Measured performance improvement on cc_perftests. See
// https://codereview.chromium.org/11299290/
ignored_record_names_.insert("QuadF");
+
+ // Enum type with _LAST members where _LAST doesn't mean last enum value.
+ ignored_record_names_.insert("ViewID");
}
std::string ChromeClassTester::GetNamespaceImpl(const DeclContext* context,
diff --git a/chromium/tools/clang/plugins/ChromeClassTester.h b/chromium/tools/clang/plugins/ChromeClassTester.h
index 541341de539..6bd19a629a8 100644
--- a/chromium/tools/clang/plugins/ChromeClassTester.h
+++ b/chromium/tools/clang/plugins/ChromeClassTester.h
@@ -16,8 +16,7 @@
// headers to subclasses which implement CheckChromeClass().
class ChromeClassTester : public clang::ASTConsumer {
public:
- explicit ChromeClassTester(clang::CompilerInstance& instance,
- bool check_url_directory);
+ explicit ChromeClassTester(clang::CompilerInstance& instance);
virtual ~ChromeClassTester();
// clang::ASTConsumer:
@@ -55,6 +54,12 @@ class ChromeClassTester : public clang::ASTConsumer {
virtual void CheckChromeClass(clang::SourceLocation record_location,
clang::CXXRecordDecl* record) = 0;
+ // Filtered versions of enum type that are only called with things defined
+ // in chrome header files.
+ virtual void CheckChromeEnum(clang::SourceLocation enum_location,
+ clang::EnumDecl* enum_decl) {
+ }
+
// Utility methods used for filtering out non-chrome classes (and ones we
// deliberately ignore) in HandleTagDeclDefinition().
std::string GetNamespaceImpl(const clang::DeclContext* context,
@@ -80,9 +85,6 @@ class ChromeClassTester : public clang::ASTConsumer {
// List of decls to check once the current top-level decl is parsed.
std::vector<clang::TagDecl*> pending_class_decls_;
-
- // TODO(tfarina): Remove once url/ directory compiles without warnings.
- bool check_url_directory_;
};
#endif // TOOLS_CLANG_PLUGINS_CHROMECLASSTESTER_H_
diff --git a/chromium/tools/clang/plugins/FindBadConstructs.cpp b/chromium/tools/clang/plugins/FindBadConstructs.cpp
deleted file mode 100644
index bdc497f64de..00000000000
--- a/chromium/tools/clang/plugins/FindBadConstructs.cpp
+++ /dev/null
@@ -1,731 +0,0 @@
-// Copyright (c) 2012 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.
-
-// This file defines a bunch of recurring problems in the Chromium C++ code.
-//
-// Checks that are implemented:
-// - Constructors/Destructors should not be inlined if they are of a complex
-// class type.
-// - Missing "virtual" keywords on methods that should be virtual.
-// - Non-annotated overriding virtual methods.
-// - Virtual methods with nonempty implementations in their headers.
-// - Classes that derive from base::RefCounted / base::RefCountedThreadSafe
-// should have protected or private destructors.
-// - WeakPtrFactory members that refer to their outer class should be the last
-// member.
-
-#include "clang/AST/ASTConsumer.h"
-#include "clang/AST/AST.h"
-#include "clang/AST/Attr.h"
-#include "clang/AST/CXXInheritance.h"
-#include "clang/AST/TypeLoc.h"
-#include "clang/Basic/SourceManager.h"
-#include "clang/Frontend/CompilerInstance.h"
-#include "clang/Frontend/FrontendPluginRegistry.h"
-#include "clang/Lex/Lexer.h"
-#include "llvm/Support/raw_ostream.h"
-
-#include "ChromeClassTester.h"
-
-using namespace clang;
-
-namespace {
-
-const char kMethodRequiresOverride[] =
- "[chromium-style] Overriding method must be marked with OVERRIDE.";
-const char kMethodRequiresVirtual[] =
- "[chromium-style] Overriding method must have \"virtual\" keyword.";
-const char kNoExplicitDtor[] =
- "[chromium-style] Classes that are ref-counted should have explicit "
- "destructors that are declared protected or private.";
-const char kPublicDtor[] =
- "[chromium-style] Classes that are ref-counted should have "
- "destructors that are declared protected or private.";
-const char kProtectedNonVirtualDtor[] =
- "[chromium-style] Classes that are ref-counted and have non-private "
- "destructors should declare their destructor virtual.";
-const char kWeakPtrFactoryOrder[] =
- "[chromium-style] WeakPtrFactory members which refer to their outer class "
- "must be the last member in the outer class definition.";
-const char kNoteInheritance[] =
- "[chromium-style] %0 inherits from %1 here";
-const char kNoteImplicitDtor[] =
- "[chromium-style] No explicit destructor for %0 defined";
-const char kNotePublicDtor[] =
- "[chromium-style] Public destructor declared here";
-const char kNoteProtectedNonVirtualDtor[] =
- "[chromium-style] Protected non-virtual destructor declared here";
-
-bool TypeHasNonTrivialDtor(const Type* type) {
- if (const CXXRecordDecl* cxx_r = type->getPointeeCXXRecordDecl())
- return cxx_r->hasTrivialDestructor();
-
- return false;
-}
-
-// Returns the underlying Type for |type| by expanding typedefs and removing
-// any namespace qualifiers. This is similar to desugaring, except that for
-// ElaboratedTypes, desugar will unwrap too much.
-const Type* UnwrapType(const Type* type) {
- if (const ElaboratedType* elaborated = dyn_cast<ElaboratedType>(type))
- return UnwrapType(elaborated->getNamedType().getTypePtr());
- if (const TypedefType* typedefed = dyn_cast<TypedefType>(type))
- return UnwrapType(typedefed->desugar().getTypePtr());
- return type;
-}
-
-struct FindBadConstructsOptions {
- FindBadConstructsOptions() : check_base_classes(false),
- check_virtuals_in_implementations(true),
- check_url_directory(false),
- check_weak_ptr_factory_order(false) {
- }
- bool check_base_classes;
- bool check_virtuals_in_implementations;
- bool check_url_directory;
- bool check_weak_ptr_factory_order;
-};
-
-// Searches for constructs that we know we don't want in the Chromium code base.
-class FindBadConstructsConsumer : public ChromeClassTester {
- public:
- FindBadConstructsConsumer(CompilerInstance& instance,
- const FindBadConstructsOptions& options)
- : ChromeClassTester(instance, options.check_url_directory),
- options_(options) {
- // Register warning/error messages.
- diag_method_requires_override_ = diagnostic().getCustomDiagID(
- getErrorLevel(), kMethodRequiresOverride);
- diag_method_requires_virtual_ = diagnostic().getCustomDiagID(
- getErrorLevel(), kMethodRequiresVirtual);
- diag_no_explicit_dtor_ = diagnostic().getCustomDiagID(
- getErrorLevel(), kNoExplicitDtor);
- diag_public_dtor_ = diagnostic().getCustomDiagID(
- getErrorLevel(), kPublicDtor);
- diag_protected_non_virtual_dtor_ = diagnostic().getCustomDiagID(
- getErrorLevel(), kProtectedNonVirtualDtor);
- diag_weak_ptr_factory_order_ = diagnostic().getCustomDiagID(
- getErrorLevel(), kWeakPtrFactoryOrder);
-
- // Registers notes to make it easier to interpret warnings.
- diag_note_inheritance_ = diagnostic().getCustomDiagID(
- DiagnosticsEngine::Note, kNoteInheritance);
- diag_note_implicit_dtor_ = diagnostic().getCustomDiagID(
- DiagnosticsEngine::Note, kNoteImplicitDtor);
- diag_note_public_dtor_ = diagnostic().getCustomDiagID(
- DiagnosticsEngine::Note, kNotePublicDtor);
- diag_note_protected_non_virtual_dtor_ = diagnostic().getCustomDiagID(
- DiagnosticsEngine::Note, kNoteProtectedNonVirtualDtor);
- }
-
- virtual void CheckChromeClass(SourceLocation record_location,
- CXXRecordDecl* record) {
- bool implementation_file = InImplementationFile(record_location);
-
- if (!implementation_file) {
- // Only check for "heavy" constructors/destructors in header files;
- // within implementation files, there is no performance cost.
- CheckCtorDtorWeight(record_location, record);
- }
-
- if (!implementation_file || options_.check_virtuals_in_implementations) {
- bool warn_on_inline_bodies = !implementation_file;
-
- // Check that all virtual methods are marked accordingly with both
- // virtual and OVERRIDE.
- CheckVirtualMethods(record_location, record, warn_on_inline_bodies);
- }
-
- CheckRefCountedDtors(record_location, record);
-
- if (options_.check_weak_ptr_factory_order)
- CheckWeakPtrFactoryMembers(record_location, record);
- }
-
- private:
- // The type of problematic ref-counting pattern that was encountered.
- enum RefcountIssue {
- None,
- ImplicitDestructor,
- PublicDestructor
- };
-
- FindBadConstructsOptions options_;
-
- unsigned diag_method_requires_override_;
- unsigned diag_method_requires_virtual_;
- unsigned diag_no_explicit_dtor_;
- unsigned diag_public_dtor_;
- unsigned diag_protected_non_virtual_dtor_;
- unsigned diag_weak_ptr_factory_order_;
- unsigned diag_note_inheritance_;
- unsigned diag_note_implicit_dtor_;
- unsigned diag_note_public_dtor_;
- unsigned diag_note_protected_non_virtual_dtor_;
-
- // Prints errors if the constructor/destructor weight is too heavy.
- void CheckCtorDtorWeight(SourceLocation record_location,
- CXXRecordDecl* record) {
- // We don't handle anonymous structs. If this record doesn't have a
- // name, it's of the form:
- //
- // struct {
- // ...
- // } name_;
- if (record->getIdentifier() == NULL)
- return;
-
- // Count the number of templated base classes as a feature of whether the
- // destructor can be inlined.
- int templated_base_classes = 0;
- for (CXXRecordDecl::base_class_const_iterator it = record->bases_begin();
- it != record->bases_end(); ++it) {
- if (it->getTypeSourceInfo()->getTypeLoc().getTypeLocClass() ==
- TypeLoc::TemplateSpecialization) {
- ++templated_base_classes;
- }
- }
-
- // Count the number of trivial and non-trivial member variables.
- int trivial_member = 0;
- int non_trivial_member = 0;
- int templated_non_trivial_member = 0;
- for (RecordDecl::field_iterator it = record->field_begin();
- it != record->field_end(); ++it) {
- CountType(it->getType().getTypePtr(),
- &trivial_member,
- &non_trivial_member,
- &templated_non_trivial_member);
- }
-
- // Check to see if we need to ban inlined/synthesized constructors. Note
- // that the cutoffs here are kind of arbitrary. Scores over 10 break.
- int dtor_score = 0;
- // Deriving from a templated base class shouldn't be enough to trigger
- // the ctor warning, but if you do *anything* else, it should.
- //
- // TODO(erg): This is motivated by templated base classes that don't have
- // any data members. Somehow detect when templated base classes have data
- // members and treat them differently.
- dtor_score += templated_base_classes * 9;
- // Instantiating a template is an insta-hit.
- dtor_score += templated_non_trivial_member * 10;
- // The fourth normal class member should trigger the warning.
- dtor_score += non_trivial_member * 3;
-
- int ctor_score = dtor_score;
- // You should be able to have 9 ints before we warn you.
- ctor_score += trivial_member;
-
- if (ctor_score >= 10) {
- if (!record->hasUserDeclaredConstructor()) {
- emitWarning(record_location,
- "Complex class/struct needs an explicit out-of-line "
- "constructor.");
- } else {
- // Iterate across all the constructors in this file and yell if we
- // find one that tries to be inline.
- for (CXXRecordDecl::ctor_iterator it = record->ctor_begin();
- it != record->ctor_end(); ++it) {
- if (it->hasInlineBody()) {
- if (it->isCopyConstructor() &&
- !record->hasUserDeclaredCopyConstructor()) {
- emitWarning(record_location,
- "Complex class/struct needs an explicit out-of-line "
- "copy constructor.");
- } else {
- emitWarning(it->getInnerLocStart(),
- "Complex constructor has an inlined body.");
- }
- }
- }
- }
- }
-
- // The destructor side is equivalent except that we don't check for
- // trivial members; 20 ints don't need a destructor.
- if (dtor_score >= 10 && !record->hasTrivialDestructor()) {
- if (!record->hasUserDeclaredDestructor()) {
- emitWarning(
- record_location,
- "Complex class/struct needs an explicit out-of-line "
- "destructor.");
- } else if (CXXDestructorDecl* dtor = record->getDestructor()) {
- if (dtor->hasInlineBody()) {
- emitWarning(dtor->getInnerLocStart(),
- "Complex destructor has an inline body.");
- }
- }
- }
- }
-
- void CheckVirtualMethod(const CXXMethodDecl* method,
- bool warn_on_inline_bodies) {
- if (!method->isVirtual())
- return;
-
- if (!method->isVirtualAsWritten()) {
- SourceLocation loc = method->getTypeSpecStartLoc();
- if (isa<CXXDestructorDecl>(method))
- loc = method->getInnerLocStart();
- SourceManager& manager = instance().getSourceManager();
- FullSourceLoc full_loc(loc, manager);
- SourceLocation spelling_loc = manager.getSpellingLoc(loc);
- diagnostic().Report(full_loc, diag_method_requires_virtual_)
- << FixItHint::CreateInsertion(spelling_loc, "virtual ");
- }
-
- // Virtual methods should not have inline definitions beyond "{}". This
- // only matters for header files.
- if (warn_on_inline_bodies && method->hasBody() &&
- method->hasInlineBody()) {
- if (CompoundStmt* cs = dyn_cast<CompoundStmt>(method->getBody())) {
- if (cs->size()) {
- emitWarning(
- cs->getLBracLoc(),
- "virtual methods with non-empty bodies shouldn't be "
- "declared inline.");
- }
- }
- }
- }
-
- bool InTestingNamespace(const Decl* record) {
- return GetNamespace(record).find("testing") != std::string::npos;
- }
-
- bool IsMethodInBannedOrTestingNamespace(const CXXMethodDecl* method) {
- if (InBannedNamespace(method))
- return true;
- for (CXXMethodDecl::method_iterator i = method->begin_overridden_methods();
- i != method->end_overridden_methods();
- ++i) {
- const CXXMethodDecl* overridden = *i;
- if (IsMethodInBannedOrTestingNamespace(overridden) ||
- InTestingNamespace(overridden)) {
- return true;
- }
- }
-
- return false;
- }
-
- void CheckOverriddenMethod(const CXXMethodDecl* method) {
- if (!method->size_overridden_methods() || method->getAttr<OverrideAttr>())
- return;
-
- if (isa<CXXDestructorDecl>(method) || method->isPure())
- return;
-
- if (IsMethodInBannedOrTestingNamespace(method))
- return;
-
- SourceManager& manager = instance().getSourceManager();
- SourceRange type_info_range =
- method->getTypeSourceInfo()->getTypeLoc().getSourceRange();
- FullSourceLoc loc(type_info_range.getBegin(), manager);
-
- // Build the FixIt insertion point after the end of the method definition,
- // including any const-qualifiers and attributes, and before the opening
- // of the l-curly-brace (if inline) or the semi-color (if a declaration).
- SourceLocation spelling_end =
- manager.getSpellingLoc(type_info_range.getEnd());
- if (spelling_end.isValid()) {
- SourceLocation token_end = Lexer::getLocForEndOfToken(
- spelling_end, 0, manager, LangOptions());
- diagnostic().Report(token_end, diag_method_requires_override_)
- << FixItHint::CreateInsertion(token_end, " OVERRIDE");
- } else {
- diagnostic().Report(loc, diag_method_requires_override_);
- }
- }
-
- // Makes sure there is a "virtual" keyword on virtual methods.
- //
- // Gmock objects trigger these for each MOCK_BLAH() macro used. So we have a
- // trick to get around that. If a class has member variables whose types are
- // in the "testing" namespace (which is how gmock works behind the scenes),
- // there's a really high chance we won't care about these errors
- void CheckVirtualMethods(SourceLocation record_location,
- CXXRecordDecl* record,
- bool warn_on_inline_bodies) {
- for (CXXRecordDecl::field_iterator it = record->field_begin();
- it != record->field_end(); ++it) {
- CXXRecordDecl* record_type =
- it->getTypeSourceInfo()->getTypeLoc().getTypePtr()->
- getAsCXXRecordDecl();
- if (record_type) {
- if (InTestingNamespace(record_type)) {
- return;
- }
- }
- }
-
- for (CXXRecordDecl::method_iterator it = record->method_begin();
- it != record->method_end(); ++it) {
- if (it->isCopyAssignmentOperator() || isa<CXXConstructorDecl>(*it)) {
- // Ignore constructors and assignment operators.
- } else if (isa<CXXDestructorDecl>(*it) &&
- !record->hasUserDeclaredDestructor()) {
- // Ignore non-user-declared destructors.
- } else {
- CheckVirtualMethod(*it, warn_on_inline_bodies);
- CheckOverriddenMethod(*it);
- }
- }
- }
-
- void CountType(const Type* type,
- int* trivial_member,
- int* non_trivial_member,
- int* templated_non_trivial_member) {
- switch (type->getTypeClass()) {
- case Type::Record: {
- // Simplifying; the whole class isn't trivial if the dtor is, but
- // we use this as a signal about complexity.
- if (TypeHasNonTrivialDtor(type))
- (*trivial_member)++;
- else
- (*non_trivial_member)++;
- break;
- }
- case Type::TemplateSpecialization: {
- TemplateName name =
- dyn_cast<TemplateSpecializationType>(type)->getTemplateName();
- bool whitelisted_template = false;
-
- // HACK: I'm at a loss about how to get the syntax checker to get
- // whether a template is exterened or not. For the first pass here,
- // just do retarded string comparisons.
- if (TemplateDecl* decl = name.getAsTemplateDecl()) {
- std::string base_name = decl->getNameAsString();
- if (base_name == "basic_string")
- whitelisted_template = true;
- }
-
- if (whitelisted_template)
- (*non_trivial_member)++;
- else
- (*templated_non_trivial_member)++;
- break;
- }
- case Type::Elaborated: {
- CountType(
- dyn_cast<ElaboratedType>(type)->getNamedType().getTypePtr(),
- trivial_member, non_trivial_member, templated_non_trivial_member);
- break;
- }
- case Type::Typedef: {
- while (const TypedefType* TT = dyn_cast<TypedefType>(type)) {
- type = TT->getDecl()->getUnderlyingType().getTypePtr();
- }
- CountType(type, trivial_member, non_trivial_member,
- templated_non_trivial_member);
- break;
- }
- default: {
- // Stupid assumption: anything we see that isn't the above is one of
- // the 20 integer types.
- (*trivial_member)++;
- break;
- }
- }
- }
-
- // Check |record| for issues that are problematic for ref-counted types.
- // Note that |record| may not be a ref-counted type, but a base class for
- // a type that is.
- // If there are issues, update |loc| with the SourceLocation of the issue
- // and returns appropriately, or returns None if there are no issues.
- static RefcountIssue CheckRecordForRefcountIssue(
- const CXXRecordDecl* record,
- SourceLocation &loc) {
- if (!record->hasUserDeclaredDestructor()) {
- loc = record->getLocation();
- return ImplicitDestructor;
- }
-
- if (CXXDestructorDecl* dtor = record->getDestructor()) {
- if (dtor->getAccess() == AS_public) {
- loc = dtor->getInnerLocStart();
- return PublicDestructor;
- }
- }
-
- return None;
- }
-
- // Adds either a warning or error, based on the current handling of
- // -Werror.
- DiagnosticsEngine::Level getErrorLevel() {
- return diagnostic().getWarningsAsErrors() ?
- DiagnosticsEngine::Error : DiagnosticsEngine::Warning;
- }
-
- // Returns true if |base| specifies one of the Chromium reference counted
- // classes (base::RefCounted / base::RefCountedThreadSafe).
- static bool IsRefCountedCallback(const CXXBaseSpecifier* base,
- CXXBasePath& path,
- void* user_data) {
- FindBadConstructsConsumer* self =
- static_cast<FindBadConstructsConsumer*>(user_data);
-
- const TemplateSpecializationType* base_type =
- dyn_cast<TemplateSpecializationType>(
- UnwrapType(base->getType().getTypePtr()));
- if (!base_type) {
- // Base-most definition is not a template, so this cannot derive from
- // base::RefCounted. However, it may still be possible to use with a
- // scoped_refptr<> and support ref-counting, so this is not a perfect
- // guarantee of safety.
- return false;
- }
-
- TemplateName name = base_type->getTemplateName();
- if (TemplateDecl* decl = name.getAsTemplateDecl()) {
- std::string base_name = decl->getNameAsString();
-
- // Check for both base::RefCounted and base::RefCountedThreadSafe.
- if (base_name.compare(0, 10, "RefCounted") == 0 &&
- self->GetNamespace(decl) == "base") {
- return true;
- }
- }
-
- return false;
- }
-
- // Returns true if |base| specifies a class that has a public destructor,
- // either explicitly or implicitly.
- static bool HasPublicDtorCallback(const CXXBaseSpecifier* base,
- CXXBasePath& path,
- void* user_data) {
- // Only examine paths that have public inheritance, as they are the
- // only ones which will result in the destructor potentially being
- // exposed. This check is largely redundant, as Chromium code should be
- // exclusively using public inheritance.
- if (path.Access != AS_public)
- return false;
-
- CXXRecordDecl* record = dyn_cast<CXXRecordDecl>(
- base->getType()->getAs<RecordType>()->getDecl());
- SourceLocation unused;
- return None != CheckRecordForRefcountIssue(record, unused);
- }
-
- // Outputs a C++ inheritance chain as a diagnostic aid.
- void PrintInheritanceChain(const CXXBasePath& path) {
- for (CXXBasePath::const_iterator it = path.begin(); it != path.end();
- ++it) {
- diagnostic().Report(it->Base->getLocStart(), diag_note_inheritance_)
- << it->Class << it->Base->getType();
- }
- }
-
- unsigned DiagnosticForIssue(RefcountIssue issue) {
- switch (issue) {
- case ImplicitDestructor:
- return diag_no_explicit_dtor_;
- case PublicDestructor:
- return diag_public_dtor_;
- case None:
- assert(false && "Do not call DiagnosticForIssue with issue None");
- return 0;
- }
- assert(false);
- return 0;
- }
-
- // Check |record| to determine if it has any problematic refcounting
- // issues and, if so, print them as warnings/errors based on the current
- // value of getErrorLevel().
- //
- // If |record| is a C++ class, and if it inherits from one of the Chromium
- // ref-counting classes (base::RefCounted / base::RefCountedThreadSafe),
- // ensure that there are no public destructors in the class hierarchy. This
- // is to guard against accidentally stack-allocating a RefCounted class or
- // sticking it in a non-ref-counted container (like scoped_ptr<>).
- void CheckRefCountedDtors(SourceLocation record_location,
- CXXRecordDecl* record) {
- // Skip anonymous structs.
- if (record->getIdentifier() == NULL)
- return;
-
- // Determine if the current type is even ref-counted.
- CXXBasePaths refcounted_path;
- if (!record->lookupInBases(
- &FindBadConstructsConsumer::IsRefCountedCallback, this,
- refcounted_path)) {
- return; // Class does not derive from a ref-counted base class.
- }
-
- // Easy check: Check to see if the current type is problematic.
- SourceLocation loc;
- RefcountIssue issue = CheckRecordForRefcountIssue(record, loc);
- if (issue != None) {
- diagnostic().Report(loc, DiagnosticForIssue(issue));
- PrintInheritanceChain(refcounted_path.front());
- return;
- }
- if (CXXDestructorDecl* dtor =
- refcounted_path.begin()->back().Class->getDestructor()) {
- if (dtor->getAccess() == AS_protected &&
- !dtor->isVirtual()) {
- loc = dtor->getInnerLocStart();
- diagnostic().Report(loc, diag_protected_non_virtual_dtor_);
- return;
- }
- }
-
- // Long check: Check all possible base classes for problematic
- // destructors. This checks for situations involving multiple
- // inheritance, where the ref-counted class may be implementing an
- // interface that has a public or implicit destructor.
- //
- // struct SomeInterface {
- // virtual void DoFoo();
- // };
- //
- // struct RefCountedInterface
- // : public base::RefCounted<RefCountedInterface>,
- // public SomeInterface {
- // private:
- // friend class base::Refcounted<RefCountedInterface>;
- // virtual ~RefCountedInterface() {}
- // };
- //
- // While RefCountedInterface is "safe", in that its destructor is
- // private, it's possible to do the following "unsafe" code:
- // scoped_refptr<RefCountedInterface> some_class(
- // new RefCountedInterface);
- // // Calls SomeInterface::~SomeInterface(), which is unsafe.
- // delete static_cast<SomeInterface*>(some_class.get());
- if (!options_.check_base_classes)
- return;
-
- // Find all public destructors. This will record the class hierarchy
- // that leads to the public destructor in |dtor_paths|.
- CXXBasePaths dtor_paths;
- if (!record->lookupInBases(
- &FindBadConstructsConsumer::HasPublicDtorCallback, this,
- dtor_paths)) {
- return;
- }
-
- for (CXXBasePaths::const_paths_iterator it = dtor_paths.begin();
- it != dtor_paths.end(); ++it) {
- // The record with the problem will always be the last record
- // in the path, since it is the record that stopped the search.
- const CXXRecordDecl* problem_record = dyn_cast<CXXRecordDecl>(
- it->back().Base->getType()->getAs<RecordType>()->getDecl());
-
- issue = CheckRecordForRefcountIssue(problem_record, loc);
-
- if (issue == ImplicitDestructor) {
- diagnostic().Report(record_location, diag_no_explicit_dtor_);
- PrintInheritanceChain(refcounted_path.front());
- diagnostic().Report(loc, diag_note_implicit_dtor_) << problem_record;
- PrintInheritanceChain(*it);
- } else if (issue == PublicDestructor) {
- diagnostic().Report(record_location, diag_public_dtor_);
- PrintInheritanceChain(refcounted_path.front());
- diagnostic().Report(loc, diag_note_public_dtor_);
- PrintInheritanceChain(*it);
- }
- }
- }
-
- // Check for any problems with WeakPtrFactory class members. This currently
- // only checks that any WeakPtrFactory<T> member of T appears as the last
- // data member in T. We could consider checking for bad uses of
- // WeakPtrFactory to refer to other data members, but that would require
- // looking at the initializer list in constructors to see what the factory
- // points to.
- // Note, if we later add other unrelated checks of data members, we should
- // consider collapsing them in to one loop to avoid iterating over the data
- // members more than once.
- void CheckWeakPtrFactoryMembers(SourceLocation record_location,
- CXXRecordDecl* record) {
- // Skip anonymous structs.
- if (record->getIdentifier() == NULL)
- return;
-
- // Iterate through members of the class.
- RecordDecl::field_iterator iter(record->field_begin()),
- the_end(record->field_end());
- SourceLocation weak_ptr_factory_location; // Invalid initially.
- for (; iter != the_end; ++iter) {
- // If we enter the loop but have already seen a matching WeakPtrFactory,
- // it means there is at least one member after the factory.
- if (weak_ptr_factory_location.isValid()) {
- diagnostic().Report(weak_ptr_factory_location,
- diag_weak_ptr_factory_order_);
- }
- const TemplateSpecializationType* template_spec_type =
- iter->getType().getTypePtr()->getAs<TemplateSpecializationType>();
- if (template_spec_type) {
- const TemplateDecl* template_decl =
- template_spec_type->getTemplateName().getAsTemplateDecl();
- if (template_decl && template_spec_type->getNumArgs() >= 1) {
- if (template_decl->getNameAsString().compare("WeakPtrFactory") == 0 &&
- GetNamespace(template_decl) == "base") {
- const TemplateArgument& arg = template_spec_type->getArg(0);
- if (arg.getAsType().getTypePtr()->getAsCXXRecordDecl() ==
- record->getTypeForDecl()->getAsCXXRecordDecl()) {
- weak_ptr_factory_location = iter->getLocation();
- }
- }
- }
- }
- }
- }
-};
-
-
-class FindBadConstructsAction : public PluginASTAction {
- public:
- FindBadConstructsAction() {
- }
-
- protected:
- // Overridden from PluginASTAction:
- virtual ASTConsumer* CreateASTConsumer(CompilerInstance& instance,
- llvm::StringRef ref) {
- return new FindBadConstructsConsumer(instance, options_);
- }
-
- virtual bool ParseArgs(const CompilerInstance& instance,
- const std::vector<std::string>& args) {
- bool parsed = true;
-
- for (size_t i = 0; i < args.size() && parsed; ++i) {
- if (args[i] == "skip-virtuals-in-implementations") {
- // TODO(rsleevi): Remove this once http://crbug.com/115047 is fixed.
- options_.check_virtuals_in_implementations = false;
- } else if (args[i] == "check-base-classes") {
- // TODO(rsleevi): Remove this once http://crbug.com/123295 is fixed.
- options_.check_base_classes = true;
- } else if (args[i] == "check-url-directory") {
- // TODO(tfarina): Remove this once http://crbug.com/229660 is fixed.
- options_.check_url_directory = true;
- } else if (args[i] == "check-weak-ptr-factory-order") {
- // TODO(dmichael): Remove this once http://crbug.com/303818 is fixed.
- options_.check_weak_ptr_factory_order = true;
- } else {
- parsed = false;
- llvm::errs() << "Unknown clang plugin argument: " << args[i] << "\n";
- }
- }
-
- return parsed;
- }
-
- private:
- FindBadConstructsOptions options_;
-};
-
-} // namespace
-
-static FrontendPluginRegistry::Add<FindBadConstructsAction>
-X("find-bad-constructs", "Finds bad C++ constructs");
diff --git a/chromium/tools/clang/plugins/FindBadConstructsAction.cpp b/chromium/tools/clang/plugins/FindBadConstructsAction.cpp
new file mode 100644
index 00000000000..838590d7d38
--- /dev/null
+++ b/chromium/tools/clang/plugins/FindBadConstructsAction.cpp
@@ -0,0 +1,55 @@
+// Copyright (c) 2012 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.
+
+#include "FindBadConstructsAction.h"
+
+#include "clang/Frontend/FrontendPluginRegistry.h"
+
+#include "FindBadConstructsConsumer.h"
+
+using namespace clang;
+
+namespace chrome_checker {
+
+FindBadConstructsAction::FindBadConstructsAction() {
+}
+
+ASTConsumer* FindBadConstructsAction::CreateASTConsumer(
+ CompilerInstance& instance,
+ llvm::StringRef ref) {
+ return new FindBadConstructsConsumer(instance, options_);
+}
+
+bool FindBadConstructsAction::ParseArgs(const CompilerInstance& instance,
+ const std::vector<std::string>& args) {
+ bool parsed = true;
+
+ for (size_t i = 0; i < args.size() && parsed; ++i) {
+ if (args[i] == "skip-virtuals-in-implementations") {
+ // TODO(rsleevi): Remove this once http://crbug.com/115047 is fixed.
+ options_.check_virtuals_in_implementations = false;
+ } else if (args[i] == "check-base-classes") {
+ // TODO(rsleevi): Remove this once http://crbug.com/123295 is fixed.
+ options_.check_base_classes = true;
+ } else if (args[i] == "check-weak-ptr-factory-order") {
+ // TODO(dmichael): Remove this once http://crbug.com/303818 is fixed.
+ options_.check_weak_ptr_factory_order = true;
+ } else if (args[i] == "check-enum-last-value") {
+ // TODO(tsepez): Enable this by default once http://crbug.com/356815
+ // and http://crbug.com/356816 are fixed.
+ options_.check_enum_last_value = true;
+ } else {
+ parsed = false;
+ llvm::errs() << "Unknown clang plugin argument: " << args[i] << "\n";
+ }
+ }
+
+ return parsed;
+}
+
+} // namespace chrome_checker
+
+static FrontendPluginRegistry::Add<chrome_checker::FindBadConstructsAction> X(
+ "find-bad-constructs",
+ "Finds bad C++ constructs");
diff --git a/chromium/tools/clang/plugins/FindBadConstructsAction.h b/chromium/tools/clang/plugins/FindBadConstructsAction.h
new file mode 100644
index 00000000000..887d339cca7
--- /dev/null
+++ b/chromium/tools/clang/plugins/FindBadConstructsAction.h
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 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.
+
+#ifndef TOOLS_CLANG_PLUGINS_FINDBADCONSTRUCTIONS_ACTION_H_
+#define TOOLS_CLANG_PLUGINS_FINDBADCONSTRUCTIONS_ACTION_H_
+
+#include "clang/Frontend/FrontendAction.h"
+
+#include "Options.h"
+
+namespace chrome_checker {
+
+class FindBadConstructsAction : public clang::PluginASTAction {
+ public:
+ FindBadConstructsAction();
+
+ protected:
+ // Overridden from PluginASTAction:
+ virtual clang::ASTConsumer* CreateASTConsumer(
+ clang::CompilerInstance& instance,
+ llvm::StringRef ref);
+ virtual bool ParseArgs(const clang::CompilerInstance& instance,
+ const std::vector<std::string>& args);
+
+ private:
+ Options options_;
+};
+
+} // namespace chrome_checker
+
+#endif // TOOLS_CLANG_PLUGINS_FINDBADCONSTRUCTIONS_ACTION_H_
diff --git a/chromium/tools/clang/plugins/FindBadConstructsConsumer.cpp b/chromium/tools/clang/plugins/FindBadConstructsConsumer.cpp
new file mode 100644
index 00000000000..c4219a1ff23
--- /dev/null
+++ b/chromium/tools/clang/plugins/FindBadConstructsConsumer.cpp
@@ -0,0 +1,687 @@
+// Copyright (c) 2012 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.
+
+#include "FindBadConstructsConsumer.h"
+
+#include "clang/Frontend/CompilerInstance.h"
+#include "clang/Lex/Lexer.h"
+#include "llvm/Support/raw_ostream.h"
+
+using namespace clang;
+
+namespace chrome_checker {
+
+namespace {
+
+const char kMethodRequiresOverride[] =
+ "[chromium-style] Overriding method must be marked with OVERRIDE.";
+const char kMethodRequiresVirtual[] =
+ "[chromium-style] Overriding method must have \"virtual\" keyword.";
+const char kNoExplicitDtor[] =
+ "[chromium-style] Classes that are ref-counted should have explicit "
+ "destructors that are declared protected or private.";
+const char kPublicDtor[] =
+ "[chromium-style] Classes that are ref-counted should have "
+ "destructors that are declared protected or private.";
+const char kProtectedNonVirtualDtor[] =
+ "[chromium-style] Classes that are ref-counted and have non-private "
+ "destructors should declare their destructor virtual.";
+const char kWeakPtrFactoryOrder[] =
+ "[chromium-style] WeakPtrFactory members which refer to their outer class "
+ "must be the last member in the outer class definition.";
+const char kBadLastEnumValue[] =
+ "[chromium-style] _LAST/Last constants of enum types must have the maximal "
+ "value for any constant of that type.";
+const char kNoteInheritance[] = "[chromium-style] %0 inherits from %1 here";
+const char kNoteImplicitDtor[] =
+ "[chromium-style] No explicit destructor for %0 defined";
+const char kNotePublicDtor[] =
+ "[chromium-style] Public destructor declared here";
+const char kNoteProtectedNonVirtualDtor[] =
+ "[chromium-style] Protected non-virtual destructor declared here";
+
+bool TypeHasNonTrivialDtor(const Type* type) {
+ if (const CXXRecordDecl* cxx_r = type->getPointeeCXXRecordDecl())
+ return !cxx_r->hasTrivialDestructor();
+
+ return false;
+}
+
+// Returns the underlying Type for |type| by expanding typedefs and removing
+// any namespace qualifiers. This is similar to desugaring, except that for
+// ElaboratedTypes, desugar will unwrap too much.
+const Type* UnwrapType(const Type* type) {
+ if (const ElaboratedType* elaborated = dyn_cast<ElaboratedType>(type))
+ return UnwrapType(elaborated->getNamedType().getTypePtr());
+ if (const TypedefType* typedefed = dyn_cast<TypedefType>(type))
+ return UnwrapType(typedefed->desugar().getTypePtr());
+ return type;
+}
+
+} // namespace
+
+FindBadConstructsConsumer::FindBadConstructsConsumer(CompilerInstance& instance,
+ const Options& options)
+ : ChromeClassTester(instance), options_(options) {
+ // Register warning/error messages.
+ diag_method_requires_override_ =
+ diagnostic().getCustomDiagID(getErrorLevel(), kMethodRequiresOverride);
+ diag_method_requires_virtual_ =
+ diagnostic().getCustomDiagID(getErrorLevel(), kMethodRequiresVirtual);
+ diag_no_explicit_dtor_ =
+ diagnostic().getCustomDiagID(getErrorLevel(), kNoExplicitDtor);
+ diag_public_dtor_ =
+ diagnostic().getCustomDiagID(getErrorLevel(), kPublicDtor);
+ diag_protected_non_virtual_dtor_ =
+ diagnostic().getCustomDiagID(getErrorLevel(), kProtectedNonVirtualDtor);
+ diag_weak_ptr_factory_order_ =
+ diagnostic().getCustomDiagID(getErrorLevel(), kWeakPtrFactoryOrder);
+ diag_bad_enum_last_value_ =
+ diagnostic().getCustomDiagID(getErrorLevel(), kBadLastEnumValue);
+
+ // Registers notes to make it easier to interpret warnings.
+ diag_note_inheritance_ =
+ diagnostic().getCustomDiagID(DiagnosticsEngine::Note, kNoteInheritance);
+ diag_note_implicit_dtor_ =
+ diagnostic().getCustomDiagID(DiagnosticsEngine::Note, kNoteImplicitDtor);
+ diag_note_public_dtor_ =
+ diagnostic().getCustomDiagID(DiagnosticsEngine::Note, kNotePublicDtor);
+ diag_note_protected_non_virtual_dtor_ = diagnostic().getCustomDiagID(
+ DiagnosticsEngine::Note, kNoteProtectedNonVirtualDtor);
+}
+
+void FindBadConstructsConsumer::CheckChromeClass(SourceLocation record_location,
+ CXXRecordDecl* record) {
+ bool implementation_file = InImplementationFile(record_location);
+
+ if (!implementation_file) {
+ // Only check for "heavy" constructors/destructors in header files;
+ // within implementation files, there is no performance cost.
+ CheckCtorDtorWeight(record_location, record);
+ }
+
+ if (!implementation_file || options_.check_virtuals_in_implementations) {
+ bool warn_on_inline_bodies = !implementation_file;
+
+ // Check that all virtual methods are marked accordingly with both
+ // virtual and OVERRIDE.
+ CheckVirtualMethods(record_location, record, warn_on_inline_bodies);
+ }
+
+ CheckRefCountedDtors(record_location, record);
+
+ if (options_.check_weak_ptr_factory_order)
+ CheckWeakPtrFactoryMembers(record_location, record);
+}
+
+void FindBadConstructsConsumer::CheckChromeEnum(SourceLocation enum_location,
+ EnumDecl* enum_decl) {
+ if (!options_.check_enum_last_value)
+ return;
+
+ bool got_one = false;
+ bool is_signed = false;
+ llvm::APSInt max_so_far;
+ EnumDecl::enumerator_iterator iter;
+ for (iter = enum_decl->enumerator_begin();
+ iter != enum_decl->enumerator_end();
+ ++iter) {
+ llvm::APSInt current_value = iter->getInitVal();
+ if (!got_one) {
+ max_so_far = current_value;
+ is_signed = current_value.isSigned();
+ got_one = true;
+ } else {
+ if (is_signed != current_value.isSigned()) {
+ // This only happens in some cases when compiling C (not C++) files,
+ // so it is OK to bail out here.
+ return;
+ }
+ if (current_value > max_so_far)
+ max_so_far = current_value;
+ }
+ }
+ for (iter = enum_decl->enumerator_begin();
+ iter != enum_decl->enumerator_end();
+ ++iter) {
+ std::string name = iter->getNameAsString();
+ if (((name.size() > 4 && name.compare(name.size() - 4, 4, "Last") == 0) ||
+ (name.size() > 5 && name.compare(name.size() - 5, 5, "_LAST") == 0)) &&
+ iter->getInitVal() < max_so_far) {
+ diagnostic().Report(iter->getLocation(), diag_bad_enum_last_value_);
+ }
+ }
+}
+
+void FindBadConstructsConsumer::CheckCtorDtorWeight(
+ SourceLocation record_location,
+ CXXRecordDecl* record) {
+ // We don't handle anonymous structs. If this record doesn't have a
+ // name, it's of the form:
+ //
+ // struct {
+ // ...
+ // } name_;
+ if (record->getIdentifier() == NULL)
+ return;
+
+ // Count the number of templated base classes as a feature of whether the
+ // destructor can be inlined.
+ int templated_base_classes = 0;
+ for (CXXRecordDecl::base_class_const_iterator it = record->bases_begin();
+ it != record->bases_end();
+ ++it) {
+ if (it->getTypeSourceInfo()->getTypeLoc().getTypeLocClass() ==
+ TypeLoc::TemplateSpecialization) {
+ ++templated_base_classes;
+ }
+ }
+
+ // Count the number of trivial and non-trivial member variables.
+ int trivial_member = 0;
+ int non_trivial_member = 0;
+ int templated_non_trivial_member = 0;
+ for (RecordDecl::field_iterator it = record->field_begin();
+ it != record->field_end();
+ ++it) {
+ CountType(it->getType().getTypePtr(),
+ &trivial_member,
+ &non_trivial_member,
+ &templated_non_trivial_member);
+ }
+
+ // Check to see if we need to ban inlined/synthesized constructors. Note
+ // that the cutoffs here are kind of arbitrary. Scores over 10 break.
+ int dtor_score = 0;
+ // Deriving from a templated base class shouldn't be enough to trigger
+ // the ctor warning, but if you do *anything* else, it should.
+ //
+ // TODO(erg): This is motivated by templated base classes that don't have
+ // any data members. Somehow detect when templated base classes have data
+ // members and treat them differently.
+ dtor_score += templated_base_classes * 9;
+ // Instantiating a template is an insta-hit.
+ dtor_score += templated_non_trivial_member * 10;
+ // The fourth normal class member should trigger the warning.
+ dtor_score += non_trivial_member * 3;
+
+ int ctor_score = dtor_score;
+ // You should be able to have 9 ints before we warn you.
+ ctor_score += trivial_member;
+
+ if (ctor_score >= 10) {
+ if (!record->hasUserDeclaredConstructor()) {
+ emitWarning(record_location,
+ "Complex class/struct needs an explicit out-of-line "
+ "constructor.");
+ } else {
+ // Iterate across all the constructors in this file and yell if we
+ // find one that tries to be inline.
+ for (CXXRecordDecl::ctor_iterator it = record->ctor_begin();
+ it != record->ctor_end();
+ ++it) {
+ if (it->hasInlineBody()) {
+ if (it->isCopyConstructor() &&
+ !record->hasUserDeclaredCopyConstructor()) {
+ emitWarning(record_location,
+ "Complex class/struct needs an explicit out-of-line "
+ "copy constructor.");
+ } else {
+ emitWarning(it->getInnerLocStart(),
+ "Complex constructor has an inlined body.");
+ }
+ }
+ }
+ }
+ }
+
+ // The destructor side is equivalent except that we don't check for
+ // trivial members; 20 ints don't need a destructor.
+ if (dtor_score >= 10 && !record->hasTrivialDestructor()) {
+ if (!record->hasUserDeclaredDestructor()) {
+ emitWarning(record_location,
+ "Complex class/struct needs an explicit out-of-line "
+ "destructor.");
+ } else if (CXXDestructorDecl* dtor = record->getDestructor()) {
+ if (dtor->hasInlineBody()) {
+ emitWarning(dtor->getInnerLocStart(),
+ "Complex destructor has an inline body.");
+ }
+ }
+ }
+}
+
+void FindBadConstructsConsumer::CheckVirtualMethod(const CXXMethodDecl* method,
+ bool warn_on_inline_bodies) {
+ if (!method->isVirtual())
+ return;
+
+ if (!method->isVirtualAsWritten()) {
+ SourceLocation loc = method->getTypeSpecStartLoc();
+ if (isa<CXXDestructorDecl>(method))
+ loc = method->getInnerLocStart();
+ SourceManager& manager = instance().getSourceManager();
+ FullSourceLoc full_loc(loc, manager);
+ SourceLocation spelling_loc = manager.getSpellingLoc(loc);
+ diagnostic().Report(full_loc, diag_method_requires_virtual_)
+ << FixItHint::CreateInsertion(spelling_loc, "virtual ");
+ }
+
+ // Virtual methods should not have inline definitions beyond "{}". This
+ // only matters for header files.
+ if (warn_on_inline_bodies && method->hasBody() && method->hasInlineBody()) {
+ if (CompoundStmt* cs = dyn_cast<CompoundStmt>(method->getBody())) {
+ if (cs->size()) {
+ emitWarning(cs->getLBracLoc(),
+ "virtual methods with non-empty bodies shouldn't be "
+ "declared inline.");
+ }
+ }
+ }
+}
+
+bool FindBadConstructsConsumer::InTestingNamespace(const Decl* record) {
+ return GetNamespace(record).find("testing") != std::string::npos;
+}
+
+bool FindBadConstructsConsumer::IsMethodInBannedOrTestingNamespace(
+ const CXXMethodDecl* method) {
+ if (InBannedNamespace(method))
+ return true;
+ for (CXXMethodDecl::method_iterator i = method->begin_overridden_methods();
+ i != method->end_overridden_methods();
+ ++i) {
+ const CXXMethodDecl* overridden = *i;
+ if (IsMethodInBannedOrTestingNamespace(overridden) ||
+ InTestingNamespace(overridden)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+void FindBadConstructsConsumer::CheckOverriddenMethod(
+ const CXXMethodDecl* method) {
+ if (!method->size_overridden_methods() || method->getAttr<OverrideAttr>())
+ return;
+
+ if (isa<CXXDestructorDecl>(method) || method->isPure())
+ return;
+
+ if (IsMethodInBannedOrTestingNamespace(method))
+ return;
+
+ SourceManager& manager = instance().getSourceManager();
+ SourceRange type_info_range =
+ method->getTypeSourceInfo()->getTypeLoc().getSourceRange();
+ FullSourceLoc loc(type_info_range.getBegin(), manager);
+
+ // Build the FixIt insertion point after the end of the method definition,
+ // including any const-qualifiers and attributes, and before the opening
+ // of the l-curly-brace (if inline) or the semi-color (if a declaration).
+ SourceLocation spelling_end =
+ manager.getSpellingLoc(type_info_range.getEnd());
+ if (spelling_end.isValid()) {
+ SourceLocation token_end =
+ Lexer::getLocForEndOfToken(spelling_end, 0, manager, LangOptions());
+ diagnostic().Report(token_end, diag_method_requires_override_)
+ << FixItHint::CreateInsertion(token_end, " OVERRIDE");
+ } else {
+ diagnostic().Report(loc, diag_method_requires_override_);
+ }
+}
+
+// Makes sure there is a "virtual" keyword on virtual methods.
+//
+// Gmock objects trigger these for each MOCK_BLAH() macro used. So we have a
+// trick to get around that. If a class has member variables whose types are
+// in the "testing" namespace (which is how gmock works behind the scenes),
+// there's a really high chance we won't care about these errors
+void FindBadConstructsConsumer::CheckVirtualMethods(
+ SourceLocation record_location,
+ CXXRecordDecl* record,
+ bool warn_on_inline_bodies) {
+ for (CXXRecordDecl::field_iterator it = record->field_begin();
+ it != record->field_end();
+ ++it) {
+ CXXRecordDecl* record_type = it->getTypeSourceInfo()
+ ->getTypeLoc()
+ .getTypePtr()
+ ->getAsCXXRecordDecl();
+ if (record_type) {
+ if (InTestingNamespace(record_type)) {
+ return;
+ }
+ }
+ }
+
+ for (CXXRecordDecl::method_iterator it = record->method_begin();
+ it != record->method_end();
+ ++it) {
+ if (it->isCopyAssignmentOperator() || isa<CXXConstructorDecl>(*it)) {
+ // Ignore constructors and assignment operators.
+ } else if (isa<CXXDestructorDecl>(*it) &&
+ !record->hasUserDeclaredDestructor()) {
+ // Ignore non-user-declared destructors.
+ } else {
+ CheckVirtualMethod(*it, warn_on_inline_bodies);
+ CheckOverriddenMethod(*it);
+ }
+ }
+}
+
+void FindBadConstructsConsumer::CountType(const Type* type,
+ int* trivial_member,
+ int* non_trivial_member,
+ int* templated_non_trivial_member) {
+ switch (type->getTypeClass()) {
+ case Type::Record: {
+ // Simplifying; the whole class isn't trivial if the dtor is, but
+ // we use this as a signal about complexity.
+ if (TypeHasNonTrivialDtor(type))
+ (*trivial_member)++;
+ else
+ (*non_trivial_member)++;
+ break;
+ }
+ case Type::TemplateSpecialization: {
+ TemplateName name =
+ dyn_cast<TemplateSpecializationType>(type)->getTemplateName();
+ bool whitelisted_template = false;
+
+ // HACK: I'm at a loss about how to get the syntax checker to get
+ // whether a template is exterened or not. For the first pass here,
+ // just do retarded string comparisons.
+ if (TemplateDecl* decl = name.getAsTemplateDecl()) {
+ std::string base_name = decl->getNameAsString();
+ if (base_name == "basic_string")
+ whitelisted_template = true;
+ }
+
+ if (whitelisted_template)
+ (*non_trivial_member)++;
+ else
+ (*templated_non_trivial_member)++;
+ break;
+ }
+ case Type::Elaborated: {
+ CountType(dyn_cast<ElaboratedType>(type)->getNamedType().getTypePtr(),
+ trivial_member,
+ non_trivial_member,
+ templated_non_trivial_member);
+ break;
+ }
+ case Type::Typedef: {
+ while (const TypedefType* TT = dyn_cast<TypedefType>(type)) {
+ type = TT->getDecl()->getUnderlyingType().getTypePtr();
+ }
+ CountType(type,
+ trivial_member,
+ non_trivial_member,
+ templated_non_trivial_member);
+ break;
+ }
+ default: {
+ // Stupid assumption: anything we see that isn't the above is one of
+ // the 20 integer types.
+ (*trivial_member)++;
+ break;
+ }
+ }
+}
+
+// Check |record| for issues that are problematic for ref-counted types.
+// Note that |record| may not be a ref-counted type, but a base class for
+// a type that is.
+// If there are issues, update |loc| with the SourceLocation of the issue
+// and returns appropriately, or returns None if there are no issues.
+FindBadConstructsConsumer::RefcountIssue
+FindBadConstructsConsumer::CheckRecordForRefcountIssue(
+ const CXXRecordDecl* record,
+ SourceLocation& loc) {
+ if (!record->hasUserDeclaredDestructor()) {
+ loc = record->getLocation();
+ return ImplicitDestructor;
+ }
+
+ if (CXXDestructorDecl* dtor = record->getDestructor()) {
+ if (dtor->getAccess() == AS_public) {
+ loc = dtor->getInnerLocStart();
+ return PublicDestructor;
+ }
+ }
+
+ return None;
+}
+
+// Adds either a warning or error, based on the current handling of
+// -Werror.
+DiagnosticsEngine::Level FindBadConstructsConsumer::getErrorLevel() {
+ return diagnostic().getWarningsAsErrors() ? DiagnosticsEngine::Error
+ : DiagnosticsEngine::Warning;
+}
+
+// Returns true if |base| specifies one of the Chromium reference counted
+// classes (base::RefCounted / base::RefCountedThreadSafe).
+bool FindBadConstructsConsumer::IsRefCountedCallback(
+ const CXXBaseSpecifier* base,
+ CXXBasePath& path,
+ void* user_data) {
+ FindBadConstructsConsumer* self =
+ static_cast<FindBadConstructsConsumer*>(user_data);
+
+ const TemplateSpecializationType* base_type =
+ dyn_cast<TemplateSpecializationType>(
+ UnwrapType(base->getType().getTypePtr()));
+ if (!base_type) {
+ // Base-most definition is not a template, so this cannot derive from
+ // base::RefCounted. However, it may still be possible to use with a
+ // scoped_refptr<> and support ref-counting, so this is not a perfect
+ // guarantee of safety.
+ return false;
+ }
+
+ TemplateName name = base_type->getTemplateName();
+ if (TemplateDecl* decl = name.getAsTemplateDecl()) {
+ std::string base_name = decl->getNameAsString();
+
+ // Check for both base::RefCounted and base::RefCountedThreadSafe.
+ if (base_name.compare(0, 10, "RefCounted") == 0 &&
+ self->GetNamespace(decl) == "base") {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+// Returns true if |base| specifies a class that has a public destructor,
+// either explicitly or implicitly.
+bool FindBadConstructsConsumer::HasPublicDtorCallback(
+ const CXXBaseSpecifier* base,
+ CXXBasePath& path,
+ void* user_data) {
+ // Only examine paths that have public inheritance, as they are the
+ // only ones which will result in the destructor potentially being
+ // exposed. This check is largely redundant, as Chromium code should be
+ // exclusively using public inheritance.
+ if (path.Access != AS_public)
+ return false;
+
+ CXXRecordDecl* record =
+ dyn_cast<CXXRecordDecl>(base->getType()->getAs<RecordType>()->getDecl());
+ SourceLocation unused;
+ return None != CheckRecordForRefcountIssue(record, unused);
+}
+
+// Outputs a C++ inheritance chain as a diagnostic aid.
+void FindBadConstructsConsumer::PrintInheritanceChain(const CXXBasePath& path) {
+ for (CXXBasePath::const_iterator it = path.begin(); it != path.end(); ++it) {
+ diagnostic().Report(it->Base->getLocStart(), diag_note_inheritance_)
+ << it->Class << it->Base->getType();
+ }
+}
+
+unsigned FindBadConstructsConsumer::DiagnosticForIssue(RefcountIssue issue) {
+ switch (issue) {
+ case ImplicitDestructor:
+ return diag_no_explicit_dtor_;
+ case PublicDestructor:
+ return diag_public_dtor_;
+ case None:
+ assert(false && "Do not call DiagnosticForIssue with issue None");
+ return 0;
+ }
+ assert(false);
+ return 0;
+}
+
+// Check |record| to determine if it has any problematic refcounting
+// issues and, if so, print them as warnings/errors based on the current
+// value of getErrorLevel().
+//
+// If |record| is a C++ class, and if it inherits from one of the Chromium
+// ref-counting classes (base::RefCounted / base::RefCountedThreadSafe),
+// ensure that there are no public destructors in the class hierarchy. This
+// is to guard against accidentally stack-allocating a RefCounted class or
+// sticking it in a non-ref-counted container (like scoped_ptr<>).
+void FindBadConstructsConsumer::CheckRefCountedDtors(
+ SourceLocation record_location,
+ CXXRecordDecl* record) {
+ // Skip anonymous structs.
+ if (record->getIdentifier() == NULL)
+ return;
+
+ // Determine if the current type is even ref-counted.
+ CXXBasePaths refcounted_path;
+ if (!record->lookupInBases(&FindBadConstructsConsumer::IsRefCountedCallback,
+ this,
+ refcounted_path)) {
+ return; // Class does not derive from a ref-counted base class.
+ }
+
+ // Easy check: Check to see if the current type is problematic.
+ SourceLocation loc;
+ RefcountIssue issue = CheckRecordForRefcountIssue(record, loc);
+ if (issue != None) {
+ diagnostic().Report(loc, DiagnosticForIssue(issue));
+ PrintInheritanceChain(refcounted_path.front());
+ return;
+ }
+ if (CXXDestructorDecl* dtor =
+ refcounted_path.begin()->back().Class->getDestructor()) {
+ if (dtor->getAccess() == AS_protected && !dtor->isVirtual()) {
+ loc = dtor->getInnerLocStart();
+ diagnostic().Report(loc, diag_protected_non_virtual_dtor_);
+ return;
+ }
+ }
+
+ // Long check: Check all possible base classes for problematic
+ // destructors. This checks for situations involving multiple
+ // inheritance, where the ref-counted class may be implementing an
+ // interface that has a public or implicit destructor.
+ //
+ // struct SomeInterface {
+ // virtual void DoFoo();
+ // };
+ //
+ // struct RefCountedInterface
+ // : public base::RefCounted<RefCountedInterface>,
+ // public SomeInterface {
+ // private:
+ // friend class base::Refcounted<RefCountedInterface>;
+ // virtual ~RefCountedInterface() {}
+ // };
+ //
+ // While RefCountedInterface is "safe", in that its destructor is
+ // private, it's possible to do the following "unsafe" code:
+ // scoped_refptr<RefCountedInterface> some_class(
+ // new RefCountedInterface);
+ // // Calls SomeInterface::~SomeInterface(), which is unsafe.
+ // delete static_cast<SomeInterface*>(some_class.get());
+ if (!options_.check_base_classes)
+ return;
+
+ // Find all public destructors. This will record the class hierarchy
+ // that leads to the public destructor in |dtor_paths|.
+ CXXBasePaths dtor_paths;
+ if (!record->lookupInBases(&FindBadConstructsConsumer::HasPublicDtorCallback,
+ this,
+ dtor_paths)) {
+ return;
+ }
+
+ for (CXXBasePaths::const_paths_iterator it = dtor_paths.begin();
+ it != dtor_paths.end();
+ ++it) {
+ // The record with the problem will always be the last record
+ // in the path, since it is the record that stopped the search.
+ const CXXRecordDecl* problem_record = dyn_cast<CXXRecordDecl>(
+ it->back().Base->getType()->getAs<RecordType>()->getDecl());
+
+ issue = CheckRecordForRefcountIssue(problem_record, loc);
+
+ if (issue == ImplicitDestructor) {
+ diagnostic().Report(record_location, diag_no_explicit_dtor_);
+ PrintInheritanceChain(refcounted_path.front());
+ diagnostic().Report(loc, diag_note_implicit_dtor_) << problem_record;
+ PrintInheritanceChain(*it);
+ } else if (issue == PublicDestructor) {
+ diagnostic().Report(record_location, diag_public_dtor_);
+ PrintInheritanceChain(refcounted_path.front());
+ diagnostic().Report(loc, diag_note_public_dtor_);
+ PrintInheritanceChain(*it);
+ }
+ }
+}
+
+// Check for any problems with WeakPtrFactory class members. This currently
+// only checks that any WeakPtrFactory<T> member of T appears as the last
+// data member in T. We could consider checking for bad uses of
+// WeakPtrFactory to refer to other data members, but that would require
+// looking at the initializer list in constructors to see what the factory
+// points to.
+// Note, if we later add other unrelated checks of data members, we should
+// consider collapsing them in to one loop to avoid iterating over the data
+// members more than once.
+void FindBadConstructsConsumer::CheckWeakPtrFactoryMembers(
+ SourceLocation record_location,
+ CXXRecordDecl* record) {
+ // Skip anonymous structs.
+ if (record->getIdentifier() == NULL)
+ return;
+
+ // Iterate through members of the class.
+ RecordDecl::field_iterator iter(record->field_begin()),
+ the_end(record->field_end());
+ SourceLocation weak_ptr_factory_location; // Invalid initially.
+ for (; iter != the_end; ++iter) {
+ // If we enter the loop but have already seen a matching WeakPtrFactory,
+ // it means there is at least one member after the factory.
+ if (weak_ptr_factory_location.isValid()) {
+ diagnostic().Report(weak_ptr_factory_location,
+ diag_weak_ptr_factory_order_);
+ }
+ const TemplateSpecializationType* template_spec_type =
+ iter->getType().getTypePtr()->getAs<TemplateSpecializationType>();
+ if (template_spec_type) {
+ const TemplateDecl* template_decl =
+ template_spec_type->getTemplateName().getAsTemplateDecl();
+ if (template_decl && template_spec_type->getNumArgs() >= 1) {
+ if (template_decl->getNameAsString().compare("WeakPtrFactory") == 0 &&
+ GetNamespace(template_decl) == "base") {
+ const TemplateArgument& arg = template_spec_type->getArg(0);
+ if (arg.getAsType().getTypePtr()->getAsCXXRecordDecl() ==
+ record->getTypeForDecl()->getAsCXXRecordDecl()) {
+ weak_ptr_factory_location = iter->getLocation();
+ }
+ }
+ }
+ }
+ }
+}
+
+} // namespace chrome_checker
diff --git a/chromium/tools/clang/plugins/FindBadConstructsConsumer.h b/chromium/tools/clang/plugins/FindBadConstructsConsumer.h
new file mode 100644
index 00000000000..4e511939cb5
--- /dev/null
+++ b/chromium/tools/clang/plugins/FindBadConstructsConsumer.h
@@ -0,0 +1,100 @@
+// Copyright (c) 2012 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.
+
+// This file defines a bunch of recurring problems in the Chromium C++ code.
+//
+// Checks that are implemented:
+// - Constructors/Destructors should not be inlined if they are of a complex
+// class type.
+// - Missing "virtual" keywords on methods that should be virtual.
+// - Non-annotated overriding virtual methods.
+// - Virtual methods with nonempty implementations in their headers.
+// - Classes that derive from base::RefCounted / base::RefCountedThreadSafe
+// should have protected or private destructors.
+// - WeakPtrFactory members that refer to their outer class should be the last
+// member.
+// - Enum types with a xxxx_LAST or xxxxLast const actually have that constant
+// have the maximal value for that type.
+
+#include "clang/AST/AST.h"
+#include "clang/AST/ASTConsumer.h"
+#include "clang/AST/Attr.h"
+#include "clang/AST/CXXInheritance.h"
+#include "clang/AST/TypeLoc.h"
+#include "clang/Basic/SourceManager.h"
+
+#include "ChromeClassTester.h"
+#include "Options.h"
+
+namespace chrome_checker {
+
+// Searches for constructs that we know we don't want in the Chromium code base.
+class FindBadConstructsConsumer : public ChromeClassTester {
+ public:
+ FindBadConstructsConsumer(clang::CompilerInstance& instance,
+ const Options& options);
+
+ // ChromeClassTester overrides:
+ virtual void CheckChromeClass(clang::SourceLocation record_location,
+ clang::CXXRecordDecl* record);
+ virtual void CheckChromeEnum(clang::SourceLocation enum_location,
+ clang::EnumDecl* enum_decl);
+
+ private:
+ // The type of problematic ref-counting pattern that was encountered.
+ enum RefcountIssue { None, ImplicitDestructor, PublicDestructor };
+
+ void CheckCtorDtorWeight(clang::SourceLocation record_location,
+ clang::CXXRecordDecl* record);
+
+ void CheckVirtualMethod(const clang::CXXMethodDecl* method,
+ bool warn_on_inline_bodies);
+
+ bool InTestingNamespace(const clang::Decl* record);
+ bool IsMethodInBannedOrTestingNamespace(const clang::CXXMethodDecl* method);
+
+ void CheckOverriddenMethod(const clang::CXXMethodDecl* method);
+ void CheckVirtualMethods(clang::SourceLocation record_location,
+ clang::CXXRecordDecl* record,
+ bool warn_on_inline_bodies);
+
+ void CountType(const clang::Type* type,
+ int* trivial_member,
+ int* non_trivial_member,
+ int* templated_non_trivial_member);
+
+ static RefcountIssue CheckRecordForRefcountIssue(
+ const clang::CXXRecordDecl* record,
+ clang::SourceLocation& loc);
+ clang::DiagnosticsEngine::Level getErrorLevel();
+ static bool IsRefCountedCallback(const clang::CXXBaseSpecifier* base,
+ clang::CXXBasePath& path,
+ void* user_data);
+ static bool HasPublicDtorCallback(const clang::CXXBaseSpecifier* base,
+ clang::CXXBasePath& path,
+ void* user_data);
+ void PrintInheritanceChain(const clang::CXXBasePath& path);
+ unsigned DiagnosticForIssue(RefcountIssue issue);
+ void CheckRefCountedDtors(clang::SourceLocation record_location,
+ clang::CXXRecordDecl* record);
+
+ void CheckWeakPtrFactoryMembers(clang::SourceLocation record_location,
+ clang::CXXRecordDecl* record);
+
+ const Options options_;
+
+ unsigned diag_method_requires_override_;
+ unsigned diag_method_requires_virtual_;
+ unsigned diag_no_explicit_dtor_;
+ unsigned diag_public_dtor_;
+ unsigned diag_protected_non_virtual_dtor_;
+ unsigned diag_weak_ptr_factory_order_;
+ unsigned diag_bad_enum_last_value_;
+ unsigned diag_note_inheritance_;
+ unsigned diag_note_implicit_dtor_;
+ unsigned diag_note_public_dtor_;
+ unsigned diag_note_protected_non_virtual_dtor_;
+};
+
+} // namespace chrome_checker
diff --git a/chromium/tools/clang/plugins/Makefile b/chromium/tools/clang/plugins/Makefile
index 0cfec71159c..98ce28bbbe4 100644
--- a/chromium/tools/clang/plugins/Makefile
+++ b/chromium/tools/clang/plugins/Makefile
@@ -15,5 +15,5 @@ SHARED_LIBRARY = 1
include $(CLANG_LEVEL)/Makefile
ifeq ($(OS),Darwin)
- LDFLAGS=-Wl,-undefined,dynamic_lookup
+ LDFLAGS+=-Wl,-undefined,dynamic_lookup
endif
diff --git a/chromium/tools/clang/plugins/Options.h b/chromium/tools/clang/plugins/Options.h
new file mode 100644
index 00000000000..bb50124d57f
--- /dev/null
+++ b/chromium/tools/clang/plugins/Options.h
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 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.
+
+#ifndef TOOLS_CLANG_PLUGINS_OPTIONS_H_
+#define TOOLS_CLANG_PLUGINS_OPTIONS_H_
+
+namespace chrome_checker {
+
+struct Options {
+ Options()
+ : check_base_classes(false),
+ check_virtuals_in_implementations(true),
+ check_weak_ptr_factory_order(false),
+ check_enum_last_value(false) {}
+
+ bool check_base_classes;
+ bool check_virtuals_in_implementations;
+ bool check_weak_ptr_factory_order;
+ bool check_enum_last_value;
+};
+
+} // namespace chrome_checker
+
+#endif // TOOLS_CLANG_PLUGINS_OPTIONS_H_
diff --git a/chromium/tools/clang/scripts/blink_gc_plugin_flags.sh b/chromium/tools/clang/scripts/blink_gc_plugin_flags.sh
new file mode 100755
index 00000000000..25c587294b0
--- /dev/null
+++ b/chromium/tools/clang/scripts/blink_gc_plugin_flags.sh
@@ -0,0 +1,31 @@
+#!/usr/bin/env bash
+# Copyright 2014 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.
+
+# This script returns the flags that should be passed to clang.
+
+THIS_ABS_DIR=$(cd $(dirname $0) && echo $PWD)
+CLANG_LIB_PATH=$THIS_ABS_DIR/../../../third_party/llvm-build/Release+Asserts/lib
+
+if uname -s | grep -q Darwin; then
+ LIBSUFFIX=dylib
+else
+ LIBSUFFIX=so
+fi
+
+LIBNAME=\
+$(grep LIBRARYNAME "$THIS_ABS_DIR"/../blink_gc_plugin/Makefile \
+ | cut -d ' ' -f 3)
+
+FLAGS=""
+for arg in "$@"; do
+ if [[ "$arg" = "enable-oilpan=1" ]]; then
+ FLAGS="$FLAGS -Xclang -plugin-arg-blink-gc-plugin -Xclang enable-oilpan"
+ elif [[ "$arg" = "dump-graph=1" ]]; then
+ FLAGS="$FLAGS -Xclang -plugin-arg-blink-gc-plugin -Xclang dump-graph"
+ fi
+done
+
+echo -Xclang -load -Xclang $CLANG_LIB_PATH/lib$LIBNAME.$LIBSUFFIX \
+ -Xclang -add-plugin -Xclang blink-gc-plugin $FLAGS
diff --git a/chromium/tools/clang/scripts/package.sh b/chromium/tools/clang/scripts/package.sh
index 16b3c7ba500..0e05d903599 100755
--- a/chromium/tools/clang/scripts/package.sh
+++ b/chromium/tools/clang/scripts/package.sh
@@ -6,9 +6,49 @@
# This script will check out llvm and clang, and then package the results up
# to a tgz file.
+gcc_toolchain=
+
+# Parse command line options.
+while [[ $# > 0 ]]; do
+ case $1 in
+ --gcc-toolchain)
+ shift
+ if [[ $# == 0 ]]; then
+ echo "--gcc-toolchain requires an argument."
+ exit 1
+ fi
+ if [[ -x "$1/bin/gcc" ]]; then
+ gcc_toolchain=$1
+ else
+ echo "Invalid --gcc-toolchain: '$1'."
+ echo "'$1/bin/gcc' does not appear to be valid."
+ exit 1
+ fi
+ ;;
+
+ --help)
+ echo "usage: $0 [--gcc-toolchain <prefix>]"
+ echo
+ echo "--gcc-toolchain: Set the prefix for which GCC version should"
+ echo " be used for building. For example, to use gcc in"
+ echo " /opt/foo/bin/gcc, use '--gcc-toolchain '/opt/foo"
+ echo
+ exit 1
+ ;;
+ *)
+ echo "Unknown argument: '$1'."
+ echo "Use --help for help."
+ exit 1
+ ;;
+ esac
+ shift
+done
+
+
THIS_DIR="$(dirname "${0}")"
LLVM_DIR="${THIS_DIR}/../../../third_party/llvm"
LLVM_BOOTSTRAP_DIR="${THIS_DIR}/../../../third_party/llvm-bootstrap"
+LLVM_BOOTSTRAP_INSTALL_DIR="${LLVM_DIR}/../llvm-bootstrap-install"
LLVM_BUILD_DIR="${THIS_DIR}/../../../third_party/llvm-build"
LLVM_BIN_DIR="${LLVM_BUILD_DIR}/Release+Asserts/bin"
LLVM_LIB_DIR="${LLVM_BUILD_DIR}/Release+Asserts/lib"
@@ -25,13 +65,18 @@ svn diff "${LLVM_DIR}/projects/compiler-rt" 2>&1 | tee -a buildlog.txt
echo "Starting build" | tee -a buildlog.txt
-set -ex
+set -exu
# Do a clobber build.
rm -rf "${LLVM_BOOTSTRAP_DIR}"
+rm -rf "${LLVM_BOOTSTRAP_INSTALL_DIR}"
rm -rf "${LLVM_BUILD_DIR}"
-"${THIS_DIR}"/update.sh --run-tests --bootstrap --force-local-build 2>&1 | \
- tee -a buildlog.txt
+extra_flags=
+if [[ -n "${gcc_toolchain}" ]]; then
+ extra_flags="--gcc-toolchain ${gcc_toolchain}"
+fi
+"${THIS_DIR}"/update.sh --bootstrap --force-local-build --run-tests \
+ ${extra_flags} 2>&1 | tee -a buildlog.txt
R=$("${LLVM_BIN_DIR}/clang" --version | \
sed -ne 's/clang version .*(trunk \([0-9]*\))/\1/p')
@@ -53,32 +98,62 @@ cp buildlog.txt $PDIR/
# Copy clang into pdir, symlink clang++ to it.
cp "${LLVM_BIN_DIR}/clang" $PDIR/bin/
-(cd $PDIR/bin && ln -sf clang clang++ && cd -)
+(cd $PDIR/bin && ln -sf clang clang++)
cp "${LLVM_BIN_DIR}/llvm-symbolizer" $PDIR/bin/
+if [ "$(uname -s)" = "Darwin" ]; then
+ cp "${LLVM_BIN_DIR}/libc++.1.${SO_EXT}" $PDIR/bin/
+ (cd $PDIR/bin && ln -sf libc++.1.dylib libc++.dylib)
+fi
+
+# Copy libc++ headers.
+if [ "$(uname -s)" = "Darwin" ]; then
+ mkdir $PDIR/include
+ cp -R "${LLVM_BOOTSTRAP_INSTALL_DIR}/include/c++" $PDIR/include
+fi
# Copy plugins. Some of the dylibs are pretty big, so copy only the ones we
# care about.
cp "${LLVM_LIB_DIR}/libFindBadConstructs.${SO_EXT}" $PDIR/lib
-# Copy built-in headers (lib/clang/3.2/include).
+BLINKGCPLUGIN_LIBNAME=\
+$(grep LIBRARYNAME "$THIS_DIR"/../blink_gc_plugin/Makefile \
+ | cut -d ' ' -f 3)
+cp "${LLVM_LIB_DIR}/lib${BLINKGCPLUGIN_LIBNAME}.${SO_EXT}" $PDIR/lib
+
+if [[ -n "${gcc_toolchain}" ]]; then
+ # Copy the stdlibc++.so.6 we linked Clang against so it can run.
+ cp "${LLVM_LIB_DIR}/libstdc++.so.6" $PDIR/lib
+fi
+
+# Copy built-in headers (lib/clang/3.x.y/include).
# libcompiler-rt puts all kinds of libraries there too, but we want only some.
if [ "$(uname -s)" = "Darwin" ]; then
- # Keep only
- # Release+Asserts/lib/clang/*/lib/darwin/libclang_rt.{asan,profile}_osx*
+ # Keep only the OSX (ASan and profile) and iossim (ASan) runtime libraries:
+ # Release+Asserts/lib/clang/*/lib/darwin/libclang_rt.{asan,profile}_*
find "${LLVM_LIB_DIR}/clang" -type f -path '*lib/darwin*' \
- ! -name '*asan_osx*' ! -name '*profile_osx*' | xargs rm
- # Fix LC_ID_DYLIB for the ASan dynamic library to be relative to
+ ! -name '*asan_osx*' ! -name '*asan_iossim*' ! -name '*profile_osx*' | \
+ xargs rm
+ # Fix LC_ID_DYLIB for the ASan dynamic libraries to be relative to
# @executable_path.
# TODO(glider): this is transitional. We'll need to fix the dylib name
- # either in our build system, or in Clang. See also http://crbug.com/170629.
- ASAN_DYLIB_NAME=libclang_rt.asan_osx_dynamic.dylib
- ASAN_DYLIB=$(find "${LLVM_LIB_DIR}/clang" -type f -path "*${ASAN_DYLIB_NAME}")
- install_name_tool -id @executable_path/${ASAN_DYLIB_NAME} "${ASAN_DYLIB}"
+ # either in our build system, or in Clang. See also http://crbug.com/344836.
+ ASAN_DYLIB_NAMES="libclang_rt.asan_osx_dynamic.dylib
+ libclang_rt.asan_iossim_dynamic.dylib"
+ for ASAN_DYLIB_NAME in $ASAN_DYLIB_NAMES
+ do
+ ASAN_DYLIB=$(find "${LLVM_LIB_DIR}/clang" \
+ -type f -path "*${ASAN_DYLIB_NAME}")
+ install_name_tool -id @executable_path/${ASAN_DYLIB_NAME} "${ASAN_DYLIB}"
+ done
else
# Keep only
- # Release+Asserts/lib/clang/*/lib/linux/libclang_rt.{[atm]san,profile,ubsan}-*.a
+ # Release+Asserts/lib/clang/*/lib/linux/libclang_rt.{[atm]san,san,ubsan,profile}-*.a
+ # , but not dfsan.
find "${LLVM_LIB_DIR}/clang" -type f -path '*lib/linux*' \
- ! -name '*[atm]san*' ! -name '*profile*' ! -name '*ubsan*' | xargs rm
+ ! -name '*[atm]san*' ! -name '*ubsan*' ! -name '*libclang_rt.san*' \
+ ! -name '*profile*' | xargs rm
+ # Strip the debug info from the runtime libraries.
+ find "${LLVM_LIB_DIR}/clang" -type f -path '*lib/linux*' | xargs strip -g
fi
cp -R "${LLVM_LIB_DIR}/clang" $PDIR/lib
diff --git a/chromium/tools/clang/scripts/repackage.sh b/chromium/tools/clang/scripts/repackage.sh
new file mode 100755
index 00000000000..3f7f1602e8f
--- /dev/null
+++ b/chromium/tools/clang/scripts/repackage.sh
@@ -0,0 +1,63 @@
+#!/bin/bash
+# Copyright 2014 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.
+
+# This script will check out llvm and clang, build a full package
+# with the latest plugin revisions and then repackage an existing
+# clang-package with the new plugin revisions.
+
+# The new package can be uploaded to replace the existing clang
+# package at the same clang revision.
+
+THIS_DIR="$(dirname "${0}")"
+LLVM_BUILD_DIR="${THIS_DIR}/../../../third_party/llvm-build"
+LLVM_TAR_DIR="${LLVM_BUILD_DIR}/Release+Asserts"
+LLVM_BIN_DIR="${LLVM_TAR_DIR}/bin"
+LLVM_LIB_DIR="${LLVM_TAR_DIR}/lib"
+
+set -eu
+
+if [ "$(uname -s)" = "Darwin" ]; then
+ PLATFORM=Mac
+ SO_EXT="dylib"
+else
+ PLATFORM=Linux_x64
+ SO_EXT="so"
+fi
+
+# Build clang with the new plugin revisions.
+"$THIS_DIR"/package.sh $@
+
+R=$("${LLVM_BIN_DIR}/clang" --version | \
+ sed -ne 's/clang version .*(trunk \([0-9]*\))/\1/p')
+PDIR=clang-$R
+
+if [ ! -f "$PDIR.tgz" ]; then
+ echo "Could not find package archive $PDIR.tgz generated by package.sh"
+ exit 1
+fi
+
+# We don't want to change the clang binary, so fetch the current clang
+# package and add the plugin shared-libraries to the existing package.
+rm -rf $LLVM_BUILD_DIR
+"$THIS_DIR"/update.sh
+
+LIBNAME=$(grep LIBRARYNAME "$THIS_DIR"/../blink_gc_plugin/Makefile \
+ | cut -d ' ' -f 3)
+
+LIBFILE=lib$LIBNAME.$SO_EXT
+
+# Check that we are actually creating the plugin at a new revision.
+if [ -f "$LLVM_LIB_DIR/$LIBFILE" ]; then
+ echo "The plugin revision $LIBNAME is already in the existing package."
+ exit 1
+fi
+
+cp $PDIR/lib/$LIBFILE "$LLVM_LIB_DIR/"
+tar zcf ${PDIR}_repack.tgz -C "$LLVM_TAR_DIR" bin lib buildlog.txt
+
+echo The clang package has been repackaged with $LIBNAME
+echo To upload, run:
+echo gsutil cp -a public-read ${PDIR}_repack.tgz \
+ gs://chromium-browser-clang/$PLATFORM/$PDIR.tgz
diff --git a/chromium/tools/clang/scripts/update.py b/chromium/tools/clang/scripts/update.py
index bdc781f715b..97b1d0c9314 100755
--- a/chromium/tools/clang/scripts/update.py
+++ b/chromium/tools/clang/scripts/update.py
@@ -3,31 +3,215 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-"""Windows can't run .sh files, so this is a small python wrapper around
-update.sh.
-"""
+"""Windows can't run .sh files, so this is a Python implementation of
+update.sh. This script should replace update.sh on all platforms eventually."""
import os
+import re
+import shutil
import subprocess
import sys
+# Do NOT CHANGE this if you don't know what you're doing -- see
+# https://code.google.com/p/chromium/wiki/UpdatingClang
+# Reverting problematic clang rolls is safe, though.
+# Note: this revision is only used for Windows. Other platforms use update.sh.
+LLVM_WIN_REVISION = 'HEAD'
+
+# ASan on Windows is useful enough to use it even while the clang/win is still
+# in bringup. Use a pinned revision to make it slightly more stable.
+if (re.search(r'\b(asan)=1', os.environ.get('GYP_DEFINES', '')) and
+ not 'LLVM_FORCE_HEAD_REVISION' in os.environ):
+ LLVM_WIN_REVISION = '210586'
+
+# Path constants. (All of these should be absolute paths.)
+THIS_DIR = os.path.abspath(os.path.dirname(__file__))
+CHROMIUM_DIR = os.path.abspath(os.path.join(THIS_DIR, '..', '..', '..'))
+LLVM_DIR = os.path.join(CHROMIUM_DIR, 'third_party', 'llvm')
+LLVM_BUILD_DIR = os.path.join(CHROMIUM_DIR, 'third_party', 'llvm-build',
+ 'Release+Asserts')
+COMPILER_RT_BUILD_DIR = os.path.join(LLVM_BUILD_DIR, '32bit-compiler-rt')
+CLANG_DIR = os.path.join(LLVM_DIR, 'tools', 'clang')
+COMPILER_RT_DIR = os.path.join(LLVM_DIR, 'projects', 'compiler-rt')
+STAMP_FILE = os.path.join(LLVM_BUILD_DIR, 'cr_build_revision')
+
+LLVM_REPO_URL='https://llvm.org/svn/llvm-project'
+if 'LLVM_REPO_URL' in os.environ:
+ LLVM_REPO_URL = os.environ['LLVM_REPO_URL']
+
+
+def ReadStampFile():
+ """Return the contents of the stamp file, or '' if it doesn't exist."""
+ try:
+ with open(STAMP_FILE, 'r') as f:
+ return f.read();
+ except IOError:
+ return ''
+
+
+def WriteStampFile(s):
+ """Write s to the stamp file."""
+ if not os.path.exists(LLVM_BUILD_DIR):
+ os.makedirs(LLVM_BUILD_DIR)
+ with open(STAMP_FILE, 'w') as f:
+ f.write(s)
+
+
+def DeleteFiles(dir, pattern):
+ """Delete all files in dir matching pattern."""
+ n = 0
+ regex = re.compile(r'^' + pattern + r'$')
+ for root, _, files in os.walk(dir):
+ for f in files:
+ if regex.match(f):
+ os.remove(os.path.join(root, f))
+ n += 1
+ return n
+
+
+def ClobberChromiumBuildFiles():
+ """Clobber Chomium build files."""
+ print 'Clobbering Chromium build files...'
+ out_dir = os.path.join(CHROMIUM_DIR, 'out')
+ if os.path.isdir(out_dir):
+ shutil.rmtree(out_dir)
+ print 'Removed Chromium out dir: %s.' % (out_dir)
+
+
+def RunCommand(command, tries=1):
+ """Run a command, possibly with multiple retries."""
+ for i in range(0, tries):
+ print 'Running %s (try #%d)' % (str(command), i + 1)
+ if subprocess.call(command, shell=True) == 0:
+ return
+ print 'Failed.'
+ sys.exit(1)
+
+def CopyFile(src, dst):
+ """Copy a file from src to dst."""
+ shutil.copy(src, dst)
+ print "Copying %s to %s" % (src, dst)
+
+def Checkout(name, url, dir):
+ """Checkout the SVN module at url into dir. Use name for the log message."""
+ print "Checking out %s r%s into '%s'" % (name, LLVM_WIN_REVISION, dir)
+ RunCommand(['svn', 'checkout', '--force',
+ url + '@' + LLVM_WIN_REVISION, dir], tries=2)
+
+
+vs_version = None
+def GetVSVersion():
+ global vs_version
+ if not vs_version:
+ # TODO(hans): Find a less hacky way to find the MSVS installation.
+ sys.path.append(os.path.join(CHROMIUM_DIR, 'tools', 'gyp', 'pylib'))
+ import gyp.MSVSVersion
+ # We request VS 2013 because Clang won't build with 2010, and 2013 will be
+ # the default for Chromium soon anyway.
+ vs_version = gyp.MSVSVersion.SelectVisualStudioVersion('2013')
+ return vs_version
+
+
+def UpdateClang():
+ print 'Updating Clang to %s...' % (LLVM_WIN_REVISION)
+ if LLVM_WIN_REVISION != 'HEAD' and ReadStampFile() == LLVM_WIN_REVISION:
+ print 'Already up to date.'
+ return 0
+
+ ClobberChromiumBuildFiles()
+
+ # Reset the stamp file in case the build is unsuccessful.
+ WriteStampFile('')
+
+ Checkout('LLVM', LLVM_REPO_URL + '/llvm/trunk', LLVM_DIR)
+ Checkout('Clang', LLVM_REPO_URL + '/cfe/trunk', CLANG_DIR)
+ Checkout('compiler-rt', LLVM_REPO_URL + '/compiler-rt/trunk', COMPILER_RT_DIR)
+
+ if not os.path.exists(LLVM_BUILD_DIR):
+ os.makedirs(LLVM_BUILD_DIR)
+ os.chdir(LLVM_BUILD_DIR)
+
+ if not re.search(r'cmake', os.environ['PATH'], flags=re.IGNORECASE):
+ # If CMake is not on the path, try looking in a standard location.
+ os.environ['PATH'] += os.pathsep + 'C:\\Program Files (x86)\\CMake 2.8\\bin'
+
+ RunCommand(GetVSVersion().SetupScript('x64') +
+ ['&&', 'cmake', '-GNinja', '-DCMAKE_BUILD_TYPE=Release',
+ '-DLLVM_ENABLE_ASSERTIONS=ON', LLVM_DIR])
+ RunCommand(GetVSVersion().SetupScript('x64') + ['&&', 'ninja', 'all'])
+
+ # Do an x86 build of compiler-rt to get the 32-bit ASan run-time.
+ # TODO(hans): Remove once the regular build above produces this.
+ if not os.path.exists(COMPILER_RT_BUILD_DIR):
+ os.makedirs(COMPILER_RT_BUILD_DIR)
+ os.chdir(COMPILER_RT_BUILD_DIR)
+ RunCommand(GetVSVersion().SetupScript('x86') +
+ ['&&', 'cmake', '-GNinja', '-DCMAKE_BUILD_TYPE=Release',
+ '-DLLVM_ENABLE_ASSERTIONS=ON', LLVM_DIR])
+ RunCommand(GetVSVersion().SetupScript('x86') + ['&&', 'ninja', 'compiler-rt'])
+
+ # TODO(hans): Make this (and the .gypi file) version number independent.
+ asan_rt_lib_src_dir = os.path.join(COMPILER_RT_BUILD_DIR, 'lib', 'clang',
+ '3.5.0', 'lib', 'windows')
+ asan_rt_lib_dst_dir = os.path.join(LLVM_BUILD_DIR, 'lib', 'clang',
+ '3.5.0', 'lib', 'windows')
+
+ if not os.path.exists(asan_rt_lib_dst_dir):
+ os.makedirs(asan_rt_lib_dst_dir)
+ for root, _, files in os.walk(asan_rt_lib_src_dir):
+ for f in files:
+ if re.match(r'^.*-i386\.lib$', f):
+ CopyFile(os.path.join(root, f), asan_rt_lib_dst_dir)
+
+ CopyFile(os.path.join(asan_rt_lib_src_dir, '..', '..', 'asan_blacklist.txt'),
+ os.path.join(asan_rt_lib_dst_dir, '..', '..'))
+
+ # Make an extra copy of the sanitizer headers, to be put on the include path
+ # of the fallback compiler.
+ sanitizer_include_dir = os.path.join(LLVM_BUILD_DIR, 'lib', 'clang', '3.5.0',
+ 'include', 'sanitizer')
+ aux_sanitizer_include_dir = os.path.join(LLVM_BUILD_DIR, 'lib', 'clang',
+ '3.5.0', 'include_sanitizer',
+ 'sanitizer')
+ if not os.path.exists(aux_sanitizer_include_dir):
+ os.makedirs(aux_sanitizer_include_dir)
+ for _, _, files in os.walk(sanitizer_include_dir):
+ for f in files:
+ CopyFile(os.path.join(sanitizer_include_dir, f),
+ aux_sanitizer_include_dir)
+
+ WriteStampFile(LLVM_WIN_REVISION)
+ print 'Clang update was successful.'
+ return 0
+
def main():
- if sys.platform in ['win32', 'cygwin']:
+ if not sys.platform in ['win32', 'cygwin']:
+ # For non-Windows, fall back to update.sh.
+ # TODO(hans): Make update.py replace update.sh completely.
+
+ # This script is called by gclient. gclient opens its hooks subprocesses
+ # with (stdout=subprocess.PIPE, stderr=subprocess.STDOUT) and then does
+ # custom output processing that breaks printing '\r' characters for
+ # single-line updating status messages as printed by curl and wget.
+ # Work around this by setting stderr of the update.sh process to stdin (!):
+ # gclient doesn't redirect stdin, and while stdin itself is read-only, a
+ # dup()ed sys.stdin is writable, try
+ # fd2 = os.dup(sys.stdin.fileno()); os.write(fd2, 'hi')
+ # TODO: Fix gclient instead, http://crbug.com/95350
+ return subprocess.call(
+ [os.path.join(os.path.dirname(__file__), 'update.sh')] + sys.argv[1:],
+ stderr=os.fdopen(os.dup(sys.stdin.fileno())))
+
+ if not re.search(r'\b(clang|asan)=1', os.environ.get('GYP_DEFINES', '')):
+ print 'Skipping Clang update (clang=1 was not set in GYP_DEFINES).'
+ return 0
+
+ if re.search(r'\b(make_clang_dir)=', os.environ.get('GYP_DEFINES', '')):
+ print 'Skipping Clang update (make_clang_dir= was set in GYP_DEFINES).'
return 0
- # This script is called by gclient. gclient opens its hooks subprocesses with
- # (stdout=subprocess.PIPE, stderr=subprocess.STDOUT) and then does custom
- # output processing that breaks printing '\r' characters for single-line
- # updating status messages as printed by curl and wget.
- # Work around this by setting stderr of the update.sh process to stdin (!):
- # gclient doesn't redirect stdin, and while stdin itself is read-only, a
- # dup()ed sys.stdin is writable, try
- # fd2 = os.dup(sys.stdin.fileno()); os.write(fd2, 'hi')
- # TODO: Fix gclient instead, http://crbug.com/95350
- return subprocess.call(
- [os.path.join(os.path.dirname(__file__), 'update.sh')] + sys.argv[1:],
- stderr=os.fdopen(os.dup(sys.stdin.fileno())))
+ return UpdateClang()
if __name__ == '__main__':
diff --git a/chromium/tools/clang/scripts/update.sh b/chromium/tools/clang/scripts/update.sh
index aef39e80ed0..2beb4e39b28 100755
--- a/chromium/tools/clang/scripts/update.sh
+++ b/chromium/tools/clang/scripts/update.sh
@@ -8,48 +8,79 @@
# Do NOT CHANGE this if you don't know what you're doing -- see
# https://code.google.com/p/chromium/wiki/UpdatingClang
# Reverting problematic clang rolls is safe, though.
-CLANG_REVISION=193323
+CLANG_REVISION=209387
THIS_DIR="$(dirname "${0}")"
LLVM_DIR="${THIS_DIR}/../../../third_party/llvm"
LLVM_BUILD_DIR="${LLVM_DIR}/../llvm-build"
LLVM_BOOTSTRAP_DIR="${LLVM_DIR}/../llvm-bootstrap"
+LLVM_BOOTSTRAP_INSTALL_DIR="${LLVM_DIR}/../llvm-bootstrap-install"
CLANG_DIR="${LLVM_DIR}/tools/clang"
CLANG_TOOLS_EXTRA_DIR="${CLANG_DIR}/tools/extra"
COMPILER_RT_DIR="${LLVM_DIR}/projects/compiler-rt"
+LIBCXX_DIR="${LLVM_DIR}/projects/libcxx"
+LIBCXXABI_DIR="${LLVM_DIR}/projects/libcxxabi"
ANDROID_NDK_DIR="${LLVM_DIR}/../android_tools/ndk"
STAMP_FILE="${LLVM_BUILD_DIR}/cr_build_revision"
+ABS_LIBCXX_DIR="${PWD}/${LIBCXX_DIR}"
+ABS_LIBCXXABI_DIR="${PWD}/${LIBCXXABI_DIR}"
+
+
+# Use both the clang revision and the plugin revisions to test for updates.
+BLINKGCPLUGIN_REVISION=\
+$(grep LIBRARYNAME "$THIS_DIR"/../blink_gc_plugin/Makefile \
+ | cut -d '_' -f 2)
+CLANG_AND_PLUGINS_REVISION="${CLANG_REVISION}-${BLINKGCPLUGIN_REVISION}"
+
# ${A:-a} returns $A if it's set, a else.
LLVM_REPO_URL=${LLVM_URL:-https://llvm.org/svn/llvm-project}
-# Die if any command dies.
-set -e
+if [[ -z "$GYP_DEFINES" ]]; then
+ GYP_DEFINES=
+fi
+if [[ -z "$GYP_GENERATORS" ]]; then
+ GYP_GENERATORS=
+fi
+
+
+# Die if any command dies, error on undefined variable expansions.
+set -eu
OS="$(uname -s)"
# Parse command line options.
+if_needed=
force_local_build=
-mac_only=
run_tests=
bootstrap=
with_android=yes
-chrome_tools="plugins"
+chrome_tools="plugins blink_gc_plugin"
+gcc_toolchain=
if [[ "${OS}" = "Darwin" ]]; then
with_android=
fi
+if [ "${OS}" = "FreeBSD" ]; then
+ MAKE=gmake
+else
+ MAKE=make
+fi
while [[ $# > 0 ]]; do
case $1 in
--bootstrap)
bootstrap=yes
;;
+ --if-needed)
+ if_needed=yes
+ ;;
--force-local-build)
force_local_build=yes
;;
- --mac-only)
- mac_only=yes
+ --print-revision)
+ echo $CLANG_REVISION
+ exit 0
;;
--run-tests)
run_tests=yes
@@ -65,55 +96,67 @@ while [[ $# > 0 ]]; do
fi
chrome_tools=$1
;;
+ --gcc-toolchain)
+ shift
+ if [[ $# == 0 ]]; then
+ echo "--gcc-toolchain requires an argument."
+ exit 1
+ fi
+ if [[ -x "$1/bin/gcc" ]]; then
+ gcc_toolchain=$1
+ else
+ echo "Invalid --gcc-toolchain: '$1'."
+ echo "'$1/bin/gcc' does not appear to be valid."
+ exit 1
+ fi
+ ;;
+
--help)
- echo "usage: $0 [--force-local-build] [--mac-only] [--run-tests] "
+ echo "usage: $0 [--force-local-build] [--if-needed] [--run-tests] "
echo "--bootstrap: First build clang with CC, then with itself."
echo "--force-local-build: Don't try to download prebuilt binaries."
- echo "--mac-only: Do initial download only on Mac systems."
+ echo "--if-needed: Download clang only if the script thinks it is needed."
echo "--run-tests: Run tests after building. Only for local builds."
+ echo "--print-revision: Print current clang revision and exit."
echo "--without-android: Don't build ASan Android runtime library."
echo "--with-chrome-tools: Select which chrome tools to build." \
"Defaults to plugins."
echo " Example: --with-chrome-tools 'plugins empty-string'"
+ echo "--gcc-toolchain: Set the prefix for which GCC version should"
+ echo " be used for building. For example, to use gcc in"
+ echo " /opt/foo/bin/gcc, use '--gcc-toolchain '/opt/foo"
echo
exit 1
;;
+ *)
+ echo "Unknown argument: '$1'."
+ echo "Use --help for help."
+ exit 1
+ ;;
esac
shift
done
-# --mac-only prevents the initial download on non-mac systems, but if clang has
-# already been downloaded in the past, this script keeps it up to date even if
-# --mac-only is passed in and the system isn't a mac. People who don't like this
-# can just delete their third_party/llvm-build directory.
-if [[ -n "$mac_only" ]] && [[ "${OS}" != "Darwin" ]] &&
- [[ ! ( "$GYP_DEFINES" =~ .*(clang|tsan|asan)=1.* ) ]] &&
- ! [[ -d "${LLVM_BUILD_DIR}" ]]; then
- exit 0
+# Remove clang on bots where it was autoinstalled in r262025.
+if [[ -f "${LLVM_BUILD_DIR}/autoinstall_stamp" ]]; then
+ echo Removing autoinstalled clang and clobbering
+ rm -rf "${LLVM_BUILD_DIR}"
fi
-# Xcode and clang don't get along when predictive compilation is enabled.
-# http://crbug.com/96315
-if [[ "${OS}" = "Darwin" ]] && xcodebuild -version | grep -q 'Xcode 3.2' ; then
- XCONF=com.apple.Xcode
- if [[ "${GYP_GENERATORS}" != "make" ]] && \
- [ "$(defaults read "${XCONF}" EnablePredictiveCompilation)" != "0" ]; then
- echo
- echo " HEARKEN!"
- echo "You're using Xcode3 and you have 'Predictive Compilation' enabled."
- echo "This does not work well with clang (http://crbug.com/96315)."
- echo "Disable it in Preferences->Building (lower right), or run"
- echo " defaults write ${XCONF} EnablePredictiveCompilation -boolean NO"
- echo "while Xcode is not running."
- echo
- fi
-
- SUB_VERSION=$(xcodebuild -version | sed -Ene 's/Xcode 3\.2\.([0-9]+)/\1/p')
- if [[ "${SUB_VERSION}" < 6 ]]; then
- echo
- echo " YOUR LD IS BUGGY!"
- echo "Please upgrade Xcode to at least 3.2.6."
- echo
+if [[ -n "$if_needed" ]]; then
+ if [[ "${OS}" == "Darwin" ]]; then
+ # clang is used on Mac.
+ true
+ elif [[ "$GYP_DEFINES" =~ .*(clang|tsan|asan|lsan|msan)=1.* ]]; then
+ # clang requested via $GYP_DEFINES.
+ true
+ elif [[ -d "${LLVM_BUILD_DIR}" ]]; then
+ # clang previously downloaded, remove third_party/llvm-build to prevent
+ # updating.
+ true
+ else
+ # clang wasn't needed, not doing anything.
+ exit 0
fi
fi
@@ -122,8 +165,9 @@ fi
if [[ -f "${STAMP_FILE}" ]]; then
PREVIOUSLY_BUILT_REVISON=$(cat "${STAMP_FILE}")
if [[ -z "$force_local_build" ]] && \
- [[ "${PREVIOUSLY_BUILT_REVISON}" = "${CLANG_REVISION}" ]]; then
- echo "Clang already at ${CLANG_REVISION}"
+ [[ "${PREVIOUSLY_BUILT_REVISON}" = \
+ "${CLANG_AND_PLUGINS_REVISION}" ]]; then
+ echo "Clang already at ${CLANG_AND_PLUGINS_REVISION}"
exit 0
fi
fi
@@ -131,31 +175,6 @@ fi
rm -f "${STAMP_FILE}"
-# Clobber build files. PCH files only work with the compiler that created them.
-# We delete .o files to make sure all files are built with the new compiler.
-echo "Clobbering build files"
-MAKE_DIR="${THIS_DIR}/../../../out"
-XCODEBUILD_DIR="${THIS_DIR}/../../../xcodebuild"
-for DIR in "${XCODEBUILD_DIR}" "${MAKE_DIR}/Debug" "${MAKE_DIR}/Release"; do
- if [[ -d "${DIR}" ]]; then
- find "${DIR}" -name '*.o' -exec rm {} +
- find "${DIR}" -name '*.o.d' -exec rm {} +
- find "${DIR}" -name '*.gch' -exec rm {} +
- find "${DIR}" -name '*.dylib' -exec rm -rf {} +
- find "${DIR}" -name 'SharedPrecompiledHeaders' -exec rm -rf {} +
- fi
-done
-
-# Clobber NaCl toolchain stamp files, see http://crbug.com/159793
-if [[ -d "${MAKE_DIR}" ]]; then
- find "${MAKE_DIR}" -name 'stamp.untar' -exec rm {} +
-fi
-if [[ "${OS}" = "Darwin" ]]; then
- if [[ -d "${XCODEBUILD_DIR}" ]]; then
- find "${XCODEBUILD_DIR}" -name 'stamp.untar' -exec rm {} +
- fi
-fi
-
if [[ -z "$force_local_build" ]]; then
# Check if there's a prebuilt binary and if so just fetch that. That's faster,
# and goma relies on having matching binary hashes on client and server too.
@@ -183,7 +202,7 @@ if [[ -z "$force_local_build" ]]; then
mkdir -p "${LLVM_BUILD_DIR}/Release+Asserts"
tar -xzf "${CDS_OUTPUT}" -C "${LLVM_BUILD_DIR}/Release+Asserts"
echo clang "${CLANG_REVISION}" unpacked
- echo "${CLANG_REVISION}" > "${STAMP_FILE}"
+ echo "${CLANG_AND_PLUGINS_REVISION}" > "${STAMP_FILE}"
rm -rf "${CDS_OUT_DIR}"
exit 0
else
@@ -215,21 +234,82 @@ echo Getting compiler-rt r"${CLANG_REVISION}" in "${COMPILER_RT_DIR}"
svn co --force "${LLVM_REPO_URL}/compiler-rt/trunk@${CLANG_REVISION}" \
"${COMPILER_RT_DIR}"
+# clang needs a libc++ checkout, else -stdlib=libc++ won't find includes
+# (i.e. this is needed for bootstrap builds).
+if [ "${OS}" = "Darwin" ]; then
+ echo Getting libc++ r"${CLANG_REVISION}" in "${LIBCXX_DIR}"
+ svn co --force "${LLVM_REPO_URL}/libcxx/trunk@${CLANG_REVISION}" \
+ "${LIBCXX_DIR}"
+fi
+
+# While we're bundling our own libc++ on OS X, we need to compile libc++abi
+# into it too (since OS X 10.6 doesn't have libc++abi.dylib either).
+if [ "${OS}" = "Darwin" ]; then
+ echo Getting libc++abi r"${CLANG_REVISION}" in "${LIBCXXABI_DIR}"
+ svn co --force "${LLVM_REPO_URL}/libcxxabi/trunk@${CLANG_REVISION}" \
+ "${LIBCXXABI_DIR}"
+fi
+
+# Apply patch for test failing with --disable-pthreads (llvm.org/PR11974)
+pushd "${CLANG_DIR}"
+svn revert test/Index/crash-recovery-modules.m
+cat << 'EOF' |
+--- third_party/llvm/tools/clang/test/Index/crash-recovery-modules.m (revision 202554)
++++ third_party/llvm/tools/clang/test/Index/crash-recovery-modules.m (working copy)
+@@ -12,6 +12,8 @@
+
+ // REQUIRES: crash-recovery
+ // REQUIRES: shell
++// XFAIL: *
++// (PR11974)
+
+ @import Crash;
+EOF
+patch -p4
+popd
+
# Echo all commands.
set -x
NUM_JOBS=3
if [[ "${OS}" = "Linux" ]]; then
NUM_JOBS="$(grep -c "^processor" /proc/cpuinfo)"
-elif [ "${OS}" = "Darwin" ]; then
+elif [ "${OS}" = "Darwin" -o "${OS}" = "FreeBSD" ]; then
NUM_JOBS="$(sysctl -n hw.ncpu)"
fi
+if [[ -n "${gcc_toolchain}" ]]; then
+ # Use the specified gcc installation for building.
+ export CC="$gcc_toolchain/bin/gcc"
+ export CXX="$gcc_toolchain/bin/g++"
+ # Set LD_LIBRARY_PATH to make auxiliary targets (tablegen, bootstrap compiler,
+ # etc.) find the .so.
+ export LD_LIBRARY_PATH="$(dirname $(${CXX} -print-file-name=libstdc++.so.6))"
+fi
+
+export CFLAGS=""
+export CXXFLAGS=""
+# LLVM uses C++11 starting in llvm 3.5. On Linux, this means libstdc++4.7+ is
+# needed, on OS X it requires libc++. clang only automatically links to libc++
+# when targeting OS X 10.9+, so add stdlib=libc++ explicitly so clang can run on
+# OS X versions as old as 10.7.
+# TODO(thakis): Some bots are still on 10.6, so for now bundle libc++.dylib.
+# Remove this once all bots are on 10.7+, then use --enable-libcpp=yes and
+# change all MACOSX_DEPLOYMENT_TARGET values to 10.7.
+if [ "${OS}" = "Darwin" ]; then
+ # When building on 10.9, /usr/include usually doesn't exist, and while
+ # Xcode's clang automatically sets a sysroot, self-built clangs don't.
+ export CFLAGS="-isysroot $(xcrun --show-sdk-path)"
+ export CPPFLAGS="${CFLAGS}"
+ export CXXFLAGS="-stdlib=libc++ -nostdinc++ -I${ABS_LIBCXX_DIR}/include ${CFLAGS}"
+fi
+
# Build bootstrap clang if requested.
if [[ -n "${bootstrap}" ]]; then
+ ABS_INSTALL_DIR="${PWD}/${LLVM_BOOTSTRAP_INSTALL_DIR}"
echo "Building bootstrap compiler"
mkdir -p "${LLVM_BOOTSTRAP_DIR}"
- cd "${LLVM_BOOTSTRAP_DIR}"
+ pushd "${LLVM_BOOTSTRAP_DIR}"
if [[ ! -f ./config.status ]]; then
# The bootstrap compiler only needs to be able to build the real compiler,
# so it needs no cross-compiler output support. In general, the host
@@ -238,18 +318,38 @@ if [[ -n "${bootstrap}" ]]; then
../llvm/configure \
--enable-optimized \
--enable-targets=host-only \
+ --enable-libedit=no \
--disable-threads \
--disable-pthreads \
--without-llvmgcc \
- --without-llvmgxx
+ --without-llvmgxx \
+ --prefix="${ABS_INSTALL_DIR}"
fi
- MACOSX_DEPLOYMENT_TARGET=10.5 make -j"${NUM_JOBS}"
+
+ ${MAKE} -j"${NUM_JOBS}"
if [[ -n "${run_tests}" ]]; then
- make check-all
+ ${MAKE} check-all
+ fi
+
+ ${MAKE} install
+ if [[ -n "${gcc_toolchain}" ]]; then
+ # Copy that gcc's stdlibc++.so.6 to the build dir, so the bootstrap
+ # compiler can start.
+ cp -v "$(${CXX} -print-file-name=libstdc++.so.6)" \
+ "${ABS_INSTALL_DIR}/lib/"
fi
- cd -
- export CC="${PWD}/${LLVM_BOOTSTRAP_DIR}/Release+Asserts/bin/clang"
- export CXX="${PWD}/${LLVM_BOOTSTRAP_DIR}/Release+Asserts/bin/clang++"
+
+ popd
+ export CC="${ABS_INSTALL_DIR}/bin/clang"
+ export CXX="${ABS_INSTALL_DIR}/bin/clang++"
+
+ if [[ -n "${gcc_toolchain}" ]]; then
+ # Tell the bootstrap compiler to use a specific gcc prefix to search
+ # for standard library headers and shared object file.
+ export CFLAGS="--gcc-toolchain=${gcc_toolchain}"
+ export CXXFLAGS="--gcc-toolchain=${gcc_toolchain}"
+ fi
+
echo "Building final compiler"
fi
@@ -257,24 +357,63 @@ fi
# The clang bots have this path hardcoded in built/scripts/slave/compile.py,
# so if you change it you also need to change these links.
mkdir -p "${LLVM_BUILD_DIR}"
-cd "${LLVM_BUILD_DIR}"
+pushd "${LLVM_BUILD_DIR}"
+
+# Build libc++.dylib while some bots are still on OS X 10.6.
+if [ "${OS}" = "Darwin" ]; then
+ rm -rf libcxxbuild
+ LIBCXXFLAGS="-O3 -std=c++11 -fstrict-aliasing"
+
+ # libcxx and libcxxabi both have a file stdexcept.cpp, so put their .o files
+ # into different subdirectories.
+ mkdir -p libcxxbuild/libcxx
+ pushd libcxxbuild/libcxx
+ ${CXX:-c++} -c ${CXXFLAGS} ${LIBCXXFLAGS} "${ABS_LIBCXX_DIR}"/src/*.cpp
+ popd
+
+ mkdir -p libcxxbuild/libcxxabi
+ pushd libcxxbuild/libcxxabi
+ ${CXX:-c++} -c ${CXXFLAGS} ${LIBCXXFLAGS} "${ABS_LIBCXXABI_DIR}"/src/*.cpp -I"${ABS_LIBCXXABI_DIR}/include"
+ popd
+
+ pushd libcxxbuild
+ ${CC:-cc} libcxx/*.o libcxxabi/*.o -o libc++.1.dylib -dynamiclib \
+ -nodefaultlibs -current_version 1 -compatibility_version 1 \
+ -lSystem -install_name @executable_path/libc++.dylib \
+ -Wl,-unexported_symbols_list,${ABS_LIBCXX_DIR}/lib/libc++unexp.exp \
+ -Wl,-force_symbols_not_weak_list,${ABS_LIBCXX_DIR}/lib/notweak.exp \
+ -Wl,-force_symbols_weak_list,${ABS_LIBCXX_DIR}/lib/weak.exp
+ ln -sf libc++.1.dylib libc++.dylib
+ popd
+ export LDFLAGS+="-stdlib=libc++ -L${PWD}/libcxxbuild"
+fi
+
if [[ ! -f ./config.status ]]; then
../llvm/configure \
--enable-optimized \
+ --enable-libedit=no \
--disable-threads \
--disable-pthreads \
--without-llvmgcc \
--without-llvmgxx
fi
-MACOSX_DEPLOYMENT_TARGET=10.5 make -j"${NUM_JOBS}"
+if [[ -n "${gcc_toolchain}" ]]; then
+ # Copy in the right stdlibc++.so.6 so clang can start.
+ mkdir -p Release+Asserts/lib
+ cp -v "$(${CXX} ${CXXFLAGS} -print-file-name=libstdc++.so.6)" \
+ Release+Asserts/lib/
+fi
+MACOSX_DEPLOYMENT_TARGET=10.5 ${MAKE} -j"${NUM_JOBS}"
STRIP_FLAGS=
if [ "${OS}" = "Darwin" ]; then
# See http://crbug.com/256342
STRIP_FLAGS=-x
+
+ cp libcxxbuild/libc++.1.dylib Release+Asserts/bin
fi
strip ${STRIP_FLAGS} Release+Asserts/bin/clang
-cd -
+popd
if [[ -n "${with_android}" ]]; then
# Make a standalone Android toolchain.
@@ -284,13 +423,17 @@ if [[ -n "${with_android}" ]]; then
--system=linux-x86_64 \
--stl=stlport
+ # Android NDK r9d copies a broken unwind.h into the toolchain, see
+ # http://crbug.com/357890
+ rm -v "${LLVM_BUILD_DIR}"/android-toolchain/include/c++/*/unwind.h
+
# Build ASan runtime for Android.
# Note: LLVM_ANDROID_TOOLCHAIN_DIR is not relative to PWD, but to where we
# build the runtime, i.e. third_party/llvm/projects/compiler-rt.
- cd "${LLVM_BUILD_DIR}"
- make -C tools/clang/runtime/ \
+ pushd "${LLVM_BUILD_DIR}"
+ ${MAKE} -C tools/clang/runtime/ \
LLVM_ANDROID_TOOLCHAIN_DIR="../../../llvm-build/android-toolchain"
- cd -
+ popd
fi
# Build Chrome-specific clang tools. Paths in this list should be relative to
@@ -306,17 +449,21 @@ for CHROME_TOOL_DIR in ${chrome_tools}; do
rm -rf "${TOOL_BUILD_DIR}"
mkdir -p "${TOOL_BUILD_DIR}"
cp "${TOOL_SRC_DIR}/Makefile" "${TOOL_BUILD_DIR}"
- MACOSX_DEPLOYMENT_TARGET=10.5 make -j"${NUM_JOBS}" -C "${TOOL_BUILD_DIR}"
+ MACOSX_DEPLOYMENT_TARGET=10.5 ${MAKE} -j"${NUM_JOBS}" -C "${TOOL_BUILD_DIR}"
done
if [[ -n "$run_tests" ]]; then
# Run a few tests.
- PLUGIN_SRC_DIR="${THIS_DIR}/../plugins"
- "${PLUGIN_SRC_DIR}/tests/test.sh" "${LLVM_BUILD_DIR}/Release+Asserts"
- cd "${LLVM_BUILD_DIR}"
- make check-all
- cd -
+ for CHROME_TOOL_DIR in ${chrome_tools}; do
+ TOOL_SRC_DIR="${THIS_DIR}/../${CHROME_TOOL_DIR}"
+ if [[ -f "${TOOL_SRC_DIR}/tests/test.sh" ]]; then
+ "${TOOL_SRC_DIR}/tests/test.sh" "${LLVM_BUILD_DIR}/Release+Asserts"
+ fi
+ done
+ pushd "${LLVM_BUILD_DIR}"
+ ${MAKE} check-all
+ popd
fi
# After everything is done, log success for this revision.
-echo "${CLANG_REVISION}" > "${STAMP_FILE}"
+echo "${CLANG_AND_PLUGINS_REVISION}" > "${STAMP_FILE}"
diff --git a/chromium/tools/code_coverage/croc.css b/chromium/tools/code_coverage/croc.css
deleted file mode 100644
index 071822dafad..00000000000
--- a/chromium/tools/code_coverage/croc.css
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2012 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.
- */
-
-/*
- * croc.css - styles for croc HTML output
- */
-
-body {
- font-family:arial;
-}
-
-table {
- border-collapse:collapse;
- border-width:0px;
- border-style:solid;
-}
-
-thead {
- background-color:#C0C0E0;
- text-align:center;
-}
-
-td {
- padding-right:10px;
- padding-left:10px;
- font-size:small;
- border-width:1px;
- border-style:solid;
- border-color:black;
-}
-
-td.secdesc {
- text-align:center;
- font-size:medium;
- font-weight:bold;
- border-width:0px;
- border-style:none;
- padding-top:10px;
- padding-bottom:5px;
-}
-
-td.section {
- background-color:#D0D0F0;
- text-align:center;
-}
-
-td.stat {
- text-align:center;
-}
-
-td.number {
- text-align:right;
-}
-
-td.graph {
- /* Hide the dummy character */
- color:#FFFFFF;
- padding-left:6px;
-}
-
-td.high_pct {
- text-align:right;
- background-color:#B0FFB0;
-}
-td.mid_pct {
- text-align:right;
- background-color:#FFFF90;
-}
-td.low_pct {
- text-align:right;
- background-color:#FFB0B0;
-}
-
-
-span.missing {
- background-color:#FFB0B0;
-}
-span.instr {
- background-color:#FFFF90;
-}
-span.covered {
- background-color:#B0FFB0;
-}
-
-span.g_missing {
- background-color:#FF4040;
-}
-span.g_instr {
- background-color:#FFFF00;
-}
-span.g_covered {
- background-color:#40FF40;
-}
-
-p.time {
- padding-top:10px;
- font-size:small;
- font-style:italic;
-}
diff --git a/chromium/tools/code_coverage/croc.py b/chromium/tools/code_coverage/croc.py
deleted file mode 100755
index 1b9908a5f89..00000000000
--- a/chromium/tools/code_coverage/croc.py
+++ /dev/null
@@ -1,722 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-"""Crocodile - compute coverage numbers for Chrome coverage dashboard."""
-
-import optparse
-import os
-import platform
-import re
-import sys
-import croc_html
-import croc_scan
-
-
-class CrocError(Exception):
- """Coverage error."""
-
-
-class CrocStatError(CrocError):
- """Error evaluating coverage stat."""
-
-#------------------------------------------------------------------------------
-
-
-class CoverageStats(dict):
- """Coverage statistics."""
-
- # Default dictionary values for this stat.
- DEFAULTS = { 'files_covered': 0,
- 'files_instrumented': 0,
- 'files_executable': 0,
- 'lines_covered': 0,
- 'lines_instrumented': 0,
- 'lines_executable': 0 }
-
- def Add(self, coverage_stats):
- """Adds a contribution from another coverage stats dict.
-
- Args:
- coverage_stats: Statistics to add to this one.
- """
- for k, v in coverage_stats.iteritems():
- if k in self:
- self[k] += v
- else:
- self[k] = v
-
- def AddDefaults(self):
- """Add some default stats which might be assumed present.
-
- Do not clobber if already present. Adds resilience when evaling a
- croc file which expects certain stats to exist."""
- for k, v in self.DEFAULTS.iteritems():
- if not k in self:
- self[k] = v
-
-#------------------------------------------------------------------------------
-
-
-class CoveredFile(object):
- """Information about a single covered file."""
-
- def __init__(self, filename, **kwargs):
- """Constructor.
-
- Args:
- filename: Full path to file, '/'-delimited.
- kwargs: Keyword args are attributes for file.
- """
- self.filename = filename
- self.attrs = dict(kwargs)
-
- # Move these to attrs?
- self.local_path = None # Local path to file
- self.in_lcov = False # Is file instrumented?
-
- # No coverage data for file yet
- self.lines = {} # line_no -> None=executable, 0=instrumented, 1=covered
- self.stats = CoverageStats()
-
- def UpdateCoverage(self):
- """Updates the coverage summary based on covered lines."""
- exe = instr = cov = 0
- for l in self.lines.itervalues():
- exe += 1
- if l is not None:
- instr += 1
- if l == 1:
- cov += 1
-
- # Add stats that always exist
- self.stats = CoverageStats(lines_executable=exe,
- lines_instrumented=instr,
- lines_covered=cov,
- files_executable=1)
-
- # Add conditional stats
- if cov:
- self.stats['files_covered'] = 1
- if instr or self.in_lcov:
- self.stats['files_instrumented'] = 1
-
-#------------------------------------------------------------------------------
-
-
-class CoveredDir(object):
- """Information about a directory containing covered files."""
-
- def __init__(self, dirpath):
- """Constructor.
-
- Args:
- dirpath: Full path of directory, '/'-delimited.
- """
- self.dirpath = dirpath
-
- # List of covered files directly in this dir, indexed by filename (not
- # full path)
- self.files = {}
-
- # List of subdirs, indexed by filename (not full path)
- self.subdirs = {}
-
- # Dict of CoverageStats objects summarizing all children, indexed by group
- self.stats_by_group = {'all': CoverageStats()}
- # TODO: by language
-
- def GetTree(self, indent=''):
- """Recursively gets stats for the directory and its children.
-
- Args:
- indent: indent prefix string.
-
- Returns:
- The tree as a string.
- """
- dest = []
-
- # Compile all groupstats
- groupstats = []
- for group in sorted(self.stats_by_group):
- s = self.stats_by_group[group]
- if not s.get('lines_executable'):
- continue # Skip groups with no executable lines
- groupstats.append('%s:%d/%d/%d' % (
- group, s.get('lines_covered', 0),
- s.get('lines_instrumented', 0),
- s.get('lines_executable', 0)))
-
- outline = '%s%-30s %s' % (indent,
- os.path.split(self.dirpath)[1] + '/',
- ' '.join(groupstats))
- dest.append(outline.rstrip())
-
- for d in sorted(self.subdirs):
- dest.append(self.subdirs[d].GetTree(indent=indent + ' '))
-
- return '\n'.join(dest)
-
-#------------------------------------------------------------------------------
-
-
-class Coverage(object):
- """Code coverage for a group of files."""
-
- def __init__(self):
- """Constructor."""
- self.files = {} # Map filename --> CoverageFile
- self.root_dirs = [] # (root, altname)
- self.rules = [] # (regexp, dict of RHS attrs)
- self.tree = CoveredDir('')
- self.print_stats = [] # Dicts of args to PrintStat()
-
- # Functions which need to be replaced for unit testing
- self.add_files_walk = os.walk # Walk function for AddFiles()
- self.scan_file = croc_scan.ScanFile # Source scanner for AddFiles()
-
- def CleanupFilename(self, filename):
- """Cleans up a filename.
-
- Args:
- filename: Input filename.
-
- Returns:
- The cleaned up filename.
-
- Changes all path separators to '/'.
- Makes relative paths (those starting with '../' or './' absolute.
- Replaces all instances of root dirs with alternate names.
- """
- # Change path separators
- filename = filename.replace('\\', '/')
-
- # Windows doesn't care about case sensitivity.
- if platform.system() in ['Windows', 'Microsoft']:
- filename = filename.lower()
-
- # If path is relative, make it absolute
- # TODO: Perhaps we should default to relative instead, and only understand
- # absolute to be files starting with '\', '/', or '[A-Za-z]:'?
- if filename.split('/')[0] in ('.', '..'):
- filename = os.path.abspath(filename).replace('\\', '/')
-
- # Replace alternate roots
- for root, alt_name in self.root_dirs:
- # Windows doesn't care about case sensitivity.
- if platform.system() in ['Windows', 'Microsoft']:
- root = root.lower()
- filename = re.sub('^' + re.escape(root) + '(?=(/|$))',
- alt_name, filename)
- return filename
-
- def ClassifyFile(self, filename):
- """Applies rules to a filename, to see if we care about it.
-
- Args:
- filename: Input filename.
-
- Returns:
- A dict of attributes for the file, accumulated from the right hand sides
- of rules which fired.
- """
- attrs = {}
-
- # Process all rules
- for regexp, rhs_dict in self.rules:
- if regexp.match(filename):
- attrs.update(rhs_dict)
-
- return attrs
- # TODO: Files can belong to multiple groups?
- # (test/source)
- # (mac/pc/win)
- # (media_test/all_tests)
- # (small/med/large)
- # How to handle that?
-
- def AddRoot(self, root_path, alt_name='_'):
- """Adds a root directory.
-
- Args:
- root_path: Root directory to add.
- alt_name: If specified, name of root dir. Otherwise, defaults to '_'.
-
- Raises:
- ValueError: alt_name was blank.
- """
- # Alt name must not be blank. If it were, there wouldn't be a way to
- # reverse-resolve from a root-replaced path back to the local path, since
- # '' would always match the beginning of the candidate filename, resulting
- # in an infinite loop.
- if not alt_name:
- raise ValueError('AddRoot alt_name must not be blank.')
-
- # Clean up root path based on existing rules
- self.root_dirs.append([self.CleanupFilename(root_path), alt_name])
-
- def AddRule(self, path_regexp, **kwargs):
- """Adds a rule.
-
- Args:
- path_regexp: Regular expression to match for filenames. These are
- matched after root directory replacement.
- kwargs: Keyword arguments are attributes to set if the rule applies.
-
- Keyword arguments currently supported:
- include: If True, includes matches; if False, excludes matches. Ignored
- if None.
- group: If not None, sets group to apply to matches.
- language: If not None, sets file language to apply to matches.
- """
-
- # Compile regexp ahead of time
- self.rules.append([re.compile(path_regexp), dict(kwargs)])
-
- def GetCoveredFile(self, filename, add=False):
- """Gets the CoveredFile object for the filename.
-
- Args:
- filename: Name of file to find.
- add: If True, will add the file if it's not present. This applies the
- transformations from AddRoot() and AddRule(), and only adds the file
- if a rule includes it, and it has a group and language.
-
- Returns:
- The matching CoveredFile object, or None if not present.
- """
- # Clean filename
- filename = self.CleanupFilename(filename)
-
- # Check for existing match
- if filename in self.files:
- return self.files[filename]
-
- # File isn't one we know about. If we can't add it, give up.
- if not add:
- return None
-
- # Check rules to see if file can be added. Files must be included and
- # have a group and language.
- attrs = self.ClassifyFile(filename)
- if not (attrs.get('include')
- and attrs.get('group')
- and attrs.get('language')):
- return None
-
- # Add the file
- f = CoveredFile(filename, **attrs)
- self.files[filename] = f
-
- # Return the newly covered file
- return f
-
- def RemoveCoveredFile(self, cov_file):
- """Removes the file from the covered file list.
-
- Args:
- cov_file: A file object returned by GetCoveredFile().
- """
- self.files.pop(cov_file.filename)
-
- def ParseLcovData(self, lcov_data):
- """Adds coverage from LCOV-formatted data.
-
- Args:
- lcov_data: An iterable returning lines of data in LCOV format. For
- example, a file or list of strings.
- """
- cov_file = None
- cov_lines = None
- for line in lcov_data:
- line = line.strip()
- if line.startswith('SF:'):
- # Start of data for a new file; payload is filename
- cov_file = self.GetCoveredFile(line[3:], add=True)
- if cov_file:
- cov_lines = cov_file.lines
- cov_file.in_lcov = True # File was instrumented
- elif not cov_file:
- # Inside data for a file we don't care about - so skip it
- pass
- elif line.startswith('DA:'):
- # Data point - that is, an executable line in current file
- line_no, is_covered = map(int, line[3:].split(','))
- if is_covered:
- # Line is covered
- cov_lines[line_no] = 1
- elif cov_lines.get(line_no) != 1:
- # Line is not covered, so track it as uncovered
- cov_lines[line_no] = 0
- elif line == 'end_of_record':
- cov_file.UpdateCoverage()
- cov_file = None
- # (else ignore other line types)
-
- def ParseLcovFile(self, input_filename):
- """Adds coverage data from a .lcov file.
-
- Args:
- input_filename: Input filename.
- """
- # TODO: All manner of error checking
- lcov_file = None
- try:
- lcov_file = open(input_filename, 'rt')
- self.ParseLcovData(lcov_file)
- finally:
- if lcov_file:
- lcov_file.close()
-
- def GetStat(self, stat, group='all', default=None):
- """Gets a statistic from the coverage object.
-
- Args:
- stat: Statistic to get. May also be an evaluatable python expression,
- using the stats. For example, 'stat1 - stat2'.
- group: File group to match; if 'all', matches all groups.
- default: Value to return if there was an error evaluating the stat. For
- example, if the stat does not exist. If None, raises
- CrocStatError.
-
- Returns:
- The evaluated stat, or None if error.
-
- Raises:
- CrocStatError: Error evaluating stat.
- """
- # TODO: specify a subdir to get the stat from, then walk the tree to
- # print the stats from just that subdir
-
- # Make sure the group exists
- if group not in self.tree.stats_by_group:
- if default is None:
- raise CrocStatError('Group %r not found.' % group)
- else:
- return default
-
- stats = self.tree.stats_by_group[group]
- # Unit tests use real dicts, not CoverageStats objects,
- # so we can't AddDefaults() on them.
- if group == 'all' and hasattr(stats, 'AddDefaults'):
- stats.AddDefaults()
- try:
- return eval(stat, {'__builtins__': {'S': self.GetStat}}, stats)
- except Exception, e:
- if default is None:
- raise CrocStatError('Error evaluating stat %r: %s' % (stat, e))
- else:
- return default
-
- def PrintStat(self, stat, format=None, outfile=sys.stdout, **kwargs):
- """Prints a statistic from the coverage object.
-
- Args:
- stat: Statistic to get. May also be an evaluatable python expression,
- using the stats. For example, 'stat1 - stat2'.
- format: Format string to use when printing stat. If None, prints the
- stat and its evaluation.
- outfile: File stream to output stat to; defaults to stdout.
- kwargs: Additional args to pass to GetStat().
- """
- s = self.GetStat(stat, **kwargs)
- if format is None:
- outfile.write('GetStat(%r) = %s\n' % (stat, s))
- else:
- outfile.write(format % s + '\n')
-
- def AddFiles(self, src_dir):
- """Adds files to coverage information.
-
- LCOV files only contains files which are compiled and instrumented as part
- of running coverage. This function finds missing files and adds them.
-
- Args:
- src_dir: Directory on disk at which to start search. May be a relative
- path on disk starting with '.' or '..', or an absolute path, or a
- path relative to an alt_name for one of the roots
- (for example, '_/src'). If the alt_name matches more than one root,
- all matches will be attempted.
-
- Note that dirs not underneath one of the root dirs and covered by an
- inclusion rule will be ignored.
- """
- # Check for root dir alt_names in the path and replace with the actual
- # root dirs, then recurse.
- found_root = False
- for root, alt_name in self.root_dirs:
- replaced_root = re.sub('^' + re.escape(alt_name) + '(?=(/|$))', root,
- src_dir)
- if replaced_root != src_dir:
- found_root = True
- self.AddFiles(replaced_root)
- if found_root:
- return # Replaced an alt_name with a root_dir, so already recursed.
-
- for (dirpath, dirnames, filenames) in self.add_files_walk(src_dir):
- # Make a copy of the dirnames list so we can modify the original to
- # prune subdirs we don't need to walk.
- for d in list(dirnames):
- # Add trailing '/' to directory names so dir-based regexps can match
- # '/' instead of needing to specify '(/|$)'.
- dpath = self.CleanupFilename(dirpath + '/' + d) + '/'
- attrs = self.ClassifyFile(dpath)
- if not attrs.get('include'):
- # Directory has been excluded, so don't traverse it
- # TODO: Document the slight weirdness caused by this: If you
- # AddFiles('./A'), and the rules include 'A/B/C/D' but not 'A/B',
- # then it won't recurse into './A/B' so won't find './A/B/C/D'.
- # Workarounds are to AddFiles('./A/B/C/D') or AddFiles('./A/B/C').
- # The latter works because it explicitly walks the contents of the
- # path passed to AddFiles(), so it finds './A/B/C/D'.
- dirnames.remove(d)
-
- for f in filenames:
- local_path = dirpath + '/' + f
-
- covf = self.GetCoveredFile(local_path, add=True)
- if not covf:
- continue
-
- # Save where we found the file, for generating line-by-line HTML output
- covf.local_path = local_path
-
- if covf.in_lcov:
- # File already instrumented and doesn't need to be scanned
- continue
-
- if not covf.attrs.get('add_if_missing', 1):
- # Not allowed to add the file
- self.RemoveCoveredFile(covf)
- continue
-
- # Scan file to find potentially-executable lines
- lines = self.scan_file(covf.local_path, covf.attrs.get('language'))
- if lines:
- for l in lines:
- covf.lines[l] = None
- covf.UpdateCoverage()
- else:
- # File has no executable lines, so don't count it
- self.RemoveCoveredFile(covf)
-
- def AddConfig(self, config_data, lcov_queue=None, addfiles_queue=None):
- """Adds JSON-ish config data.
-
- Args:
- config_data: Config data string.
- lcov_queue: If not None, object to append lcov_files to instead of
- parsing them immediately.
- addfiles_queue: If not None, object to append add_files to instead of
- processing them immediately.
- """
- # TODO: All manner of error checking
- cfg = eval(config_data, {'__builtins__': {}}, {})
-
- for rootdict in cfg.get('roots', []):
- self.AddRoot(rootdict['root'], alt_name=rootdict.get('altname', '_'))
-
- for ruledict in cfg.get('rules', []):
- regexp = ruledict.pop('regexp')
- self.AddRule(regexp, **ruledict)
-
- for add_lcov in cfg.get('lcov_files', []):
- if lcov_queue is not None:
- lcov_queue.append(add_lcov)
- else:
- self.ParseLcovFile(add_lcov)
-
- for add_path in cfg.get('add_files', []):
- if addfiles_queue is not None:
- addfiles_queue.append(add_path)
- else:
- self.AddFiles(add_path)
-
- self.print_stats += cfg.get('print_stats', [])
-
- def ParseConfig(self, filename, **kwargs):
- """Parses a configuration file.
-
- Args:
- filename: Config filename.
- kwargs: Additional parameters to pass to AddConfig().
- """
- # TODO: All manner of error checking
- f = None
- try:
- f = open(filename, 'rt')
- # Need to strip CR's from CRLF-terminated lines or posix systems can't
- # eval the data.
- config_data = f.read().replace('\r\n', '\n')
- # TODO: some sort of include syntax.
- #
- # Needs to be done at string-time rather than at eval()-time, so that
- # it's possible to include parts of dicts. Path from a file to its
- # include should be relative to the dir containing the file.
- #
- # Or perhaps it could be done after eval. In that case, there'd be an
- # 'include' section with a list of files to include. Those would be
- # eval()'d and recursively pre- or post-merged with the including file.
- #
- # Or maybe just don't worry about it, since multiple configs can be
- # specified on the command line.
- self.AddConfig(config_data, **kwargs)
- finally:
- if f:
- f.close()
-
- def UpdateTreeStats(self):
- """Recalculates the tree stats from the currently covered files.
-
- Also calculates coverage summary for files.
- """
- self.tree = CoveredDir('')
- for cov_file in self.files.itervalues():
- # Add the file to the tree
- fdirs = cov_file.filename.split('/')
- parent = self.tree
- ancestors = [parent]
- for d in fdirs[:-1]:
- if d not in parent.subdirs:
- if parent.dirpath:
- parent.subdirs[d] = CoveredDir(parent.dirpath + '/' + d)
- else:
- parent.subdirs[d] = CoveredDir(d)
- parent = parent.subdirs[d]
- ancestors.append(parent)
- # Final subdir actually contains the file
- parent.files[fdirs[-1]] = cov_file
-
- # Now add file's contribution to coverage by dir
- for a in ancestors:
- # Add to 'all' group
- a.stats_by_group['all'].Add(cov_file.stats)
-
- # Add to group file belongs to
- group = cov_file.attrs.get('group')
- if group not in a.stats_by_group:
- a.stats_by_group[group] = CoverageStats()
- cbyg = a.stats_by_group[group]
- cbyg.Add(cov_file.stats)
-
- def PrintTree(self):
- """Prints the tree stats."""
- # Print the tree
- print 'Lines of code coverage by directory:'
- print self.tree.GetTree()
-
-#------------------------------------------------------------------------------
-
-
-def Main(argv):
- """Main routine.
-
- Args:
- argv: list of arguments
-
- Returns:
- exit code, 0 for normal exit.
- """
- # Parse args
- parser = optparse.OptionParser()
- parser.add_option(
- '-i', '--input', dest='inputs', type='string', action='append',
- metavar='FILE',
- help='read LCOV input from FILE')
- parser.add_option(
- '-r', '--root', dest='roots', type='string', action='append',
- metavar='ROOT[=ALTNAME]',
- help='add ROOT directory, optionally map in coverage results as ALTNAME')
- parser.add_option(
- '-c', '--config', dest='configs', type='string', action='append',
- metavar='FILE',
- help='read settings from configuration FILE')
- parser.add_option(
- '-a', '--addfiles', dest='addfiles', type='string', action='append',
- metavar='PATH',
- help='add files from PATH to coverage data')
- parser.add_option(
- '-t', '--tree', dest='tree', action='store_true',
- help='print tree of code coverage by group')
- parser.add_option(
- '-u', '--uninstrumented', dest='uninstrumented', action='store_true',
- help='list uninstrumented files')
- parser.add_option(
- '-m', '--html', dest='html_out', type='string', metavar='PATH',
- help='write HTML output to PATH')
- parser.add_option(
- '-b', '--base_url', dest='base_url', type='string', metavar='URL',
- help='include URL in base tag of HTML output')
-
- parser.set_defaults(
- inputs=[],
- roots=[],
- configs=[],
- addfiles=[],
- tree=False,
- html_out=None,
- )
-
- options = parser.parse_args(args=argv)[0]
-
- cov = Coverage()
-
- # Set root directories for coverage
- for root_opt in options.roots:
- if '=' in root_opt:
- cov.AddRoot(*root_opt.split('='))
- else:
- cov.AddRoot(root_opt)
-
- # Read config files
- for config_file in options.configs:
- cov.ParseConfig(config_file, lcov_queue=options.inputs,
- addfiles_queue=options.addfiles)
-
- # Parse lcov files
- for input_filename in options.inputs:
- cov.ParseLcovFile(input_filename)
-
- # Add missing files
- for add_path in options.addfiles:
- cov.AddFiles(add_path)
-
- # Print help if no files specified
- if not cov.files:
- print 'No covered files found.'
- parser.print_help()
- return 1
-
- # Update tree stats
- cov.UpdateTreeStats()
-
- # Print uninstrumented filenames
- if options.uninstrumented:
- print 'Uninstrumented files:'
- for f in sorted(cov.files):
- covf = cov.files[f]
- if not covf.in_lcov:
- print ' %-6s %-6s %s' % (covf.attrs.get('group'),
- covf.attrs.get('language'), f)
-
- # Print tree stats
- if options.tree:
- cov.PrintTree()
-
- # Print stats
- for ps_args in cov.print_stats:
- cov.PrintStat(**ps_args)
-
- # Generate HTML
- if options.html_out:
- html = croc_html.CrocHtml(cov, options.html_out, options.base_url)
- html.Write()
-
- # Normal exit
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(Main(sys.argv))
diff --git a/chromium/tools/code_coverage/croc_html.py b/chromium/tools/code_coverage/croc_html.py
deleted file mode 100644
index 7866f472f7b..00000000000
--- a/chromium/tools/code_coverage/croc_html.py
+++ /dev/null
@@ -1,451 +0,0 @@
-# Copyright (c) 2012 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.
-
-"""Crocodile HTML output."""
-
-import os
-import shutil
-import time
-import xml.dom
-
-
-class CrocHtmlError(Exception):
- """Coverage HTML error."""
-
-
-class HtmlElement(object):
- """Node in a HTML file."""
-
- def __init__(self, doc, element):
- """Constructor.
-
- Args:
- doc: XML document object.
- element: XML element.
- """
- self.doc = doc
- self.element = element
-
- def E(self, name, **kwargs):
- """Adds a child element.
-
- Args:
- name: Name of element.
- kwargs: Attributes for element. To use an attribute which is a python
- reserved word (i.e. 'class'), prefix the attribute name with 'e_'.
-
- Returns:
- The child element.
- """
- he = HtmlElement(self.doc, self.doc.createElement(name))
- element = he.element
- self.element.appendChild(element)
-
- for k, v in kwargs.iteritems():
- if k.startswith('e_'):
- # Remove prefix
- element.setAttribute(k[2:], str(v))
- else:
- element.setAttribute(k, str(v))
-
- return he
-
- def Text(self, text):
- """Adds a text node.
-
- Args:
- text: Text to add.
-
- Returns:
- self.
- """
- t = self.doc.createTextNode(str(text))
- self.element.appendChild(t)
- return self
-
-
-class HtmlFile(object):
- """HTML file."""
-
- def __init__(self, xml_impl, filename):
- """Constructor.
-
- Args:
- xml_impl: DOMImplementation to use to create document.
- filename: Path to file.
- """
- self.xml_impl = xml_impl
- doctype = xml_impl.createDocumentType(
- 'HTML', '-//W3C//DTD HTML 4.01//EN',
- 'http://www.w3.org/TR/html4/strict.dtd')
- self.doc = xml_impl.createDocument(None, 'html', doctype)
- self.filename = filename
-
- # Create head and body elements
- root = HtmlElement(self.doc, self.doc.documentElement)
- self.head = root.E('head')
- self.body = root.E('body')
-
- def Write(self, cleanup=True):
- """Writes the file.
-
- Args:
- cleanup: If True, calls unlink() on the internal xml document. This
- frees up memory, but means that you can't use this file for anything
- else.
- """
- f = open(self.filename, 'wt')
- self.doc.writexml(f, encoding='UTF-8')
- f.close()
-
- if cleanup:
- self.doc.unlink()
- # Prevent future uses of the doc now that we've unlinked it
- self.doc = None
-
-#------------------------------------------------------------------------------
-
-COV_TYPE_STRING = {None: 'm', 0: 'i', 1: 'E', 2: ' '}
-COV_TYPE_CLASS = {None: 'missing', 0: 'instr', 1: 'covered', 2: ''}
-
-
-class CrocHtml(object):
- """Crocodile HTML output class."""
-
- def __init__(self, cov, output_root, base_url=None):
- """Constructor."""
- self.cov = cov
- self.output_root = output_root
- self.base_url = base_url
- self.xml_impl = xml.dom.getDOMImplementation()
- self.time_string = 'Coverage information generated %s.' % time.asctime()
-
- def CreateHtmlDoc(self, filename, title):
- """Creates a new HTML document.
-
- Args:
- filename: Filename to write to, relative to self.output_root.
- title: Title of page
-
- Returns:
- The document.
- """
- f = HtmlFile(self.xml_impl, self.output_root + '/' + filename)
-
- f.head.E('title').Text(title)
-
- if self.base_url:
- css_href = self.base_url + 'croc.css'
- base_href = self.base_url + os.path.dirname(filename)
- if not base_href.endswith('/'):
- base_href += '/'
- f.head.E('base', href=base_href)
- else:
- css_href = '../' * (len(filename.split('/')) - 1) + 'croc.css'
-
- f.head.E('link', rel='stylesheet', type='text/css', href=css_href)
-
- return f
-
- def AddCaptionForFile(self, body, path):
- """Adds a caption for the file, with links to each parent dir.
-
- Args:
- body: Body elemement.
- path: Path to file.
- """
- # This is slightly different that for subdir, because it needs to have a
- # link to the current directory's index.html.
- hdr = body.E('h2')
- hdr.Text('Coverage for ')
- dirs = [''] + path.split('/')
- num_dirs = len(dirs)
- for i in range(num_dirs - 1):
- hdr.E('a', href=(
- '../' * (num_dirs - i - 2) + 'index.html')).Text(dirs[i] + '/')
- hdr.Text(dirs[-1])
-
- def AddCaptionForSubdir(self, body, path):
- """Adds a caption for the subdir, with links to each parent dir.
-
- Args:
- body: Body elemement.
- path: Path to subdir.
- """
- # Link to parent dirs
- hdr = body.E('h2')
- hdr.Text('Coverage for ')
- dirs = [''] + path.split('/')
- num_dirs = len(dirs)
- for i in range(num_dirs - 1):
- hdr.E('a', href=(
- '../' * (num_dirs - i - 1) + 'index.html')).Text(dirs[i] + '/')
- hdr.Text(dirs[-1] + '/')
-
- def AddSectionHeader(self, table, caption, itemtype, is_file=False):
- """Adds a section header to the coverage table.
-
- Args:
- table: Table to add rows to.
- caption: Caption for section, if not None.
- itemtype: Type of items in this section, if not None.
- is_file: Are items in this section files?
- """
-
- if caption is not None:
- table.E('tr').E('th', e_class='secdesc', colspan=8).Text(caption)
-
- sec_hdr = table.E('tr')
-
- if itemtype is not None:
- sec_hdr.E('th', e_class='section').Text(itemtype)
-
- sec_hdr.E('th', e_class='section').Text('Coverage')
- sec_hdr.E('th', e_class='section', colspan=3).Text(
- 'Lines executed / instrumented / missing')
-
- graph = sec_hdr.E('th', e_class='section')
- graph.E('span', style='color:#00FF00').Text('exe')
- graph.Text(' / ')
- graph.E('span', style='color:#FFFF00').Text('inst')
- graph.Text(' / ')
- graph.E('span', style='color:#FF0000').Text('miss')
-
- if is_file:
- sec_hdr.E('th', e_class='section').Text('Language')
- sec_hdr.E('th', e_class='section').Text('Group')
- else:
- sec_hdr.E('th', e_class='section', colspan=2)
-
- def AddItem(self, table, itemname, stats, attrs, link=None):
- """Adds a bar graph to the element. This is a series of <td> elements.
-
- Args:
- table: Table to add item to.
- itemname: Name of item.
- stats: Stats object.
- attrs: Attributes dictionary; if None, no attributes will be printed.
- link: Destination for itemname hyperlink, if not None.
- """
- row = table.E('tr')
-
- # Add item name
- if itemname is not None:
- item_elem = row.E('td')
- if link is not None:
- item_elem = item_elem.E('a', href=link)
- item_elem.Text(itemname)
-
- # Get stats
- stat_exe = stats.get('lines_executable', 0)
- stat_ins = stats.get('lines_instrumented', 0)
- stat_cov = stats.get('lines_covered', 0)
-
- percent = row.E('td')
-
- # Add text
- row.E('td', e_class='number').Text(stat_cov)
- row.E('td', e_class='number').Text(stat_ins)
- row.E('td', e_class='number').Text(stat_exe - stat_ins)
-
- # Add percent and graph; only fill in if there's something in there
- graph = row.E('td', e_class='graph', width=100)
- if stat_exe:
- percent_cov = 100.0 * stat_cov / stat_exe
- percent_ins = 100.0 * stat_ins / stat_exe
-
- # Color percent based on thresholds
- percent.Text('%.1f%%' % percent_cov)
- if percent_cov >= 80:
- percent.element.setAttribute('class', 'high_pct')
- elif percent_cov >= 60:
- percent.element.setAttribute('class', 'mid_pct')
- else:
- percent.element.setAttribute('class', 'low_pct')
-
- # Graphs use integer values
- percent_cov = int(percent_cov)
- percent_ins = int(percent_ins)
-
- graph.Text('.')
- graph.E('span', style='padding-left:%dpx' % percent_cov,
- e_class='g_covered')
- graph.E('span', style='padding-left:%dpx' % (percent_ins - percent_cov),
- e_class='g_instr')
- graph.E('span', style='padding-left:%dpx' % (100 - percent_ins),
- e_class='g_missing')
-
- if attrs:
- row.E('td', e_class='stat').Text(attrs.get('language'))
- row.E('td', e_class='stat').Text(attrs.get('group'))
- else:
- row.E('td', colspan=2)
-
- def WriteFile(self, cov_file):
- """Writes the HTML for a file.
-
- Args:
- cov_file: croc.CoveredFile to write.
- """
- print ' ' + cov_file.filename
- title = 'Coverage for ' + cov_file.filename
-
- f = self.CreateHtmlDoc(cov_file.filename + '.html', title)
- body = f.body
-
- # Write header section
- self.AddCaptionForFile(body, cov_file.filename)
-
- # Summary for this file
- table = body.E('table')
- self.AddSectionHeader(table, None, None, is_file=True)
- self.AddItem(table, None, cov_file.stats, cov_file.attrs)
-
- body.E('h2').Text('Line-by-line coverage:')
-
- # Print line-by-line coverage
- if cov_file.local_path:
- code_table = body.E('table').E('tr').E('td').E('pre')
-
- flines = open(cov_file.local_path, 'rt')
- lineno = 0
-
- for line in flines:
- lineno += 1
- line_cov = cov_file.lines.get(lineno, 2)
- e_class = COV_TYPE_CLASS.get(line_cov)
-
- code_table.E('span', e_class=e_class).Text('%4d %s : %s\n' % (
- lineno,
- COV_TYPE_STRING.get(line_cov),
- line.rstrip()
- ))
-
- else:
- body.Text('Line-by-line coverage not available. Make sure the directory'
- ' containing this file has been scanned via ')
- body.E('B').Text('add_files')
- body.Text(' in a configuration file, or the ')
- body.E('B').Text('--addfiles')
- body.Text(' command line option.')
-
- # TODO: if file doesn't have a local path, try to find it by
- # reverse-mapping roots and searching for the file.
-
- body.E('p', e_class='time').Text(self.time_string)
- f.Write()
-
- def WriteSubdir(self, cov_dir):
- """Writes the index.html for a subdirectory.
-
- Args:
- cov_dir: croc.CoveredDir to write.
- """
- print ' ' + cov_dir.dirpath + '/'
-
- # Create the subdir if it doesn't already exist
- subdir = self.output_root + '/' + cov_dir.dirpath
- if not os.path.exists(subdir):
- os.mkdir(subdir)
-
- if cov_dir.dirpath:
- title = 'Coverage for ' + cov_dir.dirpath + '/'
- f = self.CreateHtmlDoc(cov_dir.dirpath + '/index.html', title)
- else:
- title = 'Coverage summary'
- f = self.CreateHtmlDoc('index.html', title)
-
- body = f.body
-
- dirs = [''] + cov_dir.dirpath.split('/')
- num_dirs = len(dirs)
- sort_jsfile = '../' * (num_dirs - 1) + 'sorttable.js'
- script = body.E('script', src=sort_jsfile)
- body.E('/script')
-
- # Write header section
- if cov_dir.dirpath:
- self.AddCaptionForSubdir(body, cov_dir.dirpath)
- else:
- body.E('h2').Text(title)
-
- table = body.E('table', e_class='sortable')
- table.E('h3').Text('Coverage by Group')
- # Coverage by group
- self.AddSectionHeader(table, None, 'Group')
-
- for group in sorted(cov_dir.stats_by_group):
- self.AddItem(table, group, cov_dir.stats_by_group[group], None)
-
- # List subdirs
- if cov_dir.subdirs:
- table = body.E('table', e_class='sortable')
- table.E('h3').Text('Subdirectories')
- self.AddSectionHeader(table, None, 'Subdirectory')
-
- for d in sorted(cov_dir.subdirs):
- self.AddItem(table, d + '/', cov_dir.subdirs[d].stats_by_group['all'],
- None, link=d + '/index.html')
-
- # List files
- if cov_dir.files:
- table = body.E('table', e_class='sortable')
- table.E('h3').Text('Files in This Directory')
- self.AddSectionHeader(table, None, 'Filename',
- is_file=True)
-
- for filename in sorted(cov_dir.files):
- cov_file = cov_dir.files[filename]
- self.AddItem(table, filename, cov_file.stats, cov_file.attrs,
- link=filename + '.html')
-
- body.E('p', e_class='time').Text(self.time_string)
- f.Write()
-
- def WriteRoot(self):
- """Writes the files in the output root."""
- # Find ourselves
- src_dir = os.path.split(self.WriteRoot.func_code.co_filename)[0]
-
- # Files to copy into output root
- copy_files = ['croc.css']
- # Third_party files to copy into output root
- third_party_files = ['sorttable.js']
-
- # Copy files from our directory into the output directory
- for copy_file in copy_files:
- print ' Copying %s' % copy_file
- shutil.copyfile(os.path.join(src_dir, copy_file),
- os.path.join(self.output_root, copy_file))
- # Copy third party files from third_party directory into
- # the output directory
- src_dir = os.path.join(src_dir, 'third_party')
- for third_party_file in third_party_files:
- print ' Copying %s' % third_party_file
- shutil.copyfile(os.path.join(src_dir, third_party_file),
- os.path.join(self.output_root, third_party_file))
-
- def Write(self):
- """Writes HTML output."""
-
- print 'Writing HTML to %s...' % self.output_root
-
- # Loop through the tree and write subdirs, breadth-first
- # TODO: switch to depth-first and sort values - makes nicer output?
- todo = [self.cov.tree]
- while todo:
- cov_dir = todo.pop(0)
-
- # Append subdirs to todo list
- todo += cov_dir.subdirs.values()
-
- # Write this subdir
- self.WriteSubdir(cov_dir)
-
- # Write files in this subdir
- for cov_file in cov_dir.files.itervalues():
- self.WriteFile(cov_file)
-
- # Write files in root directory
- self.WriteRoot()
diff --git a/chromium/tools/code_coverage/croc_scan.py b/chromium/tools/code_coverage/croc_scan.py
deleted file mode 100644
index 8d0e2e8df2a..00000000000
--- a/chromium/tools/code_coverage/croc_scan.py
+++ /dev/null
@@ -1,164 +0,0 @@
-# Copyright (c) 2011 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.
-
-"""Crocodile source scanners."""
-
-
-import re
-
-
-class Scanner(object):
- """Generic source scanner."""
-
- def __init__(self):
- """Constructor."""
-
- self.re_token = re.compile('#')
- self.comment_to_eol = ['#']
- self.comment_start = None
- self.comment_end = None
-
- def ScanLines(self, lines):
- """Scans the lines for executable statements.
-
- Args:
- lines: Iterator returning source lines.
-
- Returns:
- An array of line numbers which are executable.
- """
- exe_lines = []
- lineno = 0
-
- in_string = None
- in_comment = None
- comment_index = None
-
- for line in lines:
- lineno += 1
- in_string_at_start = in_string
-
- for t in self.re_token.finditer(line):
- tokenstr = t.groups()[0]
-
- if in_comment:
- # Inside a multi-line comment, so look for end token
- if tokenstr == in_comment:
- in_comment = None
- # Replace comment with spaces
- line = (line[:comment_index]
- + ' ' * (t.end(0) - comment_index)
- + line[t.end(0):])
-
- elif in_string:
- # Inside a string, so look for end token
- if tokenstr == in_string:
- in_string = None
-
- elif tokenstr in self.comment_to_eol:
- # Single-line comment, so truncate line at start of token
- line = line[:t.start(0)]
- break
-
- elif tokenstr == self.comment_start:
- # Multi-line comment start - end token is comment_end
- in_comment = self.comment_end
- comment_index = t.start(0)
-
- else:
- # Starting a string - end token is same as start
- in_string = tokenstr
-
- # If still in comment at end of line, remove comment
- if in_comment:
- line = line[:comment_index]
- # Next line, delete from the beginnine
- comment_index = 0
-
- # If line-sans-comments is not empty, claim it may be executable
- if line.strip() or in_string_at_start:
- exe_lines.append(lineno)
-
- # Return executable lines
- return exe_lines
-
- def Scan(self, filename):
- """Reads the file and scans its lines.
-
- Args:
- filename: Path to file to scan.
-
- Returns:
- An array of line numbers which are executable.
- """
-
- # TODO: All manner of error checking
- f = None
- try:
- f = open(filename, 'rt')
- return self.ScanLines(f)
- finally:
- if f:
- f.close()
-
-
-class PythonScanner(Scanner):
- """Python source scanner."""
-
- def __init__(self):
- """Constructor."""
- Scanner.__init__(self)
-
- # TODO: This breaks for strings ending in more than 2 backslashes. Need
- # a pattern which counts only an odd number of backslashes, so the last
- # one thus escapes the quote.
- self.re_token = re.compile(r'(#|\'\'\'|"""|(?<!(?<!\\)\\)["\'])')
- self.comment_to_eol = ['#']
- self.comment_start = None
- self.comment_end = None
-
-
-class CppScanner(Scanner):
- """C / C++ / ObjC / ObjC++ source scanner."""
-
- def __init__(self):
- """Constructor."""
- Scanner.__init__(self)
-
- # TODO: This breaks for strings ending in more than 2 backslashes. Need
- # a pattern which counts only an odd number of backslashes, so the last
- # one thus escapes the quote.
- self.re_token = re.compile(r'(^\s*#|//|/\*|\*/|(?<!(?<!\\)\\)["\'])')
-
- # TODO: Treat '\' at EOL as a token, and handle it as continuing the
- # previous line. That is, if in a comment-to-eol, this line is a comment
- # too.
-
- # Note that we treat # at beginning of line as a comment, so that we ignore
- # preprocessor definitions
- self.comment_to_eol = ['//', '#']
-
- self.comment_start = '/*'
- self.comment_end = '*/'
-
-
-def ScanFile(filename, language):
- """Scans a file for executable lines.
-
- Args:
- filename: Path to file to scan.
- language: Language for file ('C', 'C++', 'python', 'ObjC', 'ObjC++')
-
- Returns:
- A list of executable lines, or an empty list if the file was not a handled
- language.
- """
-
- if language == 'python':
- return PythonScanner().Scan(filename)
- elif language in ['C', 'C++', 'ObjC', 'ObjC++']:
- return CppScanner().Scan(filename)
-
- # Something we don't handle
- return []
diff --git a/chromium/tools/code_coverage/croc_scan_test.py b/chromium/tools/code_coverage/croc_scan_test.py
deleted file mode 100755
index a69b28aac5c..00000000000
--- a/chromium/tools/code_coverage/croc_scan_test.py
+++ /dev/null
@@ -1,187 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""Unit tests for croc_scan.py."""
-
-import re
-import unittest
-import croc_scan
-
-
-class TestScanner(unittest.TestCase):
- """Tests for croc_scan.Scanner."""
-
- def testInit(self):
- """Test __init()__."""
- s = croc_scan.Scanner()
-
- self.assertEqual(s.re_token.pattern, '#')
- self.assertEqual(s.comment_to_eol, ['#'])
- self.assertEqual(s.comment_start, None)
- self.assertEqual(s.comment_end, None)
-
- def testScanLines(self):
- """Test ScanLines()."""
- s = croc_scan.Scanner()
- # Set up imaginary language:
- # ':' = comment to EOL
- # '"' = string start/end
- # '(' = comment start
- # ')' = comment end
- s.re_token = re.compile(r'([\:\"\(\)])')
- s.comment_to_eol = [':']
- s.comment_start = '('
- s.comment_end = ')'
-
- # No input file = no output lines
- self.assertEqual(s.ScanLines([]), [])
-
- # Empty lines and lines with only whitespace are ignored
- self.assertEqual(s.ScanLines([
- '', # 1
- 'line', # 2 exe
- ' \t ', # 3
- ]), [2])
-
- # Comments to EOL are stripped, but not inside strings
- self.assertEqual(s.ScanLines([
- 'test', # 1 exe
- ' : A comment', # 2
- '"a : in a string"', # 3 exe
- 'test2 : with comment to EOL', # 4 exe
- 'foo = "a multiline string with an empty line', # 5 exe
- '', # 6 exe
- ': and a comment-to-EOL character"', # 7 exe
- ': done', # 8
- ]), [1, 3, 4, 5, 6, 7])
-
- # Test Comment start/stop detection
- self.assertEqual(s.ScanLines([
- '( a comment on one line)', # 1
- 'text (with a comment)', # 2 exe
- '( a comment with a : in the middle)', # 3
- '( a multi-line', # 4
- ' comment)', # 5
- 'a string "with a ( in it"', # 6 exe
- 'not in a multi-line comment', # 7 exe
- '(a comment with a " in it)', # 8
- ': not in a string, so this gets stripped', # 9
- 'more text "with an uninteresting string"', # 10 exe
- ]), [2, 6, 7, 10])
-
- # TODO: Test Scan(). Low priority, since it just wraps ScanLines().
-
-
-class TestPythonScanner(unittest.TestCase):
- """Tests for croc_scan.PythonScanner."""
-
- def testScanLines(self):
- """Test ScanLines()."""
- s = croc_scan.PythonScanner()
-
- # No input file = no output lines
- self.assertEqual(s.ScanLines([]), [])
-
- self.assertEqual(s.ScanLines([
- '# a comment', # 1
- '', # 2
- '"""multi-line string', # 3 exe
- '# not a comment', # 4 exe
- 'end of multi-line string"""', # 5 exe
- ' ', # 6
- '"single string with #comment"', # 7 exe
- '', # 8
- '\'\'\'multi-line string, single-quote', # 9 exe
- '# not a comment', # 10 exe
- 'end of multi-line string\'\'\'', # 11 exe
- '', # 12
- '"string with embedded \\" is handled"', # 13 exe
- '# quoted "', # 14
- '"\\""', # 15 exe
- '# quoted backslash', # 16
- '"\\\\"', # 17 exe
- 'main()', # 18 exe
- '# end', # 19
- ]), [3, 4, 5, 7, 9, 10, 11, 13, 15, 17, 18])
-
-
-class TestCppScanner(unittest.TestCase):
- """Tests for croc_scan.CppScanner."""
-
- def testScanLines(self):
- """Test ScanLines()."""
- s = croc_scan.CppScanner()
-
- # No input file = no output lines
- self.assertEqual(s.ScanLines([]), [])
-
- self.assertEqual(s.ScanLines([
- '// a comment', # 1
- '# a preprocessor define', # 2
- '', # 3
- '\'#\', \'"\'', # 4 exe
- '', # 5
- '/* a multi-line comment', # 6
- 'with a " in it', # 7
- '*/', # 8
- '', # 9
- '"a string with /* and \' in it"', # 10 exe
- '', # 11
- '"a multi-line string\\', # 12 exe
- '// not a comment\\', # 13 exe
- 'ending here"', # 14 exe
- '', # 15
- '"string with embedded \\" is handled"', # 16 exe
- '', # 17
- 'main()', # 18 exe
- '// end', # 19
- ]), [4, 10, 12, 13, 14, 16, 18])
-
-
-class TestScanFile(unittest.TestCase):
- """Tests for croc_scan.ScanFile()."""
-
- class MockScanner(object):
- """Mock scanner."""
-
- def __init__(self, language):
- """Constructor."""
- self.language = language
-
- def Scan(self, filename):
- """Mock Scan() method."""
- return 'scan %s %s' % (self.language, filename)
-
- def MockPythonScanner(self):
- return self.MockScanner('py')
-
- def MockCppScanner(self):
- return self.MockScanner('cpp')
-
- def setUp(self):
- """Per-test setup."""
- # Hook scanners
- self.old_python_scanner = croc_scan.PythonScanner
- self.old_cpp_scanner = croc_scan.CppScanner
- croc_scan.PythonScanner = self.MockPythonScanner
- croc_scan.CppScanner = self.MockCppScanner
-
- def tearDown(self):
- """Per-test cleanup."""
- croc_scan.PythonScanner = self.old_python_scanner
- croc_scan.CppScanner = self.old_cpp_scanner
-
- def testScanFile(self):
- """Test ScanFile()."""
- self.assertEqual(croc_scan.ScanFile('foo', 'python'), 'scan py foo')
- self.assertEqual(croc_scan.ScanFile('bar1', 'C'), 'scan cpp bar1')
- self.assertEqual(croc_scan.ScanFile('bar2', 'C++'), 'scan cpp bar2')
- self.assertEqual(croc_scan.ScanFile('bar3', 'ObjC'), 'scan cpp bar3')
- self.assertEqual(croc_scan.ScanFile('bar4', 'ObjC++'), 'scan cpp bar4')
- self.assertEqual(croc_scan.ScanFile('bar', 'fortran'), [])
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/chromium/tools/code_coverage/croc_test.py b/chromium/tools/code_coverage/croc_test.py
deleted file mode 100755
index 7c2521ca3df..00000000000
--- a/chromium/tools/code_coverage/croc_test.py
+++ /dev/null
@@ -1,758 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""Unit tests for Crocodile."""
-
-import os
-import StringIO
-import unittest
-import croc
-
-
-class TestCoverageStats(unittest.TestCase):
- """Tests for croc.CoverageStats."""
-
- def testAdd(self):
- """Test Add()."""
- c = croc.CoverageStats()
-
- # Initially empty
- self.assertEqual(c, {})
-
- # Add items
- c['a'] = 1
- c['b'] = 0
- self.assertEqual(c, {'a': 1, 'b': 0})
-
- # Add dict with non-overlapping items
- c.Add({'c': 5})
- self.assertEqual(c, {'a': 1, 'b': 0, 'c': 5})
-
- # Add dict with overlapping items
- c.Add({'a': 4, 'd': 3})
- self.assertEqual(c, {'a': 5, 'b': 0, 'c': 5, 'd': 3})
-
-
-class TestCoveredFile(unittest.TestCase):
- """Tests for croc.CoveredFile."""
-
- def setUp(self):
- self.cov_file = croc.CoveredFile('bob.cc', group='source', language='C++')
-
- def testInit(self):
- """Test init."""
- f = self.cov_file
-
- # Check initial values
- self.assertEqual(f.filename, 'bob.cc')
- self.assertEqual(f.attrs, {'group': 'source', 'language': 'C++'})
- self.assertEqual(f.lines, {})
- self.assertEqual(f.stats, {})
- self.assertEqual(f.local_path, None)
- self.assertEqual(f.in_lcov, False)
-
- def testUpdateCoverageEmpty(self):
- """Test updating coverage when empty."""
- f = self.cov_file
- f.UpdateCoverage()
- self.assertEqual(f.stats, {
- 'lines_executable': 0,
- 'lines_instrumented': 0,
- 'lines_covered': 0,
- 'files_executable': 1,
- })
-
- def testUpdateCoverageExeOnly(self):
- """Test updating coverage when no lines are instrumented."""
- f = self.cov_file
- f.lines = {1: None, 2: None, 4: None}
- f.UpdateCoverage()
- self.assertEqual(f.stats, {
- 'lines_executable': 3,
- 'lines_instrumented': 0,
- 'lines_covered': 0,
- 'files_executable': 1,
- })
-
- # Now mark the file instrumented via in_lcov
- f.in_lcov = True
- f.UpdateCoverage()
- self.assertEqual(f.stats, {
- 'lines_executable': 3,
- 'lines_instrumented': 0,
- 'lines_covered': 0,
- 'files_executable': 1,
- 'files_instrumented': 1,
- })
-
- def testUpdateCoverageExeAndInstr(self):
- """Test updating coverage when no lines are covered."""
- f = self.cov_file
- f.lines = {1: None, 2: None, 4: 0, 5: 0, 7: None}
- f.UpdateCoverage()
- self.assertEqual(f.stats, {
- 'lines_executable': 5,
- 'lines_instrumented': 2,
- 'lines_covered': 0,
- 'files_executable': 1,
- 'files_instrumented': 1,
- })
-
- def testUpdateCoverageWhenCovered(self):
- """Test updating coverage when lines are covered."""
- f = self.cov_file
- f.lines = {1: None, 2: None, 3: 1, 4: 0, 5: 0, 6: 1, 7: None}
- f.UpdateCoverage()
- self.assertEqual(f.stats, {
- 'lines_executable': 7,
- 'lines_instrumented': 4,
- 'lines_covered': 2,
- 'files_executable': 1,
- 'files_instrumented': 1,
- 'files_covered': 1,
- })
-
-
-class TestCoveredDir(unittest.TestCase):
- """Tests for croc.CoveredDir."""
-
- def setUp(self):
- self.cov_dir = croc.CoveredDir('/a/b/c')
-
- def testInit(self):
- """Test init."""
- d = self.cov_dir
-
- # Check initial values
- self.assertEqual(d.dirpath, '/a/b/c')
- self.assertEqual(d.files, {})
- self.assertEqual(d.subdirs, {})
- self.assertEqual(d.stats_by_group, {'all': {}})
-
- def testGetTreeEmpty(self):
- """Test getting empty tree."""
- d = self.cov_dir
- self.assertEqual(d.GetTree(), 'c/')
-
- def testGetTreeStats(self):
- """Test getting tree with stats."""
- d = self.cov_dir
- d.stats_by_group['all'] = croc.CoverageStats(
- lines_executable=50, lines_instrumented=30, lines_covered=20)
- d.stats_by_group['bar'] = croc.CoverageStats(
- lines_executable=0, lines_instrumented=0, lines_covered=0)
- d.stats_by_group['foo'] = croc.CoverageStats(
- lines_executable=33, lines_instrumented=22, lines_covered=11)
- # 'bar' group is skipped because it has no executable lines
- self.assertEqual(
- d.GetTree(),
- 'c/ all:20/30/50 foo:11/22/33')
-
- def testGetTreeSubdir(self):
- """Test getting tree with subdirs."""
- d1 = self.cov_dir = croc.CoveredDir('/a')
- d2 = self.cov_dir = croc.CoveredDir('/a/b')
- d3 = self.cov_dir = croc.CoveredDir('/a/c')
- d4 = self.cov_dir = croc.CoveredDir('/a/b/d')
- d5 = self.cov_dir = croc.CoveredDir('/a/b/e')
- d1.subdirs = {'/a/b': d2, '/a/c': d3}
- d2.subdirs = {'/a/b/d': d4, '/a/b/e': d5}
- self.assertEqual(d1.GetTree(), 'a/\n b/\n d/\n e/\n c/')
-
-
-class TestCoverage(unittest.TestCase):
- """Tests for croc.Coverage."""
-
- def MockWalk(self, src_dir):
- """Mock for os.walk().
-
- Args:
- src_dir: Source directory to walk.
-
- Returns:
- A list of (dirpath, dirnames, filenames) tuples.
- """
- self.mock_walk_calls.append(src_dir)
- return self.mock_walk_return
-
- def MockScanFile(self, filename, language):
- """Mock for croc_scan.ScanFile().
-
- Args:
- filename: Path to file to scan.
- language: Language for file.
-
- Returns:
- A list of executable lines.
- """
- self.mock_scan_calls.append([filename, language])
- if filename in self.mock_scan_return:
- return self.mock_scan_return[filename]
- else:
- return self.mock_scan_return['default']
-
- def setUp(self):
- """Per-test setup."""
-
- # Empty coverage object
- self.cov = croc.Coverage()
-
- # Coverage object with minimal setup
- self.cov_minimal = croc.Coverage()
- self.cov_minimal.AddRoot('/src')
- self.cov_minimal.AddRoot('c:\\source')
- self.cov_minimal.AddRule('^_/', include=1, group='my')
- self.cov_minimal.AddRule('.*\\.c$', language='C')
- self.cov_minimal.AddRule('.*\\.c##$', language='C##') # sharper than thou
-
- # Data for MockWalk()
- self.mock_walk_calls = []
- self.mock_walk_return = []
-
- # Data for MockScanFile()
- self.mock_scan_calls = []
- self.mock_scan_return = {'default': [1]}
-
- def testInit(self):
- """Test init."""
- c = self.cov
- self.assertEqual(c.files, {})
- self.assertEqual(c.root_dirs, [])
- self.assertEqual(c.print_stats, [])
- self.assertEqual(c.rules, [])
-
- def testAddRoot(self):
- """Test AddRoot() and CleanupFilename()."""
- c = self.cov
-
- # Check for identity on already-clean filenames
- self.assertEqual(c.CleanupFilename(''), '')
- self.assertEqual(c.CleanupFilename('a'), 'a')
- self.assertEqual(c.CleanupFilename('.a'), '.a')
- self.assertEqual(c.CleanupFilename('..a'), '..a')
- self.assertEqual(c.CleanupFilename('a.b'), 'a.b')
- self.assertEqual(c.CleanupFilename('a/b/c'), 'a/b/c')
- self.assertEqual(c.CleanupFilename('a/b/c/'), 'a/b/c/')
-
- # Backslash to forward slash
- self.assertEqual(c.CleanupFilename('a\\b\\c'), 'a/b/c')
-
- # Handle relative paths
- self.assertEqual(c.CleanupFilename('.'),
- c.CleanupFilename(os.path.abspath('.')))
- self.assertEqual(c.CleanupFilename('..'),
- c.CleanupFilename(os.path.abspath('..')))
- self.assertEqual(c.CleanupFilename('./foo/bar'),
- c.CleanupFilename(os.path.abspath('./foo/bar')))
- self.assertEqual(c.CleanupFilename('../../a/b/c'),
- c.CleanupFilename(os.path.abspath('../../a/b/c')))
-
- # Replace alt roots
- c.AddRoot('foo')
- self.assertEqual(c.CleanupFilename('foo'), '_')
- self.assertEqual(c.CleanupFilename('foo/bar/baz'), '_/bar/baz')
- self.assertEqual(c.CleanupFilename('aaa/foo'), 'aaa/foo')
-
- # Alt root replacement is applied for all roots
- c.AddRoot('foo/bar', '_B')
- self.assertEqual(c.CleanupFilename('foo/bar/baz'), '_B/baz')
-
- # Can use previously defined roots in cleanup
- c.AddRoot('_/nom/nom/nom', '_CANHAS')
- self.assertEqual(c.CleanupFilename('foo/nom/nom/nom/cheezburger'),
- '_CANHAS/cheezburger')
-
- # Verify roots starting with UNC paths or drive letters work, and that
- # more than one root can point to the same alt_name
- c.AddRoot('/usr/local/foo', '_FOO')
- c.AddRoot('D:\\my\\foo', '_FOO')
- self.assertEqual(c.CleanupFilename('/usr/local/foo/a/b'), '_FOO/a/b')
- self.assertEqual(c.CleanupFilename('D:\\my\\foo\\c\\d'), '_FOO/c/d')
-
- # Cannot specify a blank alt_name
- self.assertRaises(ValueError, c.AddRoot, 'some_dir', '')
-
- def testAddRule(self):
- """Test AddRule() and ClassifyFile()."""
- c = self.cov
-
- # With only the default rule, nothing gets kept
- self.assertEqual(c.ClassifyFile('_/src/'), {})
- self.assertEqual(c.ClassifyFile('_/src/a.c'), {})
-
- # Add rules to include a tree and set a default group
- c.AddRule('^_/src/', include=1, group='source')
- self.assertEqual(c.ClassifyFile('_/src/'),
- {'include': 1, 'group': 'source'})
- self.assertEqual(c.ClassifyFile('_/notsrc/'), {})
- self.assertEqual(c.ClassifyFile('_/src/a.c'),
- {'include': 1, 'group': 'source'})
-
- # Define some languages and groups
- c.AddRule('.*\\.(c|h)$', language='C')
- c.AddRule('.*\\.py$', language='Python')
- c.AddRule('.*_test\\.', group='test')
- self.assertEqual(c.ClassifyFile('_/src/a.c'),
- {'include': 1, 'group': 'source', 'language': 'C'})
- self.assertEqual(c.ClassifyFile('_/src/a.h'),
- {'include': 1, 'group': 'source', 'language': 'C'})
- self.assertEqual(c.ClassifyFile('_/src/a.cpp'),
- {'include': 1, 'group': 'source'})
- self.assertEqual(c.ClassifyFile('_/src/a_test.c'),
- {'include': 1, 'group': 'test', 'language': 'C'})
- self.assertEqual(c.ClassifyFile('_/src/test_a.c'),
- {'include': 1, 'group': 'source', 'language': 'C'})
- self.assertEqual(c.ClassifyFile('_/src/foo/bar.py'),
- {'include': 1, 'group': 'source', 'language': 'Python'})
- self.assertEqual(c.ClassifyFile('_/src/test.py'),
- {'include': 1, 'group': 'source', 'language': 'Python'})
-
- # Exclude a path (for example, anything in a build output dir)
- c.AddRule('.*/build/', include=0)
- # But add back in a dir which matched the above rule but isn't a build
- # output dir
- c.AddRule('_/src/tools/build/', include=1)
- self.assertEqual(c.ClassifyFile('_/src/build.c').get('include'), 1)
- self.assertEqual(c.ClassifyFile('_/src/build/').get('include'), 0)
- self.assertEqual(c.ClassifyFile('_/src/build/a.c').get('include'), 0)
- self.assertEqual(c.ClassifyFile('_/src/tools/build/').get('include'), 1)
- self.assertEqual(c.ClassifyFile('_/src/tools/build/t.c').get('include'), 1)
-
- def testGetCoveredFile(self):
- """Test GetCoveredFile()."""
- c = self.cov_minimal
-
- # Not currently any covered files
- self.assertEqual(c.GetCoveredFile('_/a.c'), None)
-
- # Add some files
- a_c = c.GetCoveredFile('_/a.c', add=True)
- b_c = c.GetCoveredFile('_/b.c##', add=True)
- self.assertEqual(a_c.filename, '_/a.c')
- self.assertEqual(a_c.attrs, {'include': 1, 'group': 'my', 'language': 'C'})
- self.assertEqual(b_c.filename, '_/b.c##')
- self.assertEqual(b_c.attrs,
- {'include': 1, 'group': 'my', 'language': 'C##'})
-
- # Specifying the same filename should return the existing object
- self.assertEqual(c.GetCoveredFile('_/a.c'), a_c)
- self.assertEqual(c.GetCoveredFile('_/a.c', add=True), a_c)
-
- # Filenames get cleaned on the way in, as do root paths
- self.assertEqual(c.GetCoveredFile('/src/a.c'), a_c)
- self.assertEqual(c.GetCoveredFile('c:\\source\\a.c'), a_c)
-
- # TODO: Make sure that covered files require language, group, and include
- # (since that checking is now done in GetCoveredFile() rather than
- # ClassifyFile())
-
- def testRemoveCoveredFile(self):
- """Test RemoveCoveredFile()."""
- # TODO: TEST ME!
-
- def testParseLcov(self):
- """Test ParseLcovData()."""
- c = self.cov_minimal
-
- c.ParseLcovData([
- '# Ignore unknown lines',
- # File we should include'
- 'SF:/src/a.c',
- 'DA:10,1',
- 'DA:11,0',
- 'DA:12,1 \n', # Trailing whitespace should get stripped
- 'end_of_record',
- # File we should ignore
- 'SF:/not_src/a.c',
- 'DA:20,1',
- 'end_of_record',
- # Same as first source file, but alternate root
- 'SF:c:\\source\\a.c',
- 'DA:30,1',
- 'end_of_record',
- # Ignore extra end of record
- 'end_of_record',
- # Ignore data points after end of record
- 'DA:40,1',
- # Instrumented but uncovered file
- 'SF:/src/b.c',
- 'DA:50,0',
- 'end_of_record',
- # Empty file (instrumented but no executable lines)
- 'SF:c:\\source\\c.c',
- 'end_of_record',
- ])
-
- # We should know about three files
- self.assertEqual(sorted(c.files), ['_/a.c', '_/b.c', '_/c.c'])
-
- # Check expected contents
- a_c = c.GetCoveredFile('_/a.c')
- self.assertEqual(a_c.lines, {10: 1, 11: 0, 12: 1, 30: 1})
- self.assertEqual(a_c.stats, {
- 'files_executable': 1,
- 'files_instrumented': 1,
- 'files_covered': 1,
- 'lines_instrumented': 4,
- 'lines_executable': 4,
- 'lines_covered': 3,
- })
- self.assertEqual(a_c.in_lcov, True)
-
- b_c = c.GetCoveredFile('_/b.c')
- self.assertEqual(b_c.lines, {50: 0})
- self.assertEqual(b_c.stats, {
- 'files_executable': 1,
- 'files_instrumented': 1,
- 'lines_instrumented': 1,
- 'lines_executable': 1,
- 'lines_covered': 0,
- })
- self.assertEqual(b_c.in_lcov, True)
-
- c_c = c.GetCoveredFile('_/c.c')
- self.assertEqual(c_c.lines, {})
- self.assertEqual(c_c.stats, {
- 'files_executable': 1,
- 'files_instrumented': 1,
- 'lines_instrumented': 0,
- 'lines_executable': 0,
- 'lines_covered': 0,
- })
- self.assertEqual(c_c.in_lcov, True)
-
- # TODO: Test that files are marked as instrumented if they come from lcov,
- # even if they don't have any instrumented lines. (and that in_lcov is set
- # for those files - probably should set that via some method rather than
- # directly...)
-
- def testGetStat(self):
- """Test GetStat() and PrintStat()."""
- c = self.cov
-
- # Add some stats, so there's something to report
- c.tree.stats_by_group = {
- 'all': {
- 'count_a': 10,
- 'count_b': 4,
- 'foo': 'bar',
- },
- 'tests': {
- 'count_a': 2,
- 'count_b': 5,
- 'baz': 'bob',
- },
- }
-
- # Test missing stats and groups
- self.assertRaises(croc.CrocStatError, c.GetStat, 'nosuch')
- self.assertRaises(croc.CrocStatError, c.GetStat, 'baz')
- self.assertRaises(croc.CrocStatError, c.GetStat, 'foo', group='tests')
- self.assertRaises(croc.CrocStatError, c.GetStat, 'foo', group='nosuch')
-
- # Test returning defaults
- self.assertEqual(c.GetStat('nosuch', default=13), 13)
- self.assertEqual(c.GetStat('baz', default='aaa'), 'aaa')
- self.assertEqual(c.GetStat('foo', group='tests', default=0), 0)
- self.assertEqual(c.GetStat('foo', group='nosuch', default=''), '')
-
- # Test getting stats
- self.assertEqual(c.GetStat('count_a'), 10)
- self.assertEqual(c.GetStat('count_a', group='tests'), 2)
- self.assertEqual(c.GetStat('foo', default='baz'), 'bar')
-
- # Test stat math (eval)
- self.assertEqual(c.GetStat('count_a - count_b'), 6)
- self.assertEqual(c.GetStat('100.0 * count_a / count_b', group='tests'),
- 40.0)
- # Should catch eval errors
- self.assertRaises(croc.CrocStatError, c.GetStat, '100 / 0')
- self.assertRaises(croc.CrocStatError, c.GetStat, 'count_a -')
-
- # Test nested stats via S()
- self.assertEqual(c.GetStat('count_a - S("count_a", group="tests")'), 8)
- self.assertRaises(croc.CrocStatError, c.GetStat, 'S()')
- self.assertRaises(croc.CrocStatError, c.GetStat, 'S("nosuch")')
-
- # Test PrintStat()
- # We won't see the first print, but at least verify it doesn't assert
- c.PrintStat('count_a', format='(test to stdout: %s)')
- # Send subsequent prints to a file
- f = StringIO.StringIO()
- c.PrintStat('count_b', outfile=f)
- # Test specifying output format
- c.PrintStat('count_a', format='Count A = %05d', outfile=f)
- # Test specifing additional keyword args
- c.PrintStat('count_a', group='tests', outfile=f)
- c.PrintStat('nosuch', default=42, outfile=f)
- self.assertEqual(f.getvalue(), ("""\
-GetStat('count_b') = 4
-Count A = 00010
-GetStat('count_a') = 2
-GetStat('nosuch') = 42
-"""))
- f.close()
-
- def testAddConfigEmpty(self):
- """Test AddConfig() with empty config."""
- c = self.cov
- # Most minimal config is an empty dict; should do nothing
- c.AddConfig('{} # And we ignore comments')
-
- def testAddConfig(self):
- """Test AddConfig()."""
- c = self.cov
- lcov_queue = []
- addfiles_queue = []
-
- c.AddConfig("""{
- 'roots' : [
- {'root' : '/foo'},
- {'root' : '/bar', 'altname' : 'BAR'},
- ],
- 'rules' : [
- {'regexp' : '^_/', 'group' : 'apple'},
- {'regexp' : 're2', 'include' : 1, 'language' : 'elvish'},
- ],
- 'lcov_files' : ['a.lcov', 'b.lcov'],
- 'add_files' : ['/src', 'BAR/doo'],
- 'print_stats' : [
- {'stat' : 'count_a'},
- {'stat' : 'count_b', 'group' : 'tests'},
- ],
- 'extra_key' : 'is ignored',
- }""", lcov_queue=lcov_queue, addfiles_queue=addfiles_queue)
-
- self.assertEqual(lcov_queue, ['a.lcov', 'b.lcov'])
- self.assertEqual(addfiles_queue, ['/src', 'BAR/doo'])
- self.assertEqual(c.root_dirs, [['/foo', '_'], ['/bar', 'BAR']])
- self.assertEqual(c.print_stats, [
- {'stat': 'count_a'},
- {'stat': 'count_b', 'group': 'tests'},
- ])
- # Convert compiled re's back to patterns for comparison
- rules = [[r[0].pattern] + r[1:] for r in c.rules]
- self.assertEqual(rules, [
- ['^_/', {'group': 'apple'}],
- ['re2', {'include': 1, 'language': 'elvish'}],
- ])
-
- def testAddFilesSimple(self):
- """Test AddFiles() simple call."""
- c = self.cov_minimal
- c.add_files_walk = self.MockWalk
- c.scan_file = self.MockScanFile
-
- c.AddFiles('/a/b/c')
- self.assertEqual(self.mock_walk_calls, ['/a/b/c'])
- self.assertEqual(self.mock_scan_calls, [])
- self.assertEqual(c.files, {})
-
- def testAddFilesRootMap(self):
- """Test AddFiles() with root mappings."""
- c = self.cov_minimal
- c.add_files_walk = self.MockWalk
- c.scan_file = self.MockScanFile
-
- c.AddRoot('_/subdir', 'SUBDIR')
-
- # AddFiles() should replace the 'SUBDIR' alt_name, then match both
- # possible roots for the '_' alt_name.
- c.AddFiles('SUBDIR/foo')
- self.assertEqual(self.mock_walk_calls,
- ['/src/subdir/foo', 'c:/source/subdir/foo'])
- self.assertEqual(self.mock_scan_calls, [])
- self.assertEqual(c.files, {})
-
- def testAddFilesNonEmpty(self):
- """Test AddFiles() where files are returned."""
-
- c = self.cov_minimal
- c.add_files_walk = self.MockWalk
- c.scan_file = self.MockScanFile
-
- # Add a rule to exclude a subdir
- c.AddRule('^_/proj1/excluded/', include=0)
-
- # Add a rule to exclude adding some fiels
- c.AddRule('.*noscan.c$', add_if_missing=0)
-
- # Set data for mock walk and scan
- self.mock_walk_return = [
- [
- '/src/proj1',
- ['excluded', 'subdir'],
- ['a.c', 'no.f', 'yes.c', 'noexe.c', 'bob_noscan.c'],
- ],
- [
- '/src/proj1/subdir',
- [],
- ['cherry.c'],
- ],
- ]
-
- # Add a file with no executable lines; it should be scanned but not added
- self.mock_scan_return['/src/proj1/noexe.c'] = []
-
- c.AddFiles('/src/proj1')
-
- self.assertEqual(self.mock_walk_calls, ['/src/proj1'])
- self.assertEqual(self.mock_scan_calls, [
- ['/src/proj1/a.c', 'C'],
- ['/src/proj1/yes.c', 'C'],
- ['/src/proj1/noexe.c', 'C'],
- ['/src/proj1/subdir/cherry.c', 'C'],
- ])
-
- # Include files from the main dir and subdir
- self.assertEqual(sorted(c.files), [
- '_/proj1/a.c',
- '_/proj1/subdir/cherry.c',
- '_/proj1/yes.c'])
-
- # Excluded dir should have been pruned from the mock walk data dirnames.
- # In the real os.walk() call this prunes the walk.
- self.assertEqual(self.mock_walk_return[0][1], ['subdir'])
-
-
- def testEmptyTreeStats(self):
- """Make sure we don't choke when absolutely nothing happened.
-
- How we might hit this: bot compile error."""
- c = self.cov_minimal
- t = c.tree
- t.stats_by_group['all'].AddDefaults()
- self.assertEqual(t.stats_by_group, {
- 'all': { 'files_covered': 0,
- 'files_instrumented': 0,
- 'files_executable': 0,
- 'lines_covered': 0,
- 'lines_instrumented': 0,
- 'lines_executable': 0 }})
-
- def testUpdateTreeStats(self):
- """Test UpdateTreeStats()."""
-
- c = self.cov_minimal
- c.AddRule('.*_test', group='test')
-
- # Fill the files list
- c.ParseLcovData([
- 'SF:/src/a.c',
- 'DA:10,1', 'DA:11,1', 'DA:20,0',
- 'end_of_record',
- 'SF:/src/a_test.c',
- 'DA:10,1', 'DA:11,1', 'DA:12,1',
- 'end_of_record',
- 'SF:/src/foo/b.c',
- 'DA:10,1', 'DA:11,1', 'DA:20,0', 'DA:21,0', 'DA:30,0',
- 'end_of_record',
- 'SF:/src/foo/b_test.c',
- 'DA:20,0', 'DA:21,0', 'DA:22,0',
- 'end_of_record',
- ])
- c.UpdateTreeStats()
-
- t = c.tree
- self.assertEqual(t.dirpath, '')
- self.assertEqual(sorted(t.files), [])
- self.assertEqual(sorted(t.subdirs), ['_'])
- self.assertEqual(t.stats_by_group, {
- 'all': {
- 'files_covered': 3,
- 'files_executable': 4,
- 'lines_executable': 14,
- 'lines_covered': 7,
- 'lines_instrumented': 14,
- 'files_instrumented': 4,
- },
- 'my': {
- 'files_covered': 2,
- 'files_executable': 2,
- 'lines_executable': 8,
- 'lines_covered': 4,
- 'lines_instrumented': 8,
- 'files_instrumented': 2,
- },
- 'test': {
- 'files_covered': 1,
- 'files_executable': 2,
- 'lines_executable': 6,
- 'lines_covered': 3,
- 'lines_instrumented': 6,
- 'files_instrumented': 2,
- },
- })
-
- t = t.subdirs['_']
- self.assertEqual(t.dirpath, '_')
- self.assertEqual(sorted(t.files), ['a.c', 'a_test.c'])
- self.assertEqual(sorted(t.subdirs), ['foo'])
- self.assertEqual(t.stats_by_group, {
- 'all': {
- 'files_covered': 3,
- 'files_executable': 4,
- 'lines_executable': 14,
- 'lines_covered': 7,
- 'lines_instrumented': 14,
- 'files_instrumented': 4,
- },
- 'my': {
- 'files_covered': 2,
- 'files_executable': 2,
- 'lines_executable': 8,
- 'lines_covered': 4,
- 'lines_instrumented': 8,
- 'files_instrumented': 2,
- },
- 'test': {
- 'files_covered': 1,
- 'files_executable': 2,
- 'lines_executable': 6,
- 'lines_covered': 3,
- 'lines_instrumented': 6,
- 'files_instrumented': 2,
- },
- })
-
- t = t.subdirs['foo']
- self.assertEqual(t.dirpath, '_/foo')
- self.assertEqual(sorted(t.files), ['b.c', 'b_test.c'])
- self.assertEqual(sorted(t.subdirs), [])
- self.assertEqual(t.stats_by_group, {
- 'test': {
- 'files_executable': 1,
- 'files_instrumented': 1,
- 'lines_executable': 3,
- 'lines_instrumented': 3,
- 'lines_covered': 0,
- },
- 'all': {
- 'files_covered': 1,
- 'files_executable': 2,
- 'lines_executable': 8,
- 'lines_covered': 2,
- 'lines_instrumented': 8,
- 'files_instrumented': 2,
- },
- 'my': {
- 'files_covered': 1,
- 'files_executable': 1,
- 'lines_executable': 5,
- 'lines_covered': 2,
- 'lines_instrumented': 5,
- 'files_instrumented': 1,
- }
- })
-
- # TODO: test: less important, since these are thin wrappers around other
- # tested methods.
- # ParseConfig()
- # ParseLcovFile()
- # PrintTree()
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/chromium/tools/code_coverage/example.croc b/chromium/tools/code_coverage/example.croc
deleted file mode 100644
index 4e8ca2bc888..00000000000
--- a/chromium/tools/code_coverage/example.croc
+++ /dev/null
@@ -1,197 +0,0 @@
-# -*- python -*-
-
-# Copyright (c) 2012 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.
-
-# Example configuration file for Croc
-
-# Basic formatting rules:
-# * It looks like JSON.
-# * It's really python.
-# * Dictionaries are wrapped in {}. Order does not matter. Entries are of
-# the form:
-# 'key':value,
-# Note the trailing comma, which will help save you from python's built-in
-# string concatenation.
-# * Lists are wrapped in []. Order does matter. Entries should be followed
-# with a trailing comma, which will help save you from python's built-in
-# string concatenation.
-# * Comments start with # and extend to end of line.
-# * Strings are wrapped in ''. Backslashes must be escaped ('foo\\bar', not
-# 'foo\bar') - this is particularly important in rule regular expressions.
-
-
-# What follows is the main configuration dictionary.
-{
- # List of root directories, applied in order.
- #
- # Typically, coverage data files contain absolute paths to the sources.
- # What you care about is usually a relative path from the top of your source
- # tree (referred to here as a 'source root') to the sources.
- #
- # Roots may also be specified on the command line via the --root option.
- # Roots specified by --root are applied before those specified in config
- # files.
- 'roots' : [
- # Each entry is a dict.
- # * It must contain a 'root' entry, which is the start of a path.
- # * Root entries may be absolute paths
- # * Root entries starting with './' or '../' are relative paths, and
- # are taken relative to the current directory where you run croc.
- # * Root entries may start with previously defined altnames.
- # * Use '/' as a path separator, even on Windows.
- # * It may contain a 'altname' entry. If the root matches the start of
- # a filename, that start is replaced with the 'altname', or with '_'
- # if no default is specified.
- # * Multiple root entries may share the same altname. This is commonly
- # used when combining LCOV files from different platforms into one
- # coverage report, when each platform checks out source code into a
- # different source tree.
- {'root' : 'c:/P4/EarthHammer'},
- {'root' : 'd:/pulse/recipes/330137642/base'},
- {'root' : '/Volumes/BuildData/PulseData/data/recipes/330137640/base'},
- {'root' : '/usr/local/google/builder/.pulse-agent/data/recipes/330137641/base'},
-
- # Sub-paths we specifically care about and want to call out. Note that
- # these are relative to the default '_' altname.
- {
- 'root' : '_/googleclient/third_party/software_construction_toolkit/files',
- 'altname' : 'SCT',
- },
- {
- 'root' : '_/googleclient/tools/hammer',
- 'altname' : 'HAMMER',
- },
- ],
-
- # List of rules, applied in order.
- 'rules' : [
- # Each rule is a dict.
- # * It must contaihn a 'regexp' entry. Filenames which match this
- # regular expression (after applying mappings from 'roots') are
- # affected by the rule.
- #
- # * Other entries in the dict are attributes to apply to matching files.
- #
- # Allowed attributes:
- #
- # 'include' : If 1, the file will be included in coverage reports. If 0,
- # it won't be included in coverage reports.
- #
- # 'group' : Name of the group the file belongs to. The most common
- # group names are 'source' and 'test'. Files must belong to
- # a group to be included in coverage reports.
- #
- # 'language' : Programming language for the file. The most common
- # languages are 'C', 'C++', 'python', 'ObjC', 'ObjC++'.
- # Files must have a language to be included in coverage
- # reports.
- #
- # 'add_if_missing' : If 1, and the file was not referenced by any LCOV
- # files, it will be be scanned for executable lines
- # and added to the coverage report. If 0, if the
- # file is not referenced by any LCOV files, it will
- # simply be ignored and not present in coverage
- # reports.
-
- # Files/paths to include
- {
- 'regexp' : '^(SCT|HAMMER)/',
- 'include' : 1,
- 'add_if_missing': 1,
- },
- {
- 'regexp' : '.*/(\\.svn|\\.hg)/',
- 'include' : 0,
- },
-
- # Groups
- {
- 'regexp' : '',
- 'group' : 'source',
- },
- {
- 'regexp' : '.*_(test|test_mac|unittest)\\.',
- 'group' : 'test',
- },
-
- # Languages
- {
- 'regexp' : '.*\\.py$',
- 'language' : 'python',
- },
- ],
-
- # List of paths to add source from.
- #
- # Each entry is a path. It may be a local path, or one relative to a root
- # altname (see 'roots' above).
- #
- # If more than one root's altname matches the start of this path, all matches
- # will be attempted; matches where the candidate directory doesn't exist will
- # be ignored. For example, if you're combining data from multiple platforms'
- # LCOV files, you probably defined at least one root per LCOV, but only have
- # one copy of the source on your local platform. That's fine; Croc will use
- # the source it can find and not worry about the source it can't.
- #
- # Source files must be added via 'add_files' to generate line-by-line HTML
- # output (via the --html option) and/or to scan for missing executable lines
- # (if 'add_if_missing' is 1).
- 'add_files' : [
- 'SCT',
- 'HAMMER',
- ],
-
- # Statistics to print.
- #
- 'print_stats' : [
- # Each entry is a dict.
- #
- # It must have a 'stat' entry, which is the statistic to print. This may
- # be one of the following stats:
- #
- # * files_executable
- # * files_instrumented
- # * files_covered
- # * lines_executable
- # * lines_instrumented
- # * lines_covered
- #
- # or an expression using those stats.
- #
- # It may have a 'format' entry, which is a python formatting string (very
- # printf-like) for the statistic.
- #
- # It may have a 'group' entry. If this is specified, only files from the
- # matching group will be included in the statistic. If not specified, the
- # group defaults to 'all', which means all groups.
- {
- 'stat' : 'files_executable',
- 'format' : '*RESULT FilesKnown: files_executable= %d files',
- },
- {
- 'stat' : 'files_instrumented',
- 'format' : '*RESULT FilesInstrumented: files_instrumented= %d files',
- },
- {
- 'stat' : '100.0 * files_instrumented / files_executable',
- 'format' : '*RESULT FilesInstrumentedPercent: files_instrumented_percent= %g',
- },
- {
- 'stat' : 'lines_instrumented',
- 'format' : '*RESULT LinesInstrumented: lines_instrumented= %d lines',
- },
- {
- 'stat' : 'lines_covered',
- 'format' : '*RESULT LinesCoveredSource: lines_covered_source= %d lines',
- 'group' : 'source',
- },
- {
- 'stat' : 'lines_covered',
- 'format' : '*RESULT LinesCoveredTest: lines_covered_test= %d lines',
- 'group' : 'test',
- },
- ],
-
-}
diff --git a/chromium/tools/code_coverage/third_party/README.chromium b/chromium/tools/code_coverage/third_party/README.chromium
deleted file mode 100644
index a4925525c89..00000000000
--- a/chromium/tools/code_coverage/third_party/README.chromium
+++ /dev/null
@@ -1,11 +0,0 @@
-Name: SortTable
-Short Name: sorttable.js
-URL: http://www.kryogenix.org/code/browser/sorttable/
-Version: 2
-Date: 7th April 2007
-License: Licenced as X11: http://www.kryogenix.org/code/browser/licence.html
-
-Description:
-Add <script src="sorttable.js"></script> to your HTML
-Add class="sortable" to any table you'd like to make sortable
-Click on the headers to sort
diff --git a/chromium/tools/code_coverage/third_party/sorttable.js b/chromium/tools/code_coverage/third_party/sorttable.js
deleted file mode 100644
index 16ef551497b..00000000000
--- a/chromium/tools/code_coverage/third_party/sorttable.js
+++ /dev/null
@@ -1,494 +0,0 @@
-/*
- SortTable
- version 2
- 7th April 2007
- Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/
-
- Instructions:
- Download this file
- Add <script src="sorttable.js"></script> to your HTML
- Add class="sortable" to any table you'd like to make sortable
- Click on the headers to sort
-
- Thanks to many, many people for contributions and suggestions.
- Licenced as X11: http://www.kryogenix.org/code/browser/licence.html
- This basically means: do what you want with it.
-*/
-
-
-var stIsIE = /*@cc_on!@*/false;
-
-sorttable = {
- init: function() {
- // quit if this function has already been called
- if (arguments.callee.done) return;
- // flag this function so we don't do the same thing twice
- arguments.callee.done = true;
- // kill the timer
- if (_timer) clearInterval(_timer);
-
- if (!document.createElement || !document.getElementsByTagName) return;
-
- sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/;
-
- forEach(document.getElementsByTagName('table'), function(table) {
- if (table.className.search(/\bsortable\b/) != -1) {
- sorttable.makeSortable(table);
- }
- });
-
- },
-
- makeSortable: function(table) {
- if (table.getElementsByTagName('thead').length == 0) {
- // table doesn't have a tHead. Since it should have, create one and
- // put the first table row in it.
- the = document.createElement('thead');
- the.appendChild(table.rows[0]);
- table.insertBefore(the,table.firstChild);
- }
- // Safari doesn't support table.tHead, sigh
- if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0];
-
- if (table.tHead.rows.length != 1) return; // can't cope with two header rows
-
- // Sorttable v1 put rows with a class of "sortbottom" at the bottom (as
- // "total" rows, for example). This is B&R, since what you're supposed
- // to do is put them in a tfoot. So, if there are sortbottom rows,
- // for backwards compatibility, move them to tfoot (creating it if needed).
- sortbottomrows = [];
- for (var i=0; i<table.rows.length; i++) {
- if (table.rows[i].className.search(/\bsortbottom\b/) != -1) {
- sortbottomrows[sortbottomrows.length] = table.rows[i];
- }
- }
- if (sortbottomrows) {
- if (table.tFoot == null) {
- // table doesn't have a tfoot. Create one.
- tfo = document.createElement('tfoot');
- table.appendChild(tfo);
- }
- for (var i=0; i<sortbottomrows.length; i++) {
- tfo.appendChild(sortbottomrows[i]);
- }
- delete sortbottomrows;
- }
-
- // work through each column and calculate its type
- headrow = table.tHead.rows[0].cells;
- for (var i=0; i<headrow.length; i++) {
- // manually override the type with a sorttable_type attribute
- if (!headrow[i].className.match(/\bsorttable_nosort\b/)) { // skip this col
- mtch = headrow[i].className.match(/\bsorttable_([a-z0-9]+)\b/);
- if (mtch) { override = mtch[1]; }
- if (mtch && typeof sorttable["sort_"+override] == 'function') {
- headrow[i].sorttable_sortfunction = sorttable["sort_"+override];
- } else {
- headrow[i].sorttable_sortfunction = sorttable.guessType(table,i);
- }
- // make it clickable to sort
- headrow[i].sorttable_columnindex = i;
- headrow[i].sorttable_tbody = table.tBodies[0];
- dean_addEvent(headrow[i],"click", function(e) {
-
- if (this.className.search(/\bsorttable_sorted\b/) != -1) {
- // if we're already sorted by this column, just
- // reverse the table, which is quicker
- sorttable.reverse(this.sorttable_tbody);
- this.className = this.className.replace('sorttable_sorted',
- 'sorttable_sorted_reverse');
- this.removeChild(document.getElementById('sorttable_sortfwdind'));
- sortrevind = document.createElement('span');
- sortrevind.id = "sorttable_sortrevind";
- sortrevind.innerHTML = stIsIE ? '&nbsp<font face="webdings">5</font>' : '&nbsp;&#x25B4;';
- this.appendChild(sortrevind);
- return;
- }
- if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) {
- // if we're already sorted by this column in reverse, just
- // re-reverse the table, which is quicker
- sorttable.reverse(this.sorttable_tbody);
- this.className = this.className.replace('sorttable_sorted_reverse',
- 'sorttable_sorted');
- this.removeChild(document.getElementById('sorttable_sortrevind'));
- sortfwdind = document.createElement('span');
- sortfwdind.id = "sorttable_sortfwdind";
- sortfwdind.innerHTML = stIsIE ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
- this.appendChild(sortfwdind);
- return;
- }
-
- // remove sorttable_sorted classes
- theadrow = this.parentNode;
- forEach(theadrow.childNodes, function(cell) {
- if (cell.nodeType == 1) { // an element
- cell.className = cell.className.replace('sorttable_sorted_reverse','');
- cell.className = cell.className.replace('sorttable_sorted','');
- }
- });
- sortfwdind = document.getElementById('sorttable_sortfwdind');
- if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); }
- sortrevind = document.getElementById('sorttable_sortrevind');
- if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); }
-
- this.className += ' sorttable_sorted';
- sortfwdind = document.createElement('span');
- sortfwdind.id = "sorttable_sortfwdind";
- sortfwdind.innerHTML = stIsIE ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
- this.appendChild(sortfwdind);
-
- // build an array to sort. This is a Schwartzian transform thing,
- // i.e., we "decorate" each row with the actual sort key,
- // sort based on the sort keys, and then put the rows back in order
- // which is a lot faster because you only do getInnerText once per row
- row_array = [];
- col = this.sorttable_columnindex;
- rows = this.sorttable_tbody.rows;
- for (var j=0; j<rows.length; j++) {
- row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]];
- }
- /* If you want a stable sort, uncomment the following line */
- //sorttable.shaker_sort(row_array, this.sorttable_sortfunction);
- /* and comment out this one */
- row_array.sort(this.sorttable_sortfunction);
-
- tb = this.sorttable_tbody;
- for (var j=0; j<row_array.length; j++) {
- tb.appendChild(row_array[j][1]);
- }
-
- delete row_array;
- });
- }
- }
- },
-
- guessType: function(table, column) {
- // guess the type of a column based on its first non-blank row
- sortfn = sorttable.sort_alpha;
- for (var i=0; i<table.tBodies[0].rows.length; i++) {
- text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]);
- if (text != '') {
- if (text.match(/^-?[£$¤]?[\d,.]+%?$/)) {
- return sorttable.sort_numeric;
- }
- // check for a date: dd/mm/yyyy or dd/mm/yy
- // can have / or . or - as separator
- // can be mm/dd as well
- possdate = text.match(sorttable.DATE_RE)
- if (possdate) {
- // looks like a date
- first = parseInt(possdate[1]);
- second = parseInt(possdate[2]);
- if (first > 12) {
- // definitely dd/mm
- return sorttable.sort_ddmm;
- } else if (second > 12) {
- return sorttable.sort_mmdd;
- } else {
- // looks like a date, but we can't tell which, so assume
- // that it's dd/mm (English imperialism!) and keep looking
- sortfn = sorttable.sort_ddmm;
- }
- }
- }
- }
- return sortfn;
- },
-
- getInnerText: function(node) {
- // gets the text we want to use for sorting for a cell.
- // strips leading and trailing whitespace.
- // this is *not* a generic getInnerText function; it's special to sorttable.
- // for example, you can override the cell text with a customkey attribute.
- // it also gets .value for <input> fields.
-
- if (!node) return "";
-
- hasInputs = (typeof node.getElementsByTagName == 'function') &&
- node.getElementsByTagName('input').length;
-
- if (node.getAttribute("sorttable_customkey") != null) {
- return node.getAttribute("sorttable_customkey");
- }
- else if (typeof node.textContent != 'undefined' && !hasInputs) {
- return node.textContent.replace(/^\s+|\s+$/g, '');
- }
- else if (typeof node.innerText != 'undefined' && !hasInputs) {
- return node.innerText.replace(/^\s+|\s+$/g, '');
- }
- else if (typeof node.text != 'undefined' && !hasInputs) {
- return node.text.replace(/^\s+|\s+$/g, '');
- }
- else {
- switch (node.nodeType) {
- case 3:
- if (node.nodeName.toLowerCase() == 'input') {
- return node.value.replace(/^\s+|\s+$/g, '');
- }
- case 4:
- return node.nodeValue.replace(/^\s+|\s+$/g, '');
- break;
- case 1:
- case 11:
- var innerText = '';
- for (var i = 0; i < node.childNodes.length; i++) {
- innerText += sorttable.getInnerText(node.childNodes[i]);
- }
- return innerText.replace(/^\s+|\s+$/g, '');
- break;
- default:
- return '';
- }
- }
- },
-
- reverse: function(tbody) {
- // reverse the rows in a tbody
- newrows = [];
- for (var i=0; i<tbody.rows.length; i++) {
- newrows[newrows.length] = tbody.rows[i];
- }
- for (var i=newrows.length-1; i>=0; i--) {
- tbody.appendChild(newrows[i]);
- }
- delete newrows;
- },
-
- /* sort functions
- each sort function takes two parameters, a and b
- you are comparing a[0] and b[0] */
- sort_numeric: function(a,b) {
- aa = parseFloat(a[0].replace(/[^0-9.-]/g,''));
- if (isNaN(aa)) aa = 0;
- bb = parseFloat(b[0].replace(/[^0-9.-]/g,''));
- if (isNaN(bb)) bb = 0;
- return aa-bb;
- },
- sort_alpha: function(a,b) {
- if (a[0]==b[0]) return 0;
- if (a[0]<b[0]) return -1;
- return 1;
- },
- sort_ddmm: function(a,b) {
- mtch = a[0].match(sorttable.DATE_RE);
- y = mtch[3]; m = mtch[2]; d = mtch[1];
- if (m.length == 1) m = '0'+m;
- if (d.length == 1) d = '0'+d;
- dt1 = y+m+d;
- mtch = b[0].match(sorttable.DATE_RE);
- y = mtch[3]; m = mtch[2]; d = mtch[1];
- if (m.length == 1) m = '0'+m;
- if (d.length == 1) d = '0'+d;
- dt2 = y+m+d;
- if (dt1==dt2) return 0;
- if (dt1<dt2) return -1;
- return 1;
- },
- sort_mmdd: function(a,b) {
- mtch = a[0].match(sorttable.DATE_RE);
- y = mtch[3]; d = mtch[2]; m = mtch[1];
- if (m.length == 1) m = '0'+m;
- if (d.length == 1) d = '0'+d;
- dt1 = y+m+d;
- mtch = b[0].match(sorttable.DATE_RE);
- y = mtch[3]; d = mtch[2]; m = mtch[1];
- if (m.length == 1) m = '0'+m;
- if (d.length == 1) d = '0'+d;
- dt2 = y+m+d;
- if (dt1==dt2) return 0;
- if (dt1<dt2) return -1;
- return 1;
- },
-
- shaker_sort: function(list, comp_func) {
- // A stable sort function to allow multi-level sorting of data
- // see: http://en.wikipedia.org/wiki/Cocktail_sort
- // thanks to Joseph Nahmias
- var b = 0;
- var t = list.length - 1;
- var swap = true;
-
- while(swap) {
- swap = false;
- for(var i = b; i < t; ++i) {
- if ( comp_func(list[i], list[i+1]) > 0 ) {
- var q = list[i]; list[i] = list[i+1]; list[i+1] = q;
- swap = true;
- }
- } // for
- t--;
-
- if (!swap) break;
-
- for(var i = t; i > b; --i) {
- if ( comp_func(list[i], list[i-1]) < 0 ) {
- var q = list[i]; list[i] = list[i-1]; list[i-1] = q;
- swap = true;
- }
- } // for
- b++;
-
- } // while(swap)
- }
-}
-
-/* ******************************************************************
- Supporting functions: bundled here to avoid depending on a library
- ****************************************************************** */
-
-// Dean Edwards/Matthias Miller/John Resig
-
-/* for Mozilla/Opera9 */
-if (document.addEventListener) {
- document.addEventListener("DOMContentLoaded", sorttable.init, false);
-}
-
-/* for Internet Explorer */
-/*@cc_on @*/
-/*@if (@_win32)
- document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
- var script = document.getElementById("__ie_onload");
- script.onreadystatechange = function() {
- if (this.readyState == "complete") {
- sorttable.init(); // call the onload handler
- }
- };
-/*@end @*/
-
-/* for Safari */
-if (/WebKit/i.test(navigator.userAgent)) { // sniff
- var _timer = setInterval(function() {
- if (/loaded|complete/.test(document.readyState)) {
- sorttable.init(); // call the onload handler
- }
- }, 10);
-}
-
-/* for other browsers */
-window.onload = sorttable.init;
-
-// written by Dean Edwards, 2005
-// with input from Tino Zijdel, Matthias Miller, Diego Perini
-
-// http://dean.edwards.name/weblog/2005/10/add-event/
-
-function dean_addEvent(element, type, handler) {
- if (element.addEventListener) {
- element.addEventListener(type, handler, false);
- } else {
- // assign each event handler a unique ID
- if (!handler.$$guid) handler.$$guid = dean_addEvent.guid++;
- // create a hash table of event types for the element
- if (!element.events) element.events = {};
- // create a hash table of event handlers for each element/event pair
- var handlers = element.events[type];
- if (!handlers) {
- handlers = element.events[type] = {};
- // store the existing event handler (if there is one)
- if (element["on" + type]) {
- handlers[0] = element["on" + type];
- }
- }
- // store the event handler in the hash table
- handlers[handler.$$guid] = handler;
- // assign a global event handler to do all the work
- element["on" + type] = handleEvent;
- }
-};
-// a counter used to create unique IDs
-dean_addEvent.guid = 1;
-
-function removeEvent(element, type, handler) {
- if (element.removeEventListener) {
- element.removeEventListener(type, handler, false);
- } else {
- // delete the event handler from the hash table
- if (element.events && element.events[type]) {
- delete element.events[type][handler.$$guid];
- }
- }
-};
-
-function handleEvent(event) {
- var returnValue = true;
- // grab the event object (IE uses a global event object)
- event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
- // get a reference to the hash table of event handlers
- var handlers = this.events[event.type];
- // execute each event handler
- for (var i in handlers) {
- this.$$handleEvent = handlers[i];
- if (this.$$handleEvent(event) === false) {
- returnValue = false;
- }
- }
- return returnValue;
-};
-
-function fixEvent(event) {
- // add W3C standard event methods
- event.preventDefault = fixEvent.preventDefault;
- event.stopPropagation = fixEvent.stopPropagation;
- return event;
-};
-fixEvent.preventDefault = function() {
- this.returnValue = false;
-};
-fixEvent.stopPropagation = function() {
- this.cancelBubble = true;
-}
-
-// Dean's forEach: http://dean.edwards.name/base/forEach.js
-/*
- forEach, version 1.0
- Copyright 2006, Dean Edwards
- License: http://www.opensource.org/licenses/mit-license.php
-*/
-
-// array-like enumeration
-if (!Array.forEach) { // mozilla already supports this
- Array.forEach = function(array, block, context) {
- for (var i = 0; i < array.length; i++) {
- block.call(context, array[i], i, array);
- }
- };
-}
-
-// generic enumeration
-Function.prototype.forEach = function(object, block, context) {
- for (var key in object) {
- if (typeof this.prototype[key] == "undefined") {
- block.call(context, object[key], key, object);
- }
- }
-};
-
-// character enumeration
-String.forEach = function(string, block, context) {
- Array.forEach(string.split(""), function(chr, index) {
- block.call(context, chr, index, string);
- });
-};
-
-// globally resolve forEach enumeration
-var forEach = function(object, block, context) {
- if (object) {
- var resolve = Object; // default
- if (object instanceof Function) {
- // functions have a "length" property
- resolve = Function;
- } else if (object.forEach instanceof Function) {
- // the object implements a custom forEach method so use that
- object.forEach(block, context);
- return;
- } else if (typeof object == "string") {
- // the object is a string
- resolve = String;
- } else if (typeof object.length == "number") {
- // the object is array-like
- resolve = Array;
- }
- resolve.forEach(object, block, context);
- }
-};
diff --git a/chromium/tools/compile_test/compile_test.py b/chromium/tools/compile_test/compile_test.py
deleted file mode 100755
index bbda4abfe54..00000000000
--- a/chromium/tools/compile_test/compile_test.py
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 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.
-
-"""
-Tries to compile given code, produces different output depending on success.
-
-This is similar to checks done by ./configure scripts.
-"""
-
-
-import optparse
-import os
-import shutil
-import subprocess
-import sys
-import tempfile
-
-
-def DoMain(argv):
- parser = optparse.OptionParser()
- parser.add_option('--code')
- parser.add_option('--run-linker', action='store_true')
- parser.add_option('--on-success', default='')
- parser.add_option('--on-failure', default='')
-
- options, args = parser.parse_args(argv)
-
- if not options.code:
- parser.error('Missing required --code switch.')
-
- # The environment variable might expand to a string with spaces,
- # e.g. "ccache g++". Convert it to a list suitable for argv.
- cxx = os.environ.get('CXX', 'g++').split()
-
- tmpdir = tempfile.mkdtemp()
- try:
- cxx_path = os.path.join(tmpdir, 'test.cc')
- with open(cxx_path, 'w') as f:
- f.write(options.code.decode('string-escape'))
-
- o_path = os.path.join(tmpdir, 'test.o')
-
- cxx_cmdline = cxx + [cxx_path, '-o', o_path]
- if not options.run_linker:
- cxx_cmdline.append('-c')
- # Pass remaining arguments to the compiler.
- cxx_cmdline += args
- cxx_popen = subprocess.Popen(cxx_cmdline,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- cxx_stdout, cxx_stderr = cxx_popen.communicate()
- if cxx_popen.returncode == 0:
- print options.on_success
- else:
- print options.on_failure
- finally:
- shutil.rmtree(tmpdir)
-
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(DoMain(sys.argv[1:]))
diff --git a/chromium/tools/coverity/coverity.py b/chromium/tools/coverity/coverity.py
deleted file mode 100755
index 6fed7ca8cfa..00000000000
--- a/chromium/tools/coverity/coverity.py
+++ /dev/null
@@ -1,308 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""
-Runs Coverity Prevent on a build of Chromium.
-
-This script should be run in a Visual Studio Command Prompt, so that the
-INCLUDE, LIB, and PATH environment variables are set properly for Visual
-Studio.
-
-Usage examples:
- coverity.py
- coverity.py --dry-run
- coverity.py --target=debug
- %comspec% /c ""C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat"
- x86 && C:\Python24\python.exe C:\coverity.py"
-
-For a full list of options, pass the '--help' switch.
-
-See http://support.microsoft.com/kb/308569 for running this script as a
-Scheduled Task on Windows XP.
-
-"""
-
-import optparse
-import os
-import os.path
-import shutil
-import subprocess
-import sys
-import time
-
-# These constants provide default values, but are exposed as command-line
-# flags. See the --help for more info. Note that for historical reasons
-# (the script started out as Windows-only and has legacy usages which pre-date
-# these switches), the constants are all tuned for Windows.
-# Usage of this script on Linux pretty much requires explicit
-# --source-dir, --coverity-bin-dir, --coverity-intermediate-dir, and
-# --coverity-target command line flags.
-
-CHROMIUM_SOURCE_DIR = 'C:\\chromium.latest'
-
-# Relative to CHROMIUM_SOURCE_DIR.
-CHROMIUM_SOLUTION_FILE = 'src\\chrome\\chrome.sln'
-
-# Relative to CHROMIUM_SOURCE_DIR.
-CHROMIUM_SOLUTION_DIR = 'src\\chrome'
-
-COVERITY_BIN_DIR = 'C:\\coverity\\prevent-win32-4.5.1\\bin'
-
-COVERITY_INTERMEDIATE_DIR = 'C:\\coverity\\cvbuild\\cr_int'
-
-COVERITY_ANALYZE_OPTIONS = ('--cxx --security --concurrency '
- '--enable ATOMICITY '
- '--enable MISSING_LOCK '
- '--enable DELETE_VOID '
- '--checker-option PASS_BY_VALUE:size_threshold:16 '
- '--checker-option '
- 'USE_AFTER_FREE:allow_simple_use:false '
- '--enable-constraint-fpp '
- '--enable-callgraph-metrics')
-
-# Might need to be changed to FQDN
-COVERITY_REMOTE = 'chromecoverity-linux1'
-
-COVERITY_PORT = '5467'
-
-COVERITY_PRODUCT = 'Chromium'
-
-COVERITY_TARGET = 'Windows'
-
-COVERITY_USER = 'admin'
-# looking for a PASSWORD constant? Look at --coverity-password-file instead.
-
-# Relative to CHROMIUM_SOURCE_DIR. Contains the pid of this script.
-LOCK_FILE = 'coverity.lock'
-
-
-def _ReadPassword(pwfilename):
- """Reads the coverity password in from a file where it was stashed"""
- pwfile = open(pwfilename, 'r')
- password = pwfile.readline()
- pwfile.close()
- return password.rstrip()
-
-
-def _RunCommand(cmd, dry_run, shell=False, echo_cmd=True):
- """Runs the command if dry_run is false, otherwise just prints the command."""
- if echo_cmd:
- print cmd
- if not dry_run:
- return subprocess.call(cmd, shell=shell)
- else:
- return 0
-
-
-def _ReleaseLock(lock_file, lock_filename):
- """Removes the lockfile. Function-ized so we can bail from anywhere"""
- os.close(lock_file)
- os.remove(lock_filename)
-
-
-def run_coverity(options, args):
- """Runs all the selected tests for the given build type and target."""
- # Create the lock file to prevent another instance of this script from
- # running.
- lock_filename = os.path.join(options.source_dir, LOCK_FILE)
- try:
- lock_file = os.open(lock_filename,
- os.O_CREAT | os.O_EXCL | os.O_TRUNC | os.O_RDWR)
- except OSError, err:
- print 'Failed to open lock file:\n ' + str(err)
- return 1
-
- # Write the pid of this script (the python.exe process) to the lock file.
- os.write(lock_file, str(os.getpid()))
-
- options.target = options.target.title()
-
- start_time = time.time()
-
- print 'Change directory to ' + options.source_dir
- os.chdir(options.source_dir)
-
- # The coverity-password filename may have been a relative path.
- # If so, assume it's relative to the source directory, which means
- # the time to read the password is after we do the chdir().
- coverity_password = _ReadPassword(options.coverity_password_file)
-
- cmd = 'gclient sync'
- gclient_exit = _RunCommand(cmd, options.dry_run, shell=True)
- if gclient_exit != 0:
- print 'gclient aborted with status %s' % gclient_exit
- _ReleaseLock(lock_file, lock_filename)
- return 1
-
- print 'Elapsed time: %ds' % (time.time() - start_time)
-
- # Do a clean build. Remove the build output directory first.
- if sys.platform.startswith('linux'):
- rm_path = os.path.join(options.source_dir,'src','out',options.target)
- elif sys.platform == 'win32':
- rm_path = os.path.join(options.source_dir,options.solution_dir,
- options.target)
- elif sys.platform == 'darwin':
- rm_path = os.path.join(options.source_dir,'src','xcodebuild')
- else:
- print 'Platform "%s" unrecognized, aborting' % sys.platform
- _ReleaseLock(lock_file, lock_filename)
- return 1
-
- if options.dry_run:
- print 'shutil.rmtree(%s)' % repr(rm_path)
- else:
- shutil.rmtree(rm_path,True)
-
- if options.preserve_intermediate_dir:
- print 'Preserving intermediate directory.'
- else:
- if options.dry_run:
- print 'shutil.rmtree(%s)' % repr(options.coverity_intermediate_dir)
- print 'os.mkdir(%s)' % repr(options.coverity_intermediate_dir)
- else:
- shutil.rmtree(options.coverity_intermediate_dir,True)
- os.mkdir(options.coverity_intermediate_dir)
-
- print 'Elapsed time: %ds' % (time.time() - start_time)
-
- use_shell_during_make = False
- if sys.platform.startswith('linux'):
- use_shell_during_make = True
- os.chdir('src')
- _RunCommand('pwd', options.dry_run, shell=True)
- cmd = '%s/cov-build --dir %s make BUILDTYPE=%s chrome' % (
- options.coverity_bin_dir, options.coverity_intermediate_dir,
- options.target)
- elif sys.platform == 'win32':
- cmd = ('%s\\cov-build.exe --dir %s devenv.com %s\\%s /build %s '
- '/project chrome.vcproj') % (
- options.coverity_bin_dir, options.coverity_intermediate_dir,
- options.source_dir, options.solution_file, options.target)
- elif sys.platform == 'darwin':
- use_shell_during_make = True
- os.chdir('src/chrome')
- _RunCommand('pwd', options.dry_run, shell=True)
- cmd = ('%s/cov-build --dir %s xcodebuild -project chrome.xcodeproj '
- '-configuration %s -target chrome') % (
- options.coverity_bin_dir, options.coverity_intermediate_dir,
- options.target)
-
-
- _RunCommand(cmd, options.dry_run, shell=use_shell_during_make)
- print 'Elapsed time: %ds' % (time.time() - start_time)
-
- cov_analyze_exe = os.path.join(options.coverity_bin_dir,'cov-analyze')
- cmd = '%s --dir %s %s' % (cov_analyze_exe,
- options.coverity_intermediate_dir,
- options.coverity_analyze_options)
- _RunCommand(cmd, options.dry_run, shell=use_shell_during_make)
- print 'Elapsed time: %ds' % (time.time() - start_time)
-
- cov_commit_exe = os.path.join(options.coverity_bin_dir,'cov-commit-defects')
-
- # On Linux we have started using a Target with a space in it, so we want
- # to quote it. On the other hand, Windows quoting doesn't work quite the
- # same way. To be conservative, I'd like to avoid quoting an argument
- # that doesn't need quoting and which we haven't historically been quoting
- # on that platform. So, only quote the target if we have to.
- coverity_target = options.coverity_target
- if sys.platform != 'win32':
- coverity_target = '"%s"' % coverity_target
-
- cmd = ('%s --dir %s --remote %s --port %s '
- '--product %s '
- '--target %s '
- '--user %s '
- '--password %s') % (cov_commit_exe,
- options.coverity_intermediate_dir,
- options.coverity_dbhost,
- options.coverity_port,
- options.coverity_product,
- coverity_target,
- options.coverity_user,
- coverity_password)
- # Avoid echoing the Commit command because it has a password in it
- _RunCommand(cmd, options.dry_run, shell=use_shell_during_make, echo_cmd=False)
-
- print 'Total time: %ds' % (time.time() - start_time)
-
- _ReleaseLock(lock_file, lock_filename)
-
- return 0
-
-
-def main():
- option_parser = optparse.OptionParser()
- option_parser.add_option('', '--dry-run', action='store_true', default=False,
- help='print but don\'t run the commands')
-
- option_parser.add_option('', '--target', default='Release',
- help='build target (Debug or Release)')
-
- option_parser.add_option('', '--source-dir', dest='source_dir',
- help='full path to directory ABOVE "src"',
- default=CHROMIUM_SOURCE_DIR)
-
- option_parser.add_option('', '--solution-file', dest='solution_file',
- default=CHROMIUM_SOLUTION_FILE)
-
- option_parser.add_option('', '--solution-dir', dest='solution_dir',
- default=CHROMIUM_SOLUTION_DIR)
-
- option_parser.add_option('', '--coverity-bin-dir', dest='coverity_bin_dir',
- default=COVERITY_BIN_DIR)
-
- option_parser.add_option('', '--coverity-intermediate-dir',
- dest='coverity_intermediate_dir',
- default=COVERITY_INTERMEDIATE_DIR)
-
- option_parser.add_option('', '--coverity-analyze-options',
- dest='coverity_analyze_options',
- help=('all cov-analyze options, e.g. "%s"'
- % COVERITY_ANALYZE_OPTIONS),
- default=COVERITY_ANALYZE_OPTIONS)
-
- option_parser.add_option('', '--coverity-db-host',
- dest='coverity_dbhost',
- help=('coverity defect db server hostname, e.g. %s'
- % COVERITY_REMOTE),
- default=COVERITY_REMOTE)
-
- option_parser.add_option('', '--coverity-db-port', dest='coverity_port',
- help=('port # of coverity web/db server, e.g. %s'
- % COVERITY_PORT),
- default=COVERITY_PORT)
-
- option_parser.add_option('', '--coverity-product', dest='coverity_product',
- help=('Product name reported to coverity, e.g. %s'
- % COVERITY_PRODUCT),
- default=COVERITY_PRODUCT)
-
- option_parser.add_option('', '--coverity-target', dest='coverity_target',
- help='Platform Target reported to coverity',
- default=COVERITY_TARGET)
-
- option_parser.add_option('', '--coverity-user', dest='coverity_user',
- help='Username used to log into coverity',
- default=COVERITY_USER)
-
- option_parser.add_option('', '--coverity-password-file',
- dest='coverity_password_file',
- help='file containing the coverity password',
- default='coverity-password')
-
- helpmsg = ('By default, the intermediate dir is emptied before analysis. '
- 'This switch disables that behavior.')
- option_parser.add_option('', '--preserve-intermediate-dir',
- action='store_true', help=helpmsg,
- default=False)
-
- options, args = option_parser.parse_args()
- return run_coverity(options, args)
-
-
-if '__main__' == __name__:
- sys.exit(main())
diff --git a/chromium/tools/cr/OWNERS b/chromium/tools/cr/OWNERS
deleted file mode 100644
index 0ee5c456ac2..00000000000
--- a/chromium/tools/cr/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-miguelg@chromium.org
-bulach@chromium.org
diff --git a/chromium/tools/cr/README b/chromium/tools/cr/README
deleted file mode 100644
index b5dafae6fac..00000000000
--- a/chromium/tools/cr/README
+++ /dev/null
@@ -1,14 +0,0 @@
-cr is a unified interface to dealing with output directories, and all the
-things you do with them.
-
-
-It offers the advantages of dealing with multiple output directories in a
-single client, and unifying the command lines needed to deal with the various
-flavours and targets.
-This means it will be very easy to build run and test multiple platforms in a
-single checkout.
-It also makes the commands more discoverable by being a single starting point
-with built in help.
-
-If you are using bash, source cr.sh and you will get the cr function in your
-shell, along with tab completion.
diff --git a/chromium/tools/cr/cr-bash-helpers.sh b/chromium/tools/cr/cr-bash-helpers.sh
deleted file mode 100755
index 03f42ccbe65..00000000000
--- a/chromium/tools/cr/cr-bash-helpers.sh
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/bin/bash
-
-# 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.
-
-# Source this file into your shell to gain the cr function and tab completion
-# for it
-
-# Make sure we're being sourced (possibly by another script). Check for bash
-# since zsh sets $0 when sourcing.
-if [[ -n "$BASH_VERSION" && "${BASH_SOURCE:-$0}" == "$0" ]]; then
- echo "ERROR: cr-bash-helpers.sh must be sourced."
- exit 1
-fi
-
-
-cr_base_dir=$(dirname $(realpath "${BASH_SOURCE:-$0}"))
-cr_main="${cr_base_dir}/main.py"
-cr_exec="PYTHONDONTWRITEBYTECODE=1 python ${cr_main}"
-
-# The main entry point to the cr tool.
-# Invokes the python script with pyc files turned off.
-function cr() {
- env $cr_exec "$@"
-}
-
-# Attempts to cd to the root/src of the current client.
-function crcd() {
- cd $(cr info -s CR_SRC)
-}
-
-# Add to your PS1 to have the current selected output directory in your prompt
-function _cr_ps1() {
- cr info -s CR_OUT_FULL
-}
-
-# The tab completion handler, delegates into the python script.
-function _cr_complete() {
- COMPREPLY=()
- local cur="${COMP_WORDS[COMP_CWORD]}"
- local main="python -B "${cr_main}")"
- local completions="$(env COMP_CWORD=${COMP_CWORD} COMP_WORD=${cur} $cr_exec)"
- COMPREPLY=( $(compgen -W "${completions}" -- ${cur}) )
-}
-
-# Setup the bash auto complete
-complete -F _cr_complete cr
diff --git a/chromium/tools/cr/cr.sh b/chromium/tools/cr/cr.sh
deleted file mode 100755
index 5d1c13ade4a..00000000000
--- a/chromium/tools/cr/cr.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-
-# 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.
-
-echo "*************************************************"
-echo "* Do not source cr.sh ***************************"
-echo "*************************************************"
-echo "* You need to source cr-bash-helpers.sh instead *"
-echo "* This file will stop working and be removed *"
-echo "* soon. *"
-echo "*************************************************"
-source $(dirname $(realpath "${BASH_SOURCE:-$0}"))/cr-bash-helpers.sh
diff --git a/chromium/tools/cr/cr/__init__.py b/chromium/tools/cr/cr/__init__.py
deleted file mode 100644
index 928e08bb790..00000000000
--- a/chromium/tools/cr/cr/__init__.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# 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.
-
-"""Chromium cr tool module.
-
-This is the root module of all the cr code.
-Commonly accessed elements, including all plugins, are promoted into this
-module.
-"""
-import sys
-
-from cr.config import Config
-from cr.loader import AutoExport
-import cr.plugin
diff --git a/chromium/tools/cr/cr/actions/__init__.py b/chromium/tools/cr/cr/actions/__init__.py
deleted file mode 100644
index 5f818b39a2b..00000000000
--- a/chromium/tools/cr/cr/actions/__init__.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# 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.
-
-"""A package to hold all the actions for the cr tool.
-
-This package holds the standard actions used by the commands in the cr tool.
-These actions are the things that actually perform the work, they are generally
-run in sequences by commands.
-"""
diff --git a/chromium/tools/cr/cr/actions/action.py b/chromium/tools/cr/cr/actions/action.py
deleted file mode 100644
index b812aaea1a2..00000000000
--- a/chromium/tools/cr/cr/actions/action.py
+++ /dev/null
@@ -1,49 +0,0 @@
-# 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.
-
-"""A module for the Action plugin base class."""
-
-import cr
-
-
-class Action(cr.Plugin):
- """Base class for cr actions.
-
- This provides the standard interface used to add actions to commands,
- including support for selecting the right implementation of an action and
- handling command line arguments for the action.
- """
-
- @classmethod
- def AddArguments(cls, command, parser):
- cls.AddSelectorArg(command, parser)
-
- @classmethod
- def AddSelectorArg(cls, command, parser):
- parser.add_argument(
- cls.SELECTOR_ARG, dest=cls.SELECTOR,
- choices=cls.Choices(),
- default=None,
- help=cls.SELECTOR_HELP + 'Overrides ' + cls.SELECTOR
- )
-
- @cr.Plugin.activemethod
- def Skipping(self, context):
- """A method that is used to detect void or skip implementations.
-
- Most actions have a skip version that you can select to indicate that you
- want to not perform the action at all.
- It is important that commands can detect this so they can modify the action
- sequence if there are other changes that depend on it (for instance not
- performing actions that were only there to produce the inputs of an action
- that is being skipped).
-
- Args:
- context: the cr context to test within.
- Returns:
- True if this implementation is a skip action.
- """
- return self.name == 'skip'
-
-
diff --git a/chromium/tools/cr/cr/actions/adb.py b/chromium/tools/cr/cr/actions/adb.py
deleted file mode 100644
index 25117c74ec4..00000000000
--- a/chromium/tools/cr/cr/actions/adb.py
+++ /dev/null
@@ -1,144 +0,0 @@
-# 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.
-
-"""A module to hold adb specific action implementations."""
-
-import re
-
-import cr
-
-
-class Adb(object):
- """Exposes the functionality of the adb tool to the rest of cr.
-
- This is intended as the only class in the cr that needs to understand the
- adb command line, and expose it in neutral form to the rest of the code.
- """
-
- # Tracks the set of killed target names, so we don't keep issuing kill
- # commands that are not going to have any effect.
- _kills = {}
-
- @classmethod
- def GetPids(cls, target):
- """Gets the set of running PIDs that match the specified target."""
- pids = []
- output = cr.Host.Capture(target, '{CR_ADB}', 'shell', 'ps')
- pattern = re.compile(r'\S+\s+(\d+)\s+.*{CR_PROCESS}')
- for line in output.split('\n'):
- match = re.match(pattern, line)
- if match:
- pids.append(match.group(1))
- return pids
-
- @classmethod
- def Run(cls, target, arguments):
- """Invoke a target binary on the device."""
- cr.Host.Execute(
- target,
- '{CR_ADB}', 'shell', 'am', 'start',
- '-a', '{CR_ACTION}',
- '-n', '{CR_INTENT}',
- '{CR_RUN_ARGUMENTS}',
- *arguments
- )
-
- @classmethod
- def Kill(cls, target, _):
- """Kill all running processes for a target."""
- target_name = target.build_target
- if target_name in cls._kills:
- # already killed this target, do nothing
- return
- pids = cls.GetPids(target)
- if pids:
- cr.Host.Execute(target, '{CR_ADB}', 'shell', 'kill', *pids)
- elif target.verbose:
- print target.Substitute('{CR_TARGET_NAME} not running')
- cls._kills[target_name] = True
-
- @classmethod
- def Uninstall(cls, target, arguments):
- cr.Host.Execute(
- target,
- '{CR_ADB}', 'uninstall',
- '{CR_PACKAGE}',
- *arguments
- )
-
- @classmethod
- def Install(cls, target, arguments):
- cr.Host.Execute(
- target,
- '{CR_ADB}', 'install',
- '{CR_BINARY}',
- *arguments
- )
-
- @classmethod
- def Reinstall(cls, target, arguments):
- cr.Host.Execute(
- target,
- '{CR_ADB}', 'install',
- '-r',
- '-d',
- '{CR_BINARY}',
- *arguments
- )
-
- @classmethod
- def AttachGdb(cls, target, arguments):
- cr.Host.Execute(
- target,
- '{CR_ADB_GDB}',
- '--adb={CR_ADB}',
- '--symbol-dir=${CR_BUILD_DIR}/lib',
- '--program-name={CR_TARGET_NAME}',
- '--package-name={CR_PACKAGE}',
- *arguments
- )
-
-
-class AdbRunner(cr.Runner):
- """An implementation of cr.Runner for the android platform."""
-
- @property
- def enabled(self):
- return cr.AndroidPlatform.GetInstance().is_active
-
- def Kill(self, context, targets, arguments):
- for target in targets:
- Adb.Kill(target, arguments)
-
- def Run(self, context, target, arguments):
- Adb.Run(target, arguments)
-
- def Test(self, context, target, arguments):
- cr.Host.Execute(
- target,
- '{CR_TEST_RUNNER}', '{CR_TEST_TYPE}',
- '-s', '{CR_TARGET_NAME}',
- '--{CR_TEST_MODE}',
- *arguments
- )
-
-
-class AdbInstaller(cr.Installer):
- """An implementation of cr.Installer for the android platform."""
-
- @property
- def enabled(self):
- return cr.AndroidPlatform.GetInstance().is_active
-
- def Uninstall(self, context, targets, arguments):
- for target in targets:
- Adb.Uninstall(target, arguments)
-
- def Install(self, context, targets, arguments):
- for target in targets:
- Adb.Install(target, arguments)
-
- def Reinstall(self, context, targets, arguments):
- for target in targets:
- Adb.Reinstall(target, arguments)
diff --git a/chromium/tools/cr/cr/actions/builder.py b/chromium/tools/cr/cr/actions/builder.py
deleted file mode 100644
index 74959afe627..00000000000
--- a/chromium/tools/cr/cr/actions/builder.py
+++ /dev/null
@@ -1,72 +0,0 @@
-# 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.
-
-"""A module for the Builder base class."""
-
-import cr
-
-
-class Builder(cr.Action, cr.Plugin.Type):
- """Base class for implementing builders.
-
- Builder implementations must override the Build and Clean methods at a
- minimum to build a target and clean up back to a pristine state respectively.
- They can also override Rebuild if they are able to handle it in a more
- efficient way that a Clean Build sequence.
- They should override the GetTargets method to return the set of valid targets
- the build system knows about, and override IsTarget if they can implement it
- more efficiently than checking from presents in the result of GetTargets.
- """
-
- SELECTOR_ARG = '--builder'
- SELECTOR = 'CR_BUILDER'
- SELECTOR_HELP = 'Sets the builder to use to update dependencies.'
-
- @cr.Plugin.activemethod
- def Build(self, context, targets, arguments):
- raise NotImplementedError('Must be overridden.')
-
- @cr.Plugin.activemethod
- def Clean(self, context, targets, arguments):
- """Clean temporary files built by a target."""
- raise NotImplementedError('Must be overridden.')
-
- @cr.Plugin.activemethod
- def Rebuild(self, context, targets, arguments):
- """Make a target build even if it is up to date.
-
- Default implementation is to do a Clean and Build sequence.
- Do not call the base version if you implement a more efficient one.
- """
- self.Clean(context, targets, [])
- self.Build(context, targets, arguments)
-
- @cr.Plugin.activemethod
- def GetTargets(self, context):
- """Gets the full set of targets supported by this builder.
-
- Used in automatic target name transformations, and also in offering the
- user choices.
- """
- return []
-
- @cr.Plugin.activemethod
- def IsTarget(self, context, target_name):
- """Check if a target name is on the builder knows about."""
- return target_name in self.GetTargets(context)
-
-
-class SkipBuilder(Builder):
- """The "skip" version of a Builder, causes the build step to be skipped."""
-
- @property
- def priority(self):
- return super(SkipBuilder, self).priority - 1
-
- def Build(self, context, targets, arguments):
- pass
-
- def Clean(self, context, targets, arguments):
- pass
-
diff --git a/chromium/tools/cr/cr/actions/debugger.py b/chromium/tools/cr/cr/actions/debugger.py
deleted file mode 100644
index a634ab22038..00000000000
--- a/chromium/tools/cr/cr/actions/debugger.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# 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.
-
-"""A module for the Debugger base class."""
-
-import cr
-
-
-class Debugger(cr.Action, cr.Plugin.Type):
- """Base class for implementing debuggers.
-
- Implementations must override the Invoke and Attach methods.
- """
-
- SELECTOR_ARG = '--debugger'
- SELECTOR = 'CR_DEBUGGER'
- SELECTOR_HELP = 'Sets the debugger to use for debug commands.'
-
- @classmethod
- def AddArguments(cls, command, parser):
- cr.Runner.AddSelectorArg(command, parser)
-
- @classmethod
- def ShouldInvoke(cls, context):
- """Checks if the debugger is attaching or launching."""
- return not cr.Runner.Skipping(context)
-
- @cr.Plugin.activemethod
- def Restart(self, context, targets, arguments):
- """Ask the debugger to restart.
-
- Defaults to a Kill Invoke sequence.
- """
- self.Kill(context, targets, [])
- self.Invoke(context, targets, arguments)
-
- @cr.Plugin.activemethod
- def Kill(self, context, targets, arguments):
- """Kill the running debugger."""
- cr.Runner.Kill(context, targets, arguments)
-
- @cr.Plugin.activemethod
- def Invoke(self, context, targets, arguments):
- """Invoke the program within a debugger."""
- raise NotImplementedError('Must be overridden.')
-
- @cr.Plugin.activemethod
- def Attach(self, context, targets, arguments):
- """Attach a debugger to a running program."""
- raise NotImplementedError('Must be overridden.')
diff --git a/chromium/tools/cr/cr/actions/gdb.py b/chromium/tools/cr/cr/actions/gdb.py
deleted file mode 100644
index d93fe27eb90..00000000000
--- a/chromium/tools/cr/cr/actions/gdb.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# 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.
-
-import os
-
-import cr
-
-
-class GdbDebugger(cr.Debugger):
- """An implementation of cr.Debugger that launches gdb."""
-
- DETECTED = cr.Config('DETECTED')
-
- @property
- def enabled(self):
- return (cr.LinuxPlatform.GetInstance().is_active and
- self.DETECTED.Find('CR_GDB'))
-
- def Invoke(self, context, targets, arguments):
- for target in targets:
- cr.Host.Execute(
- target,
- '{CR_GDB}', '--eval-command=run', '--args',
- '{CR_BINARY}',
- '{CR_RUN_ARGUMENTS}',
- *arguments
- )
-
- def Attach(self, context, targets, arguments):
- raise NotImplementedError('Attach not currently supported for gdb.')
-
-
-def _DetectGdb():
- """Attempts to find a valid gdb on the path."""
- gdb_binaries = cr.Host.SearchPath('gdb')
- if gdb_binaries:
- GdbDebugger.DETECTED.Set(CR_GDB=gdb_binaries[0])
-
-_DetectGdb()
diff --git a/chromium/tools/cr/cr/actions/gyp.py b/chromium/tools/cr/cr/actions/gyp.py
deleted file mode 100644
index b3492bbefd0..00000000000
--- a/chromium/tools/cr/cr/actions/gyp.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# 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.
-
-"""A module to add gyp support to cr."""
-
-import cr
-
-
-class GypPrepareOut(cr.PrepareOut):
- """A prepare action that runs gyp whenever you select an output directory."""
-
- ENABLED = cr.Config.From(
- GYP_GENERATORS='ninja',
- GYP_GENERATOR_FLAGS='output_dir={CR_OUT_BASE} config={CR_BUILDTYPE}',
- )
-
- def Prepare(self, context):
- if context.verbose >= 1:
- print context.Substitute('Invoking gyp with {GYP_GENERATOR_FLAGS}')
- cr.Host.Execute(
- context,
- '{CR_SRC}/build/gyp_chromium',
- '--depth={CR_SRC}',
- '--check'
- )
diff --git a/chromium/tools/cr/cr/actions/installer.py b/chromium/tools/cr/cr/actions/installer.py
deleted file mode 100644
index 0dd432df653..00000000000
--- a/chromium/tools/cr/cr/actions/installer.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# 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.
-
-"""A module for the Installer base class."""
-
-import cr
-
-
-class Installer(cr.Action, cr.Plugin.Type):
- """Base class for implementing installers.
-
- Installer implementations must implement the Uninstall and Install methods.
- If the location into which targets are built is find for running them, then
- they do not actually have to do anything.
- """
-
- SELECTOR_ARG = '--installer'
- SELECTOR = 'CR_INSTALLER'
- SELECTOR_HELP = 'Sets the installer to use.'
-
- @cr.Plugin.activemethod
- def Uninstall(self, context, targets, arguments):
- """Removes a target from it's installed location."""
-
- raise NotImplementedError('Must be overridden.')
-
- @cr.Plugin.activemethod
- def Install(self, context, targets, arguments):
- """Installs a target somewhere so that it is ready to run."""
- raise NotImplementedError('Must be overridden.')
-
- @cr.Plugin.activemethod
- def Reinstall(self, context, targets, arguments):
- """Force a target to install even if already installed.
-
- Default implementation is to do an Uninstall Install sequence.
- Do not call the base version if you implement a more efficient one.
- """
- self.Uninstall(context, targets, [])
- self.Install(context, targets, arguments)
-
-
-class SkipInstaller(Installer):
- """An Installer the user chooses to bypass the install step of a command."""
-
- @property
- def priority(self):
- return super(SkipInstaller, self).priority - 1
-
- def Uninstall(self, context, targets, arguments):
- pass
-
- def Install(self, context, targets, arguments):
- pass
diff --git a/chromium/tools/cr/cr/actions/linux.py b/chromium/tools/cr/cr/actions/linux.py
deleted file mode 100644
index adcdb31abd6..00000000000
--- a/chromium/tools/cr/cr/actions/linux.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# 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.
-
-"""A module to hold linux specific action implementations."""
-
-import cr
-
-
-class LinuxRunner(cr.Runner):
- """An implementation of cr.Runner for the linux platform.
-
- This supports directly executing the binaries from the output directory.
- """
-
- @property
- def enabled(self):
- return cr.LinuxPlatform.GetInstance().is_active
-
- def Kill(self, context, targets, arguments):
- # TODO(iancottrell): Think about how to implement this, or even if we should
- print '**WARNING** Kill not yet implemented on linux'
-
- def Run(self, context, target, arguments):
- cr.Host.Execute(target, '{CR_BINARY}', '{CR_RUN_ARGUMENTS}', *arguments)
-
- def Test(self, context, target, arguments):
- self.Run(context, target, arguments)
-
-
-class LinuxInstaller(cr.Installer):
- """An implementation of cr.Installer for the linux platform.
-
- This does nothing, the linux runner works from the output directory, there
- is no need to install anywhere.
- """
-
- @property
- def enabled(self):
- return cr.LinuxPlatform.GetInstance().is_active
-
- def Uninstall(self, context, targets, arguments):
- pass
-
- def Install(self, context, targets, arguments):
- pass
-
- def Reinstall(self, context, targets, arguments):
- pass
-
diff --git a/chromium/tools/cr/cr/actions/ninja.py b/chromium/tools/cr/cr/actions/ninja.py
deleted file mode 100644
index 404e6caea26..00000000000
--- a/chromium/tools/cr/cr/actions/ninja.py
+++ /dev/null
@@ -1,86 +0,0 @@
-# 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.
-
-"""A module to add ninja support to cr."""
-
-import os
-
-import cr
-
-_PHONY_SUFFIX = ': phony'
-_LINK_SUFFIX = ': link'
-
-
-class NinjaBuilder(cr.Builder):
- """An implementation of Builder that uses ninja to do the actual build."""
-
- # Some basic configuration installed if we are enabled.
- ENABLED = cr.Config.From(
- NINJA_BINARY=os.path.join('{DEPOT_TOOLS}', 'ninja'),
- NINJA_JOBS=200,
- NINJA_PROCESSORS=12,
- GOMA_DIR=os.path.join('{GOOGLE_CODE}', 'goma'),
- )
- # A placeholder for the system detected configuration
- DETECTED = cr.Config('DETECTED')
-
- def __init__(self):
- super(NinjaBuilder, self).__init__()
- self._targets = []
-
- def Build(self, context, targets, arguments):
- build_arguments = [target.build_target for target in targets]
- build_arguments.extend(arguments)
- cr.Host.Execute(
- context,
- '{NINJA_BINARY}',
- '-C{CR_BUILD_DIR}',
- '-j{NINJA_JOBS}',
- '-l{NINJA_PROCESSORS}',
- *build_arguments
- )
-
- def Clean(self, context, targets, arguments):
- build_arguments = [target.build_target for target in targets]
- build_arguments.extend(arguments)
- cr.Host.Execute(
- context,
- '{NINJA_BINARY}',
- '-C{CR_BUILD_DIR}',
- '-tclean',
- *build_arguments
- )
-
- def GetTargets(self, context):
- """Overridden from Builder.GetTargets."""
- if not self._targets:
- try:
- context.Get('CR_BUILD_DIR', raise_errors=True)
- except KeyError:
- return self._targets
- output = cr.Host.Capture(
- context,
- '{NINJA_BINARY}',
- '-C{CR_BUILD_DIR}',
- '-ttargets',
- 'all'
- )
- for line in output.split('\n'):
- line = line.strip()
- if line.endswith(_PHONY_SUFFIX):
- target = line[:-len(_PHONY_SUFFIX)].strip()
- self._targets.append(target)
- elif line.endswith(_LINK_SUFFIX):
- target = line[:-len(_LINK_SUFFIX)].strip()
- self._targets.append(target)
- return self._targets
-
- @classmethod
- def DetectNinja(cls):
- # TODO(iancottrell): If we can't detect ninja, we should be disabled.
- ninja_binaries = cr.Host.SearchPath('ninja')
- if ninja_binaries:
- cls.DETECTED.Set(NINJA_BINARY=ninja_binaries[0])
-
-NinjaBuilder.DetectNinja()
diff --git a/chromium/tools/cr/cr/actions/runner.py b/chromium/tools/cr/cr/actions/runner.py
deleted file mode 100644
index 72590fc35e0..00000000000
--- a/chromium/tools/cr/cr/actions/runner.py
+++ /dev/null
@@ -1,87 +0,0 @@
-# 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.
-
-"""A module for the Runner base class."""
-
-import cr
-
-
-class Runner(cr.Action, cr.Plugin.Type):
- """Base class for implementing target runners.
-
- Runner implementations must implement the Kill, Run and Test methods.
-
- """
-
- SELECTOR_ARG = '--runner'
- SELECTOR = 'CR_RUNNER'
- SELECTOR_HELP = 'Sets the runner to use to execute the target.'
-
- @classmethod
- def AddArguments(cls, command, parser):
- parser.add_argument(
- '--test', dest='CR_TEST_TYPE',
- choices=cr.Target.TEST_TYPES,
- default=None,
- help="""
- Sets the test type to use,
- defaults to choosing based on the target.
- Set to 'no' to force it to not be a test.
- """
- )
-
- @cr.Plugin.activemethod
- def Kill(self, context, targets, arguments):
- """Stops all running processes that match a target."""
- raise NotImplementedError('Must be overridden.')
-
- @cr.Plugin.activemethod
- def Run(self, context, target, arguments):
- """Run a new copy of a runnable target."""
- raise NotImplementedError('Must be overridden.')
-
- @cr.Plugin.activemethod
- def Test(self, context, target, arguments):
- """Run a test target."""
- raise NotImplementedError('Must be overridden.')
-
- @cr.Plugin.activemethod
- def Invoke(self, context, targets, arguments):
- """Invoke a target.
-
- This dispatches to either Test or Run depending on the target type.
- """
- for target in targets:
- if target.is_test:
- self.Test(context, target, arguments)
- else:
- self.Run(context, target, arguments)
-
- @cr.Plugin.activemethod
- def Restart(self, context, targets, arguments):
- """Force a target to restart if it is already running.
-
- Default implementation is to do a Kill Invoke sequence.
- Do not call the base version if you implement a more efficient one.
- """
- self.Kill(context, targets, [])
- self.Invoke(context, targets, arguments)
-
-
-class SkipRunner(Runner):
- """A Runner the user chooses to bypass the run step of a command."""
-
- @property
- def priority(self):
- return super(SkipRunner, self).priority - 1
-
- def Kill(self, context, targets, arguments):
- pass
-
- def Run(self, context, target, arguments):
- pass
-
- def Test(self, context, target, arguments):
- pass
-
diff --git a/chromium/tools/cr/cr/auto/__init__.py b/chromium/tools/cr/cr/auto/__init__.py
deleted file mode 100644
index 698aee36359..00000000000
--- a/chromium/tools/cr/cr/auto/__init__.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# 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.
-
-"""A root package for all the automatically loaded modules.
-
-There are no built in packages below this, it holds a set of packages that
-have their search paths modified in order to pick up plugins from directories
-that are not known until run-time.
-"""
diff --git a/chromium/tools/cr/cr/auto/build/__init__.py b/chromium/tools/cr/cr/auto/build/__init__.py
deleted file mode 100644
index 4f2dbd94674..00000000000
--- a/chromium/tools/cr/cr/auto/build/__init__.py
+++ /dev/null
@@ -1,5 +0,0 @@
-# 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.
-
-"""A package that holds the modules loaded from the output directory.""" \ No newline at end of file
diff --git a/chromium/tools/cr/cr/auto/client/__init__.py b/chromium/tools/cr/cr/auto/client/__init__.py
deleted file mode 100644
index 90647c658e4..00000000000
--- a/chromium/tools/cr/cr/auto/client/__init__.py
+++ /dev/null
@@ -1,5 +0,0 @@
-# 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.
-
-"""A package to hold the modules auto loaded from the client directory.""" \ No newline at end of file
diff --git a/chromium/tools/cr/cr/auto/user/__init__.py b/chromium/tools/cr/cr/auto/user/__init__.py
deleted file mode 100644
index 9f93de8df98..00000000000
--- a/chromium/tools/cr/cr/auto/user/__init__.py
+++ /dev/null
@@ -1,5 +0,0 @@
-# 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.
-
-"""A package to hold the modules loaded from the users home directory.""" \ No newline at end of file
diff --git a/chromium/tools/cr/cr/autocomplete.py b/chromium/tools/cr/cr/autocomplete.py
deleted file mode 100644
index ab9ce2f5784..00000000000
--- a/chromium/tools/cr/cr/autocomplete.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# 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.
-
-"""Bash auto completion support.
-
-Contains the special mode that returns lists of possible completions for the
-current command line.
-"""
-
-import cr
-
-
-def Complete(context):
- """Attempts to build a completion list for the current command line.
-
- COMP_WORD contains the word that is being completed, and COMP_CWORD has
- the index of that word on the command line.
-
- Args:
- context: The cr context object, of type cr.context.Context.
- """
-
- _ = context
- # TODO(iancottrell): support auto complete of more than just the command
- # try to parse the command line using parser
- print ' '.join(command.name for command in cr.Command.Plugins())
diff --git a/chromium/tools/cr/cr/base/__init__.py b/chromium/tools/cr/cr/base/__init__.py
deleted file mode 100644
index 05babb89dc2..00000000000
--- a/chromium/tools/cr/cr/base/__init__.py
+++ /dev/null
@@ -1,5 +0,0 @@
-# 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.
-
-"""A package for the base supporting classes of the cr tool."""
diff --git a/chromium/tools/cr/cr/base/android.py b/chromium/tools/cr/cr/base/android.py
deleted file mode 100644
index cf61577adc1..00000000000
--- a/chromium/tools/cr/cr/base/android.py
+++ /dev/null
@@ -1,116 +0,0 @@
-# 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.
-
-"""The android specific platform implementation module."""
-
-import os
-import subprocess
-
-import cr
-
-# This is the set of environment variables that are not automatically
-# copied back from the envsetup shell
-_IGNORE_ENV = [
- 'SHLVL', # Because it's nothing to do with envsetup
- 'GYP_GENERATOR_FLAGS', # because we set them in they gyp handler
- 'GYP_GENERATORS', # because we set them in they gyp handler
- 'PATH', # Because it gets a special merge handler
- 'GYP_DEFINES', # Because it gets a special merge handler
-]
-
-# The message to print when we detect use of an android output directory in a
-# client that cannot build android.
-_NOT_ANDROID_MESSAGE = """
-You are trying to build for the android platform in a client that is not
-android capable.
-Please get a new client using "fetch android".
-See https://code.google.com/p/chromium/wiki/AndroidBuildInstructions for more
-details.
-"""
-
-
-class AndroidPlatform(cr.Platform):
- """The implementation of Platform for the android target."""
-
- ACTIVE = cr.Config.From(
- CR_ENVSETUP=os.path.join('{CR_SRC}', 'build', 'android', 'envsetup.sh'),
- CR_ADB=os.path.join('{ANDROID_SDK_ROOT}', 'platform-tools', 'adb'),
- CR_TARGET_SUFFIX='_apk',
- CR_BINARY=os.path.join('{CR_BUILD_DIR}', 'apks', '{CR_TARGET_NAME}.apk'),
- CR_ACTION='android.intent.action.VIEW',
- CR_PACKAGE='com.google.android.apps.{CR_TARGET}',
- CR_PROCESS='{CR_PACKAGE}',
- CR_ACTIVITY='.Main',
- CR_INTENT='{CR_PACKAGE}/{CR_ACTIVITY}',
- CR_TEST_RUNNER=os.path.join(
- '{CR_SRC}', 'build', 'android', 'test_runner.py'),
- CR_ADB_GDB=os.path.join('{CR_SRC}', 'build', 'android', 'adb_gdb'),
- CHROMIUM_OUT_DIR='{CR_OUT_BASE}',
- CR_DEFAULT_TARGET='chromium_testshell',
- )
-
- def __init__(self):
- super(AndroidPlatform, self).__init__()
- self._env = cr.Config('android-env', literal=True, export=True)
- self.detected_config.AddChild(self._env)
- self._env_ready = False
- self._env_paths = []
-
- @property
- def priority(self):
- return super(AndroidPlatform, self).priority + 1
-
- def Prepare(self, context):
- """Override Prepare from cr.Platform."""
- super(AndroidPlatform, self).Prepare(context)
- # Check we are an android capable client
- is_android = 'android' in context.gclient.get('target_os', '')
- if not is_android:
- url = context.gclient.get('solutions', [{}])[0].get('url')
- is_android = (url.startswith(
- 'https://chrome-internal.googlesource.com/') and
- url.endswith('/internal/apps.git'))
- if not is_android:
- print _NOT_ANDROID_MESSAGE
- exit(1)
- try:
- # capture the result of env setup if we have not already done so
- if not self._env_ready:
- # See what the env would be without env setup
- before = context.exported
- # Run env setup and capture/parse it's output
- envsetup = 'source {CR_ENVSETUP} --target-arch={CR_ENVSETUP_ARCH}'
- output = cr.Host.CaptureShell(context, envsetup + ' > /dev/null && env')
- env_setup = cr.Config('envsetup', literal=True, export=True)
- for line in output.split('\n'):
- (key, op, value) = line.partition('=')
- if op:
- key = key.strip()
- if key not in _IGNORE_ENV:
- env_setup[key] = env_setup.ParseValue(value.strip())
- if key == 'PATH':
- self._env_paths = value.strip().split(os.path.pathsep)
- if key == 'GYP_DEFINES':
- # Make a version of GYP_DEFINES that is the combination of base
- # setting and envsetup, needs to override the overrides
- # Note: Forcing it into the top level scope - sledge-hammer
- context[key] = value.strip() + ' ' + before.get(key, '')
- items = env_setup.exported.items()
- if not items:
- # Because of the way envsetup is run, the exit code does not make it
- # back to us. Instead, we assume if we got no environment at all, it
- # must have failed.
- print 'Envsetup failed!'
- exit(1)
- # Find all the things that envsetup changed
- for key, value in env_setup.exported.items():
- if str(value) != str(before.get(key, None)):
- self._env[key] = value
- self._env_ready = True
- except subprocess.CalledProcessError, e:
- exit(e.returncode)
-
- @property
- def paths(self):
- return self._env_paths
diff --git a/chromium/tools/cr/cr/base/arch.py b/chromium/tools/cr/cr/base/arch.py
deleted file mode 100644
index 743ac8efe47..00000000000
--- a/chromium/tools/cr/cr/base/arch.py
+++ /dev/null
@@ -1,70 +0,0 @@
-# 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.
-
-"""A module for the basic architectures supported by cr."""
-
-import cr
-
-DEFAULT = cr.Config.From(
- CR_ENVSETUP_ARCH='{CR_ARCH}',
-)
-
-
-class Arch(cr.Plugin, cr.Plugin.Type):
- """Base class for implementing cr architecture targets."""
-
- SELECTOR = 'CR_ARCH'
-
- @classmethod
- def AddArguments(cls, parser):
- parser.add_argument(
- '--architecture', dest=cls.SELECTOR,
- choices=cls.Choices(),
- default=None,
- help='Sets the target architecture to use. Overrides ' + cls.SELECTOR
- )
-
-
-class IA32Arch(Arch):
-
- ACTIVE = cr.Config.From(
- CR_ENVSETUP_ARCH='x86',
- )
-
-
-class Mips32Arch(Arch):
-
- ACTIVE = cr.Config.From(
- CR_ENVSETUP_ARCH='mips',
- )
-
- @property
- def enabled(self):
- return cr.AndroidPlatform.GetInstance().is_active
-
-
-class X64Arch(Arch):
-
- ACTIVE = cr.Config.From(
- CR_ENVSETUP_ARCH='x64',
- )
-
- @property
- def priority(self):
- return super(X64Arch, self).priority + 1
-
-
-class Arm32Arch(Arch):
-
- ACTIVE = cr.Config.From(
- CR_ENVSETUP_ARCH='arm',
- )
-
- @property
- def priority(self):
- return super(Arm32Arch, self).priority + 2
-
- @property
- def enabled(self):
- return cr.AndroidPlatform.GetInstance().is_active
diff --git a/chromium/tools/cr/cr/base/buildtype.py b/chromium/tools/cr/cr/base/buildtype.py
deleted file mode 100644
index 17558128c1b..00000000000
--- a/chromium/tools/cr/cr/base/buildtype.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# 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.
-
-"""A module for the basic build type support in cr."""
-
-import cr
-
-
-class BuildType(cr.Plugin, cr.Plugin.Type):
- """Base class for implementing cr build types.
-
- A build type corresponds to the second directory level in the standard output
- directory format, and the BUILDTYPE environment variable used by chromium
- tools.
- """
-
- SELECTOR = 'CR_BUILDTYPE'
-
- DEFAULT = cr.Config.From(
- BUILDTYPE='{CR_BUILDTYPE}',
- )
-
- def __init__(self):
- super(BuildType, self).__init__()
- self.active_config.Set(
- CR_TEST_MODE=self.name,
- )
-
- @classmethod
- def AddArguments(cls, parser):
- parser.add_argument(
- '--type', dest=cls.SELECTOR,
- choices=cls.Choices(),
- default=None,
- help='Sets the build type to use. Overrides ' + cls.SELECTOR
- )
-
-
-class DebugBuildType(BuildType):
- """A concrete implementation of BuildType for Debug builds."""
-
- def __init__(self):
- super(DebugBuildType, self).__init__()
- self._name = 'Debug'
-
-
-class ReleaseBuildType(BuildType):
- """A concrete implementation of BuildType for Release builds."""
-
- def __init__(self):
- super(ReleaseBuildType, self).__init__()
- self._name = 'Release'
-
- @property
- def priority(self):
- return BuildType.GetPlugin('Debug').priority + 1
-
diff --git a/chromium/tools/cr/cr/base/client.py b/chromium/tools/cr/cr/base/client.py
deleted file mode 100644
index d8eef12ec6c..00000000000
--- a/chromium/tools/cr/cr/base/client.py
+++ /dev/null
@@ -1,215 +0,0 @@
-# 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.
-
-"""Client configuration management.
-
-This module holds the code for detecting and configuring the current client and
-it's output directories.
-It is responsible for writing out the client specific plugins that tell the
-rest of the cr tool what the client is capable of.
-"""
-
-import os
-import sys
-
-import cr
-import cr.auto.build
-import cr.auto.client
-
-# The config version currently supported.
-VERSION = 0.5
-# The default directory name to store config inside
-CLIENT_CONFIG_PATH = '.cr'
-# The partial filename to add to a directory to get it's config file.
-CLIENT_CONFIG_FILE = os.path.join(CLIENT_CONFIG_PATH, 'config.py')
-# The format string for the header of a config file.
-CONFIG_FILE_PREFIX = """
-# This is an autogenerated file
-# it *will* be overwritten, and changes may lost
-# The system will autoload any other python file in the same folder.
-
-import cr
-
-OVERRIDES = cr.Config.From("""
-# The format string for each value in a config file.
-CONFIG_VAR_LINE = '\n {0} = {1!r},'
-# The format string for the tail of a config file.
-CONFIG_FILE_SUFFIX = '\n)\n'
-# The name of the gclient config file
-GCLIENT_FILENAME = '.gclient'
-
-# The default config values installed by this module.
-DEFAULT = cr.Config.From(
- CR_ROOT_PATH=os.path.join('{GOOGLE_CODE}'),
- CR_CLIENT_PATH=os.path.join('{CR_ROOT_PATH}', '{CR_CLIENT_NAME}'),
- CR_SRC=os.path.join('{CR_CLIENT_PATH}', 'src'),
- CR_BUILD_DIR=os.path.join('{CR_SRC}', '{CR_OUT_FULL}'),
-)
-
-# Config values determined at run time by this module.
-DETECTED = cr.Config.From(
- CR_CLIENT_PATH=lambda context: _DetectPath(),
- # _DetectName not declared yet so pylint: disable=unnecessary-lambda
- CR_CLIENT_NAME=lambda context: _DetectName(context),
-)
-
-_cached_path = None
-_cached_name = None
-
-
-def _DetectPath():
- """A dynamic value function that tries to detect the current client."""
- global _cached_path
- if _cached_path is not None:
- return _cached_path
- # See if we can detect the source tree root
- _cached_path = os.getcwd()
- while (_cached_path and
- not os.path.exists(os.path.join(_cached_path, GCLIENT_FILENAME))):
- old = _cached_path
- _cached_path = os.path.dirname(_cached_path)
- if _cached_path == old:
- _cached_path = None
- if _cached_path is not None:
- dirname, basename = os.path.split(_cached_path)
- if basename == 'src':
- # we have the src path, base is one level up
- _cached_path = dirname
- if _cached_path is None:
- _cached_path = cr.visitor.HIDDEN
- return _cached_path
-
-
-def _DetectName(context):
- """A dynamic value function that works out the name of the current client."""
- global _cached_name
- if _cached_name is not None:
- return _cached_name
- _cached_name = 'chromium'
- path = context.Get('CR_CLIENT_PATH')
- if path is None:
- return
- _cached_name = os.path.basename(path)
- return _cached_name
-
-
-def _GetConfigFilename(path):
- return os.path.realpath(os.path.join(path, CLIENT_CONFIG_FILE))
-
-
-def _IsOutputDir(path):
- return os.path.isfile(_GetConfigFilename(path))
-
-
-def _WriteConfig(writer, data):
- writer.write(CONFIG_FILE_PREFIX)
- for key, value in data.items():
- writer.write(CONFIG_VAR_LINE.format(key, value))
- writer.write(CONFIG_FILE_SUFFIX)
-
-
-def AddArguments(parser):
- parser.add_argument(
- '-o', '--out', dest='_out', metavar='name',
- default=None,
- help='The name of the out directory to use. Overrides CR_OUT.'
- )
-
-
-def GetOutArgument(context):
- return getattr(context.args, '_out', None)
-
-
-def ApplyOutArgument(context):
- # TODO(iancottrell): be flexible, allow out to do approximate match...
- out = GetOutArgument(context)
- if out:
- context.derived.Set(CR_OUT_FULL=out)
-
-
-def ReadGClient(context):
- """Loads the .gclient configuration for the current client.
-
- This will load from CR_CLIENT_PATH.
-
- Args:
- context: The active context to load configuratin for.
- Returns:
- The dict of values set in the .gclient file.
-
- """
- # Now attempt to load and parse the .gclient file
- result = {}
- try:
- gclient_file = context.Substitute(
- os.path.join('{CR_CLIENT_PATH}', GCLIENT_FILENAME))
- with open(gclient_file, 'r') as spec_file:
- # matching the behaviour of gclient, so pylint: disable=exec-used
- exec(spec_file.read(), {}, result)
- except IOError:
- # no .gclient file, skip it
- pass
- return result
-
-
-def LoadConfig(context):
- """Loads the client configuration for the given context.
-
- This will load configuration if present from CR_CLIENT_PATH and then
- CR_BUILD_DIR.
-
- Args:
- context: The active context to load configuratin for.
- Returns:
- True if configuration was fully loaded.
-
- """
- # Load the root config, will help set default build dir
- client_path = context.Find('CR_CLIENT_PATH')
- if not client_path:
- return False
- cr.auto.client.__path__.append(os.path.join(client_path, CLIENT_CONFIG_PATH))
- cr.loader.Scan()
- # Now load build dir config
- build_dir = context.Find('CR_BUILD_DIR')
- if not build_dir:
- return False
- cr.auto.build.__path__.append(os.path.join(build_dir, CLIENT_CONFIG_PATH))
- cr.loader.Scan()
- return hasattr(cr.auto.build, 'config')
-
-
-def WriteConfig(context, path, data):
- """Writes a configuration out to a file.
-
- This writes all the key value pairs in data out to a config file below path.
-
- Args:
- context: The context to run under.
- path: The base path to write the config plugin into.
- data: The key value pairs to write.
- """
- filename = _GetConfigFilename(path)
- config_dir = os.path.dirname(filename)
- if context.dry_run:
- print 'makedirs', config_dir
- print 'Write config to', filename
- _WriteConfig(sys.stdout, data)
- else:
- try:
- os.makedirs(config_dir)
- except OSError:
- if not os.path.isdir(config_dir):
- raise
- with open(filename, 'w') as writer:
- _WriteConfig(writer, data)
-
-
-def PrintInfo(context):
- print 'Selected output directory is', context.Find('CR_BUILD_DIR')
- try:
- for name in cr.auto.build.config.OVERRIDES.exported.keys():
- print ' ', name, '=', context.Get(name)
- except AttributeError:
- pass
diff --git a/chromium/tools/cr/cr/base/host.py b/chromium/tools/cr/cr/base/host.py
deleted file mode 100644
index c6e0ced86e6..00000000000
--- a/chromium/tools/cr/cr/base/host.py
+++ /dev/null
@@ -1,149 +0,0 @@
-# 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.
-
-"""Module for build host support."""
-
-import os
-import pipes
-import subprocess
-
-import cr
-
-# Controls what verbosity level turns on command trail logging
-_TRAIL_VERBOSITY = 2
-
-
-class Host(cr.Plugin, cr.Plugin.Type):
- """Base class for implementing cr hosts.
-
- The host is the main access point to services provided by the machine cr
- is running on. It exposes information about the machine, and runs external
- commands on behalf of the actions.
- """
-
- def __init__(self):
- super(Host, self).__init__()
-
- def Matches(self):
- """Detects whether this is the correct host implementation.
-
- This method is overridden by the concrete implementations.
- Returns:
- true if the plugin matches the machine it is running on.
- """
- return False
-
- @classmethod
- def Select(cls, context):
- for host in cls.Plugins():
- if host.Matches():
- return host
-
- def _Execute(self, context, command,
- shell=False, capture=False, ignore_dry_run=False,
- return_status=False):
- """This is the only method that launches external programs.
-
- It is a thin wrapper around subprocess.Popen that handles cr specific
- issues. The command is expanded in the context, so that context variables
- are substituted.
- Args:
- context: the cr context to run under.
- command: the command to run.
- shell: whether to run the command using the shell.
- capture: controls wether the output of the command is captured.
- ignore_dry_run: Normally, if the context is in dry run mode the command is
- printed but not executed. This flag overrides that behaviour, causing
- the command to be run anyway.
- return_status: switches the function to returning the status code rather
- the output.
- Returns:
- the status if return_status is true, or the output if capture is true,
- otherwise nothing.
- """
- with context.Trace():
- command = [context.Substitute(arg) for arg in command if arg]
- trail = context.trail
- if not command:
- print 'Empty command passed to execute'
- exit(1)
- if context.verbose:
- print ' '.join(command)
- if context.verbose >= _TRAIL_VERBOSITY:
- print 'Command expanded the following variables:'
- for key, value in trail:
- print ' ', key, '=', value
- if ignore_dry_run or not context.dry_run:
- out = None
- if capture:
- out = subprocess.PIPE
- try:
- p = subprocess.Popen(
- command, shell=shell,
- env={k: str(v) for k, v in context.exported.items()},
- stdout=out)
- except OSError:
- print 'Failed to exec', command
- # Don't log the trail if we already have
- if context.verbose < _TRAIL_VERBOSITY:
- print 'Variables used to build the command were:'
- for key, value in trail:
- print ' ', key, '=', value
- exit(1)
- try:
- output, _ = p.communicate()
- except KeyboardInterrupt:
- p.terminate()
- p.wait()
- exit(1)
- if return_status:
- return p.returncode
- if p.returncode != 0:
- print 'Error {0} executing command {1}'.format(p.returncode, command)
- exit(p.returncode)
- return output or ''
- return ''
-
- @cr.Plugin.activemethod
- def Shell(self, context, *command):
- command = ' '.join([pipes.quote(arg) for arg in command])
- return self._Execute(context, [command], shell=True)
-
- @cr.Plugin.activemethod
- def Execute(self, context, *command):
- return self._Execute(context, command, shell=False)
-
- @cr.Plugin.activemethod
- def CaptureShell(self, context, *command):
- return self._Execute(context, command,
- shell=True, capture=True, ignore_dry_run=True)
-
- @cr.Plugin.activemethod
- def Capture(self, context, *command):
- return self._Execute(context, command, capture=True, ignore_dry_run=True)
-
- @cr.Plugin.activemethod
- def ExecuteStatus(self, context, *command):
- return self._Execute(context, command,
- ignore_dry_run=True, return_status=True)
-
- @classmethod
- def SearchPath(cls, name):
- """Searches the PATH for an executable.
-
- Args:
- name: the name of the binary to search for.
- Returns:
- the set of executables found, or an empty list if none.
- """
- result = []
- extensions = ['']
- extensions.extend(os.environ.get('PATHEXT', '').split(os.pathsep))
- for path in os.environ.get('PATH', '').split(os.pathsep):
- partial = os.path.join(path, name)
- for extension in extensions:
- filename = partial + extension
- if os.path.exists(filename) and filename not in result:
- result.append(filename)
- return result
diff --git a/chromium/tools/cr/cr/base/linux.py b/chromium/tools/cr/cr/base/linux.py
deleted file mode 100644
index 407c48efe3f..00000000000
--- a/chromium/tools/cr/cr/base/linux.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# 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.
-
-"""The linux specific host and platform implementation module."""
-
-import os
-
-import cr
-
-
-class LinuxHost(cr.Host):
- """The implementation of Host for linux."""
-
- ACTIVE = cr.Config.From(
- GOOGLE_CODE='/usr/local/google/code',
- )
-
- def __init__(self):
- super(LinuxHost, self).__init__()
-
- def Matches(self):
- return cr.Platform.System() == 'Linux'
-
-
-class LinuxPlatform(cr.Platform):
- """The implementation of Platform for the linux target."""
-
- ACTIVE = cr.Config.From(
- CR_BINARY=os.path.join('{CR_BUILD_DIR}', '{CR_BUILD_TARGET}'),
- CHROME_DEVEL_SANDBOX='/usr/local/sbin/chrome-devel-sandbox',
- )
-
- @property
- def enabled(self):
- return cr.Platform.System() == 'Linux'
-
- @property
- def priority(self):
- return 2
-
- @property
- def paths(self):
- return ['{GOMA_DIR}']
diff --git a/chromium/tools/cr/cr/base/platform.py b/chromium/tools/cr/cr/base/platform.py
deleted file mode 100644
index db6f66d2983..00000000000
--- a/chromium/tools/cr/cr/base/platform.py
+++ /dev/null
@@ -1,70 +0,0 @@
-# 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.
-
-"""Module for the target platform support."""
-
-from importlib import import_module
-import os
-
-import cr
-
-DEFAULT = cr.Config.From(
- DEPOT_TOOLS=os.path.join('{GOOGLE_CODE}', 'depot_tools'),
-)
-
-
-class Platform(cr.Plugin, cr.Plugin.Type):
- """Base class for implementing cr platforms.
-
- A platform is the target operating system being compiled for (linux android).
- """
-
- _platform_module = import_module('platform', None)
- SELECTOR = 'CR_PLATFORM'
-
- @classmethod
- def AddArguments(cls, parser):
- parser.add_argument(
- '--platform', dest=cls.SELECTOR,
- choices=cls.Choices(),
- default=None,
- help='Sets the target platform to use. Overrides ' + cls.SELECTOR
- )
-
- @classmethod
- def System(cls):
- return cls._platform_module.system()
-
- def __init__(self):
- super(Platform, self).__init__()
-
- def Activate(self, context):
- super(Platform, self).Activate(context)
- if _PathFixup not in context.fixup_hooks:
- context.fixup_hooks.append(_PathFixup)
-
- @cr.Plugin.activemethod
- def Prepare(self, context):
- pass
-
- @property
- def paths(self):
- return []
-
-
-def _PathFixup(context, key, value):
- """A context fixup that does platform specific modifications to the PATH."""
- if key == 'PATH':
- paths = []
- for entry in Platform.GetActivePlugin(context).paths:
- entry = context.Substitute(entry)
- if entry not in paths:
- paths.append(entry)
- for entry in value.split(os.path.pathsep):
- if entry.endswith(os.path.sep + 'goma'):
- pass
- elif entry not in paths:
- paths.append(entry)
- value = os.path.pathsep.join(paths)
- return value
diff --git a/chromium/tools/cr/cr/commands/__init__.py b/chromium/tools/cr/cr/commands/__init__.py
deleted file mode 100644
index 852ecbedbed..00000000000
--- a/chromium/tools/cr/cr/commands/__init__.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# 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.
-
-"""A package for all the built in commands.
-
-This package has all the standard commands built in to the cr tool.
-Most commands use actions to perform the real work.
-"""
diff --git a/chromium/tools/cr/cr/commands/build.py b/chromium/tools/cr/cr/commands/build.py
deleted file mode 100644
index 2d2c27fd178..00000000000
--- a/chromium/tools/cr/cr/commands/build.py
+++ /dev/null
@@ -1,81 +0,0 @@
-# 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.
-
-"""A module for the build commands."""
-
-import cr
-
-
-class BuildCommand(cr.Command):
- """The implementation of the build command.
-
- This is a thin shell over the Builder.Build method of the selected builder.
- """
-
- def __init__(self):
- super(BuildCommand, self).__init__()
- self.help = 'Build a target'
- self.description = ("""
- Uses the specified builder for the platform to bring the target
- up to date.
- """)
-
- def AddArguments(self, subparsers):
- parser = super(BuildCommand, self).AddArguments(subparsers)
- cr.Builder.AddArguments(self, parser)
- cr.Target.AddArguments(self, parser, allow_multiple=True)
- self.ConsumeArgs(parser, 'the builder')
- return parser
-
- def Run(self, context):
- return cr.Builder.Build(
- context, cr.Target.GetTargets(context), context.remains)
-
-
-class CleanCommand(cr.Command):
- """The implementation of the clean command.
-
- This is a thin shell over the Builder.Clean method of the selected builder.
- """
-
- def __init__(self):
- super(CleanCommand, self).__init__()
- self.help = 'Clean a target'
- self.description = (
- 'Uses the specified builder to clean out built files for the target.')
-
- def AddArguments(self, subparsers):
- parser = super(CleanCommand, self).AddArguments(subparsers)
- cr.Builder.AddArguments(self, parser)
- cr.Target.AddArguments(self, parser, allow_multiple=True)
- self.ConsumeArgs(parser, 'the builder')
- return parser
-
- def Run(self, context):
- return cr.Builder.Clean(
- context, cr.Target.GetTargets(context), context.remains)
-
-
-class RebuildCommand(cr.Command):
- """The implementation of the rebuild command.
-
- This is a thin shell over the Builder.Rebuild method of the selected builder.
- """
-
- def __init__(self):
- super(RebuildCommand, self).__init__()
- self.help = 'Rebuild a target'
- self.description = (
- 'Uses the specified builder for the platform to rebuild a target.')
-
- def AddArguments(self, subparsers):
- parser = super(RebuildCommand, self).AddArguments(subparsers)
- cr.Builder.AddArguments(self, parser)
- cr.Target.AddArguments(self, parser, allow_multiple=True)
- self.ConsumeArgs(parser, 'the builder')
- return parser
-
- def Run(self, context):
- return cr.Builder.Rebuild(
- context, cr.Target.GetTargets(context), context.remains)
diff --git a/chromium/tools/cr/cr/commands/command.py b/chromium/tools/cr/cr/commands/command.py
deleted file mode 100644
index d2e65a2be39..00000000000
--- a/chromium/tools/cr/cr/commands/command.py
+++ /dev/null
@@ -1,104 +0,0 @@
-# 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.
-"""Module to hold the Command plugin."""
-
-import argparse
-
-import cr
-
-
-class Command(cr.Plugin, cr.Plugin.Type):
- """Base class for implementing cr commands.
-
- These are the sub-commands on the command line, and modify the
- accepted remaining arguments.
- Commands in general do not implement the functionality directly, instead they
- run a sequence of actions.
- """
-
- @classmethod
- def Select(cls, context):
- """Called to select which command is active.
-
- This picks a command based on the first non - argument on the command
- line.
- Args:
- context: The context to select the command for.
- Returns:
- the selected command, or None if not specified on the command line.
- """
- if context.args:
- return getattr(context.args, '_command', None)
- return None
-
- def __init__(self):
- super(Command, self).__init__()
- self.help = 'Missing help: {0}'.format(self.__class__.__name__)
- self.description = None
- self.epilog = None
- self.parser = None
- self.requires_build_dir = True
-
- def AddArguments(self, subparsers):
- """Add arguments to the command line parser.
-
- Called by the main function to add the command to the command line parser.
- Commands that override this function to add more arguments must invoke
- this method.
- Args:
- subparsers: The argparse subparser manager to add this command to.
- Returns:
- the parser that was built for the command.
- """
- self.parser = subparsers.add_parser(
- self.name,
- add_help=False,
- help=self.help,
- description=self.description or self.help,
- epilog=self.epilog,
- )
- self.parser.set_defaults(_command=self)
- cr.Context.AddCommonArguments(self.parser)
- cr.base.client.AddArguments(self.parser)
- return self.parser
-
- def ConsumeArgs(self, parser, reason):
- """Adds a remaining argument consumer to the parser.
-
- A helper method that commands can use to consume all remaining arguments.
- Use for things like lists of targets.
- Args:
- parser: The parser to consume remains for.
- reason: The reason to give the user in the help text.
- """
- parser.add_argument(
- '_remains', metavar='arguments',
- nargs=argparse.REMAINDER,
- help='The additional arguments to {0}.'.format(reason)
- )
-
- def EarlyArgProcessing(self, context):
- """Called to make decisions based on speculative argument parsing.
-
- When this method is called, enough of the command line parsing has been
- done that the command is selected. This allows the command to make any
- modifications needed before the final argument parsing is done.
-
- Args:
- context: The context that is parsing the arguments.
- """
- cr.base.client.ApplyOutArgument(context)
-
- @cr.Plugin.activemethod
- def Run(self, context):
- """The main method of the command.
-
- This is the only thing that a command has to implement, and it should not
- call this base version.
- Args:
- context: The context to run the command in.
- """
- _ = context
- raise NotImplementedError('Must be overridden.')
-
diff --git a/chromium/tools/cr/cr/commands/debug.py b/chromium/tools/cr/cr/commands/debug.py
deleted file mode 100644
index 48fb513b3cc..00000000000
--- a/chromium/tools/cr/cr/commands/debug.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# 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.
-
-"""A module for the run command."""
-
-import cr
-
-
-class DebugCommand(cr.Command):
- """The implementation of the debug command.
-
- This is much like the run command except it launches the program under
- a debugger instead.
- """
-
- def __init__(self):
- super(DebugCommand, self).__init__()
- self.help = 'Debug a binary'
-
- def AddArguments(self, subparsers):
- parser = super(DebugCommand, self).AddArguments(subparsers)
- cr.Builder.AddArguments(self, parser)
- cr.Installer.AddArguments(self, parser)
- cr.Debugger.AddArguments(self, parser)
- cr.Target.AddArguments(self, parser)
- self.ConsumeArgs(parser, 'the binary')
- return parser
-
- def Run(self, context):
- targets = cr.Target.GetTargets(context)
- if not cr.Debugger.ShouldInvoke(context):
- cr.Debugger.Attach(context, targets, context.remains)
- elif cr.Installer.Skipping(context):
- cr.Debugger.Restart(context, targets, context.remains)
- else:
- cr.Builder.Build(context, targets, [])
- cr.Debugger.Kill(context, targets, [])
- cr.Installer.Reinstall(context, targets, [])
- cr.Debugger.Invoke(context, targets, context.remains)
diff --git a/chromium/tools/cr/cr/commands/info.py b/chromium/tools/cr/cr/commands/info.py
deleted file mode 100644
index 88af0f5aaa2..00000000000
--- a/chromium/tools/cr/cr/commands/info.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# 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.
-
-"""A module for the info implementation of Command."""
-
-import cr
-
-
-class InfoCommand(cr.Command):
- """The cr info command implementation."""
-
- def __init__(self):
- super(InfoCommand, self).__init__()
- self.help = 'Print information about the cr environment'
-
- def AddArguments(self, subparsers):
- parser = super(InfoCommand, self).AddArguments(subparsers)
- parser.add_argument(
- '-s', '--short', dest='_short',
- action='store_true', default=False,
- help='Short form results, useful for scripting.'
- )
- self.ConsumeArgs(parser, 'the environment')
- return parser
-
- def EarlyArgProcessing(self, context):
- if getattr(context.args, '_short', False):
- self.requires_build_dir = False
-
- def Run(self, context):
- if context.remains:
- for var in context.remains:
- if getattr(context.args, '_short', False):
- val = context.Find(var)
- if val is None:
- val = ''
- print val
- else:
- print var, '=', context.Find(var)
- else:
- cr.base.client.PrintInfo(context)
-
diff --git a/chromium/tools/cr/cr/commands/init.py b/chromium/tools/cr/cr/commands/init.py
deleted file mode 100644
index adcb4a180c4..00000000000
--- a/chromium/tools/cr/cr/commands/init.py
+++ /dev/null
@@ -1,180 +0,0 @@
-# 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.
-
-"""A module for the init command."""
-
-import os
-
-import cr
-
-# The set of variables to store in the per output configuration.
-OUT_CONFIG_VARS = [
- 'CR_VERSION',
- cr.Platform.SELECTOR, cr.BuildType.SELECTOR, cr.Arch.SELECTOR,
- 'CR_OUT_BASE', 'CR_OUT_FULL',
-]
-
-
-class InitCommand(cr.Command):
- """The implementation of the init command.
-
- The init command builds or updates an output directory.
- It then uses the Prepare and Select commands to get that directory
- ready to use.
- """
-
- def __init__(self):
- super(InitCommand, self).__init__()
- self.requires_build_dir = False
- self.help = 'Create and configure an output directory'
- self.description = ("""
- If the .cr directory is not present, build it and add
- the specified configuration.
- If the file already exists, update the configuration with any
- additional settings.
- """)
- self._settings = []
-
- def AddArguments(self, subparsers):
- """Overridden from cr.Command."""
- parser = super(InitCommand, self).AddArguments(subparsers)
- cr.Platform.AddArguments(parser)
- cr.BuildType.AddArguments(parser)
- cr.Arch.AddArguments(parser)
- cr.SelectCommand.AddPrepareArguments(parser)
- parser.add_argument(
- '-s', '--set', dest='_settings', metavar='settings',
- action='append',
- help='Configuration overrides.'
- )
- return parser
-
- def EarlyArgProcessing(self, context):
- base_settings = getattr(context.args, '_settings', None)
- if base_settings:
- self._settings.extend(base_settings)
- # Do not call super early processing, we do not want to apply
- # the output arg...
- out = cr.base.client.GetOutArgument(context)
- if out:
- # Output directory is fully specified
- # We need to deduce other settings from it's name
- base, buildtype = os.path.split(out)
- if not (base and buildtype):
- print 'Specified output directory must be two levels'
- exit(1)
- if not cr.BuildType.FindPlugin(buildtype):
- print 'Specified build type', buildtype, 'is not valid'
- print 'Must be one of', ','.join(p.name for p in cr.BuildType.Plugins())
- exit(1)
- if context.args.CR_BUILDTYPE and context.args.CR_BUILDTYPE != buildtype:
- print 'If --type and --out are both specified, they must match'
- print 'Got', context.args.CR_BUILDTYPE, 'and', buildtype
- exit(1)
- platform = context.args.CR_PLATFORM
- if not platform:
- # Try to guess platform based on output name
- platforms = [p.name for p in cr.Platform.AllPlugins()]
- matches = [p for p in platforms if p in base]
- if len(matches) != 1:
- print 'Platform is not set, and could not be guessed from', base
- print 'Should be one of', ','.join(platforms)
- if len(matches) > 1:
- print 'Matched all of', ','.join(matches)
- exit(1)
- platform = matches[0]
- context.derived.Set(
- CR_OUT_FULL=out,
- CR_OUT_BASE=base,
- CR_PLATFORM=platform,
- CR_BUILDTYPE=buildtype,
- )
- if not 'CR_OUT_BASE' in context:
- context.derived['CR_OUT_BASE'] = 'out_{CR_PLATFORM}'
- if not 'CR_OUT_FULL' in context:
- context.derived['CR_OUT_FULL'] = os.path.join(
- '{CR_OUT_BASE}', '{CR_BUILDTYPE}')
-
- def Run(self, context):
- """Overridden from cr.Command."""
- src_path = context.Get('CR_SRC')
- if not os.path.isdir(src_path):
- print context.Substitute('Path {CR_SRC} is not a valid client')
- exit(1)
-
- # Ensure we have an output directory override ready to fill in
- # This will only be missing if we are creating a brand new output
- # directory
- build_package = cr.auto.build
-
- # Collect the old version (and float convert)
- old_version = context.Find('CR_VERSION')
- try:
- old_version = float(old_version)
- except (ValueError, TypeError):
- old_version = 0.0
- is_new = not hasattr(build_package, 'config')
- if is_new:
-
- class FakeModule(object):
- OVERRIDES = cr.Config('OVERRIDES')
-
- def __init__(self):
- self.__name__ = 'config'
-
- old_version = None
- config = FakeModule()
- setattr(build_package, 'config', config)
- cr.plugin.ChainModuleConfigs(config)
-
- # Force override the version
- build_package.config.OVERRIDES.Set(CR_VERSION=cr.base.client.VERSION)
- # Add all the variables that we always want to have
- for name in OUT_CONFIG_VARS:
- value = context.Find(name)
- build_package.config.OVERRIDES[name] = value
- # Apply the settings from the command line
- for setting in self._settings:
- name, separator, value = setting.partition('=')
- name = name.strip()
- if not separator:
- value = True
- else:
- value = cr.Config.ParseValue(value.strip())
- build_package.config.OVERRIDES[name] = value
-
- # Run all the output directory init hooks
- for hook in InitHook.Plugins():
- hook.Run(context, old_version, build_package.config)
- # Redo activations, they might have changed
- cr.plugin.Activate(context)
-
- # Write out the new configuration, and select it as the default
- cr.base.client.WriteConfig(context, context.Get('CR_BUILD_DIR'),
- build_package.config.OVERRIDES.exported)
- # Prepare the platform in here, using the updated config
- cr.Platform.Prepare(context)
- cr.SelectCommand.Select(context)
-
-
-class InitHook(cr.Plugin, cr.Plugin.Type):
- """Base class for output directory initialization hooks.
-
- Implementations used to fix from old version to new ones live in the
- cr.fixups package.
- """
-
- def Run(self, context, old_version, config):
- """Run the initialization hook.
-
- This is invoked once per init invocation.
- Args:
- context: The context of the init command.
- old_version: The old version,
- 0.0 if the old version was bad or missing,
- None if building a new output direcory.
- config: The mutable config that will be written.
- """
- raise NotImplementedError('Must be overridden.')
-
diff --git a/chromium/tools/cr/cr/commands/install.py b/chromium/tools/cr/cr/commands/install.py
deleted file mode 100644
index 51a02b36eea..00000000000
--- a/chromium/tools/cr/cr/commands/install.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# 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.
-
-"""A module for the install command."""
-
-import cr
-
-
-class InstallCommand(cr.Command):
- """The implementation of the install command.
-
- This first uses Builder.Build to bring the target up to date, and then
- installs it using Installer.Reinstall.
- The builder installs its command line arguments, and you can use those to
- select which builder is used. Selecting the skip builder
- (using --builder=skip) bypasses the build stage.
- """
-
- def __init__(self):
- super(InstallCommand, self).__init__()
- self.help = 'Install a binary'
-
- def AddArguments(self, subparsers):
- parser = super(InstallCommand, self).AddArguments(subparsers)
- cr.Builder.AddArguments(self, parser)
- cr.Installer.AddArguments(self, parser)
- cr.Target.AddArguments(self, parser, allow_multiple=True)
- self.ConsumeArgs(parser, 'the installer')
- return parser
-
- def Run(self, context):
- targets = cr.Target.GetTargets(context)
- if not cr.Installer.Skipping(context):
- cr.Builder.Build(context, targets, [])
- cr.Installer.Reinstall(context, targets, context.remains)
diff --git a/chromium/tools/cr/cr/commands/prepare.py b/chromium/tools/cr/cr/commands/prepare.py
deleted file mode 100644
index 57abccef6bb..00000000000
--- a/chromium/tools/cr/cr/commands/prepare.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# 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.
-
-"""A module for the prepare command."""
-
-import cr
-
-
-class PrepareCommand(cr.Command):
- """The implementation of the prepare command.
-
- The prepare command is used to perform the steps needed to get an output
- directory ready to use. These should not be the kind of things that need to
- happen every time you build something, but the rarer things that you re-do
- only when you get or add new source files, or change your build options.
- This delegates all it's behavior to implementations of PrepareOut. These will
- (mostly) be in the cr.actions package.
- """
-
- def __init__(self):
- super(PrepareCommand, self).__init__()
- self.help = 'Prepares an output directory'
- self.description = ("""
- This does any preparation needed for the output directory, such as
- running gyp.
- """)
-
- def Run(self, context):
- self.Prepare(context)
-
- @classmethod
- def Prepare(cls, context):
- for preparation in PrepareOut.Plugins():
- preparation.Prepare(context)
-
-
-class PrepareOut(cr.Plugin, cr.Plugin.Type):
- """Base class for output directory preparation plugins.
-
- See PrepareCommand for details.
- """
-
- def Prepare(self, context):
- """All PrepareOut plugins must override this method to do their work."""
- _ = context
- raise NotImplementedError('Must be overridden.')
-
diff --git a/chromium/tools/cr/cr/commands/run.py b/chromium/tools/cr/cr/commands/run.py
deleted file mode 100644
index 9b57d9439c3..00000000000
--- a/chromium/tools/cr/cr/commands/run.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# 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.
-
-"""A module for the run command."""
-
-import cr
-
-
-class RunCommand(cr.Command):
- """The implementation of the run command.
-
- This first uses Builder to bring the target up to date.
- It then uses Installer to install the target (if needed), and
- finally it uses Runner to run the target.
- You can use skip version to not perform any of these steps.
- """
-
- def __init__(self):
- super(RunCommand, self).__init__()
- self.help = 'Invoke a target'
-
- def AddArguments(self, subparsers):
- parser = super(RunCommand, self).AddArguments(subparsers)
- cr.Builder.AddArguments(self, parser)
- cr.Installer.AddArguments(self, parser)
- cr.Runner.AddArguments(self, parser)
- cr.Target.AddArguments(self, parser, allow_multiple=True)
- self.ConsumeArgs(parser, 'the binary')
- return parser
-
- def Run(self, context):
- targets = cr.Target.GetTargets(context)
- test_targets = [target for target in targets if target.is_test]
- run_targets = [target for target in targets if not target.is_test]
- if cr.Installer.Skipping(context):
- # No installer, only build test targets
- build_targets = test_targets
- else:
- build_targets = targets
- if build_targets:
- cr.Builder.Build(context, build_targets, [])
- # See if we can use restart when not installing
- if cr.Installer.Skipping(context):
- cr.Runner.Restart(context, targets, context.remains)
- else:
- cr.Runner.Kill(context, run_targets, [])
- cr.Installer.Reinstall(context, run_targets, [])
- cr.Runner.Invoke(context, targets, context.remains)
-
diff --git a/chromium/tools/cr/cr/commands/select.py b/chromium/tools/cr/cr/commands/select.py
deleted file mode 100644
index 58cebdd384d..00000000000
--- a/chromium/tools/cr/cr/commands/select.py
+++ /dev/null
@@ -1,61 +0,0 @@
-# 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.
-
-"""A module for the select command."""
-
-import cr
-
-# The set of variables SELECT writes into the client plugin to control the
-# active output directory.
-SELECT_OUT_VARS = ['CR_OUT_FULL']
-
-
-class SelectCommand(cr.Command):
- """The implementation of the select command.
-
- The select command is used to set the default output directory used by all
- other commands. It does this by writing out a plugin into the client root
- that sets the active output path.
- """
-
- def __init__(self):
- super(SelectCommand, self).__init__()
- self.help = 'Select an output directory'
- self.description = ("""
- This makes the specified output directory the default for all future
- operations. It also invokes prepare on that directory.
- """)
-
- def AddArguments(self, subparsers):
- parser = super(SelectCommand, self).AddArguments(subparsers)
- self.AddPrepareArguments(parser)
- return parser
-
- @classmethod
- def AddPrepareArguments(cls, parser):
- parser.add_argument(
- '--no-prepare', dest='_no_prepare',
- action='store_true', default=False,
- help='Don\'t prepare the output directory.'
- )
-
- def Run(self, context):
- self.Select(context)
-
- @classmethod
- def Select(cls, context):
- """Performs the select.
-
- This is also called by the init command to auto select the new output
- directory.
- Args:
- context: The cr Context to select in.
- """
- cr.base.client.WriteConfig(
- context, context.Get('CR_CLIENT_PATH'), dict(
- CR_OUT_FULL=context.Get('CR_OUT_FULL')))
- cr.base.client.PrintInfo(context)
- # Now we run the post select actions
- if not getattr(context.args, '_no_prepare', None):
- cr.PrepareCommand.Prepare(context)
diff --git a/chromium/tools/cr/cr/commands/shell.py b/chromium/tools/cr/cr/commands/shell.py
deleted file mode 100644
index 452ebb74606..00000000000
--- a/chromium/tools/cr/cr/commands/shell.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# 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.
-
-"""A module for the shell command."""
-
-import os
-import tempfile
-
-import cr
-
-
-class ShellCommand(cr.Command):
- """The implementation of the shell command.
-
- The shell command is the escape hatch that lets user run any program in the
- same environment that cr would use if it were running it.
- """
-
- def __init__(self):
- super(ShellCommand, self).__init__()
- self.help = 'Launch a shell'
- self.description = ("""
- If no arguments are present, this launches an interactive system
- shell (ie bash) with the environment modified to that used for the
- build systems.
- If any arguments are present, they are used as a command line to run
- in that shell.
- This allows you to run commands that are not yet available natively
- in cr.
- """)
-
- def AddArguments(self, subparsers):
- parser = super(ShellCommand, self).AddArguments(subparsers)
- self.ConsumeArgs(parser, 'the shell')
- return parser
-
- def Run(self, context):
- if context.remains:
- cr.Host.Shell(context, *context.remains)
- return
- # If we get here, we are trying to launch an interactive shell
- shell = os.environ.get('SHELL', None)
- if shell is None:
- print 'Don\'t know how to run a shell on this system'
- elif shell.endswith('bash'):
- ps1 = '[CR] ' + os.environ.get('PS1', '')
- with tempfile.NamedTemporaryFile() as rcfile:
- rcfile.write('source ~/.bashrc\nPS1="'+ps1+'"')
- rcfile.flush()
- cr.Host.Execute(context, shell, '--rcfile', rcfile.name)
- else:
- cr.Host.Execute(context, shell)
diff --git a/chromium/tools/cr/cr/commands/sync.py b/chromium/tools/cr/cr/commands/sync.py
deleted file mode 100644
index cef9b7a6f4a..00000000000
--- a/chromium/tools/cr/cr/commands/sync.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# 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.
-
-"""A module for the sync command."""
-
-import os.path
-
-import cr
-
-
-class SyncCommand(cr.Command):
- """The implementation of the sync command.
-
- This command is a very thin shim over the gclient sync, and should remain so.
- The only significant thing it adds is that the environment is set up so that
- the run-hooks will do their work in the selected output directory.
- """
-
- # The configuration loaded to support this command.
- DEFAULT = cr.Config.From(
- GCLIENT_BINARY=os.path.join('{DEPOT_TOOLS}', 'gclient'),
- )
-
- # A placeholder for the detected gclient environment
- DETECTED = cr.Config('DETECTED')
-
- def __init__(self):
- super(SyncCommand, self).__init__()
- self.help = 'Sync the source tree'
- self.description = 'Run gclient sync with the right environment.'
-
- def AddArguments(self, subparsers):
- parser = super(SyncCommand, self).AddArguments(subparsers)
- self.ConsumeArgs(parser, 'gclient')
- # TODO(iancottrell): clean no-hooks support would be nice.
- return parser
-
- def Run(self, context):
- # TODO(iancottrell): we should probably run the python directly,
- # rather than the shell wrapper
- # TODO(iancottrell): try to help out when the local state is not a good
- # one to do a sync in
- cr.Host.Execute(context, '{GCLIENT_BINARY}', 'sync', *context.remains)
-
-
-def _AutoDetectGClient():
- """Attempts to detect gclient and it's parent repository."""
- gclient_binaries = cr.Host.SearchPath('gclient')
- if gclient_binaries:
- SyncCommand.DETECTED.Set(GCLIENT_BINARY=gclient_binaries[0])
- SyncCommand.DETECTED.Set(DEPOT_TOOLS=os.path.dirname(gclient_binaries[0]))
-
-# Invoke the auto detection
-_AutoDetectGClient()
diff --git a/chromium/tools/cr/cr/config.py b/chromium/tools/cr/cr/config.py
deleted file mode 100644
index a19b837a446..00000000000
--- a/chromium/tools/cr/cr/config.py
+++ /dev/null
@@ -1,240 +0,0 @@
-# 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.
-
-"""Configuration variable management for the cr tool.
-
-This holds the classes that support the hierarchical variable management used
-in the cr tool to provide all the command configuration controls.
-"""
-
-import string
-
-import cr.visitor
-
-_PARSE_CONSTANT_VALUES = [None, True, False]
-_PARSE_CONSTANTS = dict((str(value), value) for value in _PARSE_CONSTANT_VALUES)
-
-# GLOBALS is the singleton used to tie static global configuration objects
-# together.
-GLOBALS = []
-
-
-class _MissingToErrorFormatter(string.Formatter):
- """A string formatter used in value resolve.
-
- The main extra it adds is a new conversion specifier 'e' that throws a
- KeyError if it could not find the value.
- This allows a string value to use {A_KEY!e} to indicate that it is a
- formatting error if A_KEY is not present.
- """
-
- def convert_field(self, value, conversion):
- if conversion == 'e':
- result = str(value)
- if not result:
- raise KeyError('unknown')
- return result
- return super(_MissingToErrorFormatter, self).convert_field(
- value, conversion)
-
-
-class _Tracer(object):
- """Traces variable lookups.
-
- This adds a hook to a config object, and uses it to track all variable
- lookups that happen and add them to a trail. When done, it removes the hook
- again. This is used to provide debugging information about what variables are
- used in an operation.
- """
-
- def __init__(self, config):
- self.config = config
- self.trail = []
-
- def __enter__(self):
- self.config.fixup_hooks.append(self._Trace)
- return self
-
- def __exit__(self, *_):
- self.config.fixup_hooks.remove(self._Trace)
- self.config.trail = self.trail
- return False
-
- def _Trace(self, _, key, value):
- self.trail.append((key, value))
- return value
-
-
-class Config(cr.visitor.Node):
- """The main variable holding class.
-
- This holds a set of unresolved key value pairs, and the set of child Config
- objects that should be referenced when looking up a key.
- Key search is one in a pre-order traversal, and new children are prepended.
- This means parents override children, and the most recently added child
- overrides the rest.
-
- Values can be simple python types, callable dynamic values, or strings.
- If the value is a string, it is assumed to be a standard python format string
- where the root config object is used to resolve the keys. This allows values
- to refer to variables that are overriden in another part of the hierarchy.
- """
-
- @classmethod
- def From(cls, *args, **kwargs):
- """Builds an unnamed config object from a set of key,value args."""
- return Config('??').Apply(args, kwargs)
-
- @classmethod
- def If(cls, condition, true_value, false_value=''):
- """Returns a config value that selects a value based on the condition.
-
- Args:
- condition: The variable name to select a value on.
- true_value: The value to use if the variable is True.
- false_value: The value to use if the resolved variable is False.
- Returns:
- A dynamic value.
- """
- def Resolve(context):
- test = context.Get(condition)
- if test:
- value = true_value
- else:
- value = false_value
- return context.Substitute(value)
- return Resolve
-
- @classmethod
- def Optional(cls, value, alternate=''):
- """Returns a dynamic value that defaults to an alternate.
-
- Args:
- value: The main value to resolve.
- alternate: The value to use if the main value does not resolve.
- Returns:
- value if it resolves, alternate otherwise.
- """
- def Resolve(context):
- try:
- return context.Substitute(value)
- except KeyError:
- return context.Substitute(alternate)
- return Resolve
-
- def __init__(self, name='--', literal=False, export=None, enabled=True):
- super(Config, self).__init__(name=name, enabled=enabled, export=export)
- self._literal = literal
- self._formatter = _MissingToErrorFormatter()
- self.fixup_hooks = []
- self.trail = []
-
- @property
- def literal(self):
- return self._literal
-
- def Substitute(self, value):
- return self._formatter.vformat(str(value), (), self)
-
- def Resolve(self, visitor, key, value):
- """Resolves a value to it's final form.
-
- Raw values can be callable, simple values, or contain format strings.
- Args:
- visitor: The vistior asking to resolve a value.
- key: The key being visited.
- value: The unresolved value associated with the key.
- Returns:
- the fully resolved value.
- """
- error = None
- if callable(value):
- value = value(self)
- # Using existence of value.swapcase as a proxy for is a string
- elif hasattr(value, 'swapcase'):
- if not visitor.current_node.literal:
- try:
- value = self.Substitute(value)
- except KeyError as e:
- error = e
- return self.Fixup(key, value), error
-
- def Fixup(self, key, value):
- for hook in self.fixup_hooks:
- value = hook(self, key, value)
- return value
-
- @staticmethod
- def ParseValue(value):
- """Converts a string to a value.
-
- Takes a string from something like an environment variable, and tries to
- build an internal typed value. Recognizes Null, booleans, and numbers as
- special.
- Args:
- value: The the string value to interpret.
- Returns:
- the parsed form of the value.
- """
- if value in _PARSE_CONSTANTS:
- return _PARSE_CONSTANTS[value]
- try:
- return int(value)
- except ValueError:
- pass
- try:
- return float(value)
- except ValueError:
- pass
- return value
-
- def _Set(self, key, value):
- # early out if the value did not change, so we don't call change callbacks
- if value == self._values.get(key, None):
- return
- self._values[key] = value
- self.NotifyChanged()
- return self
-
- def ApplyMap(self, arg):
- for key, value in arg.items():
- self._Set(key, value)
- return self
-
- def Apply(self, args, kwargs):
- """Bulk set variables from arguments.
-
- Intended for internal use by the Set and From methods.
- Args:
- args: must be either a dict or something that can build a dict.
- kwargs: must be a dict.
- Returns:
- self for easy chaining.
- """
- if len(args) == 1:
- arg = args[0]
- if isinstance(arg, dict):
- self.ApplyMap(arg)
- else:
- self.ApplyMap(dict(arg))
- elif len(args) > 1:
- self.ApplyMap(dict(args))
- self.ApplyMap(kwargs)
- return self
-
- def Set(self, *args, **kwargs):
- return self.Apply(args, kwargs)
-
- def Trace(self):
- return _Tracer(self)
-
- def __getitem__(self, key):
- return self.Get(key)
-
- def __setitem__(self, key, value):
- self._Set(key, value)
-
- def __contains__(self, key):
- return self.Find(key) is not None
-
diff --git a/chromium/tools/cr/cr/context.py b/chromium/tools/cr/cr/context.py
deleted file mode 100644
index 3cc32170641..00000000000
--- a/chromium/tools/cr/cr/context.py
+++ /dev/null
@@ -1,217 +0,0 @@
-# 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.
-
-"""Application context management for the cr tool.
-
-Contains all the support code to enable the shared context used by the cr tool.
-This includes the configuration variables and command line handling.
-"""
-
-import argparse
-import os
-import cr
-
-
-class _DumpVisitor(cr.visitor.ExportVisitor):
- """A visitor that prints all variables in a config hierarchy."""
-
- def __init__(self, with_source):
- super(_DumpVisitor, self).__init__({})
- self.to_dump = {}
- self.with_source = with_source
-
- def StartNode(self):
- if self.with_source:
- self._DumpNow()
- super(_DumpVisitor, self).StartNode()
-
- def EndNode(self):
- if self.with_source or not self.stack:
- self._DumpNow()
- super(_DumpVisitor, self).EndNode()
- if not self.stack:
- self._DumpNow()
-
- def Visit(self, key, value):
- super(_DumpVisitor, self).Visit(key, value)
- if key in self.store:
- str_value = str(self.store[key])
- if str_value != str(os.environ.get(key, None)):
- self.to_dump[key] = str_value
-
- def _DumpNow(self):
- if self.to_dump:
- if self.with_source:
- print 'From', self.Where()
- for key in sorted(self.to_dump.keys()):
- print ' ', key, '=', self.to_dump[key]
- self.to_dump = {}
-
-
-class _ShowHelp(argparse.Action):
- """An argparse action to print the help text.
-
- This is like the built in help text printing action, except it knows to do
- nothing when we are just doing the early speculative parse of the args.
- """
-
- def __call__(self, parser, namespace, values, option_string=None):
- if parser.context.speculative:
- return
- command = cr.Command.GetActivePlugin(parser.context)
- if command:
- command.parser.print_help()
- else:
- parser.print_help()
- exit(1)
-
-
-class _ArgumentParser(argparse.ArgumentParser):
- """An extension of an ArgumentParser to enable speculative parsing.
-
- It supports doing an early parse that never produces errors or output, to do
- early collection of arguments that may affect what other arguments are
- allowed.
- """
-
- def error(self, message):
- if self.context.speculative:
- return
- super(_ArgumentParser, self).error(message)
-
- def parse_args(self):
- if self.context.speculative:
- result = self.parse_known_args()
- if result:
- return result[0]
- return None
- return super(_ArgumentParser, self).parse_args()
-
- def parse_known_args(self, args=None, namespace=None):
- result = super(_ArgumentParser, self).parse_known_args(args, namespace)
- if result is None:
- return namespace, None
- return result
-
-
-class Context(cr.config.Config, cr.loader.AutoExport):
- """The base context holder for the cr system.
-
- This is passed to almost all methods in the cr system, and holds the common
- context they all shared. Mostly this is stored in the Config structure of
- variables.
- """
-
- def __init__(self, description='', epilog=''):
- super(Context, self).__init__('Context')
- self._args = None
- self._arguments = cr.config.Config('ARGS')
- self._derived = cr.config.Config('DERIVED')
- self.AddChildren(*cr.config.GLOBALS)
- self.AddChildren(
- cr.config.Config('ENVIRONMENT', literal=True, export=True).Set(
- {k: self.ParseValue(v) for k, v in os.environ.items()}),
- self._arguments,
- self._derived,
- )
- # Build the command line argument parser
- self._parser = _ArgumentParser(add_help=False, description=description,
- epilog=epilog)
- self._parser.context = self
- self._subparsers = self.parser.add_subparsers()
- # Add the global arguments
- self.AddCommonArguments(self._parser)
- self._gclient = {}
-
- def AddSubParser(self, source):
- parser = source.AddArguments(self._subparsers)
- parser.context = self
-
- @classmethod
- def AddCommonArguments(cls, parser):
- """Adds the command line arguments common to all commands in cr."""
- parser.add_argument(
- '-h', '--help',
- action=_ShowHelp, nargs=0,
- help='show the help message and exit.'
- )
- parser.add_argument(
- '--dry-run', dest='CR_DRY_RUN',
- action='store_true', default=None,
- help="""
- Don't execute commands, just print them. Implies verbose.
- Overrides CR_DRY_RUN
- """
- )
- parser.add_argument(
- '-v', '--verbose', dest='CR_VERBOSE',
- action='count', default=None,
- help="""
- Print information about commands being performed.
- Repeating multiple times increases the verbosity level.
- Overrides CR_VERBOSE
- """
- )
-
- @property
- def args(self):
- return self._args
-
- @property
- def arguments(self):
- return self._arguments
-
- @property
- def speculative(self):
- return self._speculative
-
- @property
- def derived(self):
- return self._derived
-
- @property
- def parser(self):
- return self._parser
-
- @property
- def remains(self):
- remains = getattr(self._args, '_remains', None)
- if remains and remains[0] == '--':
- remains = remains[1:]
- return remains
-
- @property
- def verbose(self):
- if self.autocompleting:
- return False
- return self.Find('CR_VERBOSE') or self.dry_run
-
- @property
- def dry_run(self):
- if self.autocompleting:
- return True
- return self.Find('CR_DRY_RUN')
-
- @property
- def autocompleting(self):
- return 'COMP_WORD' in os.environ
-
- @property
- def gclient(self):
- if not self._gclient:
- self._gclient = cr.base.client.ReadGClient(self)
- return self._gclient
-
- def ParseArgs(self, speculative=False):
- cr.plugin.DynamicChoices.only_active = not speculative
- self._speculative = speculative
- self._args = self._parser.parse_args()
- self._arguments.Wipe()
- if self._args:
- self._arguments.Set(
- {k: v for k, v in vars(self._args).items() if v is not None})
-
- def DumpValues(self, with_source):
- _DumpVisitor(with_source).VisitNode(self)
-
diff --git a/chromium/tools/cr/cr/fixups/__init__.py b/chromium/tools/cr/cr/fixups/__init__.py
deleted file mode 100644
index 86bfa2ad3cc..00000000000
--- a/chromium/tools/cr/cr/fixups/__init__.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# 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.
-
-"""A package for all the version fixups.
-
-All the code in this package is there to fix up older output directories and
-clients to a form that works with the current version of cr.
-"""
diff --git a/chromium/tools/cr/cr/fixups/arch.py b/chromium/tools/cr/cr/fixups/arch.py
deleted file mode 100644
index e6ac81c5083..00000000000
--- a/chromium/tools/cr/cr/fixups/arch.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# 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.
-
-"""A module for architecture output directory fixups."""
-
-import cr
-
-
-class _ArchInitHookHelper(cr.InitHook):
- """Base class helper for CR_ARCH value fixups."""
-
- def _VersionTest(self, old_version):
- _ = old_version
- return True
-
- def _ArchConvert(self, old_arch):
- return old_arch
-
- def Run(self, context, old_version, config):
- if old_version is None or not self._VersionTest(old_version):
- return
- old_arch = config.OVERRIDES.Find(cr.Arch.SELECTOR)
- new_arch = self._ArchConvert(old_arch)
- if new_arch != old_arch:
- print '** Fixing architecture from {0} to {1}'.format(old_arch, new_arch)
- config.OVERRIDES[cr.Arch.SELECTOR] = new_arch
-
-
-class WrongArchDefaultInitHook(_ArchInitHookHelper):
- """Fixes bad initial defaults.
-
- In the initial versions of cr before output directories were versioned
- it was writing invalid architecture defaults. This detects that case and sets
- the architecture to the current default instead.
- """
-
- def _VersionTest(self, old_version):
- return old_version <= 0.0
-
- def _ArchConvert(self, _):
- return cr.Arch.default.name
-
-
-class MipsAndArmRenameInitHook(_ArchInitHookHelper):
- """Fixes rename of Mips and Arm to Mips32 and Arm32."""
-
- def _ArchConvert(self, old_arch):
- if old_arch == 'mips':
- return cr.Mips32Arch.GetInstance().name
- if old_arch == 'arm':
- return cr.Arm32Arch.GetInstance().name
- return old_arch
-
diff --git a/chromium/tools/cr/cr/loader.py b/chromium/tools/cr/cr/loader.py
deleted file mode 100644
index ecb251b117d..00000000000
--- a/chromium/tools/cr/cr/loader.py
+++ /dev/null
@@ -1,123 +0,0 @@
-# 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.
-
-"""Module scan and load system.
-
-The main interface to this module is the Scan function, which triggers a
-recursive scan of all packages and modules below cr, with modules being
-imported as they are found.
-This allows all the plugins in the system to self register.
-The aim is to make writing plugins as simple as possible, minimizing the
-boilerplate so the actual functionality is clearer.
-"""
-from importlib import import_module
-import os
-import sys
-
-import cr
-
-# This is the name of the variable inserted into modules to track which
-# scanners have been applied.
-_MODULE_SCANNED_TAG = '_CR_MODULE_SCANNED'
-
-
-class AutoExport(object):
- """A marker for classes that should be promoted up into the cr namespace."""
-
-
-def _AutoExportScanner(module):
- """Scan the modules for things that need wiring up automatically."""
- for name, value in module.__dict__.items():
- if isinstance(value, type) and issubclass(value, AutoExport):
- # Add this straight to the cr module.
- if not hasattr(cr, name):
- setattr(cr, name, value)
-
-
-scan_hooks = [_AutoExportScanner]
-
-
-def _Import(name):
- """Import a module or package if it is not already imported."""
- module = sys.modules.get(name, None)
- if module is not None:
- return module
- return import_module(name, None)
-
-
-def _ScanModule(module):
- """Runs all the scan_hooks for a module."""
- scanner_tags = getattr(module, _MODULE_SCANNED_TAG, None)
- if scanner_tags is None:
- # First scan, add the scanned marker set.
- scanner_tags = set()
- setattr(module, _MODULE_SCANNED_TAG, scanner_tags)
- for scan in scan_hooks:
- if scan not in scanner_tags:
- scanner_tags.add(scan)
- scan(module)
-
-
-def _ScanPackage(package):
- """Scan a package for child packages and modules."""
- modules = []
- # Recurse sub folders.
- for path in package.__path__:
- try:
- basenames = os.listdir(path)
- except OSError:
- basenames = []
- for basename in basenames:
- fullpath = os.path.join(path, basename)
- if os.path.isdir(fullpath):
- name = '.'.join([package.__name__, basename])
- child = _Import(name)
- modules.extend(_ScanPackage(child))
- elif basename.endswith('.py') and not basename.startswith('_'):
- name = '.'.join([package.__name__, basename[:-3]])
- modules.append(name)
- return modules
-
-
-def Scan():
- """Scans from the cr package down, loading modules as needed.
-
- This finds all packages and modules below the cr package, by scanning the
- file system. It imports all the packages, and then runs post import hooks on
- each module to do any automated work. One example of this is the hook that
- finds all classes that extend AutoExport and copies them up into the cr
- namespace directly.
-
- Modules are allowed to refer to each other, their import will be retried
- until it succeeds or no progress can be made on any module.
- """
- remains = _ScanPackage(cr)
- progress = True
- modules = []
- while progress and remains:
- progress = False
- todo = remains
- remains = []
- for name in todo:
- try:
- module = _Import(name)
- modules.append(module)
- _ScanModule(module)
- progress = True
- except: # sink all errors here pylint: disable=bare-except
- # Try this one again, if progress was made on a possible dependency
- remains.append(name)
- if remains:
- # There are modules that won't import in any order.
- # Print all the errors as we can't determine root cause.
- for name in remains:
- try:
- _Import(name)
- except ImportError as e:
- print 'Failed importing', name, ':', e
- exit(1)
- # Now scan all the found modules one more time.
- # This happens after all imports, in case any imports register scan hooks.
- for module in modules:
- _ScanModule(module)
diff --git a/chromium/tools/cr/cr/plugin.py b/chromium/tools/cr/cr/plugin.py
deleted file mode 100644
index 05a02cb1b19..00000000000
--- a/chromium/tools/cr/cr/plugin.py
+++ /dev/null
@@ -1,320 +0,0 @@
-# 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.
-
-"""The plugin management system for the cr tool.
-
-This holds the Plugin class and supporting code, that controls how plugins are
-found and used.
-The module registers a scan hook with the cr.loader system to enable it to
-discover plugins as they are loaded.
-"""
-from operator import attrgetter
-
-import cr
-import cr.loader
-
-
-def _PluginConfig(name, only_enabled=False, only_active=False):
- config = cr.Config(name)
- config.only_active = only_active
- config.only_enabled = only_enabled or config.only_active
- config.property_name = name.lower() + '_config'
- return config
-
-_selectors = cr.Config('PRIORITY')
-CONFIG_TYPES = [
- # Lowest priority, always there default values.
- _PluginConfig('DEFAULT').AddChild(_selectors),
- # Only turned on if the plugin is enabled.
- _PluginConfig('ENABLED', only_enabled=True),
- # Only turned on while the plugin is the active one.
- _PluginConfig('ACTIVE', only_active=True),
- # Holds detected values for active plugins.
- _PluginConfig('DETECTED', only_active=True),
- # Holds overrides, used in custom setup plugins.
- _PluginConfig('OVERRIDES'),
-]
-
-cr.config.GLOBALS.extend(CONFIG_TYPES)
-_plugins = {}
-
-
-# Actually a decorator, so pylint: disable=invalid-name
-class classproperty(object):
- """This adds a property to a class.
-
- This is like a simple form of @property except it is for the class, rather
- than instances of the class. Only supports readonly properties.
- """
-
- def __init__(self, getter):
- self.getter = getter
-
- def __get__(self, instance, owner):
- return self.getter(owner)
-
-
-class DynamicChoices(object):
- """Manages the list of active plugins for command line options.
-
- Looks like a simple iterable, but it can change as the underlying plugins
- arrive and enable/disable themselves. This allows it to be used as the
- set of valid choices for the argparse command line options.
- """
-
- # If this is True, all DynamicChoices only return active plugins.
- # If false, all plugins are included.
- only_active = True
-
- def __init__(self, cls):
- self.cls = cls
-
- def __contains__(self, name):
- return self.cls.FindPlugin(name, self.only_active) is not None
-
- def __iter__(self):
- return [p.name for p in self.cls.Plugins()].__iter__()
-
-
-def _FindRoot(cls):
- if Plugin.Type in cls.__bases__:
- return cls
- for base in cls.__bases__:
- result = _FindRoot(base)
- if result is not None:
- return result
- return None
-
-
-class Plugin(cr.loader.AutoExport):
- """Base class for managing registered plugin types."""
-
- class Type(object):
- """Base class that tags a class as an abstract plugin type."""
-
- class activemethod(object):
- """A decorator that delegates a static method to the active plugin.
-
- Makes a static method that delegates to the equivalent method on the
- active instance of the plugin type.
- """
-
- def __init__(self, method):
- self.method = method
-
- def __get__(self, instance, owner):
- def unbound(context, *args, **kwargs):
- active = owner.GetActivePlugin(context)
- if not active:
- print 'No active', owner.__name__
- exit(1)
- method = getattr(active, self.method.__name__, None)
- if not method:
- print owner.__name__, 'does not support', self.method.__name__
- exit(1)
- return method(context, *args, **kwargs)
-
- def bound(context, *args, **kwargs):
- return self.method(instance, context, *args, **kwargs)
-
- if instance is None:
- return unbound
- return bound
-
- def __init__(self):
- # Default the name to the lowercased class name.
- self._name = self.__class__.__name__.lower()
- # Strip the common suffix if present.
- self._root = _FindRoot(self.__class__)
- rootname = self._root.__name__.lower()
- if self._name.endswith(rootname) and self.__class__ != self._root:
- self._name = self._name[:-len(rootname)]
- for config_root in CONFIG_TYPES:
- config = cr.Config()
- setattr(self, config_root.property_name, config)
- self._is_active = False
-
- def Init(self):
- """Post plugin registration initialisation method."""
- for config_root in CONFIG_TYPES:
- config = getattr(self, config_root.property_name)
- config.name = self.name
- if config_root.only_active and not self.is_active:
- config.enabled = False
- if config_root.only_enabled and not self.enabled:
- config.enabled = False
- child = getattr(self.__class__, config_root.name, None)
- if child is not None:
- child.name = self.__class__.__name__
- config.AddChild(child)
- config_root.AddChild(config)
-
- @property
- def name(self):
- return self._name
-
- @property
- def priority(self):
- return 0
-
- @property
- def enabled(self):
- # By default all non type classes are enabled.
- return Plugin.Type not in self.__class__.__bases__
-
- @property
- def is_active(self):
- return self._is_active
-
- def Activate(self, unused_context):
- assert not self._is_active
- self._is_active = True
- for config_root in CONFIG_TYPES:
- if config_root.only_active:
- getattr(self, config_root.property_name).enabled = True
-
- def Deactivate(self):
- assert self._is_active
- self._is_active = False
- for config_root in CONFIG_TYPES:
- if config_root.only_active:
- getattr(self, config_root.property_name).enabled = False
-
- @classmethod
- def GetInstance(cls):
- """Gets an instance of this plugin.
-
- This looks in the plugin registry, and if an instance is not found a new
- one is built and registered.
-
- Returns:
- The registered plugin instance.
- """
- plugin = _plugins.get(cls, None)
- if plugin is None:
- # Build a new instance of cls, and register it as the main instance.
- plugin = cls()
- _plugins[cls] = plugin
- # Wire up the hierarchy for Config objects.
- for name, value in cls.__dict__.items():
- if isinstance(value, cr.Config):
- for base in cls.__bases__:
- child = getattr(base, name, None)
- if child is not None:
- value.AddChild(child)
- plugin.Init()
- return plugin
-
- @classmethod
- def AllPlugins(cls):
- # Don't yield abstract roots, just children. We detect roots as direct
- # sub classes of Plugin.Type
- if Plugin.Type not in cls.__bases__:
- yield cls.GetInstance()
- for child in cls.__subclasses__():
- for p in child.AllPlugins():
- yield p
-
- @classmethod
- def UnorderedPlugins(cls):
- """Returns all enabled plugins of type cls, in undefined order."""
- plugin = cls.GetInstance()
- if plugin.enabled:
- yield plugin
- for child in cls.__subclasses__():
- for p in child.UnorderedPlugins():
- yield p
-
- @classmethod
- def Plugins(cls):
- """Return all enabled plugins of type cls in priority order."""
- return sorted(cls.UnorderedPlugins(),
- key=attrgetter('priority'), reverse=True)
-
- @classmethod
- def Choices(cls):
- return DynamicChoices(cls)
-
- @classmethod
- def FindPlugin(cls, name, only_active=True):
- if only_active:
- plugins = cls.UnorderedPlugins()
- else:
- plugins = cls.AllPlugins()
- for plugin in plugins:
- if plugin.name == name or plugin.__class__.__name__ == name:
- return plugin
- return None
-
- @classmethod
- def GetPlugin(cls, name):
- result = cls.FindPlugin(name)
- if result is None:
- raise KeyError(name)
- return result
-
- @classmethod
- def GetAllActive(cls):
- return [plugin for plugin in cls.UnorderedPlugins() if plugin.is_active]
-
- @classmethod
- def GetActivePlugin(cls, context):
- """Gets the active plugin of type cls.
-
- This method will select a plugin to be the active one, and will activate
- the plugin if needed.
- Args:
- context: The context to select the active plugin for.
- Returns:
- the plugin that is currently active.
- """
- actives = cls.GetAllActive()
- plugin = cls.Select(context)
- for active in actives:
- if active != plugin:
- active.Deactivate()
- if plugin and not plugin.is_active:
- plugin.Activate(context)
- return plugin
-
- @classproperty
- def default(cls):
- """Returns the plugin that should be used if the user did not choose one."""
- result = None
- for plugin in cls.UnorderedPlugins():
- if not result or plugin.priority > result.priority:
- result = plugin
- return result
-
- @classmethod
- def Select(cls, context):
- """Called to determine which plugin should be the active one."""
- plugin = cls.default
- selector = getattr(cls, 'SELECTOR', None)
- if selector:
- if plugin is not None:
- _selectors[selector] = plugin.name
- name = context.Find(selector)
- if name is not None:
- plugin = cls.FindPlugin(name)
- return plugin
-
-
-def ChainModuleConfigs(module):
- """Detects and connects the default Config objects from a module."""
- for config_root in CONFIG_TYPES:
- if hasattr(module, config_root.name):
- config = getattr(module, config_root.name)
- config.name = module.__name__
- config_root.AddChild(config)
-
-
-cr.loader.scan_hooks.append(ChainModuleConfigs)
-
-
-def Activate(context):
- """Activates a plugin for all known plugin types."""
- types = Plugin.Type.__subclasses__()
- for child in types:
- child.GetActivePlugin(context)
diff --git a/chromium/tools/cr/cr/targets/__init__.py b/chromium/tools/cr/cr/targets/__init__.py
deleted file mode 100644
index 852ecbedbed..00000000000
--- a/chromium/tools/cr/cr/targets/__init__.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# 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.
-
-"""A package for all the built in commands.
-
-This package has all the standard commands built in to the cr tool.
-Most commands use actions to perform the real work.
-"""
diff --git a/chromium/tools/cr/cr/targets/chrome.py b/chromium/tools/cr/cr/targets/chrome.py
deleted file mode 100644
index 49d09ee98fa..00000000000
--- a/chromium/tools/cr/cr/targets/chrome.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# 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.
-
-"""Module for the chrome targets."""
-
-import cr
-
-
-class ChromeTarget(cr.NamedTarget):
- NAME = 'chrome'
- DEFAULT = cr.Config.From(
- # CR_URL is the page to open when the target is run.
- CR_URL='https://www.google.com/',
- )
- CONFIG = cr.Config.From(
- CR_RUN_ARGUMENTS=cr.Config.Optional('-d "{CR_URL!e}"'),
- CR_TARGET_NAME='Chrome',
- )
-
-
-class ChromeTestTarget(cr.NamedTarget):
- NAME = 'chrome_test'
- CONFIG = cr.Config.From(
- CR_TARGET_NAME='ChromeTest',
- )
diff --git a/chromium/tools/cr/cr/targets/chromium_testshell.py b/chromium/tools/cr/cr/targets/chromium_testshell.py
deleted file mode 100644
index c8cf65f70c2..00000000000
--- a/chromium/tools/cr/cr/targets/chromium_testshell.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# 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.
-
-"""Module for the chromium_testshell targets."""
-
-import cr
-
-
-class ChromiumTestShellTarget(cr.NamedTarget):
- NAME = 'chromium_testshell'
- DEFAULT = cr.Config.From(
- # CR_URL is the page to open when the target is run.
- CR_URL='https://www.google.com/',
- )
- CONFIG = cr.Config.From(
- CR_RUN_ARGUMENTS=cr.Config.Optional('-d "{CR_URL!e}"'),
- CR_TARGET_NAME='ChromiumTestShell',
- CR_PACKAGE='org.chromium.chrome.testshell',
- CR_ACTIVITY='.ChromiumTestShellActivity',
- )
-
-
-class ChromiumTestShellTestTarget(cr.NamedTarget):
- NAME = 'chromium_testshell_test'
- CONFIG = cr.Config.From(
- CR_TARGET_NAME='ChromiumTestShellTest',
- )
-
diff --git a/chromium/tools/cr/cr/targets/content_shell.py b/chromium/tools/cr/cr/targets/content_shell.py
deleted file mode 100644
index f4a415dd8ea..00000000000
--- a/chromium/tools/cr/cr/targets/content_shell.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# 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.
-
-"""Module for the content_shell targets."""
-
-import cr
-
-
-class ContentShellTarget(cr.NamedTarget):
- NAME = 'content_shell'
- DEFAULT = cr.Config.From(
- # CR_URL is the page to open when the target is run.
- CR_URL='https://www.google.com/',
- )
- CONFIG = cr.Config.From(
- CR_RUN_ARGUMENTS=cr.Config.Optional('-d "{CR_URL!e}"'),
- CR_TARGET_NAME='ContentShell',
- CR_PACKAGE='org.chromium.content_shell_apk',
- CR_ACTIVITY='.ContentShellActivity',
- )
-
-
-class ContentShellTestTarget(cr.NamedTarget):
- NAME = 'content_shell_test'
- CONFIG = cr.Config.From(
- CR_TARGET_NAME='ContentShellTest',
- )
diff --git a/chromium/tools/cr/cr/targets/target.py b/chromium/tools/cr/cr/targets/target.py
deleted file mode 100644
index e02bdb04ec2..00000000000
--- a/chromium/tools/cr/cr/targets/target.py
+++ /dev/null
@@ -1,157 +0,0 @@
-# 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.
-"""Module to hold the Target plugin."""
-
-import operator
-import re
-
-import cr
-
-DEFAULT = cr.Config.From(
- CR_DEFAULT_TARGET='chrome',
-)
-
-
-class Target(cr.Config, cr.AutoExport):
- """Base class for implementing cr targets.
-
- A target is something that can be built and run.
- """
-
- # The default base priority
- PRIORITY = 0
- # The default pattern used to try to detect whether a target is a test and
- # should use the test runner.
- TEST_PATTERN = re.compile('tests?$')
- # The special "test type" that means it's not a test.
- NOT_A_TEST = 'no'
- # The default choice for the type of test when it can't be determined.
- NORMAL_TEST = 'gtest'
- # TODO(iancottrell): support the other test types
- TEST_TYPES = [NOT_A_TEST, NORMAL_TEST]
-
- def __init__(self, context, target_name):
- super(Target, self).__init__(target_name)
- self.context = context
- test_type = None
- if self.TEST_PATTERN.search(target_name):
- test_type = self.NORMAL_TEST
- config = cr.Config('DEFAULTS').From(
- CR_TARGET=target_name,
- CR_TARGET_NAME='{CR_TARGET}',
- CR_BUILD_TARGET=cr.Config.Optional(
- '{CR_TARGET}{CR_TARGET_SUFFIX}', '{CR_TARGET}'),
- CR_RUN_ARGUMENTS='',
- CR_TEST_TYPE=test_type,
- )
- self.AddChildren(config, context)
- if hasattr(self, 'CONFIG'):
- self.AddChild(self.CONFIG)
- if not self.valid:
- self.Set(CR_TARGET_SUFFIX='')
- self.test_type = self.Find('CR_TEST_TYPE')
- self.target_name = self.Find('CR_TARGET_NAME')
-
- @property
- def build_target(self):
- return self.Get('CR_BUILD_TARGET')
-
- @property
- def verbose(self):
- return self.context.verbose
-
- @property
- def dry_run(self):
- return self.context.dry_run
-
- @property
- def valid(self):
- return cr.Builder.IsTarget(self.context, self.build_target)
-
- @property
- def is_test(self):
- return self.test_type and self.test_type != self.NOT_A_TEST
-
- @classmethod
- def AddArguments(cls, command, parser, allow_multiple=False):
- nargs = '?'
- help_string = 'The target to {0}'
- if allow_multiple:
- nargs = '*'
- help_string = 'The target(s) to {0}'
- parser.add_argument(
- '_targets', metavar='target',
- help=help_string.format(command.name),
- nargs=nargs
- )
-
- @classmethod
- def AllTargets(cls):
- yield cls
- for child in cls.__subclasses__():
- for t in child.AllTargets():
- yield t
-
- @classmethod
- def CreateTarget(cls, context, target_name):
- """Attempts to build a target by name.
-
- This searches the set of installed targets in priority order to see if any
- of them are willing to handle the supplied name.
- If a target cannot be found, the program will be aborted.
- Args:
- context: The context to run in.
- target_name: The name of the target we are searching for.
- Returns:
- The target that matched.
- """
- target_clses = sorted(
- cls.AllTargets(),
- key=operator.attrgetter('PRIORITY'),
- reverse=True
- )
- for handler in target_clses:
- target = handler.Build(context, target_name)
- if target:
- if not target.valid:
- print 'Invalid target {0} as {1}'.format(
- target_name, target.build_target)
- exit(1)
- return target
- print 'Unknown target {0}'.format(target_name)
- exit(1)
-
- @classmethod
- def GetTargets(cls, context):
- target_names = getattr(context.args, '_targets', None)
- if not target_names:
- target_names = [context.Get('CR_DEFAULT_TARGET')]
- elif hasattr(target_names, 'swapcase'):
- # deal with the single target case
- target_names = [target_names]
- return [cls.CreateTarget(context, target_name)
- for target_name in target_names]
-
- @classmethod
- def Build(cls, context, target_name):
- return cls(context, target_name)
-
-
-class NamedTarget(Target):
- """A base class for explicit named targets.
-
- Only matches a target if the name is an exact match.
- Up it's priority to come ahead of general purpose rule matches.
- """
- NAME = None
- PRIORITY = Target.PRIORITY + 1
-
- @classmethod
- def Build(cls, context, target_name):
- try:
- if target_name == cls.NAME:
- return cls(context, target_name)
- except AttributeError:
- pass
- return None
diff --git a/chromium/tools/cr/cr/visitor.py b/chromium/tools/cr/cr/visitor.py
deleted file mode 100644
index 339040ca3c4..00000000000
--- a/chromium/tools/cr/cr/visitor.py
+++ /dev/null
@@ -1,257 +0,0 @@
-# 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.
-
-""".
-
-"""
-import collections
-
-# HIDDEN is a marker used to suppress a value, making it as if it were not set
-# in that object. This causes the search to continue through the tree.
-# This is most useful as a return value of dynamic values that want to find
-# the value they are shadowing.
-HIDDEN = object()
-
-
-class VisitComplete(Exception):
- """Indicates a vist traversal has finished early."""
-
-
-class Visitor(object):
- """The base class for anything that wants to "visit" all variables.
-
- The two main uses of visitor are search and export. They differ in that export
- is trying to find all variables, whereas search is just looking for one.
- """
-
- def __init__(self):
- self.stack = []
-
- def VisitNode(self, node):
- """Called for every node in the tree."""
- if not node.enabled:
- return self
- try:
- try:
- self.stack.append(node)
- self.StartNode()
- # Visit all the values first
- for key in self.KeysOf(node.values):
- self.Visit(key, node.values[key])
- # And now recurse into all the children
- for child in node.children:
- self.VisitNode(child)
- finally:
- self.EndNode()
- self.stack.pop()
- except VisitComplete:
- if self.stack:
- # propagate back up the stack
- raise
- return self
-
- def Visit(self, key, value):
- """Visit is called for every variable in each node."""
-
- def StartNode(self):
- """StartNode is called once for each node before traversal."""
-
- def EndNode(self):
- """Visit is called for every node after traversal."""
-
- @property
- def root_node(self):
- """Returns the variable at the root of the current traversal."""
- return self.stack[0]
-
- @property
- def current_node(self):
- """Returns the node currently being scanned."""
- return self.stack[-1]
-
- def Resolve(self, key, value):
- """Returns a fully substituted value.
-
- This asks the root node to do the actual work.
- Args:
- key: The key being visited.
- value: The unresolved value associated with the key.
- Returns:
- the fully resolved value.
- """
- return self.root_node.Resolve(self, key, value)
-
- def Where(self):
- """Returns the current traversal stack as a string."""
- return '/'.join([entry.name for entry in self.stack])
-
-
-class SearchVisitor(Visitor):
- """A Visitor that finds a single matching key."""
-
- def __init__(self, key):
- super(SearchVisitor, self).__init__()
- self.key = key
- self.found = False
- self.error = None
-
- def KeysOf(self, store):
- if self.key in store:
- yield self.key
-
- def Visit(self, key, value):
- value, error = self.Resolve(key, value)
- if value is not HIDDEN:
- self.found = True
- self.value = value
- self.error = error
- raise VisitComplete()
-
-
-class WhereVisitor(SearchVisitor):
- """A SearchVisitor that returns the path to the matching key."""
-
- def Visit(self, key, value):
- self.where = self.Where()
- super(WhereVisitor, self).Visit(key, value)
-
-
-class ExportVisitor(Visitor):
- """A visitor that builds a fully resolved map of all variables."""
-
- def __init__(self, store):
- super(ExportVisitor, self).__init__()
- self.store = store
-
- def KeysOf(self, store):
- if self.current_node.export is False:
- # not exporting from this config
- return
- for key in store.keys():
- if key in self.store:
- # duplicate
- continue
- if (self.current_node.export is None) and key.startswith('_'):
- # non exported name
- continue
- yield key
-
- def Visit(self, key, value):
- value, _ = self.Resolve(key, value)
- if value is not HIDDEN:
- self.store[key] = value
-
-
-class Node(object):
- """The base class for objects in a visitable node tree."""
-
- def __init__(self, name='--', enabled=True, export=True):
- self._name = name
- self._children = collections.deque()
- self._values = {}
- self._viewers = []
- self.trail = []
- self._enabled = enabled
- self._export = export
- self._export_cache = None
-
- @property
- def name(self):
- return self._name
-
- @name.setter
- def name(self, value):
- self._name = value
-
- @property
- def enabled(self):
- return self._enabled
-
- @enabled.setter
- def enabled(self, value):
- if self._enabled == value:
- return
- self._enabled = value
- self.NotifyChanged()
-
- @property
- def export(self):
- return self._export
-
- @property
- def exported(self):
- if self._export_cache is None:
- self._export_cache = ExportVisitor({}).VisitNode(self).store
- return self._export_cache
-
- @property
- def values(self):
- return self._values
-
- @property
- def children(self):
- return self._children
-
- def RegisterViewer(self, viewer):
- self._viewers.append(viewer)
-
- def UnregisterViewer(self, viewer):
- self._viewers.remove(viewer)
-
- def OnChanged(self, child):
- _ = child
- self.NotifyChanged()
-
- def NotifyChanged(self):
- self._export_cache = None
- for viewers in self._viewers:
- viewers.OnChanged(self)
-
- def _AddChild(self, child):
- if child and child != self and child not in self._children:
- self._children.appendleft(child)
- child.RegisterViewer(self)
-
- def AddChild(self, child):
- self._AddChild(child)
- self.NotifyChanged()
- return self
-
- def AddChildren(self, *children):
- for child in children:
- self._AddChild(child)
- self.NotifyChanged()
- return self
-
- def Find(self, key):
- search = SearchVisitor(key).VisitNode(self)
- if not search.found:
- return None
- return search.value
-
- def WhereIs(self, key):
- search = WhereVisitor(key).VisitNode(self)
- if not search.found:
- return None
- return search.where
-
- def Get(self, key, raise_errors=False):
- search = SearchVisitor(key).VisitNode(self)
- if not search.found:
- raise KeyError(key)
- if search.error and raise_errors:
- raise search.error # bad type inference pylint: disable=raising-bad-type
- return search.value
-
- def Resolve(self, visitor, key, value):
- _ = visitor, key
- return value
-
- def Wipe(self):
- for child in self._children:
- child.UnregisterViewer(self)
- self._children = collections.deque()
- self._values = {}
- self.NotifyChanged()
-
diff --git a/chromium/tools/cr/main.py b/chromium/tools/cr/main.py
deleted file mode 100644
index dced8cd4069..00000000000
--- a/chromium/tools/cr/main.py
+++ /dev/null
@@ -1,94 +0,0 @@
-# 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.
-
-"""Chromium cr tool main module.
-
-Holds the main function and all it's support code.
-"""
-
-import os
-import sys
-import cr
-import cr.auto.user
-import cr.autocomplete
-import cr.loader
-
-_CONTACT = 'iancottrell@chromium.org'
-
-
-def Main():
- """Chromium cr tool main function.
-
- This is the main entry point of the cr tool, it finds and loads all the
- plugins, creates the context and then activates and runs the specified
- command.
- """
-
- # Add the users plugin dir to the cr.auto.user package scan
- user_path = os.path.expanduser(os.path.join('~', '.config', 'cr'))
- cr.auto.user.__path__.append(user_path)
-
- cr.loader.Scan()
-
- # Build the command context
- context = cr.Context(
- description='The chrome dev build tool.',
- epilog='Contact ' + _CONTACT + ' if you have issues with this tool.',
- )
- # Install the sub-commands
- for command in cr.Command.Plugins():
- context.AddSubParser(command)
-
- # test for the special autocomplete command
- if context.autocompleting:
- # After plugins are loaded so pylint: disable=g-import-not-at-top
- cr.autocomplete.Complete(context)
- return
- # Speculative argument processing to add config specific args
- context.ParseArgs(True)
- cr.plugin.Activate(context)
- # At this point we should know what command we are going to use
- command = cr.Command.GetActivePlugin(context)
- # Do some early processing, in case it changes the build dir
- if command:
- command.EarlyArgProcessing(context)
- # Update the activated set again, in case the early processing changed it
- cr.plugin.Activate(context)
- # Load the build specific configuration
- found_build_dir = cr.base.client.LoadConfig(context)
- # Final processing or arguments
- context.ParseArgs()
- cr.plugin.Activate(context)
- # If we did not get a command before, it might have been fixed.
- if command is None:
- command = cr.Command.GetActivePlugin(context)
- # If the verbosity level is 3 or greater, then print the environment here
- if context.verbose >= 3:
- context.DumpValues(context.verbose > 3)
- if command is None:
- print context.Substitute('No command specified.')
- exit(1)
- if command.requires_build_dir:
- if not found_build_dir:
- if not context.Find('CR_OUT_FULL'):
- print context.Substitute(
- 'No build directory specified. Please use cr init to make one.')
- else:
- print context.Substitute(
- 'Build {CR_BUILD_DIR} not a valid build directory')
- exit(1)
- if context.Find('CR_VERSION') != cr.base.client.VERSION:
- print context.Substitute(
- 'Build {CR_BUILD_DIR} is for the wrong version of cr')
- print 'Please run cr init to reset it'
- exit(1)
- cr.Platform.Prepare(context)
- if context.verbose >= 1:
- print context.Substitute(
- 'Running cr ' + command.name + ' for {CR_BUILD_DIR}')
- # Invoke the given command
- command.Run(context)
-
-if __name__ == '__main__':
- sys.exit(Main())
diff --git a/chromium/tools/crx_id/PRESUBMIT.py b/chromium/tools/crx_id/PRESUBMIT.py
deleted file mode 100644
index e8daa889a5a..00000000000
--- a/chromium/tools/crx_id/PRESUBMIT.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright (c) 2011 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.
-
-"""Presubmit script for crx_id.
-
-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for
-details on the presubmit API built into gcl.
-"""
-
-UNIT_TESTS = [
- 'crx_id_unittest',
-]
-
-def CheckChangeOnUpload(input_api, output_api):
- return input_api.canned_checks.RunPythonUnitTests(input_api,
- output_api,
- UNIT_TESTS)
-
-def CheckChangeOnCommit(input_api, output_api):
- output = []
- output.extend(input_api.canned_checks.RunPythonUnitTests(input_api,
- output_api,
- UNIT_TESTS))
- output.extend(input_api.canned_checks.CheckDoNotSubmit(input_api,
- output_api))
- return output
diff --git a/chromium/tools/crx_id/__init__.py b/chromium/tools/crx_id/__init__.py
deleted file mode 100644
index b2e61d30f09..00000000000
--- a/chromium/tools/crx_id/__init__.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2011 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.
-
-'''Module crx_id
-'''
-
-pass
diff --git a/chromium/tools/crx_id/crx_id.py b/chromium/tools/crx_id/crx_id.py
deleted file mode 100755
index dc30b736dc6..00000000000
--- a/chromium/tools/crx_id/crx_id.py
+++ /dev/null
@@ -1,151 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-""" Read a CRX file and write out the App ID and the Full Hash of the ID.
-See: http://code.google.com/chrome/extensions/crx.html
-and 'http://stackoverflow.com/questions/'
- + '1882981/google-chrome-alphanumeric-hashes-to-identify-extensions'
-for docs on the format.
-"""
-
-import base64
-import os
-import sys
-import hashlib
-
-try:
- import json
-except Exception:
- import simplejson as json
-
-EXPECTED_CRX_MAGIC_NUM = 'Cr24'
-EXPECTED_CRX_VERSION = 2
-
-def usage(argv):
- print "%s: crx_file" % argv[0]
-
-def HexToInt(hex_chars):
- """ Convert bytes like \xab -> 171 """
- val = 0
- for i in xrange(len(hex_chars)):
- val += pow(256, i) * ord(hex_chars[i])
- return val
-
-def HexToMPDecimal(hex_chars):
- """ Convert bytes to an MPDecimal string. Example \x00 -> "aa"
- This gives us the AppID for a chrome extension.
- """
- result = ''
- base = ord('a')
- for i in xrange(len(hex_chars)):
- value = ord(hex_chars[i])
- dig1 = value / 16
- dig2 = value % 16
- result += chr(dig1 + base)
- result += chr(dig2 + base)
- return result
-
-def HexTo256(hex_chars):
- """ Convert bytes to pairs of hex digits. E.g., \x00\x11 -> "{0x00, 0x11}"
- The format is taylored for copy and paste into C code:
- const uint8 sha256_hash[] = { ... }; """
- result = []
- for i in xrange(len(hex_chars)):
- value = ord(hex_chars[i])
- dig1 = value / 16
- dig2 = value % 16
- result.append('0x' + hex(dig1)[2:] + hex(dig2)[2:])
- return '{%s}' % ', '.join(result)
-
-def GetPublicKeyPacked(f):
- magic_num = f.read(4)
- if magic_num != EXPECTED_CRX_MAGIC_NUM:
- raise Exception('Invalid magic number: %s (expecting %s)' %
- (magic_num,
- EXPECTED_CRX_MAGIC_NUM))
- version = f.read(4)
- if not version[0] != EXPECTED_CRX_VERSION:
- raise Exception('Invalid version number: %s (expecting %s)' %
- (version,
- EXPECTED_CRX_VERSION))
- pub_key_len_bytes = HexToInt(f.read(4))
- sig_len_bytes = HexToInt(f.read(4))
- pub_key = f.read(pub_key_len_bytes)
- return pub_key
-
-def GetPublicKeyFromPath(filepath, is_win_path=False):
- # Normalize the path for windows to have capital drive letters.
- # We intentionally don't check if sys.platform == 'win32' and just
- # check if this looks like drive letter so that we can test this
- # even on posix systems.
- if (len(filepath) >= 2 and
- filepath[0].islower() and
- filepath[1] == ':'):
- filepath = filepath[0].upper() + filepath[1:]
-
- # On Windows, filepaths are encoded using UTF-16, little endian byte order,
- # using "wide characters" that are 16 bits in size. On POSIX systems, the
- # encoding is generally UTF-8, which has the property of being equivalent to
- # ASCII when only ASCII characters are in the path.
- if is_win_path:
- filepath = filepath.encode('utf-16le')
-
- return filepath
-
-def GetPublicKeyUnpacked(f, filepath):
- manifest = json.load(f)
- if 'key' not in manifest:
- # Use the path as the public key.
- # See Extension::GenerateIdForPath in extension.cc
- return GetPublicKeyFromPath(filepath)
- else:
- return base64.standard_b64decode(manifest['key'])
-
-def HasPublicKey(filename):
- if os.path.isdir(filename):
- with open(os.path.join(filename, 'manifest.json'), 'rb') as f:
- manifest = json.load(f)
- return 'key' in manifest
- return False
-
-def GetPublicKey(filename, from_file_path, is_win_path=False):
- if from_file_path:
- return GetPublicKeyFromPath(
- filename, is_win_path=is_win_path)
-
- pub_key = ''
- if os.path.isdir(filename):
- # Assume it's an unpacked extension
- f = open(os.path.join(filename, 'manifest.json'), 'rb')
- pub_key = GetPublicKeyUnpacked(f, filename)
- f.close()
- else:
- # Assume it's a packed extension.
- f = open(filename, 'rb')
- pub_key = GetPublicKeyPacked(f)
- f.close()
- return pub_key
-
-def GetCRXHash(filename, from_file_path=False, is_win_path=False):
- pub_key = GetPublicKey(filename, from_file_path, is_win_path=is_win_path)
- pub_key_hash = hashlib.sha256(pub_key).digest()
- return HexTo256(pub_key_hash)
-
-def GetCRXAppID(filename, from_file_path=False, is_win_path=False):
- pub_key = GetPublicKey(filename, from_file_path, is_win_path=is_win_path)
- pub_key_hash = hashlib.sha256(pub_key).digest()
- # AppID is the MPDecimal of only the first 128 bits of the hash.
- return HexToMPDecimal(pub_key_hash[:128/8])
-
-def main(argv):
- if len(argv) != 2:
- usage(argv)
- return 1
- print 'Raw Bytes: %s' % GetCRXHash(sys.argv[1])
- print 'AppID: %s' % GetCRXAppID(sys.argv[1])
-
-
-if __name__ == '__main__':
- sys.exit(main(sys.argv))
diff --git a/chromium/tools/crx_id/crx_id_unittest.py b/chromium/tools/crx_id/crx_id_unittest.py
deleted file mode 100755
index 4d0f80f7534..00000000000
--- a/chromium/tools/crx_id/crx_id_unittest.py
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright (c) 2012 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.
-
-"""Verify that crx_id.py generates a reasonable string for a canned CRX file.
-"""
-
-import crx_id
-import os
-import shutil
-import sys
-import unittest
-import tempfile
-
-class CrxIdUnittest(unittest.TestCase):
- CRX_ID_DIR = os.path.abspath(os.path.dirname(sys.argv[0]))
- PACKED_CRX = os.path.join(CRX_ID_DIR,
- 'jebgalgnebhfojomionfpkfelancnnkf.crx')
-
- PACKED_APP_ID = 'jebgalgnebhfojomionfpkfelancnnkf'
- PACKED_HASH_BYTES = \
- '{0x94, 0x16, 0x0b, 0x6d, 0x41, 0x75, 0xe9, 0xec,' \
- ' 0x8e, 0xd5, 0xfa, 0x54, 0xb0, 0xd2, 0xdd, 0xa5,' \
- ' 0x6e, 0x05, 0x6b, 0xe8, 0x73, 0x47, 0xf6, 0xc4,' \
- ' 0x11, 0x9f, 0xbc, 0xb3, 0x09, 0xb3, 0x5b, 0x40}'
-
- def testPackedHashAppId(self):
- """ Test the output generated for a canned, packed CRX. """
- self.assertEqual(crx_id.GetCRXAppID(self.PACKED_CRX),
- self.PACKED_APP_ID)
- self.assertEqual(crx_id.GetCRXHash(self.PACKED_CRX),
- self.PACKED_HASH_BYTES)
-
- UNPACKED_APP_ID = 'cbcdidchbppangcjoddlpdjlenngjldk'
- UNPACKED_HASH_BYTES = \
- '{0x21, 0x23, 0x83, 0x27, 0x1f, 0xf0, 0xd6, 0x29,' \
- ' 0xe3, 0x3b, 0xf3, 0x9b, 0x4d, 0xd6, 0x9b, 0x3a,' \
- ' 0xff, 0x7d, 0x6b, 0xc4, 0x78, 0x30, 0x47, 0xa6,' \
- ' 0x23, 0x12, 0x72, 0x84, 0x9b, 0x9a, 0xf6, 0x3c}'
-
- def testUnpackedHashAppId(self):
- """ Test the output generated for a canned, unpacked extension. """
- # Copy ../../chrome/test/data/extensions/unpacked/manifest_with_key.json
- # to a temporary location.
- unpacked_test_manifest_path = os.path.join(
- self.CRX_ID_DIR,
- '..', '..', 'chrome', 'test', 'data', 'extensions', 'unpacked',
- 'manifest_with_key.json')
- temp_unpacked_crx = tempfile.mkdtemp()
- shutil.copy2(unpacked_test_manifest_path,
- os.path.join(temp_unpacked_crx, 'manifest.json'))
- self.assertEqual(crx_id.GetCRXAppID(temp_unpacked_crx),
- self.UNPACKED_APP_ID)
- self.assertEqual(crx_id.GetCRXHash(temp_unpacked_crx),
- self.UNPACKED_HASH_BYTES)
- self.assertTrue(crx_id.HasPublicKey(temp_unpacked_crx))
- shutil.rmtree(temp_unpacked_crx)
-
- def testFromFilePath(self):
- """ Test calculation of extension id from file paths. """
- self.assertEqual(crx_id.GetCRXAppID('/tmp/temp_extension',
- from_file_path=True),
- 'ajbbicncdkdlchpjplgjaglppbcbmaji')
-
- def testFromWindowsPath(self):
- self.assertEqual(crx_id.GetCRXAppID(r'D:\Documents\chrome\test_extension',
- from_file_path=True,
- is_win_path=True),
- 'fegemedmbnhglnecjgbdhekaghkccplm')
-
- # Test drive letter normalization.
- kWinPathId = 'aiinlcdagjihibappcdnnhcccdokjlaf'
- self.assertEqual(crx_id.GetCRXAppID(r'c:\temp_extension',
- from_file_path=True,
- is_win_path=True),
- kWinPathId)
- self.assertEqual(crx_id.GetCRXAppID(r'C:\temp_extension',
- from_file_path=True,
- is_win_path=True),
- kWinPathId)
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/chromium/tools/crx_id/jebgalgnebhfojomionfpkfelancnnkf.crx b/chromium/tools/crx_id/jebgalgnebhfojomionfpkfelancnnkf.crx
deleted file mode 100644
index 4fb2a3b87b4..00000000000
--- a/chromium/tools/crx_id/jebgalgnebhfojomionfpkfelancnnkf.crx
+++ /dev/null
Binary files differ
diff --git a/chromium/tools/cygprofile/cygprofile.cc b/chromium/tools/cygprofile/cygprofile.cc
deleted file mode 100644
index 06e74b84629..00000000000
--- a/chromium/tools/cygprofile/cygprofile.cc
+++ /dev/null
@@ -1,401 +0,0 @@
-// Copyright (c) 2011 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.
-//
-// Tool to log the execution of the process (Chrome). Writes logs containing
-// time and address of the callback being called for the first time.
-//
-// To speed up the logging, buffering logs is implemented. Every thread have its
-// own buffer and log file so the contention between threads is minimal. As a
-// side-effect, functions called might be mentioned in many thread logs.
-//
-// Special thread is created in the process to periodically flushes logs for all
-// threads for the case the thread has stopped before flushing its logs.
-//
-// Use this profiler with linux_use_tcmalloc=0.
-//
-// Note for the ChromeOS Chrome. Remove renderer process from the sandbox (add
-// --no-sandbox option to running Chrome in /sbin/session_manager_setup.sh).
-// Otherwise renderer will not be able to write logs (and will assert on that).
-//
-// Also note that the instrumentation code is self-activated. It begins to
-// record the log data when it is called first, including the run-time startup.
-// Have it in mind when modifying it, in particular do not use global objects
-// with constructors as they are called during startup (too late for us).
-
-#include <fcntl.h>
-#include <fstream>
-#include <pthread.h>
-#include <stdarg.h>
-#include <string>
-#include <sys/stat.h>
-#include <sys/syscall.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <vector>
-
-#include "base/containers/hash_tables.h"
-#include "base/lazy_instance.h"
-#include "base/logging.h"
-#include "base/memory/singleton.h"
-#include "base/synchronization/lock.h"
-
-namespace cygprofile {
-
-extern "C" {
-
-// Note that these are linked internally by the compiler. Don't call
-// them directly!
-void __cyg_profile_func_enter(void* this_fn, void* call_site)
- __attribute__((no_instrument_function));
-void __cyg_profile_func_exit(void* this_fn, void* call_site)
- __attribute__((no_instrument_function));
-
-}
-
-// Single log entry layout.
-struct CygLogEntry {
- time_t seconds;
- long int usec;
- pid_t pid;
- pthread_t tid;
- const void* this_fn;
- CygLogEntry(time_t seconds, long int usec,
- pid_t pid, pthread_t tid, const void* this_fn)
- : seconds(seconds), usec(usec),
- pid(pid), tid(tid), this_fn(this_fn) {}
-};
-
-// Common data for the process. Singleton.
-class CygCommon {
- public:
- static CygCommon* GetInstance();
- std::string header() const { return header_line_; }
- private:
- CygCommon();
- std::string header_line_;
- friend struct DefaultSingletonTraits<CygCommon>;
-
- DISALLOW_COPY_AND_ASSIGN(CygCommon);
-};
-
-// Returns light-weight process ID. On linux, this is a system-wide
-// unique thread id.
-static pid_t GetLwp() {
- return syscall(__NR_gettid);
-}
-
-// A per-thread structure representing the log itself.
-class CygTlsLog {
- public:
- CygTlsLog()
- : in_use_(false), lwp_(GetLwp()), pthread_self_(pthread_self()) { }
-
- // Enter a log entity.
- void LogEnter(void* this_fn);
-
- // Add newly created CygTlsLog object to the list of all such objects.
- // Needed for the timer callback: it will enumerate each object and flush.
- static void AddNewLog(CygTlsLog* newlog);
-
- // Starts a thread in this process that periodically flushes all the threads.
- // Must be called once per process.
- static void StartFlushLogThread();
-
- private:
- static const int kBufMaxSize;
- static const char kLogFilenameFmt[];
- static const char kLogFileNamePrefix[];
-
- // Flush the log to file. Create file if needed.
- // Must be called with locked log_mutex_.
- void FlushLog();
-
- // Fork hooks. Needed to keep data in consistent state during fork().
- static void AtForkPrepare();
- static void AtForkParent();
- static void AtForkChild();
-
- // Thread callback to flush all logs periodically.
- static void* FlushLogThread(void*);
-
- std::string log_filename_;
- std::vector<CygLogEntry> buf_;
-
- // A lock that guards buf_ usage between per-thread instrumentation
- // routine and timer flush callback. So the contention could happen
- // only during the flush, every 30 secs.
- base::Lock log_mutex_;
-
- // Current thread is inside the instrumentation routine.
- bool in_use_;
-
- // Keeps track of all functions that have been logged on this thread
- // so we do not record dublicates.
- std::hash_set<void*> functions_called_;
-
- // Thread identifier as Linux kernel shows it. For debugging purposes.
- // LWP (light-weight process) is a unique ID of the thread in the system,
- // unlike pthread_self() which is the same for fork()-ed threads.
- pid_t lwp_;
- pthread_t pthread_self_;
-
- DISALLOW_COPY_AND_ASSIGN(CygTlsLog);
-};
-
-// Storage for logs for all threads in the process.
-// Using std::list may be better, but it fails when used before main().
-struct AllLogs {
- std::vector<CygTlsLog*> logs;
- base::Lock mutex;
-};
-
-base::LazyInstance<AllLogs>::Leaky all_logs_ = LAZY_INSTANCE_INITIALIZER;
-
-// Per-thread pointer to the current log object.
-static __thread CygTlsLog* tls_current_log = NULL;
-
-// Magic value of above to prevent the instrumentation. Used when CygTlsLog is
-// being constructed (to prevent reentering by malloc, for example) and by
-// the FlushLogThread (to prevent it being logged - see comment in its code).
-CygTlsLog* const kMagicBeingConstructed = reinterpret_cast<CygTlsLog*>(1);
-
-// Number of entries in the per-thread log buffer before we flush.
-// Note, that we also flush by timer so not all thread logs may grow up to this.
-const int CygTlsLog::kBufMaxSize = 3000;
-
-#if defined(OS_ANDROID)
-const char CygTlsLog::kLogFileNamePrefix[] =
- "/data/local/tmp/chrome/cyglog/";
-#else
-const char CygTlsLog::kLogFileNamePrefix[] = "/var/log/chrome/";
-#endif
-
-// "cyglog.PID.LWP.pthread_self.PPID"
-const char CygTlsLog::kLogFilenameFmt[] = "%scyglog.%d.%d.%ld-%d";
-
-CygCommon* CygCommon::GetInstance() {
- return Singleton<CygCommon>::get();
-}
-
-CygCommon::CygCommon() {
- // Determine our module addresses.
- std::ifstream mapsfile("/proc/self/maps");
- CHECK(mapsfile.good());
- static const int kMaxLineSize = 512;
- char line[kMaxLineSize];
- void (*this_fn)(void) =
- reinterpret_cast<void(*)()>(__cyg_profile_func_enter);
- while (mapsfile.getline(line, kMaxLineSize)) {
- const std::string str_line = line;
- size_t permindex = str_line.find("r-xp");
- if (permindex != std::string::npos) {
- int dashindex = str_line.find("-");
- int spaceindex = str_line.find(" ");
- char* p;
- void* start = reinterpret_cast<void*>
- (strtol((str_line.substr(0, dashindex)).c_str(),
- &p, 16));
- CHECK(*p == 0); // Could not determine start address.
- void* end = reinterpret_cast<void*>
- (strtol((str_line.substr(dashindex + 1,
- spaceindex - dashindex - 1)).c_str(),
- &p, 16));
- CHECK(*p == 0); // Could not determine end address.
-
- if (this_fn >= start && this_fn < end)
- header_line_ = str_line;
- }
- }
- mapsfile.close();
- header_line_.append("\nsecs\tmsecs\tpid:threadid\tfunc\n");
-}
-
-void CygTlsLog::LogEnter(void* this_fn) {
- if (in_use_)
- return;
- in_use_ = true;
-
- if (functions_called_.find(this_fn) ==
- functions_called_.end()) {
- functions_called_.insert(this_fn);
- base::AutoLock lock(log_mutex_);
- if (buf_.capacity() < kBufMaxSize)
- buf_.reserve(kBufMaxSize);
- struct timeval timestamp;
- gettimeofday(&timestamp, NULL);
- buf_.push_back(CygLogEntry(time(NULL), timestamp.tv_usec,
- getpid(), pthread_self(), this_fn));
- if (buf_.size() == kBufMaxSize) {
- FlushLog();
- }
- }
-
- in_use_ = false;
-}
-
-void CygTlsLog::AtForkPrepare() {
- CHECK(tls_current_log);
- CHECK(tls_current_log->lwp_ == GetLwp());
- CHECK(tls_current_log->pthread_self_ == pthread_self());
- all_logs_.Get().mutex.Acquire();
-}
-
-void CygTlsLog::AtForkParent() {
- CHECK(tls_current_log);
- CHECK(tls_current_log->lwp_ == GetLwp());
- CHECK(tls_current_log->pthread_self_ == pthread_self());
- all_logs_.Get().mutex.Release();
-}
-
-void CygTlsLog::AtForkChild() {
- CHECK(tls_current_log);
-
- // Update the IDs of this new thread of the new process.
- // Note that the process may (and Chrome main process forks zygote this way)
- // call exec(self) after we return (to launch new shiny self). If done like
- // that, PID and LWP will remain the same, but pthread_self() changes.
- pid_t lwp = GetLwp();
- CHECK(tls_current_log->lwp_ != lwp); // LWP is system-wide unique thread ID.
- tls_current_log->lwp_ = lwp;
-
- CHECK(tls_current_log->pthread_self_ == pthread_self());
-
- // Leave the only current thread tls object because fork() clones only the
- // current thread (the one that called fork) to the child process.
- AllLogs& all_logs = all_logs_.Get();
- all_logs.logs.clear();
- all_logs.logs.push_back(tls_current_log);
- CHECK(all_logs.logs.size() == 1);
-
- // Clear log filename so it will be re-calculated with the new PIDs.
- tls_current_log->log_filename_.clear();
-
- // Create the thread that will periodically flush all logs for this process.
- StartFlushLogThread();
-
- // We do not update log header line (CygCommon data) as it will be the same
- // because the new process is just a forked copy.
- all_logs.mutex.Release();
-}
-
-void CygTlsLog::StartFlushLogThread() {
- pthread_t tid;
- CHECK(!pthread_create(&tid, NULL, &CygTlsLog::FlushLogThread, NULL));
-}
-
-void CygTlsLog::AddNewLog(CygTlsLog* newlog) {
- CHECK(tls_current_log == kMagicBeingConstructed);
- AllLogs& all_logs = all_logs_.Get();
- base::AutoLock lock(all_logs.mutex);
- if (all_logs.logs.empty()) {
-
- // An Android app never fork, it always starts with a pre-defined number of
- // process descibed by the android manifest file. In fact, there is not
- // support for pthread_atfork at the android system libraries. All chrome
- // for android processes will start as independent processs and each one
- // will generate its own logs that will later have to be merged as usual.
-#if !defined(OS_ANDROID)
- CHECK(!pthread_atfork(CygTlsLog::AtForkPrepare,
- CygTlsLog::AtForkParent,
- CygTlsLog::AtForkChild));
-#endif
-
- // The very first process starts its flush thread here. Forked processes
- // will do it in AtForkChild().
- StartFlushLogThread();
- }
- all_logs.logs.push_back(newlog);
-}
-
-// Printf-style routine to write to open file.
-static void WriteLogLine(int fd, const char* fmt, ...) {
- va_list arg_ptr;
- va_start(arg_ptr, fmt);
- char msg[160];
- int len = vsnprintf(msg, sizeof(msg), fmt, arg_ptr);
- int rc = write(fd, msg, (len > sizeof(msg))? sizeof(msg): len);
- va_end(arg_ptr);
-};
-
-void CygTlsLog::FlushLog() {
- bool first_log_write = false;
- if (log_filename_.empty()) {
- first_log_write = true;
- char buf[80];
- snprintf(buf, sizeof(buf), kLogFilenameFmt,
- kLogFileNamePrefix, getpid(), lwp_, pthread_self_, getppid());
- log_filename_ = buf;
- unlink(log_filename_.c_str());
- }
-
- int file = open(log_filename_.c_str(), O_CREAT | O_WRONLY | O_APPEND, 00600);
- CHECK(file != -1);
-
- if (first_log_write)
- WriteLogLine(file, "%s", CygCommon::GetInstance()->header().c_str());
-
- for (int i = 0; i != buf_.size(); ++i) {
- const CygLogEntry& p = buf_[i];
- WriteLogLine(file, "%ld %ld\t%d:%ld\t%p\n",
- p.seconds, p.usec, p.pid, p.tid, p.this_fn);
- }
-
- close(file);
- buf_.clear();
-}
-
-void* CygTlsLog::FlushLogThread(void*) {
- // Disable logging this thread. Although this routine is not instrumented
- // (cygprofile.gyp provides that), the called routines are and thus will
- // call instrumentation.
- CHECK(tls_current_log == NULL); // Must be 0 as this is a new thread.
- tls_current_log = kMagicBeingConstructed;
-
- // Run this loop infinitely: sleep 30 secs and the flush all thread's
- // buffers. There is a danger that, when quitting Chrome, this thread may
- // see unallocated data and segfault. We do not care because we need logs
- // when Chrome is working.
- while (true) {
- for(int secs_to_sleep = 30; secs_to_sleep != 0;)
- secs_to_sleep = sleep(secs_to_sleep);
-
- AllLogs& all_logs = all_logs_.Get();
- base::AutoLock lock(all_logs.mutex);
- for (int i = 0; i != all_logs.logs.size(); ++i) {
- CygTlsLog* current_log = all_logs.logs[i];
- base::AutoLock current_lock(current_log->log_mutex_);
- if (current_log->buf_.size()) {
- current_log->FlushLog();
- } else {
- // The thread's log is still empty. Probably the thread finished prior
- // to previous timer fired - deallocate its buffer. Even if the thread
- // ever resumes, it will allocate its buffer again in
- // std::vector::push_back().
- current_log->buf_.clear();
- }
- }
- }
-}
-
-// Gcc Compiler callback, called on every function invocation providing
-// addresses of caller and callee codes.
-void __cyg_profile_func_enter(void* this_fn, void* callee_unused) {
- if (tls_current_log == NULL) {
- tls_current_log = kMagicBeingConstructed;
- CygTlsLog* newlog = new CygTlsLog;
- CHECK(newlog);
- CygTlsLog::AddNewLog(newlog);
- tls_current_log = newlog;
- }
- if (tls_current_log != kMagicBeingConstructed) {
- tls_current_log->LogEnter(this_fn);
- }
-}
-
-// Gcc Compiler callback, called after every function invocation providing
-// addresses of caller and callee codes.
-void __cyg_profile_func_exit(void* this_fn, void* call_site) {
-}
-
-} // namespace cygprofile
diff --git a/chromium/tools/cygprofile/cygprofile.gyp b/chromium/tools/cygprofile/cygprofile.gyp
index 1e7c751ae47..910ef54c3cf 100644
--- a/chromium/tools/cygprofile/cygprofile.gyp
+++ b/chromium/tools/cygprofile/cygprofile.gyp
@@ -3,8 +3,6 @@
# found in the LICENSE file.
{
- 'variables': {
- },
'targets': [
{
'target_name': 'cygprofile',
@@ -12,8 +10,29 @@
'include_dirs': [ '../..', ],
'sources': [
'cygprofile.cc',
+ 'cygprofile.h',
],
'cflags!': [ '-finstrument-functions' ],
+ 'dependencies': [
+ # This adds uninstrumented symbols to the static library from base.
+ # These symbols are likely *not* to be used because there are many
+ # other duplicates in other objects/libraries.
+ '../../base/base.gyp:base',
+ ],
+ },
+ {
+ 'target_name': 'cygprofile_unittests',
+ 'type': 'executable',
+ 'include_dirs': [ '../..', ],
+ 'sources': [
+ 'cygprofile_unittest.cc',
+ ],
+ 'cflags!': [ '-finstrument-functions' ],
+ 'dependencies': [
+ 'cygprofile',
+ '../../base/base.gyp:base',
+ '../../testing/gtest.gyp:gtest',
+ ],
},
],
}
diff --git a/chromium/tools/cygprofile/mergetraces.py b/chromium/tools/cygprofile/mergetraces.py
deleted file mode 100755
index 5d85920beb6..00000000000
--- a/chromium/tools/cygprofile/mergetraces.py
+++ /dev/null
@@ -1,186 +0,0 @@
-#!/usr/bin/python
-# 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.
-
-# Use: ../mergetraces.py `ls cyglog.* -Sr` > merged_cyglog
-
-""""Merge multiple logs files from different processes into a single log.
-
-Given two log files of execution traces, merge the traces into a single trace.
-Merging will use timestamps (i.e. the first two columns of logged calls) to
-create a single log that is an ordered trace of calls by both processes.
-"""
-
-import optparse
-import os
-import string
-import subprocess
-import sys
-
-def ParseLogLines(lines):
- """Parse log file lines.
-
- Args:
- lines: lines from log file produced by profiled run
-
- Below is an example of a small log file:
- 5086e000-52e92000 r-xp 00000000 b3:02 51276 libchromeview.so
- secs msecs pid:threadid func
- START
- 1314897086 795828 3587:1074648168 0x509e105c
- 1314897086 795874 3587:1074648168 0x509e0eb4
- 1314897086 796326 3587:1074648168 0x509e0e3c
- 1314897086 796552 3587:1074648168 0x509e07bc
- END
-
- Returns:
- tuple conisiting of 1) an ordered list of the logged calls, as an array of
- fields, 2) the virtual start address of the library, used to compute the
- offset of the symbol in the library and 3) the virtual end address
- """
- call_lines = []
- vm_start = 0
- vm_end = 0
- dash_index = lines[0].find ('-')
- space_index = lines[0].find (' ')
- vm_start = int (lines[0][:dash_index], 16)
- vm_end = int (lines[0][dash_index+1:space_index], 16)
- for line in lines[2:]:
- line = line.strip()
- # print hex (vm_start)
- fields = line.split()
- call_lines.append (fields)
-
- return (call_lines, vm_start, vm_end)
-
-def HasDuplicates(calls):
- """Funcition is a sanity check to make sure that calls are only logged once.
-
- Args:
- calls: list of calls logged
-
- Returns:
- boolean indicating if calls has duplicate calls
- """
- seen = []
- for call in calls:
- if call[3] in seen:
- return true
- else:
- seen.append(call[3])
-
-def CheckTimestamps(calls):
- """Prints warning to stderr if the call timestamps are not in order.
-
- Args:
- calls: list of calls logged
- """
- index = 0
- last_timestamp_secs = -1
- last_timestamp_ms = -1
- while (index < len (calls)):
- timestamp_secs = int (calls[index][0])
- timestamp_ms = int (calls[index][1])
- timestamp = (timestamp_secs * 1000000) + timestamp_ms
- last_timestamp = (last_timestamp_secs * 1000000) + last_timestamp_ms
- if (timestamp < last_timestamp):
- sys.stderr.write("WARNING: last_timestamp: " + str(last_timestamp_secs)
- + " " + str(last_timestamp_ms) + " timestamp: "
- + str(timestamp_secs) + " " + str(timestamp_ms) + "\n")
- last_timestamp_secs = timestamp_secs
- last_timestamp_ms = timestamp_ms
- index = index + 1
-
-def Convert (call_lines, startAddr, endAddr):
- """Converts the call addresses to static offsets and removes invalid calls.
-
- Removes profiled calls not in shared library using start and end virtual
- addresses, converts strings to integer values, coverts virtual addresses to
- address in shared library.
-
- Returns:
- list of calls as tuples (sec, msec, pid:tid, callee)
- """
- converted_calls = []
- call_addresses = []
- for fields in call_lines:
- secs = int (fields[0])
- msecs = int (fields[1])
- callee = int (fields[3], 16)
- # print ("callee: " + hex (callee) + " start: " + hex (startAddr) + " end: "
- # + hex (endAddr))
- if (callee >= startAddr and callee < endAddr
- and (not callee in call_addresses)):
- converted_calls.append((secs, msecs, fields[2], (callee - startAddr)))
- call_addresses.append(callee)
- return converted_calls
-
-def Timestamp(trace_entry):
- return int (trace_entry[0]) * 1000000 + int(trace_entry[1])
-
-def AddTrace (tracemap, trace):
- """Adds a trace to the tracemap.
-
- Adds entries in the trace to the tracemap. All new calls will be added to
- the tracemap. If the calls already exist in the tracemap then they will be
- replaced if they happened sooner in the new trace.
-
- Args:
- tracemap: the tracemap
- trace: the trace
-
- """
- for trace_entry in trace:
- call = trace_entry[3]
- if (not call in tracemap) or (
- Timestamp(tracemap[call]) > Timestamp(trace_entry)):
- tracemap[call] = trace_entry
-
-def main():
- """Merge two traces for code in specified library and write to stdout.
-
- Merges the two traces and coverts the virtual addresses to the offsets in the
- library. First line of merged trace has dummy virtual address of 0-ffffffff
- so that symbolizing the addresses uses the addresses in the log, since the
- addresses have already been converted to static offsets.
- """
- parser = optparse.OptionParser('usage: %prog trace1 ... traceN')
- (_, args) = parser.parse_args()
- if len(args) <= 1:
- parser.error('expected at least the following args: trace1 trace2')
-
- step = 0
- tracemap = dict()
- for trace_file in args:
- step += 1
- sys.stderr.write(" " + str(step) + "/" + str(len(args)) +
- ": " + trace_file + ":\n")
-
- trace_lines = map(string.rstrip, open(trace_file).readlines())
- (trace_calls, trace_start, trace_end) = ParseLogLines(trace_lines)
- CheckTimestamps(trace_calls)
- sys.stderr.write("Len: " + str(len(trace_calls)) +
- ". Start: " + hex(trace_start) +
- ", end: " + hex(trace_end) + '\n')
-
- trace_calls = Convert(trace_calls, trace_start, trace_end)
- sys.stderr.write("Converted len: " + str(len(trace_calls)) + "\n")
-
- AddTrace(tracemap, trace_calls)
- sys.stderr.write("Merged len: " + str(len(tracemap)) + "\n")
-
- # Extract the resulting trace from the tracemap
- merged_trace = []
- for call in tracemap:
- merged_trace.append(tracemap[call])
- merged_trace.sort(key=Timestamp)
-
- print "0-ffffffff r-xp 00000000 xx:00 00000 ./"
- print "secs\tmsecs\tpid:threadid\tfunc"
- for call in merged_trace:
- print (str(call[0]) + "\t" + str(call[1]) + "\t" + call[2] + "\t" +
- hex(call[3]))
-
-if __name__ == '__main__':
- main()
diff --git a/chromium/tools/cygprofile/patch_orderfile.py b/chromium/tools/cygprofile/patch_orderfile.py
deleted file mode 100755
index 17cde76b96e..00000000000
--- a/chromium/tools/cygprofile/patch_orderfile.py
+++ /dev/null
@@ -1,117 +0,0 @@
-#!/usr/bin/python
-# 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.
-
-import commands
-import os
-import sys
-
-orderfile = sys.argv[1]
-uninstrumented_shlib = sys.argv[2]
-
-nmlines_uninstrumented = commands.getoutput ('nm -S -n ' +
- uninstrumented_shlib + ' | egrep "( t )|( W )|( T )"').split('\n')
-
-nmlines = []
-for nmline in nmlines_uninstrumented:
- if (len(nmline.split()) == 4):
- nmlines.append(nmline)
-
-# Map addresses to list of functions at that address. There are multiple
-# functions at an address because of aliasing.
-nm_index = 0
-uniqueAddrs = []
-addressMap = {}
-while nm_index < len(nmlines):
- if (len(nmlines[nm_index].split()) == 4):
- nm_int = int (nmlines[nm_index].split()[0], 16)
- size = int (nmlines[nm_index].split()[1], 16)
- fnames = [nmlines[nm_index].split()[3]]
- nm_index = nm_index + 1
- while nm_index < len(nmlines) and nm_int == int (
- nmlines[nm_index].split()[0], 16):
- fnames.append(nmlines[nm_index].split()[3])
- nm_index = nm_index + 1
- addressMap[nm_int] = fnames
- uniqueAddrs.append((nm_int, size))
- else:
- nm_index = nm_index + 1
-
-def binary_search (addr, start, end):
- # print "addr: " + str(addr) + " start: " + str(start) + " end: " + str(end)
- if start >= end or start == end - 1:
- (nm_addr, size) = uniqueAddrs[start]
- if not (addr >= nm_addr and addr < nm_addr + size):
- sys.stderr.write ("ERROR: did not find function in binary: addr: " +
- hex(addr) + " nm_addr: " + str(nm_addr) + " start: " + str(start) +
- " end: " + str(end) + "\n")
- raise Error("error")
- return (addressMap[nm_addr], size)
- else:
- halfway = start + ((end - start) / 2)
- (nm_addr, size) = uniqueAddrs[halfway]
- # print "nm_addr: " + str(nm_addr) + " halfway: " + str(halfway)
- if (addr >= nm_addr and addr < nm_addr + size):
- return (addressMap[nm_addr], size)
- elif (addr < nm_addr):
- return binary_search (addr, start, halfway)
- elif (addr >= nm_addr + size):
- return binary_search (addr, halfway, end)
- else:
- raise "ERROR: did not expect this case"
-
-f = open (orderfile)
-lines = f.readlines()
-profiled_list = []
-for line in lines:
- if (line.strip() == ''):
- continue
- functionName = line.replace('.text.', '').split('.clone.')[0].strip()
- profiled_list.append (functionName)
-
-# Symbol names are not unique. Since the order file uses symbol names, the
-# patched order file pulls in all symbols with the same name. Multiple function
-# addresses for the same function name may also be due to ".clone" symbols,
-# since the substring is stripped.
-functions = []
-functionAddressMap = {}
-for line in nmlines:
- try:
- functionName = line.split()[3]
- except:
- functionName = line.split()[2]
- functionName = functionName.split('.clone.')[0]
- functionAddress = int (line.split()[0].strip(), 16)
- try:
- functionAddressMap[functionName].append(functionAddress)
- except:
- functionAddressMap[functionName] = [functionAddress]
- functions.append(functionName)
-
-sys.stderr.write ("profiled list size: " + str(len(profiled_list)) + "\n")
-addresses = []
-symbols_found = 0
-for function in profiled_list:
- try:
- addrs = functionAddressMap[function]
- symbols_found = symbols_found + 1
- except:
- addrs = []
- # sys.stderr.write ("WARNING: could not find symbol " + function + "\n")
- for addr in addrs:
- if not (addr in addresses):
- addresses.append(addr)
-sys.stderr.write ("symbols found: " + str(symbols_found) + "\n")
-
-sys.stderr.write ("number of addresses: " + str(len(addresses)) + "\n")
-total_size = 0
-for addr in addresses:
- # if (count % 500 == 0):
- # print "current count: " + str(count)
- (functions, size) = binary_search (addr, 0, len(uniqueAddrs))
- total_size = total_size + size
- for function in functions:
- print ".text." + function
- print ""
-sys.stderr.write ("total_size: " + str(total_size) + "\n")
diff --git a/chromium/tools/cygprofile/symbolize.py b/chromium/tools/cygprofile/symbolize.py
deleted file mode 100755
index 694ae54f9b0..00000000000
--- a/chromium/tools/cygprofile/symbolize.py
+++ /dev/null
@@ -1,251 +0,0 @@
-#!/usr/bin/python
-# 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.
-
-"""Symbolize log file produced by cypgofile instrumentation.
-
-Given a log file and the binary being profiled (e.g. executable, shared
-library), the script can produce three different outputs: 1) symbols for the
-addresses, 2) function and line numbers for the addresses, or 3) an order file.
-"""
-
-import optparse
-import os
-import string
-import subprocess
-import sys
-
-
-def ParseLogLines(log_file_lines):
- """Parse a log file produced by the profiled run of clank.
-
- Args:
- log_file_lines: array of lines in log file produced by profiled run
- lib_name: library or executable containing symbols
-
- Below is an example of a small log file:
- 5086e000-52e92000 r-xp 00000000 b3:02 51276 libchromeview.so
- secs msecs pid:threadid func
- START
- 1314897086 795828 3587:1074648168 0x509e105c
- 1314897086 795874 3587:1074648168 0x509e0eb4
- 1314897086 796326 3587:1074648168 0x509e0e3c
- 1314897086 796552 3587:1074648168 0x509e07bc
- END
-
- Returns:
- call_info list with list of tuples of the format (sec, msec, call id,
- function address called)
- """
- call_lines = []
- has_started = False
- vm_start = 0
- line = log_file_lines[0]
- assert("r-xp" in line)
- end_index = line.find('-')
- vm_start = int(line[:end_index], 16)
- for line in log_file_lines[2:]:
- # print hex(vm_start)
- fields = line.split()
- if len(fields) == 4:
- call_lines.append(fields)
-
- # Convert strings to int in fields.
- call_info = []
- for call_line in call_lines:
- (sec_timestamp, msec_timestamp) = map(int, call_line[0:2])
- callee_id = call_line[2]
- addr = int(call_line[3], 16)
- if vm_start < addr:
- addr -= vm_start
- call_info.append((sec_timestamp, msec_timestamp, callee_id, addr))
-
- return call_info
-
-
-def ParseLibSymbols(lib_file):
- """Get output from running nm and greping for text symbols.
-
- Args:
- lib_file: the library or executable that contains the profiled code
-
- Returns:
- list of sorted unique addresses and corresponding size of function symbols
- in lib_file and map of addresses to all symbols at a particular address
- """
- cmd = ['nm', '-S', '-n', lib_file]
- nm_p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
- output = nm_p.communicate()[0]
- nm_lines = output.split('\n')
-
- nm_symbols = []
- for nm_line in nm_lines:
- if any(str in nm_line for str in (' t ', ' W ', ' T ')):
- nm_symbols.append(nm_line)
-
- nm_index = 0
- unique_addrs = []
- address_map = {}
- while nm_index < len(nm_symbols):
-
- # If the length of the split line is not 4, then it does not contain all the
- # information needed to symbolize (i.e. address, size and symbol name).
- if len(nm_symbols[nm_index].split()) == 4:
- (addr, size) = [int(x, 16) for x in nm_symbols[nm_index].split()[0:2]]
-
- # Multiple symbols may be at the same address. This is do to aliasing
- # done by the compiler. Since there is no way to be sure which one was
- # called in profiled run, we will symbolize to include all symbol names at
- # a particular address.
- fnames = []
- while (nm_index < len(nm_symbols) and
- addr == int(nm_symbols[nm_index].split()[0], 16)):
- if len(nm_symbols[nm_index].split()) == 4:
- fnames.append(nm_symbols[nm_index].split()[3])
- nm_index += 1
- address_map[addr] = fnames
- unique_addrs.append((addr, size))
- else:
- nm_index += 1
-
- return (unique_addrs, address_map)
-
-class SymbolNotFoundException(Exception):
- def __init__(self,value):
- self.value = value
- def __str__(self):
- return repr(self.value)
-
-def BinarySearchAddresses(addr, start, end, arr):
- """Find starting address of a symbol at a particular address.
-
- The reason we can not directly use the address provided by the log file is
- that the log file may give an address after the start of the symbol. The
- logged address is often one byte after the start. By using this search
- function rather than just subtracting one from the logged address allows
- the logging instrumentation to log any address in a function.
-
- Args:
- addr: the address being searched for
- start: the starting index for the binary search
- end: the ending index for the binary search
- arr: the list being searched containing tuple of address and size
-
- Returns:
- the starting address of the symbol at address addr
-
- Raises:
- Exception: if address not found. Functions expects all logged addresses
- to be found
- """
- # print "addr: " + str(addr) + " start: " + str(start) + " end: " + str(end)
- if start >= end or start == end - 1:
- # arr[i] is a tuple of address and size. Check if addr inside range
- if addr >= arr[start][0] and addr < arr[start][0] + arr[start][1]:
- return arr[start][0]
- elif addr >= arr[end][0] and addr < arr[end][0] + arr[end][1]:
- return arr[end][0]
- else:
- raise SymbolNotFoundException(addr)
- else:
- halfway = (start + end) / 2
- (nm_addr, size) = arr[halfway]
- # print "nm_addr: " + str(nm_addr) + " halfway: " + str(halfway)
- if addr >= nm_addr and addr < nm_addr + size:
- return nm_addr
- elif addr < nm_addr:
- return BinarySearchAddresses(addr, start, halfway-1, arr)
- else:
- # Condition (addr >= nm_addr + size) must be true.
- return BinarySearchAddresses(addr, halfway+1, end, arr)
-
-
-def FindFunctions(addr, unique_addrs, address_map):
- """Find function symbol names at address addr."""
- return address_map[BinarySearchAddresses(addr, 0, len(unique_addrs) - 1,
- unique_addrs)]
-
-
-def AddrToLine(addr, lib_file):
- """Use addr2line to determine line info of a particular address."""
- cmd = ['addr2line', '-f', '-e', lib_file, hex(addr)]
- p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
- output = (p.communicate()[0]).split('\n')
- line = output[0]
- index = 1
- while index < len(output):
- line = line + ':' + output[index]
- index += 1
- return line
-
-
-def main():
- """Write output for profiled run to standard out.
-
- The format of the output depends on the output type specified as the third
- command line argument. The default output type is to symbolize the addresses
- of the functions called.
- """
- parser = optparse.OptionParser('usage: %prog [options] log_file lib_file')
- parser.add_option('-t', '--outputType', dest='output_type',
- default='symbolize', type='string',
- help='lineize or symbolize or orderfile')
-
- # Option for output type. The log file and lib file arguments are required
- # by the script and therefore are not options.
- (options, args) = parser.parse_args()
- if len(args) != 2:
- parser.error('expected 2 args: log_file lib_file')
-
- (log_file, lib_file) = args
- output_type = options.output_type
-
- lib_name = lib_file.split('/')[-1].strip()
- log_file_lines = map(string.rstrip, open(log_file).readlines())
- call_info = ParseLogLines(log_file_lines)
- (unique_addrs, address_map) = ParseLibSymbols(lib_file)
-
- # Check for duplicate addresses in the log file, and print a warning if
- # duplicates are found. The instrumentation that produces the log file
- # should only print the first time a function is entered.
- addr_list = []
- for call in call_info:
- addr = call[3]
- if addr not in addr_list:
- addr_list.append(addr)
- else:
- print('WARNING: Address ' + hex(addr) + ' (line= ' +
- AddrToLine(addr, lib_file) + ') already profiled.')
-
- for call in call_info:
- if output_type == 'lineize':
- symbol = AddrToLine(call[3], lib_file)
- print(str(call[0]) + ' ' + str(call[1]) + '\t' + str(call[2]) + '\t'
- + symbol)
- elif output_type == 'orderfile':
- try:
- symbols = FindFunctions(call[3], unique_addrs, address_map)
- for symbol in symbols:
- print '.text.' + symbol
- print ''
- except SymbolNotFoundException as e:
- sys.stderr.write('WARNING: Did not find function in binary. addr: '
- + hex(addr) + '\n')
- else:
- try:
- symbols = FindFunctions(call[3], unique_addrs, address_map)
- print(str(call[0]) + ' ' + str(call[1]) + '\t' + str(call[2]) + '\t'
- + symbols[0])
- first_symbol = True
- for symbol in symbols:
- if not first_symbol:
- print '\t\t\t\t\t' + symbol
- else:
- first_symbol = False
- except SymbolNotFoundException as e:
- sys.stderr.write('WARNING: Did not find function in binary. addr: '
- + hex(addr) + '\n')
-
-if __name__ == '__main__':
- main()
diff --git a/chromium/tools/deps2git/PRESUBMIT.py b/chromium/tools/deps2git/PRESUBMIT.py
deleted file mode 100644
index e6730abfb56..00000000000
--- a/chromium/tools/deps2git/PRESUBMIT.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright (c) 2012 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.
-
-"""Top-level presubmit script for deps2git.
-
-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for
-details on the presubmit API built into gcl.
-"""
-
-def CommonChecks(input_api, output_api):
- output = []
- output.extend(input_api.canned_checks.RunPylint(input_api, output_api))
- output.extend(
- input_api.canned_checks.RunUnitTestsInDirectory(
- input_api, output_api,
- input_api.PresubmitLocalPath(),
- whitelist=[r'.+_unittest\.py$']))
-
- if input_api.is_committing:
- output.extend(input_api.canned_checks.PanProjectChecks(input_api,
- output_api,
- owners_check=False))
- return output
-
-
-def CheckChangeOnUpload(input_api, output_api):
- return CommonChecks(input_api, output_api)
-
-
-def CheckChangeOnCommit(input_api, output_api):
- return CommonChecks(input_api, output_api)
diff --git a/chromium/tools/deps2git/WATCHLISTS b/chromium/tools/deps2git/WATCHLISTS
deleted file mode 100644
index 01b17c60f44..00000000000
--- a/chromium/tools/deps2git/WATCHLISTS
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (c) 2012 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.
-
-# Watchlist Rules
-# Refer: http://dev.chromium.org/developers/contributing-code/watchlists
-
-{
-
- 'WATCHLIST_DEFINITIONS': {
- 'this_file': {
- 'filepath': '^WATCHLISTS$',
- },
- 'all': {
- 'filepath': '.+',
- },
- },
-
- 'WATCHLISTS': {
- 'all': ['cmp-cc@chromium.org'],
- },
-
-}
diff --git a/chromium/tools/deps2git/codereview.settings b/chromium/tools/deps2git/codereview.settings
deleted file mode 100644
index 888dfc74a1f..00000000000
--- a/chromium/tools/deps2git/codereview.settings
+++ /dev/null
@@ -1,4 +0,0 @@
-# This file is used by gcl to get repository specific information.
-CODE_REVIEW_SERVER: https://codereview.chromium.org
-CC_LIST: chromium-reviews@chromium.org
-VIEW_VC: https://src.chromium.org/viewvc/chrome?view=rev&revision=
diff --git a/chromium/tools/deps2git/deps2git.py b/chromium/tools/deps2git/deps2git.py
deleted file mode 100755
index a22efcf1c47..00000000000
--- a/chromium/tools/deps2git/deps2git.py
+++ /dev/null
@@ -1,228 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2012 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.
-
-"""Convert SVN based DEPS into .DEPS.git for use with NewGit."""
-
-import json
-import optparse
-import os
-import sys
-
-import deps_utils
-import git_tools
-import svn_to_git_public
-
-
-def SplitScmUrl(url):
- """Given a repository, return a set containing the URL and the revision."""
- url_split = url.split('@')
- scm_url = url_split[0]
- scm_rev = 'HEAD'
- if len(url_split) == 2:
- scm_rev = url_split[1]
- return (scm_url, scm_rev)
-
-
-def SvnRevToGitHash(svn_rev, git_url, repos_path, workspace, dep_path,
- git_host, svn_branch_name=None):
- """Convert a SVN revision to a Git commit id."""
- git_repo = None
- if git_url.startswith(git_host):
- git_repo = git_url.replace(git_host, '')
- else:
- raise Exception('Unknown git server %s, host %s' % (git_url, git_host))
- if repos_path is None and workspace is None:
- # We're running without a repository directory (i.e. no -r option).
- # We cannot actually find the commit id, but this mode is useful
- # just for testing the URL mappings. Produce an output file that
- # can't actually be used, but can be eyeballed for correct URLs.
- return 'xxx-r%s' % svn_rev
- if repos_path:
- git_repo_path = os.path.join(repos_path, git_repo)
- mirror = True
- else:
- git_repo_path = os.path.join(workspace, dep_path)
- mirror = False
- if not os.path.exists(git_repo_path):
- git_tools.Clone(git_url, git_repo_path, mirror)
-
- if svn_branch_name:
- # svn branches are mirrored with:
- # branches = branches/*:refs/remotes/branch-heads/*
- if mirror:
- refspec = 'refs/branch-heads/' + svn_branch_name
- else:
- refspec = 'refs/remotes/branch-heads/' + svn_branch_name
- else:
- if mirror:
- refspec = 'refs/heads/master'
- else:
- refspec = 'refs/remotes/origin/master'
-
- return git_tools.Search(git_repo_path, svn_rev, mirror, refspec, git_url)
-
-
-def ConvertDepsToGit(deps, options, deps_vars, svn_deps_vars):
- """Convert a 'deps' section in a DEPS file from SVN to Git."""
- new_deps = {}
- bad_git_urls = set([])
-
- svn_to_git_objs = [svn_to_git_public]
- if options.extra_rules:
- rules_dir, rules_file = os.path.split(options.extra_rules)
- rules_file_base = os.path.splitext(rules_file)[0]
- sys.path.insert(0, rules_dir)
- svn_to_git_objs.insert(0, __import__(rules_file_base))
-
- deps_overrides = {}
- # Allow extra_rules file to override rules in public file.
- for svn_to_git_obj in reversed(svn_to_git_objs):
- deps_overrides.update(getattr(svn_to_git_obj, 'DEPS_OVERRIDES', {}))
-
- for dep in deps:
- if not deps[dep]: # dep is 'None' and emitted to exclude the dep
- new_deps[dep] = None
- continue
-
- # Get the URL and the revision/hash for this dependency.
- dep_url, dep_rev = SplitScmUrl(deps[dep])
-
- path = dep
- git_url = dep_url
- svn_branch = None
-
- if not dep_url.endswith('.git'):
- # Convert this SVN URL to a Git URL.
- for svn_git_converter in svn_to_git_objs:
- converted_data = svn_git_converter.SvnUrlToGitUrl(dep, dep_url)
- if converted_data:
- path, git_url, git_host = converted_data[:3]
- if len(converted_data) > 3:
- svn_branch = converted_data[3]
- break
- else:
- # Make all match failures fatal to catch errors early. When a match is
- # found, we break out of the loop so the exception is not thrown.
- raise Exception('No match found for %s' % dep_url)
-
- if options.verify:
- print >> sys.stderr, 'checking ' + git_url + '...',
- if git_tools.Ping(git_url):
- print >> sys.stderr, ' success'
- else:
- print >> sys.stderr, ' failure'
- bad_git_urls.update([git_url])
-
- # Get the Git hash based off the SVN rev.
- git_hash = ''
- if dep_rev != 'HEAD':
- if dep in deps_overrides:
- # Transfer any required variables over from SVN DEPS.
- if not deps_overrides[dep] in svn_deps_vars:
- raise Exception('Missing DEPS variable: %s' % deps_overrides[dep])
- deps_vars[deps_overrides[dep]] = (
- '@' + svn_deps_vars[deps_overrides[dep]].lstrip('@'))
- # Tag this variable as needing a transform by Varify() later.
- git_hash = '%s_%s' % (deps_utils.VARIFY_MARKER_TAG_PREFIX,
- deps_overrides[dep])
- else:
- # Pass-through the hash for Git repositories. Resolve the hash for
- # subversion repositories.
- if dep_url.endswith('.git'):
- git_hash = '@%s' % dep_rev
- else:
- git_hash = '@%s' % SvnRevToGitHash(
- dep_rev, git_url, options.repos, options.workspace, path,
- git_host, svn_branch)
-
- # If this is webkit, we need to add the var for the hash.
- if dep == 'src/third_party/WebKit' and dep_rev:
- deps_vars['webkit_rev'] = git_hash
- git_hash = 'VAR_WEBKIT_REV'
-
- # Add this Git dep to the new deps.
- new_deps[path] = '%s%s' % (git_url, git_hash)
-
- return new_deps, bad_git_urls
-
-
-def main():
- parser = optparse.OptionParser()
- parser.add_option('-d', '--deps', default='DEPS',
- help='path to the DEPS file to convert')
- parser.add_option('-o', '--out',
- help='path to the converted DEPS file (default: stdout)')
- parser.add_option('-t', '--type',
- help='[DEPRECATED] type of DEPS file (public, etc)')
- parser.add_option('-x', '--extra-rules',
- help='Path to file with additional conversion rules.')
- parser.add_option('-r', '--repos',
- help='path to the directory holding all the Git repos')
- parser.add_option('-w', '--workspace', metavar='PATH',
- help='top level of a git-based gclient checkout')
- parser.add_option('--verify', action='store_true',
- help='ping each Git repo to make sure it exists')
- parser.add_option('--json',
- help='path to a JSON file for machine-readable output')
- options = parser.parse_args()[0]
-
- # Get the content of the DEPS file.
- deps_content = deps_utils.GetDepsContent(options.deps)
- (deps, deps_os, include_rules, skip_child_includes, hooks,
- svn_deps_vars) = deps_content
-
- if options.extra_rules and options.type:
- parser.error('Can\'t specify type and extra-rules at the same time.')
- elif options.type:
- options.extra_rules = os.path.join(
- os.path.abspath(os.path.dirname(__file__)),
- 'svn_to_git_%s.py' % options.type)
-
- if options.extra_rules and not os.path.exists(options.extra_rules):
- raise Exception('Can\'t locate rules file "%s".' % options.extra_rules)
-
- # Create a var containing the Git and Webkit URL, this will make it easy for
- # people to use a mirror instead.
- git_url = 'https://chromium.googlesource.com'
- deps_vars = {
- 'git_url': git_url,
- 'webkit_url': git_url + '/chromium/blink.git',
- }
-
- # Convert the DEPS file to Git.
- deps, baddeps = ConvertDepsToGit(deps, options, deps_vars, svn_deps_vars)
- for os_dep in deps_os:
- deps_os[os_dep], os_bad_deps = ConvertDepsToGit(
- deps_os[os_dep], options, deps_vars, svn_deps_vars)
- baddeps = baddeps.union(os_bad_deps)
-
- if options.json:
- with open(options.json, 'w') as f:
- json.dump(list(baddeps), f, sort_keys=True, indent=2)
-
- if baddeps:
- print >> sys.stderr, ('\nUnable to resolve the following repositories. '
- 'Please make sure\nthat any svn URLs have a git mirror associated with '
- 'them.\nTo see the exact error, run `git ls-remote [repository]` where'
- '\n[repository] is the URL ending in .git (strip off the @revision\n'
- 'number.) For more information, visit http://code.google.com\n'
- '/p/chromium/wiki/UsingGit#Adding_new_repositories_to_DEPS.\n')
- for dep in baddeps:
- print >> sys.stderr, ' ' + dep
- return 2
- else:
- if options.verify:
- print >> sys.stderr, ('\nAll referenced repositories were successfully '
- 'resolved.')
- return 0
-
- # Write the DEPS file to disk.
- deps_utils.WriteDeps(options.out, deps_vars, deps, deps_os, include_rules,
- skip_child_includes, hooks)
- return 0
-
-
-if '__main__' == __name__:
- sys.exit(main())
diff --git a/chromium/tools/deps2git/deps2submodules.py b/chromium/tools/deps2git/deps2submodules.py
deleted file mode 100644
index fead751c92f..00000000000
--- a/chromium/tools/deps2git/deps2submodules.py
+++ /dev/null
@@ -1,168 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2012 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.
-
-"""Read .DEPS.git and use the information to update git submodules"""
-
-import optparse
-import os
-import re
-import subprocess
-import sys
-
-from deps_utils import GetDepsContent
-
-
-SHA1_RE = re.compile('[0-9a-fA-F]{40}')
-
-
-def SanitizeDeps(submods):
- """
- Look for conflicts (primarily nested submodules) in submodule data. In the
- case of a conflict, the higher-level (shallower) submodule takes precedence.
- Modifies the submods argument in-place.
- """
- for submod_name in submods.keys():
- parts = submod_name.split('/')[:-1]
- while parts:
- may_conflict = '/'.join(parts)
- if may_conflict in submods:
- msg = ('Warning: dropping submodule "%s", because '
- 'it is nested in submodule "%s".' % (submod_name, may_conflict))
- print >> sys.stderr, msg
- submods.pop(submod_name)
- break
- parts.pop()
- return submods
-
-
-def CollateDeps(deps_content):
- """
- Take the output of deps_utils.GetDepsContent and return a hash of:
-
- { submod_name : [ [ submod_os, ... ], submod_url, submod_sha1 ], ... }
- """
- fixdep = lambda x: x[4:] if x.startswith('src/') else x
- spliturl = lambda x: list(x.partition('@')[0::2]) if x else [None, None]
- submods = {}
- # Non-OS-specific DEPS always override OS-specific deps. This is an interim
- # hack until there is a better way to handle OS-specific DEPS.
- for (deps_os, val) in deps_content[1].iteritems():
- for (dep, url) in val.iteritems():
- submod_data = submods.setdefault(fixdep(dep), [[]] + spliturl(url))
- submod_data[0].append(deps_os)
- for (dep, url) in deps_content[0].iteritems():
- submods[fixdep(dep)] = [['all']] + spliturl(url)
- return submods
-
-
-def WriteGitmodules(submods, gitless=False, rewrite_rules=None):
- """
- Take the output of CollateDeps, use it to write a .gitmodules file and
- return a map of submodule name -> sha1 to be added to the git index.
- """
- adds = {}
- if not rewrite_rules:
- rewrite_rules = []
- def _rewrite(url):
- if not url:
- return url
- for rule in rewrite_rules:
- if url.startswith(rule[0]):
- return rule[1] + url[len(rule[0]):]
- return url
- fh = open('.gitmodules', 'w')
- for submod in sorted(submods.keys()):
- [submod_os, submod_url, submod_sha1] = submods[submod]
- submod_url = _rewrite(submod_url)
- print >> fh, '[submodule "%s"]' % submod
- print >> fh, '\tpath = %s' % submod
- print >> fh, '\turl = %s' % (submod_url if submod_url else '')
- print >> fh, '\tos = %s' % ','.join(submod_os)
- if submod_sha1 and not SHA1_RE.match(submod_sha1):
- raise RuntimeError('sha1 hash "%s" for submodule "%s" is malformed' %
- (submod_sha1, submod))
- if gitless or not submod_url:
- continue
- if not submod_sha1:
- # We don't know what sha1 to register, so we have to infer it from the
- # submodule's origin/master.
- if not os.path.exists(os.path.join(submod, '.git')):
- # Not cloned yet
- subprocess.check_call(['git', 'clone', '-n', submod_url, submod])
- else:
- # Already cloned; let's fetch
- subprocess.check_call(['git', 'fetch', 'origin'], cwd=submod)
- sub = subprocess.Popen(['git', 'rev-list', 'origin/HEAD^!'],
- cwd=submod, stdout=subprocess.PIPE)
- submod_sha1 = sub.communicate()[0].rstrip()
- adds[submod] = submod_sha1
- fh.close()
- if not gitless:
- subprocess.check_call(['git', 'add', '.gitmodules'])
- return adds
-
-
-def RemoveObsoleteSubmodules():
- """
- Delete from the git repository any submodules which aren't in .gitmodules.
- """
- lsfiles_proc = subprocess.Popen(['git', 'ls-files', '-s'],
- stdout=subprocess.PIPE)
- grep_proc = subprocess.Popen(['grep', '^160000'],
- stdin = lsfiles_proc.stdout,
- stdout=subprocess.PIPE)
- (grep_out, _) = grep_proc.communicate() or ('', '')
- lsfiles_proc.communicate()
- with open(os.devnull, 'w') as nullpipe:
- for line in grep_out.splitlines():
- [_, _, _, path] = line.split()
- cmd = ['git', 'config', '-f', '.gitmodules',
- '--get-regexp', 'submodule\..*\.path', '^%s$' % path]
- try:
- subprocess.check_call(cmd, stdout=nullpipe)
- except subprocess.CalledProcessError:
- subprocess.check_call(['git', 'update-index', '--force-remove', path])
-
-
-def main():
- parser = optparse.OptionParser()
- parser.add_option('--gitless', action='store_true',
- help='Skip all actions that assume a git working copy '
- '(to support presubmit checks)')
- parser.add_option('--rewrite-url', action='append', metavar='OLD_URL=NEW_URL',
- default=[], help='Translate urls according to this rule')
- options, args = parser.parse_args()
- if args:
- deps_file = args[0]
- else:
- deps_file = '.DEPS.git'
-
- rewrite_rules = []
- for rule in options.rewrite_url:
- (old_url, new_url) = rule.split('=', 1)
- if not old_url or not new_url:
- print 'Bad url rewrite rule: "%s"' % rule
- parser.print_help()
- return 1
- rewrite_rules.append((old_url, new_url))
-
-
- # 9/18/2012 -- HACK to fix try bots without restarting
- hack_deps_file = os.path.join('src', '.DEPS.git')
- if not os.path.exists(deps_file) and os.path.exists(hack_deps_file):
- deps_file = hack_deps_file
-
- adds = WriteGitmodules(SanitizeDeps(CollateDeps(GetDepsContent(deps_file))),
- rewrite_rules=rewrite_rules, gitless=options.gitless)
- if not options.gitless:
- RemoveObsoleteSubmodules()
- for submod_path, submod_sha1 in adds.iteritems():
- subprocess.check_call(['git', 'update-index', '--add',
- '--cacheinfo', '160000', submod_sha1, submod_path])
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/deps2git/deps2submodules_unittest.py b/chromium/tools/deps2git/deps2submodules_unittest.py
deleted file mode 100755
index 4f4114c804a..00000000000
--- a/chromium/tools/deps2git/deps2submodules_unittest.py
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-import unittest
-
-import deps2submodules
-
-
-class Deps2SubmodulesCollateDepsTest(unittest.TestCase):
- def testBasic(self):
- arg = ({
- 'src/monkeypatch': 'http://git.chromium.org/monkepatch.git@abc123',
- 'src/third_party/monkeyfood':
- 'http://git.chromium.org/monkeyfood@def456',
- }, {}) # No OS-specific DEPS.
- expected = {
- 'monkeypatch':
- [['all'], 'http://git.chromium.org/monkepatch.git', 'abc123'],
- 'third_party/monkeyfood':
- [['all'], 'http://git.chromium.org/monkeyfood', 'def456'],
- }
- self.assertEqual(expected, deps2submodules.CollateDeps(arg))
-
- def testSrcPrefixStrip(self):
- arg = ({
- 'src/in_src': 'http://git.chromium.org/src.git@f00bad',
- 'not_in_src/foo': 'http://other.git.something/main.git@123456',
- }, {}) # No OS-specific DEPS.
- expected = {
- 'in_src': [['all'], 'http://git.chromium.org/src.git', 'f00bad'],
- 'not_in_src/foo':
- [['all'], 'http://other.git.something/main.git', '123456'],
- }
- self.assertEqual(expected, deps2submodules.CollateDeps(arg))
-
- def testOSDeps(self):
- arg = ({
- 'src/hotp': 'http://hmac.org/hotp.git@7fffffff',
- }, {
- 'linux': {
- 'src/third_party/selinux': 'http://kernel.org/selinux.git@abc123',
- 'src/multios': 'http://git.chromium.org/multi.git@000005',
- },
- 'mac': {
- 'src/third_party/security':
- 'http://opensource.apple.com/security.git@def456',
- },
- 'win': {
- 'src/multios': 'http://git.chromium.org/multi.git@000005',
- },
- })
- expected = {
- 'hotp': [['all'], 'http://hmac.org/hotp.git', '7fffffff'],
- 'third_party/selinux':
- [['linux'], 'http://kernel.org/selinux.git', 'abc123'],
- 'third_party/security':
- [['mac'], 'http://opensource.apple.com/security.git', 'def456'],
- 'multios':
- [['win', 'linux'], 'http://git.chromium.org/multi.git', '000005'],
- }
- self.assertEqual(expected, deps2submodules.CollateDeps(arg))
-
- def testOSDepsWithNone(self):
- arg = ({
- 'src/skia': 'http://git.chromium.org/skia.git@abc123',
- 'src/aura': 'http://git.chromium.org/aura.git',
- }, {
- 'ios': {
- 'src/skia': None,
- 'src/apple': 'http://git.chromium.org/apple.git@def456',
- }
- })
- expected = {
- 'skia': [['all'], 'http://git.chromium.org/skia.git', 'abc123'],
- 'aura': [['all'], 'http://git.chromium.org/aura.git', ''],
- 'apple': [['ios'], 'http://git.chromium.org/apple.git', 'def456'],
- }
- self.assertEqual(expected, deps2submodules.CollateDeps(arg))
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/chromium/tools/deps2git/deps_utils.py b/chromium/tools/deps2git/deps_utils.py
deleted file mode 100644
index e103e13d677..00000000000
--- a/chromium/tools/deps2git/deps_utils.py
+++ /dev/null
@@ -1,135 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2012 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.
-
-"""Utilities for formatting and writing DEPS files."""
-
-import re
-import sys
-
-# Used by Varify() to automatically convert variable names tagged with this
-# prefix into Var('<variable name>').
-VARIFY_MARKER_TAG_PREFIX = 'VARIFY_MARKER_TAG_'
-
-
-class VarImpl(object):
- """Implement the Var function used within the DEPS file."""
-
- def __init__(self, local_scope):
- self._local_scope = local_scope
-
- def Lookup(self, var_name):
- """Implements the Var syntax."""
- if var_name in self._local_scope.get('vars', {}):
- return self._local_scope['vars'][var_name]
- raise Exception('Var is not defined: %s' % var_name)
-
-
-def GetDepsContent(deps_path):
- """Read a DEPS file and return all the sections."""
- deps_file = open(deps_path, 'rU')
- content = deps_file.read()
- local_scope = {}
- var = VarImpl(local_scope)
- global_scope = {
- 'Var': var.Lookup,
- 'deps': {},
- 'deps_os': {},
- 'include_rules': [],
- 'skip_child_includes': [],
- 'hooks': [],
- }
- exec(content, global_scope, local_scope)
- local_scope.setdefault('deps', {})
- local_scope.setdefault('deps_os', {})
- local_scope.setdefault('include_rules', [])
- local_scope.setdefault('skip_child_includes', [])
- local_scope.setdefault('hooks', [])
- local_scope.setdefault('vars', {})
-
- return (local_scope['deps'], local_scope['deps_os'],
- local_scope['include_rules'], local_scope['skip_child_includes'],
- local_scope['hooks'], local_scope['vars'])
-
-
-def PrettyDeps(deps, indent=0):
- """Stringify a deps dictionary in a pretty way."""
- pretty = ' ' * indent
- pretty += '{\n'
-
- indent += 4
-
- for item in sorted(deps):
- if type(deps[item]) == dict:
- value = PrettyDeps(deps[item], indent)
- else:
- value = ' ' * (indent + 4)
- if deps[item] is None:
- value += str(deps[item])
- else:
- value += '\'%s\'' % str(deps[item])
- pretty += ' ' * indent
- pretty += '\'%s\':\n' % item
- pretty += '%s,\n' % value
-
- indent -= 4
- pretty += ' ' * indent
- pretty += '}'
- return pretty
-
-
-def PrettyObj(obj):
- """Stringify an object in a pretty way."""
- pretty = str(obj).replace('{', '{\n ')
- pretty = pretty.replace('}', '\n}')
- pretty = pretty.replace('[', '[\n ')
- pretty = pretty.replace(']', '\n]')
- pretty = pretty.replace('\':', '\':\n ')
- pretty = pretty.replace(', ', ',\n ')
- return pretty
-
-
-def Varify(deps):
- """Replace all instances of our git server with a git_url var."""
- deps = deps.replace(
- '\'https://chromium.googlesource.com/chromium/blink.git',
- 'Var(\'webkit_url\')')
- deps = deps.replace(
- '\'https://chromium.googlesource.com', 'Var(\'git_url\') + \'')
- deps = deps.replace(
- '\'https://git.chromium.org', 'Var(\'git_url\') + \'')
- deps = deps.replace('VAR_WEBKIT_REV\'', ' + Var(\'webkit_rev\')')
-
- # Try to replace all instances of form "marker_prefix_<name>'" with
- # "' + Var('<name>')". If there are no matches, nothing is done.
- deps = re.sub(VARIFY_MARKER_TAG_PREFIX + '_(\w+)\'',
- lambda match: '\' + Var(\'%s\')' % match.group(1), deps)
- return deps
-
-
-def WriteDeps(deps_file_name, deps_vars, deps, deps_os, include_rules,
- skip_child_includes, hooks):
- """Given all the sections in a DEPS file, write it to disk."""
- new_deps = ('# DO NOT EDIT EXCEPT FOR LOCAL TESTING.\n'
- '# THIS IS A GENERATED FILE.\n',
- '# ALL MANUAL CHANGES WILL BE OVERWRITTEN.\n',
- '# SEE http://code.google.com/p/chromium/wiki/UsingGit\n',
- '# FOR HOW TO ROLL DEPS\n'
- 'vars = %s\n\n' % PrettyObj(deps_vars),
- 'deps = %s\n\n' % Varify(PrettyDeps(deps)),
- 'deps_os = %s\n\n' % Varify(PrettyDeps(deps_os)),
- 'include_rules = %s\n\n' % PrettyObj(include_rules),
- 'skip_child_includes = %s\n\n' % PrettyObj(skip_child_includes),
- 'hooks = %s\n' % PrettyObj(hooks))
- new_deps = ''.join(new_deps)
- if deps_file_name:
- deps_file = open(deps_file_name, 'wb')
- else:
- deps_file = sys.stdout
-
- try:
- deps_file.write(new_deps)
- finally:
- if deps_file_name:
- deps_file.close()
diff --git a/chromium/tools/deps2git/git_tools.py b/chromium/tools/deps2git/git_tools.py
deleted file mode 100644
index 3293b13f334..00000000000
--- a/chromium/tools/deps2git/git_tools.py
+++ /dev/null
@@ -1,210 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2012 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.
-
-
-import os
-import re
-import subprocess
-import threading
-
-
-# Show more information about the commands being executed.
-VERBOSE = False
-
-# The longest any single subprocess will be allowed to run.
-TIMEOUT = 20 * 60
-
-
-def GetStatusOutput(cmd, cwd=None):
- """Return (status, output) of executing cmd in a shell."""
- if VERBOSE:
- print ''
- print '[DEBUG] Running "%s"' % cmd
-
- def _thread_main():
- thr = threading.current_thread()
- thr.status = -1
- thr.stdout = ''
- thr.stderr = '<timeout>'
- try:
- proc = subprocess.Popen(cmd, shell=True, universal_newlines=True, cwd=cwd,
- stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
- (stdout, _) = proc.communicate()
- except Exception, e:
- thr.status = -1
- thr.stdout = ''
- thr.stderr = repr(e)
- else:
- thr.status = proc.returncode
- thr.stdout = stdout
- thr.stderr = ''
-
- thr = threading.Thread(target=_thread_main)
- thr.daemon = True
- thr.start()
- thr.join(TIMEOUT)
-
- # pylint: disable=E1101
- if VERBOSE:
- short_output = ' '.join(thr.stdout.splitlines())
- short_output = short_output.strip(' \t\n\r')
- print '[DEBUG] Output: %d, %-60s' % (thr.status, short_output)
-
- return (thr.status, thr.stdout)
-
-
-def Git(git_repo, command, is_mirror=False):
- """Execute a git command within a local git repo."""
- if is_mirror:
- cmd = 'git --git-dir=%s %s' % (git_repo, command)
- cwd = None
- else:
- cmd = 'git %s' % command
- cwd = git_repo
- (status, output) = GetStatusOutput(cmd, cwd)
- if status != 0:
- raise Exception('Failed to run %s. error %d. output %s' % (cmd, status,
- output))
- return (status, output)
-
-
-def Clone(git_url, git_repo, is_mirror):
- """Clone a repository."""
- cmd = 'clone%s %s %s' % (' --mirror' if is_mirror else '', git_url, git_repo)
- if not is_mirror and not os.path.exists(git_repo):
- os.makedirs(git_repo)
- return Git(git_repo, cmd, is_mirror)
-
-
-def Fetch(git_repo, git_url, is_mirror):
- """Fetch the latest objects for a given git repository."""
- # Always update the upstream url
- Git(git_repo, 'config remote.origin.url %s' % git_url)
- Git(git_repo, 'fetch origin', is_mirror)
-
-
-def Ping(git_repo):
- """Confirm that a remote repository URL is valid."""
- status, _ = GetStatusOutput('git ls-remote ' + git_repo)
- return status == 0
-
-
-def CreateLessThanOrEqualRegex(number):
- """ Return a regular expression to test whether an integer less than or equal
- to 'number' is present in a given string.
- """
-
- # In three parts, build a regular expression that match any numbers smaller
- # than 'number'.
- # For example, 78656 would give a regular expression that looks like:
- # Part 1
- # (78356| # 78356
- # Part 2
- # 7835[0-5]| # 78350-78355
- # 783[0-4][0-9]| # 78300-78349
- # 78[0-2][0-9][0-9]| # 78000-78299
- # 7[0-7][0-9][0-9][0-9]| # 70000-77999
- # [0-6][0-9][0-9][0-9][0-9]| # 10000-69999
- # Part 3
- # [0-9][0-9][0-9][0-9]| # 1000-9999
- # [0-9][0-9][0-9]| # 100-999
- # [0-9][0-9]| # 10-99
- # [0-9]) # 0-9
-
- # Part 1: Create an array with all the regexes, as described above.
- # Prepopulate it with the number itself.
- number = str(number)
- expressions = [number]
-
- # Convert the number to a list, so we can translate digits in it to
- # expressions.
- num_list = list(number)
- num_len = len(num_list)
-
- # Part 2: Go through all the digits in the number, starting from the end.
- # Each iteration appends a line to 'expressions'.
- for index in range (num_len - 1, -1, -1):
- # Convert this digit back to an integer.
- digit = int(num_list[index])
-
- # Part 2.1: No processing if this digit is a zero.
- if digit == 0:
- continue
-
- # Part 2.2: We switch the current digit X by a range "[0-(X-1)]".
- num_list[index] = '[0-%d]' % (digit - 1)
-
- # Part 2.3: We set all following digits to be "[0-9]".
- # Since we just decrementented a digit in a most important position, all
- # following digits don't matter. The possible numbers will always be smaller
- # than before we decremented.
- for next_digit in range(index + 1, num_len):
- num_list[next_digit] = '[0-9]'
-
- # Part 2.4: Add this new sub-expression to the list.
- expressions.append(''.join(num_list))
-
- # Part 3: We add all the full ranges to match all numbers that are at least
- # one order of magnitude smaller than the original numbers.
- for index in range(1, num_len):
- expressions.append('[0-9]'*index)
-
- # All done. We now have our final regular expression.
- regex = '(%s)' % ('|'.join(expressions))
- return regex
-
-
-class SearchError(Exception):
- pass
-
-
-def _SearchImpl(git_repo, svn_rev, is_mirror, refspec, fetch_url, regex):
- def _FindRevForCommitish(git_repo, commitish, is_mirror):
- _, output = Git(git_repo, 'cat-file commit %s' % commitish, is_mirror)
- match = re.match(r'git-svn-id: [^\s@]+@(\d+) \S+$', output.splitlines()[-1])
- assert match, 'no match on %s' % output
- return int(match.group(1))
-
- # Check if svn_rev is newer than the current refspec revision.
- found_rev = _FindRevForCommitish(git_repo, refspec, is_mirror)
- if found_rev < int(svn_rev) and fetch_url:
- if VERBOSE:
- print 'Fetching %s %s [%s < %s]' % (git_repo, refspec, found_rev, svn_rev)
- Fetch(git_repo, fetch_url, is_mirror)
-
- # Find the first commit matching the given git-svn-id regex.
- _, output = Git(
- git_repo,
- ('log -E --grep="^git-svn-id: [^@]*@%s [A-Za-z0-9-]*$" '
- '-1 --format="%%H" %s') % (regex, refspec),
- is_mirror)
- output = output.strip()
- if not re.match('^[0-9a-fA-F]{40}$', output):
- raise SearchError('Cannot find revision %s in %s' % (svn_rev, git_repo))
-
- # Check if it actually matched the svn_rev that was requested.
- found_rev = _FindRevForCommitish(git_repo, output, is_mirror)
- found_msg = svn_rev
- if found_rev != int(svn_rev):
- found_msg = '%s [actual: %s]' % (svn_rev, found_rev)
- print '%s: %s <-> %s' % (git_repo, output, found_msg)
- return output
-
-
-def SearchExact(git_repo, svn_rev, is_mirror, refspec='FETCH_HEAD',
- fetch_url=None):
- """Return the Git commit id exactly matching the given SVN revision.
-
- If fetch_url is not None, will update repo if revision is newer."""
- regex = str(svn_rev)
- return _SearchImpl(git_repo, svn_rev, is_mirror, refspec, fetch_url, regex)
-
-
-def Search(git_repo, svn_rev, is_mirror, refspec='FETCH_HEAD', fetch_url=None):
- """Return the Git commit id fuzzy matching the given SVN revision.
-
- If fetch_url is not None, will update repo if revision is newer."""
- regex = CreateLessThanOrEqualRegex(svn_rev)
- return _SearchImpl(git_repo, svn_rev, is_mirror, refspec, fetch_url, regex)
diff --git a/chromium/tools/deps2git/svn_to_git_public.py b/chromium/tools/deps2git/svn_to_git_public.py
deleted file mode 100755
index 3eda590ec66..00000000000
--- a/chromium/tools/deps2git/svn_to_git_public.py
+++ /dev/null
@@ -1,188 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2012 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.
-
-"""SVN to GIT mapping for the public Chromium repositories."""
-
-import re
-
-
-GIT_HOST = 'https://chromium.googlesource.com/'
-
-BLINK_TRUNK_RE = re.compile(
- '^https?://src.chromium.org/blink/trunk$')
-BLINK_TRUNK_PUBLIC_RE = re.compile(
- '^https?://src.chromium.org/blink/trunk/public$')
-
-# Used by deps2git.ConvertDepsToGit() as overrides for SVN DEPS. Each entry
-# maps a DEPS path to a DEPS variable identifying the Git hash for its
-# respective repository. Variables are automatically transferred from SVN DEPS
-# to .DEPS.git and converted into variables by deps_utils.Varify().
-DEPS_OVERRIDES = {
- 'src/third_party/ffmpeg': 'ffmpeg_hash'
-}
-
-
-def SvnUrlToGitUrl(path, svn_url):
- """Convert a chromium SVN URL to a chromium Git URL."""
-
- match = re.match(
- '(https?://src.chromium.org/svn|svn://svn.chromium.org/chrome)(/.*)',
- svn_url)
- if match:
- svn_url = match.group(2)
-
- # A few special cases.
- if re.match('^https?://sctp-refimpl.googlecode.com/svn/' +
- 'trunk/KERN/usrsctp/usrsctplib$', svn_url):
- return (path, GIT_HOST + 'external/usrsctplib.git', GIT_HOST)
-
- if svn_url == '/trunk/deps/page_cycler/acid3':
- return (path, GIT_HOST + 'chromium/deps/acid3.git', GIT_HOST)
-
- if svn_url == '/trunk/deps/canvas_bench':
- return (path, GIT_HOST + 'chromium/canvas_bench.git', GIT_HOST)
-
- if svn_url == '/trunk/deps/gpu/software_rendering_list':
- return (path, GIT_HOST + 'chromium/deps/gpu/software_rendering_list.git',
- GIT_HOST)
-
- if svn_url == '/trunk/tools/third_party/python_26':
- return (path, GIT_HOST + 'chromium/deps/python_26.git', GIT_HOST)
-
- if svn_url == '/trunk/deps/support':
- return (path, GIT_HOST + 'chromium/support.git', GIT_HOST)
-
- if svn_url == '/trunk/deps/frame_rate/content':
- return (path, GIT_HOST + 'chromium/frame_rate/content.git', GIT_HOST)
-
- if svn_url == 'svn://svn.chromium.org/boto':
- return (path, GIT_HOST + 'external/boto.git', GIT_HOST)
-
- if svn_url == 'svn://svn.chromium.org/gsutil/trunk/src':
- return (path, GIT_HOST + 'external/gsutil/src.git', GIT_HOST)
-
- if svn_url == 'svn://svn.chromium.org/jsoncpp/trunk/jsoncpp':
- return (path, GIT_HOST + 'external/jsoncpp/jsoncpp.git', GIT_HOST)
-
- if svn_url == '/trunk/deps/third_party/ffmpeg':
- return (path, GIT_HOST + 'chromium/third_party/ffmpeg.git', GIT_HOST)
-
- if svn_url == '/trunk/deps/cdm':
- return (path, GIT_HOST + 'chromium/cdm.git', GIT_HOST)
-
- if re.match('^https?://webrtc.googlecode.com/svn/stable/webrtc$', svn_url):
- return (path, GIT_HOST + 'external/webrtc/stable/webrtc.git', GIT_HOST)
-
- if re.match('^https?://webrtc.googlecode.com/svn/stable/talk$', svn_url):
- return (path, GIT_HOST + 'external/webrtc/stable/talk.git', GIT_HOST)
-
- if re.match('^https?://webrtc.googlecode.com/svn/stable/src$', svn_url):
- return (path, GIT_HOST + 'external/webrtc/stable/src.git', GIT_HOST)
-
- if re.match('^https?://webrtc.googlecode.com/svn/deps/third_party/openmax$',
- svn_url):
- return (path, GIT_HOST + 'external/webrtc/deps/third_party/openmax.git',
- GIT_HOST)
-
- if svn_url in ('http://selenium.googlecode.com/svn/trunk/py/test',
- 'https://selenium.googlecode.com/svn/trunk/py/test',
- '/trunk/deps/reference_builds/chrome'):
- # Those can't be git svn cloned. Skipping for now.
- return
-
- # Projects on sourceforge using trunk
- match = re.match('^https?://svn.code.sf.net/p/(.*)/code/trunk(.*)',
- svn_url)
- if match:
- repo = '%s%s.git' % (match.group(1), match.group(2))
- return (path, GIT_HOST + 'external/%s' % repo, GIT_HOST)
-
- # Fallback for old sourceforge URL.
- match = re.match('^https?://(.*).svn.sourceforge.net/svnroot/(.*)/trunk(.*)',
- svn_url)
- if match:
- repo = '%s%s.git' % (match.group(2), match.group(3))
- return (path, GIT_HOST + 'external/%s' % repo, GIT_HOST)
-
- # Subdirectories of libaddressinput
- if re.match('^https?://libaddressinput.googlecode.com/svn/trunk', svn_url):
- if 'libaddressinput' in path:
- path = path[:path.index('libaddressinput')] + 'libaddressinput/src'
- return (path, GIT_HOST + 'external/libaddressinput.git', GIT_HOST)
-
- # Projects on googlecode.com using trunk.
- match = re.match('^https?://(.*).googlecode.com/svn/trunk(.*)', svn_url)
- if match:
- repo = '%s%s.git' % (match.group(1), match.group(2))
- return (path, GIT_HOST + 'external/%s' % repo, GIT_HOST)
-
- # Projects on googlecode.com using branches.
- # Branches should be automatically included in the projects corresponding
- # 'trunk' mirror as 'branch-heads' refspecs.
- # This makes some broad assumptions about a "standard" branch layout , i.e.:
- # svn/branches/<branch_name>/<optional_sub_path>
- # This layout can't really be enforced, though it appears to apply to most
- # repos. Outliers will have to be special-cased.
- match = re.match('^https?://(.*).googlecode.com/svn/branches/([^/]+)(.*)',
- svn_url)
- if match:
- repo = '%s%s.git' % (match.group(1), match.group(3))
- branch_name = match.group(2)
- return (path, GIT_HOST + 'external/%s' % repo, branch_name, GIT_HOST)
-
- # Projects that are subdirectories of the native_client repository.
- match = re.match('^https?://src.chromium.org/native_client/trunk/(.*)',
- svn_url)
- if match:
- repo = '%s.git' % match.group(1)
- return (path, GIT_HOST + 'native_client/%s' % repo, GIT_HOST)
-
- # Projects that are subdirectories of the chromium/{src,tools} repository.
- match = re.match('/trunk/((src|tools)/.*)', svn_url)
- if match:
- repo = '%s.git' % match.group(1)
- return (path, GIT_HOST + 'chromium/%s' % repo, GIT_HOST)
-
- # Public-header-only blink directory for iOS.
- if BLINK_TRUNK_PUBLIC_RE.match(svn_url):
- return (path, GIT_HOST + 'chromium/blink-public.git', GIT_HOST)
-
- # Main blink directory.
- if BLINK_TRUNK_RE.match(svn_url):
- return (path, GIT_HOST + 'chromium/blink.git', GIT_HOST)
-
- # Minimal header-only webkit directories for iOS.
- if svn_url == ('http://svn.webkit.org/repository/webkit/trunk/Source/' +
- 'WebKit/chromium/public'):
- return (path,
- GIT_HOST + 'external/WebKit/Source/WebKit/chromium/public.git',
- GIT_HOST)
- if svn_url == ('http://svn.webkit.org/repository/webkit/trunk/Source/' +
- 'Platform/chromium/public'):
- return (path,
- GIT_HOST + 'external/WebKit/Source/Platform/chromium/public.git',
- GIT_HOST)
-
- # Ignore all webkit directories (other than the above), since we fetch the
- # whole thing directly for all but iOS.
- if svn_url == '/trunk/deps/third_party/WebKit':
- return
-
- # blink
-
- # Subdirectories of the chromium deps/third_party directory.
- match = re.match('/trunk/deps/third_party/(.*)', svn_url)
- if match:
- repo = '%s.git' % match.group(1)
- return (path, GIT_HOST + 'chromium/deps/%s' % repo, GIT_HOST)
-
- # Subdirectories of the chromium deps/reference_builds directory.
- match = re.match('/trunk/deps/reference_builds/(.*)', svn_url)
- if match:
- repo = '%s.git' % match.group(1)
- return (path, GIT_HOST + 'chromium/reference_builds/%s' % repo, GIT_HOST)
-
- # Nothing yet? Oops.
- print 'No match for %s' % svn_url
diff --git a/chromium/tools/diagnose-me.py b/chromium/tools/diagnose-me.py
deleted file mode 100755
index 970da8a52ae..00000000000
--- a/chromium/tools/diagnose-me.py
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2012 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.
-
-"""Diagnose some common system configuration problems on Linux, and
-suggest fixes."""
-
-import os
-import subprocess
-import sys
-
-all_checks = []
-
-def Check(name):
- """Decorator that defines a diagnostic check."""
- def wrap(func):
- all_checks.append((name, func))
- return func
- return wrap
-
-
-@Check("/usr/bin/ld is not gold")
-def CheckSystemLd():
- proc = subprocess.Popen(['/usr/bin/ld', '-v'], stdout=subprocess.PIPE)
- stdout = proc.communicate()[0]
- if 'GNU gold' in stdout:
- return ("When /usr/bin/ld is gold, system updates can silently\n"
- "corrupt your graphics drivers.\n"
- "Try 'sudo apt-get remove binutils-gold'.\n")
- return None
-
-
-@Check("random lds are not in the $PATH")
-def CheckPathLd():
- proc = subprocess.Popen(['which', '-a', 'ld'], stdout=subprocess.PIPE)
- stdout = proc.communicate()[0]
- instances = stdout.split()
- if len(instances) > 1:
- return ("You have multiple 'ld' binaries in your $PATH:\n"
- + '\n'.join(' - ' + i for i in instances) + "\n"
- "You should delete all of them but your system one.\n"
- "gold is hooked into your build via gyp.\n")
- return None
-
-
-@Check("/usr/bin/ld doesn't point to gold")
-def CheckLocalGold():
- # Check /usr/bin/ld* symlinks.
- for path in ('ld.bfd', 'ld'):
- path = '/usr/bin/' + path
- try:
- target = os.readlink(path)
- except OSError, e:
- if e.errno == 2:
- continue # No such file
- if e.errno == 22:
- continue # Not a symlink
- raise
- if '/usr/local/gold' in target:
- return ("%s is a symlink into /usr/local/gold.\n"
- "It's difficult to make a recommendation, because you\n"
- "probably set this up yourself. But you should make\n"
- "/usr/bin/ld be the standard linker, which you likely\n"
- "renamed /usr/bin/ld.bfd or something like that.\n" % path)
-
- return None
-
-
-@Check("random ninja binaries are not in the $PATH")
-def CheckPathNinja():
- proc = subprocess.Popen(['which', 'ninja'], stdout=subprocess.PIPE)
- stdout = proc.communicate()[0]
- if not 'depot_tools' in stdout:
- return ("The ninja binary in your path isn't from depot_tools:\n"
- + " " + stdout +
- "Remove custom ninjas from your path so that the one\n"
- "in depot_tools is used.\n")
- return None
-
-
-@Check("build dependencies are satisfied")
-def CheckBuildDeps():
- script_path = os.path.join(
- os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'build',
- 'install-build-deps.sh')
- proc = subprocess.Popen([script_path, '--quick-check'],
- stdout=subprocess.PIPE)
- stdout = proc.communicate()[0]
- if 'WARNING' in stdout:
- return ("Your build dependencies are out-of-date.\n"
- "Run '" + script_path + "' to update.")
- return None
-
-
-def RunChecks():
- for name, check in all_checks:
- sys.stdout.write("* Checking %s: " % name)
- sys.stdout.flush()
- error = check()
- if not error:
- print "ok"
- else:
- print "FAIL"
- print error
-
-
-if __name__ == '__main__':
- RunChecks()
diff --git a/chromium/tools/dromaeo_benchmark_runner/dromaeo_benchmark_runner.py b/chromium/tools/dromaeo_benchmark_runner/dromaeo_benchmark_runner.py
deleted file mode 100755
index 5c4be81c37d..00000000000
--- a/chromium/tools/dromaeo_benchmark_runner/dromaeo_benchmark_runner.py
+++ /dev/null
@@ -1,266 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""Dromaeo benchmark automation script.
-
-Script runs dromaeo tests in browsers specified by --browser switch and saves
-results to a spreadsheet on docs.google.com.
-
-Prerequisites:
-1. Install Google Data APIs Python Client Library from
- http://code.google.com/p/gdata-python-client.
-2. Checkout Dromaeo benchmark from
- http://src.chromium.org/svn/trunk/src/chrome/test/data/dromaeo and provide
- local path to it in --dromaeo_home switch.
-3. Create a spreadsheet at http://docs.google.com and specify its name in
- --spreadsheet switch
-
-Benchmark results are presented in the following format:
-browser | date time
-test 1 name|m11|...|m1n|test 1 average mean| |e11|...|e1n|test 1 average error
-test 2 name|m21|...|m2n|test 2 average mean| |e21|...|e2n|test 2 average error
-...
-
-Here mij is mean run/s in individual dromaeo test i during benchmark run j,
-eij is error in individual dromaeo test i during benchmark run j.
-
-Example usage:
-dromaeo_benchmark_runner.py -b "E:\chromium\src\chrome\Release\chrome.exe"
- -b "C:\Program Files (x86)\Safari\safari.exe"
- -b "C:\Program Files (x86)\Opera 10.50 pre-alpha\opera.exe" -n 1
- -d "E:\chromium\src\chrome\test\data\dromaeo" -f dom -e example@gmail.com
-
-"""
-
-import getpass
-import json
-import os
-import re
-import subprocess
-import time
-import urlparse
-from optparse import OptionParser
-from BaseHTTPServer import HTTPServer
-import SimpleHTTPServer
-import gdata.spreadsheet.service
-
-max_spreadsheet_columns = 20
-test_props = ['mean', 'error']
-
-
-def ParseArguments():
- parser = OptionParser()
- parser.add_option("-b", "--browser",
- action="append", dest="browsers",
- help="list of browsers to test")
- parser.add_option("-n", "--run_count", dest="run_count", type="int",
- default=5, help="number of runs")
- parser.add_option("-d", "--dromaeo_home", dest="dromaeo_home",
- help="directory with your dromaeo files")
- parser.add_option("-p", "--port", dest="port", type="int",
- default=8080, help="http server port")
- parser.add_option("-f", "--filter", dest="filter",
- default="dom", help="dromaeo suite filter")
- parser.add_option("-e", "--email", dest="email",
- help="your google docs account")
- parser.add_option("-s", "--spreadsheet", dest="spreadsheet_title",
- default="dromaeo",
- help="your google docs spreadsheet name")
-
- options = parser.parse_args()[0]
-
- if not options.dromaeo_home:
- raise Exception('please specify dromaeo_home')
-
- return options
-
-
-def KillProcessByName(process_name):
- process = subprocess.Popen('wmic process get processid, executablepath',
- stdout=subprocess.PIPE)
- stdout = str(process.communicate()[0])
- match = re.search(re.escape(process_name) + '\s+(\d+)', stdout)
- if match:
- pid = match.group(1)
- subprocess.call('taskkill /pid %s' % pid)
-
-
-class SpreadsheetWriter(object):
- "Utility class for storing benchmarking results in Google spreadsheets."
-
- def __init__(self, email, spreadsheet_title):
- '''Login to google docs and search for spreadsheet'''
-
- self.token_file = os.path.expanduser("~/.dromaeo_bot_auth_token")
- self.gd_client = gdata.spreadsheet.service.SpreadsheetsService()
-
- authenticated = False
- if os.path.exists(self.token_file):
- token = ''
- try:
- file = open(self.token_file, 'r')
- token = file.read()
- file.close()
- self.gd_client.SetClientLoginToken(token)
- self.gd_client.GetSpreadsheetsFeed()
- authenticated = True
- except (IOError, gdata.service.RequestError):
- pass
- if not authenticated:
- self.gd_client.email = email
- self.gd_client.password = getpass.getpass('Password for %s: ' % email)
- self.gd_client.source = 'python robot for dromaeo'
- self.gd_client.ProgrammaticLogin()
- token = self.gd_client.GetClientLoginToken()
- try:
- file = open(self.token_file, 'w')
- file.write(token)
- file.close()
- except (IOError):
- pass
- os.chmod(self.token_file, 0600)
-
- # Search for the spreadsheet with title = spreadsheet_title.
- spreadsheet_feed = self.gd_client.GetSpreadsheetsFeed()
- for spreadsheet in spreadsheet_feed.entry:
- if spreadsheet.title.text == spreadsheet_title:
- self.spreadsheet_key = spreadsheet.id.text.rsplit('/', 1)[1]
- if not self.spreadsheet_key:
- raise Exception('Spreadsheet %s not found' % spreadsheet_title)
-
- # Get the key of the first worksheet in spreadsheet.
- worksheet_feed = self.gd_client.GetWorksheetsFeed(self.spreadsheet_key)
- self.worksheet_key = worksheet_feed.entry[0].id.text.rsplit('/', 1)[1]
-
- def _InsertRow(self, row):
- row = dict([('c' + str(i), row[i]) for i in xrange(len(row))])
- self.gd_client.InsertRow(row, self.spreadsheet_key, self.worksheet_key)
-
- def _InsertBlankRow(self):
- self._InsertRow('-' * self.columns_count)
-
- def PrepareSpreadsheet(self, run_count):
- """Update cells in worksheet topmost row with service information.
-
- Calculate column count corresponding to run_count and create worksheet
- column titles [c0, c1, ...] in the topmost row to speed up spreadsheet
- updates (it allows to insert a whole row with a single request)
- """
-
- # Calculate the number of columns we need to present all test results.
- self.columns_count = (run_count + 2) * len(test_props)
- if self.columns_count > max_spreadsheet_columns:
- # Google spreadsheet has just max_spreadsheet_columns columns.
- max_run_count = max_spreadsheet_columns / len(test_props) - 2
- raise Exception('maximum run count is %i' % max_run_count)
- # Create worksheet column titles [c0, c1, ..., cn].
- for i in xrange(self.columns_count):
- self.gd_client.UpdateCell(1, i + 1, 'c' + str(i), self.spreadsheet_key,
- self.worksheet_key)
-
- def WriteColumnTitles(self, run_count):
- "Create titles for test results (mean 1, mean 2, ..., average mean, ...)"
- row = []
- for prop in test_props:
- row.append('')
- for i in xrange(run_count):
- row.append('%s %i' % (prop, i + 1))
- row.append('average ' + prop)
- self._InsertRow(row)
-
- def WriteBrowserBenchmarkTitle(self, browser_name):
- "Create browser benchmark title (browser name, date time)"
- self._InsertBlankRow()
- self._InsertRow([browser_name, time.strftime('%d.%m.%Y %H:%M:%S')])
-
- def WriteBrowserBenchmarkResults(self, test_name, test_data):
- "Insert a row with single test results"
- row = []
- for prop in test_props:
- if not row:
- row.append(test_name)
- else:
- row.append('')
- row.extend([str(x) for x in test_data[prop]])
- row.append(str(sum(test_data[prop]) / len(test_data[prop])))
- self._InsertRow(row)
-
-
-class DromaeoHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
-
- def do_POST(self):
- self.send_response(200)
- self.end_headers()
- self.wfile.write("<HTML>POST OK.<BR><BR>");
- length = int(self.headers.getheader('content-length'))
- parameters = urlparse.parse_qs(self.rfile.read(length))
- self.server.got_post = True
- self.server.post_data = parameters['data']
-
-
-class BenchmarkResults(object):
- "Storage class for dromaeo benchmark results"
-
- def __init__(self):
- self.data = {}
-
- def ProcessBrowserPostData(self, data):
- "Convert dromaeo test results in internal format"
- tests = json.loads(data[0])
- for test in tests:
- test_name = test['name']
- if test_name not in self.data:
- # Test is encountered for the first time.
- self.data[test_name] = dict([(prop, []) for prop in test_props])
- # Append current run results.
- for prop in test_props:
- value = -1
- if prop in test: value = test[prop] # workaround for Opera 10.5
- self.data[test_name][prop].append(value)
-
-
-def main():
- options = ParseArguments()
-
- # Start sever with dromaeo.
- os.chdir(options.dromaeo_home)
- server = HTTPServer(('', options.port), DromaeoHandler)
-
- # Open and prepare spreadsheet on google docs.
- spreadsheet_writer = SpreadsheetWriter(options.email,
- options.spreadsheet_title)
- spreadsheet_writer.PrepareSpreadsheet(options.run_count)
- spreadsheet_writer.WriteColumnTitles(options.run_count)
-
- for browser in options.browsers:
- browser_name = os.path.splitext(os.path.basename(browser))[0]
- spreadsheet_writer.WriteBrowserBenchmarkTitle(browser_name)
- benchmark_results = BenchmarkResults()
- for run_number in xrange(options.run_count):
- print '%s run %i' % (browser_name, run_number + 1)
- # Run browser.
- test_page = 'http://localhost:%i/index.html?%s&automated&post_json' % (
- options.port, options.filter)
- browser_process = subprocess.Popen('%s "%s"' % (browser, test_page))
- server.got_post = False
- server.post_data = None
- # Wait until POST request from browser.
- while not server.got_post:
- server.handle_request()
- benchmark_results.ProcessBrowserPostData(server.post_data)
- # Kill browser.
- KillProcessByName(browser)
- browser_process.wait()
-
- # Insert test results into spreadsheet.
- for (test_name, test_data) in benchmark_results.data.iteritems():
- spreadsheet_writer.WriteBrowserBenchmarkResults(test_name, test_data)
-
- server.socket.close()
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/emacs/chrome-filetypes.el b/chromium/tools/emacs/chrome-filetypes.el
deleted file mode 100644
index 14fc6bbaef3..00000000000
--- a/chromium/tools/emacs/chrome-filetypes.el
+++ /dev/null
@@ -1,16 +0,0 @@
-; To get syntax highlighting and tab settings for gyp(i) files, add the
-; following to init.el:
-; (setq-default chrome-root "/path/to/chrome/src/")
-; (add-to-list 'load-path (concat chrome-root "tools/emacs"))
-; (require 'chrome-filetypes)
-
-(define-derived-mode gyp-mode python-mode "Gyp"
- "Major mode for editing Generate Your Project files."
- (setq indent-tabs-mode nil
- tab-width 2
- python-indent 2))
-
-(add-to-list 'auto-mode-alist '("\\.gyp$" . gyp-mode))
-(add-to-list 'auto-mode-alist '("\\.gypi$" . gyp-mode))
-
-(provide 'chrome-filetypes)
diff --git a/chromium/tools/emacs/flymake-chromium.el b/chromium/tools/emacs/flymake-chromium.el
deleted file mode 100644
index 8adb0dbe56a..00000000000
--- a/chromium/tools/emacs/flymake-chromium.el
+++ /dev/null
@@ -1,122 +0,0 @@
-;; Copyright (c) 2011 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.
-
-;; Set up flymake for use with chromium code. Uses ninja (since none of the
-;; other chromium build systems have latency that allows interactive use).
-;;
-;; Requires a modern emacs (GNU Emacs >= 23) and that gyp has already generated
-;; the build.ninja file(s). See defcustoms below for settable knobs.
-
-
-(require 'flymake)
-
-(defcustom cr-flymake-ninja-build-file "out/Debug/build.ninja"
- "Relative path from chromium's src/ directory to the
- build.ninja file to use.")
-
-(defcustom cr-flymake-ninja-executable "ninja"
- "Ninja executable location; either in $PATH or explicitly given.")
-
-(defun cr-flymake-absbufferpath ()
- "Return the absolute path to the current buffer, or nil if the
- current buffer has no path."
- (when buffer-file-truename
- (expand-file-name buffer-file-truename)))
-
-(defun cr-flymake-chromium-src ()
- "Return chromium's src/ directory, or nil on failure."
- (let ((srcdir (locate-dominating-file
- (cr-flymake-absbufferpath) cr-flymake-ninja-build-file)))
- (when srcdir (expand-file-name srcdir))))
-
-(defun cr-flymake-string-prefix-p (prefix str)
- "Return non-nil if PREFIX is a prefix of STR (23.2 has string-prefix-p but
- that's case insensitive and also 23.1 doesn't have it)."
- (string= prefix (substring str 0 (length prefix))))
-
-(defun cr-flymake-current-file-name ()
- "Return the relative path from chromium's src/ directory to the
- file backing the current buffer or nil if it doesn't look like
- we're under chromium/src/."
- (when (and (cr-flymake-chromium-src)
- (cr-flymake-string-prefix-p
- (cr-flymake-chromium-src) (cr-flymake-absbufferpath)))
- (substring (cr-flymake-absbufferpath) (length (cr-flymake-chromium-src)))))
-
-(defun cr-flymake-from-build-to-src-root ()
- "Return a path fragment for getting from the build.ninja file to src/."
- (replace-regexp-in-string
- "[^/]+" ".."
- (substring
- (file-name-directory
- (file-truename (or (and (cr-flymake-string-prefix-p
- "/" cr-flymake-ninja-build-file)
- cr-flymake-ninja-build-file)
- (concat (cr-flymake-chromium-src)
- cr-flymake-ninja-build-file))))
- (length (cr-flymake-chromium-src)))))
-
-(defun cr-flymake-getfname (file-name-from-error-message)
- "Strip cruft from the passed-in filename to help flymake find the real file."
- (file-name-nondirectory file-name-from-error-message))
-
-(defun cr-flymake-ninja-command-line ()
- "Return the command-line for running ninja, as a list of strings, or nil if
- we're not during a save"
- (unless (buffer-modified-p)
- (list cr-flymake-ninja-executable
- (list "-C"
- (concat (cr-flymake-chromium-src)
- (file-name-directory cr-flymake-ninja-build-file))
- (concat (cr-flymake-from-build-to-src-root)
- (cr-flymake-current-file-name) "^")))))
-
-(defun cr-flymake-kick-off-check-after-save ()
- "Kick off a syntax check after file save, if flymake-mode is on."
- (when flymake-mode (flymake-start-syntax-check)))
-
-(defadvice next-error (around cr-flymake-next-error activate)
- "If flymake has something to say, let it say it; otherwise
- revert to normal next-error behavior."
- (if (not flymake-err-info)
- (condition-case msg
- ad-do-it
- (error (message "%s" (prin1-to-string msg))))
- (flymake-goto-next-error)
- ;; copy/pasted from flymake-display-err-menu-for-current-line because I
- ;; couldn't find a way to have it tell me what the relevant error for this
- ;; line was in a single call:
- (let* ((line-no (flymake-current-line-no))
- (line-err-info-list
- (nth 0 (flymake-find-err-info flymake-err-info line-no)))
- (menu-data (flymake-make-err-menu-data line-no line-err-info-list)))
- (prin1 (car (car (car (cdr menu-data)))) t))))
-
-(defun cr-flymake-find-file ()
- "Enable flymake, but only if it makes sense, and immediately
- disable timer-based execution."
- (when (and (not flymake-mode)
- (not buffer-read-only)
- (cr-flymake-current-file-name))
- ;; Since flymake-allowed-file-name-masks requires static regexps to match
- ;; against, can't use cr-flymake-chromium-src here. Instead we add a
- ;; generic regexp, but only to a buffer-local version of the variable.
- (set (make-local-variable 'flymake-allowed-file-name-masks)
- (list (list "\\.c\\(\\|c\\|pp\\)"
- 'cr-flymake-ninja-command-line
- 'ignore
- 'cr-flymake-getfname)))
- (flymake-find-file-hook)
- (if flymake-mode
- (cancel-timer flymake-timer)
- (kill-local-variable 'flymake-allowed-file-name-masks))))
-
-(add-hook 'find-file-hook 'cr-flymake-find-file 'append)
-(add-hook 'after-save-hook 'cr-flymake-kick-off-check-after-save)
-
-;; Show flymake infrastructure ERRORs in hopes of fixing them. Set to 3 for
-;; DEBUG-level output from flymake.el.
-(setq flymake-log-level 0)
-
-(provide 'flymake-chromium)
diff --git a/chromium/tools/emacs/trybot-linux.txt b/chromium/tools/emacs/trybot-linux.txt
deleted file mode 100644
index ad3ada8de5d..00000000000
--- a/chromium/tools/emacs/trybot-linux.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-A snippet of Linux trybot output (note UTF-8 quotes).
-
- AR(target) out/Debug/obj.target/printing/libprinting.a
-app/l10n_util_unittest.cc: In member function ‘virtual void L10nUtilTest_TruncateString_Test::TestBody()’:
-app/l10n_util_unittest.cc:67: error: invalid initialization of reference of type ‘const string16&’ from expression of type ‘std::wstring’
-./app/l10n_util.h:166: error: in passing argument 1 of ‘string16 l10n_util::TruncateString(const string16&, size_t)’
diff --git a/chromium/tools/emacs/trybot-mac.txt b/chromium/tools/emacs/trybot-mac.txt
deleted file mode 100644
index 87d7f26212c..00000000000
--- a/chromium/tools/emacs/trybot-mac.txt
+++ /dev/null
@@ -1,1985 +0,0 @@
-/b/build/third_party/zope/__init__.py:19: UserWarning: Module twisted was already imported from /b/build/third_party/twisted_8_1/twisted/__init__.pyc, but /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python is being added to sys.path
- import pkg_resources
-/b/build/third_party/zope/__init__.py:19: UserWarning: Module zope was already imported from /b/build/third_party/zope/__init__.pyc, but /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python is being added to sys.path
- import pkg_resources
-
-pump xcodebuild -configuration Debug -project all.xcodeproj -buildhostsfile /b/build/scripts/slave/mac_distcc_hosts/golo_mini-10_6
-__________Using distcc-pump from /usr/bin
-__________Using 1 distcc server in pump mode
-
-=== BUILD AGGREGATE TARGET app_resources OF PROJECT app WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD AGGREGATE TARGET app_strings OF PROJECT app WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Rule \"grit\"" ../xcodebuild/app.build/Debug/app_strings.build/Script-3555EADE2A4F7996024F949F.sh
- cd /b/build/slave/mac/build/src/app
- /bin/sh -c /b/build/slave/mac/build/src/app/../xcodebuild/app.build/Debug/app_strings.build/Script-3555EADE2A4F7996024F949F.sh
-
-make: Nothing to be done for `all'.
-
-=== BUILD AGGREGATE TARGET app_base Support OF PROJECT app WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET app_base OF PROJECT app WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET test_support_base OF PROJECT base WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET protobuf_full_do_not_use OF PROJECT protobuf WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET protobuf_lite OF PROJECT protobuf WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET protoc OF PROJECT protobuf WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Postbuild \"Strip If Needed\"" ../../xcodebuild/protobuf.build/Debug/protoc.build/Script-7AC9923F7CDD2087661C69AB.sh
- cd /b/build/slave/mac/build/src/third_party/protobuf
- /bin/sh -c /b/build/slave/mac/build/src/third_party/protobuf/../../xcodebuild/protobuf.build/Debug/protoc.build/Script-7AC9923F7CDD2087661C69AB.sh
-
-
-=== BUILD AGGREGATE TARGET sync_proto OF PROJECT sync_proto WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Rule \"genproto\"" ../../../../xcodebuild/sync_proto.build/Debug/sync_proto.build/Script-237DAA9DBF3380A9B7228EAF.sh
- cd /b/build/slave/mac/build/src/chrome/browser/sync/protocol
- /bin/sh -c /b/build/slave/mac/build/src/chrome/browser/sync/protocol/../../../../xcodebuild/sync_proto.build/Debug/sync_proto.build/Script-237DAA9DBF3380A9B7228EAF.sh
-
-make: Nothing to be done for `all'.
-
-=== BUILD AGGREGATE TARGET device_management_proto OF PROJECT device_management_proto WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Rule \"genproto\"" ../../../../xcodebuild/device_management_proto.build/Debug/device_management_proto.build/Script-7D8C1925B70AD3724821C80A.sh
- cd /b/build/slave/mac/build/src/chrome/browser/policy/proto
- /bin/sh -c /b/build/slave/mac/build/src/chrome/browser/policy/proto/../../../../xcodebuild/device_management_proto.build/Debug/device_management_proto.build/Script-7D8C1925B70AD3724821C80A.sh
-
-make: Nothing to be done for `all'.
-
-=== BUILD AGGREGATE TARGET py_proto OF PROJECT protobuf WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET net_test_support OF PROJECT net WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET skia OF PROJECT skia WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET gmock OF PROJECT gmock WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET gtest OF PROJECT gtest WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET icui18n OF PROJECT icu WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET icuuc OF PROJECT icu WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET libpng OF PROJECT libpng WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET zlib OF PROJECT zlib WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET libjpeg OF PROJECT libjpeg WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET base OF PROJECT base WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET modp_b64 OF PROJECT modp_b64 WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET dynamic_annotations OF PROJECT dynamic_annotations WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET nss OF PROJECT nss WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET nspr OF PROJECT nss WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET sqlite OF PROJECT sqlite WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET icudata OF PROJECT icu WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET libevent OF PROJECT libevent WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET base_i18n OF PROJECT base WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD AGGREGATE TARGET gfx_resources OF PROJECT gfx WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET gfx OF PROJECT gfx WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET skia_opts OF PROJECT skia WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD AGGREGATE TARGET net_resources OF PROJECT net WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Rule \"grit\"" ../xcodebuild/net.build/Debug/net_resources.build/Script-D3210C5A91652E9B8F9DF7BD.sh
- cd /b/build/slave/mac/build/src/net
- /bin/sh -c /b/build/slave/mac/build/src/net/../xcodebuild/net.build/Debug/net_resources.build/Script-D3210C5A91652E9B8F9DF7BD.sh
-
-make: Nothing to be done for `all'.
-
-=== BUILD AGGREGATE TARGET js2c OF PROJECT v8 WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET v8_nosnapshot OF PROJECT v8 WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET v8_base OF PROJECT v8 WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET mksnapshot OF PROJECT v8 WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Postbuild \"Strip If Needed\"" ../../../xcodebuild/v8.build/Debug/mksnapshot.build/Script-759699424E9CDB8D5A56B17D.sh
- cd /b/build/slave/mac/build/src/v8/tools/gyp
- /bin/sh -c /b/build/slave/mac/build/src/v8/tools/gyp/../../../xcodebuild/v8.build/Debug/mksnapshot.build/Script-759699424E9CDB8D5A56B17D.sh
-
-
-=== BUILD AGGREGATE TARGET v8_snapshot Support OF PROJECT v8 WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET v8_snapshot OF PROJECT v8 WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD AGGREGATE TARGET v8 OF PROJECT v8 WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET net OF PROJECT net WITH CONFIGURATION Debug ===
-Check dependencies
-Distributed-CompileC ../xcodebuild/net.build/Debug/net.build/Objects-normal/i386/spdy_session.o spdy/spdy_session.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/net
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS localhost
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNO_NSPR_10_SUPPORT -DNSS_USE_STATIC_LIBS -DUSE_UTIL_DIRECTLY -DNSS_PLATFORM_CLIENT_AUTH -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/net/../xcodebuild/Debug -I/b/build/slave/mac/build/src/net/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I../sdch/open-vcdiff/src -I../third_party/zlib -I/b/build/slave/mac/build/src/net/../xcodebuild/DerivedSources/Debug/net -I../v8/include -I../third_party/nss/mozilla/nsprpub/pr/include -I../third_party/nss/mozilla/nsprpub/lib/ds -I../third_party/nss/mozilla/nsprpub/lib/libc/include -I../third_party/nss/mozilla/security/nss/lib/base -I../third_party/nss/mozilla/security/nss/lib/certdb -I../third_party/nss/mozilla/security/nss/lib/certhigh -I../third_party/nss/mozilla/security/nss/lib/cryptohi -I../third_party/nss/mozilla/security/nss/lib/dev -I../third_party/nss/mozilla/security/nss/lib/freebl -I../third_party/nss/mozilla/security/nss/lib/freebl/ecl -I../third_party/nss/mozilla/security/nss/lib/nss -I../third_party/nss/mozilla/security/nss/lib/pk11wrap -I../third_party/nss/mozilla/security/nss/lib/pkcs7 -I../third_party/nss/mozilla/security/nss/lib/pki -I../third_party/nss/mozilla/security/nss/lib/smime -I../third_party/nss/mozilla/security/nss/lib/softoken -I../third_party/nss/mozilla/security/nss/lib/util -Ithird_party/nss/ssl -I/b/build/slave/mac/build/src/net/../xcodebuild/net.build/Debug/net.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/net/../xcodebuild/net.build/Debug/net.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/net/spdy/spdy_session.cc -o /b/build/slave/mac/build/src/net/../xcodebuild/net.build/Debug/net.build/Objects-normal/i386/spdy_session.o
-
-Libtool ../xcodebuild/Debug/libnet.a normal i386
- cd /b/build/slave/mac/build/src/net
- setenv DISTCC_HOSTS "distcc4.golo.chromium.org:3632,lzo,cpp/0 distcc7.golo.chromium.org:3632,lzo,cpp/0 distcc8.golo.chromium.org:3632,lzo,cpp/0 distcc10.golo.chromium.org:3632,lzo,cpp/0 distcc6.golo.chromium.org:3632,lzo,cpp/0 distcc3.golo.chromium.org:3632,lzo,cpp/0 distcc2.golo.chromium.org:3632,lzo,cpp/0 distcc1.golo.chromium.org:3632,lzo,cpp/0 distcc9.golo.chromium.org:3632,lzo,cpp/0 distcc5.golo.chromium.org:3632,lzo,cpp/0"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv MACOSX_DEPLOYMENT_TARGET 10.5
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/libtool -static -arch_only i386 -syslibroot /Developer/SDKs/MacOSX10.5.sdk -L/b/build/slave/mac/build/src/net/../xcodebuild/Debug -filelist /b/build/slave/mac/build/src/net/../xcodebuild/net.build/Debug/net.build/Objects-normal/i386/net.LinkFileList -o /b/build/slave/mac/build/src/net/../xcodebuild/Debug/libnet.a
-
-
-=== BUILD NATIVE TARGET googleurl OF PROJECT googleurl WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET sdch OF PROJECT sdch WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET ssl_false_start_blacklist_process OF PROJECT net WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Postbuild \"Strip If Needed\"" ../xcodebuild/net.build/Debug/ssl_false_start_blacklist_process.build/Script-5AC333953C6BB680BA591B7D.sh
- cd /b/build/slave/mac/build/src/net
- /bin/sh -c /b/build/slave/mac/build/src/net/../xcodebuild/net.build/Debug/ssl_false_start_blacklist_process.build/Script-5AC333953C6BB680BA591B7D.sh
-
-
-=== BUILD AGGREGATE TARGET net_base Support OF PROJECT net WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET net_base OF PROJECT net WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD AGGREGATE TARGET ssl_host_info Support OF PROJECT net WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Rule \"genproto\"" "../xcodebuild/net.build/Debug/ssl_host_info Support.build/Script-2ECF060B764178F116E30CEF.sh"
- cd /b/build/slave/mac/build/src/net
- /bin/sh -c "\"/b/build/slave/mac/build/src/net/../xcodebuild/net.build/Debug/ssl_host_info Support.build/Script-2ECF060B764178F116E30CEF.sh\""
-
-make: Nothing to be done for `all'.
-
-=== BUILD NATIVE TARGET ssl_host_info OF PROJECT net WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET ssl OF PROJECT ssl WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET app_unittests OF PROJECT app WITH CONFIGURATION Debug ===
-Check dependencies
-Ld ../xcodebuild/Debug/app_unittests normal i386
- cd /b/build/slave/mac/build/src/app
- setenv DISTCC_HOSTS "distcc4.golo.chromium.org:3632,lzo,cpp/0 distcc7.golo.chromium.org:3632,lzo,cpp/0 distcc8.golo.chromium.org:3632,lzo,cpp/0 distcc10.golo.chromium.org:3632,lzo,cpp/0 distcc6.golo.chromium.org:3632,lzo,cpp/0 distcc3.golo.chromium.org:3632,lzo,cpp/0 distcc2.golo.chromium.org:3632,lzo,cpp/0 distcc1.golo.chromium.org:3632,lzo,cpp/0 distcc9.golo.chromium.org:3632,lzo,cpp/0 distcc5.golo.chromium.org:3632,lzo,cpp/0"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv MACOSX_DEPLOYMENT_TARGET 10.5
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/g++-4.2 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk -L/b/build/slave/mac/build/src/app/../xcodebuild/Debug -F/b/build/slave/mac/build/src/app/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -filelist /b/build/slave/mac/build/src/app/../xcodebuild/app.build/Debug/app_unittests.build/Objects-normal/i386/app_unittests.LinkFileList -mmacosx-version-min=10.5 -Wl,-search_paths_first -lapp_base /b/build/slave/mac/build/src/xcodebuild/Debug/libtest_support_base.a /b/build/slave/mac/build/src/xcodebuild/Debug/libnet_test_support.a /b/build/slave/mac/build/src/xcodebuild/Debug/libskia.a /b/build/slave/mac/build/src/xcodebuild/Debug/libgmock.a /b/build/slave/mac/build/src/xcodebuild/Debug/libgtest.a /b/build/slave/mac/build/src/xcodebuild/Debug/libicui18n.a /b/build/slave/mac/build/src/xcodebuild/Debug/libicuuc.a /b/build/slave/mac/build/src/xcodebuild/Debug/libpng.a /b/build/slave/mac/build/src/xcodebuild/Debug/libchrome_zlib.a /b/build/slave/mac/build/src/xcodebuild/Debug/libjpeg.a /b/build/slave/mac/build/src/xcodebuild/Debug/libbase.a /b/build/slave/mac/build/src/xcodebuild/Debug/libmodp_b64.a /b/build/slave/mac/build/src/xcodebuild/Debug/libdynamic_annotations.a /b/build/slave/mac/build/src/xcodebuild/Debug/libnss.a /b/build/slave/mac/build/src/xcodebuild/Debug/libnspr.a /b/build/slave/mac/build/src/xcodebuild/Debug/libsqlite3.a /b/build/slave/mac/build/src/xcodebuild/Debug/libicudata.a /b/build/slave/mac/build/src/xcodebuild/Debug/libevent.a /b/build/slave/mac/build/src/xcodebuild/Debug/libbase_i18n.a /b/build/slave/mac/build/src/xcodebuild/Debug/libgfx.a /b/build/slave/mac/build/src/xcodebuild/Debug/libskia_opts.a /b/build/slave/mac/build/src/xcodebuild/Debug/libnet.a /b/build/slave/mac/build/src/xcodebuild/Debug/libgoogleurl.a /b/build/slave/mac/build/src/xcodebuild/Debug/libsdch.a /b/build/slave/mac/build/src/xcodebuild/Debug/libnet_base.a /b/build/slave/mac/build/src/xcodebuild/Debug/libssl_host_info.a /b/build/slave/mac/build/src/xcodebuild/Debug/libprotobuf_lite.a /b/build/slave/mac/build/src/xcodebuild/Debug/libv8_snapshot.a /b/build/slave/mac/build/src/xcodebuild/Debug/libv8_base.a /b/build/slave/mac/build/src/xcodebuild/Debug/libssl.a -framework OpenGL -framework AppKit -framework Carbon -framework CoreFoundation -framework Foundation -framework IOKit -framework Security -framework SystemConfiguration -lresolv -o /b/build/slave/mac/build/src/app/../xcodebuild/Debug/app_unittests
-
-PhaseScriptExecution "Postbuild \"Strip If Needed\"" ../xcodebuild/app.build/Debug/app_unittests.build/Script-07E688F6B96AA35A01000844.sh
- cd /b/build/slave/mac/build/src/app
- /bin/sh -c /b/build/slave/mac/build/src/app/../xcodebuild/app.build/Debug/app_unittests.build/Script-07E688F6B96AA35A01000844.sh
-
-
-=== BUILD NATIVE TARGET base_unittests OF PROJECT base WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Postbuild \"Strip If Needed\"" ../xcodebuild/base.build/Debug/base_unittests.build/Script-25445A6E87471CA82F7A2A04.sh
- cd /b/build/slave/mac/build/src/base
- /bin/sh -c /b/build/slave/mac/build/src/base/../xcodebuild/base.build/Debug/base_unittests.build/Script-25445A6E87471CA82F7A2A04.sh
-
-
-=== BUILD NATIVE TARGET test_support_perf OF PROJECT base WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD AGGREGATE TARGET common_constants Support OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET common_constants OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD AGGREGATE TARGET cacheinvalidation_proto OF PROJECT cacheinvalidation WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Rule \"genproto\"" ../../xcodebuild/cacheinvalidation.build/Debug/cacheinvalidation_proto.build/Script-F6284ABD289942E92747985A.sh
- cd /b/build/slave/mac/build/src/third_party/cacheinvalidation
- /bin/sh -c /b/build/slave/mac/build/src/third_party/cacheinvalidation/../../xcodebuild/cacheinvalidation.build/Debug/cacheinvalidation_proto.build/Script-F6284ABD289942E92747985A.sh
-
-make: Nothing to be done for `all'.
-
-=== BUILD NATIVE TARGET cacheinvalidation OF PROJECT cacheinvalidation WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET sync_notifier OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET notifier OF PROJECT jingle WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET libjingle OF PROJECT libjingle WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD AGGREGATE TARGET sync_proto_cpp OF PROJECT sync_proto WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET sync OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD AGGREGATE TARGET chrome_resources OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Rule \"grit\"" ../xcodebuild/chrome.build/Debug/chrome_resources.build/Script-9CA0E2FB3E57937086B90B01.sh
- cd /b/build/slave/mac/build/src/chrome
- /bin/sh -c /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/chrome_resources.build/Script-9CA0E2FB3E57937086B90B01.sh
-
-make: Nothing to be done for `all'.
-
-=== BUILD AGGREGATE TARGET chrome_strings OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Rule \"grit\"" ../xcodebuild/chrome.build/Debug/chrome_strings.build/Script-E0610D9F312AEECB2F90C4E3.sh
- cd /b/build/slave/mac/build/src/chrome
- /bin/sh -c /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/chrome_strings.build/Script-E0610D9F312AEECB2F90C4E3.sh
-
-make: Nothing to be done for `all'.
-
-=== BUILD AGGREGATE TARGET theme_resources OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD AGGREGATE TARGET npapi OF PROJECT npapi WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD AGGREGATE TARGET ppapi_c OF PROJECT ppapi WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD AGGREGATE TARGET webkit_resources OF PROJECT webkit_support WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD AGGREGATE TARGET webkit_strings OF PROJECT webkit_support WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD AGGREGATE TARGET webkit_user_agent Support OF PROJECT webkit_support WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET webkit_user_agent OF PROJECT webkit_support WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET glue OF PROJECT webkit_support WITH CONFIGURATION Debug ===
-Check dependencies
-Distributed-CompileC ../../xcodebuild/webkit_support.build/Debug/glue.build/Objects-normal/i386/context_menu.o ../glue/context_menu.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/webkit/support
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS localhost
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/webkit/support/../../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/webkit/support/../../xcodebuild/Debug/include -I../../third_party/icu/public/common -I../../third_party/icu/public/i18n -I/b/build/slave/mac/build/src/webkit/support/../../xcodebuild/webkit_support.build/DerivedSources/Debug -I/b/build/slave/mac/build/src/webkit/support/../../xcodebuild/DerivedSources/Debug/webkit -I../../gpu -I../.. -I../../third_party -I../../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/webkit/support/../../xcodebuild/DerivedSources/Debug/app -I../../skia/config -I../../third_party/skia/include/config -I../../third_party/skia/include/core -I../../third_party/skia/include/effects -I../../skia/ext -I../../third_party/npapi -I../../third_party/npapi/bindings -I/b/build/slave/mac/build/src/webkit/support/../../xcodebuild/webkit_support.build/Debug/glue.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/webkit/support/../../xcodebuild/webkit_support.build/Debug/glue.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/webkit/support/../glue/context_menu.cc -o /b/build/slave/mac/build/src/webkit/support/../../xcodebuild/webkit_support.build/Debug/glue.build/Objects-normal/i386/context_menu.o
-
-Libtool ../../xcodebuild/Debug/libglue.a normal i386
- cd /b/build/slave/mac/build/src/webkit/support
- setenv DISTCC_HOSTS "distcc4.golo.chromium.org:3632,lzo,cpp/0 distcc7.golo.chromium.org:3632,lzo,cpp/0 distcc8.golo.chromium.org:3632,lzo,cpp/0 distcc10.golo.chromium.org:3632,lzo,cpp/0 distcc6.golo.chromium.org:3632,lzo,cpp/0 distcc3.golo.chromium.org:3632,lzo,cpp/0 distcc2.golo.chromium.org:3632,lzo,cpp/0 distcc1.golo.chromium.org:3632,lzo,cpp/0 distcc9.golo.chromium.org:3632,lzo,cpp/0 distcc5.golo.chromium.org:3632,lzo,cpp/0"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv MACOSX_DEPLOYMENT_TARGET 10.5
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/libtool -static -arch_only i386 -syslibroot /Developer/SDKs/MacOSX10.5.sdk -L/b/build/slave/mac/build/src/webkit/support/../../xcodebuild/Debug -filelist /b/build/slave/mac/build/src/webkit/support/../../xcodebuild/webkit_support.build/Debug/glue.build/Objects-normal/i386/glue.LinkFileList -o /b/build/slave/mac/build/src/webkit/support/../../xcodebuild/Debug/libglue.a
-
-
-=== BUILD NATIVE TARGET common OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/appcache_backend_proxy.o common/appcache/appcache_backend_proxy.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DLIBXML_STATIC -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I../gpu -I.. -I../third_party -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/sqlite -I../third_party/zlib -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/common/appcache/appcache_backend_proxy.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/appcache_backend_proxy.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/web_database_observer_impl.o common/web_database_observer_impl.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DLIBXML_STATIC -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I../gpu -I.. -I../third_party -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/sqlite -I../third_party/zlib -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/common/web_database_observer_impl.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/web_database_observer_impl.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/database_util.o common/database_util.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DLIBXML_STATIC -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I../gpu -I.. -I../third_party -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/sqlite -I../third_party/zlib -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/common/database_util.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/database_util.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/appcache_dispatcher.o common/appcache/appcache_dispatcher.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DLIBXML_STATIC -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I../gpu -I.. -I../third_party -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/sqlite -I../third_party/zlib -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/common/appcache/appcache_dispatcher.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/appcache_dispatcher.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/db_message_filter.o common/db_message_filter.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DLIBXML_STATIC -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I../gpu -I.. -I../third_party -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/sqlite -I../third_party/zlib -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/common/db_message_filter.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/db_message_filter.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/file_system_dispatcher.o common/file_system/file_system_dispatcher.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DLIBXML_STATIC -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I../gpu -I.. -I../third_party -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/sqlite -I../third_party/zlib -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/common/file_system/file_system_dispatcher.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/file_system_dispatcher.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/extension_localization_peer.o common/extensions/extension_localization_peer.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DLIBXML_STATIC -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I../gpu -I.. -I../third_party -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/sqlite -I../third_party/zlib -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/common/extensions/extension_localization_peer.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/extension_localization_peer.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/render_messages.o common/render_messages.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DLIBXML_STATIC -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I../gpu -I.. -I../third_party -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/sqlite -I../third_party/zlib -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/common/render_messages.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/render_messages.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/socket_stream_dispatcher.o common/socket_stream_dispatcher.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DLIBXML_STATIC -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I../gpu -I.. -I../third_party -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/sqlite -I../third_party/zlib -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/common/socket_stream_dispatcher.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/socket_stream_dispatcher.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/render_messages_params.o common/render_messages_params.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DLIBXML_STATIC -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I../gpu -I.. -I../third_party -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/sqlite -I../third_party/zlib -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/common/render_messages_params.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/render_messages_params.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/resource_dispatcher.o common/resource_dispatcher.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DLIBXML_STATIC -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I../gpu -I.. -I../third_party -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/sqlite -I../third_party/zlib -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/common/resource_dispatcher.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/resource_dispatcher.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/webblobregistry_impl.o common/webblobregistry_impl.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DLIBXML_STATIC -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I../gpu -I.. -I../third_party -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/sqlite -I../third_party/zlib -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/common/webblobregistry_impl.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/webblobregistry_impl.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/logging_chrome.o common/logging_chrome.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DLIBXML_STATIC -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I../gpu -I.. -I../third_party -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/sqlite -I../third_party/zlib -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/common/logging_chrome.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/logging_chrome.o
-
-Libtool ../xcodebuild/Debug/libcommon.a normal i386
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_HOSTS "distcc4.golo.chromium.org:3632,lzo,cpp/0 distcc7.golo.chromium.org:3632,lzo,cpp/0 distcc8.golo.chromium.org:3632,lzo,cpp/0 distcc10.golo.chromium.org:3632,lzo,cpp/0 distcc6.golo.chromium.org:3632,lzo,cpp/0 distcc3.golo.chromium.org:3632,lzo,cpp/0 distcc2.golo.chromium.org:3632,lzo,cpp/0 distcc1.golo.chromium.org:3632,lzo,cpp/0 distcc9.golo.chromium.org:3632,lzo,cpp/0 distcc5.golo.chromium.org:3632,lzo,cpp/0"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv MACOSX_DEPLOYMENT_TARGET 10.5
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/libtool -static -arch_only i386 -syslibroot /Developer/SDKs/MacOSX10.5.sdk -L/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -filelist /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/common.build/Objects-normal/i386/common.LinkFileList -o /b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/libcommon.a
-
-
-=== BUILD NATIVE TARGET common_net OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD AGGREGATE TARGET default_plugin_resources OF PROJECT default_plugin WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET default_plugin OF PROJECT default_plugin WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET libxml OF PROJECT libxml WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET ipc OF PROJECT ipc WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET printing OF PROJECT printing WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET bzip2 OF PROJECT bzip2 WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET appcache OF PROJECT webkit_support WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET blob OF PROJECT webkit_support WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET gles2_implementation OF PROJECT gpu WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET gles2_cmd_helper OF PROJECT gpu WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET command_buffer_client OF PROJECT gpu WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET command_buffer_common OF PROJECT gpu WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET ppapi_shared_impl OF PROJECT ppapi WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET gpu_plugin OF PROJECT gpu WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET command_buffer_service OF PROJECT gpu WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET translator_glsl OF PROJECT build_angle WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET translator_common OF PROJECT build_angle WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD AGGREGATE TARGET libvpx_include OF PROJECT libvpx WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD AGGREGATE TARGET chromotocol_proto OF PROJECT chromotocol WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Rule \"genproto\"" ../../xcodebuild/chromotocol.build/Debug/chromotocol_proto.build/Script-FC778EC6151CD2300601907F.sh
- cd /b/build/slave/mac/build/src/remoting/proto
- /bin/sh -c /b/build/slave/mac/build/src/remoting/proto/../../xcodebuild/chromotocol.build/Debug/chromotocol_proto.build/Script-FC778EC6151CD2300601907F.sh
-
-make: Nothing to be done for `all'.
-
-=== BUILD NATIVE TARGET chromotocol_proto_lib OF PROJECT chromotocol WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD AGGREGATE TARGET trace_proto OF PROJECT trace WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Rule \"genproto\"" ../../xcodebuild/trace.build/Debug/trace_proto.build/Script-1767794B043163548BD577A7.sh
- cd /b/build/slave/mac/build/src/remoting/proto
- /bin/sh -c /b/build/slave/mac/build/src/remoting/proto/../../xcodebuild/trace.build/Debug/trace_proto.build/Script-1767794B043163548BD577A7.sh
-
-make: Nothing to be done for `all'.
-
-=== BUILD NATIVE TARGET trace_proto_lib OF PROJECT trace WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET chromoting_base OF PROJECT remoting WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET chromoting_plugin OF PROJECT remoting WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD AGGREGATE TARGET config_sources OF PROJECT yasm WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET genmacro OF PROJECT yasm WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Postbuild \"Strip If Needed\"" ../../xcodebuild/yasm.build/Debug/genmacro.build/Script-4C7889A20E677CE959D733D8.sh
- cd /b/build/slave/mac/build/src/third_party/yasm
- /bin/sh -c /b/build/slave/mac/build/src/third_party/yasm/../../xcodebuild/yasm.build/Debug/genmacro.build/Script-4C7889A20E677CE959D733D8.sh
-
-
-=== BUILD NATIVE TARGET genmodule OF PROJECT yasm WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Postbuild \"Strip If Needed\"" ../../xcodebuild/yasm.build/Debug/genmodule.build/Script-4889D2DFD6E02E6FD4E5DD23.sh
- cd /b/build/slave/mac/build/src/third_party/yasm
- /bin/sh -c /b/build/slave/mac/build/src/third_party/yasm/../../xcodebuild/yasm.build/Debug/genmodule.build/Script-4889D2DFD6E02E6FD4E5DD23.sh
-
-
-=== BUILD NATIVE TARGET genperf_libs OF PROJECT yasm WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET genperf OF PROJECT yasm WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Postbuild \"Strip If Needed\"" ../../xcodebuild/yasm.build/Debug/genperf.build/Script-1D9F9DCA8B66106271900FD2.sh
- cd /b/build/slave/mac/build/src/third_party/yasm
- /bin/sh -c /b/build/slave/mac/build/src/third_party/yasm/../../xcodebuild/yasm.build/Debug/genperf.build/Script-1D9F9DCA8B66106271900FD2.sh
-
-
-=== BUILD NATIVE TARGET genversion OF PROJECT yasm WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Postbuild \"Strip If Needed\"" ../../xcodebuild/yasm.build/Debug/genversion.build/Script-86C7D43B641DD7FA312A063A.sh
- cd /b/build/slave/mac/build/src/third_party/yasm
- /bin/sh -c /b/build/slave/mac/build/src/third_party/yasm/../../xcodebuild/yasm.build/Debug/genversion.build/Script-86C7D43B641DD7FA312A063A.sh
-
-
-=== BUILD AGGREGATE TARGET generate_files OF PROJECT yasm WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Rule \"generate_gperf\"" ../../xcodebuild/yasm.build/Debug/generate_files.build/Script-17643966799E5C48ACBBC76C.sh
- cd /b/build/slave/mac/build/src/third_party/yasm
- /bin/sh -c /b/build/slave/mac/build/src/third_party/yasm/../../xcodebuild/yasm.build/Debug/generate_files.build/Script-17643966799E5C48ACBBC76C.sh
-
-make: Nothing to be done for `all'.
-
-=== BUILD NATIVE TARGET genstring OF PROJECT yasm WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Postbuild \"Strip If Needed\"" ../../xcodebuild/yasm.build/Debug/genstring.build/Script-8C8DB269C91395EE620901FA.sh
- cd /b/build/slave/mac/build/src/third_party/yasm
- /bin/sh -c /b/build/slave/mac/build/src/third_party/yasm/../../xcodebuild/yasm.build/Debug/genstring.build/Script-8C8DB269C91395EE620901FA.sh
-
-
-=== BUILD NATIVE TARGET re2c OF PROJECT yasm WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Postbuild \"Strip If Needed\"" ../../xcodebuild/yasm.build/Debug/re2c.build/Script-80CBF3376FF074DC264D0801.sh
- cd /b/build/slave/mac/build/src/third_party/yasm
- /bin/sh -c /b/build/slave/mac/build/src/third_party/yasm/../../xcodebuild/yasm.build/Debug/re2c.build/Script-80CBF3376FF074DC264D0801.sh
-
-
-=== BUILD AGGREGATE TARGET yasm Support OF PROJECT yasm WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Rule \"generate_gperf\"" "../../xcodebuild/yasm.build/Debug/yasm Support.build/Script-01D2B874063C3CD35D7BB021.sh"
- cd /b/build/slave/mac/build/src/third_party/yasm
- /bin/sh -c "\"/b/build/slave/mac/build/src/third_party/yasm/../../xcodebuild/yasm.build/Debug/yasm Support.build/Script-01D2B874063C3CD35D7BB021.sh\""
-
-make: Nothing to be done for `all'.
-PhaseScriptExecution "Rule \"generate_re2c\"" "../../xcodebuild/yasm.build/Debug/yasm Support.build/Script-78F98A3A8E7B6F2F3A9E27E4.sh"
- cd /b/build/slave/mac/build/src/third_party/yasm
- /bin/sh -c "\"/b/build/slave/mac/build/src/third_party/yasm/../../xcodebuild/yasm.build/Debug/yasm Support.build/Script-78F98A3A8E7B6F2F3A9E27E4.sh\""
-
-make: Nothing to be done for `all'.
-
-=== BUILD NATIVE TARGET yasm OF PROJECT yasm WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Postbuild \"Strip If Needed\"" ../../xcodebuild/yasm.build/Debug/yasm.build/Script-553C58D6C5752DBCAC66E158.sh
- cd /b/build/slave/mac/build/src/third_party/yasm
- /bin/sh -c /b/build/slave/mac/build/src/third_party/yasm/../../xcodebuild/yasm.build/Debug/yasm.build/Script-553C58D6C5752DBCAC66E158.sh
-
-
-=== BUILD AGGREGATE TARGET assemble_ffmpeg_asm OF PROJECT ffmpeg WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Rule \"assemble\"" ../../xcodebuild/ffmpeg.build/Debug/assemble_ffmpeg_asm.build/Script-CC0AEB08A28175BFCADB3230.sh
- cd /b/build/slave/mac/build/src/third_party/ffmpeg
- /bin/sh -c /b/build/slave/mac/build/src/third_party/ffmpeg/../../xcodebuild/ffmpeg.build/Debug/assemble_ffmpeg_asm.build/Script-CC0AEB08A28175BFCADB3230.sh
-
-make: Nothing to be done for `all'.
-
-=== BUILD AGGREGATE TARGET make_ffmpeg_asm_lib OF PROJECT ffmpeg WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD AGGREGATE TARGET ffmpegsumo Support OF PROJECT ffmpeg WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET ffmpegsumo OF PROJECT ffmpeg WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Postbuild \"Strip If Needed\"" ../../xcodebuild/ffmpeg.build/Debug/ffmpegsumo.build/Script-5F4EE13F45F454D1CDFA2E81.sh
- cd /b/build/slave/mac/build/src/third_party/ffmpeg
- /bin/sh -c /b/build/slave/mac/build/src/third_party/ffmpeg/../../xcodebuild/ffmpeg.build/Debug/ffmpegsumo.build/Script-5F4EE13F45F454D1CDFA2E81.sh
-
-
-=== BUILD NATIVE TARGET ffmpegsumo_nolink OF PROJECT ffmpeg WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Postbuild \"Strip If Needed\"" ../../xcodebuild/ffmpeg.build/Debug/ffmpegsumo_nolink.build/Script-5FDA933F15D46D3AB0B441AC.sh
- cd /b/build/slave/mac/build/src/third_party/ffmpeg
- /bin/sh -c /b/build/slave/mac/build/src/third_party/ffmpeg/../../xcodebuild/ffmpeg.build/Debug/ffmpegsumo_nolink.build/Script-5FDA933F15D46D3AB0B441AC.sh
-
-
-=== BUILD AGGREGATE TARGET ffmpeg Support OF PROJECT ffmpeg WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET ffmpeg OF PROJECT ffmpeg WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET media OF PROJECT media WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET chromoting_jingle_glue OF PROJECT remoting WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET expat OF PROJECT expat WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET libjingle_p2p OF PROJECT libjingle WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET libsrtp OF PROJECT libsrtp WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET chromoting_client OF PROJECT remoting WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET chromoting_protocol OF PROJECT remoting WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET ppapi_cpp_objects OF PROJECT ppapi WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET sync_listen_notifications OF PROJECT sync_tools WITH CONFIGURATION Debug ===
-Check dependencies
-Ld ../../../../xcodebuild/Debug/sync_listen_notifications normal i386
- cd /b/build/slave/mac/build/src/chrome/browser/sync/tools
- setenv DISTCC_HOSTS "distcc4.golo.chromium.org:3632,lzo,cpp/0 distcc7.golo.chromium.org:3632,lzo,cpp/0 distcc8.golo.chromium.org:3632,lzo,cpp/0 distcc10.golo.chromium.org:3632,lzo,cpp/0 distcc6.golo.chromium.org:3632,lzo,cpp/0 distcc3.golo.chromium.org:3632,lzo,cpp/0 distcc2.golo.chromium.org:3632,lzo,cpp/0 distcc1.golo.chromium.org:3632,lzo,cpp/0 distcc9.golo.chromium.org:3632,lzo,cpp/0 distcc5.golo.chromium.org:3632,lzo,cpp/0"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv MACOSX_DEPLOYMENT_TARGET 10.5
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/g++-4.2 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk -L/b/build/slave/mac/build/src/chrome/browser/sync/tools/../../../../xcodebuild/Debug -F/b/build/slave/mac/build/src/chrome/browser/sync/tools/../../../../xcodebuild/Debug -filelist /b/build/slave/mac/build/src/chrome/browser/sync/tools/../../../../xcodebuild/sync_tools.build/Debug/sync_listen_notifications.build/Objects-normal/i386/sync_listen_notifications.LinkFileList -mmacosx-version-min=10.5 -Wl,-search_paths_first /b/build/slave/mac/build/src/xcodebuild/Debug/libbase.a /b/build/slave/mac/build/src/xcodebuild/Debug/libcommon_constants.a /b/build/slave/mac/build/src/xcodebuild/Debug/libsync_notifier.a /b/build/slave/mac/build/src/xcodebuild/Debug/libnotifier.a /b/build/slave/mac/build/src/xcodebuild/Debug/libjingle.a /b/build/slave/mac/build/src/xcodebuild/Debug/libmodp_b64.a /b/build/slave/mac/build/src/xcodebuild/Debug/libdynamic_annotations.a /b/build/slave/mac/build/src/xcodebuild/Debug/libnss.a /b/build/slave/mac/build/src/xcodebuild/Debug/libnspr.a /b/build/slave/mac/build/src/xcodebuild/Debug/libsqlite3.a /b/build/slave/mac/build/src/xcodebuild/Debug/libicui18n.a /b/build/slave/mac/build/src/xcodebuild/Debug/libicuuc.a /b/build/slave/mac/build/src/xcodebuild/Debug/libicudata.a /b/build/slave/mac/build/src/xcodebuild/Debug/libevent.a /b/build/slave/mac/build/src/xcodebuild/Debug/libsync.a /b/build/slave/mac/build/src/xcodebuild/Debug/libcommon.a /b/build/slave/mac/build/src/xcodebuild/Debug/libcommon_net.a /b/build/slave/mac/build/src/xcodebuild/Debug/libapp_base.a /b/build/slave/mac/build/src/xcodebuild/Debug/libbase_i18n.a /b/build/slave/mac/build/src/xcodebuild/Debug/libgfx.a /b/build/slave/mac/build/src/xcodebuild/Debug/libskia.a /b/build/slave/mac/build/src/xcodebuild/Debug/libskia_opts.a /b/build/slave/mac/build/src/xcodebuild/Debug/libpng.a /b/build/slave/mac/build/src/xcodebuild/Debug/libchrome_zlib.a /b/build/slave/mac/build/src/xcodebuild/Debug/libjpeg.a /b/build/slave/mac/build/src/xcodebuild/Debug/libnet.a /b/build/slave/mac/build/src/xcodebuild/Debug/libgoogleurl.a /b/build/slave/mac/build/src/xcodebuild/Debug/libsdch.a /b/build/slave/mac/build/src/xcodebuild/Debug/libnet_base.a /b/build/slave/mac/build/src/xcodebuild/Debug/libssl_host_info.a /b/build/slave/mac/build/src/xcodebuild/Debug/libprotobuf_lite.a /b/build/slave/mac/build/src/xcodebuild/Debug/libv8_snapshot.a /b/build/slave/mac/build/src/xcodebuild/Debug/libv8_base.a /b/build/slave/mac/build/src/xcodebuild/Debug/libssl.a /b/build/slave/mac/build/src/xcodebuild/Debug/libdefault_plugin.a /b/build/slave/mac/build/src/xcodebuild/Debug/libxml2.a /b/build/slave/mac/build/src/xcodebuild/Debug/libipc.a /b/build/slave/mac/build/src/xcodebuild/Debug/libprinting.a /b/build/slave/mac/build/src/xcodebuild/Debug/libchrome_bz2.a /b/build/slave/mac/build/src/xcodebuild/Debug/libappcache.a /b/build/slave/mac/build/src/xcodebuild/Debug/libblob.a /b/build/slave/mac/build/src/xcodebuild/Debug/libglue.a /b/build/slave/mac/build/src/xcodebuild/Debug/libgles2_implementation.a /b/build/slave/mac/build/src/xcodebuild/Debug/libgles2_cmd_helper.a /b/build/slave/mac/build/src/xcodebuild/Debug/libcommand_buffer_client.a /b/build/slave/mac/build/src/xcodebuild/Debug/libcommand_buffer_common.a /b/build/slave/mac/build/src/xcodebuild/Debug/libppapi_shared_impl.a /b/build/slave/mac/build/src/xcodebuild/Debug/libwebkit_user_agent.a /b/build/slave/mac/build/src/xcodebuild/Debug/libgpu_plugin.a /b/build/slave/mac/build/src/xcodebuild/Debug/libcommand_buffer_service.a /b/build/slave/mac/build/src/xcodebuild/Debug/libtranslator_glsl.a /b/build/slave/mac/build/src/xcodebuild/Debug/libtranslator_common.a /b/build/slave/mac/build/src/xcodebuild/Debug/libchromoting_plugin.a /b/build/slave/mac/build/src/xcodebuild/Debug/libchromoting_base.a /b/build/slave/mac/build/src/xcodebuild/Debug/libmedia.a /b/build/slave/mac/build/src/xcodebuild/Debug/libffmpeg.a /b/build/slave/mac/build/src/xcodebuild/Debug/libchromoting_jingle_glue.a /b/build/slave/mac/build/src/xcodebuild/Debug/libexpat.a /b/build/slave/mac/build/src/xcodebuild/Debug/libjingle_p2p.a /b/build/slave/mac/build/src/xcodebuild/Debug/libsrtp.a /b/build/slave/mac/build/src/xcodebuild/Debug/libchromotocol_proto_lib.a /b/build/slave/mac/build/src/xcodebuild/Debug/libtrace_proto_lib.a /b/build/slave/mac/build/src/xcodebuild/Debug/libchromoting_client.a /b/build/slave/mac/build/src/xcodebuild/Debug/libchromoting_protocol.a /b/build/slave/mac/build/src/xcodebuild/Debug/libppapi_cpp_objects.a /b/build/slave/mac/build/src/xcodebuild/Debug/libcacheinvalidation.a -framework AppKit -framework Carbon -framework CoreFoundation -framework Foundation -framework IOKit -framework Security -framework OpenGL -framework SystemConfiguration -lresolv -lcups -framework QuartzCore -framework AudioToolbox -framework CoreAudio -o /b/build/slave/mac/build/src/chrome/browser/sync/tools/../../../../xcodebuild/Debug/sync_listen_notifications
-
-PhaseScriptExecution "Postbuild \"Strip If Needed\"" ../../../../xcodebuild/sync_tools.build/Debug/sync_listen_notifications.build/Script-577A6588CCA38D4E2CF91DDA.sh
- cd /b/build/slave/mac/build/src/chrome/browser/sync/tools
- /bin/sh -c /b/build/slave/mac/build/src/chrome/browser/sync/tools/../../../../xcodebuild/sync_tools.build/Debug/sync_listen_notifications.build/Script-577A6588CCA38D4E2CF91DDA.sh
-
-
-=== BUILD AGGREGATE TARGET platform_locale_settings OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD AGGREGATE TARGET chrome_extra_resources OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Rule \"grit\"" ../xcodebuild/chrome.build/Debug/chrome_extra_resources.build/Script-3DF0B99B7073177A35D87914.sh
- cd /b/build/slave/mac/build/src/chrome
- /bin/sh -c /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/chrome_extra_resources.build/Script-3DF0B99B7073177A35D87914.sh
-
-make: Nothing to be done for `all'.
-
-=== BUILD AGGREGATE TARGET default_extensions OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET debugger OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/debugger.build/Objects-normal/i386/debugger_remote_service.o browser/debugger/debugger_remote_service.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/debugger.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/debugger.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/debugger/debugger_remote_service.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/debugger.build/Objects-normal/i386/debugger_remote_service.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/debugger.build/Objects-normal/i386/extension_ports_remote_service.o browser/debugger/extension_ports_remote_service.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/debugger.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/debugger.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/debugger/extension_ports_remote_service.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/debugger.build/Objects-normal/i386/extension_ports_remote_service.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/debugger.build/Objects-normal/i386/devtools_window.o browser/debugger/devtools_window.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/debugger.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/debugger.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/debugger/devtools_window.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/debugger.build/Objects-normal/i386/devtools_window.o
-
-Libtool ../xcodebuild/Debug/libdebugger.a normal i386
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_HOSTS "distcc4.golo.chromium.org:3632,lzo,cpp/0 distcc7.golo.chromium.org:3632,lzo,cpp/0 distcc8.golo.chromium.org:3632,lzo,cpp/0 distcc10.golo.chromium.org:3632,lzo,cpp/0 distcc6.golo.chromium.org:3632,lzo,cpp/0 distcc3.golo.chromium.org:3632,lzo,cpp/0 distcc2.golo.chromium.org:3632,lzo,cpp/0 distcc1.golo.chromium.org:3632,lzo,cpp/0 distcc9.golo.chromium.org:3632,lzo,cpp/0 distcc5.golo.chromium.org:3632,lzo,cpp/0"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv MACOSX_DEPLOYMENT_TARGET 10.5
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/libtool -static -arch_only i386 -syslibroot /Developer/SDKs/MacOSX10.5.sdk -L/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -filelist /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/debugger.build/Objects-normal/i386/debugger.LinkFileList -o /b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/libdebugger.a
-
-
-=== BUILD NATIVE TARGET plugin OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/plugin.build/Objects-normal/i386/plugin_thread.o plugin/plugin_thread.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS localhost
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../gpu -I.. -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/plugin.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/plugin.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/plugin/plugin_thread.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/plugin.build/Objects-normal/i386/plugin_thread.o
-
-Libtool ../xcodebuild/Debug/libplugin.a normal i386
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_HOSTS "distcc4.golo.chromium.org:3632,lzo,cpp/0 distcc7.golo.chromium.org:3632,lzo,cpp/0 distcc8.golo.chromium.org:3632,lzo,cpp/0 distcc10.golo.chromium.org:3632,lzo,cpp/0 distcc6.golo.chromium.org:3632,lzo,cpp/0 distcc3.golo.chromium.org:3632,lzo,cpp/0 distcc2.golo.chromium.org:3632,lzo,cpp/0 distcc1.golo.chromium.org:3632,lzo,cpp/0 distcc9.golo.chromium.org:3632,lzo,cpp/0 distcc5.golo.chromium.org:3632,lzo,cpp/0"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv MACOSX_DEPLOYMENT_TARGET 10.5
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/libtool -static -arch_only i386 -syslibroot /Developer/SDKs/MacOSX10.5.sdk -L/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -filelist /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/plugin.build/Objects-normal/i386/plugin.LinkFileList -o /b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/libplugin.a
-
-
-=== BUILD NATIVE TARGET utility OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET profile_import OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET chrome_gpu OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET ppapi_plugin OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET worker OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/worker.build/Objects-normal/i386/worker_webkitclient_impl.o worker/worker_webkitclient_impl.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS localhost
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I.. -I../gpu -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/worker.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/worker.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/worker/worker_webkitclient_impl.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/worker.build/Objects-normal/i386/worker_webkitclient_impl.o
-
-Libtool ../xcodebuild/Debug/libworker.a normal i386
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_HOSTS "distcc4.golo.chromium.org:3632,lzo,cpp/0 distcc7.golo.chromium.org:3632,lzo,cpp/0 distcc8.golo.chromium.org:3632,lzo,cpp/0 distcc10.golo.chromium.org:3632,lzo,cpp/0 distcc6.golo.chromium.org:3632,lzo,cpp/0 distcc3.golo.chromium.org:3632,lzo,cpp/0 distcc2.golo.chromium.org:3632,lzo,cpp/0 distcc1.golo.chromium.org:3632,lzo,cpp/0 distcc9.golo.chromium.org:3632,lzo,cpp/0 distcc5.golo.chromium.org:3632,lzo,cpp/0"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv MACOSX_DEPLOYMENT_TARGET 10.5
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/libtool -static -arch_only i386 -syslibroot /Developer/SDKs/MacOSX10.5.sdk -L/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -filelist /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/worker.build/Objects-normal/i386/worker.LinkFileList -o /b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/libworker.a
-
-
-=== BUILD NATIVE TARGET syncapi OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET service OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD AGGREGATE TARGET device_management_proto_cpp OF PROJECT device_management_proto WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD AGGREGATE TARGET safe_browsing_csd_proto OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Rule \"genproto\"" ../xcodebuild/chrome.build/Debug/safe_browsing_csd_proto.build/Script-A64480A7A7F73B68D5D0EBFB.sh
- cd /b/build/slave/mac/build/src/chrome
- /bin/sh -c /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/safe_browsing_csd_proto.build/Script-A64480A7A7F73B68D5D0EBFB.sh
-
-make: Nothing to be done for `all'.
-
-=== BUILD AGGREGATE TARGET safe_browsing_report_proto OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Rule \"genproto\"" ../xcodebuild/chrome.build/Debug/safe_browsing_report_proto.build/Script-6B102C7C9773962E1B26CF1B.sh
- cd /b/build/slave/mac/build/src/chrome
- /bin/sh -c /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/safe_browsing_report_proto.build/Script-6B102C7C9773962E1B26CF1B.sh
-
-make: Nothing to be done for `all'.
-
-=== BUILD AGGREGATE TARGET userfeedback_proto OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Rule \"genproto\"" ../xcodebuild/chrome.build/Debug/userfeedback_proto.build/Script-E9D8DD8102F83FCBC3F0768B.sh
- cd /b/build/slave/mac/build/src/chrome
- /bin/sh -c /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/userfeedback_proto.build/Script-E9D8DD8102F83FCBC3F0768B.sh
-
-make: Nothing to be done for `all'.
-
-=== BUILD AGGREGATE TARGET browser Support OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-
-=== BUILD NATIVE TARGET browser OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/appcache_dispatcher_host.o browser/appcache/appcache_dispatcher_host.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/appcache/appcache_dispatcher_host.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/appcache_dispatcher_host.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/appcache_frontend_proxy.o browser/appcache/appcache_frontend_proxy.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/appcache/appcache_frontend_proxy.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/appcache_frontend_proxy.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/dom_ui.o browser/dom_ui/dom_ui.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/dom_ui/dom_ui.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/dom_ui.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/extension_port_container.o browser/automation/extension_port_container.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/automation/extension_port_container.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/extension_port_container.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/browser_about_handler.o browser/browser_about_handler.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/browser_about_handler.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/browser_about_handler.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/browser_main.o browser/browser_main.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/browser_main.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/browser_main.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/devtools_ui.o browser/dom_ui/devtools_ui.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/dom_ui/devtools_ui.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/devtools_ui.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/dispatcher_host.o browser/device_orientation/dispatcher_host.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/device_orientation/dispatcher_host.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/dispatcher_host.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/extension_browser_actions_api.o browser/extensions/extension_browser_actions_api.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/extensions/extension_browser_actions_api.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/extension_browser_actions_api.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/dom_storage_dispatcher_host.o browser/in_process_webkit/dom_storage_dispatcher_host.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/in_process_webkit/dom_storage_dispatcher_host.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/dom_storage_dispatcher_host.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/indexed_db_callbacks.o browser/in_process_webkit/indexed_db_callbacks.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/in_process_webkit/indexed_db_callbacks.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/indexed_db_callbacks.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/extension_menu_manager.o browser/extensions/extension_menu_manager.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/extensions/extension_menu_manager.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/extension_menu_manager.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/browser_process_impl.o browser/browser_process_impl.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/browser_process_impl.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/browser_process_impl.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/instant_loader.o browser/instant/instant_loader.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/instant/instant_loader.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/instant_loader.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/extension_event_router.o browser/extensions/extension_event_router.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/extensions/extension_event_router.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/extension_event_router.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/memory_purger.o browser/memory_purger.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/memory_purger.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/memory_purger.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/extension_message_service.o browser/extensions/extension_message_service.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/extensions/extension_message_service.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/extension_message_service.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/extension_sidebar_api.o browser/extensions/extension_sidebar_api.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/extensions/extension_sidebar_api.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/extension_sidebar_api.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/extension_process_manager.o browser/extensions/extension_process_manager.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/extensions/extension_process_manager.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/extension_process_manager.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/extension_host.o browser/extensions/extension_host.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/extensions/extension_host.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/extension_host.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/histogram_synchronizer.o browser/metrics/histogram_synchronizer.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/metrics/histogram_synchronizer.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/histogram_synchronizer.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/dom_storage_area.o browser/in_process_webkit/dom_storage_area.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/in_process_webkit/dom_storage_area.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/dom_storage_area.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/indexed_db_dispatcher_host.o browser/in_process_webkit/indexed_db_dispatcher_host.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/in_process_webkit/indexed_db_dispatcher_host.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/indexed_db_dispatcher_host.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/extension_page_actions_module.o browser/extensions/extension_page_actions_module.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/extensions/extension_page_actions_module.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/extension_page_actions_module.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/mime_registry_dispatcher.o browser/mime_registry_dispatcher.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/mime_registry_dispatcher.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/mime_registry_dispatcher.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/file_system_dispatcher_host.o browser/file_system/file_system_dispatcher_host.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/file_system/file_system_dispatcher_host.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/file_system_dispatcher_host.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/geolocation_dispatcher_host_old.o browser/geolocation/geolocation_dispatcher_host_old.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/geolocation/geolocation_dispatcher_host_old.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/geolocation_dispatcher_host_old.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/balloon_host.o browser/notifications/balloon_host.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/notifications/balloon_host.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/balloon_host.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/gpu_process_host.o browser/gpu_process_host.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/gpu_process_host.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/gpu_process_host.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/notification_object_proxy.o browser/notifications/notification_object_proxy.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/notifications/notification_object_proxy.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/notification_object_proxy.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/extension_function_dispatcher.o browser/extensions/extension_function_dispatcher.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/extensions/extension_function_dispatcher.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/extension_function_dispatcher.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/geolocation_permission_context.o browser/geolocation/geolocation_permission_context.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/geolocation/geolocation_permission_context.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/geolocation_permission_context.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/plugin_process_host.o browser/plugin_process_host.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/plugin_process_host.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/plugin_process_host.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/desktop_notification_service.o browser/notifications/desktop_notification_service.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/notifications/desktop_notification_service.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/desktop_notification_service.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/ppapi_plugin_process_host.o browser/ppapi_plugin_process_host.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/ppapi_plugin_process_host.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/ppapi_plugin_process_host.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/web_cache_manager.o browser/renderer_host/web_cache_manager.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/renderer_host/web_cache_manager.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/web_cache_manager.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/plugin_service.o browser/plugin_service.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/plugin_service.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/plugin_service.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/nacl_process_host.o browser/nacl_host/nacl_process_host.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/nacl_host/nacl_process_host.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/nacl_process_host.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/metrics_service.o browser/metrics/metrics_service.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/metrics/metrics_service.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/metrics_service.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/profile.o browser/profiles/profile.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/profiles/profile.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/profile.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/render_view_host_delegate.o browser/renderer_host/render_view_host_delegate.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/renderer_host/render_view_host_delegate.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/render_view_host_delegate.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/async_resource_handler.o browser/renderer_host/async_resource_handler.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/renderer_host/async_resource_handler.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/async_resource_handler.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/audio_renderer_host.o browser/renderer_host/audio_renderer_host.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/renderer_host/audio_renderer_host.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/audio_renderer_host.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/task_manager_resource_providers.o browser/task_manager/task_manager_resource_providers.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/task_manager/task_manager_resource_providers.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/task_manager_resource_providers.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/render_widget_host.o browser/renderer_host/render_widget_host.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/renderer_host/render_widget_host.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/render_widget_host.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/render_view_host.o browser/renderer_host/render_view_host.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/renderer_host/render_view_host.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/render_view_host.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/profile_impl.o browser/profiles/profile_impl.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/profiles/profile_impl.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/profile_impl.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/sync_resource_handler.o browser/renderer_host/sync_resource_handler.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/renderer_host/sync_resource_handler.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/sync_resource_handler.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/socket_stream_host.o browser/renderer_host/socket_stream_host.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/renderer_host/socket_stream_host.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/socket_stream_host.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/speech_input_dispatcher_host.o browser/speech/speech_input_dispatcher_host.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/speech/speech_input_dispatcher_host.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/speech_input_dispatcher_host.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/file_utilities_dispatcher_host.o browser/renderer_host/file_utilities_dispatcher_host.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/renderer_host/file_utilities_dispatcher_host.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/file_utilities_dispatcher_host.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/render_widget_host_view_mac.o browser/renderer_host/render_widget_host_view_mac.mm normal i386 objective-c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x objective-c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/renderer_host/render_widget_host_view_mac.mm -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/render_widget_host_view_mac.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/database_dispatcher_host.o browser/renderer_host/database_dispatcher_host.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/renderer_host/database_dispatcher_host.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/database_dispatcher_host.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/browser_render_process_host.o browser/renderer_host/browser_render_process_host.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/renderer_host/browser_render_process_host.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/browser_render_process_host.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/search_provider_install_state_dispatcher_host.o browser/search_engines/search_provider_install_state_dispatcher_host.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/search_engines/search_provider_install_state_dispatcher_host.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/search_provider_install_state_dispatcher_host.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/render_view_context_menu.o browser/tab_contents/render_view_context_menu.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/tab_contents/render_view_context_menu.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/render_view_context_menu.o
-
-distcc[1299] ERROR: compile /b/build/slave/mac/build/src/chrome/browser/tab_contents/render_view_context_menu.cc on distcc4.golo.chromium.org:3632,lzo,cpp/18 failed
-distcc[1299] (dcc_build_somewhere) Warning: remote compilation of '/b/build/slave/mac/build/src/chrome/browser/tab_contents/render_view_context_menu.cc' failed, retrying locally
-distcc[1299] Warning: failed to distribute /b/build/slave/mac/build/src/chrome/browser/tab_contents/render_view_context_menu.cc to distcc4.golo.chromium.org:3632,lzo,cpp/18, running locally instead
-/b/build/slave/mac/build/src/chrome/browser/tab_contents/render_view_context_menu.cc: In member function 'string16 RenderViewContextMenu::PrintableSelectionText()':
-/b/build/slave/mac/build/src/chrome/browser/tab_contents/render_view_context_menu.cc:1436: error: invalid initialization of reference of type 'const std::wstring&' from expression of type 'string16'
-../app/l10n_util.h:166: error: in passing argument 1 of 'std::wstring l10n_util::TruncateString(const std::wstring&, size_t)'
-distcc[1299] ERROR: compile /b/build/slave/mac/build/src/chrome/browser/tab_contents/render_view_context_menu.cc on localhost failed
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/render_view_host_manager.o browser/tab_contents/render_view_host_manager.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/tab_contents/render_view_host_manager.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/render_view_host_manager.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/blob_dispatcher_host.o browser/renderer_host/blob_dispatcher_host.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/renderer_host/blob_dispatcher_host.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/blob_dispatcher_host.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/tab_contents_view_mac.o browser/tab_contents/tab_contents_view_mac.mm normal i386 objective-c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x objective-c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/tab_contents/tab_contents_view_mac.mm -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/tab_contents_view_mac.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/worker_service.o browser/worker_host/worker_service.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/worker_host/worker_service.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/worker_service.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/pepper_file_message_filter.o browser/renderer_host/pepper_file_message_filter.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/renderer_host/pepper_file_message_filter.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/pepper_file_message_filter.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/worker_process_host.o browser/worker_host/worker_process_host.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/worker_host/worker_process_host.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/worker_process_host.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/socket_stream_dispatcher_host.o browser/renderer_host/socket_stream_dispatcher_host.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/renderer_host/socket_stream_dispatcher_host.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/socket_stream_dispatcher_host.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/tab_contents.o browser/tab_contents/tab_contents.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/tab_contents/tab_contents.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/tab_contents.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/render_view_context_menu_mac.o browser/tab_contents/render_view_context_menu_mac.mm normal i386 objective-c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x objective-c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/tab_contents/render_view_context_menu_mac.mm -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/render_view_context_menu_mac.o
-
-distcc[1301] ERROR: compile /b/build/slave/mac/build/src/chrome/browser/tab_contents/render_view_context_menu_mac.mm on distcc9.golo.chromium.org:3632,lzo,cpp/18 failed
-distcc[1301] (dcc_build_somewhere) Warning: remote compilation of '/b/build/slave/mac/build/src/chrome/browser/tab_contents/render_view_context_menu_mac.mm' failed, retrying locally
-distcc[1301] Warning: failed to distribute /b/build/slave/mac/build/src/chrome/browser/tab_contents/render_view_context_menu_mac.mm to distcc9.golo.chromium.org:3632,lzo,cpp/18, running locally instead
-/b/build/slave/mac/build/src/chrome/browser/tab_contents/render_view_context_menu_mac.mm: In member function 'virtual void RenderViewContextMenuMac::LookUpInDictionary()':
-/b/build/slave/mac/build/src/chrome/browser/tab_contents/render_view_context_menu_mac.mm:78: error: invalid initialization of reference of type 'const std::wstring&' from expression of type 'string16'
-../base/sys_string_conversions.h:68: error: in passing argument 1 of 'NSString* base::SysWideToNSString(const std::wstring&)'
-distcc[1301] ERROR: compile /b/build/slave/mac/build/src/chrome/browser/tab_contents/render_view_context_menu_mac.mm on localhost failed
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/resource_dispatcher_host.o browser/renderer_host/resource_dispatcher_host.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/renderer_host/resource_dispatcher_host.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/resource_dispatcher_host.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/resource_message_filter.o browser/renderer_host/resource_message_filter.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DCHROME_V8 -DGOOGLE_PROTOBUF_NO_RTTI -DXML_STATIC -DFEATURE_ENABLE_SSL -DFEATURE_ENABLE_VOICEMAIL -DEXPAT_RELATIVE_PATH -DOSX -DPOSIX -DLIBXML_STATIC -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/DerivedSources/Debug -I../third_party/apple -I../third_party/GTM -I../third_party/GTM/AppKit -I../third_party/GTM/Foundation -I../third_party/GTM/DebugUtils -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_resources -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_locale_settings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app/app_strings -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I../third_party/bzip2 -I../third_party/expat/files/lib -I../third_party/libjingle/overrides -I../third_party/libjingle/source -I../third_party/expat/files -I../third_party/libxml/mac/include -I../third_party/libxml/src/include -I../third_party/npapi -I../third_party/npapi/bindings -I../third_party/speex/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/browser/renderer_host/resource_message_filter.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/browser.build/Objects-normal/i386/resource_message_filter.o
-
-
-=== BUILD AGGREGATE TARGET safe_browsing_proto OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-PhaseScriptExecution "Rule \"genproto\"" ../xcodebuild/chrome.build/Debug/safe_browsing_proto.build/Script-04EB001E8DD6896C5E67BFBB.sh
- cd /b/build/slave/mac/build/src/chrome
- /bin/sh -c /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/safe_browsing_proto.build/Script-04EB001E8DD6896C5E67BFBB.sh
-
-make: Nothing to be done for `all'.
-
-=== BUILD NATIVE TARGET renderer OF PROJECT chrome WITH CONFIGURATION Debug ===
-Check dependencies
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/autofill_helper.o renderer/autofill_helper.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DGOOGLE_PROTOBUF_NO_RTTI -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -DCLD_WINDOWS -DCOMPILER_GCC -D__STDC_CONSTANT_MACROS -DNACL_BLOCK_SHIFT=5 -DNACL_BLOCK_SIZE=32 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I../third_party/cld -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/ffmpeg -I../third_party/ffmpeg/config -I../third_party/ffmpeg/patched-ffmpeg-mt -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/renderer/autofill_helper.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/autofill_helper.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/dom_automation_controller.o renderer/automation/dom_automation_controller.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DGOOGLE_PROTOBUF_NO_RTTI -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -DCLD_WINDOWS -DCOMPILER_GCC -D__STDC_CONSTANT_MACROS -DNACL_BLOCK_SHIFT=5 -DNACL_BLOCK_SIZE=32 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I../third_party/cld -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/ffmpeg -I../third_party/ffmpeg/config -I../third_party/ffmpeg/patched-ffmpeg-mt -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/renderer/automation/dom_automation_controller.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/dom_automation_controller.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/chrome_app_bindings.o renderer/extensions/chrome_app_bindings.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DGOOGLE_PROTOBUF_NO_RTTI -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -DCLD_WINDOWS -DCOMPILER_GCC -D__STDC_CONSTANT_MACROS -DNACL_BLOCK_SHIFT=5 -DNACL_BLOCK_SIZE=32 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I../third_party/cld -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/ffmpeg -I../third_party/ffmpeg/config -I../third_party/ffmpeg/patched-ffmpeg-mt -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/renderer/extensions/chrome_app_bindings.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/chrome_app_bindings.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/password_autocomplete_manager.o renderer/password_autocomplete_manager.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DGOOGLE_PROTOBUF_NO_RTTI -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -DCLD_WINDOWS -DCOMPILER_GCC -D__STDC_CONSTANT_MACROS -DNACL_BLOCK_SHIFT=5 -DNACL_BLOCK_SIZE=32 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I../third_party/cld -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/ffmpeg -I../third_party/ffmpeg/config -I../third_party/ffmpeg/patched-ffmpeg-mt -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/renderer/password_autocomplete_manager.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/password_autocomplete_manager.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/bindings_utils.o renderer/extensions/bindings_utils.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DGOOGLE_PROTOBUF_NO_RTTI -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -DCLD_WINDOWS -DCOMPILER_GCC -D__STDC_CONSTANT_MACROS -DNACL_BLOCK_SHIFT=5 -DNACL_BLOCK_SIZE=32 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I../third_party/cld -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/ffmpeg -I../third_party/ffmpeg/config -I../third_party/ffmpeg/patched-ffmpeg-mt -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/renderer/extensions/bindings_utils.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/bindings_utils.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/renderer_net_predictor.o renderer/net/renderer_net_predictor.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DGOOGLE_PROTOBUF_NO_RTTI -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -DCLD_WINDOWS -DCOMPILER_GCC -D__STDC_CONSTANT_MACROS -DNACL_BLOCK_SHIFT=5 -DNACL_BLOCK_SIZE=32 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I../third_party/cld -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/ffmpeg -I../third_party/ffmpeg/config -I../third_party/ffmpeg/patched-ffmpeg-mt -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/renderer/net/renderer_net_predictor.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/renderer_net_predictor.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/audio_renderer_impl.o renderer/media/audio_renderer_impl.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DGOOGLE_PROTOBUF_NO_RTTI -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -DCLD_WINDOWS -DCOMPILER_GCC -D__STDC_CONSTANT_MACROS -DNACL_BLOCK_SHIFT=5 -DNACL_BLOCK_SIZE=32 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I../third_party/cld -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/ffmpeg -I../third_party/ffmpeg/config -I../third_party/ffmpeg/patched-ffmpeg-mt -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/renderer/media/audio_renderer_impl.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/audio_renderer_impl.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/cookie_message_filter.o renderer/cookie_message_filter.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DGOOGLE_PROTOBUF_NO_RTTI -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -DCLD_WINDOWS -DCOMPILER_GCC -D__STDC_CONSTANT_MACROS -DNACL_BLOCK_SHIFT=5 -DNACL_BLOCK_SIZE=32 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I../third_party/cld -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/ffmpeg -I../third_party/ffmpeg/config -I../third_party/ffmpeg/patched-ffmpeg-mt -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/renderer/cookie_message_filter.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/cookie_message_filter.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/event_bindings.o renderer/extensions/event_bindings.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DGOOGLE_PROTOBUF_NO_RTTI -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -DCLD_WINDOWS -DCOMPILER_GCC -D__STDC_CONSTANT_MACROS -DNACL_BLOCK_SHIFT=5 -DNACL_BLOCK_SIZE=32 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I../third_party/cld -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/ffmpeg -I../third_party/ffmpeg/config -I../third_party/ffmpeg/patched-ffmpeg-mt -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/renderer/extensions/event_bindings.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/event_bindings.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/external_popup_menu.o renderer/external_popup_menu.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DGOOGLE_PROTOBUF_NO_RTTI -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -DCLD_WINDOWS -DCOMPILER_GCC -D__STDC_CONSTANT_MACROS -DNACL_BLOCK_SHIFT=5 -DNACL_BLOCK_SIZE=32 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I../third_party/cld -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/ffmpeg -I../third_party/ffmpeg/config -I../third_party/ffmpeg/patched-ffmpeg-mt -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/renderer/external_popup_menu.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/external_popup_menu.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/renderer_extension_bindings.o renderer/extensions/renderer_extension_bindings.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DGOOGLE_PROTOBUF_NO_RTTI -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -DCLD_WINDOWS -DCOMPILER_GCC -D__STDC_CONSTANT_MACROS -DNACL_BLOCK_SHIFT=5 -DNACL_BLOCK_SIZE=32 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I../third_party/cld -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/ffmpeg -I../third_party/ffmpeg/config -I../third_party/ffmpeg/patched-ffmpeg-mt -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/renderer/extensions/renderer_extension_bindings.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/renderer_extension_bindings.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/extension_process_bindings.o renderer/extensions/extension_process_bindings.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DGOOGLE_PROTOBUF_NO_RTTI -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -DCLD_WINDOWS -DCOMPILER_GCC -D__STDC_CONSTANT_MACROS -DNACL_BLOCK_SHIFT=5 -DNACL_BLOCK_SIZE=32 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I../third_party/cld -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/ffmpeg -I../third_party/ffmpeg/config -I../third_party/ffmpeg/patched-ffmpeg-mt -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/renderer/extensions/extension_process_bindings.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/extension_process_bindings.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/device_orientation_dispatcher.o renderer/device_orientation_dispatcher.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DGOOGLE_PROTOBUF_NO_RTTI -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -DCLD_WINDOWS -DCOMPILER_GCC -D__STDC_CONSTANT_MACROS -DNACL_BLOCK_SHIFT=5 -DNACL_BLOCK_SIZE=32 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I../third_party/cld -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/ffmpeg -I../third_party/ffmpeg/config -I../third_party/ffmpeg/patched-ffmpeg-mt -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/renderer/device_orientation_dispatcher.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/device_orientation_dispatcher.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/audio_message_filter.o renderer/audio_message_filter.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DGOOGLE_PROTOBUF_NO_RTTI -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -DCLD_WINDOWS -DCOMPILER_GCC -D__STDC_CONSTANT_MACROS -DNACL_BLOCK_SHIFT=5 -DNACL_BLOCK_SIZE=32 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I../third_party/cld -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/ffmpeg -I../third_party/ffmpeg/config -I../third_party/ffmpeg/patched-ffmpeg-mt -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/renderer/audio_message_filter.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/audio_message_filter.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/blocked_plugin.o renderer/blocked_plugin.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DGOOGLE_PROTOBUF_NO_RTTI -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -DCLD_WINDOWS -DCOMPILER_GCC -D__STDC_CONSTANT_MACROS -DNACL_BLOCK_SHIFT=5 -DNACL_BLOCK_SIZE=32 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I../third_party/cld -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/ffmpeg -I../third_party/ffmpeg/config -I../third_party/ffmpeg/patched-ffmpeg-mt -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/renderer/blocked_plugin.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/blocked_plugin.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/page_load_histograms.o renderer/page_load_histograms.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DGOOGLE_PROTOBUF_NO_RTTI -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -DCLD_WINDOWS -DCOMPILER_GCC -D__STDC_CONSTANT_MACROS -DNACL_BLOCK_SHIFT=5 -DNACL_BLOCK_SIZE=32 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I../third_party/cld -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/ffmpeg -I../third_party/ffmpeg/config -I../third_party/ffmpeg/patched-ffmpeg-mt -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/renderer/page_load_histograms.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/page_load_histograms.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/devtools_agent.o renderer/devtools_agent.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DGOOGLE_PROTOBUF_NO_RTTI -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -DCLD_WINDOWS -DCOMPILER_GCC -D__STDC_CONSTANT_MACROS -DNACL_BLOCK_SHIFT=5 -DNACL_BLOCK_SIZE=32 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I../third_party/cld -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/ffmpeg -I../third_party/ffmpeg/config -I../third_party/ffmpeg/patched-ffmpeg-mt -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/renderer/devtools_agent.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/devtools_agent.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/devtools_agent_filter.o renderer/devtools_agent_filter.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DGOOGLE_PROTOBUF_NO_RTTI -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -DCLD_WINDOWS -DCOMPILER_GCC -D__STDC_CONSTANT_MACROS -DNACL_BLOCK_SHIFT=5 -DNACL_BLOCK_SIZE=32 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I../third_party/cld -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/ffmpeg -I../third_party/ffmpeg/config -I../third_party/ffmpeg/patched-ffmpeg-mt -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/renderer/devtools_agent_filter.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/devtools_agent_filter.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/dom_ui_bindings.o renderer/dom_ui_bindings.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DGOOGLE_PROTOBUF_NO_RTTI -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -DCLD_WINDOWS -DCOMPILER_GCC -D__STDC_CONSTANT_MACROS -DNACL_BLOCK_SHIFT=5 -DNACL_BLOCK_SIZE=32 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I../third_party/cld -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/ffmpeg -I../third_party/ffmpeg/config -I../third_party/ffmpeg/patched-ffmpeg-mt -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/renderer/dom_ui_bindings.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/dom_ui_bindings.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/devtools_client.o renderer/devtools_client.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DGOOGLE_PROTOBUF_NO_RTTI -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -DCLD_WINDOWS -DCOMPILER_GCC -D__STDC_CONSTANT_MACROS -DNACL_BLOCK_SHIFT=5 -DNACL_BLOCK_SIZE=32 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I../third_party/cld -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/ffmpeg -I../third_party/ffmpeg/config -I../third_party/ffmpeg/patched-ffmpeg-mt -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/renderer/devtools_client.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/devtools_client.o
-
-Distributed-CompileC ../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/indexed_db_dispatcher.o renderer/indexed_db_dispatcher.cc normal i386 c++ com.apple.compilers.gcc.4_2
- cd /b/build/slave/mac/build/src/chrome
- setenv DISTCC_COMPILER "gcc version 4.2.1 (Apple Inc. build 5659)"
- setenv DISTCC_HOSTS "--randomize distcc5.golo.chromium.org:3632,lzo,cpp/18 distcc9.golo.chromium.org:3632,lzo,cpp/18 distcc1.golo.chromium.org:3632,lzo,cpp/18 distcc2.golo.chromium.org:3632,lzo,cpp/18 distcc3.golo.chromium.org:3632,lzo,cpp/18 distcc6.golo.chromium.org:3632,lzo,cpp/18 distcc10.golo.chromium.org:3632,lzo,cpp/18 distcc7.golo.chromium.org:3632,lzo,cpp/18 distcc8.golo.chromium.org:3632,lzo,cpp/18 distcc4.golo.chromium.org:3632,lzo,cpp/18"
- setenv DISTCC_SYSTEM "10.6.4 (10F2025, i386)"
- setenv INCLUDE_SERVER_DIR /tmp/distcc-pump.C2DZDO
- setenv INCLUDE_SERVER_PID 983
- setenv INCLUDE_SERVER_PORT /tmp/distcc-pump.C2DZDO/socket
- setenv LANG en_US.US-ASCII
- setenv PATH "/usr/bin:/Developer/usr/bin:/usr/bin:/b/build/../depot_tools:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
- /Developer/usr/bin/distcc /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O0 -Werror -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DNACL_WINDOWS=0 -DNACL_LINUX=0 -DNACL_OSX=1 -DNACL_TARGET_SUBARCH=32 -DNACL_BUILD_SUBARCH=32 -DGOOGLE_PROTOBUF_NO_RTTI -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -DCLD_WINDOWS -DCOMPILER_GCC -D__STDC_CONSTANT_MACROS -DNACL_BLOCK_SHIFT=5 -DNACL_BLOCK_SIZE=32 -D__STDC_FORMAT_MACROS -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_DEBUG -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wall -Wendif-labels -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fpch-preprocess -F/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug -F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/b/build/slave/mac/build/src/chrome/../xcodebuild/Debug/include -I../third_party/icu/public/common -I../third_party/icu/public/i18n -I.. -I../third_party/cld -I../gpu -I../third_party -I../third_party/mesa/MesaLib/include -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/app -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/chrome -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/protoc_out -I../third_party/protobuf -I../third_party/protobuf/src -I../skia/config -I../third_party/skia/include/config -I../third_party/skia/include/core -I../third_party/skia/include/effects -I../skia/ext -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/ffmpeg -I../third_party/ffmpeg/config -I../third_party/ffmpeg/patched-ffmpeg-mt -I../third_party/npapi -I../third_party/npapi/bindings -I/b/build/slave/mac/build/src/chrome/../xcodebuild/DerivedSources/Debug/webkit -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources/i386 -I/b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/DerivedSources -g1 -c /b/build/slave/mac/build/src/chrome/renderer/indexed_db_dispatcher.cc -o /b/build/slave/mac/build/src/chrome/../xcodebuild/chrome.build/Debug/renderer.build/Objects-normal/i386/indexed_db_dispatcher.o
-
diff --git a/chromium/tools/emacs/trybot-windows.txt b/chromium/tools/emacs/trybot-windows.txt
deleted file mode 100644
index b3ee27fcedb..00000000000
--- a/chromium/tools/emacs/trybot-windows.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-This file contains sample trybot output from a Windows trybot run.
-It contains a warning and an error but has otherwise been shortened
-for length.
-
-"C:\Program Files (x86)\Xoreax\IncrediBuild\BuildConsole.exe" e:\b\build\slave\win\build\src\build\all.sln "/Cfg=Debug|Win32"
-
------------------------------------------------------------------
-IncrediBuild Console 3.60 Internal (build 1156)
-Copyright (C) 2001-2010 Xoreax Software Ltd. All rights reserved.
------------------------------------------------------------------
---------------------Configuration: toolband_proxy_lib - Debug|Win32------------
-Compiling...
-toolband_p.c
-toolband_proxy.cc
-toolband_dlldata.c
-Creating library...
-
-toolband_proxy_lib - 0 error(s), 0 warning(s)
---------------------Configuration: webcore_bindings - Debug|Win32--------------
-Compiling...
-CSSGrammar.cpp
-e:\b\build\slave\win\build\src\third_party\webkit\javascriptcore\wtf\text\StringImpl.h(90) : warning C4355: 'this' : used in base member initializer list with a gratuitous backslash \ for testing
-e:\b\build\slave\win\build\src\third_party\webkit\webcore\dom\ViewportArguments.h(78) : warning C4305: 'initializing' : truncation from '' to 'bool'
-e:\b\build\slave\win\build\src\build\Debug\obj\global_intermediate\webkit\CSSGrammar.cpp(1930) : warning C4065: switch statement contains 'default' but no 'case' labels
-V8DerivedSources1.cpp
---------------------Configuration: run_testserver - Debug|Win32----------------
-Compiling...
-run_testserver.cc
-Linking...
-Embedding manifest...
-Embedding manifest... (rc.exe)
-Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
-
-Copyright (C) Microsoft Corporation. All rights reserved.
-
-Embedding manifest... (link.exe)
-
-run_testserver - 0 error(s), 0 warning(s)
---------------------Configuration: browser - Debug|Win32-----------------------
-Compiling...
-bookmark_manager_resources_map.cc
-theme_resources_map.cc
-shared_resources_map.cc
-process_singleton_win.cc
-e:\b\build\slave\win\build\src\chrome\browser\process_singleton_win.cc(95) : error C2664: 'PathService::Get' : cannot convert parameter 2 from 'std::wstring *' to 'FilePath *'
- Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
-gpu_process_host.cc
-ntp_background_util.cc
-
-browser - 6 error(s), 0 warning(s)
-
-1 build system warning(s):
- - PDB instance limit is enabled
-
----------------------- Done ----------------------
-
- Build: 244 succeeded, 1 failed, 233 up-to-date, 42 skipped
-
-
-We also see weird paths with mixed slashes like this:
-
---------------------Configuration: inspector_protocol_sources - Debug|Win32----
---------------------Configuration: installer_util_nacl_win64 - Debug|x64-------
-Compiling...
-google_chrome_distribution_dummy.cc
-helper.cc
-installation_state.cc
-self_reg_work_item.cc
-..\chrome/installer/util/work_item.h(67) : error C2514: 'FilePath' : class has no constructors
- ..\chrome/installer/util/work_item.h(26) : see declaration of 'FilePath'
-delete_tree_work_item.cc
-delete_reg_key_work_item.cc
diff --git a/chromium/tools/emacs/trybot.el b/chromium/tools/emacs/trybot.el
deleted file mode 100644
index 970ffc085d9..00000000000
--- a/chromium/tools/emacs/trybot.el
+++ /dev/null
@@ -1,176 +0,0 @@
-; To use this,
-; 1) Add to init.el:
-; (setq-default chrome-root "/path/to/chrome/src/")
-; (add-to-list 'load-path (concat chrome-root "tools/emacs"))
-; (require 'trybot)
-; 2) Run on trybot output:
-; M-x trybot
-;
-; To hack on this,
-; M-x eval-buffer
-; M-x trybot-test-win or M-x trybot-test-mac
-
-(defvar chrome-root nil
- "Path to the src/ directory of your Chrome checkout.")
-
-(defun get-chrome-root ()
- (or chrome-root default-directory))
-
-; Hunt down from the top, case correcting each path component as needed.
-; Currently does not keep a cache. Returns nil if no matching file can be
-; figured out.
-(defun case-corrected-filename (filename)
- (save-match-data
- (let ((path-components (split-string filename "/"))
- (corrected-path (file-name-as-directory (get-chrome-root))))
- (mapc
- (function
- (lambda (elt)
- (if corrected-path
- (let ((next-component
- (car (member-ignore-case
- elt (directory-files corrected-path)))))
- (setq corrected-path
- (and next-component
- (file-name-as-directory
- (concat corrected-path next-component))))))))
- path-components)
- (if corrected-path
- (file-relative-name (directory-file-name corrected-path)
- (get-chrome-root))
- nil))))
-
-(defun trybot-fixup-win ()
- "Fix up Windows-specific output."
-
- ; Fix Windows paths ("d:\...\src\").
- (save-excursion
- ; This regexp is subtle and rather hard to read. :~(
- ; Use regexp-builder when making changes to it.
- (while (re-search-forward
- (concat
- ; First part: path leader, either of the form
- ; e:\...src\ or ..\
- "\\(^.:\\\\.*\\\\src\\\\\\|\\.\\.\\\\\\)"
- ; Second part: path, followed by error message marker.
- "\\(.*?\\)[(:]") nil t)
- (replace-match "" nil t nil 1)
- ; Line now looks like:
- ; foo\bar\baz.cc error message here
- ; We want to fixup backslashes in path into forward slashes,
- ; without modifying the error message - by matching up to the
- ; first colon above (which will be just beyond the end of the
- ; filename) we can use the end of the match as a limit.
- (subst-char-in-region (point) (match-end 0) ?\\ ?/)
- ; See if we can correct the file name casing.
- (let ((filename (buffer-substring (match-beginning 2) (match-end 2))))
- (if (and (not (file-exists-p filename))
- (setq filename (case-corrected-filename filename)))
- (replace-match filename t t nil 2))))))
-
-(defun trybot-fixup-maclin ()
- "Fix up Mac/Linux output."
- (save-excursion
- (while (re-search-forward "^/b/build/[^ ]*/src/" nil t)
- (replace-match ""))))
-
-(defun trybot-fixup (type-hint)
- "Parse and fixup the contents of the current buffer as trybot output."
-
- ; XXX is there something I should so so this stuff doesn't end up on the
- ; undo stack?
-
- ;; Fixup paths.
- (cd (get-chrome-root))
-
- (goto-char (point-min))
-
- ;; Fix up path references.
- (cond ((eq type-hint 'win) (trybot-fixup-win))
- ((eq type-hint 'mac) (trybot-fixup-maclin))
- ((eq type-hint 'linux) (trybot-fixup-maclin))
- (t (trybot-fixup-win) (trybot-fixup-maclin)))
-
- (compilation-mode))
-
-(defun trybot-get-new-buffer ()
- "Get a new clean buffer for trybot output."
- ; Use trybot-buffer-name if available; otherwise, "*trybot*".
- (let ((buffer-name (if (boundp 'trybot-buffer-name)
- trybot-buffer-name
- "*trybot*")))
- (let ((old (get-buffer buffer-name)))
- (when old (kill-buffer old)))
- (get-buffer-create buffer-name)))
-
-(defun trybot-fetch (type-hint url)
- "Fetch a URL and postprocess it as trybot output."
-
- (let ((on-fetch-completion
- (lambda (process state)
- (switch-to-buffer (process-buffer process))
- (when (equal state "finished\n")
- (trybot-fixup (process-get process 'type-hint)))))
- (command (concat "curl -s " (shell-quote-argument url)
- ; Pipe it through the output shortener.
- (cond
- ((eq type-hint 'win)
- (concat " | " (get-chrome-root)
- "build/sanitize-win-build-log.sh"))
- ((eq type-hint 'mac)
- (concat " | " (get-chrome-root)
- "build/sanitize-mac-build-log.sh"))))))
-
- ; Start up the subprocess.
- (let* ((coding-system-for-read 'utf-8-dos)
- (buffer (trybot-get-new-buffer))
- (process (start-process-shell-command "curl" buffer command)))
- ; Attach the type hint to the process so we can get it back when
- ; the process completes.
- (process-put process 'type-hint type-hint)
- (set-process-query-on-exit-flag process nil)
- (set-process-sentinel process on-fetch-completion))))
-
-(defun trybot-test (type-hint filename)
- "Load the given test data filename and do the trybot parse on it."
-
- (let ((trybot-buffer-name "*trybot-test*")
- (url (concat "file://" (get-chrome-root) "tools/emacs/" filename)))
- (trybot-fetch type-hint url)))
-
-(defun trybot-test-win ()
- "Load the Windows test data and do the trybot parse on it."
- (interactive)
- (trybot-test 'win "trybot-windows.txt"))
-(defun trybot-test-mac ()
- "Load the Mac test data and do the trybot parse on it."
- (interactive)
- (trybot-test 'mac "trybot-mac.txt"))
-(defun trybot-test-linux ()
- "Load the Linux test data and do the trybot parse on it."
- (interactive)
- (trybot-test 'linux "trybot-linux.txt"))
-
-(defun trybot (url)
- "Fetch a trybot URL and fix up the output into a compilation-mode buffer."
- (interactive "sURL to trybot stdout (leave empty to use clipboard): ")
-
- ;; Yank URL from clipboard if necessary.
- (when (= (length url) 0)
- (with-temp-buffer
- (clipboard-yank)
- (setq url (buffer-string))))
-
- ;; Append /text to the URL to get plain text output in the common
- ;; case of getting a URL to the HTML build log.
- (when (equal "stdio" (car (last (split-string url "/"))))
- (setq url (concat url "/text")))
-
- (let ((type-hint (cond ((string-match "/[Ww]in" url) 'win)
- ((string-match "/mac/" url) 'mac)
- ; Match /linux, /linux_view, etc.
- ((string-match "/linux" url) 'linux)
- (t 'unknown))))
- (trybot-fetch type-hint url)))
-
-(provide 'trybot)
diff --git a/chromium/tools/export_tarball/export_tarball.py b/chromium/tools/export_tarball/export_tarball.py
deleted file mode 100755
index 36a98268ffe..00000000000
--- a/chromium/tools/export_tarball/export_tarball.py
+++ /dev/null
@@ -1,172 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-"""
-This tool creates a tarball with all the sources, but without .svn directories.
-
-It can also remove files which are not strictly required for build, so that
-the resulting tarball can be reasonably small (last time it was ~110 MB).
-
-Example usage:
-
-export_tarball.py /foo/bar
-
-The above will create file /foo/bar.tar.bz2.
-"""
-
-import optparse
-import os
-import subprocess
-import sys
-import tarfile
-
-
-NONESSENTIAL_DIRS = (
- 'breakpad/src/processor/testdata',
- 'chrome/browser/resources/tracing/tests',
- 'chrome/common/extensions/docs',
- 'chrome/tools/test/reference_build',
- 'courgette/testdata',
- 'data',
- 'native_client/src/trusted/service_runtime/testdata',
- 'src/chrome/test/data',
- 'o3d/documentation',
- 'o3d/samples',
- 'o3d/tests',
- 'ppapi/examples',
- 'ppapi/native_client/tests',
- 'third_party/angle/samples/gles2_book',
- 'third_party/findbugs',
- 'third_party/hunspell_dictionaries',
- 'third_party/hunspell/tests',
- 'third_party/lighttpd',
- 'third_party/sqlite/src/test',
- 'third_party/sqlite/test',
- 'third_party/vc_80',
- 'third_party/xdg-utils/tests',
- 'third_party/yasm/source/patched-yasm/modules/arch/x86/tests',
- 'third_party/yasm/source/patched-yasm/modules/dbgfmts/dwarf2/tests',
- 'third_party/yasm/source/patched-yasm/modules/objfmts/bin/tests',
- 'third_party/yasm/source/patched-yasm/modules/objfmts/coff/tests',
- 'third_party/yasm/source/patched-yasm/modules/objfmts/elf/tests',
- 'third_party/yasm/source/patched-yasm/modules/objfmts/macho/tests',
- 'third_party/yasm/source/patched-yasm/modules/objfmts/rdf/tests',
- 'third_party/yasm/source/patched-yasm/modules/objfmts/win32/tests',
- 'third_party/yasm/source/patched-yasm/modules/objfmts/win64/tests',
- 'third_party/yasm/source/patched-yasm/modules/objfmts/xdf/tests',
- 'third_party/WebKit/LayoutTests',
- 'third_party/WebKit/Source/JavaScriptCore/tests',
- 'third_party/WebKit/Source/WebCore/ChangeLog',
- 'third_party/WebKit/Source/WebKit2',
- 'third_party/WebKit/Tools/Scripts',
- 'tools/gyp/test',
- 'v8/test',
- 'webkit/data/layout_tests',
- 'webkit/tools/test/reference_build',
-)
-
-TESTDIRS = (
- 'chrome/test/data',
- 'content/test/data',
- 'media/test/data',
- 'net/data',
-)
-
-PRUNEDDIRS = (
- 'courgette',
-)
-
-
-def GetSourceDirectory():
- return os.path.realpath(
- os.path.join(os.path.dirname(__file__), '..', '..', '..', 'src'))
-
-
-# Workaround lack of the exclude parameter in add method in python-2.4.
-# TODO(phajdan.jr): remove the workaround when it's not needed on the bot.
-class MyTarFile(tarfile.TarFile):
- def set_remove_nonessential_files(self, remove):
- self.__remove_nonessential_files = remove
-
- def add(self, name, arcname=None, recursive=True, exclude=None, filter=None):
- head, tail = os.path.split(name)
- if tail in ('.svn', '.git'):
- return
-
- if self.__remove_nonessential_files:
- # WebKit change logs take quite a lot of space. This saves ~10 MB
- # in a bzip2-compressed tarball.
- if 'ChangeLog' in name:
- return
-
- # Remove contents of non-essential directories, but preserve gyp files,
- # so that build/gyp_chromium can work.
- for nonessential_dir in (NONESSENTIAL_DIRS + TESTDIRS + PRUNEDDIRS):
- dir_path = os.path.join(GetSourceDirectory(), nonessential_dir)
- if (name.startswith(dir_path) and
- os.path.isfile(name) and
- 'gyp' not in name):
- return
-
- tarfile.TarFile.add(self, name, arcname=arcname, recursive=recursive)
-
-
-def main(argv):
- parser = optparse.OptionParser()
- parser.add_option("--basename")
- parser.add_option("--remove-nonessential-files",
- dest="remove_nonessential_files",
- action="store_true", default=False)
- parser.add_option("--test-data", action="store_true")
- # TODO(phajdan.jr): Remove --xz option when it's not needed for compatibility.
- parser.add_option("--xz", action="store_true")
-
- options, args = parser.parse_args(argv)
-
- if len(args) != 1:
- print 'You must provide only one argument: output file name'
- print '(without .tar.xz extension).'
- return 1
-
- if not os.path.exists(GetSourceDirectory()):
- print 'Cannot find the src directory ' + GetSourceDirectory()
- return 1
-
- # These two commands are from src/DEPS; please keep them in sync.
- if subprocess.call(['python', 'build/util/lastchange.py', '-o',
- 'build/util/LASTCHANGE'], cwd=GetSourceDirectory()) != 0:
- print 'Could not run build/util/lastchange.py to update LASTCHANGE.'
- return 1
- if subprocess.call(['python', 'build/util/lastchange.py', '-s',
- 'third_party/WebKit', '-o',
- 'build/util/LASTCHANGE.blink'],
- cwd=GetSourceDirectory()) != 0:
- print 'Could not run build/util/lastchange.py to update LASTCHANGE.blink.'
- return 1
-
- output_fullname = args[0] + '.tar'
- output_basename = options.basename or os.path.basename(args[0])
-
- archive = MyTarFile.open(output_fullname, 'w')
- archive.set_remove_nonessential_files(options.remove_nonessential_files)
- try:
- if options.test_data:
- for directory in TESTDIRS:
- archive.add(os.path.join(GetSourceDirectory(), directory),
- arcname=os.path.join(output_basename, directory))
- else:
- archive.add(GetSourceDirectory(), arcname=output_basename)
- finally:
- archive.close()
-
- if subprocess.call(['xz', '-9', output_fullname]) != 0:
- print 'xz -9 failed!'
- return 1
-
- return 0
-
-
-if __name__ == "__main__":
- sys.exit(main(sys.argv[1:]))
diff --git a/chromium/tools/export_tarball/export_v8_tarball.py b/chromium/tools/export_tarball/export_v8_tarball.py
deleted file mode 100755
index b232c0aee73..00000000000
--- a/chromium/tools/export_tarball/export_v8_tarball.py
+++ /dev/null
@@ -1,135 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""Creates a tarball with V8 sources, but without .svn directories.
-
-This allows easy packaging of V8, synchronized with browser releases.
-
-Example usage:
-
-export_v8_tarball.py /foo/bar
-
-The above will create file /foo/bar/v8-VERSION.tar.bz2 if it doesn't exist.
-"""
-
-import optparse
-import os
-import re
-import subprocess
-import sys
-import tarfile
-
-_V8_MAJOR_VERSION_PATTERN = re.compile(r'#define\s+MAJOR_VERSION\s+(.*)')
-_V8_MINOR_VERSION_PATTERN = re.compile(r'#define\s+MINOR_VERSION\s+(.*)')
-_V8_BUILD_NUMBER_PATTERN = re.compile(r'#define\s+BUILD_NUMBER\s+(.*)')
-_V8_PATCH_LEVEL_PATTERN = re.compile(r'#define\s+PATCH_LEVEL\s+(.*)')
-
-_V8_PATTERNS = [
- _V8_MAJOR_VERSION_PATTERN,
- _V8_MINOR_VERSION_PATTERN,
- _V8_BUILD_NUMBER_PATTERN,
- _V8_PATCH_LEVEL_PATTERN]
-
-_NONESSENTIAL_DIRS = (
- 'third_party/icu',
-)
-
-
-def GetV8Version(v8_directory):
- """
- Returns version number as string based on the string
- contents of version.cc file.
- """
- with open(os.path.join(v8_directory, 'src', 'version.cc')) as version_file:
- version_contents = version_file.read()
-
- version_components = []
- for pattern in _V8_PATTERNS:
- version_components.append(pattern.search(version_contents).group(1).strip())
-
- if version_components[len(version_components) - 1] == '0':
- version_components.pop()
-
- return '.'.join(version_components)
-
-
-def GetSourceDirectory():
- return os.path.realpath(
- os.path.join(os.path.dirname(__file__), '..', '..', '..', 'src'))
-
-
-def GetV8Directory():
- return os.path.join(GetSourceDirectory(), 'v8')
-
-
-# Workaround lack of the exclude parameter in add method in python-2.4.
-# TODO(phajdan.jr): remove the workaround when it's not needed on the bot.
-class MyTarFile(tarfile.TarFile):
- def set_remove_nonessential_files(self, remove):
- self.__remove_nonessential_files = remove
-
- def add(self, name, arcname=None, recursive=True, exclude=None, filter=None):
- head, tail = os.path.split(name)
- if tail in ('.svn', '.git'):
- return
-
- if self.__remove_nonessential_files:
- # Remove contents of non-essential directories, but preserve gyp files,
- # so that build/gyp_chromium can work.
- for nonessential_dir in _NONESSENTIAL_DIRS:
- dir_path = os.path.join(GetV8Directory(), nonessential_dir)
- if (name.startswith(dir_path) and
- os.path.isfile(name) and
- 'gyp' not in name):
- return
-
- tarfile.TarFile.add(self, name, arcname=arcname, recursive=recursive)
-
-
-def main(argv):
- parser = optparse.OptionParser()
- options, args = parser.parse_args(argv)
-
- if len(args) != 1:
- print 'You must provide only one argument: output file directory'
- return 1
-
- v8_directory = GetV8Directory()
- if not os.path.exists(v8_directory):
- print 'Cannot find the v8 directory.'
- return 1
-
- v8_version = GetV8Version(v8_directory)
- print 'Packaging V8 version %s...' % v8_version
-
- subprocess.check_call(["make", "dependencies"], cwd=v8_directory)
-
- output_basename = 'v8-%s' % v8_version
-
- # Package full tarball.
- output_fullname = os.path.join(args[0], output_basename + '.tar.bz2')
- if not os.path.exists(output_fullname):
- archive = MyTarFile.open(output_fullname, 'w:bz2')
- archive.set_remove_nonessential_files(False)
- try:
- archive.add(v8_directory, arcname=output_basename)
- finally:
- archive.close()
-
- # Package lite tarball.
- output_fullname = os.path.join(args[0], output_basename + '-lite.tar.bz2')
- if not os.path.exists(output_fullname):
- archive = MyTarFile.open(output_fullname, 'w:bz2')
- archive.set_remove_nonessential_files(True)
- try:
- archive.add(v8_directory, arcname=output_basename)
- finally:
- archive.close()
-
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main(sys.argv[1:]))
diff --git a/chromium/tools/find_depot_tools.py b/chromium/tools/find_depot_tools.py
deleted file mode 100644
index 0fa151b162c..00000000000
--- a/chromium/tools/find_depot_tools.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright (c) 2011 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.
-"""Small utility function to find depot_tools and add it to the python path.
-
-Will throw an ImportError exception if depot_tools can't be found since it
-imports breakpad.
-"""
-
-import os
-import sys
-
-def add_depot_tools_to_path():
- """Search for depot_tools and add it to sys.path."""
- # First look if depot_tools is already in PYTHONPATH.
- for i in sys.path:
- if i.rstrip(os.sep).endswith('depot_tools'):
- return i
- # Then look if depot_tools is in PATH, common case.
- for i in os.environ['PATH'].split(os.pathsep):
- if i.rstrip(os.sep).endswith('depot_tools'):
- sys.path.append(i.rstrip(os.sep))
- return i
- # Rare case, it's not even in PATH, look upward up to root.
- root_dir = os.path.dirname(os.path.abspath(__file__))
- previous_dir = os.path.abspath(__file__)
- while root_dir and root_dir != previous_dir:
- if os.path.isfile(os.path.join(root_dir, 'depot_tools', 'breakpad.py')):
- i = os.path.join(root_dir, 'depot_tools')
- sys.path.append(i)
- return i
- previous_dir = root_dir
- root_dir = os.path.dirname(root_dir)
- print >> sys.stderr, 'Failed to find depot_tools'
- return None
-
-add_depot_tools_to_path()
-
-# pylint: disable=W0611
-import breakpad
diff --git a/chromium/tools/find_runtime_symbols/OWNERS b/chromium/tools/find_runtime_symbols/OWNERS
deleted file mode 100644
index aeea00ec3e0..00000000000
--- a/chromium/tools/find_runtime_symbols/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-dmikurube@chromium.org
diff --git a/chromium/tools/find_runtime_symbols/PRESUBMIT.py b/chromium/tools/find_runtime_symbols/PRESUBMIT.py
deleted file mode 100644
index 8d6889ce3f9..00000000000
--- a/chromium/tools/find_runtime_symbols/PRESUBMIT.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# Copyright (c) 2012 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.
-
-"""Top-level presubmit script for find_runtime_symbols.
-
-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for
-details on the presubmit API built into gcl.
-"""
-
-
-def CommonChecks(input_api, output_api):
- import sys
- def join(*args):
- return input_api.os_path.join(input_api.PresubmitLocalPath(), *args)
-
- output = []
- sys_path_backup = sys.path
- try:
- sys.path = [
- join('..', 'find_runtime_symbols'),
- ] + sys.path
- output.extend(input_api.canned_checks.RunPylint(input_api, output_api))
- finally:
- sys.path = sys_path_backup
-
- output.extend(
- input_api.canned_checks.RunUnitTestsInDirectory(
- input_api, output_api,
- input_api.os_path.join(input_api.PresubmitLocalPath(), 'tests'),
- whitelist=[r'.+_test\.py$']))
-
- if input_api.is_committing:
- output.extend(input_api.canned_checks.PanProjectChecks(input_api,
- output_api,
- owners_check=False))
- return output
-
-
-def CheckChangeOnUpload(input_api, output_api):
- return CommonChecks(input_api, output_api)
-
-
-def CheckChangeOnCommit(input_api, output_api):
- return CommonChecks(input_api, output_api)
diff --git a/chromium/tools/find_runtime_symbols/README b/chromium/tools/find_runtime_symbols/README
deleted file mode 100644
index ee5c2ac88ca..00000000000
--- a/chromium/tools/find_runtime_symbols/README
+++ /dev/null
@@ -1,24 +0,0 @@
-This script maps runtime addresses to symbol names. It is robust over
-Address Space Layout Randomization (ASLR) since it uses runtime addresses with
-runtime mapping information (/proc/.../maps).
-Like 'pprof --symbols' in gperftools <http://code.google.com/p/gperftools/>.
-
-
-Step 1: Prepare symbol information.
-
-It is required to collect symbol information before mapping runtime addresses
-to symbol names.
-
-./prepare_symbol_info.py /path/to/maps [/another/path/to/symbol_info_dir]
-
-The required 'maps' file is /proc/.../maps of the process at runtime.
-
-
-Step 2: Find symbols.
-
-./find_runtime_symbols.py /path/to/symbol_info_dir < addresses.txt
-
-'symbol_info_dir' is the result of the Step 1.
-The stdin should be a list of hex addresses to map, one per line.
-
-The results will be printed to stdout like 'pprof --symbols'.
diff --git a/chromium/tools/find_runtime_symbols/find_runtime_symbols.py b/chromium/tools/find_runtime_symbols/find_runtime_symbols.py
deleted file mode 100755
index e96db4f95a7..00000000000
--- a/chromium/tools/find_runtime_symbols/find_runtime_symbols.py
+++ /dev/null
@@ -1,214 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-"""Find symbols in a binary corresponding to given runtime virtual addresses.
-
-Note that source file names are treated as symbols in this script while they
-are actually not.
-"""
-
-import json
-import logging
-import os
-import sys
-
-from static_symbols import StaticSymbolsInFile
-
-
-_BASE_PATH = os.path.dirname(os.path.abspath(__file__))
-_TOOLS_LINUX_PATH = os.path.join(_BASE_PATH, os.pardir, 'linux')
-sys.path.insert(0, _TOOLS_LINUX_PATH)
-
-
-from procfs import ProcMaps # pylint: disable=F0401
-
-try:
- from collections import OrderedDict # pylint: disable=E0611
-except ImportError:
- _SIMPLEJSON_PATH = os.path.join(_BASE_PATH, os.pardir, os.pardir,
- 'third_party')
- sys.path.insert(0, _SIMPLEJSON_PATH)
- from simplejson import OrderedDict
-
-
-FUNCTION_SYMBOLS = 0
-SOURCEFILE_SYMBOLS = 1
-TYPEINFO_SYMBOLS = 2
-
-_MAPS_FILENAME = 'maps'
-_FILES_FILENAME = 'files.json'
-
-
-class RuntimeSymbolsInProcess(object):
- def __init__(self):
- self._maps = None
- self._static_symbols_in_filse = {}
-
- def find_procedure(self, runtime_address):
- for vma in self._maps.iter(ProcMaps.executable):
- if vma.begin <= runtime_address < vma.end:
- static_symbols = self._static_symbols_in_filse.get(vma.name)
- if static_symbols:
- return static_symbols.find_procedure_by_runtime_address(
- runtime_address, vma)
- else:
- return None
- return None
-
- def find_sourcefile(self, runtime_address):
- for vma in self._maps.iter(ProcMaps.executable):
- if vma.begin <= runtime_address < vma.end:
- static_symbols = self._static_symbols_in_filse.get(vma.name)
- if static_symbols:
- return static_symbols.find_sourcefile_by_runtime_address(
- runtime_address, vma)
- else:
- return None
- return None
-
- def find_typeinfo(self, runtime_address):
- for vma in self._maps.iter(ProcMaps.constants):
- if vma.begin <= runtime_address < vma.end:
- static_symbols = self._static_symbols_in_filse.get(vma.name)
- if static_symbols:
- return static_symbols.find_typeinfo_by_runtime_address(
- runtime_address, vma)
- else:
- return None
- return None
-
- @staticmethod
- def load(prepared_data_dir):
- symbols_in_process = RuntimeSymbolsInProcess()
-
- with open(os.path.join(prepared_data_dir, _MAPS_FILENAME), mode='r') as f:
- symbols_in_process._maps = ProcMaps.load_file(f)
- with open(os.path.join(prepared_data_dir, _FILES_FILENAME), mode='r') as f:
- files = json.load(f)
-
- # pylint: disable=W0212
- for vma in symbols_in_process._maps.iter(ProcMaps.executable_and_constants):
- file_entry = files.get(vma.name)
- if not file_entry:
- continue
-
- static_symbols = StaticSymbolsInFile(vma.name)
-
- nm_entry = file_entry.get('nm')
- if nm_entry and nm_entry['format'] == 'bsd':
- with open(os.path.join(prepared_data_dir, nm_entry['file']), 'r') as f:
- static_symbols.load_nm_bsd(f, nm_entry['mangled'])
-
- readelf_entry = file_entry.get('readelf-e')
- if readelf_entry:
- with open(os.path.join(prepared_data_dir, readelf_entry['file']),
- 'r') as f:
- static_symbols.load_readelf_ew(f)
-
- decodedline_file_entry = file_entry.get('readelf-debug-decodedline-file')
- if decodedline_file_entry:
- with open(os.path.join(prepared_data_dir,
- decodedline_file_entry['file']), 'r') as f:
- static_symbols.load_readelf_debug_decodedline_file(f)
-
- symbols_in_process._static_symbols_in_filse[vma.name] = static_symbols
-
- return symbols_in_process
-
-
-def _find_runtime_function_symbols(symbols_in_process, addresses):
- result = OrderedDict()
- for address in addresses:
- if isinstance(address, basestring):
- address = int(address, 16)
- found = symbols_in_process.find_procedure(address)
- if found:
- result[address] = found.name
- else:
- result[address] = '0x%016x' % address
- return result
-
-
-def _find_runtime_sourcefile_symbols(symbols_in_process, addresses):
- result = OrderedDict()
- for address in addresses:
- if isinstance(address, basestring):
- address = int(address, 16)
- found = symbols_in_process.find_sourcefile(address)
- if found:
- result[address] = found
- else:
- result[address] = ''
- return result
-
-
-def _find_runtime_typeinfo_symbols(symbols_in_process, addresses):
- result = OrderedDict()
- for address in addresses:
- if isinstance(address, basestring):
- address = int(address, 16)
- if address == 0:
- result[address] = 'no typeinfo'
- else:
- found = symbols_in_process.find_typeinfo(address)
- if found:
- if found.startswith('typeinfo for '):
- result[address] = found[13:]
- else:
- result[address] = found
- else:
- result[address] = '0x%016x' % address
- return result
-
-
-_INTERNAL_FINDERS = {
- FUNCTION_SYMBOLS: _find_runtime_function_symbols,
- SOURCEFILE_SYMBOLS: _find_runtime_sourcefile_symbols,
- TYPEINFO_SYMBOLS: _find_runtime_typeinfo_symbols,
- }
-
-
-def find_runtime_symbols(symbol_type, symbols_in_process, addresses):
- return _INTERNAL_FINDERS[symbol_type](symbols_in_process, addresses)
-
-
-def main():
- # FIX: Accept only .pre data
- if len(sys.argv) < 2:
- sys.stderr.write("""Usage:
-%s /path/to/prepared_data_dir/ < addresses.txt
-""" % sys.argv[0])
- return 1
-
- log = logging.getLogger('find_runtime_symbols')
- log.setLevel(logging.WARN)
- handler = logging.StreamHandler()
- handler.setLevel(logging.WARN)
- formatter = logging.Formatter('%(message)s')
- handler.setFormatter(formatter)
- log.addHandler(handler)
-
- prepared_data_dir = sys.argv[1]
- if not os.path.exists(prepared_data_dir):
- log.warn("Nothing found: %s" % prepared_data_dir)
- return 1
- if not os.path.isdir(prepared_data_dir):
- log.warn("Not a directory: %s" % prepared_data_dir)
- return 1
-
- symbols_in_process = RuntimeSymbolsInProcess.load(prepared_data_dir)
- symbols_dict = find_runtime_symbols(FUNCTION_SYMBOLS,
- symbols_in_process,
- sys.stdin)
- for address, symbol in symbols_dict:
- if symbol:
- print '%016x %s' % (address, symbol)
- else:
- print '%016x' % address
-
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/find_runtime_symbols/prepare_symbol_info.py b/chromium/tools/find_runtime_symbols/prepare_symbol_info.py
deleted file mode 100755
index 9bce5455c82..00000000000
--- a/chromium/tools/find_runtime_symbols/prepare_symbol_info.py
+++ /dev/null
@@ -1,231 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-import hashlib
-import json
-import logging
-import os
-import re
-import shutil
-import subprocess
-import sys
-import tempfile
-
-
-BASE_PATH = os.path.dirname(os.path.abspath(__file__))
-REDUCE_DEBUGLINE_PATH = os.path.join(BASE_PATH, 'reduce_debugline.py')
-_TOOLS_LINUX_PATH = os.path.join(BASE_PATH, os.pardir, 'linux')
-sys.path.insert(0, _TOOLS_LINUX_PATH)
-
-
-from procfs import ProcMaps # pylint: disable=F0401
-
-
-LOGGER = logging.getLogger('prepare_symbol_info')
-
-
-def _dump_command_result(command, output_dir_path, basename, suffix):
- handle_out, filename_out = tempfile.mkstemp(
- suffix=suffix, prefix=basename + '.', dir=output_dir_path)
- handle_err, filename_err = tempfile.mkstemp(
- suffix=suffix + '.err', prefix=basename + '.', dir=output_dir_path)
- error = False
- try:
- subprocess.check_call(
- command, stdout=handle_out, stderr=handle_err, shell=True)
- except (OSError, subprocess.CalledProcessError):
- error = True
- finally:
- os.close(handle_err)
- os.close(handle_out)
-
- if os.path.exists(filename_err):
- if LOGGER.getEffectiveLevel() <= logging.DEBUG:
- with open(filename_err, 'r') as f:
- for line in f:
- LOGGER.debug(line.rstrip())
- os.remove(filename_err)
-
- if os.path.exists(filename_out) and (
- os.path.getsize(filename_out) == 0 or error):
- os.remove(filename_out)
- return None
-
- if not os.path.exists(filename_out):
- return None
-
- return filename_out
-
-
-def prepare_symbol_info(maps_path,
- output_dir_path=None,
- alternative_dirs=None,
- use_tempdir=False,
- use_source_file_name=False):
- """Prepares (collects) symbol information files for find_runtime_symbols.
-
- 1) If |output_dir_path| is specified, it tries collecting symbol information
- files in the given directory |output_dir_path|.
- 1-a) If |output_dir_path| doesn't exist, create the directory and use it.
- 1-b) If |output_dir_path| is an empty directory, use it.
- 1-c) If |output_dir_path| is a directory which has 'files.json', assumes that
- files are already collected and just ignores it.
- 1-d) Otherwise, depends on |use_tempdir|.
-
- 2) If |output_dir_path| is not specified, it tries to create a new directory
- depending on 'maps_path'.
-
- If it cannot create a new directory, creates a temporary directory depending
- on |use_tempdir|. If |use_tempdir| is False, returns None.
-
- Args:
- maps_path: A path to a file which contains '/proc/<pid>/maps'.
- alternative_dirs: A mapping from a directory '/path/on/target' where the
- target process runs to a directory '/path/on/host' where the script
- reads the binary. Considered to be used for Android binaries.
- output_dir_path: A path to a directory where files are prepared.
- use_tempdir: If True, it creates a temporary directory when it cannot
- create a new directory.
- use_source_file_name: If True, it adds reduced result of 'readelf -wL'
- to find source file names.
-
- Returns:
- A pair of a path to the prepared directory and a boolean representing
- if it created a temporary directory or not.
- """
- alternative_dirs = alternative_dirs or {}
- if not output_dir_path:
- matched = re.match('^(.*)\.maps$', os.path.basename(maps_path))
- if matched:
- output_dir_path = matched.group(1) + '.pre'
- if not output_dir_path:
- matched = re.match('^/proc/(.*)/maps$', os.path.realpath(maps_path))
- if matched:
- output_dir_path = matched.group(1) + '.pre'
- if not output_dir_path:
- output_dir_path = os.path.basename(maps_path) + '.pre'
- # TODO(dmikurube): Find another candidate for output_dir_path.
-
- used_tempdir = False
- LOGGER.info('Data for profiling will be collected in "%s".' % output_dir_path)
- if os.path.exists(output_dir_path):
- if os.path.isdir(output_dir_path) and not os.listdir(output_dir_path):
- LOGGER.warn('Using an empty existing directory "%s".' % output_dir_path)
- else:
- LOGGER.warn('A file or a directory exists at "%s".' % output_dir_path)
- if os.path.exists(os.path.join(output_dir_path, 'files.json')):
- LOGGER.warn('Using the existing directory "%s".' % output_dir_path)
- return output_dir_path, used_tempdir
- else:
- if use_tempdir:
- output_dir_path = tempfile.mkdtemp()
- used_tempdir = True
- LOGGER.warn('Using a temporary directory "%s".' % output_dir_path)
- else:
- LOGGER.warn('The directory "%s" is not available.' % output_dir_path)
- return None, used_tempdir
- else:
- LOGGER.info('Creating a new directory "%s".' % output_dir_path)
- try:
- os.mkdir(output_dir_path)
- except OSError:
- LOGGER.warn('A directory "%s" cannot be created.' % output_dir_path)
- if use_tempdir:
- output_dir_path = tempfile.mkdtemp()
- used_tempdir = True
- LOGGER.warn('Using a temporary directory "%s".' % output_dir_path)
- else:
- LOGGER.warn('The directory "%s" is not available.' % output_dir_path)
- return None, used_tempdir
-
- shutil.copyfile(maps_path, os.path.join(output_dir_path, 'maps'))
-
- with open(maps_path, mode='r') as f:
- maps = ProcMaps.load_file(f)
-
- LOGGER.debug('Listing up symbols.')
- files = {}
- for entry in maps.iter(ProcMaps.executable):
- LOGGER.debug(' %016x-%016x +%06x %s' % (
- entry.begin, entry.end, entry.offset, entry.name))
- binary_path = entry.name
- for target_path, host_path in alternative_dirs.iteritems():
- if entry.name.startswith(target_path):
- binary_path = entry.name.replace(target_path, host_path, 1)
- nm_filename = _dump_command_result(
- 'nm -n --format bsd %s | c++filt' % binary_path,
- output_dir_path, os.path.basename(binary_path), '.nm')
- if not nm_filename:
- continue
- readelf_e_filename = _dump_command_result(
- 'readelf -eW %s' % binary_path,
- output_dir_path, os.path.basename(binary_path), '.readelf-e')
- if not readelf_e_filename:
- continue
- readelf_debug_decodedline_file = None
- if use_source_file_name:
- readelf_debug_decodedline_file = _dump_command_result(
- 'readelf -wL %s | %s' % (binary_path, REDUCE_DEBUGLINE_PATH),
- output_dir_path, os.path.basename(binary_path), '.readelf-wL')
-
- files[entry.name] = {}
- files[entry.name]['nm'] = {
- 'file': os.path.basename(nm_filename),
- 'format': 'bsd',
- 'mangled': False}
- files[entry.name]['readelf-e'] = {
- 'file': os.path.basename(readelf_e_filename)}
- if readelf_debug_decodedline_file:
- files[entry.name]['readelf-debug-decodedline-file'] = {
- 'file': os.path.basename(readelf_debug_decodedline_file)}
-
- files[entry.name]['size'] = os.stat(binary_path).st_size
-
- with open(binary_path, 'rb') as entry_f:
- md5 = hashlib.md5()
- sha1 = hashlib.sha1()
- chunk = entry_f.read(1024 * 1024)
- while chunk:
- md5.update(chunk)
- sha1.update(chunk)
- chunk = entry_f.read(1024 * 1024)
- files[entry.name]['sha1'] = sha1.hexdigest()
- files[entry.name]['md5'] = md5.hexdigest()
-
- with open(os.path.join(output_dir_path, 'files.json'), 'w') as f:
- json.dump(files, f, indent=2, sort_keys=True)
-
- LOGGER.info('Collected symbol information at "%s".' % output_dir_path)
- return output_dir_path, used_tempdir
-
-
-def main():
- if not sys.platform.startswith('linux'):
- sys.stderr.write('This script work only on Linux.')
- return 1
-
- LOGGER.setLevel(logging.DEBUG)
- handler = logging.StreamHandler()
- handler.setLevel(logging.INFO)
- formatter = logging.Formatter('%(message)s')
- handler.setFormatter(formatter)
- LOGGER.addHandler(handler)
-
- # TODO(dmikurube): Specify |alternative_dirs| from command line.
- if len(sys.argv) < 2:
- sys.stderr.write("""Usage:
-%s /path/to/maps [/path/to/output_data_dir/]
-""" % sys.argv[0])
- return 1
- elif len(sys.argv) == 2:
- result, _ = prepare_symbol_info(sys.argv[1])
- else:
- result, _ = prepare_symbol_info(sys.argv[1], sys.argv[2])
-
- return not result
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/find_runtime_symbols/reduce_debugline.py b/chromium/tools/find_runtime_symbols/reduce_debugline.py
deleted file mode 100755
index 75c8c8578d7..00000000000
--- a/chromium/tools/find_runtime_symbols/reduce_debugline.py
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 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.
-"""Reduces result of 'readelf -wL' to just a list of starting addresses.
-
-It lists up all addresses where the corresponding source files change. The
-list is sorted in ascending order. See tests/reduce_debugline_test.py for
-examples.
-
-This script assumes that the result of 'readelf -wL' ends with an empty line.
-
-Note: the option '-wL' has the same meaning with '--debug-dump=decodedline'.
-"""
-
-import re
-import sys
-
-
-_FILENAME_PATTERN = re.compile('(CU: |)(.+)\:')
-
-
-def reduce_decoded_debugline(input_file):
- filename = ''
- starting_dict = {}
- started = False
-
- for line in input_file:
- line = line.strip()
- unpacked = line.split(None, 2)
-
- if len(unpacked) == 3 and unpacked[2].startswith('0x'):
- if not started and filename:
- started = True
- starting_dict[int(unpacked[2], 16)] = filename
- else:
- started = False
- if line.endswith(':'):
- matched = _FILENAME_PATTERN.match(line)
- if matched:
- filename = matched.group(2)
-
- starting_list = []
- prev_filename = ''
- for address in sorted(starting_dict):
- curr_filename = starting_dict[address]
- if prev_filename != curr_filename:
- starting_list.append((address, starting_dict[address]))
- prev_filename = curr_filename
- return starting_list
-
-
-def main():
- if len(sys.argv) != 1:
- print >> sys.stderr, 'Unsupported arguments'
- return 1
-
- starting_list = reduce_decoded_debugline(sys.stdin)
- bits64 = starting_list[-1][0] > 0xffffffff
- for address, filename in starting_list:
- if bits64:
- print '%016x %s' % (address, filename)
- else:
- print '%08x %s' % (address, filename)
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/find_runtime_symbols/static_symbols.py b/chromium/tools/find_runtime_symbols/static_symbols.py
deleted file mode 100644
index cd57bacd99a..00000000000
--- a/chromium/tools/find_runtime_symbols/static_symbols.py
+++ /dev/null
@@ -1,277 +0,0 @@
-# Copyright (c) 2012 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.
-
-import bisect
-import re
-
-
-_ARGUMENT_TYPE_PATTERN = re.compile('\([^()]*\)(\s*const)?')
-_TEMPLATE_ARGUMENT_PATTERN = re.compile('<[^<>]*>')
-_LEADING_TYPE_PATTERN = re.compile('^.*\s+(\w+::)')
-_READELF_SECTION_HEADER_PATTER = re.compile(
- '^\s*\[\s*(Nr|\d+)\]\s+(|\S+)\s+([A-Z_]+)\s+([0-9a-f]+)\s+'
- '([0-9a-f]+)\s+([0-9a-f]+)\s+([0-9]+)\s+([WAXMSILGxOop]*)\s+'
- '([0-9]+)\s+([0-9]+)\s+([0-9]+)')
-
-
-class ParsingException(Exception):
- def __str__(self):
- return repr(self.args[0])
-
-
-class AddressMapping(object):
- def __init__(self):
- self._symbol_map = {}
-
- def append(self, start, entry):
- self._symbol_map[start] = entry
-
- def find(self, address):
- return self._symbol_map.get(address)
-
-
-class RangeAddressMapping(AddressMapping):
- def __init__(self):
- super(RangeAddressMapping, self).__init__()
- self._sorted_start_list = []
- self._is_sorted = True
-
- def append(self, start, entry):
- if self._sorted_start_list:
- if self._sorted_start_list[-1] > start:
- self._is_sorted = False
- elif self._sorted_start_list[-1] == start:
- return
- self._sorted_start_list.append(start)
- self._symbol_map[start] = entry
-
- def find(self, address):
- if not self._sorted_start_list:
- return None
- if not self._is_sorted:
- self._sorted_start_list.sort()
- self._is_sorted = True
- found_index = bisect.bisect_left(self._sorted_start_list, address)
- found_start_address = self._sorted_start_list[found_index - 1]
- return self._symbol_map[found_start_address]
-
-
-class Procedure(object):
- """A class for a procedure symbol and an address range for the symbol."""
-
- def __init__(self, start, end, name):
- self.start = start
- self.end = end
- self.name = name
-
- def __eq__(self, other):
- return (self.start == other.start and
- self.end == other.end and
- self.name == other.name)
-
- def __ne__(self, other):
- return not self.__eq__(other)
-
- def __str__(self):
- return '%x-%x: %s' % (self.start, self.end, self.name)
-
-
-class ElfSection(object):
- """A class for an elf section header."""
-
- def __init__(
- self, number, name, stype, address, offset, size, es, flg, lk, inf, al):
- self.number = number
- self.name = name
- self.stype = stype
- self.address = address
- self.offset = offset
- self.size = size
- self.es = es
- self.flg = flg
- self.lk = lk
- self.inf = inf
- self.al = al
-
- def __eq__(self, other):
- return (self.number == other.number and
- self.name == other.name and
- self.stype == other.stype and
- self.address == other.address and
- self.offset == other.offset and
- self.size == other.size and
- self.es == other.es and
- self.flg == other.flg and
- self.lk == other.lk and
- self.inf == other.inf and
- self.al == other.al)
-
- def __ne__(self, other):
- return not self.__eq__(other)
-
- def __str__(self):
- return '%x+%x(%x) %s' % (self.address, self.size, self.offset, self.name)
-
-
-class StaticSymbolsInFile(object):
- """Represents static symbol information in a binary file."""
-
- def __init__(self, my_name):
- self.my_name = my_name
- self._elf_sections = []
- self._procedures = RangeAddressMapping()
- self._sourcefiles = RangeAddressMapping()
- self._typeinfos = AddressMapping()
-
- def _append_elf_section(self, elf_section):
- self._elf_sections.append(elf_section)
-
- def _append_procedure(self, start, procedure):
- self._procedures.append(start, procedure)
-
- def _append_sourcefile(self, start, sourcefile):
- self._sourcefiles.append(start, sourcefile)
-
- def _append_typeinfo(self, start, typeinfo):
- self._typeinfos.append(start, typeinfo)
-
- def _find_symbol_by_runtime_address(self, address, vma, target):
- if not (vma.begin <= address < vma.end):
- return None
-
- if vma.name != self.my_name:
- return None
-
- file_offset = address - (vma.begin - vma.offset)
- elf_address = None
- for section in self._elf_sections:
- if section.offset <= file_offset < (section.offset + section.size):
- elf_address = section.address + file_offset - section.offset
- if not elf_address:
- return None
-
- return target.find(elf_address)
-
- def find_procedure_by_runtime_address(self, address, vma):
- return self._find_symbol_by_runtime_address(address, vma, self._procedures)
-
- def find_sourcefile_by_runtime_address(self, address, vma):
- return self._find_symbol_by_runtime_address(address, vma, self._sourcefiles)
-
- def find_typeinfo_by_runtime_address(self, address, vma):
- return self._find_symbol_by_runtime_address(address, vma, self._typeinfos)
-
- def load_readelf_ew(self, f):
- found_header = False
- for line in f:
- if line.rstrip() == 'Section Headers:':
- found_header = True
- break
- if not found_header:
- return None
-
- for line in f:
- line = line.rstrip()
- matched = _READELF_SECTION_HEADER_PATTER.match(line)
- if matched:
- self._append_elf_section(ElfSection(
- int(matched.group(1), 10), # number
- matched.group(2), # name
- matched.group(3), # stype
- int(matched.group(4), 16), # address
- int(matched.group(5), 16), # offset
- int(matched.group(6), 16), # size
- matched.group(7), # es
- matched.group(8), # flg
- matched.group(9), # lk
- matched.group(10), # inf
- matched.group(11) # al
- ))
- else:
- if line in ('Key to Flags:', 'Program Headers:'):
- break
-
- def load_readelf_debug_decodedline_file(self, input_file):
- for line in input_file:
- splitted = line.rstrip().split(None, 2)
- self._append_sourcefile(int(splitted[0], 16), splitted[1])
-
- @staticmethod
- def _parse_nm_bsd_line(line):
- if line[8] == ' ':
- return line[0:8], line[9], line[11:]
- elif line[16] == ' ':
- return line[0:16], line[17], line[19:]
- raise ParsingException('Invalid nm output.')
-
- @staticmethod
- def _get_short_function_name(function):
- while True:
- function, number = _ARGUMENT_TYPE_PATTERN.subn('', function)
- if not number:
- break
- while True:
- function, number = _TEMPLATE_ARGUMENT_PATTERN.subn('', function)
- if not number:
- break
- return _LEADING_TYPE_PATTERN.sub('\g<1>', function)
-
- def load_nm_bsd(self, f, mangled=False):
- last_start = 0
- routine = ''
-
- for line in f:
- line = line.rstrip()
- sym_value, sym_type, sym_name = self._parse_nm_bsd_line(line)
-
- if sym_value[0] == ' ':
- continue
-
- start_val = int(sym_value, 16)
-
- if (sym_type in ('r', 'R', 'D', 'U', 'd', 'V') and
- (not mangled and sym_name.startswith('typeinfo'))):
- self._append_typeinfo(start_val, sym_name)
-
- # It's possible for two symbols to share the same address, if
- # one is a zero-length variable (like __start_google_malloc) or
- # one symbol is a weak alias to another (like __libc_malloc).
- # In such cases, we want to ignore all values except for the
- # actual symbol, which in nm-speak has type "T". The logic
- # below does this, though it's a bit tricky: what happens when
- # we have a series of lines with the same address, is the first
- # one gets queued up to be processed. However, it won't
- # *actually* be processed until later, when we read a line with
- # a different address. That means that as long as we're reading
- # lines with the same address, we have a chance to replace that
- # item in the queue, which we do whenever we see a 'T' entry --
- # that is, a line with type 'T'. If we never see a 'T' entry,
- # we'll just go ahead and process the first entry (which never
- # got touched in the queue), and ignore the others.
- if start_val == last_start and (sym_type == 't' or sym_type == 'T'):
- # We are the 'T' symbol at this address, replace previous symbol.
- routine = sym_name
- continue
- elif start_val == last_start:
- # We're not the 'T' symbol at this address, so ignore us.
- continue
-
- # Tag this routine with the starting address in case the image
- # has multiple occurrences of this routine. We use a syntax
- # that resembles template paramters that are automatically
- # stripped out by ShortFunctionName()
- sym_name += "<%016x>" % start_val
-
- if not mangled:
- routine = self._get_short_function_name(routine)
- self._append_procedure(
- last_start, Procedure(last_start, start_val, routine))
-
- last_start = start_val
- routine = sym_name
-
- if not mangled:
- routine = self._get_short_function_name(routine)
- self._append_procedure(
- last_start, Procedure(last_start, last_start, routine))
diff --git a/chromium/tools/flakiness/find_flakiness.py b/chromium/tools/flakiness/find_flakiness.py
deleted file mode 100755
index 21629e4a7a6..00000000000
--- a/chromium/tools/flakiness/find_flakiness.py
+++ /dev/null
@@ -1,179 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""Contains two functions that run different test cases and the same test
-case in parallel repeatedly to identify flaky tests.
-"""
-
-
-import os
-import re
-import subprocess
-import time
-
-
-# Defaults for FindShardingFlakiness().
-FF_DATA_SUFFIX = '_flakies'
-FF_SLEEP_INTERVAL = 10.0
-FF_NUM_ITERATIONS = 100
-FF_SUPERVISOR_ARGS = ['-r3', '--random-seed']
-
-# Defaults for FindUnaryFlakiness().
-FF_OUTPUT_SUFFIX = '_purges'
-FF_NUM_PROCS = 20
-FF_NUM_REPEATS = 10
-FF_TIMEOUT = 600
-
-
-def FindShardingFlakiness(test_path, data_path, supervisor_args):
- """Finds flaky test cases by sharding and running a test for the specified
- number of times. The data file is read at the beginning of each run to find
- the last known counts and is overwritten at the end of each run with the new
- counts. There is an optional sleep interval between each run so the script can
- be killed without losing the data, useful for overnight (or weekend!) runs.
- """
-
- failed_tests = {}
- # Read a previously written data file.
- if os.path.exists(data_path):
- data_file = open(data_path, 'r')
- num_runs = int(data_file.readline().split(' ')[0])
- num_passes = int(data_file.readline().split(' ')[0])
- for line in data_file:
- if line:
- split_line = line.split(' -> ')
- failed_tests[split_line[0]] = int(split_line[1])
- data_file.close()
- # No data file found.
- else:
- num_runs = 0
- num_passes = 0
-
- log_lines = False
- args = ['python', '../sharding_supervisor/sharding_supervisor.py']
- args.extend(supervisor_args + [test_path])
- proc = subprocess.Popen(args, stderr=subprocess.PIPE)
-
- # Shard the test and collect failures.
- while True:
- line = proc.stderr.readline()
- if not line:
- if proc.poll() is not None:
- break
- continue
- print line.rstrip()
- if log_lines:
- line = line.rstrip()
- if line in failed_tests:
- failed_tests[line] += 1
- else:
- failed_tests[line] = 1
- elif line.find('FAILED TESTS:') >= 0:
- log_lines = True
- num_runs += 1
- if proc.returncode == 0:
- num_passes += 1
-
- # Write the data file and print results.
- data_file = open(data_path, 'w')
- print '%i runs' % num_runs
- data_file.write('%i runs\n' % num_runs)
- print '%i passes' % num_passes
- data_file.write('%i passes\n' % num_passes)
- for (test, count) in failed_tests.iteritems():
- print '%s -> %i' % (test, count)
- data_file.write('%s -> %i\n' % (test, count))
- data_file.close()
-
-
-def FindUnaryFlakiness(test_path, output_path, num_procs, num_repeats, timeout):
- """Runs all the test cases in a given test in parallel with itself, to get at
- those that hold on to shared resources. The idea is that if a test uses a
- unary resource, then running many instances of this test will purge out some
- of them as failures or timeouts.
- """
-
- test_name_regex = r'((\w+/)?\w+\.\w+(/\d+)?)'
- test_start = re.compile('\[\s+RUN\s+\] ' + test_name_regex)
- test_list = []
-
- # Run the test to discover all the test cases.
- proc = subprocess.Popen([test_path], stdout=subprocess.PIPE)
- while True:
- line = proc.stdout.readline()
- if not line:
- if proc.poll() is not None:
- break
- continue
- print line.rstrip()
- results = test_start.search(line)
- if results:
- test_list.append(results.group(1))
-
- failures = []
- index = 0
- total = len(test_list)
-
- # Run each test case in parallel with itself.
- for test_name in test_list:
- num_fails = 0
- num_terminated = 0
- procs = []
- args = [test_path, '--gtest_filter=' + test_name,
- '--gtest_repeat=%i' % num_repeats]
- while len(procs) < num_procs:
- procs.append(subprocess.Popen(args))
- seconds = 0
- while procs:
- for proc in procs:
- if proc.poll() is not None:
- if proc.returncode != 0:
- ++num_fails
- procs.remove(proc)
- # Timeout exceeded, kill the remaining processes and make a note.
- if seconds > timeout:
- num_fails += len(procs)
- num_terminated = len(procs)
- while procs:
- procs.pop().terminate()
- time.sleep(1.0)
- seconds += 1
- if num_fails:
- line = '%s: %i failed' % (test_name, num_fails)
- if num_terminated:
- line += ' (%i terminated)' % num_terminated
- failures.append(line)
- print '%s (%i / %i): %i failed' % (test_name, index, total, num_fails)
- index += 1
- time.sleep(1.0)
-
- # Print the results and write the data file.
- print failures
- data_file = open(output_path, 'w')
- for line in failures:
- data_file.write(line + '\n')
- data_file.close()
-
-
-def main():
- if not args:
- parser.error('You must specify a path to test!')
- if not os.path.exists(args[0]):
- parser.error('%s does not exist!' % args[0])
-
- data_path = os.path.basename(args[0]) + FF_DATA_SUFFIX
- output_path = os.path.basename(args[0]) + FF_OUTPUT_SUFFIX
-
- for i in range(FF_NUM_ITERATIONS):
- FindShardingFlakiness(args[0], data_path, FF_SUPERVISOR_ARGS)
- print 'That was just iteration %i of %i.' % (i + 1, FF_NUM_ITERATIONS)
- time.sleep(FF_SLEEP_INTERVAL)
-
- FindUnaryFlakiness(
- args[0], output_path, FF_NUM_PROCS, FF_NUM_REPEATS, FF_TIMEOUT)
-
-
-if __name__ == '__main__':
- main()
diff --git a/chromium/tools/gdb/gdb_chrome.py b/chromium/tools/gdb/gdb_chrome.py
deleted file mode 100644
index 2c7c3717fb4..00000000000
--- a/chromium/tools/gdb/gdb_chrome.py
+++ /dev/null
@@ -1,297 +0,0 @@
-# Copyright (c) 2011 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.
-
-"""GDB support for Chrome types.
-
-Add this to your gdb by amending your ~/.gdbinit as follows:
- python
- import sys
- sys.path.insert(0, "/path/to/tools/gdb/")
- import gdb_chrome
- end
-
-This module relies on the WebKit gdb module already existing in
-your Python path.
-
-Use
- (gdb) p /r any_variable
-to print |any_variable| without using any printers.
-"""
-
-import datetime
-import gdb
-import gdb.printing
-import webkit
-
-# When debugging this module, set the below variable to True, and then use
-# (gdb) python del sys.modules['gdb_chrome']
-# (gdb) python import gdb_chrome
-# to reload.
-_DEBUGGING = False
-
-
-pp_set = gdb.printing.RegexpCollectionPrettyPrinter("chromium")
-
-
-def typed_ptr(ptr):
- """Prints a pointer along with its exact type.
-
- By default, gdb would print just the address, which takes more
- steps to interpret.
- """
- # Returning this as a cast expression surrounded by parentheses
- # makes it easier to cut+paste inside of gdb.
- return '((%s)%s)' % (ptr.dynamic_type, ptr)
-
-
-class Printer(object):
- def __init__(self, val):
- self.val = val
-
-
-class StringPrinter(Printer):
- def display_hint(self):
- return 'string'
-
-
-class String16Printer(StringPrinter):
- def to_string(self):
- return webkit.ustring_to_string(self.val['_M_dataplus']['_M_p'])
-pp_set.add_printer(
- 'string16',
- '^string16|std::basic_string<(unsigned short|char16|base::char16).*>$',
- String16Printer);
-
-
-class GURLPrinter(StringPrinter):
- def to_string(self):
- return self.val['spec_']
-pp_set.add_printer('GURL', '^GURL$', GURLPrinter)
-
-
-class FilePathPrinter(StringPrinter):
- def to_string(self):
- return self.val['path_']['_M_dataplus']['_M_p']
-pp_set.add_printer('FilePath', '^FilePath$', FilePathPrinter)
-
-
-class SizePrinter(Printer):
- def to_string(self):
- return '%sx%s' % (self.val['width_'], self.val['height_'])
-pp_set.add_printer('gfx::Size', '^gfx::(Size|SizeF|SizeBase<.*>)$', SizePrinter)
-
-
-class PointPrinter(Printer):
- def to_string(self):
- return '%s,%s' % (self.val['x_'], self.val['y_'])
-pp_set.add_printer('gfx::Point', '^gfx::(Point|PointF|PointBase<.*>)$',
- PointPrinter)
-
-
-class RectPrinter(Printer):
- def to_string(self):
- return '%s %s' % (self.val['origin_'], self.val['size_'])
-pp_set.add_printer('gfx::Rect', '^gfx::(Rect|RectF|RectBase<.*>)$',
- RectPrinter)
-
-
-class SmartPtrPrinter(Printer):
- def to_string(self):
- return '%s%s' % (self.typename, typed_ptr(self.ptr()))
-
-
-class ScopedRefPtrPrinter(SmartPtrPrinter):
- typename = 'scoped_refptr'
- def ptr(self):
- return self.val['ptr_']
-pp_set.add_printer('scoped_refptr', '^scoped_refptr<.*>$', ScopedRefPtrPrinter)
-
-
-class LinkedPtrPrinter(SmartPtrPrinter):
- typename = 'linked_ptr'
- def ptr(self):
- return self.val['value_']
-pp_set.add_printer('linked_ptr', '^linked_ptr<.*>$', LinkedPtrPrinter)
-
-
-class WeakPtrPrinter(SmartPtrPrinter):
- typename = 'base::WeakPtr'
- def ptr(self):
- flag = ScopedRefPtrPrinter(self.val['ref_']['flag_']).ptr()
- if flag and flag['is_valid_']:
- return self.val['ptr_']
- return gdb.Value(0).cast(self.val['ptr_'].type)
-pp_set.add_printer('base::WeakPtr', '^base::WeakPtr<.*>$', WeakPtrPrinter)
-
-
-class CallbackPrinter(Printer):
- """Callbacks provide no usable information so reduce the space they take."""
- def to_string(self):
- return '...'
-pp_set.add_printer('base::Callback', '^base::Callback<.*>$', CallbackPrinter)
-
-
-class LocationPrinter(Printer):
- def to_string(self):
- return '%s()@%s:%s' % (self.val['function_name_'].string(),
- self.val['file_name_'].string(),
- self.val['line_number_'])
-pp_set.add_printer('tracked_objects::Location', '^tracked_objects::Location$',
- LocationPrinter)
-
-
-class LockPrinter(Printer):
- def to_string(self):
- try:
- if self.val['owned_by_thread_']:
- return 'Locked by thread %s' % self.val['owning_thread_id_']
- else:
- return 'Unlocked'
- except gdb.error:
- return 'Unknown state'
-pp_set.add_printer('base::Lock', '^base::Lock$', LockPrinter)
-
-
-class TimeDeltaPrinter(object):
- def __init__(self, val):
- self._timedelta = datetime.timedelta(microseconds=int(val['delta_']))
-
- def timedelta(self):
- return self._timedelta
-
- def to_string(self):
- return str(self._timedelta)
-pp_set.add_printer('base::TimeDelta', '^base::TimeDelta$', TimeDeltaPrinter)
-
-
-class TimeTicksPrinter(TimeDeltaPrinter):
- def __init__(self, val):
- self._timedelta = datetime.timedelta(microseconds=int(val['ticks_']))
-pp_set.add_printer('base::TimeTicks', '^base::TimeTicks$', TimeTicksPrinter)
-
-
-class TimePrinter(object):
- def __init__(self, val):
- timet_offset = gdb.parse_and_eval(
- 'base::Time::kTimeTToMicrosecondsOffset')
- self._datetime = (datetime.datetime.fromtimestamp(0) +
- datetime.timedelta(microseconds=
- int(val['us_'] - timet_offset)))
-
- def datetime(self):
- return self._datetime
-
- def to_string(self):
- return str(self._datetime)
-pp_set.add_printer('base::Time', '^base::Time$', TimePrinter)
-
-
-class IpcMessagePrinter(Printer):
- def header(self):
- return self.val['header_'].cast(
- gdb.lookup_type('IPC::Message::Header').pointer())
-
- def to_string(self):
- message_type = self.header()['type']
- return '%s of kind %s line %s' % (
- self.val.dynamic_type,
- (message_type >> 16).cast(gdb.lookup_type('IPCMessageStart')),
- message_type & 0xffff)
-
- def children(self):
- yield ('header_', self.header().dereference())
- yield ('capacity_', self.val['capacity_'])
- yield ('variable_buffer_offset_', self.val['variable_buffer_offset_'])
- for field in self.val.type.fields():
- if field.is_base_class:
- continue
- yield (field.name, self.val[field.name])
-pp_set.add_printer('IPC::Message', '^IPC::Message$', IpcMessagePrinter)
-
-
-class NotificationRegistrarPrinter(Printer):
- def to_string(self):
- try:
- registrations = self.val['registered_']
- vector_finish = registrations['_M_impl']['_M_finish']
- vector_start = registrations['_M_impl']['_M_start']
- if vector_start == vector_finish:
- return 'Not watching notifications'
- if vector_start.dereference().type.sizeof == 0:
- # Incomplete type: b/8242773
- return 'Watching some notifications'
- return ('Watching %s notifications; '
- 'print %s->registered_ for details') % (
- int(vector_finish - vector_start),
- typed_ptr(self.val.address))
- except gdb.error:
- return 'NotificationRegistrar'
-pp_set.add_printer('content::NotificationRegistrar',
- '^content::NotificationRegistrar$',
- NotificationRegistrarPrinter)
-
-
-class SiteInstanceImplPrinter(object):
- def __init__(self, val):
- self.val = val.cast(val.dynamic_type)
-
- def to_string(self):
- return 'SiteInstanceImpl@%s for %s' % (
- self.val.address, self.val['site_'])
-
- def children(self):
- yield ('id_', self.val['id_'])
- yield ('has_site_', self.val['has_site_'])
- if self.val['browsing_instance_']['ptr_']:
- yield ('browsing_instance_', self.val['browsing_instance_']['ptr_'])
- if self.val['process_']:
- yield ('process_', typed_ptr(self.val['process_']))
- if self.val['render_process_host_factory_']:
- yield ('render_process_host_factory_',
- self.val['render_process_host_factory_'])
-pp_set.add_printer('content::SiteInstanceImpl', '^content::SiteInstanceImpl$',
- SiteInstanceImplPrinter)
-
-
-class RenderProcessHostImplPrinter(object):
- def __init__(self, val):
- self.val = val.cast(val.dynamic_type)
-
- def to_string(self):
- pid = ''
- try:
- child_process_launcher_ptr = (
- self.val['child_process_launcher_']['impl_']['data_']['ptr'])
- if child_process_launcher_ptr:
- context = (child_process_launcher_ptr['context_']['ptr_'])
- if context:
- pid = ' PID %s' % str(context['process_']['process_'])
- except gdb.error:
- # The definition of the Context type may not be available.
- # b/8242773
- pass
- return 'RenderProcessHostImpl@%s%s' % (self.val.address, pid)
-
- def children(self):
- yield ('id_', self.val['id_'])
- yield ('render_widget_hosts_',
- self.val['render_widget_hosts_']['data_'])
- yield ('fast_shutdown_started_', self.val['fast_shutdown_started_'])
- yield ('deleting_soon_', self.val['deleting_soon_'])
- yield ('pending_views_', self.val['pending_views_'])
- yield ('visible_widgets_', self.val['visible_widgets_'])
- yield ('backgrounded_', self.val['backgrounded_'])
- yield ('widget_helper_', self.val['widget_helper_'])
- yield ('is_initialized_', self.val['is_initialized_'])
- yield ('browser_context_', typed_ptr(self.val['browser_context_']))
- yield ('sudden_termination_allowed_',
- self.val['sudden_termination_allowed_'])
- yield ('ignore_input_events_', self.val['ignore_input_events_'])
- yield ('is_guest_', self.val['is_guest_'])
-pp_set.add_printer('content::RenderProcessHostImpl',
- '^content::RenderProcessHostImpl$',
- RenderProcessHostImplPrinter)
-
-
-gdb.printing.register_pretty_printer(gdb, pp_set, replace=_DEBUGGING)
diff --git a/chromium/tools/gen_keyboard_overlay_data/gen_keyboard_overlay_data.py b/chromium/tools/gen_keyboard_overlay_data/gen_keyboard_overlay_data.py
deleted file mode 100755
index 8531241f280..00000000000
--- a/chromium/tools/gen_keyboard_overlay_data/gen_keyboard_overlay_data.py
+++ /dev/null
@@ -1,529 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-"""Generate keyboard layout and hotkey data for the keyboard overlay.
-
-This script fetches data from the keyboard layout and hotkey data spreadsheet,
-and output the data depending on the option.
-
- --cc: Rewrites a part of C++ code in
- chrome/browser/chromeos/webui/keyboard_overlay_ui.cc
-
- --grd: Rewrites a part of grd messages in
- chrome/app/generated_resources.grd
-
- --js: Rewrites the entire JavaScript code in
- chrome/browser/resources/keyboard_overlay/keyboard_overlay_data.js
-
-These options can be specified at the same time.
-
-e.g.
-python gen_keyboard_overlay_data.py --cc --grd --js
-
-The output directory of the generated files can be changed with --outdir.
-
-e.g. (This will generate tmp/keyboard_overlay.js)
-python gen_keyboard_overlay_data.py --outdir=tmp --js
-"""
-
-import cStringIO
-import datetime
-import gdata.spreadsheet.service
-import getpass
-import json
-import optparse
-import os
-import re
-import sys
-
-MODIFIER_SHIFT = 1 << 0
-MODIFIER_CTRL = 1 << 1
-MODIFIER_ALT = 1 << 2
-
-KEYBOARD_GLYPH_SPREADSHEET_KEY = '0Ao3KldW9piwEdExLbGR6TmZ2RU9aUjFCMmVxWkVqVmc'
-HOTKEY_SPREADSHEET_KEY = '0AqzoqbAMLyEPdE1RQXdodk1qVkFyTWtQbUxROVM1cXc'
-CC_OUTDIR = 'chrome/browser/ui/webui/chromeos'
-CC_FILENAME = 'keyboard_overlay_ui.cc'
-GRD_OUTDIR = 'chrome/app'
-GRD_FILENAME = 'chromeos_strings.grdp'
-JS_OUTDIR = 'chrome/browser/resources/chromeos'
-JS_FILENAME = 'keyboard_overlay_data.js'
-CC_START = r'IDS_KEYBOARD_OVERLAY_INSTRUCTIONS_HIDE },'
-CC_END = r'};'
-GRD_START = r' <!-- BEGIN GENERATED KEYBOARD OVERLAY STRINGS -->'
-GRD_END = r' <!-- END GENERATED KEYBOARD OVERLAY STRINGS -->'
-
-LABEL_MAP = {
- 'glyph_arrow_down': 'down',
- 'glyph_arrow_left': 'left',
- 'glyph_arrow_right': 'right',
- 'glyph_arrow_up': 'up',
- 'glyph_back': 'back',
- 'glyph_backspace': 'backspace',
- 'glyph_brightness_down': 'bright down',
- 'glyph_brightness_up': 'bright up',
- 'glyph_enter': 'enter',
- 'glyph_forward': 'forward',
- 'glyph_fullscreen': 'full screen',
- # Kana/Eisu key on Japanese keyboard
- 'glyph_ime': u'\u304b\u306a\u0020\u002f\u0020\u82f1\u6570',
- 'glyph_lock': 'lock',
- 'glyph_overview': 'switch window',
- 'glyph_power': 'power',
- 'glyph_right': 'right',
- 'glyph_reload': 'reload',
- 'glyph_search': 'search',
- 'glyph_shift': 'shift',
- 'glyph_tab': 'tab',
- 'glyph_tools': 'tools',
- 'glyph_volume_down': 'vol. down',
- 'glyph_volume_mute': 'mute',
- 'glyph_volume_up': 'vol. up',
-};
-
-INPUT_METHOD_ID_TO_OVERLAY_ID = {
- 'm17n:ar:kbd': 'ar',
- 'm17n:fa:isiri': 'ar',
- 'm17n:hi:itrans': 'hi',
- 'm17n:th:kesmanee': 'th',
- 'm17n:th:pattachote': 'th',
- 'm17n:th:tis820': 'th',
- 'm17n:vi:tcvn': 'vi',
- 'm17n:vi:telex': 'vi',
- 'm17n:vi:viqr': 'vi',
- 'm17n:vi:vni': 'vi',
- 'm17n:zh:cangjie': 'zh_TW',
- 'm17n:zh:quick': 'zh_TW',
- 'mozc': 'en_US',
- 'mozc-chewing': 'zh_TW',
- 'mozc-dv': 'en_US_dvorak',
- 'mozc-hangul': 'ko',
- 'mozc-jp': 'ja',
- 'pinyin': 'zh_CN',
- 'pinyin-dv': 'en_US_dvorak',
- 'xkb:be::fra': 'fr',
- 'xkb:be::ger': 'de',
- 'xkb:be::nld': 'nl',
- 'xkb:bg::bul': 'bg',
- 'xkb:bg:phonetic:bul': 'bg',
- 'xkb:br::por': 'pt_BR',
- 'xkb:ca::fra': 'fr_CA',
- 'xkb:ca:eng:eng': 'ca',
- 'xkb:ch::ger': 'de',
- 'xkb:ch:fr:fra': 'fr',
- 'xkb:cz::cze': 'cs',
- 'xkb:de::ger': 'de',
- 'xkb:de:neo:ger': 'de_neo',
- 'xkb:dk::dan': 'da',
- 'xkb:ee::est': 'et',
- 'xkb:es::spa': 'es',
- 'xkb:es:cat:cat': 'ca',
- 'xkb:fi::fin': 'fi',
- 'xkb:fr::fra': 'fr',
- 'xkb:gb:dvorak:eng': 'en_GB_dvorak',
- 'xkb:gb:extd:eng': 'en_GB',
- 'xkb:gr::gre': 'el',
- 'xkb:hr::scr': 'hr',
- 'xkb:hu::hun': 'hu',
- 'xkb:il::heb': 'iw',
- 'xkb:it::ita': 'it',
- 'xkb:jp::jpn': 'ja',
- 'xkb:kr:kr104:kor': 'ko',
- 'xkb:latam::spa': 'es_419',
- 'xkb:lt::lit': 'lt',
- 'xkb:lv:apostrophe:lav': 'lv',
- 'xkb:no::nob': 'no',
- 'xkb:pl::pol': 'pl',
- 'xkb:pt::por': 'pt_PT',
- 'xkb:ro::rum': 'ro',
- 'xkb:rs::srp': 'sr',
- 'xkb:ru::rus': 'ru',
- 'xkb:ru:phonetic:rus': 'ru',
- 'xkb:se::swe': 'sv',
- 'xkb:si::slv': 'sl',
- 'xkb:sk::slo': 'sk',
- 'xkb:tr::tur': 'tr',
- 'xkb:ua::ukr': 'uk',
- 'xkb:us::eng': 'en_US',
- 'xkb:us:altgr-intl:eng': 'en_US_altgr_intl',
- 'xkb:us:colemak:eng': 'en_US_colemak',
- 'xkb:us:dvorak:eng': 'en_US_dvorak',
- 'xkb:us:intl:eng': 'en_US_intl',
- 'zinnia-japanese': 'ja',
-}
-
-# The file was first generated in 2012 and we have a policy of not updating
-# copyright dates.
-COPYRIGHT_HEADER=\
-"""// Copyright (c) 2012 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.
-
-// This is a generated file but may contain local modifications. See
-// src/tools/gen_keyboard_overlay_data/gen_keyboard_overlay_data.py --help
-"""
-
-# A snippet for grd file
-GRD_SNIPPET_TEMPLATE=""" <message name="%s" desc="%s">
- %s
- </message>
-"""
-
-# A snippet for C++ file
-CC_SNIPPET_TEMPLATE=""" { "%s", %s },
-"""
-
-
-def SplitBehavior(behavior):
- """Splits the behavior to compose a message or i18n-content value.
-
- Examples:
- 'Activate last tab' => ['Activate', 'last', 'tab']
- 'Close tab' => ['Close', 'tab']
- """
- return [x for x in re.split('[ ()"-.,]', behavior) if len(x) > 0]
-
-
-def ToMessageName(behavior):
- """Composes a message name for grd file.
-
- Examples:
- 'Activate last tab' => IDS_KEYBOARD_OVERLAY_ACTIVATE_LAST_TAB
- 'Close tab' => IDS_KEYBOARD_OVERLAY_CLOSE_TAB
- """
- segments = [segment.upper() for segment in SplitBehavior(behavior)]
- return 'IDS_KEYBOARD_OVERLAY_' + ('_'.join(segments))
-
-
-def ToMessageDesc(description):
- """Composes a message description for grd file."""
- message_desc = 'The text in the keyboard overlay to explain the shortcut'
- if description:
- message_desc = '%s (%s).' % (message_desc, description)
- else:
- message_desc += '.'
- return message_desc
-
-
-def Toi18nContent(behavior):
- """Composes a i18n-content value for HTML/JavaScript files.
-
- Examples:
- 'Activate last tab' => keyboardOverlayActivateLastTab
- 'Close tab' => keyboardOverlayCloseTab
- """
- segments = [segment.lower() for segment in SplitBehavior(behavior)]
- result = 'keyboardOverlay'
- for segment in segments:
- result += segment[0].upper() + segment[1:]
- return result
-
-
-def ToKeys(hotkey):
- """Converts the action value to shortcut keys used from JavaScript.
-
- Examples:
- 'Ctrl - 9' => '9<>CTRL'
- 'Ctrl - Shift - Tab' => 'tab<>CTRL<>SHIFT'
- """
- values = hotkey.split(' - ')
- modifiers = sorted(value.upper() for value in values
- if value in ['Shift', 'Ctrl', 'Alt', 'Search'])
- keycode = [value.lower() for value in values
- if value not in ['Shift', 'Ctrl', 'Alt', 'Search']]
- # The keys which are highlighted even without modifier keys.
- base_keys = ['backspace', 'power']
- if not modifiers and (keycode and keycode[0] not in base_keys):
- return None
- return '<>'.join(keycode + modifiers)
-
-
-def ParseOptions():
- """Parses the input arguemnts and returns options."""
- # default_username = os.getusername() + '@google.com';
- default_username = '%s@google.com' % os.environ.get('USER')
- parser = optparse.OptionParser()
- parser.add_option('--key', dest='key',
- help='The key of the spreadsheet (required).')
- parser.add_option('--username', dest='username',
- default=default_username,
- help='Your user name (default: %s).' % default_username)
- parser.add_option('--password', dest='password',
- help='Your password.')
- parser.add_option('--account_type', default='GOOGLE', dest='account_type',
- help='Account type used for gdata login (default: GOOGLE)')
- parser.add_option('--js', dest='js', default=False, action='store_true',
- help='Output js file.')
- parser.add_option('--grd', dest='grd', default=False, action='store_true',
- help='Output resource file.')
- parser.add_option('--cc', dest='cc', default=False, action='store_true',
- help='Output cc file.')
- parser.add_option('--outdir', dest='outdir', default=None,
- help='Specify the directory files are generated.')
- (options, unused_args) = parser.parse_args()
-
- if not options.username.endswith('google.com'):
- print 'google.com account is necessary to use this script.'
- sys.exit(-1)
-
- if (not (options.js or options.grd or options.cc)):
- print 'Either --js, --grd, or --cc needs to be specified.'
- sys.exit(-1)
-
- # Get the password from the terminal, if needed.
- if not options.password:
- options.password = getpass.getpass(
- 'Application specific password for %s: ' % options.username)
- return options
-
-
-def InitClient(options):
- """Initializes the spreadsheet client."""
- client = gdata.spreadsheet.service.SpreadsheetsService()
- client.email = options.username
- client.password = options.password
- client.source = 'Spread Sheet'
- client.account_type = options.account_type
- print 'Logging in as %s (%s)' % (client.email, client.account_type)
- client.ProgrammaticLogin()
- return client
-
-
-def PrintDiffs(message, lhs, rhs):
- """Prints the differences between |lhs| and |rhs|."""
- dif = set(lhs).difference(rhs)
- if dif:
- print message, ', '.join(dif)
-
-
-def FetchSpreadsheetFeeds(client, key, sheets, cols):
- """Fetch feeds from the spreadsheet.
-
- Args:
- client: A spreadsheet client to be used for fetching data.
- key: A key string of the spreadsheet to be fetched.
- sheets: A list of the sheet names to read data from.
- cols: A list of columns to read data from.
- """
- worksheets_feed = client.GetWorksheetsFeed(key)
- print 'Fetching data from the worksheet: %s' % worksheets_feed.title.text
- worksheets_data = {}
- titles = []
- for entry in worksheets_feed.entry:
- worksheet_id = entry.id.text.split('/')[-1]
- list_feed = client.GetListFeed(key, worksheet_id)
- list_data = []
- # Hack to deal with sheet names like 'sv (Copy of fl)'
- title = list_feed.title.text.split('(')[0].strip()
- titles.append(title)
- if title not in sheets:
- continue
- print 'Reading data from the sheet: %s' % list_feed.title.text
- for i, entry in enumerate(list_feed.entry):
- line_data = {}
- for k in entry.custom:
- if (k not in cols) or (not entry.custom[k].text):
- continue
- line_data[k] = entry.custom[k].text
- list_data.append(line_data)
- worksheets_data[title] = list_data
- PrintDiffs('Exist only on the spreadsheet: ', titles, sheets)
- PrintDiffs('Specified but do not exist on the spreadsheet: ', sheets, titles)
- return worksheets_data
-
-
-def FetchKeyboardGlyphData(client):
- """Fetches the keyboard glyph data from the spreadsheet."""
- glyph_cols = ['scancode', 'p0', 'p1', 'p2', 'p3', 'p4', 'p5', 'p6', 'p7',
- 'p8', 'p9', 'label', 'format', 'notes']
- keyboard_glyph_data = FetchSpreadsheetFeeds(
- client, KEYBOARD_GLYPH_SPREADSHEET_KEY,
- INPUT_METHOD_ID_TO_OVERLAY_ID.values(), glyph_cols)
- ret = {}
- for lang in keyboard_glyph_data:
- ret[lang] = {}
- keys = {}
- for line in keyboard_glyph_data[lang]:
- scancode = line.get('scancode')
- if (not scancode) and line.get('notes'):
- ret[lang]['layoutName'] = line['notes']
- continue
- del line['scancode']
- if 'notes' in line:
- del line['notes']
- if 'label' in line:
- line['label'] = LABEL_MAP.get(line['label'], line['label'])
- keys[scancode] = line
- # Add a label to space key
- if '39' not in keys:
- keys['39'] = {'label': 'space'}
- ret[lang]['keys'] = keys
- return ret
-
-
-def FetchLayoutsData(client):
- """Fetches the keyboard glyph data from the spreadsheet."""
- layout_names = ['U_layout', 'J_layout', 'E_layout', 'B_layout']
- cols = ['scancode', 'x', 'y', 'w', 'h']
- layouts = FetchSpreadsheetFeeds(client, KEYBOARD_GLYPH_SPREADSHEET_KEY,
- layout_names, cols)
- ret = {}
- for layout_name, layout in layouts.items():
- ret[layout_name[0]] = []
- for row in layout:
- line = []
- for col in cols:
- value = row.get(col)
- if not value:
- line.append('')
- else:
- if col != 'scancode':
- value = float(value)
- line.append(value)
- ret[layout_name[0]].append(line)
- return ret
-
-
-def FetchHotkeyData(client):
- """Fetches the hotkey data from the spreadsheet."""
- hotkey_sheet = ['Cross Platform Behaviors']
- hotkey_cols = ['behavior', 'context', 'kind', 'actionctrlctrlcmdonmac',
- 'chromeos', 'descriptionfortranslation']
- hotkey_data = FetchSpreadsheetFeeds(client, HOTKEY_SPREADSHEET_KEY,
- hotkey_sheet, hotkey_cols)
- action_to_id = {}
- id_to_behavior = {}
- # (behavior, action)
- result = []
- for line in hotkey_data['Cross Platform Behaviors']:
- if (not line.get('chromeos')) or (line.get('kind') != 'Key'):
- continue
- action = ToKeys(line['actionctrlctrlcmdonmac'])
- if not action:
- continue
- behavior = line['behavior'].strip()
- description = line.get('descriptionfortranslation')
- result.append((behavior, action, description))
- return result
-
-
-def UniqueBehaviors(hotkey_data):
- """Retrieves a sorted list of unique behaviors from |hotkey_data|."""
- return sorted(set((behavior, description) for (behavior, _, description)
- in hotkey_data),
- cmp=lambda x, y: cmp(ToMessageName(x[0]), ToMessageName(y[0])))
-
-
-def GetPath(path_from_src):
- """Returns the absolute path of the specified path."""
- path = os.path.join(os.path.dirname(__file__), '../..', path_from_src)
- if not os.path.isfile(path):
- print 'WARNING: %s does not exist. Maybe moved or renamed?' % path
- return path
-
-
-def OutputFile(outpath, snippet):
- """Output the snippet into the specified path."""
- out = file(outpath, 'w')
- out.write(COPYRIGHT_HEADER + '\n')
- out.write(snippet)
- print 'Output ' + os.path.normpath(outpath)
-
-
-def RewriteFile(start, end, original_dir, original_filename, snippet,
- outdir=None):
- """Replaces a part of the specified file with snippet and outputs it."""
- original_path = GetPath(os.path.join(original_dir, original_filename))
- original = file(original_path, 'r')
- original_content = original.read()
- original.close()
- if outdir:
- outpath = os.path.join(outdir, original_filename)
- else:
- outpath = original_path
- out = file(outpath, 'w')
- rx = re.compile(r'%s\n.*?%s\n' % (re.escape(start), re.escape(end)),
- re.DOTALL)
- new_content = re.sub(rx, '%s\n%s%s\n' % (start, snippet, end),
- original_content)
- out.write(new_content)
- out.close()
- print 'Output ' + os.path.normpath(outpath)
-
-
-def OutputJson(keyboard_glyph_data, hotkey_data, layouts, var_name, outdir):
- """Outputs the keyboard overlay data as a JSON file."""
- action_to_id = {}
- for (behavior, action, _) in hotkey_data:
- i18nContent = Toi18nContent(behavior)
- action_to_id[action] = i18nContent
- data = {'keyboardGlyph': keyboard_glyph_data,
- 'shortcut': action_to_id,
- 'layouts': layouts,
- 'inputMethodIdToOverlayId': INPUT_METHOD_ID_TO_OVERLAY_ID}
-
- if not outdir:
- outdir = JS_OUTDIR
- outpath = GetPath(os.path.join(outdir, JS_FILENAME))
- json_data = json.dumps(data, sort_keys=True, indent=2)
- # Remove redundant spaces after ','
- json_data = json_data.replace(', \n', ',\n')
- # Replace double quotes with single quotes to avoid lint warnings.
- json_data = json_data.replace('\"', '\'')
- snippet = 'var %s = %s;\n' % (var_name, json_data)
- OutputFile(outpath, snippet)
-
-
-def OutputGrd(hotkey_data, outdir):
- """Outputs a part of messages in the grd file."""
- snippet = cStringIO.StringIO()
- for (behavior, description) in UniqueBehaviors(hotkey_data):
- # Do not generate message for 'Show wrench menu'. It is handled manually
- # based on branding.
- if behavior == 'Show wrench menu':
- continue
- snippet.write(GRD_SNIPPET_TEMPLATE %
- (ToMessageName(behavior), ToMessageDesc(description),
- behavior))
-
- RewriteFile(GRD_START, GRD_END, GRD_OUTDIR, GRD_FILENAME, snippet.getvalue(),
- outdir)
-
-
-def OutputCC(hotkey_data, outdir):
- """Outputs a part of code in the C++ file."""
- snippet = cStringIO.StringIO()
- for (behavior, _) in UniqueBehaviors(hotkey_data):
- message_name = ToMessageName(behavior)
- output = CC_SNIPPET_TEMPLATE % (Toi18nContent(behavior), message_name)
- # Break the line if the line is longer than 80 characters
- if len(output) > 80:
- output = output.replace(' ' + message_name, '\n %s' % message_name)
- snippet.write(output)
-
- RewriteFile(CC_START, CC_END, CC_OUTDIR, CC_FILENAME, snippet.getvalue(),
- outdir)
-
-
-def main():
- options = ParseOptions()
- client = InitClient(options)
- hotkey_data = FetchHotkeyData(client)
-
- if options.js:
- keyboard_glyph_data = FetchKeyboardGlyphData(client)
-
- if options.js:
- layouts = FetchLayoutsData(client)
- OutputJson(keyboard_glyph_data, hotkey_data, layouts, 'keyboardOverlayData',
- options.outdir)
- if options.grd:
- OutputGrd(hotkey_data, options.outdir)
- if options.cc:
- OutputCC(hotkey_data, options.outdir)
-
-
-if __name__ == '__main__':
- main()
diff --git a/chromium/tools/generate_stubs/generate_stubs.py b/chromium/tools/generate_stubs/generate_stubs.py
index 27f8d5a05d3..46ddb7de199 100755
--- a/chromium/tools/generate_stubs/generate_stubs.py
+++ b/chromium/tools/generate_stubs/generate_stubs.py
@@ -390,7 +390,7 @@ def ParseSignatures(infile):
The format of the input file is one C-style function signature per line, no
trailing semicolon. Empty lines are allowed. An empty line is a line that
- consists purely of whitespace. Lines that begin with a # are considered
+ consists purely of whitespace. Lines that begin with a # or // are considered
comment lines and are ignored.
We assume that "int foo(void)" is the same as "int foo()", which is not
@@ -411,7 +411,7 @@ def ParseSignatures(infile):
signatures = []
for line in infile:
line = line.strip()
- if line and line[0] != '#':
+ if line and line[0] != '#' and line[0:2] != '//':
m = SIGNATURE_REGEX.match(line)
if m is None:
raise BadSignatureError('Unparsable line: %s' % line)
diff --git a/chromium/tools/generate_stubs/generate_stubs_unittest.py b/chromium/tools/generate_stubs/generate_stubs_unittest.py
index 13a2bc15e59..6cea445cf05 100755
--- a/chromium/tools/generate_stubs/generate_stubs_unittest.py
+++ b/chromium/tools/generate_stubs/generate_stubs_unittest.py
@@ -116,11 +116,15 @@ class GenerateStubModuleFunctionsUnittest(unittest.TestCase):
my_sigs.append(SIMPLE_SIGNATURES[0][0])
my_sigs.append('# a third comment')
my_sigs.append(SIMPLE_SIGNATURES[0][0])
+ my_sigs.append('// a fourth comment')
+ my_sigs.append(SIMPLE_SIGNATURES[0][0])
+ my_sigs.append('//')
+ my_sigs.append(SIMPLE_SIGNATURES[0][0])
file_contents = '\n'.join(my_sigs)
infile = StringIO.StringIO(file_contents)
signatures = gs.ParseSignatures(infile)
- self.assertEqual(3, len(signatures))
+ self.assertEqual(5, len(signatures))
class WindowsLibUnittest(unittest.TestCase):
diff --git a/chromium/tools/git/README b/chromium/tools/git/README
deleted file mode 100644
index 7f8e363dee0..00000000000
--- a/chromium/tools/git/README
+++ /dev/null
@@ -1,16 +0,0 @@
-This directory contains some helpful Git tools.
-
-post-checkout and post-merge
-============================
-These hooks warn you about DEPS modifications so you will remember
-to run "gclient sync".
-
-To install these Git hooks, create symlinks like so:
- ln -s $(pwd)/post-checkout $(git rev-parse --git-dir)/hooks
- ln -s $(pwd)/post-merge $(git rev-parse --git-dir)/hooks
-
-
-git-graph
-=========
-Create a graph of the recent history of occurences of a grep
-expression in the project.
diff --git a/chromium/tools/git/for-all-touched-files.py b/chromium/tools/git/for-all-touched-files.py
deleted file mode 100755
index a7e784ade3e..00000000000
--- a/chromium/tools/git/for-all-touched-files.py
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""
- Invokes the specified (quoted) command for all files modified
- between the current git branch and the specified branch or commit.
-
- The special token [[FILENAME]] (or whatever you choose using the -t
- flag) is replaced with each of the filenames of new or modified files.
-
- Deleted files are not included. Neither are untracked files.
-
-Synopsis:
- %prog [-b BRANCH] [-d] [-x EXTENSIONS|-c] [-t TOKEN] QUOTED_COMMAND
-
-Examples:
- %prog -x gyp,gypi "tools/format_xml.py [[FILENAME]]"
- %prog -c "tools/sort-headers.py [[FILENAME]]"
- %prog -t "~~BINGO~~" "echo I modified ~~BINGO~~"
-"""
-
-import optparse
-import os
-import subprocess
-import sys
-
-
-# List of C++-like source file extensions.
-_CPP_EXTENSIONS = ('h', 'hh', 'hpp', 'c', 'cc', 'cpp', 'cxx', 'mm',)
-
-
-def GitShell(args, ignore_return=False):
- """A shell invocation suitable for communicating with git. Returns
- output as list of lines, raises exception on error.
- """
- job = subprocess.Popen(args,
- shell=True,
- stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT)
- (out, err) = job.communicate()
- if job.returncode != 0 and not ignore_return:
- print out
- raise Exception("Error %d running command %s" % (
- job.returncode, args))
- return out.split('\n')
-
-
-def FilenamesFromGit(branch_name, extensions):
- """Provides a list of all new and modified files listed by [git diff
- branch_name] where branch_name can be blank to get a diff of the
- workspace.
-
- Excludes deleted files.
-
- If extensions is not an empty list, include only files with one of
- the extensions on the list.
- """
- lines = GitShell('git diff --stat=600,500 %s' % branch_name)
- filenames = []
- for line in lines:
- line = line.lstrip()
- # Avoid summary line, and files that have been deleted (no plus).
- if line.find('|') != -1 and line.find('+') != -1:
- filename = line.split()[0]
- if filename:
- filename = filename.rstrip()
- ext = filename.rsplit('.')[-1]
- if not extensions or ext in extensions:
- filenames.append(filename)
- return filenames
-
-
-def ForAllTouchedFiles(branch_name, extensions, token, command):
- """For each new or modified file output by [git diff branch_name],
- run command with token replaced with the filename. If extensions is
- not empty, do this only for files with one of the extensions in that
- list.
- """
- filenames = FilenamesFromGit(branch_name, extensions)
- for filename in filenames:
- os.system(command.replace(token, filename))
-
-
-def main():
- parser = optparse.OptionParser(usage=__doc__)
- parser.add_option('-x', '--extensions', default='', dest='extensions',
- help='Limits to files with given extensions '
- '(comma-separated).')
- parser.add_option('-c', '--cpp', default=False, action='store_true',
- dest='cpp_only',
- help='Runs your command only on C++-like source files.')
- parser.add_option('-t', '--token', default='[[FILENAME]]', dest='token',
- help='Sets the token to be replaced for each file '
- 'in your command (default [[FILENAME]]).')
- parser.add_option('-b', '--branch', default='origin/master', dest='branch',
- help='Sets what to diff to (default origin/master). Set '
- 'to empty to diff workspace against HEAD.')
- opts, args = parser.parse_args()
-
- if not args:
- parser.print_help()
- sys.exit(1)
-
- extensions = opts.extensions
- if opts.cpp_only:
- extensions = _CPP_EXTENSIONS
-
- ForAllTouchedFiles(opts.branch, extensions, opts.token, args[0])
-
-
-if __name__ == '__main__':
- main()
diff --git a/chromium/tools/git/git-diff-ide.py b/chromium/tools/git/git-diff-ide.py
deleted file mode 100755
index 405d270eba3..00000000000
--- a/chromium/tools/git/git-diff-ide.py
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-"""
- Invokes git diff [args...] and inserts file:line in front of each line of diff
- output where possible.
-
- This is useful from an IDE that allows you to double-click lines that begin
- with file:line to open and jump to that point in the file.
-
-Synopsis:
- %prog [git diff args...]
-
-Examples:
- %prog
- %prog HEAD
-"""
-
-import subprocess
-import sys
-
-
-def GitShell(args, ignore_return=False):
- """A shell invocation suitable for communicating with git. Returns
- output as list of lines, raises exception on error.
- """
- job = subprocess.Popen(args,
- shell=True,
- stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT)
- (out, err) = job.communicate()
- if job.returncode != 0 and not ignore_return:
- print out
- raise Exception("Error %d running command %s" % (
- job.returncode, args))
- return out.split('\n')
-
-
-def PrintGitDiff(extra_args):
- """Outputs git diff extra_args with file:line inserted into relevant lines."""
- current_file = '';
- line_num = 0;
- lines = GitShell('git diff %s' % ' '.join(extra_args))
- for line in lines:
- # Pass-through lines:
- # diff --git a/file.c b/file.c
- # index 0e38c2d..8cd69ae 100644
- # --- a/file.c
- if (line.startswith('diff ') or
- line.startswith('index ') or
- line.startswith('--- ')):
- print line
- continue
-
- # Get the filename from the +++ line:
- # +++ b/file.c
- if line.startswith('+++ '):
- # Filename might be /dev/null or a/file or b/file.
- # Skip the first two characters unless it starts with /.
- current_file = line[4:] if line[4] == '/' else line[6:]
- print line
- continue
-
- # Update line number from the @@ lines:
- # @@ -41,9 +41,9 @@ def MyFunc():
- # ^^
- if line.startswith('@@ '):
- _, old_nr, new_nr, _ = line.split(' ', 3)
- line_num = int(new_nr.split(',')[0])
- print line
- continue
- print current_file + ':' + repr(line_num) + ':' + line
-
- # Increment line number for lines that start with ' ' or '+':
- # @@ -41,4 +41,4 @@ def MyFunc():
- # file.c:41: // existing code
- # file.c:42: // existing code
- # file.c:43:-// deleted code
- # file.c:43:-// deleted code
- # file.c:43:+// inserted code
- # file.c:44:+// inserted code
- if line.startswith(' ') or line.startswith('+'):
- line_num += 1
-
-
-def main():
- PrintGitDiff(sys.argv[1:])
-
-
-if __name__ == '__main__':
- main()
diff --git a/chromium/tools/git/git-utils.sh b/chromium/tools/git/git-utils.sh
deleted file mode 100755
index 608d27aa26b..00000000000
--- a/chromium/tools/git/git-utils.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2012 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.
-
-TPUT=$(which tput 2>/dev/null)
-if test -x "$TPUT" && $TPUT setaf 1 >/dev/null ; then
- RED="$($TPUT setaf 1)"
- NORMAL="$($TPUT op)"
-else
- RED=
- NORMAL=
-fi
-
-warn() {
- echo "${RED}WARNING:${NORMAL} $@"
-}
diff --git a/chromium/tools/git/graph.sh b/chromium/tools/git/graph.sh
deleted file mode 100755
index 800a52b86c8..00000000000
--- a/chromium/tools/git/graph.sh
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2010 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.
-
-about="Given a grep expression, creates a graph of occurrences of that
-expression in the recent history of the tree.
-
-Prerequisites: git and GNU R (apt-get install r-base).
-"
-
-set -e
-
-target="$1"
-
-if [ -z $target ]; then
- echo "usage: $0 <grep-compatible expression>"
- echo
- echo "$about"
- exit 1
-fi
-
-datafile=$(mktemp -t tmp.XXXXXXXXXX)
-trap "rm -f $datafile" EXIT
-
-echo 'ago count' > $datafile
-for ago in {90..0}; do
- commit=$(git rev-list -1 --until="$ago days ago" origin/trunk)
- git checkout -q -f $commit
- count=$(git grep -E "$target" -- '*.cc' '*.h' '*.m' '*.mm' | wc -l)
- echo "-$ago $count" >> $datafile
- echo -n '.'
-done
-
-R CMD BATCH <(cat <<EOF
-data = read.delim("$datafile", sep=' ')
-png(width=600, height=300)
-plot(count ~ ago, type="l", main="$target", xlab='days ago', data=data)
-EOF
-) /dev/null
-
-echo done. # Primarily to add a newline after all the dots.
diff --git a/chromium/tools/git/mass-rename.py b/chromium/tools/git/mass-rename.py
deleted file mode 100755
index 21fbef76b72..00000000000
--- a/chromium/tools/git/mass-rename.py
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/env python
-# 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.
-
-"""
-mass-rename: update source files (gyp lists, #includes) to reflect
-a rename. Expects "git diff --cached -M" to list a bunch of renames.
-
-To use:
- 1) git mv foo1 bar1; git mv foo2 bar2; etc.
- 2) *without committing*, ./tools/git/mass-rename.py
- 3) look at git diff (without --cached) to see what the damage is
-"""
-
-
-import os
-import subprocess
-import sys
-
-
-BASE_DIR = os.path.abspath(os.path.dirname(__file__))
-
-
-def main():
- popen = subprocess.Popen('git diff --cached --raw -M',
- shell=True, stdout=subprocess.PIPE)
- out, _ = popen.communicate()
- if popen.returncode != 0:
- return 1
- for line in out.splitlines():
- parts = line.split('\t')
- if len(parts) != 3:
- print 'Skipping: %s -- not a rename?' % parts
- continue
- attrs, fro, to = parts
- if attrs.split()[4].startswith('R'):
- subprocess.check_call([
- sys.executable,
- os.path.join(BASE_DIR, 'move_source_file.py'),
- '--already_moved',
- '--no_error_for_non_source_file',
- fro, to])
- else:
- print 'Skipping: %s -- not a rename?' % fro
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/git/mass-rename.sh b/chromium/tools/git/mass-rename.sh
deleted file mode 100755
index f92814e70bb..00000000000
--- a/chromium/tools/git/mass-rename.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2011 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.
-
-# mass-rename: update source files (gyp lists, #includes) to reflect
-# a rename. Expects "git diff --cached -M" to list a bunch of renames.
-#
-# To use:
-# 1) git mv foo1 bar1; git mv foo2 bar2; etc.
-# 2) *without committing*, ./tools/git/mass-rename.sh
-# 3) look at git diff (without --cached) to see what the damage is
-# 4) commit, then use tools/sort-headers.py to fix #include ordering:
-# for f in $(git diff --name-only origin); do ./tools/sort-headers.py $f; done
-
-DIR="$( cd "$( dirname "$0" )" && pwd )"
-python $DIR/mass-rename.py "$*"
diff --git a/chromium/tools/git/mffr.py b/chromium/tools/git/mffr.py
deleted file mode 100755
index d5b67c8c3f1..00000000000
--- a/chromium/tools/git/mffr.py
+++ /dev/null
@@ -1,169 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 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.
-
-"""Usage: mffr.py [-d] [-g *.h] [-g *.cc] REGEXP REPLACEMENT
-
-This tool performs a fast find-and-replace operation on files in
-the current git repository.
-
-The -d flag selects a default set of globs (C++ and Objective-C/C++
-source files). The -g flag adds a single glob to the list and may
-be used multiple times. If neither -d nor -g is specified, the tool
-searches all files (*.*).
-
-REGEXP uses full Python regexp syntax. REPLACEMENT can use
-back-references.
-"""
-
-import optparse
-import re
-import subprocess
-import sys
-
-
-# We need to use shell=True with subprocess on Windows so that it
-# finds 'git' from the path, but can lead to undesired behavior on
-# Linux.
-_USE_SHELL = (sys.platform == 'win32')
-
-
-def MultiFileFindReplace(original, replacement, file_globs):
- """Implements fast multi-file find and replace.
-
- Given an |original| string and a |replacement| string, find matching
- files by running git grep on |original| in files matching any
- pattern in |file_globs|.
-
- Once files are found, |re.sub| is run to replace |original| with
- |replacement|. |replacement| may use capture group back-references.
-
- Args:
- original: '(#(include|import)\s*["<])chrome/browser/ui/browser.h([>"])'
- replacement: '\1chrome/browser/ui/browser/browser.h\3'
- file_globs: ['*.cc', '*.h', '*.m', '*.mm']
-
- Returns the list of files modified.
-
- Raises an exception on error.
- """
- # Posix extended regular expressions do not reliably support the "\s"
- # shorthand.
- posix_ere_original = re.sub(r"\\s", "[[:space:]]", original)
- if sys.platform == 'win32':
- posix_ere_original = posix_ere_original.replace('"', '""')
- out, err = subprocess.Popen(
- ['git', 'grep', '-E', '--name-only', posix_ere_original,
- '--'] + file_globs,
- stdout=subprocess.PIPE,
- shell=_USE_SHELL).communicate()
- referees = out.splitlines()
-
- for referee in referees:
- with open(referee) as f:
- original_contents = f.read()
- contents = re.sub(original, replacement, original_contents)
- if contents == original_contents:
- raise Exception('No change in file %s although matched in grep' %
- referee)
- with open(referee, 'wb') as f:
- f.write(contents)
-
- return referees
-
-
-def main():
- parser = optparse.OptionParser(usage='''
-(1) %prog <options> REGEXP REPLACEMENT
-REGEXP uses full Python regexp syntax. REPLACEMENT can use back-references.
-
-(2) %prog <options> -i <file>
-<file> should contain a list (in Python syntax) of
-[REGEXP, REPLACEMENT, [GLOBS]] lists, e.g.:
-[
- [r"(foo|bar)", r"\1baz", ["*.cc", "*.h"]],
- ["54", "42"],
-]
-As shown above, [GLOBS] can be omitted for a given search-replace list, in which
-case the corresponding search-replace will use the globs specified on the
-command line.''')
- parser.add_option('-d', action='store_true',
- dest='use_default_glob',
- help='Perform the change on C++ and Objective-C(++) source '
- 'and header files.')
- parser.add_option('-f', action='store_true',
- dest='force_unsafe_run',
- help='Perform the run even if there are uncommitted local '
- 'changes.')
- parser.add_option('-g', action='append',
- type='string',
- default=[],
- metavar="<glob>",
- dest='user_supplied_globs',
- help='Perform the change on the specified glob. Can be '
- 'specified multiple times, in which case the globs are '
- 'unioned.')
- parser.add_option('-i', "--input_file",
- type='string',
- action='store',
- default='',
- metavar="<file>",
- dest='input_filename',
- help='Read arguments from <file> rather than the command '
- 'line. NOTE: To be sure of regular expressions being '
- 'interpreted correctly, use raw strings.')
- opts, args = parser.parse_args()
- if opts.use_default_glob and opts.user_supplied_globs:
- print '"-d" and "-g" cannot be used together'
- parser.print_help()
- return 1
-
- from_file = opts.input_filename != ""
- if (from_file and len(args) != 0) or (not from_file and len(args) != 2):
- parser.print_help()
- return 1
-
- if not opts.force_unsafe_run:
- out, err = subprocess.Popen(['git', 'status', '--porcelain'],
- stdout=subprocess.PIPE,
- shell=_USE_SHELL).communicate()
- if out:
- print 'ERROR: This tool does not print any confirmation prompts,'
- print 'so you should only run it with a clean staging area and cache'
- print 'so that reverting a bad find/replace is as easy as running'
- print ' git checkout -- .'
- print ''
- print 'To override this safeguard, pass the -f flag.'
- return 1
-
- global_file_globs = ['*.*']
- if opts.use_default_glob:
- global_file_globs = ['*.cc', '*.h', '*.m', '*.mm']
- elif opts.user_supplied_globs:
- global_file_globs = opts.user_supplied_globs
-
- # Construct list of search-replace tasks.
- search_replace_tasks = []
- if opts.input_filename == '':
- original = args[0]
- replacement = args[1]
- search_replace_tasks.append([original, replacement, global_file_globs])
- else:
- f = open(opts.input_filename)
- search_replace_tasks = eval("".join(f.readlines()))
- for task in search_replace_tasks:
- if len(task) == 2:
- task.append(global_file_globs)
- f.close()
-
- for (original, replacement, file_globs) in search_replace_tasks:
- print 'File globs: %s' % file_globs
- print 'Original: %s' % original
- print 'Replacement: %s' % replacement
- MultiFileFindReplace(original, replacement, file_globs)
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/git/move_source_file.bat b/chromium/tools/git/move_source_file.bat
deleted file mode 100755
index bc3d7978e01..00000000000
--- a/chromium/tools/git/move_source_file.bat
+++ /dev/null
@@ -1,6 +0,0 @@
-@echo off
-setlocal
-:: This is required with cygwin only.
-PATH=%~dp0;%PATH%
-set PYTHONDONTWRITEBYTECODE=1
-call python "%~dp0move_source_file.py" %*
diff --git a/chromium/tools/git/move_source_file.py b/chromium/tools/git/move_source_file.py
deleted file mode 100755
index a60c7e13e1e..00000000000
--- a/chromium/tools/git/move_source_file.py
+++ /dev/null
@@ -1,194 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-"""Moves C++ files to a new location, updating any include paths that point
-to them, and re-ordering headers as needed. If multiple source files are
-specified, the destination must be a directory. Updates include guards in
-moved header files. Assumes Chromium coding style.
-
-Attempts to update paths used in .gyp(i) files, but does not reorder
-or restructure .gyp(i) files in any way.
-
-Updates full-path references to files in // comments in source files.
-
-Must run in a git checkout, as it relies on git grep for a fast way to
-find files that reference the moved file.
-"""
-
-
-import optparse
-import os
-import re
-import subprocess
-import sys
-
-import mffr
-
-if __name__ == '__main__':
- # Need to add the directory containing sort-headers.py to the Python
- # classpath.
- sys.path.append(os.path.abspath(os.path.join(sys.path[0], '..')))
-sort_headers = __import__('sort-headers')
-
-
-HANDLED_EXTENSIONS = ['.cc', '.mm', '.h', '.hh']
-
-
-def IsHandledFile(path):
- return os.path.splitext(path)[1] in HANDLED_EXTENSIONS
-
-
-def MakeDestinationPath(from_path, to_path):
- """Given the from and to paths, return a correct destination path.
-
- The initial destination path may either a full path or a directory.
- Also does basic sanity checks.
- """
- if not IsHandledFile(from_path):
- raise Exception('Only intended to move individual source files '
- '(%s does not have a recognized extension).' %
- from_path)
- if os.path.isdir(to_path):
- to_path = os.path.join(to_path, os.path.basename(from_path))
- else:
- dest_extension = os.path.splitext(to_path)[1]
- if dest_extension not in HANDLED_EXTENSIONS:
- raise Exception('Destination must be either a full path with '
- 'a recognized extension or a directory.')
- return to_path
-
-
-def MoveFile(from_path, to_path):
- """Performs a git mv command to move a file from |from_path| to |to_path|.
- """
- if not os.system('git mv %s %s' % (from_path, to_path)) == 0:
- raise Exception('Fatal: Failed to run git mv command.')
-
-
-def UpdatePostMove(from_path, to_path):
- """Given a file that has moved from |from_path| to |to_path|,
- updates the moved file's include guard to match the new path and
- updates all references to the file in other source files. Also tries
- to update references in .gyp(i) files using a heuristic.
- """
- # Include paths always use forward slashes.
- from_path = from_path.replace('\\', '/')
- to_path = to_path.replace('\\', '/')
-
- if os.path.splitext(from_path)[1] in ['.h', '.hh']:
- UpdateIncludeGuard(from_path, to_path)
-
- # Update include/import references.
- files_with_changed_includes = mffr.MultiFileFindReplace(
- r'(#(include|import)\s*["<])%s([>"])' % re.escape(from_path),
- r'\1%s\3' % to_path,
- ['*.cc', '*.h', '*.m', '*.mm'])
-
- # Reorder headers in files that changed.
- for changed_file in files_with_changed_includes:
- def AlwaysConfirm(a, b): return True
- sort_headers.FixFileWithConfirmFunction(changed_file, AlwaysConfirm, True)
-
- # Update comments; only supports // comments, which are primarily
- # used in our code.
- #
- # This work takes a bit of time. If this script starts feeling too
- # slow, one good way to speed it up is to make the comment handling
- # optional under a flag.
- mffr.MultiFileFindReplace(
- r'(//.*)%s' % re.escape(from_path),
- r'\1%s' % to_path,
- ['*.cc', '*.h', '*.m', '*.mm'])
-
- # Update references in .gyp(i) files.
- def PathMinusFirstComponent(path):
- """foo/bar/baz -> bar/baz"""
- parts = re.split(r"[/\\]", path, 1)
- if len(parts) == 2:
- return parts[1]
- else:
- return parts[0]
- mffr.MultiFileFindReplace(
- r'([\'"])%s([\'"])' % re.escape(PathMinusFirstComponent(from_path)),
- r'\1%s\2' % PathMinusFirstComponent(to_path),
- ['*.gyp*'])
-
-
-def MakeIncludeGuardName(path_from_root):
- """Returns an include guard name given a path from root."""
- guard = path_from_root.replace('/', '_')
- guard = guard.replace('\\', '_')
- guard = guard.replace('.', '_')
- guard += '_'
- return guard.upper()
-
-
-def UpdateIncludeGuard(old_path, new_path):
- """Updates the include guard in a file now residing at |new_path|,
- previously residing at |old_path|, with an up-to-date include guard.
-
- Prints a warning if the update could not be completed successfully (e.g.,
- because the old include guard was not formatted correctly per Chromium style).
- """
- old_guard = MakeIncludeGuardName(old_path)
- new_guard = MakeIncludeGuardName(new_path)
-
- with open(new_path) as f:
- contents = f.read()
-
- new_contents = contents.replace(old_guard, new_guard)
- # The file should now have three instances of the new guard: two at the top
- # of the file plus one at the bottom for the comment on the #endif.
- if new_contents.count(new_guard) != 3:
- print ('WARNING: Could not successfully update include guard; perhaps '
- 'old guard is not per style guide? You will have to update the '
- 'include guard manually. (%s)' % new_path)
-
- with open(new_path, 'w') as f:
- f.write(new_contents)
-
-def main():
- if not os.path.isdir('.git'):
- print 'Fatal: You must run from the root of a git checkout.'
- return 1
-
- parser = optparse.OptionParser(usage='%prog FROM_PATH... TO_PATH')
- parser.add_option('--already_moved', action='store_true',
- dest='already_moved',
- help='Causes the script to skip moving the file.')
- parser.add_option('--no_error_for_non_source_file', action='store_false',
- default='True',
- dest='error_for_non_source_file',
- help='Causes the script to simply print a warning on '
- 'encountering a non-source file rather than raising an '
- 'error.')
- opts, args = parser.parse_args()
-
- if len(args) < 2:
- parser.print_help()
- return 1
-
- from_paths = args[:len(args)-1]
- orig_to_path = args[-1]
-
- if len(from_paths) > 1 and not os.path.isdir(orig_to_path):
- print 'Target %s is not a directory.' % orig_to_path
- print
- parser.print_help()
- return 1
-
- for from_path in from_paths:
- if not opts.error_for_non_source_file and not IsHandledFile(from_path):
- print '%s does not appear to be a source file, skipping' % (from_path)
- continue
- to_path = MakeDestinationPath(from_path, orig_to_path)
- if not opts.already_moved:
- MoveFile(from_path, to_path)
- UpdatePostMove(from_path, to_path)
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/git/post-checkout b/chromium/tools/git/post-checkout
deleted file mode 100755
index 452eb48eb45..00000000000
--- a/chromium/tools/git/post-checkout
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2010 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.
-
-script=$(readlink $0)
-source $(dirname ${script:-$0})/git-utils.sh
-
-old_ref=$1 # Previous HEAD.
-new_ref=$2 # Current HEAD.
-branch_switch=$3 # Whether we switched branches.
-
-if [ $old_ref == $new_ref ]; then
- if ! git diff-index --quiet HEAD $(git rev-parse --show-cdup)DEPS; then
- warn "DEPS has local modifications; do you need to re-run gclient sync?"
- fi
-else
- if git diff-tree $old_ref $new_ref | grep -qs $'\tDEPS$'; then
- warn "DEPS has changed; you probably need to re-run gclient sync."
- fi
-fi
-
diff --git a/chromium/tools/git/post-merge b/chromium/tools/git/post-merge
deleted file mode 100755
index 8b774ce6593..00000000000
--- a/chromium/tools/git/post-merge
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2010 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.
-
-script=$(readlink $0)
-source $(dirname ${script:-$0})/git-utils.sh
-
-if git diff-tree ORIG_HEAD HEAD | grep -qs $'\tDEPS$'; then
- warn "DEPS has changed; you probably need to re-run gclient sync."
-fi
-
diff --git a/chromium/tools/git/update-copyrights.sh b/chromium/tools/git/update-copyrights.sh
deleted file mode 100755
index ac69bd53e64..00000000000
--- a/chromium/tools/git/update-copyrights.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2012 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.
-
-echo 'Updating copyrights is no longer necessary.'
-echo 'See https://groups.google.com/a/chromium.org/d/msg/chromium-dev/8p4JKV76kig/OiFYFjuZ6nAJ'
diff --git a/chromium/tools/gn/gn.gyp b/chromium/tools/gn/gn.gyp
index 8deb8407c96..d972b5b9998 100644
--- a/chromium/tools/gn/gn.gyp
+++ b/chromium/tools/gn/gn.gyp
@@ -10,6 +10,10 @@
'../../base/base.gyp:base',
],
'sources': [
+ 'action_target_generator.cc',
+ 'action_target_generator.h',
+ 'action_values.cc',
+ 'action_values.h',
'args.cc',
'args.h',
'binary_target_generator.cc',
@@ -20,10 +24,12 @@
'builder.h',
'builder_record.cc',
'builder_record.h',
+ 'c_include_iterator.cc',
+ 'c_include_iterator.h',
'command_args.cc',
+ 'command_check.cc',
'command_desc.cc',
'command_gen.cc',
- 'command_gyp.cc',
'command_help.cc',
'command_refs.cc',
'commands.cc',
@@ -50,6 +56,10 @@
'functions.cc',
'functions.h',
'function_exec_script.cc',
+ 'function_foreach.cc',
+ 'function_get_label_info.cc',
+ 'function_get_path_info.cc',
+ 'function_get_target_outputs.cc',
'function_process_file_template.cc',
'function_read_file.cc',
'function_rebase_path.cc',
@@ -60,14 +70,8 @@
'function_write_file.cc',
'group_target_generator.cc',
'group_target_generator.h',
- 'gyp_binary_target_writer.cc',
- 'gyp_binary_target_writer.h',
- 'gyp_helper.cc',
- 'gyp_helper.h',
- 'gyp_script_target_writer.cc',
- 'gyp_script_target_writer.h',
- 'gyp_target_writer.cc',
- 'gyp_target_writer.h',
+ 'header_checker.cc',
+ 'header_checker.h',
'import_manager.cc',
'import_manager.h',
'input_conversion.cc',
@@ -85,6 +89,8 @@
'loader.h',
'location.cc',
'location.h',
+ 'ninja_action_target_writer.cc',
+ 'ninja_action_target_writer.h',
'ninja_binary_target_writer.cc',
'ninja_binary_target_writer.h',
'ninja_build_writer.cc',
@@ -95,8 +101,6 @@
'ninja_group_target_writer.h',
'ninja_helper.cc',
'ninja_helper.h',
- 'ninja_script_target_writer.cc',
- 'ninja_script_target_writer.h',
'ninja_target_writer.cc',
'ninja_target_writer.h',
'ninja_toolchain_writer.cc',
@@ -120,10 +124,6 @@
'scope.h',
'scope_per_file_provider.cc',
'scope_per_file_provider.h',
- 'script_target_generator.cc',
- 'script_target_generator.h',
- 'script_values.cc',
- 'script_values.h',
'settings.cc',
'settings.h',
'setup.cc',
@@ -140,6 +140,8 @@
'target.h',
'target_generator.cc',
'target_generator.h',
+ 'template.cc',
+ 'template.h',
'token.cc',
'token.h',
'tokenizer.cc',
@@ -154,6 +156,8 @@
'value_extractors.h',
'variables.cc',
'variables.h',
+ 'visibility.cc',
+ 'visibility.h',
],
},
{
@@ -173,21 +177,33 @@
'type': '<(gtest_target_type)',
'sources': [
'builder_unittest.cc',
+ 'c_include_iterator_unittest.cc',
+ 'config_values_extractors_unittest.cc',
'escape_unittest.cc',
- 'file_template_unittest.cc',
'filesystem_utils_unittest.cc',
+ 'file_template_unittest.cc',
+ 'function_foreach_unittest.cc',
+ 'function_get_label_info_unittest.cc',
+ 'function_get_path_info_unittest.cc',
+ 'function_get_target_outputs_unittest.cc',
'function_rebase_path_unittest.cc',
- 'gyp_script_target_writer_unittest.cc',
+ 'function_write_file_unittest.cc',
+ 'functions_unittest.cc',
+ 'header_checker_unittest.cc',
'input_conversion_unittest.cc',
'label_unittest.cc',
'loader_unittest.cc',
+ 'ninja_action_target_writer_unittest.cc',
'ninja_binary_target_writer_unittest.cc',
- 'ninja_helper_unittest.cc',
'ninja_copy_target_writer_unittest.cc',
- 'ninja_script_target_writer_unittest.cc',
+ 'ninja_helper_unittest.cc',
+ 'ninja_target_writer_unittest.cc',
+ 'operators_unittest.cc',
+ 'parse_tree_unittest.cc',
'parser_unittest.cc',
'path_output_unittest.cc',
'pattern_unittest.cc',
+ 'run_all_unittests.cc',
'scope_per_file_provider_unittest.cc',
'scope_unittest.cc',
'source_dir_unittest.cc',
@@ -197,10 +213,11 @@
'test_with_scope.cc',
'test_with_scope.h',
'tokenizer_unittest.cc',
+ 'value_unittest.cc',
+ 'visibility_unittest.cc',
],
'dependencies': [
'gn_lib',
- '../../base/base.gyp:run_all_unittests',
'../../base/base.gyp:test_support_base',
'../../testing/gtest.gyp:gtest',
],
diff --git a/chromium/tools/grit/grit/format/chrome_messages_json.py b/chromium/tools/grit/grit/format/chrome_messages_json.py
index 7b370d7fdca..be934ab1175 100644
--- a/chromium/tools/grit/grit/format/chrome_messages_json.py
+++ b/chromium/tools/grit/grit/format/chrome_messages_json.py
@@ -25,10 +25,11 @@ def Format(root, lang='en', output_dir='.'):
for child in root.ActiveDescendants():
if isinstance(child, message.MessageNode):
id = child.attrs['name']
- if id.startswith('IDR_'):
+ if id.startswith('IDR_') or id.startswith('IDS_'):
id = id[4:]
- loc_message = encoder.encode(child.Translate(lang))
+ loc_message = encoder.encode(child.ws_at_start + child.Translate(lang) +
+ child.ws_at_end)
if not first:
yield ',\n'
diff --git a/chromium/tools/grit/grit/format/chrome_messages_json_unittest.py b/chromium/tools/grit/grit/format/chrome_messages_json_unittest.py
index 484230fe49b..373751eadc8 100644
--- a/chromium/tools/grit/grit/format/chrome_messages_json_unittest.py
+++ b/chromium/tools/grit/grit/format/chrome_messages_json_unittest.py
@@ -35,6 +35,12 @@ class ChromeMessagesJsonFormatUnittest(unittest.TestCase):
<message name="IDS_STARTS_WITH_SPACE">
''' (<ph name="COUNT">%d<ex>2</ex></ph>)
</message>
+ <message name="IDS_ENDS_WITH_SPACE">
+ (<ph name="COUNT">%d<ex>2</ex></ph>) '''
+ </message>
+ <message name="IDS_SPACE_AT_BOTH_ENDS">
+ ''' (<ph name="COUNT">%d<ex>2</ex></ph>) '''
+ </message>
<message name="IDS_DOUBLE_QUOTES">
A "double quoted" message.
</message>
@@ -49,22 +55,28 @@ class ChromeMessagesJsonFormatUnittest(unittest.TestCase):
output = buf.getvalue()
test = u"""
{
- "IDS_SIMPLE_MESSAGE": {
+ "SIMPLE_MESSAGE": {
"message": "Simple message."
},
- "IDS_QUOTES": {
+ "QUOTES": {
"message": "element\\u2019s \\u201c%s\\u201d attribute"
},
- "IDS_PLACEHOLDERS": {
+ "PLACEHOLDERS": {
"message": "%1$d error, %2$d warning"
},
- "IDS_STARTS_WITH_SPACE": {
- "message": "(%d)"
+ "STARTS_WITH_SPACE": {
+ "message": " (%d)"
+ },
+ "ENDS_WITH_SPACE": {
+ "message": "(%d) "
+ },
+ "SPACE_AT_BOTH_ENDS": {
+ "message": " (%d) "
},
- "IDS_DOUBLE_QUOTES": {
+ "DOUBLE_QUOTES": {
"message": "A \\"double quoted\\" message."
},
- "IDS_BACKSLASH": {
+ "BACKSLASH": {
"message": "\\\\"
}
}
diff --git a/chromium/tools/grit/grit/format/data_pack.py b/chromium/tools/grit/grit/format/data_pack.py
index 0cdbbd8d341..02616c39d40 100755
--- a/chromium/tools/grit/grit/format/data_pack.py
+++ b/chromium/tools/grit/grit/format/data_pack.py
@@ -3,9 +3,9 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-'''Support for formatting a data pack file used for platform agnostic resource
+"""Support for formatting a data pack file used for platform agnostic resource
files.
-'''
+"""
import collections
import exceptions
@@ -19,7 +19,6 @@ from grit import util
from grit.node import include
from grit.node import message
from grit.node import structure
-from grit.node import misc
PACK_FILE_VERSION = 4
@@ -37,7 +36,7 @@ DataPackContents = collections.namedtuple(
def Format(root, lang='en', output_dir='.'):
- '''Writes out the data pack file format (platform agnostic resource file).'''
+ """Writes out the data pack file format (platform agnostic resource file)."""
data = {}
for node in root.ActiveDescendants():
with node:
@@ -55,9 +54,9 @@ def ReadDataPack(input_file):
original_data = data
# Read the header.
- version, num_entries, encoding = struct.unpack("<IIB", data[:HEADER_LENGTH])
+ version, num_entries, encoding = struct.unpack('<IIB', data[:HEADER_LENGTH])
if version != PACK_FILE_VERSION:
- print "Wrong file version in ", input_file
+ print 'Wrong file version in ', input_file
raise WrongFileVersion
resources = {}
@@ -68,22 +67,21 @@ def ReadDataPack(input_file):
data = data[HEADER_LENGTH:]
kIndexEntrySize = 2 + 4 # Each entry is a uint16 and a uint32.
for _ in range(num_entries):
- id, offset = struct.unpack("<HI", data[:kIndexEntrySize])
+ id, offset = struct.unpack('<HI', data[:kIndexEntrySize])
data = data[kIndexEntrySize:]
- next_id, next_offset = struct.unpack("<HI", data[:kIndexEntrySize])
+ next_id, next_offset = struct.unpack('<HI', data[:kIndexEntrySize])
resources[id] = original_data[offset:next_offset]
return DataPackContents(resources, encoding)
def WriteDataPackToString(resources, encoding):
- """Write a map of id=>data into a string in the data pack format and return
- it."""
+ """Returns a string with a map of id=>data in the data pack format."""
ids = sorted(resources.keys())
ret = []
# Write file header.
- ret.append(struct.pack("<IIB", PACK_FILE_VERSION, len(ids), encoding))
+ ret.append(struct.pack('<IIB', PACK_FILE_VERSION, len(ids), encoding))
HEADER_LENGTH = 2 * 4 + 1 # Two uint32s and one uint8.
# Each entry is a uint16 + a uint32s. We have one extra entry for the last
@@ -93,10 +91,10 @@ def WriteDataPackToString(resources, encoding):
# Write index.
data_offset = HEADER_LENGTH + index_length
for id in ids:
- ret.append(struct.pack("<HI", id, data_offset))
+ ret.append(struct.pack('<HI', id, data_offset))
data_offset += len(resources[id])
- ret.append(struct.pack("<HI", 0, data_offset))
+ ret.append(struct.pack('<HI', 0, data_offset))
# Write data.
for id in ids:
@@ -105,39 +103,82 @@ def WriteDataPackToString(resources, encoding):
def WriteDataPack(resources, output_file, encoding):
- """Write a map of id=>data into output_file as a data pack."""
+ """Writes a map of id=>data into output_file as a data pack."""
content = WriteDataPackToString(resources, encoding)
- with open(output_file, "wb") as file:
+ with open(output_file, 'wb') as file:
file.write(content)
-def RePack(output_file, input_files):
- """Write a new data pack to |output_file| based on a list of filenames
- (|input_files|)"""
+def RePack(output_file, input_files, whitelist_file=None):
+ """Write a new data pack file by combining input pack files.
+
+ Args:
+ output_file: path to the new data pack file.
+ input_files: a list of paths to the data pack files to combine.
+ whitelist_file: path to the file that contains the list of resource IDs
+ that should be kept in the output file or None to include
+ all resources.
+
+ Raises:
+ KeyError: if there are duplicate keys or resource encoding is
+ inconsistent.
+ """
+ input_data_packs = [ReadDataPack(filename) for filename in input_files]
+ whitelist = None
+ if whitelist_file:
+ whitelist = util.ReadFile(whitelist_file, util.RAW_TEXT).strip().split('\n')
+ whitelist = set(map(int, whitelist))
+ resources, encoding = RePackFromDataPackStrings(input_data_packs, whitelist)
+ WriteDataPack(resources, output_file, encoding)
+
+
+def RePackFromDataPackStrings(inputs, whitelist):
+ """Returns a data pack string that combines the resources from inputs.
+
+ Args:
+ inputs: a list of data pack strings that need to be combined.
+ whitelist: a list of resource IDs that should be kept in the output string
+ or None to include all resources.
+
+ Returns:
+ DataPackContents: a tuple containing the new combined data pack and its
+ encoding.
+
+ Raises:
+ KeyError: if there are duplicate keys or resource encoding is
+ inconsistent.
+ """
resources = {}
encoding = None
- for filename in input_files:
- new_content = ReadDataPack(filename)
-
+ for content in inputs:
# Make sure we have no dups.
- duplicate_keys = set(new_content.resources.keys()) & set(resources.keys())
- if len(duplicate_keys) != 0:
- raise exceptions.KeyError("Duplicate keys: " + str(list(duplicate_keys)))
+ duplicate_keys = set(content.resources.keys()) & set(resources.keys())
+ if duplicate_keys:
+ raise exceptions.KeyError('Duplicate keys: ' + str(list(duplicate_keys)))
# Make sure encoding is consistent.
if encoding in (None, BINARY):
- encoding = new_content.encoding
- elif new_content.encoding not in (BINARY, encoding):
- raise exceptions.KeyError("Inconsistent encodings: " +
- str(encoding) + " vs " +
- str(new_content.encoding))
-
- resources.update(new_content.resources)
+ encoding = content.encoding
+ elif content.encoding not in (BINARY, encoding):
+ raise exceptions.KeyError('Inconsistent encodings: ' + str(encoding) +
+ ' vs ' + str(content.encoding))
+
+ if whitelist:
+ whitelisted_resources = dict([(key, content.resources[key])
+ for key in content.resources.keys()
+ if key in whitelist])
+ resources.update(whitelisted_resources)
+ removed_keys = [key for key in content.resources.keys()
+ if key not in whitelist]
+ for key in removed_keys:
+ print 'RePackFromDataPackStrings Removed Key:', key
+ else:
+ resources.update(content.resources)
# Encoding is 0 for BINARY, 1 for UTF8 and 2 for UTF16
if encoding is None:
encoding = BINARY
- WriteDataPack(resources, output_file, encoding)
+ return DataPackContents(resources, encoding)
# Temporary hack for external programs that import data_pack.
@@ -157,14 +198,14 @@ def main():
data = ReadDataPack(sys.argv[1])
print data.encoding
for (resource_id, text) in data.resources.iteritems():
- print "%s: %s" % (resource_id, text)
+ print '%s: %s' % (resource_id, text)
else:
# Just write a simple file.
- data = { 1: "", 4: "this is id 4", 6: "this is id 6", 10: "" }
- WriteDataPack(data, "datapack1.pak", UTF8)
- data2 = { 1000: "test", 5: "five" }
- WriteDataPack(data2, "datapack2.pak", UTF8)
- print "wrote datapack1 and datapack2 to current directory."
+ data = {1: '', 4: 'this is id 4', 6: 'this is id 6', 10: ''}
+ WriteDataPack(data, 'datapack1.pak', UTF8)
+ data2 = {1000: 'test', 5: 'five'}
+ WriteDataPack(data2, 'datapack2.pak', UTF8)
+ print 'wrote datapack1 and datapack2 to current directory.'
if __name__ == '__main__':
diff --git a/chromium/tools/grit/grit/format/data_pack_unittest.py b/chromium/tools/grit/grit/format/data_pack_unittest.py
index d210c99fdd3..f6e9edcfcb6 100644
--- a/chromium/tools/grit/grit/format/data_pack_unittest.py
+++ b/chromium/tools/grit/grit/format/data_pack_unittest.py
@@ -28,10 +28,37 @@ class FormatDataPackUnittest(unittest.TestCase):
'\x0a\x00\x3f\x00\x00\x00' # index entry 10
'\x00\x00\x3f\x00\x00\x00' # extra entry for the size of last
'this is id 4this is id 6') # data
- input = { 1: "", 4: "this is id 4", 6: "this is id 6", 10: "" }
+ input = {1: '', 4: 'this is id 4', 6: 'this is id 6', 10: ''}
output = data_pack.WriteDataPackToString(input, data_pack.UTF8)
self.failUnless(output == expected)
+ def testRePackUnittest(self):
+ expected_with_whitelist = {
+ 1: 'Never gonna', 10: 'give you up', 20: 'Never gonna let',
+ 30: 'you down', 40: 'Never', 50: 'gonna run around and',
+ 60: 'desert you'}
+ expected_without_whitelist = {
+ 1: 'Never gonna', 10: 'give you up', 20: 'Never gonna let', 65: 'Close',
+ 30: 'you down', 40: 'Never', 50: 'gonna run around and', 4: 'click',
+ 60: 'desert you', 6: 'chirr', 32: 'oops, try again', 70: 'Awww, snap!'}
+ inputs = [{1: 'Never gonna', 4: 'click', 6: 'chirr', 10: 'give you up'},
+ {20: 'Never gonna let', 30: 'you down', 32: 'oops, try again'},
+ {40: 'Never', 50: 'gonna run around and', 60: 'desert you'},
+ {65: 'Close', 70: 'Awww, snap!'}]
+ whitelist = [1, 10, 20, 30, 40, 50, 60]
+ inputs = [data_pack.DataPackContents(input, data_pack.UTF8) for input
+ in inputs]
+
+ # RePack using whitelist
+ output, _ = data_pack.RePackFromDataPackStrings(inputs, whitelist)
+ self.assertDictEqual(expected_with_whitelist, output,
+ 'Incorrect resource output')
+
+ # RePack a None whitelist
+ output, _ = data_pack.RePackFromDataPackStrings(inputs, None)
+ self.assertDictEqual(expected_without_whitelist, output,
+ 'Incorrect resource output')
+
if __name__ == '__main__':
unittest.main()
diff --git a/chromium/tools/grit/grit/format/html_inline.py b/chromium/tools/grit/grit/format/html_inline.py
index 589e49b6a94..66a957aec77 100755
--- a/chromium/tools/grit/grit/format/html_inline.py
+++ b/chromium/tools/grit/grit/format/html_inline.py
@@ -19,6 +19,14 @@ import mimetypes
from grit import lazy_re
from grit import util
+# There is a python bug that makes mimetypes crash if the Windows
+# registry contains non-Latin keys ( http://bugs.python.org/issue9291
+# ). Initing manually and blocking external mime-type databases will
+# prevent that bug and if we add svg manually, it will still give us
+# the data we need.
+mimetypes.init([])
+mimetypes.add_type('image/svg+xml', '.svg')
+
DIST_DEFAULT = 'chromium'
DIST_ENV_VAR = 'CHROMIUM_BUILD'
DIST_SUBSTR = '%DISTRIBUTION%'
@@ -46,17 +54,6 @@ _ICON_RE = lazy_re.compile(
re.MULTILINE)
-
-def FixupMimeType(mime_type):
- """Helper function that normalizes platform differences in the mime type
- returned by the Python's mimetypes.guess_type API.
- """
- mappings = {
- 'image/x-png': 'image/png'
- }
- return mappings[mime_type] if mime_type in mappings else mime_type
-
-
def GetDistribution():
"""Helper function that gets the distribution we are building.
@@ -109,7 +106,10 @@ def SrcInlineAsDataURL(
if names_only:
return ""
- mimetype = FixupMimeType(mimetypes.guess_type(filename)[0]) or 'text/plain'
+ mimetype = mimetypes.guess_type(filename)[0]
+ if mimetype is None:
+ raise Exception('%s is of an an unknown type and '
+ 'cannot be stored in a data url.' % filename)
inline_data = base64.standard_b64encode(util.ReadFile(filepath, util.BINARY))
prefix = src_match.string[src_match.start():src_match.start('filename')]
diff --git a/chromium/tools/grit/grit/format/policy_templates/policy_template_generator.py b/chromium/tools/grit/grit/format/policy_templates/policy_template_generator.py
index e742b384b7b..11d097ebd66 100644
--- a/chromium/tools/grit/grit/format/policy_templates/policy_template_generator.py
+++ b/chromium/tools/grit/grit/format/policy_templates/policy_template_generator.py
@@ -5,7 +5,6 @@
import copy
-import types
class PolicyTemplateGenerator:
@@ -78,12 +77,6 @@ class PolicyTemplateGenerator:
for supported_on_item in supported_on:
product_platform_part, version_part = supported_on_item.split(':')
- # TODO(joaodasilva): enable parsing 'android' as a platform and including
- # that platform in the generated documentation. Just skip it for now to
- # prevent build failures.
- if product_platform_part == 'android':
- continue
-
if '.' in product_platform_part:
product, platform = product_platform_part.split('.')
if platform == '*':
@@ -94,11 +87,12 @@ class PolicyTemplateGenerator:
platforms = [platform]
else:
# e.g.: 'chrome_frame:7-'
- product = product_platform_part
- platform = {
- 'chrome_os': 'chrome_os',
- 'chrome_frame': 'win'
- }[product]
+ product, platform = {
+ 'android': ('chrome', 'android'),
+ 'chrome_os': ('chrome_os', 'chrome_os'),
+ 'chrome_frame': ('chrome_frame', 'win'),
+ 'ios': ('chrome', 'ios'),
+ }[product_platform_part]
platforms = [platform]
since_version, until_version = version_part.split('-')
result.append({
@@ -109,20 +103,6 @@ class PolicyTemplateGenerator:
})
return result
- def _PrintPolicyValue(self, item):
- '''Produces a string representation for a policy value. Taking care to print
- dictionaries in a sorted order.'''
- if type(item) == types.StringType:
- str_val = "'%s'" % item
- elif isinstance(item, dict):
- str_val = "{";
- for it in sorted(item.iterkeys()):
- str_val += "\'%s\': %s, " % (it, self._PrintPolicyValue(item[it]))
- str_val = str_val.rstrip(", ") + "}";
- else:
- str_val = str(item)
- return str_val;
-
def _ProcessPolicy(self, policy):
'''Processes localized message strings in a policy or a group.
Also breaks up the content of 'supported_on' attribute into a list.
@@ -142,8 +122,6 @@ class PolicyTemplateGenerator:
# Iterate through all the items of an enum-type policy, and add captions.
for item in policy['items']:
item['caption'] = self._ImportMessage(item['caption'])
- elif policy['type'] == 'dict' and 'example_value' in policy:
- policy['example_value'] = self._PrintPolicyValue(policy['example_value'])
if policy['type'] != 'group':
if not 'label' in policy:
# If 'label' is not specified, then it defaults to 'caption':
diff --git a/chromium/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py b/chromium/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py
index 41757d92641..36000055f4b 100644
--- a/chromium/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py
+++ b/chromium/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py
@@ -18,7 +18,7 @@ from grit.format.policy_templates.writers import adml_writer
from grit.format.policy_templates.writers import xml_writer_base_unittest
-class AdmlWriterTest(xml_writer_base_unittest.XmlWriterBaseTest):
+class AdmlWriterUnittest(xml_writer_base_unittest.XmlWriterBaseTest):
def setUp(self):
config = {
diff --git a/chromium/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py b/chromium/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py
index 9a2a58ee472..c99131f819b 100644
--- a/chromium/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py
+++ b/chromium/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py
@@ -19,7 +19,7 @@ from grit.format.policy_templates.writers import xml_writer_base_unittest
from xml.dom import minidom
-class AdmxWriterTest(xml_writer_base_unittest.XmlWriterBaseTest):
+class AdmxWriterUnittest(xml_writer_base_unittest.XmlWriterBaseTest):
def _CreateDocumentElement(self):
dom_impl = minidom.getDOMImplementation('')
diff --git a/chromium/tools/grit/grit/format/policy_templates/writers/doc_writer.py b/chromium/tools/grit/grit/format/policy_templates/writers/doc_writer.py
index 09362ffe471..7cca9762a69 100644
--- a/chromium/tools/grit/grit/format/policy_templates/writers/doc_writer.py
+++ b/chromium/tools/grit/grit/format/policy_templates/writers/doc_writer.py
@@ -234,41 +234,32 @@ class DocWriter(xml_formatted_writer.XMLFormattedWriter):
if self.IsPolicySupportedOnPlatform(policy, 'mac'):
self._AddListExampleMac(examples, policy)
- def _PythonDictionaryToMacDictionary(self, dictionary, indent=''):
- '''Converts a python dictionary to an equivalent XML plist.
-
- Returns a list of lines, with one dictionary entry per line.'''
- result = [indent + '<dict>']
- indent += ' '
- for k in sorted(dictionary.keys()):
- v = dictionary[k]
- result.append('%s<key>%s</key>' % (indent, k))
- value_type = type(v)
- if value_type == bool:
- result.append('%s<%s/>' % (indent, 'true' if v else 'false'))
- elif value_type == int:
- result.append('%s<integer>%s</integer>' % (indent, v))
- elif value_type == str:
- result.append('%s<string>%s</string>' % (indent, v))
- elif value_type == dict:
- result += self._PythonDictionaryToMacDictionary(v, indent)
- elif value_type == list:
- array = []
- if len(v) != 0:
- if type(v[0]) == str:
- array = ['%s <string>%s</string>' % (indent, x) for x in v]
- elif type(v[0]) == dict:
- for x in v:
- array += self._PythonDictionaryToMacDictionary(x, indent + ' ')
- else:
- raise Exception('Must be list of string or dict.')
- result.append('%s<array>' % indent)
- result += array
- result.append('%s</array>' % indent)
- else:
- raise Exception('Invalid example value type %s' % value_type)
- result.append(indent[2:] + '</dict>')
- return result
+ def _PythonObjectToPlist(self, obj, indent=''):
+ '''Converts a python object to an equivalent XML plist.
+
+ Returns a list of lines.'''
+ obj_type = type(obj)
+ if obj_type == bool:
+ return [ '%s<%s/>' % (indent, 'true' if obj else 'false') ]
+ elif obj_type == int:
+ return [ '%s<integer>%s</integer>' % (indent, obj) ]
+ elif obj_type == str:
+ return [ '%s<string>%s</string>' % (indent, obj) ]
+ elif obj_type == list:
+ result = [ '%s<array>' % indent ]
+ for item in obj:
+ result += self._PythonObjectToPlist(item, indent + ' ')
+ result.append('%s</array>' % indent)
+ return result
+ elif obj_type == dict:
+ result = [ '%s<dict>' % indent ]
+ for key in sorted(obj.keys()):
+ result.append('%s<key>%s</key>' % (indent + ' ', key))
+ result += self._PythonObjectToPlist(obj[key], indent + ' ')
+ result.append('%s</dict>' % indent)
+ return result
+ else:
+ raise Exception('Invalid object to convert: %s' % obj)
def _AddDictionaryExampleMac(self, parent, policy):
'''Adds an example value for Mac of a 'dict' policy to a DOM node.
@@ -282,7 +273,7 @@ class DocWriter(xml_formatted_writer.XMLFormattedWriter):
self.AddElement(parent, 'dt', {}, 'Mac:')
mac = self._AddStyledElement(parent, 'dd', ['.monospace', '.pre'])
mac_text = ['<key>%s</key>' % (policy['name'])]
- mac_text += self._PythonDictionaryToMacDictionary(example_value)
+ mac_text += self._PythonObjectToPlist(example_value)
self.AddText(mac, '\n'.join(mac_text))
def _AddDictionaryExampleWindows(self, parent, policy):
@@ -626,6 +617,8 @@ class DocWriter(xml_formatted_writer.XMLFormattedWriter):
'mac': 'Mac',
'linux': 'Linux',
'chrome_os': self.config['os_name'],
+ 'android': 'Android',
+ 'ios': 'iOS',
}
# Human-readable names of supported products.
self._PRODUCT_MAP = {
diff --git a/chromium/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py b/chromium/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py
index 96755cae297..6c087d528e9 100644
--- a/chromium/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py
+++ b/chromium/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py
@@ -341,6 +341,16 @@ See <a href="http://policy-explanation.example.com">http://policy-explanation.ex
'platforms': ['win', 'mac', 'linux'],
'since_version': '8',
'until_version': '',
+ }, {
+ 'product': 'chrome',
+ 'platforms': ['android'],
+ 'since_version': '30',
+ 'until_version': '',
+ }, {
+ 'product': 'chrome',
+ 'platforms': ['ios'],
+ 'since_version': '34',
+ 'until_version': '',
}],
'features': {'dynamic_refresh': False},
'example_value': False
@@ -359,6 +369,8 @@ See <a href="http://policy-explanation.example.com">http://policy-explanation.ex
'<dd>'
'<ul style="style_ul;">'
'<li>Chrome (Windows, Mac, Linux) ...8...</li>'
+ '<li>Chrome (Android) ...30...</li>'
+ '<li>Chrome (iOS) ...34...</li>'
'</ul>'
'</dd>'
'<dt style="style_dt;">_test_supported_features</dt>'
diff --git a/chromium/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py b/chromium/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py
new file mode 100644
index 00000000000..1da64aaf78d
--- /dev/null
+++ b/chromium/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py
@@ -0,0 +1,122 @@
+#!/usr/bin/env python
+# Copyright (c) 2014 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.
+
+
+import base64
+
+from xml.dom import minidom
+from grit.format.policy_templates.writers import plist_writer
+
+
+# This writer outputs a Property List with an example for each of the policies
+# supported on iOS. This plist can be pushed to Chrome on iOS via the MDM API
+# introduced in iOS 7.
+
+CHROME_POLICY_COMMENT = '''\
+ ChromePolicy is the preferred key to configure Chrome.
+ Each of the keys in this <dict> configures a Chrome policy.
+ All of the Chrome policies are configured with an example
+ value below.
+ Note that it's not necessary to configure all of them. '''
+
+ENCODED_CHROME_POLICY_COMMENT = '''\
+ EncodedChromePolicy contains a Property List file, encoded in Base64,
+ which contains the same policies that can go in ChromePolicy.
+ This key can be used by vendors that restrict the app configuration
+ types to strings.
+ The value of this string can be validated by running these
+ commands in Mac OS X:
+
+ # (first, copy-paste the string into a file named "policy.plist")
+ # base64 -D < policy.plist > decoded_policy.plist
+ # plutil -lint decoded_policy.plist
+
+ plutil should indicate that decoded_policy.plist is valid,
+ otherwise Chrome will reject the encoded string too.
+
+ This command can be used to pretty-print the plist file:
+
+ # plutil -convert xml1 decoded_policy.plist
+
+ Note that <ChromePolicy> is the preferred key to configure Chrome.
+ If <ChromePolicy> is present then <EncodedChromePolicy> is ignored. '''
+
+def GetWriter(config):
+ '''Factory method for creating IOSPlistWriter objects.
+ See the constructor of TemplateWriter for description of
+ arguments.
+ '''
+ return IOSPlistWriter(['ios'], config)
+
+
+class IOSPlistWriter(plist_writer.PListWriter):
+ '''Class for generating policy templates in the iOS plist format.
+ It is used by PolicyTemplateGenerator to write plist files.
+ '''
+
+ # Overridden.
+ def IsPolicySupported(self, policy):
+ # Output examples only for policies that are supported on iOS.
+ for support_on in policy['supported_on']:
+ if ('ios' in support_on['platforms'] and
+ support_on['until_version'] == '' and
+ super(IOSPlistWriter, self).IsPolicySupported(policy)):
+ return True
+ return False
+
+ def _WriteValue(self, parent, value):
+ if type(value) == bool:
+ self.AddElement(parent, 'true' if value else 'false')
+ elif type(value) == int:
+ self.AddElement(parent, 'integer', {}, str(value))
+ elif type(value) == str:
+ self.AddElement(parent, 'string', {}, value)
+ elif type(value) == list:
+ array = self.AddElement(parent, 'array')
+ for element in value:
+ self._WriteValue(array, element)
+ elif type(value) == dict:
+ dic = self.AddElement(parent, 'dict')
+ for k, v in sorted(value.iteritems()):
+ self.AddElement(dic, 'key', {}, k)
+ self._WriteValue(dic, v)
+ else:
+ raise ValueError('Unsupported type in example value: ' + type(value))
+
+ # Overridden.
+ def WritePolicy(self, policy):
+ for dict in [self._dict, self._encoded_dict]:
+ self.AddElement(dict, 'key', {}, policy['name'])
+ self._WriteValue(dict, policy['example_value'])
+
+ # Overridden.
+ # |self._plist| is created in super.Init().
+ def BeginTemplate(self):
+ self._plist.attributes['version'] = '1.0'
+ self._root_dict = self.AddElement(self._plist, 'dict')
+ self.AddComment(self._root_dict, CHROME_POLICY_COMMENT)
+ self._dict = self._AddKeyValuePair(self._root_dict, 'ChromePolicy', 'dict')
+
+ self._encoded_plist.attributes['version'] = '1.0'
+ self._encoded_dict = self.AddElement(self._encoded_plist, 'dict')
+
+ # Overridden.
+ def EndTemplate(self):
+ # Add the "EncodedChromePolicy" entry.
+ encoded = base64.b64encode(self._encoded_doc.toxml())
+ self.AddComment(self._root_dict, ENCODED_CHROME_POLICY_COMMENT)
+ self._AddStringKeyValuePair(self._root_dict, 'EncodedChromePolicy', encoded)
+
+ # Overridden.
+ def Init(self):
+ super(IOSPlistWriter, self).Init()
+ # Create a secondary DOM for the EncodedChromePolicy Plist, which will be
+ # serialized and encoded in EndTemplate.
+ self._encoded_doc = self.CreatePlistDocument()
+ self._encoded_plist = self._encoded_doc.documentElement
+
+ # Overridden.
+ def GetTemplateText(self):
+ return self.ToPrettyXml(self._doc, encoding='UTF-8')
diff --git a/chromium/tools/grit/grit/format/policy_templates/writers/ios_plist_writer_unittest.py b/chromium/tools/grit/grit/format/policy_templates/writers/ios_plist_writer_unittest.py
new file mode 100644
index 00000000000..14a0cab1edc
--- /dev/null
+++ b/chromium/tools/grit/grit/format/policy_templates/writers/ios_plist_writer_unittest.py
@@ -0,0 +1,208 @@
+#!/usr/bin/env python
+# Copyright (c) 2014 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.
+
+'''Unit tests for grit.format.policy_templates.writers.ios_plist_writer'''
+
+
+import base64
+import functools
+import os
+import plistlib
+import sys
+if __name__ == '__main__':
+ sys.path.append(os.path.join(os.path.dirname(__file__), '../../../..'))
+
+import unittest
+
+try:
+ import Cocoa
+except:
+ Cocoa = None
+
+from grit.format.policy_templates.writers import writer_unittest_common
+
+
+class IOSPListWriterUnittest(writer_unittest_common.WriterUnittestCommon):
+ '''Unit tests for IOSPListWriter.'''
+
+ def _ParseWithPython(self, decode, text):
+ '''Parses a serialized Plist, using Python's plistlib.
+
+ If |decode| is true then |text| is decoded as Base64 before being
+ deserialized as a Plist.'''
+ if decode:
+ text = base64.b64decode(text)
+ return plistlib.readPlistFromString(text)
+
+ def _ParseWithCocoa(self, decode, text):
+ '''Parses a serialized Plist, using Cocoa's python bindings.
+
+ If |decode| is true then |text| is decoded as Base64 before being
+ deserialized as a Plist.'''
+ if decode:
+ data = Cocoa.NSData.alloc().initWithBase64EncodedString_options_(text, 0)
+ else:
+ data = Cocoa.NSData.alloc().initWithBytes_length_(text, len(text))
+ result = Cocoa.NSPropertyListSerialization. \
+ propertyListFromData_mutabilityOption_format_errorDescription_(
+ data, Cocoa.NSPropertyListImmutable, None, None)
+ return result[0]
+
+ def _VerifyGeneratedOutputWithParsers(self,
+ templates,
+ expected_output,
+ parse,
+ decode_and_parse):
+ # Generate the grit output for |templates|.
+ output = self.GetOutput(
+ self.PrepareTest(templates),
+ 'fr',
+ { '_chromium': '1', 'mac_bundle_id': 'com.example.Test' },
+ 'ios_plist',
+ 'en')
+
+ # Parse it as a Plist.
+ plist = parse(output)
+ self.assertEquals(len(plist), 2)
+ self.assertTrue('ChromePolicy' in plist)
+ self.assertTrue('EncodedChromePolicy' in plist)
+
+ # Get the 2 expected fields.
+ chrome_policy = plist['ChromePolicy']
+ encoded_chrome_policy = plist['EncodedChromePolicy']
+
+ # Verify the ChromePolicy.
+ self.assertEquals(chrome_policy, expected_output)
+
+ # Decode the EncodedChromePolicy and verify it.
+ decoded_chrome_policy = decode_and_parse(encoded_chrome_policy)
+ self.assertEquals(decoded_chrome_policy, expected_output)
+
+ def _VerifyGeneratedOutput(self, templates, expected):
+ # plistlib is available on all Python platforms.
+ parse = functools.partial(self._ParseWithPython, False)
+ decode_and_parse = functools.partial(self._ParseWithPython, True)
+ self._VerifyGeneratedOutputWithParsers(
+ templates, expected, parse, decode_and_parse)
+
+ # The Cocoa bindings are available on Mac OS X only.
+ if Cocoa:
+ parse = functools.partial(self._ParseWithCocoa, False)
+ decode_and_parse = functools.partial(self._ParseWithCocoa, True)
+ self._VerifyGeneratedOutputWithParsers(
+ templates, expected, parse, decode_and_parse)
+
+ def _MakeTemplate(self, name, type, example, extra=''):
+ return '''
+ {
+ 'policy_definitions': [
+ {
+ 'name': '%s',
+ 'type': '%s',
+ 'desc': '',
+ 'caption': '',
+ 'supported_on': ['ios:35-'],
+ 'example_value': %s,
+ %s
+ },
+ ],
+ 'placeholders': [],
+ 'messages': {},
+ }
+ ''' % (name, type, example, extra)
+
+ def testEmpty(self):
+ templates = '''
+ {
+ 'policy_definitions': [],
+ 'placeholders': [],
+ 'messages': {},
+ }
+ '''
+ expected = {}
+ self._VerifyGeneratedOutput(templates, expected)
+
+ def testBoolean(self):
+ templates = self._MakeTemplate('BooleanPolicy', 'main', 'True')
+ expected = {
+ 'BooleanPolicy': True,
+ }
+ self._VerifyGeneratedOutput(templates, expected)
+
+ def testString(self):
+ templates = self._MakeTemplate('StringPolicy', 'string', '"Foo"')
+ expected = {
+ 'StringPolicy': 'Foo',
+ }
+ self._VerifyGeneratedOutput(templates, expected)
+
+ def testStringEnum(self):
+ templates = self._MakeTemplate(
+ 'StringEnumPolicy', 'string-enum', '"Foo"',
+ '''
+ 'items': [
+ { 'name': 'Foo', 'value': 'Foo', 'caption': '' },
+ { 'name': 'Bar', 'value': 'Bar', 'caption': '' },
+ ],
+ ''')
+ expected = {
+ 'StringEnumPolicy': 'Foo',
+ }
+ self._VerifyGeneratedOutput(templates, expected)
+
+ def testInt(self):
+ templates = self._MakeTemplate('IntPolicy', 'int', '42')
+ expected = {
+ 'IntPolicy': 42,
+ }
+ self._VerifyGeneratedOutput(templates, expected)
+
+ def testIntEnum(self):
+ templates = self._MakeTemplate(
+ 'IntEnumPolicy', 'int-enum', '42',
+ '''
+ 'items': [
+ { 'name': 'Foo', 'value': 100, 'caption': '' },
+ { 'name': 'Bar', 'value': 42, 'caption': '' },
+ ],
+ ''')
+ expected = {
+ 'IntEnumPolicy': 42,
+ }
+ self._VerifyGeneratedOutput(templates, expected)
+
+ def testStringList(self):
+ templates = self._MakeTemplate('StringListPolicy', 'list', '["a", "b"]')
+ expected = {
+ 'StringListPolicy': [ "a", "b" ],
+ }
+ self._VerifyGeneratedOutput(templates, expected)
+
+ def testListOfDictionary(self):
+ templates = self._MakeTemplate(
+ 'ManagedBookmarks', 'dict',
+ '''
+ [
+ {
+ "name": "Google Search",
+ "url": "www.google.com",
+ },
+ {
+ "name": "Youtube",
+ "url": "www.youtube.com",
+ }
+ ]
+ ''')
+ expected = {
+ 'ManagedBookmarks': [
+ { "name": "Google Search", "url": "www.google.com" },
+ { "name": "Youtube", "url": "www.youtube.com" },
+ ],
+ }
+ self._VerifyGeneratedOutput(templates, expected)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/chromium/tools/grit/grit/format/policy_templates/writers/json_writer.py b/chromium/tools/grit/grit/format/policy_templates/writers/json_writer.py
index 4739483b10d..673bbf7deec 100644
--- a/chromium/tools/grit/grit/format/policy_templates/writers/json_writer.py
+++ b/chromium/tools/grit/grit/format/policy_templates/writers/json_writer.py
@@ -3,6 +3,8 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import json
+
from textwrap import TextWrapper
from grit.format.policy_templates.writers import template_writer
@@ -38,28 +40,10 @@ class JsonWriter(template_writer.TemplateWriter):
return self.FlattenGroupsAndSortPolicies(policy_list)
def WritePolicy(self, policy):
- example_value = policy['example_value']
- if policy['type'] == 'string':
- example_value_str = '"' + example_value + '"'
- elif policy['type'] in ('int', 'int-enum', 'dict'):
- example_value_str = str(example_value)
- elif policy['type'] == 'list':
- if example_value == []:
- example_value_str = '[]'
- else:
- example_value_str = '["%s"]' % '", "'.join(example_value)
- elif policy['type'] == 'main':
- if example_value == True:
- example_value_str = 'true'
- else:
- example_value_str = 'false'
- elif policy['type'] == 'string-enum':
- example_value_str = '"%s"' % example_value;
- elif policy['type'] == 'external':
+ if policy['type'] == 'external':
# This type can only be set through cloud policy.
return
- else:
- raise Exception('unknown policy type %s:' % policy['type'])
+ example_value_str = json.dumps(policy['example_value'], sort_keys=True)
# Add comma to the end of the previous line.
if not self._first_written:
diff --git a/chromium/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py b/chromium/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py
index 1281c19d952..00acde3db51 100644
--- a/chromium/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py
+++ b/chromium/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py
@@ -235,13 +235,13 @@ class JsonWriterUnittest(writer_unittest_common.WriterUnittestCommon):
# Tests a policy group with a single policy of type 'dict'.
example = {
'bool': True,
- 'int': 10,
- 'string': 'abc',
- 'list': [1, 2, 3],
'dict': {
'a': 1,
'b': 2,
- }
+ },
+ 'int': 10,
+ 'list': [1, 2, 3],
+ 'string': 'abc',
}
grd = self.PrepareTest(
'{'
@@ -264,8 +264,8 @@ class JsonWriterUnittest(writer_unittest_common.WriterUnittestCommon):
' // Example Dictionary Policy\n' +
HEADER_DELIMETER +
' // Example Dictionary Policy\n\n'
- ' //"DictionaryPolicy": {\'bool\': True, \'dict\': {\'a\': 1, '
- '\'b\': 2}, \'int\': 10, \'list\': [1, 2, 3], \'string\': \'abc\'}\n\n'
+ ' //"DictionaryPolicy": {"bool": true, "dict": {"a": 1, '
+ '"b": 2}, "int": 10, "list": [1, 2, 3], "string": "abc"}\n\n'
'}')
self.CompareOutputs(output, expected_output)
diff --git a/chromium/tools/grit/grit/format/policy_templates/writers/plist_writer.py b/chromium/tools/grit/grit/format/policy_templates/writers/plist_writer.py
index 25a8c0bbdc7..22978581ea4 100644
--- a/chromium/tools/grit/grit/format/policy_templates/writers/plist_writer.py
+++ b/chromium/tools/grit/grit/format/policy_templates/writers/plist_writer.py
@@ -9,6 +9,10 @@ from grit.format.policy_templates.writers import plist_helper
from grit.format.policy_templates.writers import xml_formatted_writer
+# This writer outputs a Preferences Manifest file as documented at
+# https://developer.apple.com/library/mac/documentation/MacOSXServer/Conceptual/Preference_Manifest_Files
+
+
def GetWriter(config):
'''Factory method for creating PListWriter objects.
See the constructor of TemplateWriter for description of
@@ -103,6 +107,11 @@ class PListWriter(xml_formatted_writer.XMLFormattedWriter):
else:
element_type = 'string'
self.AddElement(range_list, element_type, {}, str(item['value']))
+ elif policy_type == 'list':
+ subkeys = self._AddKeyValuePair(dict, 'pfm_subkeys', 'array')
+ subkeys_dict = self.AddElement(subkeys, 'dict')
+ subkeys_type = self._AddKeyValuePair(subkeys_dict, 'pfm_type', 'string')
+ self.AddText(subkeys_type, 'string')
def BeginTemplate(self):
self._plist.attributes['version'] = '1'
@@ -118,13 +127,16 @@ class PListWriter(xml_formatted_writer.XMLFormattedWriter):
self._array = self._AddKeyValuePair(dict, 'pfm_subkeys', 'array')
- def Init(self):
+ def CreatePlistDocument(self):
dom_impl = minidom.getDOMImplementation('')
doctype = dom_impl.createDocumentType(
'plist',
'-//Apple//DTD PLIST 1.0//EN',
'http://www.apple.com/DTDs/PropertyList-1.0.dtd')
- self._doc = dom_impl.createDocument(None, 'plist', doctype)
+ return dom_impl.createDocument(None, 'plist', doctype)
+
+ def Init(self):
+ self._doc = self.CreatePlistDocument()
self._plist = self._doc.documentElement
def GetTemplateText(self):
diff --git a/chromium/tools/grit/grit/format/policy_templates/writers/reg_writer.py b/chromium/tools/grit/grit/format/policy_templates/writers/reg_writer.py
index 716cd7449fb..beb15904f13 100644
--- a/chromium/tools/grit/grit/format/policy_templates/writers/reg_writer.py
+++ b/chromium/tools/grit/grit/format/policy_templates/writers/reg_writer.py
@@ -4,6 +4,8 @@
# found in the LICENSE file.
+import json
+
from grit.format.policy_templates.writers import template_writer
@@ -64,9 +66,10 @@ class RegWriter(template_writer.TemplateWriter):
i = i + 1
else:
self._StartBlock(key, None, list)
- if policy['type'] in ('string', 'dict'):
- escaped_str = self._EscapeRegString(str(example_value))
- example_value_str = '"' + escaped_str + '"'
+ if policy['type'] in ('string', 'string-enum', 'dict'):
+ example_value_str = json.dumps(example_value, sort_keys=True)
+ if policy['type'] == 'dict':
+ example_value_str = '"%s"' % example_value_str
elif policy['type'] == 'main':
if example_value == True:
example_value_str = 'dword:00000001'
@@ -74,8 +77,6 @@ class RegWriter(template_writer.TemplateWriter):
example_value_str = 'dword:00000000'
elif policy['type'] in ('int', 'int-enum'):
example_value_str = 'dword:%08x' % example_value
- elif policy['type'] == 'string-enum':
- example_value_str = '"%s"' % example_value
else:
raise Exception('unknown policy type %s:' % policy['type'])
diff --git a/chromium/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py b/chromium/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py
index d84599c8230..d559c9f6fd9 100644
--- a/chromium/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py
+++ b/chromium/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py
@@ -216,13 +216,13 @@ class RegWriterUnittest(writer_unittest_common.WriterUnittestCommon):
# Tests a policy group with a single policy of type 'dict'.
example = {
'bool': True,
- 'int': 10,
- 'string': 'abc',
- 'list': [1, 2, 3],
'dict': {
'a': 1,
'b': 2,
- }
+ },
+ 'int': 10,
+ 'list': [1, 2, 3],
+ 'string': 'abc',
}
grd = self.PrepareTest(
'{'
@@ -244,8 +244,8 @@ class RegWriterUnittest(writer_unittest_common.WriterUnittestCommon):
'Windows Registry Editor Version 5.00',
'',
'[HKEY_LOCAL_MACHINE\\Software\\Policies\\Chromium]',
- '"DictionaryPolicy"="{\'bool\': True, \'dict\': {\'a\': 1, '
- '\'b\': 2}, \'int\': 10, \'list\': [1, 2, 3], \'string\': \'abc\'}"'])
+ '"DictionaryPolicy"="{"bool": true, "dict": {"a": 1, '
+ '"b": 2}, "int": 10, "list": [1, 2, 3], "string": "abc"}"'])
self.CompareOutputs(output, expected_output)
def testNonSupportedPolicy(self):
diff --git a/chromium/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py b/chromium/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py
index b28d8b672db..dad3717bfdc 100644
--- a/chromium/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py
+++ b/chromium/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py
@@ -53,7 +53,11 @@ class XMLFormattedWriter(template_writer.TemplateWriter):
attribute.value = value
parent.setAttributeNode(attribute)
- def ToPrettyXml(self, doc):
+ def AddComment(self, parent, comment):
+ '''Adds a comment node.'''
+ parent.appendChild(parent.ownerDocument.createComment(comment))
+
+ def ToPrettyXml(self, doc, **kwargs):
# return doc.toprettyxml(indent=' ')
# The above pretty-printer does not print the doctype and adds spaces
# around texts, e.g.:
@@ -66,7 +70,7 @@ class XMLFormattedWriter(template_writer.TemplateWriter):
# So we use the poor man's pretty printer here. It assumes that there are
# no mixed-content nodes.
# Get all the XML content in a one-line string.
- xml = doc.toxml()
+ xml = doc.toxml(**kwargs)
# Determine where the line breaks will be. (They will only be between tags.)
lines = xml[1:len(xml) - 1].split('><')
indent = ''
diff --git a/chromium/tools/grit/grit/format/rc_header.py b/chromium/tools/grit/grit/format/rc_header.py
index 118e94ce951..74e7127b584 100644
--- a/chromium/tools/grit/grit/format/rc_header.py
+++ b/chromium/tools/grit/grit/format/rc_header.py
@@ -30,11 +30,13 @@ def Format(root, lang='en', output_dir='.'):
for line in emit_lines or default_includes:
yield line + '\n'
- for line in FormatDefines(root, root.ShouldOutputAllResourceDefines()):
+ for line in FormatDefines(root, root.ShouldOutputAllResourceDefines(),
+ root.GetRcHeaderFormat()):
yield line
-def FormatDefines(root, output_all_resource_defines=True):
+def FormatDefines(root, output_all_resource_defines=True,
+ rc_header_format=None):
'''Yields #define SYMBOL 1234 lines.
Args:
@@ -50,6 +52,9 @@ def FormatDefines(root, output_all_resource_defines=True):
else:
items = root.ActiveDescendants()
+ if not rc_header_format:
+ rc_header_format = "#define {textual_id} {numeric_id}"
+ rc_header_format += "\n"
seen = set()
for item in items:
if not isinstance(item, message.MessageNode):
@@ -57,7 +62,8 @@ def FormatDefines(root, output_all_resource_defines=True):
for tid in item.GetTextualIds():
if tid in tids and tid not in seen:
seen.add(tid)
- yield '#define %s %d\n' % (tid, tids[tid])
+ yield rc_header_format.format(textual_id=tid,numeric_id=tids[tid])
+
# Temporarily mimic old behavior: MessageNodes were only output if active,
# even with output_all_resource_defines set. TODO(benrg): Remove this after
# fixing problems in the Chrome tree.
@@ -67,7 +73,7 @@ def FormatDefines(root, output_all_resource_defines=True):
for tid in item.GetTextualIds():
if tid in tids and tid not in seen:
seen.add(tid)
- yield '#define %s %d\n' % (tid, tids[tid])
+ yield rc_header_format.format(textual_id=tid,numeric_id=tids[tid])
_cached_ids = {}
diff --git a/chromium/tools/grit/grit/format/rc_header_unittest.py b/chromium/tools/grit/grit/format/rc_header_unittest.py
index 433ff7d8027..5d780e3e44a 100644
--- a/chromium/tools/grit/grit/format/rc_header_unittest.py
+++ b/chromium/tools/grit/grit/format/rc_header_unittest.py
@@ -154,6 +154,40 @@ class RcHeaderFormatterUnittest(unittest.TestCase):
output = util.StripBlankLinesAndComments(output)
self.assertEqual('#pragma once\nBingo', output)
+ def testRcHeaderFormat(self):
+ grd = grd_reader.Parse(StringIO.StringIO('''<?xml version="1.0" encoding="UTF-8"?>
+ <grit latest_public_release="2" source_lang_id="en" current_release="3" base_dir=".">
+ <release seq="3">
+ <includes first_id="300" comment="bingo">
+ <include type="gif" name="IDR_LOGO" file="images/logo.gif" />
+ </includes>
+ <messages first_id="10000">
+ <message name="IDS_GREETING" desc="Printed to greet the currently logged in user">
+ Hello <ph name="USERNAME">%s<ex>Joi</ex></ph>, how are you doing today?
+ </message>
+ <message name="IDS_BONGO">
+ Bongo!
+ </message>
+ </messages>
+ </release>
+ </grit>'''), '.')
+
+ # Using the default rc_header format string.
+ output = rc_header.FormatDefines(grd, grd.ShouldOutputAllResourceDefines(),
+ grd.GetRcHeaderFormat())
+ self.assertEqual(('#define IDR_LOGO 300\n'
+ '#define IDS_GREETING 10000\n'
+ '#define IDS_BONGO 10001\n'), ''.join(output))
+
+ # Using a custom rc_header format string.
+ grd.AssignRcHeaderFormat(
+ '#define {textual_id} _Pragma("{textual_id}") {numeric_id}')
+ output = rc_header.FormatDefines(grd, grd.ShouldOutputAllResourceDefines(),
+ grd.GetRcHeaderFormat())
+ self.assertEqual(('#define IDR_LOGO _Pragma("IDR_LOGO") 300\n'
+ '#define IDS_GREETING _Pragma("IDS_GREETING") 10000\n'
+ '#define IDS_BONGO _Pragma("IDS_BONGO") 10001\n'),
+ ''.join(output))
if __name__ == '__main__':
unittest.main()
diff --git a/chromium/tools/grit/grit/format/repack.py b/chromium/tools/grit/grit/format/repack.py
index e42acdbfc57..337b7af20b5 100755
--- a/chromium/tools/grit/grit/format/repack.py
+++ b/chromium/tools/grit/grit/format/repack.py
@@ -9,19 +9,29 @@ http://dev.chromium.org/developers/design-documents/linuxresourcesandlocalizedst
for details about the file format.
"""
+import optparse
import os
import sys
+
if __name__ == '__main__':
sys.path.append(os.path.join(os.path.dirname(__file__), '../..'))
import grit.format.data_pack
+
def main(argv):
- if len(argv) < 3:
- print ("Usage:\n %s <output_filename> <input_file1> [input_file2] ... " %
- argv[0])
- sys.exit(-1)
- grit.format.data_pack.RePack(argv[1], argv[2:])
+ parser = optparse.OptionParser('usage: %prog [options] <output_filename>'
+ '<input_file1> [input_file2] ...')
+ parser.add_option('--whitelist', action='store', dest='whitelist',
+ default=None, help='Full path to the whitelist used to'
+ 'filter output pak file resource IDs')
+ options, file_paths = parser.parse_args(argv)
+
+ if len(file_paths) < 2:
+ parser.error('Please specify output and at least one input filenames')
+
+ grit.format.data_pack.RePack(file_paths[0], file_paths[1:],
+ whitelist_file=options.whitelist)
if '__main__' == __name__:
- main(sys.argv)
+ main(sys.argv[1:])
diff --git a/chromium/tools/grit/grit/format/resource_map_unittest.py b/chromium/tools/grit/grit/format/resource_map_unittest.py
index 6112e030150..8f162b5087e 100644
--- a/chromium/tools/grit/grit/format/resource_map_unittest.py
+++ b/chromium/tools/grit/grit/format/resource_map_unittest.py
@@ -109,13 +109,13 @@ const size_t kTheRcHeaderSize = arraysize(kTheRcHeader);''', output)
<message name="IDS_PRODUCT_NAME" desc="The application name">
Application
</message>
- <if expr="1">
+ <if expr="True">
<message name="IDS_DEFAULT_TAB_TITLE_TITLE_CASE"
desc="In Title Case: The default title in a tab.">
New Tab
</message>
</if>
- <if expr="0">
+ <if expr="False">
<message name="IDS_DEFAULT_TAB_TITLE"
desc="The default title in a tab.">
New tab
diff --git a/chromium/tools/grit/grit/grd_reader.py b/chromium/tools/grit/grit/grd_reader.py
index 055ad73852e..87eec5e622c 100644
--- a/chromium/tools/grit/grit/grd_reader.py
+++ b/chromium/tools/grit/grit/grd_reader.py
@@ -24,7 +24,8 @@ class StopParsingException(Exception):
class GrdContentHandler(xml.sax.handler.ContentHandler):
- def __init__(self, stop_after, debug, dir, defines, tags_to_ignore):
+ def __init__(self, stop_after, debug, dir, defines, tags_to_ignore,
+ target_platform):
# Invariant of data:
# 'root' is the root of the parse tree being created, or None if we haven't
# parsed out any elements.
@@ -39,6 +40,7 @@ class GrdContentHandler(xml.sax.handler.ContentHandler):
self.defines = defines
self.tags_to_ignore = tags_to_ignore or set()
self.ignore_depth = 0
+ self.target_platform = target_platform
def startElement(self, name, attrs):
if self.ignore_depth or name in self.tags_to_ignore:
@@ -61,6 +63,9 @@ class GrdContentHandler(xml.sax.handler.ContentHandler):
else:
assert self.root is None
self.root = node
+ if isinstance(self.root, misc.GritNode):
+ if self.target_platform:
+ self.root.SetTargetPlatform(self.target_platform)
node.StartParsing(name, None)
if self.defines:
node.SetDefines(self.defines)
@@ -175,7 +180,8 @@ def Parse(filename_or_stream, dir=None, stop_after=None, first_ids_file=None,
dir = util.dirname(filename_or_stream)
handler = GrdContentHandler(stop_after=stop_after, debug=debug, dir=dir,
- defines=defines, tags_to_ignore=tags_to_ignore)
+ defines=defines, tags_to_ignore=tags_to_ignore,
+ target_platform=target_platform)
try:
xml.sax.parse(filename_or_stream, handler)
except StopParsingException:
@@ -195,8 +201,6 @@ def Parse(filename_or_stream, dir=None, stop_after=None, first_ids_file=None,
handler.root.SetOwnDir(dir)
if isinstance(handler.root, misc.GritNode):
- if target_platform:
- handler.root.SetTargetPlatform(target_platform)
if first_ids_file:
# Make the path to the first_ids_file relative to the grd file,
# unless it begins with GRIT_DIR.
diff --git a/chromium/tools/grit/grit/grd_reader_unittest.py b/chromium/tools/grit/grit/grd_reader_unittest.py
index 5a4c7c3fa5f..fd4d08bfbdc 100644
--- a/chromium/tools/grit/grit/grd_reader_unittest.py
+++ b/chromium/tools/grit/grit/grd_reader_unittest.py
@@ -16,6 +16,7 @@ import StringIO
from grit import exception
from grit import grd_reader
from grit import util
+from grit.node import base
from grit.node import empty
@@ -285,6 +286,29 @@ class GrdReaderUnittest(unittest.TestCase):
with util.TempDir({'bad.grp': data}) as temp_dir:
self.assertRaises(raises, grd_reader.Parse, top_grd, temp_dir.GetPath())
+ def testEarlyEnoughPlatformSpecification(self):
+ # This is a regression test for issue
+ # https://code.google.com/p/grit-i18n/issues/detail?id=23
+ grd_text = u'''<?xml version="1.0" encoding="UTF-8"?>
+ <grit latest_public_release="1" current_release="1">
+ <release seq="1">
+ <messages>
+ <if expr="not pp_ifdef('use_titlecase')">
+ <message name="IDS_XYZ">foo</message>
+ </if>
+ <!-- The assumption is that use_titlecase is never true for
+ this platform. When the platform isn't set to 'android'
+ early enough, we get a duplicate message name. -->
+ <if expr="os == '%s'">
+ <message name="IDS_XYZ">boo</message>
+ </if>
+ </messages>
+ </release>
+ </grit>''' % sys.platform
+ with util.TempDir({}) as temp_dir:
+ grd_reader.Parse(StringIO.StringIO(grd_text), temp_dir.GetPath(),
+ target_platform='android')
+
if __name__ == '__main__':
unittest.main()
diff --git a/chromium/tools/grit/grit/node/base.py b/chromium/tools/grit/grit/node/base.py
index 7541fa40405..3de51b6e58a 100644
--- a/chromium/tools/grit/grit/node/base.py
+++ b/chromium/tools/grit/grit/node/base.py
@@ -6,9 +6,8 @@
'''Base types for nodes in a GRIT resource tree.
'''
-import collections
+import ast
import os
-import sys
import types
from xml.sax import saxutils
@@ -28,11 +27,12 @@ class Node(object):
# Default nodes to not whitelist skipped
_whitelist_marked_as_skip = False
- # A class-static cache to memoize EvaluateExpression().
- # It has a 2 level nested dict structure. The outer dict has keys
- # of tuples which define the environment in which the expression
- # will be evaluated. The inner dict is map of expr->result.
- eval_expr_cache = collections.defaultdict(dict)
+ # A class-static cache to speed up EvaluateExpression().
+ # Keys are expressions (e.g. 'is_ios and lang == "fr"'). Values are tuples
+ # (code, variables_in_expr) where code is the compiled expression and can be
+ # directly eval'd, and variables_in_expr is the list of variable and method
+ # names used in the expression (e.g. ['is_ios', 'lang']).
+ eval_expr_cache = {}
def __init__(self):
self.children = [] # A list of child elements
@@ -442,33 +442,64 @@ class Node(object):
return []
@classmethod
- def EvaluateExpression(cls, expr, defs, target_platform, extra_variables=None):
+ def EvaluateExpression(cls, expr, defs, target_platform, extra_variables={}):
'''Worker for EvaluateCondition (below) and conditions in XTB files.'''
- cache_dict = cls.eval_expr_cache[
- (tuple(defs.iteritems()), target_platform, extra_variables)]
- if expr in cache_dict:
- return cache_dict[expr]
- def pp_ifdef(symbol):
- return symbol in defs
- def pp_if(symbol):
- return defs.get(symbol, False)
- variable_map = {
- 'defs' : defs,
- 'os': target_platform,
- 'is_linux': target_platform.startswith('linux'),
- 'is_macosx': target_platform == 'darwin',
- 'is_win': target_platform in ('cygwin', 'win32'),
- 'is_android': target_platform == 'android',
- 'is_ios': target_platform == 'ios',
- 'is_posix': (target_platform in ('darwin', 'linux2', 'linux3', 'sunos5',
- 'android', 'ios')
- or 'bsd' in target_platform),
- 'pp_ifdef' : pp_ifdef,
- 'pp_if' : pp_if,
- }
- if extra_variables:
- variable_map.update(extra_variables)
- eval_result = cache_dict[expr] = eval(expr, {}, variable_map)
+ if expr in cls.eval_expr_cache:
+ code, variables_in_expr = cls.eval_expr_cache[expr]
+ else:
+ # Get a list of all variable and method names used in the expression.
+ syntax_tree = ast.parse(expr, mode='eval')
+ variables_in_expr = [node.id for node in ast.walk(syntax_tree) if
+ isinstance(node, ast.Name) and node.id not in ('True', 'False')]
+ code = compile(syntax_tree, filename='<string>', mode='eval')
+ cls.eval_expr_cache[expr] = code, variables_in_expr
+
+ # Set values only for variables that are needed to eval the expression.
+ variable_map = {}
+ for name in variables_in_expr:
+ if name == 'os':
+ value = target_platform
+ elif name == 'defs':
+ value = defs
+
+ elif name == 'is_linux':
+ value = target_platform.startswith('linux')
+ elif name == 'is_macosx':
+ value = target_platform == 'darwin'
+ elif name == 'is_win':
+ value = target_platform in ('cygwin', 'win32')
+ elif name == 'is_android':
+ value = target_platform == 'android'
+ elif name == 'is_ios':
+ value = target_platform == 'ios'
+ elif name == 'is_bsd':
+ value = 'bsd' in target_platform
+ elif name == 'is_posix':
+ value = (target_platform in ('darwin', 'linux2', 'linux3', 'sunos5',
+ 'android', 'ios')
+ or 'bsd' in target_platform)
+
+ elif name == 'pp_ifdef':
+ def pp_ifdef(symbol):
+ return symbol in defs
+ value = pp_ifdef
+ elif name == 'pp_if':
+ def pp_if(symbol):
+ return defs.get(symbol, False)
+ value = pp_if
+
+ elif name in defs:
+ value = defs[name]
+ elif name in extra_variables:
+ value = extra_variables[name]
+ else:
+ # Undefined variables default to False.
+ value = False
+
+ variable_map[name] = value
+
+ eval_result = eval(code, {}, variable_map)
+ assert isinstance(eval_result, bool)
return eval_result
def EvaluateCondition(self, expr):
@@ -492,10 +523,10 @@ class Node(object):
context = getattr(root, 'output_context', '')
defs = getattr(root, 'defines', {})
target_platform = getattr(root, 'target_platform', '')
- extra_variables = (
- ('lang', lang),
- ('context', context),
- )
+ extra_variables = {
+ 'lang': lang,
+ 'context': context,
+ }
return Node.EvaluateExpression(
expr, defs, target_platform, extra_variables)
diff --git a/chromium/tools/grit/grit/node/base_unittest.py b/chromium/tools/grit/grit/node/base_unittest.py
index 63a2033272a..f7e7b759c2d 100644
--- a/chromium/tools/grit/grit/node/base_unittest.py
+++ b/chromium/tools/grit/grit/node/base_unittest.py
@@ -192,6 +192,67 @@ class NodeUnittest(unittest.TestCase):
self.failUnlessEqual(output_nodes[2].attrs['filename'],
'de/generated_resources.rc')
+ def testEvaluateExpression(self):
+ def AssertExpr(expected_value, expr, defs, target_platform,
+ extra_variables):
+ self.failUnlessEqual(expected_value, base.Node.EvaluateExpression(
+ expr, defs, target_platform, extra_variables))
+
+ AssertExpr(True, "True", {}, 'linux', {})
+ AssertExpr(False, "False", {}, 'linux', {})
+ AssertExpr(True, "True or False", {}, 'linux', {})
+ AssertExpr(False, "True and False", {}, 'linux', {})
+ AssertExpr(True, "os == 'linux'", {}, 'linux', {})
+ AssertExpr(False, "os == 'linux'", {}, 'ios', {})
+ AssertExpr(True, "'foo' in defs", {'foo': 'bar'}, 'ios', {})
+ AssertExpr(False, "'foo' in defs", {'baz': 'bar'}, 'ios', {})
+ AssertExpr(False, "'foo' in defs", {}, 'ios', {})
+ AssertExpr(True, "is_linux", {}, 'linux2', {})
+ AssertExpr(False, "is_linux", {}, 'win32', {})
+ AssertExpr(True, "is_macosx", {}, 'darwin', {})
+ AssertExpr(False, "is_macosx", {}, 'ios', {})
+ AssertExpr(True, "is_win", {}, 'win32', {})
+ AssertExpr(False, "is_win", {}, 'darwin', {})
+ AssertExpr(True, "is_android", {}, 'android', {})
+ AssertExpr(False, "is_android", {}, 'linux3', {})
+ AssertExpr(True, "is_ios", {}, 'ios', {})
+ AssertExpr(False, "is_ios", {}, 'darwin', {})
+ AssertExpr(True, "is_posix", {}, 'linux2', {})
+ AssertExpr(True, "is_posix", {}, 'darwin', {})
+ AssertExpr(True, "is_posix", {}, 'android', {})
+ AssertExpr(True, "is_posix", {}, 'ios', {})
+ AssertExpr(True, "is_posix", {}, 'freebsd7', {})
+ AssertExpr(False, "is_posix", {}, 'win32', {})
+ AssertExpr(True, "pp_ifdef('foo')", {'foo': True}, 'win32', {})
+ AssertExpr(True, "pp_ifdef('foo')", {'foo': False}, 'win32', {})
+ AssertExpr(False, "pp_ifdef('foo')", {'bar': True}, 'win32', {})
+ AssertExpr(True, "pp_if('foo')", {'foo': True}, 'win32', {})
+ AssertExpr(False, "pp_if('foo')", {'foo': False}, 'win32', {})
+ AssertExpr(False, "pp_if('foo')", {'bar': True}, 'win32', {})
+ AssertExpr(True, "foo", {'foo': True}, 'win32', {})
+ AssertExpr(False, "foo", {'foo': False}, 'win32', {})
+ AssertExpr(False, "foo", {'bar': True}, 'win32', {})
+ AssertExpr(True, "foo == 'baz'", {'foo': 'baz'}, 'win32', {})
+ AssertExpr(False, "foo == 'baz'", {'foo': True}, 'win32', {})
+ AssertExpr(False, "foo == 'baz'", {}, 'win32', {})
+ AssertExpr(True, "lang == 'de'", {}, 'win32', {'lang': 'de'})
+ AssertExpr(False, "lang == 'de'", {}, 'win32', {'lang': 'fr'})
+ AssertExpr(False, "lang == 'de'", {}, 'win32', {})
+
+ # Test a couple more complex expressions for good measure.
+ AssertExpr(True, "is_ios and (lang in ['de', 'fr'] or foo)",
+ {'foo': 'bar'}, 'ios', {'lang': 'fr', 'context': 'today'})
+ AssertExpr(False, "is_ios and (lang in ['de', 'fr'] or foo)",
+ {'foo': False}, 'linux2', {'lang': 'fr', 'context': 'today'})
+ AssertExpr(False, "is_ios and (lang in ['de', 'fr'] or foo)",
+ {'baz': 'bar'}, 'ios', {'lang': 'he', 'context': 'today'})
+ AssertExpr(True, "foo == 'bar' or not baz",
+ {'foo': 'bar', 'fun': True}, 'ios', {'lang': 'en'})
+ AssertExpr(True, "foo == 'bar' or not baz",
+ {}, 'ios', {'lang': 'en', 'context': 'java'})
+ AssertExpr(False, "foo == 'bar' or not baz",
+ {'foo': 'ruz', 'baz': True}, 'ios', {'lang': 'en'})
+
if __name__ == '__main__':
unittest.main()
diff --git a/chromium/tools/grit/grit/node/io.py b/chromium/tools/grit/grit/node/io.py
index 1e590c56b98..9962bffe587 100644
--- a/chromium/tools/grit/grit/node/io.py
+++ b/chromium/tools/grit/grit/node/io.py
@@ -52,12 +52,15 @@ class FileNode(base.Node):
except:
print "Exception during parsing of %s" % self.GetInputPath()
raise
- # We special case 'he' and 'iw' because the translation console uses 'iw'
- # and we use 'he'.
+ # Translation console uses non-standard language codes 'iw' and 'no' for
+ # Hebrew and Norwegian Bokmal instead of 'he' and 'nb' used in Chrome.
+ # Note that some Chrome's .grd still use 'no' instead of 'nb', but 'nb' is
+ # always used for generated .pak files.
+ ALTERNATIVE_LANG_CODE_MAP = { 'he': 'iw', 'nb': 'no' }
assert (lang == self.attrs['lang'] or
- (lang == 'iw' and self.attrs['lang'] == 'he')), ('The XTB file you '
- 'reference must contain messages in the language specified\n'
- 'by the \'lang\' attribute.')
+ lang == ALTERNATIVE_LANG_CODE_MAP[self.attrs['lang']]), (
+ 'The XTB file you reference must contain messages in the language '
+ 'specified\nby the \'lang\' attribute.')
def GetInputPath(self):
return os.path.expandvars(self.attrs['path'])
diff --git a/chromium/tools/grit/grit/node/io_unittest.py b/chromium/tools/grit/grit/node/io_unittest.py
index 07298d751de..7409b6796dd 100644
--- a/chromium/tools/grit/grit/node/io_unittest.py
+++ b/chromium/tools/grit/grit/node/io_unittest.py
@@ -146,6 +146,22 @@ class FileNodeUnittest(unittest.TestCase):
self.failUnless(outputs[2] not in active)
self.failUnless(outputs[2].GetType() == 'rc_all')
+ # Verify that 'iw' and 'no' language codes in xtb files are mapped to 'he' and
+ # 'nb'.
+ def testLangCodeMapping(self):
+ grd = grd_reader.Parse(StringIO.StringIO('''<?xml version="1.0" encoding="UTF-8"?>
+ <grit latest_public_release="2" source_lang_id="en-US" current_release="3" base_dir=".">
+ <translations>
+ <file path="generated_resources_no.xtb" lang="nb" />
+ <file path="generated_resources_iw.xtb" lang="he" />
+ </translations>
+ <release seq="3">
+ <messages></messages>
+ </release>
+ </grit>'''), util.PathFromRoot('grit/testdata'))
+ grd.SetOutputLanguage('en')
+ grd.RunGatherers()
+
if __name__ == '__main__':
unittest.main()
diff --git a/chromium/tools/grit/grit/node/misc.py b/chromium/tools/grit/grit/node/misc.py
index 345081f5a26..9a23263d607 100755
--- a/chromium/tools/grit/grit/node/misc.py
+++ b/chromium/tools/grit/grit/node/misc.py
@@ -182,7 +182,7 @@ class GritNode(base.Node):
if name not in ['base_dir', 'first_ids_file', 'source_lang_id',
'latest_public_release', 'current_release',
'enc_check', 'tc_project', 'grit_version',
- 'output_all_resource_defines']:
+ 'output_all_resource_defines', 'rc_header_format']:
return False
if name in ['latest_public_release', 'current_release'] and value.strip(
'0123456789') != '':
@@ -200,7 +200,8 @@ class GritNode(base.Node):
'source_lang_id' : 'en',
'enc_check' : constants.ENCODING_CHECK,
'tc_project' : 'NEED_TO_SET_tc_project_ATTRIBUTE',
- 'output_all_resource_defines': 'true'
+ 'output_all_resource_defines': 'true',
+ 'rc_header_format': None
}
def EndParsing(self):
@@ -298,6 +299,12 @@ class GritNode(base.Node):
"""
return self.attrs['output_all_resource_defines'] == 'true'
+ def GetRcHeaderFormat(self):
+ return self.attrs['rc_header_format']
+
+ def AssignRcHeaderFormat(self, rc_header_format):
+ self.attrs['rc_header_format'] = rc_header_format
+
def GetInputFiles(self):
"""Returns the list of files that are read to produce the output."""
diff --git a/chromium/tools/grit/grit/test_suite_all.py b/chromium/tools/grit/grit/test_suite_all.py
index 3f5c978d0ec..71635fc1b3e 100644
--- a/chromium/tools/grit/grit/test_suite_all.py
+++ b/chromium/tools/grit/grit/test_suite_all.py
@@ -42,7 +42,10 @@ class TestSuiteAll(unittest.TestSuite):
import grit.format.resource_map_unittest
import grit.format.policy_templates.policy_template_generator_unittest
import grit.format.policy_templates.writers.adm_writer_unittest
+ import grit.format.policy_templates.writers.adml_writer_unittest
+ import grit.format.policy_templates.writers.admx_writer_unittest
import grit.format.policy_templates.writers.doc_writer_unittest
+ import grit.format.policy_templates.writers.ios_plist_writer_unittest
import grit.format.policy_templates.writers.json_writer_unittest
import grit.format.policy_templates.writers.plist_strings_writer_unittest
import grit.format.policy_templates.writers.plist_writer_unittest
@@ -97,8 +100,14 @@ class TestSuiteAll(unittest.TestSuite):
PolicyTemplateGeneratorUnittest,
grit.format.policy_templates.writers.adm_writer_unittest.
AdmWriterUnittest,
+ grit.format.policy_templates.writers.adml_writer_unittest.
+ AdmlWriterUnittest,
+ grit.format.policy_templates.writers.admx_writer_unittest.
+ AdmxWriterUnittest,
grit.format.policy_templates.writers.doc_writer_unittest.
DocWriterUnittest,
+ grit.format.policy_templates.writers.ios_plist_writer_unittest.
+ IOSPListWriterUnittest,
grit.format.policy_templates.writers.json_writer_unittest.
JsonWriterUnittest,
grit.format.policy_templates.writers.plist_strings_writer_unittest.
diff --git a/chromium/tools/grit/grit/tool/android2grd.py b/chromium/tools/grit/grit/tool/android2grd.py
index 333e33d77ee..b4c136314bb 100644
--- a/chromium/tools/grit/grit/tool/android2grd.py
+++ b/chromium/tools/grit/grit/tool/android2grd.py
@@ -194,15 +194,15 @@ OPTIONS may be any of the following:
'''<?xml version="1.0" encoding="UTF-8"?>
<grit base_dir="." latest_public_release="0"
current_release="1" source_lang_id="en">
+ <outputs />
+ <translations />
<release allow_pseudo="false" seq="1">
<messages fallback_to_english="true" />
</release>
- <translations />
- <outputs />
</grit>'''), dir='.')
- messages = root.children[0].children[0]
+ outputs = root.children[0]
translations = root.children[1]
- outputs = root.children[2]
+ messages = root.children[2].children[0]
assert (isinstance(messages, grit.node.empty.MessagesNode) and
isinstance(translations, grit.node.empty.TranslationsNode) and
isinstance(outputs, grit.node.empty.OutputsNode))
diff --git a/chromium/tools/grit/grit/tool/build.py b/chromium/tools/grit/grit/tool/build.py
index dbdbed47468..87ee4122e17 100644
--- a/chromium/tools/grit/grit/tool/build.py
+++ b/chromium/tools/grit/grit/tool/build.py
@@ -36,8 +36,10 @@ _format_modules = {
'resource_map_source': 'resource_map',
'resource_file_map_source': 'resource_map',
}
-_format_modules.update((type, 'policy_templates.template_formatter')
- for type in 'adm plist plist_strings admx adml doc json reg'.split())
+_format_modules.update(
+ (type, 'policy_templates.template_formatter') for type in
+ [ 'adm', 'admx', 'adml', 'reg', 'doc', 'json',
+ 'plist', 'plist_strings', 'ios_plist' ])
def GetFormatter(type):
@@ -83,6 +85,11 @@ Options:
flag should match what sys.platform would report for your
target platform; see grit.node.base.EvaluateCondition.
+ -h HEADERFORMAT Custom format string to use for generating rc header files.
+ The string should have two placeholders: {textual_id}
+ and {numeric_id}. E.g. "#define {textual_id} {numeric_id}"
+ Otherwise it will use the default "#define SYMBOL 1234"
+
Conditional inclusion of resources only affects the output of files which
control which resources get linked into a binary, e.g. it affects .rc files
meant for compilation but it does not affect resource header files (that define
@@ -98,8 +105,10 @@ are exported to translation interchange files (e.g. XMB files), etc.
first_ids_file = None
whitelist_filenames = []
target_platform = None
- dep_dir = None
- (own_opts, args) = getopt.getopt(args, 'o:D:E:f:w:t:', ('dep-dir=',))
+ depfile = None
+ depdir = None
+ rc_header_format = None
+ (own_opts, args) = getopt.getopt(args, 'o:D:E:f:w:t:h:', ('depdir=','depfile='))
for (key, val) in own_opts:
if key == '-o':
self.output_directory = val
@@ -118,8 +127,12 @@ are exported to translation interchange files (e.g. XMB files), etc.
whitelist_filenames.append(val)
elif key == '-t':
target_platform = val
- elif key == '--dep-dir':
- dep_dir = val
+ elif key == '-h':
+ rc_header_format = val
+ elif key == '--depdir':
+ depdir = val
+ elif key == '--depfile':
+ depfile = val
if len(args):
print 'This tool takes no tool-specific arguments.'
@@ -148,11 +161,13 @@ are exported to translation interchange files (e.g. XMB files), etc.
# gathering stage; we use a dummy language here since we are not outputting
# a specific language.
self.res.SetOutputLanguage('en')
+ if rc_header_format:
+ self.res.AssignRcHeaderFormat(rc_header_format)
self.res.RunGatherers()
self.Process()
- if dep_dir:
- self.GenerateDepfile(opts.input, dep_dir)
+ if depfile and depdir:
+ self.GenerateDepfile(opts.input, depfile, depdir)
return 0
@@ -178,7 +193,6 @@ are exported to translation interchange files (e.g. XMB files), etc.
# output.
self.whitelist_names = None
-
@staticmethod
def AddWhitelistTags(start_node, whitelist_names):
# Walk the tree of nodes added attributes for the nodes that shouldn't
@@ -310,11 +324,10 @@ are exported to translation interchange files (e.g. XMB files), etc.
print self.res.UberClique().missing_translations_
sys.exit(-1)
- def GenerateDepfile(self, input_filename, dep_dir):
+ def GenerateDepfile(self, input_filename, depfile, depdir):
'''Generate a depfile that contains the imlicit dependencies of the input
grd. The depfile will be in the same format as a makefile, and will contain
- references to files relative to |dep_dir|. It will be put in the same
- directory as the generated outputs.
+ references to files relative to |depdir|. It will be put in |depfile|.
For example, supposing we have three files in a directory src/
@@ -325,23 +338,21 @@ are exported to translation interchange files (e.g. XMB files), etc.
and we run
- grit -i blah.grd -o ../out/gen --dep-dir ../out
+ grit -i blah.grd -o ../out/gen --depdir ../out --depfile ../out/gen/blah.rd.d
from the directory src/ we will generate a depfile ../out/gen/blah.grd.d
that has the contents
gen/blah.grd.d: ../src/input1.xtb ../src/input2.xtb
- Note that all paths in the depfile are relative to ../out, the dep-dir.
+ Note that all paths in the depfile are relative to ../out, the depdir.
'''
- depsfile_basename = os.path.basename(input_filename + '.d')
- depfile = os.path.abspath(
- os.path.join(self.output_directory, depsfile_basename))
- dep_dir = os.path.abspath(dep_dir)
+ depfile = os.path.abspath(depfile)
+ depdir = os.path.abspath(depdir)
# The path prefix to prepend to dependencies in the depfile.
- prefix = os.path.relpath(os.getcwd(), dep_dir)
+ prefix = os.path.relpath(os.getcwd(), depdir)
# The path that the depfile refers to itself by.
- self_ref_depfile = os.path.relpath(depfile, dep_dir)
+ self_ref_depfile = os.path.relpath(depfile, depdir)
infiles = self.res.GetInputFiles()
deps_text = ' '.join([os.path.join(prefix, i) for i in infiles])
depfile_contents = self_ref_depfile + ': ' + deps_text
diff --git a/chromium/tools/grit/grit/tool/build_unittest.py b/chromium/tools/grit/grit/tool/build_unittest.py
index 0b557ff39c8..fd640f7c589 100644
--- a/chromium/tools/grit/grit/tool/build_unittest.py
+++ b/chromium/tools/grit/grit/tool/build_unittest.py
@@ -41,9 +41,11 @@ class BuildUnittest(unittest.TestCase):
self.input = util.PathFromRoot('grit/testdata/substitute.grd')
self.verbose = False
self.extra_verbose = False
- builder.Run(DummyOpts(), ['-o', output_dir, '--dep-dir', output_dir])
-
expected_dep_file = os.path.join(output_dir, 'substitute.grd.d')
+ builder.Run(DummyOpts(), ['-o', output_dir,
+ '--depdir', output_dir,
+ '--depfile', expected_dep_file])
+
self.failUnless(os.path.isfile(expected_dep_file))
with open(expected_dep_file) as f:
line = f.readline()
diff --git a/chromium/tools/grit/grit_info.py b/chromium/tools/grit/grit_info.py
index c2fae767559..47a51f760b5 100755
--- a/chromium/tools/grit/grit_info.py
+++ b/chromium/tools/grit/grit_info.py
@@ -57,7 +57,7 @@ def GritSourceFiles():
grit_root_dir = os.path.relpath(os.path.dirname(__file__), os.getcwd())
for root, dirs, filenames in os.walk(grit_root_dir):
grit_src = [os.path.join(root, f) for f in filenames
- if f.endswith('.py')]
+ if f.endswith('.py') and not f.endswith('_unittest.py')]
files.extend(grit_src)
return sorted(files)
diff --git a/chromium/tools/gritsettings/resource_ids b/chromium/tools/gritsettings/resource_ids
index 80ba1d09f4a..f40779822eb 100644
--- a/chromium/tools/gritsettings/resource_ids
+++ b/chromium/tools/gritsettings/resource_ids
@@ -60,10 +60,7 @@
"chrome/app/theme/chrome_unscaled_resources.grd": {
"includes": [7500],
},
- "chrome_frame/resources/chrome_frame_resources.grd": {
- "includes": [8000],
- },
- "ui/base/strings/app_locale_settings.grd": {
+ "ui/strings/app_locale_settings.grd": {
"messages": [9000],
},
"chrome/app/resources/locale_settings.grd": {
@@ -87,8 +84,7 @@
"chrome/app/resources/locale_settings_win.grd": {
"messages": [10500],
},
-
- "ui/base/strings/ui_strings.grd": {
+ "ui/strings/ui_strings.grd": {
"messages": [11000],
},
# Chromium strings and Google Chrome strings must start at the same id.
@@ -106,36 +102,25 @@
"structures": [12000],
"messages": [12500],
},
- # The chrome frame dialogs are also in generated_resources.grd so they
- # get included by the translation console. We make sure that the ids
- # for structures here are the same as for generated_resources.grd.
- "chrome_frame/resources/chrome_frame_dialogs.grd": {
- "structures": [12000],
- "includes": [12250],
- },
"webkit/glue/inspector_strings.grd": {
"messages": [17500],
},
"webkit/glue/webkit_strings.grd": {
"messages": [18500],
},
-
- "chrome_frame/resources/chrome_frame_resources.grd": {
- "includes": [19000],
- "structures": [19500],
- },
-
"components/policy/resources/policy_templates.grd": {
"structures": [20500],
"messages": [20510],
},
-
"chrome/browser/resources/sync_internals_resources.grd": {
"includes": [21500],
},
"chrome/browser/resources/signin_internals_resources.grd": {
"includes": [21750],
},
+ "chrome/browser/resources/invalidations_resources.grd": {
+ "includes": [21950],
+ },
# This file is generated during the build.
"<(SHARED_INTERMEDIATE_DIR)/devtools/devtools_resources.grd": {
"includes": [22000],
@@ -143,13 +128,8 @@
"devtools_resources.grd": {
"includes": [22000],
},
- "chrome/browser/devtools/frontend/devtools_discovery_page_resources.grd": {
- "includes": [22500],
- },
"chrome/browser/resources/options_resources.grd": {
"includes": [23000],
- },
- "chrome/browser/resources/options_resources.grd": {
"structures": [23200],
},
"cloud_print/virtual_driver/win/install/virtual_driver_setup_resources.grd": {
@@ -183,32 +163,56 @@
"messages": [26000],
},
"chrome/common/extensions_api_resources.grd": {
- "includes": [26500],
+ "includes": [26400],
+ },
+ "extensions/extensions_resources.grd": {
+ "includes": [26600],
+ },
+ "extensions/renderer/resources/extensions_renderer_resources.grd": {
+ "includes": [26800],
+ },
+ "extensions/extensions_strings.grd": {
+ "messages": [27000],
+ },
+ "apps/shell/app_shell_resources.grd": {
+ "includes": [27400],
},
"chrome/browser/resources/memory_internals_resources.grd": {
"includes": [27500],
},
+ "chrome/browser/resources/password_manager_internals_resources.grd": {
+ "includes": [27800],
+ },
"device/bluetooth/bluetooth_strings.grd": {
"messages": [28000],
},
"ui/keyboard/keyboard_resources.grd": {
"includes": [28050],
},
+ "ui/file_manager/file_manager_resources.grd": {
+ "includes": [28100],
+ },
"chrome/browser/resources/translate_internals_resources.grd": {
"includes": [28500],
},
"chrome/browser/resources/sync_file_system_internals_resources.grd": {
"includes": [29000],
},
- "third_party/libaddressinput/chromium/cpp/res/messages.grd": {
+ "third_party/libaddressinput/chromium/cpp/res/libaddressinput_strings.grd": {
"messages": [29050],
},
- "components/component_strings.grd": {
+ "chrome/app/address_input_strings.grd": {
+ "messages": [29100],
+ },
+ "components/components_strings.grd": {
"messages": [30000],
},
- "components/dom_distiller_resources.grd": {
+ "components/resources/components_resources.grd": {
"includes": [30250],
},
+ "components/resources/components_scaled_resources.grd": {
+ "structures": [30350],
+ },
"third_party/WebKit/public/blink_resources.grd": {
"includes": [30500],
},
diff --git a/chromium/tools/gtk_clipboard_dump/gtk_clipboard_dump.cc b/chromium/tools/gtk_clipboard_dump/gtk_clipboard_dump.cc
deleted file mode 100644
index 4ddf1a2a73a..00000000000
--- a/chromium/tools/gtk_clipboard_dump/gtk_clipboard_dump.cc
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright (c) 2006-2008 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.
-
-#include <gtk/gtk.h>
-#include <stdio.h>
-#include <string.h>
-#include <string>
-
-namespace {
-
-void PrintClipboardContents(GtkClipboard* clip) {
- GdkAtom* targets;
- int num_targets = 0;
-
- // This call is bugged, the cache it checks is often stale; see
- // <http://bugzilla.gnome.org/show_bug.cgi?id=557315>.
- // gtk_clipboard_wait_for_targets(clip, &targets, &num_targets);
-
- GtkSelectionData* target_data =
- gtk_clipboard_wait_for_contents(clip,
- gdk_atom_intern("TARGETS", false));
- if (!target_data) {
- printf("failed to get the contents!\n");
- return;
- }
-
- gtk_selection_data_get_targets(target_data, &targets, &num_targets);
-
- printf("%d available targets:\n---------------\n", num_targets);
-
- for (int i = 0; i < num_targets; i++) {
- gchar* target_name_cstr = gdk_atom_name(targets[i]);
- std::string target_name(target_name_cstr);
- g_free(target_name_cstr);
- printf(" [format: %s", target_name.c_str());
- GtkSelectionData* data = gtk_clipboard_wait_for_contents(clip, targets[i]);
- if (!data) {
- printf("]: NULL\n\n");
- continue;
- }
-
- printf(" / length: %d / bits %d]: ", data->length, data->format);
-
- if (strstr(target_name.c_str(), "image")) {
- printf("(image omitted)\n\n");
- } else if (strstr(target_name.c_str(), "TIMESTAMP")) {
- // TODO(estade): Print the time stamp in human readable format.
- printf("(time omitted)\n\n");
- } else {
- for (int j = 0; j < data->length; j++) {
- // Output data one byte at a time. Currently wide strings look
- // pretty weird.
- printf("%c", (data->data[j] == 0 ? '_' : data->data[j]));
- }
- printf("\n\n");
- }
- gtk_selection_data_free(data);
- }
-
- if (num_targets <= 0) {
- printf("No targets advertised. Text is: ");
- gchar* text = gtk_clipboard_wait_for_text(clip);
- printf("%s\n", text ? text : "NULL");
- g_free(text);
- }
-
- g_free(targets);
- gtk_selection_data_free(target_data);
-}
-
-}
-
-/* Small program to dump the contents of GTK's clipboards to the terminal.
- * Feel free to add to it or improve formatting or whatnot.
- */
-int main(int argc, char* argv[]) {
- gtk_init(&argc, &argv);
-
- printf("Desktop clipboard\n");
- PrintClipboardContents(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD));
-
- printf("X clipboard\n");
- PrintClipboardContents(gtk_clipboard_get(GDK_SELECTION_PRIMARY));
-}
diff --git a/chromium/tools/gtk_clipboard_dump/gtk_clipboard_dump.gyp b/chromium/tools/gtk_clipboard_dump/gtk_clipboard_dump.gyp
deleted file mode 100644
index 21121089a30..00000000000
--- a/chromium/tools/gtk_clipboard_dump/gtk_clipboard_dump.gyp
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- 'targets': [
- {
- 'target_name': 'gtk_clipboard_dump',
- 'type': 'executable',
- 'dependencies': [
- '../../build/linux/system.gyp:gtk',
- ],
- 'sources': [
- 'gtk_clipboard_dump.cc',
- ],
- },
- ],
-}
diff --git a/chromium/tools/gyp/AUTHORS b/chromium/tools/gyp/AUTHORS
index 234e1483fed..9389ca0a23e 100644
--- a/chromium/tools/gyp/AUTHORS
+++ b/chromium/tools/gyp/AUTHORS
@@ -7,4 +7,5 @@ Yandex LLC
Steven Knight <knight@baldmt.com>
Ryan Norton <rnorton10@gmail.com>
+David J. Sankel <david@sankelsoftware.com>
Eric N. Vander Weele <ericvw@gmail.com>
diff --git a/chromium/tools/gyp/PRESUBMIT.py b/chromium/tools/gyp/PRESUBMIT.py
index 9c474eb2b10..b79316a9152 100644
--- a/chromium/tools/gyp/PRESUBMIT.py
+++ b/chromium/tools/gyp/PRESUBMIT.py
@@ -16,8 +16,6 @@ PYLINT_BLACKLIST = [
'test/lib/TestCmd.py',
'test/lib/TestCommon.py',
'test/lib/TestGyp.py',
- # Needs style fix.
- 'pylib/gyp/generator/xcode.py',
]
diff --git a/chromium/tools/gyp/buildbot/buildbot_run.py b/chromium/tools/gyp/buildbot/buildbot_run.py
index 979073c773b..b20a424de53 100755
--- a/chromium/tools/gyp/buildbot/buildbot_run.py
+++ b/chromium/tools/gyp/buildbot/buildbot_run.py
@@ -73,6 +73,9 @@ def PrepareCmake():
CallSubProcess( ['make', 'cmake'], cwd=CMAKE_DIR)
+_ANDROID_SETUP = 'source build/envsetup.sh && lunch full-eng'
+
+
def PrepareAndroidTree():
"""Prepare an Android tree to run 'android' format tests."""
if os.environ['BUILDBOT_CLOBBER'] == '1':
@@ -103,11 +106,32 @@ def PrepareAndroidTree():
print '@@@BUILD_STEP Build Android@@@'
CallSubProcess(
['/bin/bash',
- '-c', 'source build/envsetup.sh && lunch full-eng && make -j4'],
+ '-c', '%s && make -j4' % _ANDROID_SETUP],
+ cwd=ANDROID_DIR)
+
+
+def StartAndroidEmulator():
+ """Start an android emulator from the built android tree."""
+ print '@@@BUILD_STEP Start Android emulator@@@'
+ android_host_bin = '$ANDROID_HOST_OUT/bin'
+ subprocess.Popen(
+ ['/bin/bash', '-c',
+ '%s && %s/emulator -no-window' % (_ANDROID_SETUP, android_host_bin)],
cwd=ANDROID_DIR)
+ CallSubProcess(
+ ['/bin/bash', '-c',
+ '%s && %s/adb wait-for-device' % (_ANDROID_SETUP, android_host_bin)],
+ cwd=ANDROID_DIR)
+
+
+def StopAndroidEmulator():
+ """Stop all android emulators."""
+ print '@@@BUILD_STEP Stop Android emulator@@@'
+ # If this fails, it's because there is no emulator running.
+ subprocess.call(['pkill', 'emulator.*'])
-def GypTestFormat(title, format=None, msvs_version=None):
+def GypTestFormat(title, format=None, msvs_version=None, tests=[]):
"""Run the gyp tests for a given format, emitting annotator tags.
See annotator docs at:
@@ -131,14 +155,13 @@ def GypTestFormat(title, format=None, msvs_version=None):
'--passed',
'--format', format,
'--path', CMAKE_BIN_DIR,
- '--chdir', 'trunk'])
+ '--chdir', 'trunk'] + tests)
if format == 'android':
# gyptest needs the environment setup from envsetup/lunch in order to build
# using the 'android' backend, so this is done in a single shell.
retcode = subprocess.call(
['/bin/bash',
- '-c', 'source build/envsetup.sh && lunch full-eng && cd %s && %s'
- % (ROOT_DIR, command)],
+ '-c', '%s && cd %s && %s' % (_ANDROID_SETUP, ROOT_DIR, command)],
cwd=ANDROID_DIR, env=env)
else:
retcode = subprocess.call(command, cwd=ROOT_DIR, env=env, shell=True)
@@ -160,7 +183,11 @@ def GypBuild():
# The Android gyp bot runs on linux so this must be tested first.
if os.environ['BUILDBOT_BUILDERNAME'] == 'gyp-android':
PrepareAndroidTree()
- retcode += GypTestFormat('android')
+ StartAndroidEmulator()
+ try:
+ retcode += GypTestFormat('android')
+ finally:
+ StopAndroidEmulator()
elif sys.platform.startswith('linux'):
retcode += GypTestFormat('ninja')
retcode += GypTestFormat('make')
@@ -173,6 +200,12 @@ def GypBuild():
elif sys.platform == 'win32':
retcode += GypTestFormat('ninja')
if os.environ['BUILDBOT_BUILDERNAME'] == 'gyp-win64':
+ retcode += GypTestFormat('msvs-ninja-2012', format='msvs-ninja',
+ msvs_version='2012',
+ tests=[
+ 'test\generator-output\gyptest-actions.py',
+ 'test\generator-output\gyptest-relocate.py',
+ 'test\generator-output\gyptest-rules.py'])
retcode += GypTestFormat('msvs-2010', format='msvs', msvs_version='2010')
retcode += GypTestFormat('msvs-2012', format='msvs', msvs_version='2012')
else:
diff --git a/chromium/tools/gyp/gyp_dummy.c b/chromium/tools/gyp/gyp_dummy.c
deleted file mode 100644
index fb55bbc78da..00000000000
--- a/chromium/tools/gyp/gyp_dummy.c
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Copyright (c) 2009 Google Inc. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-int main() {
- return 0;
-}
diff --git a/chromium/tools/gyp/pylib/gyp/MSVSSettings.py b/chromium/tools/gyp/pylib/gyp/MSVSSettings.py
index 0c9532d8e67..b4e0a7890d2 100644
--- a/chromium/tools/gyp/pylib/gyp/MSVSSettings.py
+++ b/chromium/tools/gyp/pylib/gyp/MSVSSettings.py
@@ -367,6 +367,35 @@ fix_vc_macro_slashes_regex = re.compile(
r'(\$\((?:%s)\))(?:[\\/]+)' % "|".join(fix_vc_macro_slashes_regex_list)
)
+# Regular expression to detect keys that were generated by exclusion lists
+_EXCLUDED_SUFFIX_RE = re.compile('^(.*)_excluded$')
+
+
+def _ValidateExclusionSetting(setting, settings, error_msg, stderr=sys.stderr):
+ """Verify that 'setting' is valid if it is generated from an exclusion list.
+
+ If the setting appears to be generated from an exclusion list, the root name
+ is checked.
+
+ Args:
+ setting: A string that is the setting name to validate
+ settings: A dictionary where the keys are valid settings
+ error_msg: The message to emit in the event of error
+ stderr: The stream receiving the error messages.
+ """
+ # This may be unrecognized because it's an exclusion list. If the
+ # setting name has the _excluded suffix, then check the root name.
+ unrecognized = True
+ m = re.match(_EXCLUDED_SUFFIX_RE, setting)
+ if m:
+ root_setting = m.group(1)
+ unrecognized = root_setting not in settings
+
+ if unrecognized:
+ # We don't know this setting. Give a warning.
+ print >> stderr, error_msg
+
+
def FixVCMacroSlashes(s):
"""Replace macros which have excessive following slashes.
@@ -388,11 +417,11 @@ def ConvertVCMacrosToMSBuild(s):
if '$' in s:
replace_map = {
'$(ConfigurationName)': '$(Configuration)',
- '$(InputDir)': '%(RootDir)%(Directory)',
+ '$(InputDir)': '%(RelativeDir)',
'$(InputExt)': '%(Extension)',
'$(InputFileName)': '%(Filename)%(Extension)',
'$(InputName)': '%(Filename)',
- '$(InputPath)': '%(FullPath)',
+ '$(InputPath)': '%(Identity)',
'$(ParentName)': '$(ProjectFileName)',
'$(PlatformName)': '$(Platform)',
'$(SafeInputName)': '%(Filename)',
@@ -429,10 +458,12 @@ def ConvertToMSBuildSettings(msvs_settings, stderr=sys.stderr):
print >> stderr, ('Warning: while converting %s/%s to MSBuild, '
'%s' % (msvs_tool_name, msvs_setting, e))
else:
- # We don't know this setting. Give a warning.
- print >> stderr, ('Warning: unrecognized setting %s/%s '
- 'while converting to MSBuild.' %
- (msvs_tool_name, msvs_setting))
+ _ValidateExclusionSetting(msvs_setting,
+ msvs_tool,
+ ('Warning: unrecognized setting %s/%s '
+ 'while converting to MSBuild.' %
+ (msvs_tool_name, msvs_setting)),
+ stderr)
else:
print >> stderr, ('Warning: unrecognized tool %s while converting to '
'MSBuild.' % msvs_tool_name)
@@ -483,8 +514,12 @@ def _ValidateSettings(validators, settings, stderr):
print >> stderr, ('Warning: for %s/%s, %s' %
(tool_name, setting, e))
else:
- print >> stderr, ('Warning: unrecognized setting %s/%s' %
- (tool_name, setting))
+ _ValidateExclusionSetting(setting,
+ tool_validators,
+ ('Warning: unrecognized setting %s/%s' %
+ (tool_name, setting)),
+ stderr)
+
else:
print >> stderr, ('Warning: unrecognized tool %s' % tool_name)
@@ -581,7 +616,9 @@ _Same(_compile, 'DebugInformationFormat',
_Same(_compile, 'EnableEnhancedInstructionSet',
_Enumeration(['NotSet',
'StreamingSIMDExtensions', # /arch:SSE
- 'StreamingSIMDExtensions2'])) # /arch:SSE2
+ 'StreamingSIMDExtensions2', # /arch:SSE2
+ 'AdvancedVectorExtensions', # /arch:AVX (vs2012+)
+ 'NoExtensions',])) # /arch:IA32 (vs2012+)
_Same(_compile, 'ErrorReporting',
_Enumeration(['None', # /errorReport:none
'Prompt', # /errorReport:prompt
@@ -836,13 +873,6 @@ _Moved(_link, 'UseLibraryDependencyInputs', 'ProjectReference', _boolean)
# MSVS options not found in MSBuild.
_MSVSOnly(_link, 'OptimizeForWindows98', _newly_boolean)
_MSVSOnly(_link, 'UseUnicodeResponseFiles', _boolean)
-# These settings generate correctly in the MSVS output files when using
-# e.g. DelayLoadDLLs! or AdditionalDependencies! to exclude files from
-# configuration entries, but result in spurious artifacts which can be
-# safely ignored here. See crbug.com/246570
-_MSVSOnly(_link, 'AdditionalLibraryDirectories_excluded', _folder_list)
-_MSVSOnly(_link, 'DelayLoadDLLs_excluded', _file_list)
-_MSVSOnly(_link, 'AdditionalDependencies_excluded', _file_list)
# MSBuild options not found in MSVS.
_MSBuildOnly(_link, 'BuildingInIDE', _boolean)
@@ -991,9 +1021,6 @@ _Same(_lib, 'TargetMachine', _target_machine_enumeration)
# ProjectReference. We may want to validate that they are consistent.
_Moved(_lib, 'LinkLibraryDependencies', 'ProjectReference', _boolean)
-# TODO(jeanluc) I don't think these are genuine settings but byproducts of Gyp.
-_MSVSOnly(_lib, 'AdditionalLibraryDirectories_excluded', _folder_list)
-
_MSBuildOnly(_lib, 'DisplayLibrary', _string) # /LIST Visible='false'
_MSBuildOnly(_lib, 'ErrorReporting',
_Enumeration([], new=['PromptImmediately', # /ERRORREPORT:PROMPT
diff --git a/chromium/tools/gyp/pylib/gyp/MSVSSettings_test.py b/chromium/tools/gyp/pylib/gyp/MSVSSettings_test.py
index 4e06da3bbe3..9bd37ec3486 100755
--- a/chromium/tools/gyp/pylib/gyp/MSVSSettings_test.py
+++ b/chromium/tools/gyp/pylib/gyp/MSVSSettings_test.py
@@ -109,6 +109,7 @@ class TestSequenceFunctions(unittest.TestCase):
'ZZXYZ': 'bogus'},
'VCLinkerTool': {
'AdditionalDependencies': 'file1;file2',
+ 'AdditionalDependencies_excluded': 'file3',
'AdditionalLibraryDirectories': 'folder1;folder2',
'AdditionalManifestDependencies': 'file1;file2',
'AdditionalOptions': 'a string1',
diff --git a/chromium/tools/gyp/pylib/gyp/MSVSUtil.py b/chromium/tools/gyp/pylib/gyp/MSVSUtil.py
index 62e8d260d44..fbf3ed2e3ce 100644
--- a/chromium/tools/gyp/pylib/gyp/MSVSUtil.py
+++ b/chromium/tools/gyp/pylib/gyp/MSVSUtil.py
@@ -109,15 +109,16 @@ def ShardTargets(target_list, target_dicts):
new_target_dicts[t] = target_dicts[t]
# Shard dependencies.
for t in new_target_dicts:
- dependencies = copy.copy(new_target_dicts[t].get('dependencies', []))
- new_dependencies = []
- for d in dependencies:
- if d in targets_to_shard:
- for i in range(targets_to_shard[d]):
- new_dependencies.append(_ShardName(d, i))
- else:
- new_dependencies.append(d)
- new_target_dicts[t]['dependencies'] = new_dependencies
+ for deptype in ('dependencies', 'dependencies_original'):
+ dependencies = copy.copy(new_target_dicts[t].get(deptype, []))
+ new_dependencies = []
+ for d in dependencies:
+ if d in targets_to_shard:
+ for i in range(targets_to_shard[d]):
+ new_dependencies.append(_ShardName(d, i))
+ else:
+ new_dependencies.append(d)
+ new_target_dicts[t][deptype] = new_dependencies
return (new_target_list, new_target_dicts)
@@ -264,4 +265,4 @@ def InsertLargePdbShims(target_list, target_dicts, vars):
# Update the original target to depend on the shim target.
target_dict.setdefault('dependencies', []).append(full_shim_target_name)
- return (target_list, target_dicts) \ No newline at end of file
+ return (target_list, target_dicts)
diff --git a/chromium/tools/gyp/pylib/gyp/MSVSVersion.py b/chromium/tools/gyp/pylib/gyp/MSVSVersion.py
index bb30a7ba048..bcd6122f2df 100644
--- a/chromium/tools/gyp/pylib/gyp/MSVSVersion.py
+++ b/chromium/tools/gyp/pylib/gyp/MSVSVersion.py
@@ -96,9 +96,11 @@ class VisualStudioVersion(object):
else:
assert target_arch == 'x64'
arg = 'x86_amd64'
- if (os.environ.get('PROCESSOR_ARCHITECTURE') == 'AMD64' or
+ # Use the 64-on-64 compiler if we're not using an express
+ # edition and we're running on a 64bit OS.
+ if self.short_name[-1] != 'e' and (
+ os.environ.get('PROCESSOR_ARCHITECTURE') == 'AMD64' or
os.environ.get('PROCESSOR_ARCHITEW6432') == 'AMD64'):
- # Use the 64-on-64 compiler if we can.
arg = 'amd64'
return [os.path.normpath(
os.path.join(self.path, 'VC/vcvarsall.bat')), arg]
@@ -377,7 +379,7 @@ def SelectVisualStudioVersion(version='auto'):
if version == 'auto':
version = os.environ.get('GYP_MSVS_VERSION', 'auto')
version_map = {
- 'auto': ('10.0', '12.0', '9.0', '8.0', '11.0'),
+ 'auto': ('12.0', '10.0', '9.0', '8.0', '11.0'),
'2005': ('8.0',),
'2005e': ('8.0',),
'2008': ('9.0',),
diff --git a/chromium/tools/gyp/pylib/gyp/common.py b/chromium/tools/gyp/pylib/gyp/common.py
index b9d2abef02c..df71d973e11 100644
--- a/chromium/tools/gyp/pylib/gyp/common.py
+++ b/chromium/tools/gyp/pylib/gyp/common.py
@@ -4,6 +4,7 @@
from __future__ import with_statement
+import collections
import errno
import filecmp
import os.path
@@ -391,6 +392,14 @@ def WriteOnDiff(filename):
return Writer()
+def EnsureDirExists(path):
+ """Make sure the directory for |path| exists."""
+ try:
+ os.makedirs(os.path.dirname(path))
+ except OSError:
+ pass
+
+
def GetFlavor(params):
"""Returns |params.flavor| if it's set, the system's default flavor else."""
flavors = {
@@ -464,6 +473,72 @@ def uniquer(seq, idfun=None):
return result
+# Based on http://code.activestate.com/recipes/576694/.
+class OrderedSet(collections.MutableSet):
+ def __init__(self, iterable=None):
+ self.end = end = []
+ end += [None, end, end] # sentinel node for doubly linked list
+ self.map = {} # key --> [key, prev, next]
+ if iterable is not None:
+ self |= iterable
+
+ def __len__(self):
+ return len(self.map)
+
+ def __contains__(self, key):
+ return key in self.map
+
+ def add(self, key):
+ if key not in self.map:
+ end = self.end
+ curr = end[1]
+ curr[2] = end[1] = self.map[key] = [key, curr, end]
+
+ def discard(self, key):
+ if key in self.map:
+ key, prev_item, next_item = self.map.pop(key)
+ prev_item[2] = next_item
+ next_item[1] = prev_item
+
+ def __iter__(self):
+ end = self.end
+ curr = end[2]
+ while curr is not end:
+ yield curr[0]
+ curr = curr[2]
+
+ def __reversed__(self):
+ end = self.end
+ curr = end[1]
+ while curr is not end:
+ yield curr[0]
+ curr = curr[1]
+
+ # The second argument is an addition that causes a pylint warning.
+ def pop(self, last=True): # pylint: disable=W0221
+ if not self:
+ raise KeyError('set is empty')
+ key = self.end[1][0] if last else self.end[2][0]
+ self.discard(key)
+ return key
+
+ def __repr__(self):
+ if not self:
+ return '%s()' % (self.__class__.__name__,)
+ return '%s(%r)' % (self.__class__.__name__, list(self))
+
+ def __eq__(self, other):
+ if isinstance(other, OrderedSet):
+ return len(self) == len(other) and list(self) == list(other)
+ return set(self) == set(other)
+
+ # Extensions to the recipe.
+ def update(self, iterable):
+ for i in iterable:
+ if i not in self:
+ self.add(i)
+
+
class CycleError(Exception):
"""An exception raised when an unexpected cycle is detected."""
def __init__(self, nodes):
diff --git a/chromium/tools/gyp/pylib/gyp/generator/analyzer.py b/chromium/tools/gyp/pylib/gyp/generator/analyzer.py
new file mode 100644
index 00000000000..007d17d17e1
--- /dev/null
+++ b/chromium/tools/gyp/pylib/gyp/generator/analyzer.py
@@ -0,0 +1,192 @@
+# Copyright (c) 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""
+This script is intended for use as a GYP_GENERATOR. It takes as input (by way of
+the generator flag file_path) the list of relative file paths to consider. If
+any target has at least one of the paths as a source (or input to an action or
+rule) then 'Found dependency' is output, otherwise 'No dependencies' is output.
+"""
+
+import gyp.common
+import gyp.ninja_syntax as ninja_syntax
+import os
+import posixpath
+
+generator_supports_multiple_toolsets = True
+
+generator_wants_static_library_dependencies_adjusted = False
+
+generator_default_variables = {
+}
+for dirname in ['INTERMEDIATE_DIR', 'SHARED_INTERMEDIATE_DIR', 'PRODUCT_DIR',
+ 'LIB_DIR', 'SHARED_LIB_DIR']:
+ generator_default_variables[dirname] = '!!!'
+
+for unused in ['RULE_INPUT_PATH', 'RULE_INPUT_ROOT', 'RULE_INPUT_NAME',
+ 'RULE_INPUT_DIRNAME', 'RULE_INPUT_EXT',
+ 'EXECUTABLE_PREFIX', 'EXECUTABLE_SUFFIX',
+ 'STATIC_LIB_PREFIX', 'STATIC_LIB_SUFFIX',
+ 'SHARED_LIB_PREFIX', 'SHARED_LIB_SUFFIX',
+ 'CONFIGURATION_NAME']:
+ generator_default_variables[unused] = ''
+
+def __MakeRelativeTargetName(path):
+ """Converts a gyp target name into a relative name. For example, the path to a
+ gyp file may be something like c:\foo\bar.gyp:target, this converts it to
+ bar.gyp.
+ """
+ prune_path = os.getcwd()
+ if path.startswith(prune_path):
+ path = path[len(prune_path):]
+ # Gyp paths are always posix style.
+ path = path.replace('\\', '/')
+ if path.endswith('#target'):
+ path = path[0:len(path) - len('#target')]
+ return path
+
+def __ExtractBasePath(target):
+ """Extracts the path components of the specified gyp target path."""
+ last_index = target.rfind('/')
+ if last_index == -1:
+ return ''
+ return target[0:(last_index + 1)]
+
+def __AddSources(sources, base_path, base_path_components, result):
+ """Extracts valid sources from |sources| and adds them to |result|. Each
+ source file is relative to |base_path|, but may contain '..'. To make
+ resolving '..' easier |base_path_components| contains each of the
+ directories in |base_path|. Additionally each source may contain variables.
+ Such sources are ignored as it is assumed dependencies on them are expressed
+ and tracked in some other means."""
+ # NOTE: gyp paths are always posix style.
+ for source in sources:
+ if not len(source) or source.startswith('!!!') or source.startswith('$'):
+ continue
+ # variable expansion may lead to //.
+ source = source[0] + source[1:].replace('//', '/')
+ if source.startswith('../'):
+ path_components = base_path_components[:]
+ # Resolve relative paths.
+ while source.startswith('../'):
+ path_components.pop(len(path_components) - 1)
+ source = source[3:]
+ result.append('/'.join(path_components) + source)
+ continue
+ result.append(base_path + source)
+
+def __ExtractSourcesFromAction(action, base_path, base_path_components,
+ results):
+ if 'inputs' in action:
+ __AddSources(action['inputs'], base_path, base_path_components, results)
+
+def __ExtractSources(target, target_dict):
+ base_path = posixpath.dirname(target)
+ base_path_components = base_path.split('/')
+ # Add a trailing '/' so that __AddSources() can easily build paths.
+ if len(base_path):
+ base_path += '/'
+ results = []
+ if 'sources' in target_dict:
+ __AddSources(target_dict['sources'], base_path, base_path_components,
+ results)
+ # Include the inputs from any actions. Any changes to these effect the
+ # resulting output.
+ if 'actions' in target_dict:
+ for action in target_dict['actions']:
+ __ExtractSourcesFromAction(action, base_path, base_path_components,
+ results)
+ if 'rules' in target_dict:
+ for rule in target_dict['rules']:
+ __ExtractSourcesFromAction(rule, base_path, base_path_components, results)
+
+ return results
+
+class Target(object):
+ """Holds information about a particular target:
+ sources: set of source files defined by this target. This includes inputs to
+ actions and rules.
+ deps: list of direct dependencies."""
+ def __init__(self):
+ self.sources = []
+ self.deps = []
+
+def __GenerateTargets(target_list, target_dicts):
+ """Generates a dictionary with the key the name of a target and the value a
+ Target."""
+ targets = {}
+
+ # Queue of targets to visit.
+ targets_to_visit = target_list[:]
+
+ while len(targets_to_visit) > 0:
+ absolute_target_name = targets_to_visit.pop()
+ # |absolute_target| may be an absolute path and may include #target.
+ # References to targets are relative, so we need to clean the name.
+ relative_target_name = __MakeRelativeTargetName(absolute_target_name)
+ if relative_target_name in targets:
+ continue
+
+ target = Target()
+ targets[relative_target_name] = target
+ target.sources.extend(__ExtractSources(relative_target_name,
+ target_dicts[absolute_target_name]))
+
+ for dep in target_dicts[absolute_target_name].get('dependencies', []):
+ targets[relative_target_name].deps.append(__MakeRelativeTargetName(dep))
+ targets_to_visit.append(dep)
+
+ return targets
+
+def __GetFiles(params):
+ """Returns the list of files to analyze, or None if none specified."""
+ generator_flags = params.get('generator_flags', {})
+ file_path = generator_flags.get('file_path', None)
+ if not file_path:
+ return None
+ try:
+ f = open(file_path, 'r')
+ result = []
+ for file_name in f:
+ if file_name.endswith('\n'):
+ file_name = file_name[0:len(file_name) - 1]
+ if len(file_name):
+ result.append(file_name)
+ f.close()
+ return result
+ except IOError:
+ print 'Unable to open file', file_path
+ return None
+
+def CalculateVariables(default_variables, params):
+ """Calculate additional variables for use in the build (called by gyp)."""
+ flavor = gyp.common.GetFlavor(params)
+ if flavor == 'mac':
+ default_variables.setdefault('OS', 'mac')
+ elif flavor == 'win':
+ default_variables.setdefault('OS', 'win')
+ else:
+ operating_system = flavor
+ if flavor == 'android':
+ operating_system = 'linux' # Keep this legacy behavior for now.
+ default_variables.setdefault('OS', operating_system)
+
+def GenerateOutput(target_list, target_dicts, data, params):
+ """Called by gyp as the final stage. Outputs results."""
+ files = __GetFiles(params)
+ if not files:
+ print 'Must specify files to analyze via file_path generator flag'
+ return
+
+ targets = __GenerateTargets(target_list, target_dicts)
+
+ files_set = frozenset(files)
+ found_in_all_sources = 0
+ for target_name, target in targets.iteritems():
+ sources = files_set.intersection(target.sources)
+ if len(sources):
+ print 'Found dependency'
+ return
+
+ print 'No dependencies'
diff --git a/chromium/tools/gyp/pylib/gyp/generator/android.py b/chromium/tools/gyp/pylib/gyp/generator/android.py
index 63036bb2e1a..5d8c74e28e9 100644
--- a/chromium/tools/gyp/pylib/gyp/generator/android.py
+++ b/chromium/tools/gyp/pylib/gyp/generator/android.py
@@ -55,7 +55,7 @@ generator_additional_path_sections = []
generator_extra_sources_for_rules = []
-SHARED_FOOTER = """\
+ALL_MODULES_FOOTER = """\
# "gyp_all_modules" is a concatenation of the "gyp_all_modules" targets from
# all the included sub-makefiles. This is just here to clarify.
gyp_all_modules:
@@ -133,7 +133,7 @@ class AndroidMkWriter(object):
self.android_top_dir = android_top_dir
def Write(self, qualified_target, relative_target, base_path, output_filename,
- spec, configs, part_of_all):
+ spec, configs, part_of_all, write_alias_target):
"""The main entry point: writes a .mk file for a single target.
Arguments:
@@ -144,8 +144,10 @@ class AndroidMkWriter(object):
output_filename: output .mk file name to write
spec, configs: gyp info
part_of_all: flag indicating this target is part of 'all'
+ write_alias_target: flag indicating whether to create short aliases for
+ this target
"""
- make.ensure_directory_exists(output_filename)
+ gyp.common.EnsureDirExists(output_filename)
self.fp = open(output_filename, 'w')
@@ -186,11 +188,19 @@ class AndroidMkWriter(object):
self.WriteLn('LOCAL_MODULE_TAGS := optional')
if self.toolset == 'host':
self.WriteLn('LOCAL_IS_HOST_MODULE := true')
+ else:
+ self.WriteLn('LOCAL_MODULE_TARGET_ARCH := '
+ '$(TARGET_$(GYP_VAR_PREFIX)ARCH)')
# Grab output directories; needed for Actions and Rules.
- self.WriteLn('gyp_intermediate_dir := $(call local-intermediates-dir)')
+ if self.toolset == 'host':
+ self.WriteLn('gyp_intermediate_dir := '
+ '$(call local-intermediates-dir)')
+ else:
+ self.WriteLn('gyp_intermediate_dir := '
+ '$(call local-intermediates-dir,,$(GYP_VAR_PREFIX))')
self.WriteLn('gyp_shared_intermediate_dir := '
- '$(call intermediates-dir-for,GYP,shared)')
+ '$(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))')
self.WriteLn()
# List files this target depends on so that actions/rules/copies/sources
@@ -226,7 +236,8 @@ class AndroidMkWriter(object):
if spec.get('sources', []) or extra_sources:
self.WriteSources(spec, configs, extra_sources)
- self.WriteTarget(spec, configs, deps, link_deps, part_of_all)
+ self.WriteTarget(spec, configs, deps, link_deps, part_of_all,
+ write_alias_target)
# Update global list of target outputs, used in dependency tracking.
target_outputs[qualified_target] = ('path', self.output_binary)
@@ -291,6 +302,7 @@ class AndroidMkWriter(object):
# writing duplicate dummy rules for those outputs.
main_output = make.QuoteSpaces(self.LocalPathify(outputs[0]))
self.WriteLn('%s: gyp_local_path := $(LOCAL_PATH)' % main_output)
+ self.WriteLn('%s: gyp_var_prefix := $(GYP_VAR_PREFIX)' % main_output)
self.WriteLn('%s: gyp_intermediate_dir := '
'$(abspath $(gyp_intermediate_dir))' % main_output)
self.WriteLn('%s: gyp_shared_intermediate_dir := '
@@ -305,12 +317,19 @@ class AndroidMkWriter(object):
self.WriteLn('%s: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))'
% main_output)
+ # Don't allow spaces in input/output filenames, but make an exception for
+ # filenames which start with '$(' since it's okay for there to be spaces
+ # inside of make function/macro invocations.
for input in inputs:
- assert ' ' not in input, (
- "Spaces in action input filenames not supported (%s)" % input)
+ if not input.startswith('$(') and ' ' in input:
+ raise gyp.common.GypError(
+ 'Action input filename "%s" in target %s contains a space' %
+ (input, self.target))
for output in outputs:
- assert ' ' not in output, (
- "Spaces in action output filenames not supported (%s)" % output)
+ if not output.startswith('$(') and ' ' in output:
+ raise gyp.common.GypError(
+ 'Action output filename "%s" in target %s contains a space' %
+ (output, self.target))
self.WriteLn('%s: %s $(GYP_TARGET_DEPENDENCIES)' %
(main_output, ' '.join(map(self.LocalPathify, inputs))))
@@ -337,13 +356,10 @@ class AndroidMkWriter(object):
"""
if len(rules) == 0:
return
- rule_trigger = '%s_rule_trigger' % self.android_module
- did_write_rule = False
for rule in rules:
if len(rule.get('rule_sources', [])) == 0:
continue
- did_write_rule = True
name = make.StringToMakefileVariable('%s_%s' % (self.relative_target,
rule['rule_name']))
self.WriteLn('\n### Generated for rule "%s":' % name)
@@ -391,6 +407,7 @@ class AndroidMkWriter(object):
outputs = map(self.LocalPathify, outputs)
main_output = outputs[0]
self.WriteLn('%s: gyp_local_path := $(LOCAL_PATH)' % main_output)
+ self.WriteLn('%s: gyp_var_prefix := $(GYP_VAR_PREFIX)' % main_output)
self.WriteLn('%s: gyp_intermediate_dir := '
'$(abspath $(gyp_intermediate_dir))' % main_output)
self.WriteLn('%s: gyp_shared_intermediate_dir := '
@@ -412,13 +429,9 @@ class AndroidMkWriter(object):
# Make each output depend on the main output, with an empty command
# to force make to notice that the mtime has changed.
self.WriteLn('%s: %s ;' % (output, main_output))
- self.WriteLn('.PHONY: %s' % (rule_trigger))
- self.WriteLn('%s: %s' % (rule_trigger, main_output))
- self.WriteLn('')
- if did_write_rule:
- extra_sources.append(rule_trigger) # Force all rules to run.
- self.WriteLn('### Finished generating for all rules')
- self.WriteLn('')
+ self.WriteLn()
+
+ self.WriteLn()
def WriteCopies(self, copies, extra_outputs):
@@ -501,6 +514,9 @@ class AndroidMkWriter(object):
self.WriteLn('LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) '
'$(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))')
self.WriteLn('LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))')
+ # Android uses separate flags for assembly file invocations, but gyp expects
+ # the same CFLAGS to be applied:
+ self.WriteLn('LOCAL_ASFLAGS := $(LOCAL_CFLAGS)')
def WriteSources(self, spec, configs, extra_sources):
@@ -609,16 +625,16 @@ class AndroidMkWriter(object):
prefix = ''
if spec['toolset'] == 'host':
- suffix = '_host_gyp'
+ suffix = '_$(TARGET_$(GYP_VAR_PREFIX)ARCH)_host_gyp'
else:
suffix = '_gyp'
if self.path:
- name = '%s%s_%s%s' % (prefix, self.path, self.target, suffix)
+ middle = make.StringToMakefileVariable('%s_%s' % (self.path, self.target))
else:
- name = '%s%s%s' % (prefix, self.target, suffix)
+ middle = make.StringToMakefileVariable(self.target)
- return make.StringToMakefileVariable(name)
+ return ''.join([prefix, middle, suffix])
def ComputeOutputParts(self, spec):
@@ -672,7 +688,7 @@ class AndroidMkWriter(object):
E.g., the loadable module 'foobar' in directory 'baz' will produce
'$(obj)/baz/libfoobar.so'
"""
- if self.type == 'executable' and self.toolset == 'host':
+ if self.type == 'executable':
# We install host executables into shared_intermediate_dir so they can be
# run by gyp rules that refer to PRODUCT_DIR.
path = '$(gyp_shared_intermediate_dir)'
@@ -680,15 +696,15 @@ class AndroidMkWriter(object):
if self.toolset == 'host':
path = '$(HOST_OUT_INTERMEDIATE_LIBRARIES)'
else:
- path = '$(TARGET_OUT_INTERMEDIATE_LIBRARIES)'
+ path = '$($(GYP_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES)'
else:
# Other targets just get built into their intermediate dir.
if self.toolset == 'host':
path = '$(call intermediates-dir-for,%s,%s,true)' % (self.android_class,
self.android_module)
else:
- path = '$(call intermediates-dir-for,%s,%s)' % (self.android_class,
- self.android_module)
+ path = ('$(call intermediates-dir-for,%s,%s,,,$(GYP_VAR_PREFIX))'
+ % (self.android_class, self.android_module))
assert spec.get('product_dir') is None # TODO: not supported?
return os.path.join(path, self.ComputeOutputBasename(spec))
@@ -816,12 +832,15 @@ class AndroidMkWriter(object):
'LOCAL_SHARED_LIBRARIES')
- def WriteTarget(self, spec, configs, deps, link_deps, part_of_all):
+ def WriteTarget(self, spec, configs, deps, link_deps, part_of_all,
+ write_alias_target):
"""Write Makefile code to produce the final target of the gyp spec.
spec, configs: input from gyp.
deps, link_deps: dependency lists; see ComputeDeps()
part_of_all: flag indicating this target is part of 'all'
+ write_alias_target: flag indicating whether to create short aliases for this
+ target
"""
self.WriteLn('### Rules for final target.')
@@ -832,7 +851,7 @@ class AndroidMkWriter(object):
# name 'gyp_all_modules' as the Android build system doesn't allow the use
# of the Make target 'all' and because 'all_modules' is the equivalent of
# the Make target 'all' on Android.
- if part_of_all:
+ if part_of_all and write_alias_target:
self.WriteLn('# Add target alias to "gyp_all_modules" target.')
self.WriteLn('.PHONY: gyp_all_modules')
self.WriteLn('gyp_all_modules: %s' % self.android_module)
@@ -841,7 +860,7 @@ class AndroidMkWriter(object):
# Add an alias from the gyp target name to the Android module name. This
# simplifies manual builds of the target, and is required by the test
# framework.
- if self.target != self.android_module:
+ if self.target != self.android_module and write_alias_target:
self.WriteLn('# Alias gyp target name.')
self.WriteLn('.PHONY: %s' % self.target)
self.WriteLn('%s: %s' % (self.target, self.android_module))
@@ -859,17 +878,15 @@ class AndroidMkWriter(object):
self.WriteLn('LOCAL_PRELINK_MODULE := false')
self.WriteLn('include $(BUILD_%sSHARED_LIBRARY)' % modifier)
elif self.type == 'executable':
- if self.toolset == 'host':
- self.WriteLn('LOCAL_MODULE_PATH := $(gyp_shared_intermediate_dir)')
- else:
- # Don't install target executables for now, as it results in them being
- # included in ROM. This can be revisited if there's a reason to install
- # them later.
- self.WriteLn('LOCAL_UNINSTALLABLE_MODULE := true')
+ # Executables are for build and test purposes only, so they're installed
+ # to a directory that doesn't get included in the system image.
+ self.WriteLn('LOCAL_MODULE_PATH := $(gyp_shared_intermediate_dir)')
self.WriteLn('include $(BUILD_%sEXECUTABLE)' % modifier)
else:
self.WriteLn('LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp')
self.WriteLn('LOCAL_UNINSTALLABLE_MODULE := true')
+ if self.toolset == 'target':
+ self.WriteLn('LOCAL_2ND_ARCH_VAR_PREFIX := $(GYP_VAR_PREFIX)')
self.WriteLn()
self.WriteLn('include $(BUILD_SYSTEM)/base_rules.mk')
self.WriteLn()
@@ -877,6 +894,9 @@ class AndroidMkWriter(object):
self.WriteLn('\t$(hide) echo "Gyp timestamp: $@"')
self.WriteLn('\t$(hide) mkdir -p $(dir $@)')
self.WriteLn('\t$(hide) touch $@')
+ if self.toolset == 'target':
+ self.WriteLn()
+ self.WriteLn('LOCAL_2ND_ARCH_VAR_PREFIX :=')
def WriteList(self, value_list, variable=None, prefix='',
@@ -926,7 +946,7 @@ class AndroidMkWriter(object):
'INPUT_ROOT': expansion,
'INPUT_DIRNAME': dirname,
}
- return path
+ return os.path.normpath(path)
def PerformBuild(data, configurations, params):
@@ -946,6 +966,7 @@ def GenerateOutput(target_list, target_dicts, data, params):
generator_flags = params.get('generator_flags', {})
builddir_name = generator_flags.get('output_dir', 'out')
limit_to_target_all = generator_flags.get('limit_to_target_all', False)
+ write_alias_targets = generator_flags.get('write_alias_targets', True)
android_top_dir = os.environ.get('ANDROID_BUILD_TOP')
assert android_top_dir, '$ANDROID_BUILD_TOP not set; you need to run lunch.'
@@ -983,7 +1004,7 @@ def GenerateOutput(target_list, target_dicts, data, params):
makefile_path = os.path.join(options.toplevel_dir, makefile_name)
assert not options.generator_output, (
'The Android backend does not support options.generator_output.')
- make.ensure_directory_exists(makefile_path)
+ gyp.common.EnsureDirExists(makefile_path)
root_makefile = open(makefile_path, 'w')
root_makefile.write(header)
@@ -1041,7 +1062,8 @@ def GenerateOutput(target_list, target_dicts, data, params):
writer = AndroidMkWriter(android_top_dir)
android_module = writer.Write(qualified_target, relative_target, base_path,
output_file, spec, configs,
- part_of_all=part_of_all)
+ part_of_all=part_of_all,
+ write_alias_target=write_alias_targets)
if android_module in android_modules:
print ('ERROR: Android module names must be unique. The following '
'targets both generate Android module name %s.\n %s\n %s' %
@@ -1057,6 +1079,7 @@ def GenerateOutput(target_list, target_dicts, data, params):
include_list.add(mkfile_rel_path)
root_makefile.write('GYP_CONFIGURATION ?= %s\n' % default_configuration)
+ root_makefile.write('GYP_VAR_PREFIX ?=\n')
# Write out the sorted list of includes.
root_makefile.write('\n')
@@ -1064,6 +1087,7 @@ def GenerateOutput(target_list, target_dicts, data, params):
root_makefile.write('include $(LOCAL_PATH)/' + include_file + '\n')
root_makefile.write('\n')
- root_makefile.write(SHARED_FOOTER)
+ if write_alias_targets:
+ root_makefile.write(ALL_MODULES_FOOTER)
root_makefile.close()
diff --git a/chromium/tools/gyp/pylib/gyp/generator/cmake.py b/chromium/tools/gyp/pylib/gyp/generator/cmake.py
index 161189995b9..10d015ee831 100644
--- a/chromium/tools/gyp/pylib/gyp/generator/cmake.py
+++ b/chromium/tools/gyp/pylib/gyp/generator/cmake.py
@@ -118,13 +118,6 @@ def NormjoinPath(base_path, rel_path):
return os.path.normpath(os.path.join(base_path, rel_path))
-def EnsureDirectoryExists(path):
- """Python version of 'mkdir -p'."""
- dirPath = os.path.dirname(path)
- if dirPath and not os.path.exists(dirPath):
- os.makedirs(dirPath)
-
-
def CMakeStringEscape(a):
"""Escapes the string 'a' for use inside a CMake string.
@@ -1041,7 +1034,7 @@ def GenerateOutputForConfig(target_list, target_dicts, data,
toplevel_build = os.path.join(options.toplevel_dir, build_dir)
output_file = os.path.join(toplevel_build, 'CMakeLists.txt')
- EnsureDirectoryExists(output_file)
+ gyp.common.EnsureDirExists(output_file)
output = open(output_file, 'w')
output.write('cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR)\n')
diff --git a/chromium/tools/gyp/pylib/gyp/generator/eclipse.py b/chromium/tools/gyp/pylib/gyp/generator/eclipse.py
index a80edc89296..718eb5d3dbd 100644
--- a/chromium/tools/gyp/pylib/gyp/generator/eclipse.py
+++ b/chromium/tools/gyp/pylib/gyp/generator/eclipse.py
@@ -77,7 +77,8 @@ def CalculateGeneratorInputInfo(params):
def GetAllIncludeDirectories(target_list, target_dicts,
- shared_intermediate_dirs, config_name, params):
+ shared_intermediate_dirs, config_name, params,
+ compiler_path):
"""Calculate the set of include directories to be used.
Returns:
@@ -88,6 +89,33 @@ def GetAllIncludeDirectories(target_list, target_dicts,
gyp_includes_set = set()
compiler_includes_list = []
+ # Find compiler's default include dirs.
+ if compiler_path:
+ command = shlex.split(compiler_path)
+ command.extend(['-E', '-xc++', '-v', '-'])
+ proc = subprocess.Popen(args=command, stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ output = proc.communicate()[1]
+ # Extract the list of include dirs from the output, which has this format:
+ # ...
+ # #include "..." search starts here:
+ # #include <...> search starts here:
+ # /usr/include/c++/4.6
+ # /usr/local/include
+ # End of search list.
+ # ...
+ in_include_list = False
+ for line in output.splitlines():
+ if line.startswith('#include'):
+ in_include_list = True
+ continue
+ if line.startswith('End of search list.'):
+ break
+ if in_include_list:
+ include_dir = line.strip()
+ if include_dir not in compiler_includes_list:
+ compiler_includes_list.append(include_dir)
+
flavor = gyp.common.GetFlavor(params)
if flavor == 'win':
generator_flags = params.get('generator_flags', {})
@@ -106,11 +134,10 @@ def GetAllIncludeDirectories(target_list, target_dicts,
else:
cflags = config['cflags']
for cflag in cflags:
- include_dir = ''
if cflag.startswith('-I'):
include_dir = cflag[2:]
- if include_dir and not include_dir in compiler_includes_list:
- compiler_includes_list.append(include_dir)
+ if include_dir not in compiler_includes_list:
+ compiler_includes_list.append(include_dir)
# Find standard gyp include dirs.
if config.has_key('include_dirs'):
@@ -125,9 +152,7 @@ def GetAllIncludeDirectories(target_list, target_dicts,
include_dir = base_dir + '/' + include_dir
include_dir = os.path.abspath(include_dir)
- if not include_dir in gyp_includes_set:
- gyp_includes_set.add(include_dir)
-
+ gyp_includes_set.add(include_dir)
# Generate a list that has all the include dirs.
all_includes_list = list(gyp_includes_set)
@@ -140,7 +165,7 @@ def GetAllIncludeDirectories(target_list, target_dicts,
return all_includes_list
-def GetCompilerPath(target_list, target_dicts, data):
+def GetCompilerPath(target_list, data, options):
"""Determine a command that can be used to invoke the compiler.
Returns:
@@ -148,13 +173,12 @@ def GetCompilerPath(target_list, target_dicts, data):
the compiler from that. Otherwise, see if a compiler was specified via the
CC_target environment variable.
"""
-
# First, see if the compiler is configured in make's settings.
build_file, _, _ = gyp.common.ParseQualifiedTarget(target_list[0])
make_global_settings_dict = data[build_file].get('make_global_settings', {})
for key, value in make_global_settings_dict:
if key in ['CC', 'CXX']:
- return value
+ return os.path.join(options.toplevel_dir, value)
# Check to see if the compiler was specified as an environment variable.
for key in ['CC_target', 'CC', 'CXX']:
@@ -165,7 +189,8 @@ def GetCompilerPath(target_list, target_dicts, data):
return 'gcc'
-def GetAllDefines(target_list, target_dicts, data, config_name, params):
+def GetAllDefines(target_list, target_dicts, data, config_name, params,
+ compiler_path):
"""Calculate the defines for a project.
Returns:
@@ -202,9 +227,8 @@ def GetAllDefines(target_list, target_dicts, data, config_name, params):
# Get default compiler defines (if possible).
if flavor == 'win':
return all_defines # Default defines already processed in the loop above.
- cc_target = GetCompilerPath(target_list, target_dicts, data)
- if cc_target:
- command = shlex.split(cc_target)
+ if compiler_path:
+ command = shlex.split(compiler_path)
command.extend(['-E', '-dM', '-'])
cpp_proc = subprocess.Popen(args=command, cwd='.',
stdin=subprocess.PIPE, stdout=subprocess.PIPE)
@@ -270,20 +294,22 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
shared_intermediate_dirs = [os.path.join(toplevel_build, 'obj', 'gen'),
os.path.join(toplevel_build, 'gen')]
- if not os.path.exists(toplevel_build):
- os.makedirs(toplevel_build)
- out = open(os.path.join(toplevel_build, 'eclipse-cdt-settings.xml'), 'w')
+ out_name = os.path.join(toplevel_build, 'eclipse-cdt-settings.xml')
+ gyp.common.EnsureDirExists(out_name)
+ out = open(out_name, 'w')
out.write('<?xml version="1.0" encoding="UTF-8"?>\n')
out.write('<cdtprojectproperties>\n')
eclipse_langs = ['C++ Source File', 'C Source File', 'Assembly Source File',
'GNU C++', 'GNU C', 'Assembly']
+ compiler_path = GetCompilerPath(target_list, data, options)
include_dirs = GetAllIncludeDirectories(target_list, target_dicts,
shared_intermediate_dirs, config_name,
- params)
+ params, compiler_path)
WriteIncludePaths(out, eclipse_langs, include_dirs)
- defines = GetAllDefines(target_list, target_dicts, data, config_name, params)
+ defines = GetAllDefines(target_list, target_dicts, data, config_name, params,
+ compiler_path)
WriteMacros(out, eclipse_langs, defines)
out.write('</cdtprojectproperties>\n')
diff --git a/chromium/tools/gyp/pylib/gyp/generator/make.py b/chromium/tools/gyp/pylib/gyp/generator/make.py
index d4078433917..b88a433d3d9 100644
--- a/chromium/tools/gyp/pylib/gyp/generator/make.py
+++ b/chromium/tools/gyp/pylib/gyp/generator/make.py
@@ -117,12 +117,6 @@ def CalculateGeneratorInputInfo(params):
}
-def ensure_directory_exists(path):
- dir = os.path.dirname(path)
- if dir and not os.path.exists(dir):
- os.makedirs(dir)
-
-
# The .d checking code below uses these functions:
# wildcard, sort, foreach, shell, wordlist
# wildcard can handle spaces, the rest can't.
@@ -691,7 +685,7 @@ $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD
spec, configs: gyp info
part_of_all: flag indicating this target is part of 'all'
"""
- ensure_directory_exists(output_filename)
+ gyp.common.EnsureDirExists(output_filename)
self.fp = open(output_filename, 'w')
@@ -820,7 +814,7 @@ $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD
targets: list of "all" targets for this sub-project
build_dir: build output directory, relative to the sub-project
"""
- ensure_directory_exists(output_filename)
+ gyp.common.EnsureDirExists(output_filename)
self.fp = open(output_filename, 'w')
self.fp.write(header)
# For consistency with other builders, put sub-project build output in the
@@ -1957,7 +1951,8 @@ def GenerateOutput(target_list, target_dicts, data, params):
# We write the file in the base_path directory.
output_file = os.path.join(options.depth, base_path, base_name)
if options.generator_output:
- output_file = os.path.join(options.generator_output, output_file)
+ output_file = os.path.join(
+ options.depth, options.generator_output, base_path, base_name)
base_path = gyp.common.RelativePath(os.path.dirname(build_file),
options.toplevel_dir)
return base_path, output_file
@@ -1980,7 +1975,8 @@ def GenerateOutput(target_list, target_dicts, data, params):
makefile_path = os.path.join(options.toplevel_dir, makefile_name)
if options.generator_output:
global srcdir_prefix
- makefile_path = os.path.join(options.generator_output, makefile_path)
+ makefile_path = os.path.join(
+ options.toplevel_dir, options.generator_output, makefile_name)
srcdir = gyp.common.RelativePath(srcdir, options.generator_output)
srcdir_prefix = '$(srcdir)/'
@@ -2056,8 +2052,9 @@ def GenerateOutput(target_list, target_dicts, data, params):
make_global_settings += (
'ifneq (,$(filter $(origin %s), undefined default))\n' % key)
# Let gyp-time envvars win over global settings.
- if key in os.environ:
- value = os.environ[key]
+ env_key = key.replace('.', '_') # CC.host -> CC_host
+ if env_key in os.environ:
+ value = os.environ[env_key]
make_global_settings += ' %s = %s\n' % (key, value)
make_global_settings += 'endif\n'
else:
@@ -2067,7 +2064,7 @@ def GenerateOutput(target_list, target_dicts, data, params):
header_params['make_global_settings'] = make_global_settings
- ensure_directory_exists(makefile_path)
+ gyp.common.EnsureDirExists(makefile_path)
root_makefile = open(makefile_path, 'w')
root_makefile.write(SHARED_HEADER % header_params)
# Currently any versions have the same effect, but in future the behavior
@@ -2099,7 +2096,8 @@ def GenerateOutput(target_list, target_dicts, data, params):
this_make_global_settings = data[build_file].get('make_global_settings', [])
assert make_global_settings_array == this_make_global_settings, (
- "make_global_settings needs to be the same for all targets.")
+ "make_global_settings needs to be the same for all targets. %s vs. %s" %
+ (this_make_global_settings, make_global_settings))
build_files.add(gyp.common.RelativePath(build_file, options.toplevel_dir))
included_files = data[build_file]['included_files']
diff --git a/chromium/tools/gyp/pylib/gyp/generator/msvs.py b/chromium/tools/gyp/pylib/gyp/generator/msvs.py
index 0287eb19e06..b18bff18b24 100644
--- a/chromium/tools/gyp/pylib/gyp/generator/msvs.py
+++ b/chromium/tools/gyp/pylib/gyp/generator/msvs.py
@@ -12,6 +12,7 @@ import sys
import gyp.common
import gyp.easy_xml as easy_xml
+import gyp.generator.ninja as ninja_generator
import gyp.MSVSNew as MSVSNew
import gyp.MSVSProject as MSVSProject
import gyp.MSVSSettings as MSVSSettings
@@ -20,6 +21,17 @@ import gyp.MSVSUserFile as MSVSUserFile
import gyp.MSVSUtil as MSVSUtil
import gyp.MSVSVersion as MSVSVersion
from gyp.common import GypError
+from gyp.common import OrderedSet
+
+# TODO: Remove once bots are on 2.7, http://crbug.com/241769
+def _import_OrderedDict():
+ import collections
+ try:
+ return collections.OrderedDict
+ except AttributeError:
+ import gyp.ordered_dict
+ return gyp.ordered_dict.OrderedDict
+OrderedDict = _import_OrderedDict()
# Regular expression for validating Visual Studio GUIDs. If the GUID
@@ -70,6 +82,7 @@ generator_additional_non_configuration_keys = [
'msvs_external_builder_out_dir',
'msvs_external_builder_build_cmd',
'msvs_external_builder_clean_cmd',
+ 'msvs_external_builder_clcompile_cmd',
]
@@ -158,13 +171,14 @@ def _FixPaths(paths):
def _ConvertSourcesToFilterHierarchy(sources, prefix=None, excluded=None,
- list_excluded=True):
+ list_excluded=True, msvs_version=None):
"""Converts a list split source file paths into a vcproj folder hierarchy.
Arguments:
sources: A list of source file paths split.
prefix: A list of source file path layers meant to apply to each of sources.
excluded: A set of excluded files.
+ msvs_version: A MSVSVersion object.
Returns:
A hierarchy of filenames and MSVSProject.Filter objects that matches the
@@ -179,7 +193,7 @@ def _ConvertSourcesToFilterHierarchy(sources, prefix=None, excluded=None,
if not prefix: prefix = []
result = []
excluded_result = []
- folders = dict()
+ folders = OrderedDict()
# Gather files into the final result, excluded, or folders.
for s in sources:
if len(s) == 1:
@@ -188,23 +202,36 @@ def _ConvertSourcesToFilterHierarchy(sources, prefix=None, excluded=None,
excluded_result.append(filename)
else:
result.append(filename)
- else:
+ elif msvs_version and not msvs_version.UsesVcxproj():
+ # For MSVS 2008 and earlier, we need to process all files before walking
+ # the sub folders.
if not folders.get(s[0]):
folders[s[0]] = []
folders[s[0]].append(s[1:])
+ else:
+ contents = _ConvertSourcesToFilterHierarchy([s[1:]], prefix + [s[0]],
+ excluded=excluded,
+ list_excluded=list_excluded,
+ msvs_version=msvs_version)
+ contents = MSVSProject.Filter(s[0], contents=contents)
+ result.append(contents)
# Add a folder for excluded files.
if excluded_result and list_excluded:
excluded_folder = MSVSProject.Filter('_excluded_files',
contents=excluded_result)
result.append(excluded_folder)
+
+ if msvs_version and msvs_version.UsesVcxproj():
+ return result
+
# Populate all the folders.
for f in folders:
contents = _ConvertSourcesToFilterHierarchy(folders[f], prefix=prefix + [f],
excluded=excluded,
- list_excluded=list_excluded)
+ list_excluded=list_excluded,
+ msvs_version=msvs_version)
contents = MSVSProject.Filter(f, contents=contents)
result.append(contents)
-
return result
@@ -258,7 +285,7 @@ def _BuildCommandLineForRuleRaw(spec, cmd, cygwin_shell, has_input_path,
if [x for x in cmd if '$(InputDir)' in x]:
input_dir_preamble = (
'set INPUTDIR=$(InputDir)\n'
- 'set INPUTDIR=%INPUTDIR:$(ProjectDir)=%\n'
+ 'if NOT DEFINED INPUTDIR set INPUTDIR=.\\\n'
'set INPUTDIR=%INPUTDIR:~0,-1%\n'
)
else:
@@ -415,13 +442,13 @@ def _AddAccumulatedActionsToMSVS(p, spec, actions_dict):
dicts describing the actions attached to that input file.
"""
for primary_input in actions_dict:
- inputs = set()
- outputs = set()
+ inputs = OrderedSet()
+ outputs = OrderedSet()
descriptions = []
commands = []
for action in actions_dict[primary_input]:
- inputs.update(set(action['inputs']))
- outputs.update(set(action['outputs']))
+ inputs.update(OrderedSet(action['inputs']))
+ outputs.update(OrderedSet(action['outputs']))
descriptions.append(action['description'])
commands.append(action['command'])
# Add the custom build step for one input file.
@@ -477,8 +504,8 @@ def _RuleInputsAndOutputs(rule, trigger_file):
"""
raw_inputs = _FixPaths(rule.get('inputs', []))
raw_outputs = _FixPaths(rule.get('outputs', []))
- inputs = set()
- outputs = set()
+ inputs = OrderedSet()
+ outputs = OrderedSet()
inputs.add(trigger_file)
for i in raw_inputs:
inputs.add(_RuleExpandPath(i, trigger_file))
@@ -549,16 +576,16 @@ def _GenerateExternalRules(rules, output_dir, spec,
mk_file.write('OutDirCygwin:=$(shell cygpath -u "$(OutDir)")\n')
mk_file.write('IntDirCygwin:=$(shell cygpath -u "$(IntDir)")\n')
# Gather stuff needed to emit all: target.
- all_inputs = set()
- all_outputs = set()
- all_output_dirs = set()
+ all_inputs = OrderedSet()
+ all_outputs = OrderedSet()
+ all_output_dirs = OrderedSet()
first_outputs = []
for rule in rules:
trigger_files = _FindRuleTriggerFiles(rule, sources)
for tf in trigger_files:
inputs, outputs = _RuleInputsAndOutputs(rule, tf)
- all_inputs.update(set(inputs))
- all_outputs.update(set(outputs))
+ all_inputs.update(OrderedSet(inputs))
+ all_outputs.update(OrderedSet(outputs))
# Only use one target from each rule as the dependency for
# 'all' so we don't try to build each rule multiple times.
first_outputs.append(list(outputs)[0])
@@ -793,14 +820,18 @@ def _GenerateRulesForMSVS(p, output_dir, options, spec,
def _AdjustSourcesForRules(spec, rules, sources, excluded_sources):
# Add outputs generated by each rule (if applicable).
for rule in rules:
- # Done if not processing outputs as sources.
- if int(rule.get('process_outputs_as_sources', False)):
- # Add in the outputs from this rule.
- trigger_files = _FindRuleTriggerFiles(rule, sources)
- for trigger_file in trigger_files:
+ # Add in the outputs from this rule.
+ trigger_files = _FindRuleTriggerFiles(rule, sources)
+ for trigger_file in trigger_files:
+ # Remove trigger_file from excluded_sources to let the rule be triggered
+ # (e.g. rule trigger ax_enums.idl is added to excluded_sources
+ # because it's also in an action's inputs in the same project)
+ excluded_sources.discard(_FixPath(trigger_file))
+ # Done if not processing outputs as sources.
+ if int(rule.get('process_outputs_as_sources', False)):
inputs, outputs = _RuleInputsAndOutputs(rule, trigger_file)
- inputs = set(_FixPaths(inputs))
- outputs = set(_FixPaths(outputs))
+ inputs = OrderedSet(_FixPaths(inputs))
+ outputs = OrderedSet(_FixPaths(outputs))
inputs.remove(_FixPath(trigger_file))
sources.update(inputs)
if not spec.get('msvs_external_builder'):
@@ -817,7 +848,7 @@ def _FilterActionsFromExcluded(excluded_sources, actions_to_add):
Returns:
excluded_sources with files that have actions attached removed.
"""
- must_keep = set(_FixPaths(actions_to_add.keys()))
+ must_keep = OrderedSet(_FixPaths(actions_to_add.keys()))
return [s for s in excluded_sources if s not in must_keep]
@@ -900,9 +931,7 @@ def _GenerateMSVSProject(project, options, version, generator_flags):
generator_flags: dict of generator-specific flags.
"""
spec = project.spec
- vcproj_dir = os.path.dirname(project.path)
- if vcproj_dir and not os.path.exists(vcproj_dir):
- os.makedirs(vcproj_dir)
+ gyp.common.EnsureDirExists(project.path)
platforms = _GetUniquePlatforms(spec)
p = MSVSProject.Writer(project.path, version, spec['target_name'],
@@ -929,8 +958,9 @@ def _GenerateMSVSProject(project, options, version, generator_flags):
actions_to_add)
list_excluded = generator_flags.get('msvs_list_excluded_files', True)
sources, excluded_sources, excluded_idl = (
- _AdjustSourcesAndConvertToFilterHierarchy(
- spec, options, project_dir, sources, excluded_sources, list_excluded))
+ _AdjustSourcesAndConvertToFilterHierarchy(spec, options, project_dir,
+ sources, excluded_sources,
+ list_excluded, version))
# Add in files.
missing_sources = _VerifySourcesExist(sources, project_dir)
@@ -965,7 +995,7 @@ def _GetUniquePlatforms(spec):
The MSVSUserFile object created.
"""
# Gather list of unique platforms.
- platforms = set()
+ platforms = OrderedSet()
for configuration in spec['configurations']:
platforms.add(_ConfigPlatform(spec['configurations'][configuration]))
platforms = list(platforms)
@@ -1152,7 +1182,7 @@ def _GetLibraries(spec):
# in libraries that are assumed to be in the default library path).
# Also remove duplicate entries, leaving only the last duplicate, while
# preserving order.
- found = set()
+ found = OrderedSet()
unique_libraries_list = []
for entry in reversed(libraries):
library = re.sub('^\-l', '', entry)
@@ -1331,8 +1361,7 @@ def _GetMSVSAttributes(spec, config, config_type):
def _AddNormalizedSources(sources_set, sources_array):
- sources = [_NormalizedSource(s) for s in sources_array]
- sources_set.update(set(sources))
+ sources_set.update(_NormalizedSource(s) for s in sources_array)
def _PrepareListOfSources(spec, generator_flags, gyp_file):
@@ -1350,9 +1379,9 @@ def _PrepareListOfSources(spec, generator_flags, gyp_file):
A pair of (list of sources, list of excluded sources).
The sources will be relative to the gyp file.
"""
- sources = set()
+ sources = OrderedSet()
_AddNormalizedSources(sources, spec.get('sources', []))
- excluded_sources = set()
+ excluded_sources = OrderedSet()
# Add in the gyp file.
if not generator_flags.get('standalone'):
sources.add(gyp_file)
@@ -1362,7 +1391,7 @@ def _PrepareListOfSources(spec, generator_flags, gyp_file):
inputs = a['inputs']
inputs = [_NormalizedSource(i) for i in inputs]
# Add all inputs to sources and excluded sources.
- inputs = set(inputs)
+ inputs = OrderedSet(inputs)
sources.update(inputs)
if not spec.get('msvs_external_builder'):
excluded_sources.update(inputs)
@@ -1375,7 +1404,7 @@ def _PrepareListOfSources(spec, generator_flags, gyp_file):
def _AdjustSourcesAndConvertToFilterHierarchy(
- spec, options, gyp_dir, sources, excluded_sources, list_excluded):
+ spec, options, gyp_dir, sources, excluded_sources, list_excluded, version):
"""Adjusts the list of sources and excluded sources.
Also converts the sets to lists.
@@ -1386,12 +1415,13 @@ def _AdjustSourcesAndConvertToFilterHierarchy(
gyp_dir: The path to the gyp file being processed.
sources: A set of sources to be included for this project.
excluded_sources: A set of sources to be excluded for this project.
+ version: A MSVSVersion object.
Returns:
A trio of (list of sources, list of excluded sources,
path of excluded IDL file)
"""
# Exclude excluded sources coming into the generator.
- excluded_sources.update(set(spec.get('sources_excluded', [])))
+ excluded_sources.update(OrderedSet(spec.get('sources_excluded', [])))
# Add excluded sources into sources for good measure.
sources.update(excluded_sources)
# Convert to proper windows form.
@@ -1410,12 +1440,19 @@ def _AdjustSourcesAndConvertToFilterHierarchy(
# Convert to folders and the right slashes.
sources = [i.split('\\') for i in sources]
sources = _ConvertSourcesToFilterHierarchy(sources, excluded=fully_excluded,
- list_excluded=list_excluded)
+ list_excluded=list_excluded,
+ msvs_version=version)
# Prune filters with a single child to flatten ugly directory structures
# such as ../../src/modules/module1 etc.
- while len(sources) == 1 and isinstance(sources[0], MSVSProject.Filter):
- sources = sources[0].contents
+ if version.UsesVcxproj():
+ while all([isinstance(s, MSVSProject.Filter) for s in sources]) \
+ and len(set([s.name for s in sources])) == 1:
+ assert all([len(s.contents) == 1 for s in sources])
+ sources = [s.contents[0] for s in sources]
+ else:
+ while len(sources) == 1 and isinstance(sources[0], MSVSProject.Filter):
+ sources = sources[0].contents
return sources, excluded_sources, excluded_idl
@@ -1484,7 +1521,7 @@ def _GetExcludedFilesFromBuild(spec, excluded_sources, excluded_idl):
def _AddToolFilesToMSVS(p, spec):
# Add in tool files (rules).
- tool_files = set()
+ tool_files = OrderedSet()
for _, config in spec['configurations'].iteritems():
for f in config.get('msvs_tool_files', []):
tool_files.add(f)
@@ -1751,7 +1788,7 @@ def _CreateProjectObjects(target_list, target_dicts, options, msvs_version):
return projects
-def _InitNinjaFlavor(options, target_list, target_dicts):
+def _InitNinjaFlavor(params, target_list, target_dicts):
"""Initialize targets for the ninja flavor.
This sets up the necessary variables in the targets to generate msvs projects
@@ -1759,7 +1796,7 @@ def _InitNinjaFlavor(options, target_list, target_dicts):
if they have not been set. This allows individual specs to override the
default values initialized here.
Arguments:
- options: Options provided to the generator.
+ params: Params provided to the generator.
target_list: List of target pairs: 'base/base.gyp:base'.
target_dicts: Dict of target properties keyed on target pair.
"""
@@ -1773,8 +1810,12 @@ def _InitNinjaFlavor(options, target_list, target_dicts):
spec['msvs_external_builder'] = 'ninja'
if not spec.get('msvs_external_builder_out_dir'):
- spec['msvs_external_builder_out_dir'] = \
- options.depth + '/out/$(Configuration)'
+ gyp_file, _, _ = gyp.common.ParseQualifiedTarget(qualified_target)
+ gyp_dir = os.path.dirname(gyp_file)
+ spec['msvs_external_builder_out_dir'] = os.path.join(
+ gyp.common.RelativePath(params['options'].toplevel_dir, gyp_dir),
+ ninja_generator.ComputeOutputDir(params),
+ '$(Configuration)')
if not spec.get('msvs_external_builder_build_cmd'):
spec['msvs_external_builder_build_cmd'] = [
path_to_ninja,
@@ -1787,8 +1828,7 @@ def _InitNinjaFlavor(options, target_list, target_dicts):
path_to_ninja,
'-C',
'$(OutDir)',
- '-t',
- 'clean',
+ '-tclean',
'$(ProjectName)',
]
@@ -1869,7 +1909,7 @@ def GenerateOutput(target_list, target_dicts, data, params):
# Optionally configure each spec to use ninja as the external builder.
if params.get('flavor') == 'ninja':
- _InitNinjaFlavor(options, target_list, target_dicts)
+ _InitNinjaFlavor(params, target_list, target_dicts)
# Prepare the set of configurations.
configs = set()
@@ -2519,6 +2559,7 @@ def _GetMSBuildGlobalProperties(spec, guid, gyp_file_name):
['ProjectGuid', guid],
['Keyword', 'Win32Proj'],
['RootNamespace', namespace],
+ ['IgnoreWarnCompileDuplicatedFilename', 'true'],
]
]
@@ -2842,7 +2883,7 @@ def _FinalizeMSBuildSettings(spec, configuration):
# Visual Studio 2010 has TR1
defines = [d for d in defines if d != '_HAS_TR1=0']
# Warn of ignored settings
- ignored_settings = ['msvs_prebuild', 'msvs_postbuild', 'msvs_tool_files']
+ ignored_settings = ['msvs_tool_files']
for ignored_setting in ignored_settings:
value = configuration.get(ignored_setting)
if value:
@@ -2851,9 +2892,8 @@ def _FinalizeMSBuildSettings(spec, configuration):
defines = [_EscapeCppDefineForMSBuild(d) for d in defines]
disabled_warnings = _GetDisabledWarnings(configuration)
- # TODO(jeanluc) Validate & warn that we don't translate
- # prebuild = configuration.get('msvs_prebuild')
- # postbuild = configuration.get('msvs_postbuild')
+ prebuild = configuration.get('msvs_prebuild')
+ postbuild = configuration.get('msvs_postbuild')
def_file = _GetModuleDefinition(spec)
precompiled_header = configuration.get('msvs_precompiled_header')
@@ -2901,6 +2941,10 @@ def _FinalizeMSBuildSettings(spec, configuration):
if def_file:
_ToolAppend(msbuild_settings, 'Link', 'ModuleDefinitionFile', def_file)
configuration['finalized_msbuild_settings'] = msbuild_settings
+ if prebuild:
+ _ToolAppend(msbuild_settings, 'PreBuildEvent', 'Command', prebuild)
+ if postbuild:
+ _ToolAppend(msbuild_settings, 'PostBuildEvent', 'Command', postbuild)
def _GetValueFormattedForMSBuild(tool_name, name, value):
@@ -3056,9 +3100,7 @@ def _GenerateMSBuildProject(project, options, version, generator_flags):
spec = project.spec
configurations = spec['configurations']
project_dir, project_file_name = os.path.split(project.path)
- msbuildproj_dir = os.path.dirname(project.path)
- if msbuildproj_dir and not os.path.exists(msbuildproj_dir):
- os.makedirs(msbuildproj_dir)
+ gyp.common.EnsureDirExists(project.path)
# Prepare list of sources and excluded sources.
gyp_path = _NormalizedSource(project.build_file)
relative_path_of_gyp_file = gyp.common.RelativePath(gyp_path, project_dir)
@@ -3087,7 +3129,7 @@ def _GenerateMSBuildProject(project, options, version, generator_flags):
_AdjustSourcesAndConvertToFilterHierarchy(spec, options,
project_dir, sources,
excluded_sources,
- list_excluded))
+ list_excluded, version))
# Don't add actions if we are using an external builder like ninja.
if not spec.get('msvs_external_builder'):
@@ -3160,7 +3202,9 @@ def _GenerateMSBuildProject(project, options, version, generator_flags):
def _GetMSBuildExternalBuilderTargets(spec):
"""Return a list of MSBuild targets for external builders.
- Right now, only "Build" and "Clean" targets are generated.
+ The "Build" and "Clean" targets are always generated. If the spec contains
+ 'msvs_external_builder_clcompile_cmd', then the "ClCompile" target will also
+ be generated, to support building selected C/C++ files.
Arguments:
spec: The gyp target spec.
@@ -3179,7 +3223,17 @@ def _GetMSBuildExternalBuilderTargets(spec):
clean_target = ['Target', {'Name': 'Clean'}]
clean_target.append(['Exec', {'Command': clean_cmd}])
- return [build_target, clean_target]
+ targets = [build_target, clean_target]
+
+ if spec.get('msvs_external_builder_clcompile_cmd'):
+ clcompile_cmd = _BuildCommandLineForRuleRaw(
+ spec, spec['msvs_external_builder_clcompile_cmd'],
+ False, False, False, False)
+ clcompile_target = ['Target', {'Name': 'ClCompile'}]
+ clcompile_target.append(['Exec', {'Command': clcompile_cmd}])
+ targets.append(clcompile_target)
+
+ return targets
def _GetMSBuildExtensions(props_files_of_rules):
@@ -3207,16 +3261,16 @@ def _GenerateActionsForMSBuild(spec, actions_to_add):
Returns:
A pair of (action specification, the sources handled by this action).
"""
- sources_handled_by_action = set()
+ sources_handled_by_action = OrderedSet()
actions_spec = []
for primary_input, actions in actions_to_add.iteritems():
- inputs = set()
- outputs = set()
+ inputs = OrderedSet()
+ outputs = OrderedSet()
descriptions = []
commands = []
for action in actions:
- inputs.update(set(action['inputs']))
- outputs.update(set(action['outputs']))
+ inputs.update(OrderedSet(action['inputs']))
+ outputs.update(OrderedSet(action['outputs']))
descriptions.append(action['description'])
cmd = action['command']
# For most actions, add 'call' so that actions that invoke batch files
diff --git a/chromium/tools/gyp/pylib/gyp/generator/ninja.py b/chromium/tools/gyp/pylib/gyp/generator/ninja.py
index a40c7fe2464..f31068a9bf4 100644
--- a/chromium/tools/gyp/pylib/gyp/generator/ninja.py
+++ b/chromium/tools/gyp/pylib/gyp/generator/ninja.py
@@ -2,6 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import collections
import copy
import hashlib
import json
@@ -343,7 +344,7 @@ class NinjaWriter:
return os.path.normpath(os.path.join(obj, self.base_dir, path_dir,
path_basename))
- def WriteCollapsedDependencies(self, name, targets):
+ def WriteCollapsedDependencies(self, name, targets, order_only=None):
"""Given a list of targets, return a path for a single file
representing the result of building all the targets or None.
@@ -351,10 +352,11 @@ class NinjaWriter:
assert targets == filter(None, targets), targets
if len(targets) == 0:
+ assert not order_only
return None
- if len(targets) > 1:
+ if len(targets) > 1 or order_only:
stamp = self.GypPathToUniqueOutput(name + '.stamp')
- targets = self.ninja.build(stamp, 'stamp', targets)
+ targets = self.ninja.build(stamp, 'stamp', targets, order_only=order_only)
self.ninja.newline()
return targets[0]
@@ -391,6 +393,8 @@ class NinjaWriter:
self.ninja.variable('arch', self.win_env[arch])
self.ninja.variable('cc', '$cl_' + arch)
self.ninja.variable('cxx', '$cl_' + arch)
+ self.ninja.variable('cc_host', '$cl_' + arch)
+ self.ninja.variable('cxx_host', '$cl_' + arch)
if self.flavor == 'mac':
self.archs = self.xcode_settings.GetActiveArchs(config_name)
@@ -472,6 +476,8 @@ class NinjaWriter:
else:
print "Warning: Actions/rules writing object files don't work with " \
"multiarch targets, dropping. (target %s)" % spec['target_name']
+ elif self.flavor == 'mac' and len(self.archs) > 1:
+ link_deps = collections.defaultdict(list)
if self.flavor == 'win' and self.target.type == 'static_library':
@@ -580,10 +586,7 @@ class NinjaWriter:
def WriteActions(self, actions, extra_sources, prebuild,
extra_mac_bundle_resources):
# Actions cd into the base directory.
- env = self.GetSortedXcodeEnv()
- if self.flavor == 'win':
- env = self.msvs_settings.GetVSMacroEnv(
- '$!PRODUCT_DIR', config=self.config_name)
+ env = self.GetToolchainEnv()
all_outputs = []
for action in actions:
# First write out a rule for the action.
@@ -616,15 +619,17 @@ class NinjaWriter:
def WriteRules(self, rules, extra_sources, prebuild,
mac_bundle_resources, extra_mac_bundle_resources):
- env = self.GetSortedXcodeEnv()
+ env = self.GetToolchainEnv()
all_outputs = []
for rule in rules:
- # First write out a rule for the rule action.
- name = '%s_%s' % (rule['rule_name'],
- hashlib.md5(self.qualified_target).hexdigest())
# Skip a rule with no action and no inputs.
if 'action' not in rule and not rule.get('rule_sources', []):
continue
+
+ # First write out a rule for the rule action.
+ name = '%s_%s' % (rule['rule_name'],
+ hashlib.md5(self.qualified_target).hexdigest())
+
args = rule['action']
description = self.GenerateDescription(
'RULE',
@@ -653,8 +658,22 @@ class NinjaWriter:
return path.replace('\\', '/')
return path
+ inputs = [self.GypPathToNinja(i, env) for i in rule.get('inputs', [])]
+
+ # If there are n source files matching the rule, and m additional rule
+ # inputs, then adding 'inputs' to each build edge written below will
+ # write m * n inputs. Collapsing reduces this to m + n.
+ sources = rule.get('rule_sources', [])
+ num_inputs = len(inputs)
+ if prebuild:
+ num_inputs += 1
+ if num_inputs > 2 and len(sources) > 2:
+ inputs = [self.WriteCollapsedDependencies(
+ rule['rule_name'], inputs, order_only=prebuild)]
+ prebuild = []
+
# For each source file, write an edge that generates all the outputs.
- for source in rule.get('rule_sources', []):
+ for source in sources:
source = os.path.normpath(source)
dirname, basename = os.path.split(source)
root, ext = os.path.splitext(basename)
@@ -663,9 +682,6 @@ class NinjaWriter:
outputs = [self.ExpandRuleVariables(o, root, dirname,
source, ext, basename)
for o in rule['outputs']]
- inputs = [self.ExpandRuleVariables(i, root, dirname,
- source, ext, basename)
- for i in rule.get('inputs', [])]
if int(rule.get('process_outputs_as_sources', False)):
extra_sources += outputs
@@ -703,10 +719,11 @@ class NinjaWriter:
else:
assert var == None, repr(var)
- inputs = [self.GypPathToNinja(i, env) for i in inputs]
outputs = [self.GypPathToNinja(o, env) for o in outputs]
- extra_bindings.append(('unique_name',
- hashlib.md5(outputs[0]).hexdigest()))
+ if self.flavor == 'win':
+ # WriteNewNinjaRule uses unique_name for creating an rsp file on win.
+ extra_bindings.append(('unique_name',
+ hashlib.md5(outputs[0]).hexdigest()))
self.ninja.build(outputs, rule_name, self.GypPathToNinja(source),
implicit=inputs,
order_only=prebuild,
@@ -718,7 +735,7 @@ class NinjaWriter:
def WriteCopies(self, copies, prebuild, mac_bundle_depends):
outputs = []
- env = self.GetSortedXcodeEnv()
+ env = self.GetToolchainEnv()
for copy in copies:
for path in copy['files']:
# Normalize the path so trailing slashes don't confuse us.
@@ -810,6 +827,7 @@ class NinjaWriter:
cflags_objcc = ['$cflags_cc'] + \
self.xcode_settings.GetCflagsObjCC(config_name)
elif self.flavor == 'win':
+ asmflags = self.msvs_settings.GetAsmflags(config_name)
cflags = self.msvs_settings.GetCflags(config_name)
cflags_c = self.msvs_settings.GetCflagsC(config_name)
cflags_cc = self.msvs_settings.GetCflagsCC(config_name)
@@ -844,16 +862,17 @@ class NinjaWriter:
self.WriteVariableList(ninja_file, 'defines',
[Define(d, self.flavor) for d in defines])
if self.flavor == 'win':
+ self.WriteVariableList(ninja_file, 'asmflags',
+ map(self.ExpandSpecial, asmflags))
self.WriteVariableList(ninja_file, 'rcflags',
[QuoteShellArgument(self.ExpandSpecial(f), self.flavor)
for f in self.msvs_settings.GetRcflags(config_name,
self.GypPathToNinja)])
include_dirs = config.get('include_dirs', [])
- env = self.GetSortedXcodeEnv()
+
+ env = self.GetToolchainEnv()
if self.flavor == 'win':
- env = self.msvs_settings.GetVSMacroEnv('$!PRODUCT_DIR',
- config=config_name)
include_dirs = self.msvs_settings.AdjustIncludeDirs(include_dirs,
config_name)
self.WriteVariableList(ninja_file, 'includes',
@@ -1037,15 +1056,21 @@ class NinjaWriter:
self.GypPathToNinja, arch)
ldflags = env_ldflags + ldflags
elif self.flavor == 'win':
- manifest_name = self.GypPathToUniqueOutput(
+ manifest_base_name = self.GypPathToUniqueOutput(
self.ComputeOutputFileName(spec))
- ldflags, manifest_files = self.msvs_settings.GetLdflags(config_name,
- self.GypPathToNinja, self.ExpandSpecial, manifest_name, is_executable)
+ ldflags, intermediate_manifest, manifest_files = \
+ self.msvs_settings.GetLdflags(config_name, self.GypPathToNinja,
+ self.ExpandSpecial, manifest_base_name,
+ output, is_executable,
+ self.toplevel_build)
ldflags = env_ldflags + ldflags
self.WriteVariableList(ninja_file, 'manifests', manifest_files)
+ implicit_deps = implicit_deps.union(manifest_files)
+ if intermediate_manifest:
+ self.WriteVariableList(
+ ninja_file, 'intermediatemanifest', [intermediate_manifest])
command_suffix = _GetWinLinkRuleNameSuffix(
- self.msvs_settings.IsEmbedManifest(config_name),
- self.msvs_settings.IsLinkIncremental(config_name))
+ self.msvs_settings.IsEmbedManifest(config_name))
def_file = self.msvs_settings.GetDefFile(self.GypPathToNinja)
if def_file:
implicit_deps.add(def_file)
@@ -1089,17 +1114,45 @@ class NinjaWriter:
extra_bindings.append(('soname', os.path.split(output)[1]))
extra_bindings.append(('lib',
gyp.common.EncodePOSIXShellArgument(output)))
+ if self.flavor != 'win':
+ link_file_list = output
+ if self.is_mac_bundle:
+ # 'Dependency Framework.framework/Versions/A/Dependency Framework' ->
+ # 'Dependency Framework.framework.rsp'
+ link_file_list = self.xcode_settings.GetWrapperName()
+ if arch:
+ link_file_list += '.' + arch
+ link_file_list += '.rsp'
+ # If an rspfile contains spaces, ninja surrounds the filename with
+ # quotes around it and then passes it to open(), creating a file with
+ # quotes in its name (and when looking for the rsp file, the name
+ # makes it through bash which strips the quotes) :-/
+ link_file_list = link_file_list.replace(' ', '_')
+ extra_bindings.append(
+ ('link_file_list',
+ gyp.common.EncodePOSIXShellArgument(link_file_list)))
if self.flavor == 'win':
- extra_bindings.append(('dll', output))
+ extra_bindings.append(('binary', output))
if '/NOENTRY' not in ldflags:
self.target.import_lib = output + '.lib'
extra_bindings.append(('implibflag',
'/IMPLIB:%s' % self.target.import_lib))
+ pdbname = self.msvs_settings.GetPDBName(
+ config_name, self.ExpandSpecial, output + '.pdb')
output = [output, self.target.import_lib]
+ if pdbname:
+ output.append(pdbname)
elif not self.is_mac_bundle:
output = [output, output + '.TOC']
else:
command = command + '_notoc'
+ elif self.flavor == 'win':
+ extra_bindings.append(('binary', output))
+ pdbname = self.msvs_settings.GetPDBName(
+ config_name, self.ExpandSpecial, output + '.pdb')
+ if pdbname:
+ output = [output, pdbname]
+
if len(solibs):
extra_bindings.append(('solibs', gyp.common.EncodePOSIXShellList(solibs)))
@@ -1179,6 +1232,19 @@ class NinjaWriter:
self.target.bundle = output
return output
+ def GetToolchainEnv(self, additional_settings=None):
+ """Returns the variables toolchain would set for build steps."""
+ env = self.GetSortedXcodeEnv(additional_settings=additional_settings)
+ if self.flavor == 'win':
+ env = self.GetMsvsToolchainEnv(
+ additional_settings=additional_settings)
+ return env
+
+ def GetMsvsToolchainEnv(self, additional_settings=None):
+ """Returns the variables Visual Studio would set for build steps."""
+ return self.msvs_settings.GetVSMacroEnv('$!PRODUCT_DIR',
+ config=self.config_name)
+
def GetSortedXcodeEnv(self, additional_settings=None):
"""Returns the variables Xcode would set for build steps."""
assert self.abs_build_dir
@@ -1505,10 +1571,7 @@ def CalculateGeneratorInputInfo(params):
def OpenOutput(path, mode='w'):
"""Open |path| for writing, creating directories if necessary."""
- try:
- os.makedirs(os.path.dirname(path))
- except OSError:
- pass
+ gyp.common.EnsureDirExists(path)
return open(path, mode)
@@ -1521,6 +1584,10 @@ def CommandWithWrapper(cmd, wrappers, prog):
def GetDefaultConcurrentLinks():
"""Returns a best-guess for a number of concurrent links."""
+ pool_size = int(os.getenv('GYP_LINK_CONCURRENCY', 0))
+ if pool_size:
+ return pool_size
+
if sys.platform in ('win32', 'cygwin'):
import ctypes
@@ -1545,14 +1612,15 @@ def GetDefaultConcurrentLinks():
hard_cap = max(1, int(os.getenv('GYP_LINK_CONCURRENCY_MAX', 2**32)))
return min(mem_limit, hard_cap)
elif sys.platform.startswith('linux'):
- with open("/proc/meminfo") as meminfo:
- memtotal_re = re.compile(r'^MemTotal:\s*(\d*)\s*kB')
- for line in meminfo:
- match = memtotal_re.match(line)
- if not match:
- continue
- # Allow 8Gb per link on Linux because Gold is quite memory hungry
- return max(1, int(match.group(1)) / (8 * (2 ** 20)))
+ if os.path.exists("/proc/meminfo"):
+ with open("/proc/meminfo") as meminfo:
+ memtotal_re = re.compile(r'^MemTotal:\s*(\d*)\s*kB')
+ for line in meminfo:
+ match = memtotal_re.match(line)
+ if not match:
+ continue
+ # Allow 8Gb per link on Linux because Gold is quite memory hungry
+ return max(1, int(match.group(1)) / (8 * (2 ** 20)))
return 1
elif sys.platform == 'darwin':
try:
@@ -1567,90 +1635,57 @@ def GetDefaultConcurrentLinks():
return 1
-def _GetWinLinkRuleNameSuffix(embed_manifest, link_incremental):
+def _GetWinLinkRuleNameSuffix(embed_manifest):
"""Returns the suffix used to select an appropriate linking rule depending on
- whether the manifest embedding and/or incremental linking is enabled."""
- suffix = ''
- if embed_manifest:
- suffix += '_embed'
- if link_incremental:
- suffix += '_inc'
- return suffix
+ whether the manifest embedding is enabled."""
+ return '_embed' if embed_manifest else ''
-def _AddWinLinkRules(master_ninja, embed_manifest, link_incremental):
+def _AddWinLinkRules(master_ninja, embed_manifest):
"""Adds link rules for Windows platform to |master_ninja|."""
def FullLinkCommand(ldcmd, out, binary_type):
- """Returns a one-liner written for cmd.exe to handle multiphase linker
- operations including manifest file generation. The command will be
- structured as follows:
- cmd /c (linkcmd1 a b) && (linkcmd2 x y) && ... &&
- if not "$manifests"=="" ((manifestcmd1 a b) && (manifestcmd2 x y) && ... )
- Note that $manifests becomes empty when no manifest file is generated."""
- link_commands = ['%(ldcmd)s',
- 'if exist %(out)s.manifest del %(out)s.manifest']
- mt_cmd = ('%(python)s gyp-win-tool manifest-wrapper'
- ' $arch $mt -nologo -manifest $manifests')
- if embed_manifest and not link_incremental:
- # Embed manifest into a binary. If incremental linking is enabled,
- # embedding is postponed to the re-linking stage (see below).
- mt_cmd += ' -outputresource:%(out)s;%(resname)s'
- else:
- # Save manifest as an external file.
- mt_cmd += ' -out:%(out)s.manifest'
- manifest_commands = [mt_cmd]
- if link_incremental:
- # There is no point in generating separate rule for the case when
- # incremental linking is enabled, but manifest embedding is disabled.
- # In that case the basic rule should be used (e.g. 'link').
- # See also implementation of _GetWinLinkRuleNameSuffix().
- assert embed_manifest
- # Make .rc file out of manifest, compile it to .res file and re-link.
- manifest_commands += [
- ('%(python)s gyp-win-tool manifest-to-rc $arch %(out)s.manifest'
- ' %(out)s.manifest.rc %(resname)s'),
- '%(python)s gyp-win-tool rc-wrapper $arch $rc %(out)s.manifest.rc',
- '%(ldcmd)s %(out)s.manifest.res']
- cmd = 'cmd /c %s && if not "$manifests"=="" (%s)' % (
- ' && '.join(['(%s)' % c for c in link_commands]),
- ' && '.join(['(%s)' % c for c in manifest_commands]))
resource_name = {
'exe': '1',
'dll': '2',
}[binary_type]
- return cmd % {'python': sys.executable,
- 'out': out,
- 'ldcmd': ldcmd,
- 'resname': resource_name}
-
- rule_name_suffix = _GetWinLinkRuleNameSuffix(embed_manifest, link_incremental)
- dlldesc = 'LINK%s(DLL) $dll' % rule_name_suffix.upper()
- dllcmd = ('%s gyp-win-tool link-wrapper $arch '
- '$ld /nologo $implibflag /DLL /OUT:$dll '
- '/PDB:$dll.pdb @$dll.rsp' % sys.executable)
- dllcmd = FullLinkCommand(dllcmd, '$dll', 'dll')
+ return '%(python)s gyp-win-tool link-with-manifests $arch %(embed)s ' \
+ '%(out)s "%(ldcmd)s" %(resname)s $mt $rc "$intermediatemanifest" ' \
+ '$manifests' % {
+ 'python': sys.executable,
+ 'out': out,
+ 'ldcmd': ldcmd,
+ 'resname': resource_name,
+ 'embed': embed_manifest }
+ rule_name_suffix = _GetWinLinkRuleNameSuffix(embed_manifest)
+ use_separate_mspdbsrv = (
+ int(os.environ.get('GYP_USE_SEPARATE_MSPDBSRV', '0')) != 0)
+ dlldesc = 'LINK%s(DLL) $binary' % rule_name_suffix.upper()
+ dllcmd = ('%s gyp-win-tool link-wrapper $arch %s '
+ '$ld /nologo $implibflag /DLL /OUT:$binary '
+ '@$binary.rsp' % (sys.executable, use_separate_mspdbsrv))
+ dllcmd = FullLinkCommand(dllcmd, '$binary', 'dll')
master_ninja.rule('solink' + rule_name_suffix,
description=dlldesc, command=dllcmd,
- rspfile='$dll.rsp',
+ rspfile='$binary.rsp',
rspfile_content='$libs $in_newline $ldflags',
restat=True,
pool='link_pool')
master_ninja.rule('solink_module' + rule_name_suffix,
description=dlldesc, command=dllcmd,
- rspfile='$dll.rsp',
+ rspfile='$binary.rsp',
rspfile_content='$libs $in_newline $ldflags',
restat=True,
pool='link_pool')
# Note that ldflags goes at the end so that it has the option of
# overriding default settings earlier in the command line.
- exe_cmd = ('%s gyp-win-tool link-wrapper $arch '
- '$ld /nologo /OUT:$out /PDB:$out.pdb @$out.rsp' %
- sys.executable)
- exe_cmd = FullLinkCommand(exe_cmd, '$out', 'exe')
+ exe_cmd = ('%s gyp-win-tool link-wrapper $arch %s '
+ '$ld /nologo /OUT:$binary @$binary.rsp' %
+ (sys.executable, use_separate_mspdbsrv))
+ exe_cmd = FullLinkCommand(exe_cmd, '$binary', 'exe')
master_ninja.rule('link' + rule_name_suffix,
- description='LINK%s $out' % rule_name_suffix.upper(),
+ description='LINK%s $binary' % rule_name_suffix.upper(),
command=exe_cmd,
- rspfile='$out.rsp',
+ rspfile='$binary.rsp',
rspfile_content='$in_newline $libs $ldflags',
pool='link_pool')
@@ -1682,14 +1717,15 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
# 'CC_host'/'CXX_host' enviroment variable, cc_host/cxx_host should be set
# to cc/cxx.
if flavor == 'win':
- # Overridden by local arch choice in the use_deps case.
- # Chromium's ffmpeg c99conv.py currently looks for a 'cc =' line in
- # build.ninja so needs something valid here. http://crbug.com/233985
- cc = 'cl.exe'
- cxx = 'cl.exe'
+ ar = 'lib.exe'
+ # cc and cxx must be set to the correct architecture by overriding with one
+ # of cl_x86 or cl_x64 below.
+ cc = 'UNSET'
+ cxx = 'UNSET'
ld = 'link.exe'
ld_host = '$ld'
else:
+ ar = 'ar'
cc = 'cc'
cxx = 'c++'
ld = '$cc'
@@ -1697,10 +1733,12 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
ld_host = '$cc_host'
ldxx_host = '$cxx_host'
+ ar_host = 'ar'
cc_host = None
cxx_host = None
cc_host_global_setting = None
cxx_host_global_setting = None
+ clang_cl = None
build_file, _, _ = gyp.common.ParseQualifiedTarget(target_list[0])
make_global_settings = data[build_file].get('make_global_settings', [])
@@ -1708,8 +1746,14 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
options.toplevel_dir)
wrappers = {}
for key, value in make_global_settings:
+ if key == 'AR':
+ ar = os.path.join(build_to_root, value)
+ if key == 'AR.host':
+ ar_host = os.path.join(build_to_root, value)
if key == 'CC':
cc = os.path.join(build_to_root, value)
+ if cc.endswith('clang-cl'):
+ clang_cl = cc
if key == 'CXX':
cxx = os.path.join(build_to_root, value)
if key == 'CC.host':
@@ -1718,6 +1762,10 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
if key == 'CXX.host':
cxx_host = os.path.join(build_to_root, value)
cxx_host_global_setting = value
+ if key == 'LD':
+ ld = os.path.join(build_to_root, value)
+ if key == 'LD.host':
+ ld_host = os.path.join(build_to_root, value)
if key.endswith('_wrapper'):
wrappers[key[:-len('_wrapper')]] = os.path.join(build_to_root, value)
@@ -1732,9 +1780,15 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
cl_paths = gyp.msvs_emulation.GenerateEnvironmentFiles(
toplevel_build, generator_flags, OpenOutput)
for arch, path in cl_paths.iteritems():
- master_ninja.variable(
- 'cl_' + arch, CommandWithWrapper('CC', wrappers,
- QuoteShellArgument(path, flavor)))
+ if clang_cl:
+ # If we have selected clang-cl, use that instead.
+ path = clang_cl
+ command = CommandWithWrapper('CC', wrappers,
+ QuoteShellArgument(path, 'win'))
+ if clang_cl:
+ # Use clang-cl to cross-compile for x86 or x86_64.
+ command += (' -m32' if arch == 'x86' else ' -m64')
+ master_ninja.variable('cl_' + arch, command)
cc = GetEnvironFallback(['CC_target', 'CC'], cc)
master_ninja.variable('cc', CommandWithWrapper('CC', wrappers, cc))
@@ -1744,14 +1798,14 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
if flavor == 'win':
master_ninja.variable('ld', ld)
master_ninja.variable('idl', 'midl.exe')
- master_ninja.variable('ar', 'lib.exe')
+ master_ninja.variable('ar', ar)
master_ninja.variable('rc', 'rc.exe')
master_ninja.variable('asm', 'ml.exe')
master_ninja.variable('mt', 'mt.exe')
else:
master_ninja.variable('ld', CommandWithWrapper('LINK', wrappers, ld))
master_ninja.variable('ldxx', CommandWithWrapper('LINK', wrappers, ldxx))
- master_ninja.variable('ar', GetEnvironFallback(['AR_target', 'AR'], 'ar'))
+ master_ninja.variable('ar', GetEnvironFallback(['AR_target', 'AR'], ar))
if generator_supports_multiple_toolsets:
if not cc_host:
@@ -1759,7 +1813,7 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
if not cxx_host:
cxx_host = cxx
- master_ninja.variable('ar_host', GetEnvironFallback(['AR_host'], 'ar'))
+ master_ninja.variable('ar_host', GetEnvironFallback(['AR_host'], ar_host))
cc_host = GetEnvironFallback(['CC_host'], cc_host)
cxx_host = GetEnvironFallback(['CXX_host'], cxx_host)
@@ -1852,9 +1906,9 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
sys.executable))
master_ninja.rule(
'asm',
- description='ASM $in',
+ description='ASM $out',
command=('%s gyp-win-tool asm-wrapper '
- '$arch $asm $defines $includes /c /Fo $out $in' %
+ '$arch $asm $defines $includes $asmflags /c /Fo $out $in' %
sys.executable))
if flavor != 'mac' and flavor != 'win':
@@ -1873,54 +1927,51 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
# The resulting string leaves an uninterpolated %{suffix} which
# is used in the final substitution below.
mtime_preserving_solink_base = (
- 'if [ ! -e $lib -o ! -e ${lib}.TOC ]; then '
- '%(solink)s && %(extract_toc)s > ${lib}.TOC; else '
- '%(solink)s && %(extract_toc)s > ${lib}.tmp && '
- 'if ! cmp -s ${lib}.tmp ${lib}.TOC; then mv ${lib}.tmp ${lib}.TOC ; '
+ 'if [ ! -e $lib -o ! -e $lib.TOC ]; then '
+ '%(solink)s && %(extract_toc)s > $lib.TOC; else '
+ '%(solink)s && %(extract_toc)s > $lib.tmp && '
+ 'if ! cmp -s $lib.tmp $lib.TOC; then mv $lib.tmp $lib.TOC ; '
'fi; fi'
% { 'solink':
'$ld -shared $ldflags -o $lib -Wl,-soname=$soname %(suffix)s',
'extract_toc':
- ('{ readelf -d ${lib} | grep SONAME ; '
- 'nm -gD -f p ${lib} | cut -f1-2 -d\' \'; }')})
+ ('{ readelf -d $lib | grep SONAME ; '
+ 'nm -gD -f p $lib | cut -f1-2 -d\' \'; }')})
master_ninja.rule(
'solink',
description='SOLINK $lib',
restat=True,
- command=(mtime_preserving_solink_base % {
- 'suffix': '-Wl,--whole-archive $in $solibs -Wl,--no-whole-archive '
- '$libs'}),
+ command=mtime_preserving_solink_base % {'suffix': '@$link_file_list'},
+ rspfile='$link_file_list',
+ rspfile_content=
+ '-Wl,--whole-archive $in $solibs -Wl,--no-whole-archive $libs',
pool='link_pool')
master_ninja.rule(
'solink_module',
description='SOLINK(module) $lib',
restat=True,
- command=(mtime_preserving_solink_base % {
- 'suffix': '-Wl,--start-group $in $solibs -Wl,--end-group '
- '$libs'}),
+ command=mtime_preserving_solink_base % {'suffix': '@$link_file_list'},
+ rspfile='$link_file_list',
+ rspfile_content='-Wl,--start-group $in -Wl,--end-group $solibs $libs',
pool='link_pool')
master_ninja.rule(
'link',
description='LINK $out',
command=('$ld $ldflags -o $out '
- '-Wl,--start-group $in $solibs -Wl,--end-group $libs'),
+ '-Wl,--start-group $in -Wl,--end-group $solibs $libs'),
pool='link_pool')
elif flavor == 'win':
master_ninja.rule(
'alink',
description='LIB $out',
- command=('%s gyp-win-tool link-wrapper $arch '
+ command=('%s gyp-win-tool link-wrapper $arch False '
'$ar /nologo /ignore:4221 /OUT:$out @$out.rsp' %
sys.executable),
rspfile='$out.rsp',
rspfile_content='$in_newline $libflags')
- _AddWinLinkRules(master_ninja, embed_manifest=True, link_incremental=True)
- _AddWinLinkRules(master_ninja, embed_manifest=True, link_incremental=False)
- _AddWinLinkRules(master_ninja, embed_manifest=False, link_incremental=False)
- # Do not generate rules for embed_manifest=False and link_incremental=True
- # because in that case rules for (False, False) should be used (see
- # implementation of _GetWinLinkRuleNameSuffix()).
+ _AddWinLinkRules(master_ninja, embed_manifest=True)
+ _AddWinLinkRules(master_ninja, embed_manifest=False)
else:
master_ninja.rule(
'objc',
@@ -1952,16 +2003,16 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
# comment in the posix section above for details.
solink_base = '$ld %(type)s $ldflags -o $lib %(suffix)s'
mtime_preserving_solink_base = (
- 'if [ ! -e $lib -o ! -e ${lib}.TOC ] || '
+ 'if [ ! -e $lib -o ! -e $lib.TOC ] || '
# Always force dependent targets to relink if this library
# reexports something. Handling this correctly would require
# recursive TOC dumping but this is rare in practice, so punt.
'otool -l $lib | grep -q LC_REEXPORT_DYLIB ; then '
- '%(solink)s && %(extract_toc)s > ${lib}.TOC; '
+ '%(solink)s && %(extract_toc)s > $lib.TOC; '
'else '
- '%(solink)s && %(extract_toc)s > ${lib}.tmp && '
- 'if ! cmp -s ${lib}.tmp ${lib}.TOC; then '
- 'mv ${lib}.tmp ${lib}.TOC ; '
+ '%(solink)s && %(extract_toc)s > $lib.tmp && '
+ 'if ! cmp -s $lib.tmp $lib.TOC; then '
+ 'mv $lib.tmp $lib.TOC ; '
'fi; '
'fi'
% { 'solink': solink_base,
@@ -1969,34 +2020,42 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
'{ otool -l $lib | grep LC_ID_DYLIB -A 5; '
'nm -gP $lib | cut -f1-2 -d\' \' | grep -v U$$; true; }'})
- solink_suffix = '$in $solibs $libs$postbuilds'
+
+ solink_suffix = '@$link_file_list$postbuilds'
master_ninja.rule(
'solink',
description='SOLINK $lib, POSTBUILDS',
restat=True,
command=mtime_preserving_solink_base % {'suffix': solink_suffix,
'type': '-shared'},
+ rspfile='$link_file_list',
+ rspfile_content='$in $solibs $libs',
pool='link_pool')
master_ninja.rule(
'solink_notoc',
description='SOLINK $lib, POSTBUILDS',
restat=True,
command=solink_base % {'suffix':solink_suffix, 'type': '-shared'},
+ rspfile='$link_file_list',
+ rspfile_content='$in $solibs $libs',
pool='link_pool')
- solink_module_suffix = '$in $solibs $libs$postbuilds'
master_ninja.rule(
'solink_module',
description='SOLINK(module) $lib, POSTBUILDS',
restat=True,
- command=mtime_preserving_solink_base % {'suffix': solink_module_suffix,
+ command=mtime_preserving_solink_base % {'suffix': solink_suffix,
'type': '-bundle'},
+ rspfile='$link_file_list',
+ rspfile_content='$in $solibs $libs',
pool='link_pool')
master_ninja.rule(
'solink_module_notoc',
description='SOLINK(module) $lib, POSTBUILDS',
restat=True,
- command=solink_base % {'suffix': solink_module_suffix, 'type': '-bundle'},
+ command=solink_base % {'suffix': solink_suffix, 'type': '-bundle'},
+ rspfile='$link_file_list',
+ rspfile_content='$in $solibs $libs',
pool='link_pool')
master_ninja.rule(
@@ -2064,7 +2123,8 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
this_make_global_settings = data[build_file].get('make_global_settings', [])
assert make_global_settings == this_make_global_settings, (
- "make_global_settings needs to be the same for all targets.")
+ "make_global_settings needs to be the same for all targets. %s vs. %s" %
+ (this_make_global_settings, make_global_settings))
spec = target_dicts[qualified_target]
if flavor == 'mac':
diff --git a/chromium/tools/gyp/pylib/gyp/generator/xcode.py b/chromium/tools/gyp/pylib/gyp/generator/xcode.py
index 331e78baaa6..7972459363e 100644
--- a/chromium/tools/gyp/pylib/gyp/generator/xcode.py
+++ b/chromium/tools/gyp/pylib/gyp/generator/xcode.py
@@ -5,6 +5,7 @@
import filecmp
import gyp.common
import gyp.xcodeproj_file
+import gyp.xcode_ninja
import errno
import os
import sys
@@ -575,6 +576,12 @@ def PerformBuild(data, configurations, params):
def GenerateOutput(target_list, target_dicts, data, params):
+ # Optionally configure each spec to use ninja as the external builder.
+ ninja_wrapper = params.get('flavor') == 'ninja'
+ if ninja_wrapper:
+ (target_list, target_dicts, data) = \
+ gyp.xcode_ninja.CreateWrapper(target_list, target_dicts, data, params)
+
options = params['options']
generator_flags = params.get('generator_flags', {})
parallel_builds = generator_flags.get('xcode_parallel_builds', True)
@@ -703,11 +710,16 @@ def GenerateOutput(target_list, target_dicts, data, params):
# and is made a dependency of this target. This way the work is done
# before the dependency checks for what should be recompiled.
support_xct = None
- if type != 'none' and (spec_actions or spec_rules):
+ # The Xcode "issues" don't affect xcode-ninja builds, since the dependency
+ # logic all happens in ninja. Don't bother creating the extra targets in
+ # that case.
+ if type != 'none' and (spec_actions or spec_rules) and not ninja_wrapper:
support_xccl = CreateXCConfigurationList(configuration_names);
+ support_target_suffix = generator_flags.get(
+ 'support_target_suffix', ' Support')
support_target_properties = {
'buildConfigurationList': support_xccl,
- 'name': target_name + ' Support',
+ 'name': target_name + support_target_suffix,
}
if target_product_name:
support_target_properties['productName'] = \
diff --git a/chromium/tools/gyp/pylib/gyp/input.py b/chromium/tools/gyp/pylib/gyp/input.py
index 9bc449d4d19..b09a2c85405 100644
--- a/chromium/tools/gyp/pylib/gyp/input.py
+++ b/chromium/tools/gyp/pylib/gyp/input.py
@@ -10,8 +10,8 @@ from compiler.ast import Module
from compiler.ast import Node
from compiler.ast import Stmt
import compiler
-import copy
import gyp.common
+import gyp.simple_copy
import multiprocessing
import optparse
import os.path
@@ -24,6 +24,7 @@ import threading
import time
import traceback
from gyp.common import GypError
+from gyp.common import OrderedSet
# A list of types that are treated as linkable.
@@ -45,18 +46,31 @@ base_path_sections = [
'outputs',
'sources',
]
-path_sections = []
-
-is_path_section_charset = set('=+?!')
-is_path_section_match_re = re.compile('_(dir|file|path)s?$')
+path_sections = set()
def IsPathSection(section):
- # If section ends in one of these characters, it's applied to a section
+ # If section ends in one of the '=+?!' characters, it's applied to a section
# without the trailing characters. '/' is notably absent from this list,
# because there's no way for a regular expression to be treated as a path.
- while section[-1:] in is_path_section_charset:
+ while section[-1:] in '=+?!':
section = section[:-1]
- return section in path_sections or is_path_section_match_re.search(section)
+
+ if section in path_sections:
+ return True
+
+ # Sections mathing the regexp '_(dir|file|path)s?$' are also
+ # considered PathSections. Using manual string matching since that
+ # is much faster than the regexp and this can be called hundreds of
+ # thousands of times so micro performance matters.
+ if "_" in section:
+ tail = section[-6:]
+ if tail[-1] == 's':
+ tail = tail[:-1]
+ if tail[-5:] in ('_file', '_path'):
+ return True
+ return tail[-4:] == '_dir'
+
+ return False
# base_non_configuration_keys is a list of key names that belong in the target
# itself and should not be propagated into its configurations. It is merged
@@ -200,7 +214,7 @@ def CheckNode(node, keypath):
"': " + repr(node)
-def LoadOneBuildFile(build_file_path, data, aux_data, variables, includes,
+def LoadOneBuildFile(build_file_path, data, aux_data, includes,
is_target, check):
if build_file_path in data:
return data[build_file_path]
@@ -224,7 +238,7 @@ def LoadOneBuildFile(build_file_path, data, aux_data, variables, includes,
gyp.common.ExceptionAppend(e, 'while reading ' + build_file_path)
raise
- if not isinstance(build_file_data, dict):
+ if type(build_file_data) is not dict:
raise GypError("%s does not evaluate to a dictionary." % build_file_path)
data[build_file_path] = build_file_data
@@ -236,10 +250,10 @@ def LoadOneBuildFile(build_file_path, data, aux_data, variables, includes,
try:
if is_target:
LoadBuildFileIncludesIntoDict(build_file_data, build_file_path, data,
- aux_data, variables, includes, check)
+ aux_data, includes, check)
else:
LoadBuildFileIncludesIntoDict(build_file_data, build_file_path, data,
- aux_data, variables, None, check)
+ aux_data, None, check)
except Exception, e:
gyp.common.ExceptionAppend(e,
'while reading includes of ' + build_file_path)
@@ -249,7 +263,7 @@ def LoadOneBuildFile(build_file_path, data, aux_data, variables, includes,
def LoadBuildFileIncludesIntoDict(subdict, subdict_path, data, aux_data,
- variables, includes, check):
+ includes, check):
includes_list = []
if includes != None:
includes_list.extend(includes)
@@ -273,30 +287,27 @@ def LoadBuildFileIncludesIntoDict(subdict, subdict_path, data, aux_data,
gyp.DebugOutput(gyp.DEBUG_INCLUDES, "Loading Included File: '%s'", include)
MergeDicts(subdict,
- LoadOneBuildFile(include, data, aux_data, variables, None,
- False, check),
+ LoadOneBuildFile(include, data, aux_data, None, False, check),
subdict_path, include)
# Recurse into subdictionaries.
for k, v in subdict.iteritems():
- if v.__class__ == dict:
- LoadBuildFileIncludesIntoDict(v, subdict_path, data, aux_data, variables,
+ if type(v) is dict:
+ LoadBuildFileIncludesIntoDict(v, subdict_path, data, aux_data,
None, check)
- elif v.__class__ == list:
- LoadBuildFileIncludesIntoList(v, subdict_path, data, aux_data, variables,
+ elif type(v) is list:
+ LoadBuildFileIncludesIntoList(v, subdict_path, data, aux_data,
check)
# This recurses into lists so that it can look for dicts.
-def LoadBuildFileIncludesIntoList(sublist, sublist_path, data, aux_data,
- variables, check):
+def LoadBuildFileIncludesIntoList(sublist, sublist_path, data, aux_data, check):
for item in sublist:
- if item.__class__ == dict:
+ if type(item) is dict:
LoadBuildFileIncludesIntoDict(item, sublist_path, data, aux_data,
- variables, None, check)
- elif item.__class__ == list:
- LoadBuildFileIncludesIntoList(item, sublist_path, data, aux_data,
- variables, check)
+ None, check)
+ elif type(item) is list:
+ LoadBuildFileIncludesIntoList(item, sublist_path, data, aux_data, check)
# Processes toolsets in all the targets. This recurses into condition entries
# since they can contain toolsets as well.
@@ -320,7 +331,7 @@ def ProcessToolsetsInDict(data):
if len(toolsets) > 0:
# Optimization: only do copies if more than one toolset is specified.
for build in toolsets[1:]:
- new_target = copy.deepcopy(target)
+ new_target = gyp.simple_copy.deepcopy(target)
new_target['toolset'] = build
new_target_list.append(new_target)
target['toolset'] = toolsets[0]
@@ -328,7 +339,7 @@ def ProcessToolsetsInDict(data):
data['targets'] = new_target_list
if 'conditions' in data:
for condition in data['conditions']:
- if isinstance(condition, list):
+ if type(condition) is list:
for condition_dict in condition[1:]:
ProcessToolsetsInDict(condition_dict)
@@ -358,7 +369,7 @@ def LoadTargetBuildFile(build_file_path, data, aux_data, variables, includes,
gyp.DebugOutput(gyp.DEBUG_INCLUDES,
"Loading Target Build File '%s'", build_file_path)
- build_file_data = LoadOneBuildFile(build_file_path, data, aux_data, variables,
+ build_file_data = LoadOneBuildFile(build_file_path, data, aux_data,
includes, True, check)
# Store DEPTH for later use in generators.
@@ -408,7 +419,8 @@ def LoadTargetBuildFile(build_file_path, data, aux_data, variables, includes,
# copy with the target-specific data merged into it as the replacement
# target dict.
old_target_dict = build_file_data['targets'][index]
- new_target_dict = copy.deepcopy(build_file_data['target_defaults'])
+ new_target_dict = gyp.simple_copy.deepcopy(
+ build_file_data['target_defaults'])
MergeDicts(new_target_dict, old_target_dict,
build_file_path, build_file_path)
build_file_data['targets'][index] = new_target_dict
@@ -591,7 +603,7 @@ def LoadTargetBuildFilesParallel(build_files, data, aux_data,
'multiple_toolsets': globals()['multiple_toolsets']}
if not parallel_state.pool:
- parallel_state.pool = multiprocessing.Pool(8)
+ parallel_state.pool = multiprocessing.Pool(multiprocessing.cpu_count())
parallel_state.pool.apply_async(
CallLoadTargetBuildFile,
args = (global_flags, dependency,
@@ -636,15 +648,26 @@ def FindEnclosingBracketGroup(input_str):
return (-1, -1)
-canonical_int_re = re.compile('(0|-?[1-9][0-9]*)$')
-
-
def IsStrCanonicalInt(string):
"""Returns True if |string| is in its canonical integer form.
The canonical form is such that str(int(string)) == string.
"""
- return isinstance(string, str) and canonical_int_re.match(string)
+ if type(string) is str:
+ # This function is called a lot so for maximum performance, avoid
+ # involving regexps which would otherwise make the code much
+ # shorter. Regexps would need twice the time of this function.
+ if string:
+ if string == "0":
+ return True
+ if string[0] == "-":
+ string = string[1:]
+ if not string:
+ return False
+ if '1' <= string[0] <= '9':
+ return string.isdigit()
+
+ return False
# This matches things like "<(asdf)", "<!(cmd)", "<!@(cmd)", "<|(list)",
@@ -677,7 +700,7 @@ cached_command_results = {}
def FixupPlatformCommand(cmd):
if sys.platform == 'win32':
- if type(cmd) == list:
+ if type(cmd) is list:
cmd = [re.sub('^cat ', 'type ', cmd[0])] + cmd[1:]
else:
cmd = re.sub('^cat ', 'type ', cmd)
@@ -767,7 +790,7 @@ def ExpandVariables(input, phase, variables, build_file):
# contexts. However, since filtration has no chance to run on <|(),
# this seems like the only obvious way to give them access to filters.
if file_list:
- processed_variables = copy.deepcopy(variables)
+ processed_variables = gyp.simple_copy.deepcopy(variables)
ProcessListFiltersInDict(contents, processed_variables)
# Recurse to expand variables in the contents
contents = ExpandVariables(contents, phase,
@@ -804,7 +827,7 @@ def ExpandVariables(input, phase, variables, build_file):
# This works around actions/rules which have more inputs than will
# fit on the command line.
if file_list:
- if type(contents) == list:
+ if type(contents) is list:
contents_list = contents
else:
contents_list = contents.split(' ')
@@ -822,8 +845,7 @@ def ExpandVariables(input, phase, variables, build_file):
rel_build_file_dir = build_file_dir
qualified_out_dir = generator_filelist_paths['qualified_out_dir']
path = os.path.join(qualified_out_dir, rel_build_file_dir, replacement)
- if not os.path.isdir(os.path.dirname(path)):
- os.makedirs(os.path.dirname(path))
+ gyp.common.EnsureDirExists(path)
replacement = gyp.common.RelativePath(path, build_file_dir)
f = gyp.common.WriteOnDiff(path)
@@ -838,17 +860,15 @@ def ExpandVariables(input, phase, variables, build_file):
use_shell = False
# Check for a cached value to avoid executing commands, or generating
- # file lists more than once.
- # TODO(http://code.google.com/p/gyp/issues/detail?id=112): It is
- # possible that the command being invoked depends on the current
- # directory. For that case the syntax needs to be extended so that the
- # directory is also used in cache_key (it becomes a tuple).
+ # file lists more than once. The cache key contains the command to be
+ # run as well as the directory to run it from, to account for commands
+ # that depend on their current directory.
# TODO(http://code.google.com/p/gyp/issues/detail?id=111): In theory,
# someone could author a set of GYP files where each time the command
# is invoked it produces different output by design. When the need
# arises, the syntax should be extended to support no caching off a
# command's output so it is run every time.
- cache_key = str(contents)
+ cache_key = (str(contents), build_file_dir)
cached_value = cached_command_results.get(cache_key, None)
if cached_value is None:
gyp.DebugOutput(gyp.DEBUG_VARIABLES,
@@ -926,10 +946,9 @@ def ExpandVariables(input, phase, variables, build_file):
else:
replacement = variables[contents]
- if isinstance(replacement, list):
+ if type(replacement) is list:
for item in replacement:
- if (not contents[-1] == '/' and
- not isinstance(item, str) and not isinstance(item, int)):
+ if not contents[-1] == '/' and type(item) not in (str, int):
raise GypError('Variable ' + contents +
' must expand to a string or list of strings; ' +
'list contains a ' +
@@ -939,8 +958,7 @@ def ExpandVariables(input, phase, variables, build_file):
# with conditions sections.
ProcessVariablesAndConditionsInList(replacement, phase, variables,
build_file)
- elif not isinstance(replacement, str) and \
- not isinstance(replacement, int):
+ elif type(replacement) not in (str, int):
raise GypError('Variable ' + contents +
' must expand to a string or list of strings; ' +
'found a ' + replacement.__class__.__name__)
@@ -949,7 +967,7 @@ def ExpandVariables(input, phase, variables, build_file):
# Expanding in list context. It's guaranteed that there's only one
# replacement to do in |input_str| and that it's this replacement. See
# above.
- if isinstance(replacement, list):
+ if type(replacement) is list:
# If it's already a list, make a copy.
output = replacement[:]
else:
@@ -958,7 +976,7 @@ def ExpandVariables(input, phase, variables, build_file):
else:
# Expanding in string context.
encoded_replacement = ''
- if isinstance(replacement, list):
+ if type(replacement) is list:
# When expanding a list into string context, turn the list items
# into a string in a way that will work with a subprocess call.
#
@@ -980,8 +998,8 @@ def ExpandVariables(input, phase, variables, build_file):
# expanding local variables (variables defined in the same
# variables block as this one).
gyp.DebugOutput(gyp.DEBUG_VARIABLES, "Found output %r, recursing.", output)
- if isinstance(output, list):
- if output and isinstance(output[0], list):
+ if type(output) is list:
+ if output and type(output[0]) is list:
# Leave output alone if it's a list of lists.
# We don't want such lists to be stringified.
pass
@@ -995,7 +1013,7 @@ def ExpandVariables(input, phase, variables, build_file):
output = ExpandVariables(output, phase, variables, build_file)
# Convert all strings that are canonically-represented integers into integers.
- if isinstance(output, list):
+ if type(output) is list:
for index in xrange(0, len(output)):
if IsStrCanonicalInt(output[index]):
output[index] = int(output[index])
@@ -1004,6 +1022,57 @@ def ExpandVariables(input, phase, variables, build_file):
return output
+# The same condition is often evaluated over and over again so it
+# makes sense to cache as much as possible between evaluations.
+cached_conditions_asts = {}
+
+def EvalCondition(condition, conditions_key, phase, variables, build_file):
+ """Returns the dict that should be used or None if the result was
+ that nothing should be used."""
+ if type(condition) is not list:
+ raise GypError(conditions_key + ' must be a list')
+ if len(condition) != 2 and len(condition) != 3:
+ # It's possible that condition[0] won't work in which case this
+ # attempt will raise its own IndexError. That's probably fine.
+ raise GypError(conditions_key + ' ' + condition[0] +
+ ' must be length 2 or 3, not ' + str(len(condition)))
+
+ [cond_expr, true_dict] = condition[0:2]
+ false_dict = None
+ if len(condition) == 3:
+ false_dict = condition[2]
+
+ # Do expansions on the condition itself. Since the conditon can naturally
+ # contain variable references without needing to resort to GYP expansion
+ # syntax, this is of dubious value for variables, but someone might want to
+ # use a command expansion directly inside a condition.
+ cond_expr_expanded = ExpandVariables(cond_expr, phase, variables,
+ build_file)
+ if type(cond_expr_expanded) not in (str, int):
+ raise ValueError, \
+ 'Variable expansion in this context permits str and int ' + \
+ 'only, found ' + cond_expr_expanded.__class__.__name__
+
+ try:
+ if cond_expr_expanded in cached_conditions_asts:
+ ast_code = cached_conditions_asts[cond_expr_expanded]
+ else:
+ ast_code = compile(cond_expr_expanded, '<string>', 'eval')
+ cached_conditions_asts[cond_expr_expanded] = ast_code
+ if eval(ast_code, {'__builtins__': None}, variables):
+ return true_dict
+ return false_dict
+ except SyntaxError, e:
+ syntax_error = SyntaxError('%s while evaluating condition \'%s\' in %s '
+ 'at character %d.' %
+ (str(e.args[0]), e.text, build_file, e.offset),
+ e.filename, e.lineno, e.offset, e.text)
+ raise syntax_error
+ except NameError, e:
+ gyp.common.ExceptionAppend(e, 'while evaluating condition \'%s\' in %s' %
+ (cond_expr_expanded, build_file))
+ raise GypError(e)
+
def ProcessConditionsInDict(the_dict, phase, variables, build_file):
# Process a 'conditions' or 'target_conditions' section in the_dict,
@@ -1039,48 +1108,8 @@ def ProcessConditionsInDict(the_dict, phase, variables, build_file):
del the_dict[conditions_key]
for condition in conditions_list:
- if not isinstance(condition, list):
- raise GypError(conditions_key + ' must be a list')
- if len(condition) != 2 and len(condition) != 3:
- # It's possible that condition[0] won't work in which case this
- # attempt will raise its own IndexError. That's probably fine.
- raise GypError(conditions_key + ' ' + condition[0] +
- ' must be length 2 or 3, not ' + str(len(condition)))
-
- [cond_expr, true_dict] = condition[0:2]
- false_dict = None
- if len(condition) == 3:
- false_dict = condition[2]
-
- # Do expansions on the condition itself. Since the conditon can naturally
- # contain variable references without needing to resort to GYP expansion
- # syntax, this is of dubious value for variables, but someone might want to
- # use a command expansion directly inside a condition.
- cond_expr_expanded = ExpandVariables(cond_expr, phase, variables,
- build_file)
- if not isinstance(cond_expr_expanded, str) and \
- not isinstance(cond_expr_expanded, int):
- raise ValueError, \
- 'Variable expansion in this context permits str and int ' + \
- 'only, found ' + expanded.__class__.__name__
-
- try:
- ast_code = compile(cond_expr_expanded, '<string>', 'eval')
-
- if eval(ast_code, {'__builtins__': None}, variables):
- merge_dict = true_dict
- else:
- merge_dict = false_dict
- except SyntaxError, e:
- syntax_error = SyntaxError('%s while evaluating condition \'%s\' in %s '
- 'at character %d.' %
- (str(e.args[0]), e.text, build_file, e.offset),
- e.filename, e.lineno, e.offset, e.text)
- raise syntax_error
- except NameError, e:
- gyp.common.ExceptionAppend(e, 'while evaluating condition \'%s\' in %s' %
- (cond_expr_expanded, build_file))
- raise GypError(e)
+ merge_dict = EvalCondition(condition, conditions_key, phase, variables,
+ build_file)
if merge_dict != None:
# Expand variables and nested conditinals in the merge_dict before
@@ -1095,8 +1124,7 @@ def LoadAutomaticVariablesFromDict(variables, the_dict):
# Any keys with plain string values in the_dict become automatic variables.
# The variable name is the key name with a "_" character prepended.
for key, value in the_dict.iteritems():
- if isinstance(value, str) or isinstance(value, int) or \
- isinstance(value, list):
+ if type(value) in (str, int, list):
variables['_' + key] = value
@@ -1109,8 +1137,7 @@ def LoadVariablesFromVariablesDict(variables, the_dict, the_dict_key):
# (it could be a list or it could be parentless because it is a root dict),
# the_dict_key will be None.
for key, value in the_dict.get('variables', {}).iteritems():
- if not isinstance(value, str) and not isinstance(value, int) and \
- not isinstance(value, list):
+ if type(value) not in (str, int, list):
continue
if key.endswith('%'):
@@ -1163,9 +1190,9 @@ def ProcessVariablesAndConditionsInDict(the_dict, phase, variables_in,
for key, value in the_dict.iteritems():
# Skip "variables", which was already processed if present.
- if key != 'variables' and isinstance(value, str):
+ if key != 'variables' and type(value) is str:
expanded = ExpandVariables(value, phase, variables, build_file)
- if not isinstance(expanded, str) and not isinstance(expanded, int):
+ if type(expanded) not in (str, int):
raise ValueError, \
'Variable expansion in this context permits str and int ' + \
'only, found ' + expanded.__class__.__name__ + ' for ' + key
@@ -1222,21 +1249,21 @@ def ProcessVariablesAndConditionsInDict(the_dict, phase, variables_in,
for key, value in the_dict.iteritems():
# Skip "variables" and string values, which were already processed if
# present.
- if key == 'variables' or isinstance(value, str):
+ if key == 'variables' or type(value) is str:
continue
- if isinstance(value, dict):
+ if type(value) is dict:
# Pass a copy of the variables dict so that subdicts can't influence
# parents.
ProcessVariablesAndConditionsInDict(value, phase, variables,
build_file, key)
- elif isinstance(value, list):
+ elif type(value) is list:
# The list itself can't influence the variables dict, and
# ProcessVariablesAndConditionsInList will make copies of the variables
# dict if it needs to pass it to something that can influence it. No
# copy is necessary here.
ProcessVariablesAndConditionsInList(value, phase, variables,
build_file)
- elif not isinstance(value, int):
+ elif type(value) is not int:
raise TypeError, 'Unknown type ' + value.__class__.__name__ + \
' for ' + key
@@ -1247,17 +1274,17 @@ def ProcessVariablesAndConditionsInList(the_list, phase, variables,
index = 0
while index < len(the_list):
item = the_list[index]
- if isinstance(item, dict):
+ if type(item) is dict:
# Make a copy of the variables dict so that it won't influence anything
# outside of its own scope.
ProcessVariablesAndConditionsInDict(item, phase, variables, build_file)
- elif isinstance(item, list):
+ elif type(item) is list:
ProcessVariablesAndConditionsInList(item, phase, variables, build_file)
- elif isinstance(item, str):
+ elif type(item) is str:
expanded = ExpandVariables(item, phase, variables, build_file)
- if isinstance(expanded, str) or isinstance(expanded, int):
+ if type(expanded) in (str, int):
the_list[index] = expanded
- elif isinstance(expanded, list):
+ elif type(expanded) is list:
the_list[index:index+1] = expanded
index += len(expanded)
@@ -1269,7 +1296,7 @@ def ProcessVariablesAndConditionsInList(the_list, phase, variables,
'Variable expansion in this context permits strings and ' + \
'lists only, found ' + expanded.__class__.__name__ + ' at ' + \
index
- elif not isinstance(item, int):
+ elif type(item) is not int:
raise TypeError, 'Unknown type ' + item.__class__.__name__ + \
' at index ' + index
index = index + 1
@@ -1444,6 +1471,20 @@ def RemoveSelfDependencies(targets):
target_dict[dependency_key] = Filter(dependencies, target_name)
+def RemoveLinkDependenciesFromNoneTargets(targets):
+ """Remove dependencies having the 'link_dependency' attribute from the 'none'
+ targets."""
+ for target_name, target_dict in targets.iteritems():
+ for dependency_key in dependency_sections:
+ dependencies = target_dict.get(dependency_key, [])
+ if dependencies:
+ for t in dependencies:
+ if target_dict.get('type', None) == 'none':
+ if targets[t].get('variables', {}).get('link_dependency', 0):
+ target_dict[dependency_key] = \
+ Filter(target_dict[dependency_key], t)
+
+
class DependencyGraphNode(object):
"""
@@ -1469,7 +1510,7 @@ class DependencyGraphNode(object):
# are the "ref" attributes of DependencyGraphNodes. Every target will
# appear in flat_list after all of its dependencies, and before all of its
# dependents.
- flat_list = []
+ flat_list = OrderedSet()
# in_degree_zeros is the list of DependencyGraphNodes that have no
# dependencies not in flat_list. Initially, it is a copy of the children
@@ -1483,12 +1524,15 @@ class DependencyGraphNode(object):
# as work progresses, so that the next node to process from the list can
# always be accessed at a consistent position.
node = in_degree_zeros.pop()
- flat_list.append(node.ref)
+ flat_list.add(node.ref)
# Look at dependents of the node just added to flat_list. Some of them
# may now belong in in_degree_zeros.
for node_dependent in node.dependents:
is_in_degree_zero = True
+ # TODO: We want to check through the
+ # node_dependent.dependencies list but if it's long and we
+ # always start at the beginning, then we get O(n^2) behaviour.
for node_dependent_dependency in node_dependent.dependencies:
if not node_dependent_dependency.ref in flat_list:
# The dependent one or more dependencies not in flat_list. There
@@ -1504,7 +1548,7 @@ class DependencyGraphNode(object):
# iteration of the outer loop.
in_degree_zeros.add(node_dependent)
- return flat_list
+ return list(flat_list)
def FindCycles(self, path=None):
"""
@@ -1590,21 +1634,26 @@ class DependencyGraphNode(object):
return self._AddImportedDependencies(targets, dependencies)
def DeepDependencies(self, dependencies=None):
- """Returns a list of all of a target's dependencies, recursively."""
- if dependencies == None:
- dependencies = []
+ """Returns an OrderedSet of all of a target's dependencies, recursively."""
+ if dependencies is None:
+ # Using a list to get ordered output and a set to do fast "is it
+ # already added" checks.
+ dependencies = OrderedSet()
for dependency in self.dependencies:
# Check for None, corresponding to the root node.
- if dependency.ref != None and dependency.ref not in dependencies:
- dependencies.append(dependency.ref)
+ if dependency.ref is None:
+ continue
+ if dependency.ref not in dependencies:
+ dependencies.add(dependency.ref)
dependency.DeepDependencies(dependencies)
return dependencies
def _LinkDependenciesInternal(self, targets, include_shared_libraries,
dependencies=None, initial=True):
- """Returns a list of dependency targets that are linked into this target.
+ """Returns an OrderedSet of dependency targets that are linked
+ into this target.
This function has a split personality, depending on the setting of
|initial|. Outside callers should always leave |initial| at its default
@@ -1617,11 +1666,13 @@ class DependencyGraphNode(object):
If |include_shared_libraries| is False, the resulting dependencies will not
include shared_library targets that are linked into this target.
"""
- if dependencies == None:
- dependencies = []
+ if dependencies is None:
+ # Using a list to get ordered output and a set to do fast "is it
+ # already added" checks.
+ dependencies = OrderedSet()
# Check for None, corresponding to the root node.
- if self.ref == None:
+ if self.ref is None:
return dependencies
# It's kind of sucky that |targets| has to be passed into this function,
@@ -1649,8 +1700,7 @@ class DependencyGraphNode(object):
# Don't traverse 'none' targets if explicitly excluded.
if (target_type == 'none' and
not targets[self.ref].get('dependencies_traverse', True)):
- if self.ref not in dependencies:
- dependencies.append(self.ref)
+ dependencies.add(self.ref)
return dependencies
# Executables and loadable modules are already fully and finally linked.
@@ -1672,7 +1722,7 @@ class DependencyGraphNode(object):
# The target is linkable, add it to the list of link dependencies.
if self.ref not in dependencies:
- dependencies.append(self.ref)
+ dependencies.add(self.ref)
if initial or not is_linkable:
# If this is a subsequent target and it's linkable, don't look any
# further for linkable dependencies, as they'll already be linked into
@@ -1967,25 +2017,25 @@ def MergeLists(to, fro, to_file, fro_file, is_paths=False, append=True):
hashable_to_set = set(x for x in to if is_hashable(x))
for item in fro:
singleton = False
- if isinstance(item, str) or isinstance(item, int):
+ if type(item) in (str, int):
# The cheap and easy case.
if is_paths:
to_item = MakePathRelative(to_file, fro_file, item)
else:
to_item = item
- if not isinstance(item, str) or not item.startswith('-'):
+ if not (type(item) is str and item.startswith('-')):
# Any string that doesn't begin with a "-" is a singleton - it can
# only appear once in a list, to be enforced by the list merge append
# or prepend.
singleton = True
- elif isinstance(item, dict):
+ elif type(item) is dict:
# Make a copy of the dictionary, continuing to look for paths to fix.
# The other intelligent aspects of merge processing won't apply because
# item is being merged into an empty dict.
to_item = {}
MergeDicts(to_item, item, to_file, fro_file)
- elif isinstance(item, list):
+ elif type(item) is list:
# Recurse, making a copy of the list. If the list contains any
# descendant dicts, path fixing will occur. Note that here, custom
# values for is_paths and append are dropped; those are only to be
@@ -2031,10 +2081,10 @@ def MergeDicts(to, fro, to_file, fro_file):
# modified.
if k in to:
bad_merge = False
- if isinstance(v, str) or isinstance(v, int):
- if not (isinstance(to[k], str) or isinstance(to[k], int)):
+ if type(v) in (str, int):
+ if type(to[k]) not in (str, int):
bad_merge = True
- elif v.__class__ != to[k].__class__:
+ elif type(v) is not type(to[k]):
bad_merge = True
if bad_merge:
@@ -2042,19 +2092,19 @@ def MergeDicts(to, fro, to_file, fro_file):
'Attempt to merge dict value of type ' + v.__class__.__name__ + \
' into incompatible type ' + to[k].__class__.__name__ + \
' for key ' + k
- if isinstance(v, str) or isinstance(v, int):
+ if type(v) in (str, int):
# Overwrite the existing value, if any. Cheap and easy.
is_path = IsPathSection(k)
if is_path:
to[k] = MakePathRelative(to_file, fro_file, v)
else:
to[k] = v
- elif isinstance(v, dict):
+ elif type(v) is dict:
# Recurse, guaranteeing copies will be made of objects that require it.
if not k in to:
to[k] = {}
MergeDicts(to[k], v, to_file, fro_file)
- elif isinstance(v, list):
+ elif type(v) is list:
# Lists in dicts can be merged with different policies, depending on
# how the key in the "from" dict (k, the from-key) is written.
#
@@ -2097,7 +2147,7 @@ def MergeDicts(to, fro, to_file, fro_file):
# If the key ends in "?", the list will only be merged if it doesn't
# already exist.
continue
- if not isinstance(to[list_base], list):
+ elif type(to[list_base]) is not list:
# This may not have been checked above if merging in a list with an
# extension character.
raise TypeError, \
@@ -2158,43 +2208,39 @@ def SetUpConfigurations(target, target_dict):
if not 'configurations' in target_dict:
target_dict['configurations'] = {'Default': {}}
if not 'default_configuration' in target_dict:
- concrete = [i for i in target_dict['configurations'].iterkeys()
- if not target_dict['configurations'][i].get('abstract')]
+ concrete = [i for (i, config) in target_dict['configurations'].iteritems()
+ if not config.get('abstract')]
target_dict['default_configuration'] = sorted(concrete)[0]
- for configuration in target_dict['configurations'].keys():
- old_configuration_dict = target_dict['configurations'][configuration]
+ merged_configurations = {}
+ configs = target_dict['configurations']
+ for (configuration, old_configuration_dict) in configs.iteritems():
# Skip abstract configurations (saves work only).
if old_configuration_dict.get('abstract'):
continue
# Configurations inherit (most) settings from the enclosing target scope.
# Get the inheritance relationship right by making a copy of the target
# dict.
- new_configuration_dict = copy.deepcopy(target_dict)
-
- # Take out the bits that don't belong in a "configurations" section.
- # Since configuration setup is done before conditional, exclude, and rules
- # processing, be careful with handling of the suffix characters used in
- # those phases.
- delete_keys = []
- for key in new_configuration_dict:
+ new_configuration_dict = {}
+ for (key, target_val) in target_dict.iteritems():
key_ext = key[-1:]
if key_ext in key_suffixes:
key_base = key[:-1]
else:
key_base = key
- if key_base in non_configuration_keys:
- delete_keys.append(key)
-
- for key in delete_keys:
- del new_configuration_dict[key]
+ if not key_base in non_configuration_keys:
+ new_configuration_dict[key] = gyp.simple_copy.deepcopy(target_val)
# Merge in configuration (with all its parents first).
MergeConfigWithInheritance(new_configuration_dict, build_file,
target_dict, configuration, [])
- # Put the new result back into the target dict as a configuration.
- target_dict['configurations'][configuration] = new_configuration_dict
+ merged_configurations[configuration] = new_configuration_dict
+
+ # Put the new configurations back into the target dict as a configuration.
+ for configuration in merged_configurations.keys():
+ target_dict['configurations'][configuration] = (
+ merged_configurations[configuration])
# Now drop all the abstract ones.
for configuration in target_dict['configurations'].keys():
@@ -2265,7 +2311,7 @@ def ProcessListFiltersInDict(name, the_dict):
if operation != '!' and operation != '/':
continue
- if not isinstance(value, list):
+ if type(value) is not list:
raise ValueError, name + ' key ' + key + ' must be list, not ' + \
value.__class__.__name__
@@ -2277,7 +2323,7 @@ def ProcessListFiltersInDict(name, the_dict):
del_lists.append(key)
continue
- if not isinstance(the_dict[list_key], list):
+ if type(the_dict[list_key]) is not list:
value = the_dict[list_key]
raise ValueError, name + ' key ' + list_key + \
' must be list, not ' + \
@@ -2379,17 +2425,17 @@ def ProcessListFiltersInDict(name, the_dict):
# Now recurse into subdicts and lists that may contain dicts.
for key, value in the_dict.iteritems():
- if isinstance(value, dict):
+ if type(value) is dict:
ProcessListFiltersInDict(key, value)
- elif isinstance(value, list):
+ elif type(value) is list:
ProcessListFiltersInList(key, value)
def ProcessListFiltersInList(name, the_list):
for item in the_list:
- if isinstance(item, dict):
+ if type(item) is dict:
ProcessListFiltersInDict(name, item)
- elif isinstance(item, list):
+ elif type(item) is list:
ProcessListFiltersInList(name, item)
@@ -2507,7 +2553,7 @@ def ValidateRunAsInTarget(target, target_dict, build_file):
run_as = target_dict.get('run_as')
if not run_as:
return
- if not isinstance(run_as, dict):
+ if type(run_as) is not dict:
raise GypError("The 'run_as' in target %s from file %s should be a "
"dictionary." %
(target_name, build_file))
@@ -2516,17 +2562,17 @@ def ValidateRunAsInTarget(target, target_dict, build_file):
raise GypError("The 'run_as' in target %s from file %s must have an "
"'action' section." %
(target_name, build_file))
- if not isinstance(action, list):
+ if type(action) is not list:
raise GypError("The 'action' for 'run_as' in target %s from file %s "
"must be a list." %
(target_name, build_file))
working_directory = run_as.get('working_directory')
- if working_directory and not isinstance(working_directory, str):
+ if working_directory and type(working_directory) is not str:
raise GypError("The 'working_directory' for 'run_as' in target %s "
"in file %s should be a string." %
(target_name, build_file))
environment = run_as.get('environment')
- if environment and not isinstance(environment, dict):
+ if environment and type(environment) is not dict:
raise GypError("The 'environment' for 'run_as' in target %s "
"in file %s should be a dictionary." %
(target_name, build_file))
@@ -2556,17 +2602,17 @@ def TurnIntIntoStrInDict(the_dict):
# Use items instead of iteritems because there's no need to try to look at
# reinserted keys and their associated values.
for k, v in the_dict.items():
- if isinstance(v, int):
+ if type(v) is int:
v = str(v)
the_dict[k] = v
- elif isinstance(v, dict):
+ elif type(v) is dict:
TurnIntIntoStrInDict(v)
- elif isinstance(v, list):
+ elif type(v) is list:
TurnIntIntoStrInList(v)
- if isinstance(k, int):
- the_dict[str(k)] = v
+ if type(k) is int:
del the_dict[k]
+ the_dict[str(k)] = v
def TurnIntIntoStrInList(the_list):
@@ -2574,11 +2620,11 @@ def TurnIntIntoStrInList(the_list):
"""
for index in xrange(0, len(the_list)):
item = the_list[index]
- if isinstance(item, int):
+ if type(item) is int:
the_list[index] = str(item)
- elif isinstance(item, dict):
+ elif type(item) is dict:
TurnIntIntoStrInDict(item)
- elif isinstance(item, list):
+ elif type(item) is list:
TurnIntIntoStrInList(item)
@@ -2648,8 +2694,8 @@ def SetGeneratorGlobals(generator_input_info):
# Set up path_sections and non_configuration_keys with the default data plus
# the generator-specific data.
global path_sections
- path_sections = base_path_sections[:]
- path_sections.extend(generator_input_info['path_sections'])
+ path_sections = set(base_path_sections)
+ path_sections.update(generator_input_info['path_sections'])
global non_configuration_keys
non_configuration_keys = base_non_configuration_keys[:]
@@ -2708,6 +2754,10 @@ def Load(build_files, variables, includes, depth, generator_input_info, check,
# Expand dependencies specified as build_file:*.
ExpandWildcardDependencies(targets, data)
+ # Remove all dependencies marked as 'link_dependency' from the targets of
+ # type 'none'.
+ RemoveLinkDependenciesFromNoneTargets(targets)
+
# Apply exclude (!) and regex (/) list filters only for dependency_sections.
for target_name, target_dict in targets.iteritems():
tmp_dict = {}
diff --git a/chromium/tools/gyp/pylib/gyp/mac_tool.py b/chromium/tools/gyp/pylib/gyp/mac_tool.py
index c61a3ef60bc..821e291e9f3 100755
--- a/chromium/tools/gyp/pylib/gyp/mac_tool.py
+++ b/chromium/tools/gyp/pylib/gyp/mac_tool.py
@@ -219,10 +219,14 @@ class MacTool(object):
"""Calls libtool and filters out '/path/to/libtool: file: foo.o has no
symbols'."""
libtool_re = re.compile(r'^.*libtool: file: .* has no symbols$')
+ libtool_re5 = re.compile(
+ r'^.*libtool: warning for library: ' +
+ r'.* the table of contents is empty ' +
+ r'\(no object file members in the library define global symbols\)$')
libtoolout = subprocess.Popen(cmd_list, stderr=subprocess.PIPE)
_, err = libtoolout.communicate()
for line in err.splitlines():
- if not libtool_re.match(line):
+ if not libtool_re.match(line) and not libtool_re5.match(line):
print >>sys.stderr, line
return libtoolout.returncode
diff --git a/chromium/tools/gyp/pylib/gyp/msvs_emulation.py b/chromium/tools/gyp/pylib/gyp/msvs_emulation.py
index 723201eb6a1..63593a424d8 100644
--- a/chromium/tools/gyp/pylib/gyp/msvs_emulation.py
+++ b/chromium/tools/gyp/pylib/gyp/msvs_emulation.py
@@ -163,6 +163,19 @@ class MsvsSettings(object):
self.msvs_cygwin_dirs = spec.get('msvs_cygwin_dirs', ['.'])
+ unsupported_fields = [
+ 'msvs_prebuild',
+ 'msvs_postbuild',
+ ]
+ unsupported = []
+ for field in unsupported_fields:
+ for config in configs.values():
+ if field in config:
+ unsupported += ["%s not supported (target %s)." %
+ (field, spec['target_name'])]
+ if unsupported:
+ raise Exception('\n'.join(unsupported))
+
def GetVSMacroEnv(self, base_to_build=None, config=None):
"""Get a dict of variables mapping internal VS macro names to their gyp
equivalents."""
@@ -317,15 +330,29 @@ class MsvsSettings(object):
output_file, config=config))
return output_file
- def GetPDBName(self, config, expand_special):
- """Gets the explicitly overridden pdb name for a target or returns None
- if it's not overridden."""
+ def GetPDBName(self, config, expand_special, default):
+ """Gets the explicitly overridden pdb name for a target or returns
+ default if it's not overridden, or if no pdb will be generated."""
config = self._TargetConfig(config)
output_file = self._Setting(('VCLinkerTool', 'ProgramDatabaseFile'), config)
- if output_file:
- output_file = expand_special(self.ConvertVSMacros(
- output_file, config=config))
- return output_file
+ generate_debug_info = self._Setting(
+ ('VCLinkerTool', 'GenerateDebugInformation'), config)
+ if generate_debug_info:
+ if output_file:
+ return expand_special(self.ConvertVSMacros(output_file, config=config))
+ else:
+ return default
+ else:
+ return None
+
+ def GetAsmflags(self, config):
+ """Returns the flags that need to be added to ml invocations."""
+ config = self._TargetConfig(config)
+ asmflags = []
+ safeseh = self._Setting(('MASM', 'UseSafeExceptionHandlers'), config)
+ if safeseh == 'true':
+ asmflags.append('/safeseh')
+ return asmflags
def GetCflags(self, config):
"""Returns the flags that need to be added to .c and .cc compilations."""
@@ -361,6 +388,8 @@ class MsvsSettings(object):
map={'false': '-', 'true': ''}, prefix='/Zc:wchar_t')
cl('EnablePREfast', map={'true': '/analyze'})
cl('AdditionalOptions', prefix='')
+ cl('EnableEnhancedInstructionSet',
+ map={'1': 'SSE', '2': 'SSE2', '3': 'AVX', '4': 'IA32'}, prefix='/arch:')
cflags.extend(['/FI' + f for f in self._Setting(
('VCCLCompilerTool', 'ForcedIncludeFiles'), config, default=[])])
if self.vs_version.short_name in ('2013', '2013e'):
@@ -370,12 +399,6 @@ class MsvsSettings(object):
cflags = filter(lambda x: not x.startswith('/MP'), cflags)
return cflags
- def GetPrecompiledHeader(self, config, gyp_to_build_path):
- """Returns an object that handles the generation of precompiled header
- build steps."""
- config = self._TargetConfig(config)
- return _PchHelper(self, config, gyp_to_build_path)
-
def _GetPchFlags(self, config, extension):
"""Get the flags to be added to the cflags for precompiled header support.
"""
@@ -454,7 +477,7 @@ class MsvsSettings(object):
return output_file
def GetLdflags(self, config, gyp_to_build_path, expand_special,
- manifest_base_name, is_executable):
+ manifest_base_name, output_name, is_executable, build_dir):
"""Returns the flags that need to be added to link commands, and the
manifest files."""
config = self._TargetConfig(config)
@@ -472,7 +495,7 @@ class MsvsSettings(object):
out = self.GetOutputName(config, expand_special)
if out:
ldflags.append('/OUT:' + out)
- pdb = self.GetPDBName(config, expand_special)
+ pdb = self.GetPDBName(config, expand_special, output_name + '.pdb')
if pdb:
ldflags.append('/PDB:' + pdb)
pgd = self.GetPGDName(config, expand_special)
@@ -502,6 +525,7 @@ class MsvsSettings(object):
ld('DataExecutionPrevention',
map={'1': ':NO', '2': ''}, prefix='/NXCOMPAT')
ld('OptimizeReferences', map={'1': 'NOREF', '2': 'REF'}, prefix='/OPT:')
+ ld('ForceSymbolReferences', prefix='/INCLUDE:')
ld('EnableCOMDATFolding', map={'1': 'NOICF', '2': 'ICF'}, prefix='/OPT:')
ld('LinkTimeCodeGeneration',
map={'1': '', '2': ':PGINSTRUMENT', '3': ':PGOPTIMIZE',
@@ -513,6 +537,7 @@ class MsvsSettings(object):
ld('Profile', map={'true': '/PROFILE'})
ld('LargeAddressAware',
map={'1': ':NO', '2': ''}, prefix='/LARGEADDRESSAWARE')
+ ld('ImageHasSafeExceptionHandlers', map={'true': '/SAFESEH'})
# TODO(scottmg): This should sort of be somewhere else (not really a flag).
ld('AdditionalDependencies', prefix='')
@@ -531,17 +556,21 @@ class MsvsSettings(object):
ldflags.append('/NXCOMPAT')
have_def_file = filter(lambda x: x.startswith('/DEF:'), ldflags)
- manifest_flags, manifest_files = self._GetLdManifestFlags(
- config, manifest_base_name, gyp_to_build_path,
- is_executable and not have_def_file)
+ manifest_flags, intermediate_manifest, manifest_files = \
+ self._GetLdManifestFlags(config, manifest_base_name, gyp_to_build_path,
+ is_executable and not have_def_file, build_dir)
ldflags.extend(manifest_flags)
- return ldflags, manifest_files
+ return ldflags, intermediate_manifest, manifest_files
def _GetLdManifestFlags(self, config, name, gyp_to_build_path,
- allow_isolation):
- """Returns the set of flags that need to be added to the link to generate
- a default manifest, as well as the list of all the manifest files to be
- merged by the manifest tool."""
+ allow_isolation, build_dir):
+ """Returns a 3-tuple:
+ - the set of flags that need to be added to the link to generate
+ a default manifest
+ - the intermediate manifest that the linker will generate that should be
+ used to assert it doesn't add anything to the merged one.
+ - the list of all the manifest files to be merged by the manifest tool and
+ included into the link."""
generate_manifest = self._Setting(('VCLinkerTool', 'GenerateManifest'),
config,
default='true')
@@ -549,7 +578,7 @@ class MsvsSettings(object):
# This means not only that the linker should not generate the intermediate
# manifest but also that the manifest tool should do nothing even when
# additional manifests are specified.
- return ['/MANIFEST:NO'], []
+ return ['/MANIFEST:NO'], [], []
output_name = name + '.intermediate.manifest'
flags = [
@@ -557,9 +586,25 @@ class MsvsSettings(object):
'/ManifestFile:' + output_name,
]
+ # Instead of using the MANIFESTUAC flags, we generate a .manifest to
+ # include into the list of manifests. This allows us to avoid the need to
+ # do two passes during linking. The /MANIFEST flag and /ManifestFile are
+ # still used, and the intermediate manifest is used to assert that the
+ # final manifest we get from merging all the additional manifest files
+ # (plus the one we generate here) isn't modified by merging the
+ # intermediate into it.
+
+ # Always NO, because we generate a manifest file that has what we want.
+ flags.append('/MANIFESTUAC:NO')
+
config = self._TargetConfig(config)
enable_uac = self._Setting(('VCLinkerTool', 'EnableUAC'), config,
default='true')
+ manifest_files = []
+ generated_manifest_outer = \
+"<?xml version='1.0' encoding='UTF-8' standalone='yes'?>" \
+"<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>%s" \
+"</assembly>"
if enable_uac == 'true':
execution_level = self._Setting(('VCLinkerTool', 'UACExecutionLevel'),
config, default='0')
@@ -571,18 +616,38 @@ class MsvsSettings(object):
ui_access = self._Setting(('VCLinkerTool', 'UACUIAccess'), config,
default='false')
- flags.append('''/MANIFESTUAC:"level='%s' uiAccess='%s'"''' %
- (execution_level_map[execution_level], ui_access))
+
+ inner = '''
+<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
+ <security>
+ <requestedPrivileges>
+ <requestedExecutionLevel level='%s' uiAccess='%s' />
+ </requestedPrivileges>
+ </security>
+</trustInfo>''' % (execution_level_map[execution_level], ui_access)
else:
- flags.append('/MANIFESTUAC:NO')
+ inner = ''
+
+ generated_manifest_contents = generated_manifest_outer % inner
+ generated_name = name + '.generated.manifest'
+ # Need to join with the build_dir here as we're writing it during
+ # generation time, but we return the un-joined version because the build
+ # will occur in that directory. We only write the file if the contents
+ # have changed so that simply regenerating the project files doesn't
+ # cause a relink.
+ build_dir_generated_name = os.path.join(build_dir, generated_name)
+ gyp.common.EnsureDirExists(build_dir_generated_name)
+ f = gyp.common.WriteOnDiff(build_dir_generated_name)
+ f.write(generated_manifest_contents)
+ f.close()
+ manifest_files = [generated_name]
if allow_isolation:
flags.append('/ALLOWISOLATION')
- manifest_files = [output_name]
manifest_files += self._GetAdditionalManifestFiles(config,
gyp_to_build_path)
- return flags, manifest_files
+ return flags, output_name, manifest_files
def _GetAdditionalManifestFiles(self, config, gyp_to_build_path):
"""Gets additional manifest files that are added to the default one
@@ -605,7 +670,8 @@ class MsvsSettings(object):
def IsEmbedManifest(self, config):
"""Returns whether manifest should be linked into binary."""
config = self._TargetConfig(config)
- embed = self._Setting(('VCManifestTool', 'EmbedManifest'), config)
+ embed = self._Setting(('VCManifestTool', 'EmbedManifest'), config,
+ default='true')
return embed == 'true'
def IsLinkIncremental(self, config):
@@ -727,7 +793,7 @@ class PrecompiledHeader(object):
def GetObjDependencies(self, sources, objs, arch):
"""Given a list of sources files and the corresponding object files,
returns a list of the pch files that should be depended upon. The
- additional wrapping in the return value is for interface compatability
+ additional wrapping in the return value is for interface compatibility
with make.py on Mac, and xcode_emulation.py."""
assert arch is None
if not self._PchHeader():
diff --git a/chromium/tools/gyp/pylib/gyp/ordered_dict.py b/chromium/tools/gyp/pylib/gyp/ordered_dict.py
new file mode 100644
index 00000000000..a1e89f91990
--- /dev/null
+++ b/chromium/tools/gyp/pylib/gyp/ordered_dict.py
@@ -0,0 +1,289 @@
+# Unmodified from http://code.activestate.com/recipes/576693/
+# other than to add MIT license header (as specified on page, but not in code).
+# Linked from Python documentation here:
+# http://docs.python.org/2/library/collections.html#collections.OrderedDict
+#
+# This should be deleted once Py2.7 is available on all bots, see
+# http://crbug.com/241769.
+#
+# Copyright (c) 2009 Raymond Hettinger.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+# Backport of OrderedDict() class that runs on Python 2.4, 2.5, 2.6, 2.7 and pypy.
+# Passes Python2.7's test suite and incorporates all the latest updates.
+
+try:
+ from thread import get_ident as _get_ident
+except ImportError:
+ from dummy_thread import get_ident as _get_ident
+
+try:
+ from _abcoll import KeysView, ValuesView, ItemsView
+except ImportError:
+ pass
+
+
+class OrderedDict(dict):
+ 'Dictionary that remembers insertion order'
+ # An inherited dict maps keys to values.
+ # The inherited dict provides __getitem__, __len__, __contains__, and get.
+ # The remaining methods are order-aware.
+ # Big-O running times for all methods are the same as for regular dictionaries.
+
+ # The internal self.__map dictionary maps keys to links in a doubly linked list.
+ # The circular doubly linked list starts and ends with a sentinel element.
+ # The sentinel element never gets deleted (this simplifies the algorithm).
+ # Each link is stored as a list of length three: [PREV, NEXT, KEY].
+
+ def __init__(self, *args, **kwds):
+ '''Initialize an ordered dictionary. Signature is the same as for
+ regular dictionaries, but keyword arguments are not recommended
+ because their insertion order is arbitrary.
+
+ '''
+ if len(args) > 1:
+ raise TypeError('expected at most 1 arguments, got %d' % len(args))
+ try:
+ self.__root
+ except AttributeError:
+ self.__root = root = [] # sentinel node
+ root[:] = [root, root, None]
+ self.__map = {}
+ self.__update(*args, **kwds)
+
+ def __setitem__(self, key, value, dict_setitem=dict.__setitem__):
+ 'od.__setitem__(i, y) <==> od[i]=y'
+ # Setting a new item creates a new link which goes at the end of the linked
+ # list, and the inherited dictionary is updated with the new key/value pair.
+ if key not in self:
+ root = self.__root
+ last = root[0]
+ last[1] = root[0] = self.__map[key] = [last, root, key]
+ dict_setitem(self, key, value)
+
+ def __delitem__(self, key, dict_delitem=dict.__delitem__):
+ 'od.__delitem__(y) <==> del od[y]'
+ # Deleting an existing item uses self.__map to find the link which is
+ # then removed by updating the links in the predecessor and successor nodes.
+ dict_delitem(self, key)
+ link_prev, link_next, key = self.__map.pop(key)
+ link_prev[1] = link_next
+ link_next[0] = link_prev
+
+ def __iter__(self):
+ 'od.__iter__() <==> iter(od)'
+ root = self.__root
+ curr = root[1]
+ while curr is not root:
+ yield curr[2]
+ curr = curr[1]
+
+ def __reversed__(self):
+ 'od.__reversed__() <==> reversed(od)'
+ root = self.__root
+ curr = root[0]
+ while curr is not root:
+ yield curr[2]
+ curr = curr[0]
+
+ def clear(self):
+ 'od.clear() -> None. Remove all items from od.'
+ try:
+ for node in self.__map.itervalues():
+ del node[:]
+ root = self.__root
+ root[:] = [root, root, None]
+ self.__map.clear()
+ except AttributeError:
+ pass
+ dict.clear(self)
+
+ def popitem(self, last=True):
+ '''od.popitem() -> (k, v), return and remove a (key, value) pair.
+ Pairs are returned in LIFO order if last is true or FIFO order if false.
+
+ '''
+ if not self:
+ raise KeyError('dictionary is empty')
+ root = self.__root
+ if last:
+ link = root[0]
+ link_prev = link[0]
+ link_prev[1] = root
+ root[0] = link_prev
+ else:
+ link = root[1]
+ link_next = link[1]
+ root[1] = link_next
+ link_next[0] = root
+ key = link[2]
+ del self.__map[key]
+ value = dict.pop(self, key)
+ return key, value
+
+ # -- the following methods do not depend on the internal structure --
+
+ def keys(self):
+ 'od.keys() -> list of keys in od'
+ return list(self)
+
+ def values(self):
+ 'od.values() -> list of values in od'
+ return [self[key] for key in self]
+
+ def items(self):
+ 'od.items() -> list of (key, value) pairs in od'
+ return [(key, self[key]) for key in self]
+
+ def iterkeys(self):
+ 'od.iterkeys() -> an iterator over the keys in od'
+ return iter(self)
+
+ def itervalues(self):
+ 'od.itervalues -> an iterator over the values in od'
+ for k in self:
+ yield self[k]
+
+ def iteritems(self):
+ 'od.iteritems -> an iterator over the (key, value) items in od'
+ for k in self:
+ yield (k, self[k])
+
+ # Suppress 'OrderedDict.update: Method has no argument':
+ # pylint: disable=E0211
+ def update(*args, **kwds):
+ '''od.update(E, **F) -> None. Update od from dict/iterable E and F.
+
+ If E is a dict instance, does: for k in E: od[k] = E[k]
+ If E has a .keys() method, does: for k in E.keys(): od[k] = E[k]
+ Or if E is an iterable of items, does: for k, v in E: od[k] = v
+ In either case, this is followed by: for k, v in F.items(): od[k] = v
+
+ '''
+ if len(args) > 2:
+ raise TypeError('update() takes at most 2 positional '
+ 'arguments (%d given)' % (len(args),))
+ elif not args:
+ raise TypeError('update() takes at least 1 argument (0 given)')
+ self = args[0]
+ # Make progressively weaker assumptions about "other"
+ other = ()
+ if len(args) == 2:
+ other = args[1]
+ if isinstance(other, dict):
+ for key in other:
+ self[key] = other[key]
+ elif hasattr(other, 'keys'):
+ for key in other.keys():
+ self[key] = other[key]
+ else:
+ for key, value in other:
+ self[key] = value
+ for key, value in kwds.items():
+ self[key] = value
+
+ __update = update # let subclasses override update without breaking __init__
+
+ __marker = object()
+
+ def pop(self, key, default=__marker):
+ '''od.pop(k[,d]) -> v, remove specified key and return the corresponding value.
+ If key is not found, d is returned if given, otherwise KeyError is raised.
+
+ '''
+ if key in self:
+ result = self[key]
+ del self[key]
+ return result
+ if default is self.__marker:
+ raise KeyError(key)
+ return default
+
+ def setdefault(self, key, default=None):
+ 'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od'
+ if key in self:
+ return self[key]
+ self[key] = default
+ return default
+
+ def __repr__(self, _repr_running={}):
+ 'od.__repr__() <==> repr(od)'
+ call_key = id(self), _get_ident()
+ if call_key in _repr_running:
+ return '...'
+ _repr_running[call_key] = 1
+ try:
+ if not self:
+ return '%s()' % (self.__class__.__name__,)
+ return '%s(%r)' % (self.__class__.__name__, self.items())
+ finally:
+ del _repr_running[call_key]
+
+ def __reduce__(self):
+ 'Return state information for pickling'
+ items = [[k, self[k]] for k in self]
+ inst_dict = vars(self).copy()
+ for k in vars(OrderedDict()):
+ inst_dict.pop(k, None)
+ if inst_dict:
+ return (self.__class__, (items,), inst_dict)
+ return self.__class__, (items,)
+
+ def copy(self):
+ 'od.copy() -> a shallow copy of od'
+ return self.__class__(self)
+
+ @classmethod
+ def fromkeys(cls, iterable, value=None):
+ '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S
+ and values equal to v (which defaults to None).
+
+ '''
+ d = cls()
+ for key in iterable:
+ d[key] = value
+ return d
+
+ def __eq__(self, other):
+ '''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive
+ while comparison to a regular mapping is order-insensitive.
+
+ '''
+ if isinstance(other, OrderedDict):
+ return len(self)==len(other) and self.items() == other.items()
+ return dict.__eq__(self, other)
+
+ def __ne__(self, other):
+ return not self == other
+
+ # -- the following methods are only used in Python 2.7 --
+
+ def viewkeys(self):
+ "od.viewkeys() -> a set-like object providing a view on od's keys"
+ return KeysView(self)
+
+ def viewvalues(self):
+ "od.viewvalues() -> an object providing a view on od's values"
+ return ValuesView(self)
+
+ def viewitems(self):
+ "od.viewitems() -> a set-like object providing a view on od's items"
+ return ItemsView(self)
+
diff --git a/chromium/tools/gyp/pylib/gyp/simple_copy.py b/chromium/tools/gyp/pylib/gyp/simple_copy.py
new file mode 100644
index 00000000000..74c98c5a795
--- /dev/null
+++ b/chromium/tools/gyp/pylib/gyp/simple_copy.py
@@ -0,0 +1,46 @@
+# Copyright 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""A clone of the default copy.deepcopy that doesn't handle cyclic
+structures or complex types except for dicts and lists. This is
+because gyp copies so large structure that small copy overhead ends up
+taking seconds in a project the size of Chromium."""
+
+class Error(Exception):
+ pass
+
+__all__ = ["Error", "deepcopy"]
+
+def deepcopy(x):
+ """Deep copy operation on gyp objects such as strings, ints, dicts
+ and lists. More than twice as fast as copy.deepcopy but much less
+ generic."""
+
+ try:
+ return _deepcopy_dispatch[type(x)](x)
+ except KeyError:
+ raise Error('Unsupported type %s for deepcopy. Use copy.deepcopy ' +
+ 'or expand simple_copy support.' % type(x))
+
+_deepcopy_dispatch = d = {}
+
+def _deepcopy_atomic(x):
+ return x
+
+for x in (type(None), int, long, float,
+ bool, str, unicode, type):
+ d[x] = _deepcopy_atomic
+
+def _deepcopy_list(x):
+ return [deepcopy(a) for a in x]
+d[list] = _deepcopy_list
+
+def _deepcopy_dict(x):
+ y = {}
+ for key, value in x.iteritems():
+ y[deepcopy(key)] = deepcopy(value)
+ return y
+d[dict] = _deepcopy_dict
+
+del d
diff --git a/chromium/tools/gyp/pylib/gyp/win_tool.py b/chromium/tools/gyp/pylib/gyp/win_tool.py
index 7f3b0a5413f..44e1b0760b1 100755
--- a/chromium/tools/gyp/pylib/gyp/win_tool.py
+++ b/chromium/tools/gyp/pylib/gyp/win_tool.py
@@ -13,13 +13,15 @@ import os
import re
import shutil
import subprocess
+import stat
+import string
import sys
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
-# A regex matching an argument corresponding to a PDB filename passed as an
-# argument to link.exe.
-_LINK_EXE_PDB_ARG = re.compile('/PDB:(?P<pdb>.+\.exe\.pdb)$', re.IGNORECASE)
+# A regex matching an argument corresponding to the output filename passed to
+# link.exe.
+_LINK_EXE_OUT_ARG = re.compile('/OUT:(?P<out>.+)$', re.IGNORECASE)
def main(args):
executor = WinTool()
@@ -32,25 +34,23 @@ class WinTool(object):
"""This class performs all the Windows tooling steps. The methods can either
be executed directly, or dispatched from an argument list."""
- def _MaybeUseSeparateMspdbsrv(self, env, args):
- """Allows to use a unique instance of mspdbsrv.exe for the linkers linking
- an .exe target if GYP_USE_SEPARATE_MSPDBSRV has been set."""
- if not os.environ.get('GYP_USE_SEPARATE_MSPDBSRV'):
- return
-
+ def _UseSeparateMspdbsrv(self, env, args):
+ """Allows to use a unique instance of mspdbsrv.exe per linker instead of a
+ shared one."""
if len(args) < 1:
raise Exception("Not enough arguments")
if args[0] != 'link.exe':
return
- # Checks if this linker produces a PDB for an .exe target. If so use the
- # name of this PDB to generate an endpoint name for mspdbsrv.exe.
+ # Use the output filename passed to the linker to generate an endpoint name
+ # for mspdbsrv.exe.
endpoint_name = None
for arg in args:
- m = _LINK_EXE_PDB_ARG.match(arg)
+ m = _LINK_EXE_OUT_ARG.match(arg)
if m:
- endpoint_name = '%s_%d' % (m.group('pdb'), os.getpid())
+ endpoint_name = re.sub(r'\W+', '',
+ '%s_%d' % (m.group('out'), os.getpid()))
break
if endpoint_name is None:
@@ -90,21 +90,32 @@ class WinTool(object):
"""Emulation of rm -rf out && cp -af in out."""
if os.path.exists(dest):
if os.path.isdir(dest):
- shutil.rmtree(dest)
+ def _on_error(fn, path, excinfo):
+ # The operation failed, possibly because the file is set to
+ # read-only. If that's why, make it writable and try the op again.
+ if not os.access(path, os.W_OK):
+ os.chmod(path, stat.S_IWRITE)
+ fn(path)
+ shutil.rmtree(dest, onerror=_on_error)
else:
+ if not os.access(dest, os.W_OK):
+ # Attempt to make the file writable before deleting it.
+ os.chmod(dest, stat.S_IWRITE)
os.unlink(dest)
+
if os.path.isdir(source):
shutil.copytree(source, dest)
else:
shutil.copy2(source, dest)
- def ExecLinkWrapper(self, arch, *args):
+ def ExecLinkWrapper(self, arch, use_separate_mspdbsrv, *args):
"""Filter diagnostic output from link that looks like:
' Creating library ui.dll.lib and object ui.dll.exp'
This happens when there are exports from the dll or exe.
"""
env = self._GetEnv(arch)
- self._MaybeUseSeparateMspdbsrv(env, args)
+ if use_separate_mspdbsrv == 'True':
+ self._UseSeparateMspdbsrv(env, args)
link = subprocess.Popen(args,
shell=True,
env=env,
@@ -116,6 +127,82 @@ class WinTool(object):
print line
return link.returncode
+ def ExecLinkWithManifests(self, arch, embed_manifest, out, ldcmd, resname,
+ mt, rc, intermediate_manifest, *manifests):
+ """A wrapper for handling creating a manifest resource and then executing
+ a link command."""
+ # The 'normal' way to do manifests is to have link generate a manifest
+ # based on gathering dependencies from the object files, then merge that
+ # manifest with other manifests supplied as sources, convert the merged
+ # manifest to a resource, and then *relink*, including the compiled
+ # version of the manifest resource. This breaks incremental linking, and
+ # is generally overly complicated. Instead, we merge all the manifests
+ # provided (along with one that includes what would normally be in the
+ # linker-generated one, see msvs_emulation.py), and include that into the
+ # first and only link. We still tell link to generate a manifest, but we
+ # only use that to assert that our simpler process did not miss anything.
+ variables = {
+ 'python': sys.executable,
+ 'arch': arch,
+ 'out': out,
+ 'ldcmd': ldcmd,
+ 'resname': resname,
+ 'mt': mt,
+ 'rc': rc,
+ 'intermediate_manifest': intermediate_manifest,
+ 'manifests': ' '.join(manifests),
+ }
+ add_to_ld = ''
+ if manifests:
+ subprocess.check_call(
+ '%(python)s gyp-win-tool manifest-wrapper %(arch)s %(mt)s -nologo '
+ '-manifest %(manifests)s -out:%(out)s.manifest' % variables)
+ if embed_manifest == 'True':
+ subprocess.check_call(
+ '%(python)s gyp-win-tool manifest-to-rc %(arch)s %(out)s.manifest'
+ ' %(out)s.manifest.rc %(resname)s' % variables)
+ subprocess.check_call(
+ '%(python)s gyp-win-tool rc-wrapper %(arch)s %(rc)s '
+ '%(out)s.manifest.rc' % variables)
+ add_to_ld = ' %(out)s.manifest.res' % variables
+ subprocess.check_call(ldcmd + add_to_ld)
+
+ # Run mt.exe on the theoretically complete manifest we generated, merging
+ # it with the one the linker generated to confirm that the linker
+ # generated one does not add anything. This is strictly unnecessary for
+ # correctness, it's only to verify that e.g. /MANIFESTDEPENDENCY was not
+ # used in a #pragma comment.
+ if manifests:
+ # Merge the intermediate one with ours to .assert.manifest, then check
+ # that .assert.manifest is identical to ours.
+ subprocess.check_call(
+ '%(python)s gyp-win-tool manifest-wrapper %(arch)s %(mt)s -nologo '
+ '-manifest %(out)s.manifest %(intermediate_manifest)s '
+ '-out:%(out)s.assert.manifest' % variables)
+ assert_manifest = '%(out)s.assert.manifest' % variables
+ our_manifest = '%(out)s.manifest' % variables
+ # Load and normalize the manifests. mt.exe sometimes removes whitespace,
+ # and sometimes doesn't unfortunately.
+ with open(our_manifest, 'rb') as our_f:
+ with open(assert_manifest, 'rb') as assert_f:
+ our_data = our_f.read().translate(None, string.whitespace)
+ assert_data = assert_f.read().translate(None, string.whitespace)
+ if our_data != assert_data:
+ os.unlink(out)
+ def dump(filename):
+ sys.stderr.write('%s\n-----\n' % filename)
+ with open(filename, 'rb') as f:
+ sys.stderr.write(f.read() + '\n-----\n')
+ dump(intermediate_manifest)
+ dump(our_manifest)
+ dump(assert_manifest)
+ sys.stderr.write(
+ 'Linker generated manifest "%s" added to final manifest "%s" '
+ '(result in "%s"). '
+ 'Were /MANIFEST switches used in #pragma statements? ' % (
+ intermediate_manifest, our_manifest, assert_manifest))
+ return 1
+
def ExecManifestWrapper(self, arch, *args):
"""Run manifest tool with environment set. Strip out undesirable warning
(some XML blocks are recognized by the OS loader, but not the manifest
@@ -161,10 +248,11 @@ class WinTool(object):
# Processing C:\Program Files (x86)\Microsoft SDKs\...\include\objidl.idl
# objidl.idl
lines = out.splitlines()
- prefix = 'Processing '
- processing = set(os.path.basename(x) for x in lines if x.startswith(prefix))
+ prefixes = ('Processing ', '64 bit Processing ')
+ processing = set(os.path.basename(x)
+ for x in lines if x.startswith(prefixes))
for line in lines:
- if not line.startswith(prefix) and line not in processing:
+ if not line.startswith(prefixes) and line not in processing:
print line
return popen.returncode
@@ -203,9 +291,25 @@ class WinTool(object):
"""Runs an action command line from a response file using the environment
for |arch|. If |dir| is supplied, use that as the working directory."""
env = self._GetEnv(arch)
+ # TODO(scottmg): This is a temporary hack to get some specific variables
+ # through to actions that are set after gyp-time. http://crbug.com/333738.
+ for k, v in os.environ.iteritems():
+ if k not in env:
+ env[k] = v
args = open(rspfile).read()
dir = dir[0] if dir else None
return subprocess.call(args, shell=True, env=env, cwd=dir)
+ def ExecClCompile(self, project_dir, selected_files):
+ """Executed by msvs-ninja projects when the 'ClCompile' target is used to
+ build selected C/C++ files."""
+ project_dir = os.path.relpath(project_dir, BASE_DIR)
+ selected_files = selected_files.split(';')
+ ninja_targets = [os.path.join(project_dir, filename) + '^^'
+ for filename in selected_files]
+ cmd = ['ninja.exe']
+ cmd.extend(ninja_targets)
+ return subprocess.call(cmd, shell=True, cwd=BASE_DIR)
+
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))
diff --git a/chromium/tools/gyp/pylib/gyp/xcode_emulation.py b/chromium/tools/gyp/pylib/gyp/xcode_emulation.py
index 5e50f10df8e..859cd5a9372 100644
--- a/chromium/tools/gyp/pylib/gyp/xcode_emulation.py
+++ b/chromium/tools/gyp/pylib/gyp/xcode_emulation.py
@@ -18,12 +18,136 @@ import sys
import tempfile
from gyp.common import GypError
+# Populated lazily by XcodeVersion, for efficiency, and to fix an issue when
+# "xcodebuild" is called too quickly (it has been found to return incorrect
+# version number).
+XCODE_VERSION_CACHE = None
+
+# Populated lazily by GetXcodeArchsDefault, to an |XcodeArchsDefault| instance
+# corresponding to the installed version of Xcode.
+XCODE_ARCHS_DEFAULT_CACHE = None
+
+
+def XcodeArchsVariableMapping(archs, archs_including_64_bit=None):
+ """Constructs a dictionary with expansion for $(ARCHS_STANDARD) variable,
+ and optionally for $(ARCHS_STANDARD_INCLUDING_64_BIT)."""
+ mapping = {'$(ARCHS_STANDARD)': archs}
+ if archs_including_64_bit:
+ mapping['$(ARCHS_STANDARD_INCLUDING_64_BIT)'] = archs_including_64_bit
+ return mapping
+
+class XcodeArchsDefault(object):
+ """A class to resolve ARCHS variable from xcode_settings, resolving Xcode
+ macros and implementing filtering by VALID_ARCHS. The expansion of macros
+ depends on the SDKROOT used ("macosx", "iphoneos", "iphonesimulator") and
+ on the version of Xcode.
+ """
+
+ # Match variable like $(ARCHS_STANDARD).
+ variable_pattern = re.compile(r'\$\([a-zA-Z_][a-zA-Z0-9_]*\)$')
+
+ def __init__(self, default, mac, iphonesimulator, iphoneos):
+ self._default = (default,)
+ self._archs = {'mac': mac, 'ios': iphoneos, 'iossim': iphonesimulator}
+
+ def _VariableMapping(self, sdkroot):
+ """Returns the dictionary of variable mapping depending on the SDKROOT."""
+ sdkroot = sdkroot.lower()
+ if 'iphoneos' in sdkroot:
+ return self._archs['ios']
+ elif 'iphonesimulator' in sdkroot:
+ return self._archs['iossim']
+ else:
+ return self._archs['mac']
+
+ def _ExpandArchs(self, archs, sdkroot):
+ """Expands variables references in ARCHS, and remove duplicates."""
+ variable_mapping = self._VariableMapping(sdkroot)
+ expanded_archs = []
+ for arch in archs:
+ if self.variable_pattern.match(arch):
+ variable = arch
+ try:
+ variable_expansion = variable_mapping[variable]
+ for arch in variable_expansion:
+ if arch not in expanded_archs:
+ expanded_archs.append(arch)
+ except KeyError as e:
+ print 'Warning: Ignoring unsupported variable "%s".' % variable
+ elif arch not in expanded_archs:
+ expanded_archs.append(arch)
+ return expanded_archs
+
+ def ActiveArchs(self, archs, valid_archs, sdkroot):
+ """Expands variables references in ARCHS, and filter by VALID_ARCHS if it
+ is defined (if not set, Xcode accept any value in ARCHS, otherwise, only
+ values present in VALID_ARCHS are kept)."""
+ expanded_archs = self._ExpandArchs(archs or self._default, sdkroot or '')
+ if valid_archs:
+ filtered_archs = []
+ for arch in expanded_archs:
+ if arch in valid_archs:
+ filtered_archs.append(arch)
+ expanded_archs = filtered_archs
+ return expanded_archs
+
+
+def GetXcodeArchsDefault():
+ """Returns the |XcodeArchsDefault| object to use to expand ARCHS for the
+ installed version of Xcode. The default values used by Xcode for ARCHS
+ and the expansion of the variables depends on the version of Xcode used.
+
+ For all version anterior to Xcode 5.0 or posterior to Xcode 5.1 included
+ uses $(ARCHS_STANDARD) if ARCHS is unset, while Xcode 5.0 to 5.0.2 uses
+ $(ARCHS_STANDARD_INCLUDING_64_BIT). This variable was added to Xcode 5.0
+ and deprecated with Xcode 5.1.
+
+ For "macosx" SDKROOT, all version starting with Xcode 5.0 includes 64-bit
+ architecture as part of $(ARCHS_STANDARD) and default to only building it.
+
+ For "iphoneos" and "iphonesimulator" SDKROOT, 64-bit architectures are part
+ of $(ARCHS_STANDARD_INCLUDING_64_BIT) from Xcode 5.0. From Xcode 5.1, they
+ are also part of $(ARCHS_STANDARD).
+
+ All thoses rules are coded in the construction of the |XcodeArchsDefault|
+ object to use depending on the version of Xcode detected. The object is
+ for performance reason."""
+ global XCODE_ARCHS_DEFAULT_CACHE
+ if XCODE_ARCHS_DEFAULT_CACHE:
+ return XCODE_ARCHS_DEFAULT_CACHE
+ xcode_version, _ = XcodeVersion()
+ if xcode_version < '0500':
+ XCODE_ARCHS_DEFAULT_CACHE = XcodeArchsDefault(
+ '$(ARCHS_STANDARD)',
+ XcodeArchsVariableMapping(['i386']),
+ XcodeArchsVariableMapping(['i386']),
+ XcodeArchsVariableMapping(['armv7']))
+ elif xcode_version < '0510':
+ XCODE_ARCHS_DEFAULT_CACHE = XcodeArchsDefault(
+ '$(ARCHS_STANDARD_INCLUDING_64_BIT)',
+ XcodeArchsVariableMapping(['x86_64'], ['x86_64']),
+ XcodeArchsVariableMapping(['i386'], ['i386', 'x86_64']),
+ XcodeArchsVariableMapping(
+ ['armv7', 'armv7s'],
+ ['armv7', 'armv7s', 'arm64']))
+ else:
+ XCODE_ARCHS_DEFAULT_CACHE = XcodeArchsDefault(
+ '$(ARCHS_STANDARD)',
+ XcodeArchsVariableMapping(['x86_64'], ['x86_64']),
+ XcodeArchsVariableMapping(['i386', 'x86_64'], ['i386', 'x86_64']),
+ XcodeArchsVariableMapping(
+ ['armv7', 'armv7s', 'arm64'],
+ ['armv7', 'armv7s', 'arm64']))
+ return XCODE_ARCHS_DEFAULT_CACHE
+
+
class XcodeSettings(object):
"""A class that understands the gyp 'xcode_settings' object."""
# Populated lazily by _SdkPath(). Shared by all XcodeSettings, so cached
# at class-level for efficiency.
_sdk_path_cache = {}
+ _sdk_root_cache = {}
# Populated lazily by GetExtraPlistItems(). Shared by all XcodeSettings, so
# cached at class-level for efficiency.
@@ -33,10 +157,6 @@ class XcodeSettings(object):
# cached at class-level for efficiency.
_codesigning_key_cache = {}
- # Populated lazily by _XcodeVersion. Shared by all XcodeSettings, so cached
- # at class-level for efficiency.
- _xcode_version_cache = ()
-
def __init__(self, spec):
self.spec = spec
@@ -266,20 +386,22 @@ class XcodeSettings(object):
def GetActiveArchs(self, configname):
"""Returns the architectures this target should be built for."""
- # TODO: Look at VALID_ARCHS, ONLY_ACTIVE_ARCH; possibly set
- # CURRENT_ARCH / NATIVE_ARCH env vars?
- return self.xcode_settings[configname].get('ARCHS', [self._DefaultArch()])
-
- def _GetStdout(self, cmdlist):
- job = subprocess.Popen(cmdlist, stdout=subprocess.PIPE)
- out = job.communicate()[0]
- if job.returncode != 0:
- sys.stderr.write(out + '\n')
- raise GypError('Error %d running %s' % (job.returncode, cmdlist[0]))
- return out.rstrip('\n')
+ config_settings = self.xcode_settings[configname]
+ xcode_archs_default = GetXcodeArchsDefault()
+ return xcode_archs_default.ActiveArchs(
+ config_settings.get('ARCHS'),
+ config_settings.get('VALID_ARCHS'),
+ config_settings.get('SDKROOT'))
def _GetSdkVersionInfoItem(self, sdk, infoitem):
- return self._GetStdout(['xcodebuild', '-version', '-sdk', sdk, infoitem])
+ # xcodebuild requires Xcode and can't run on Command Line Tools-only
+ # systems from 10.7 onward.
+ # Since the CLT has no SDK paths anyway, returning None is the
+ # most sensible route and should still do the right thing.
+ try:
+ return GetStdout(['xcodebuild', '-version', '-sdk', sdk, infoitem])
+ except:
+ pass
def _SdkRoot(self, configname):
if configname is None:
@@ -290,9 +412,14 @@ class XcodeSettings(object):
sdk_root = self._SdkRoot(configname)
if sdk_root.startswith('/'):
return sdk_root
+ return self._XcodeSdkPath(sdk_root)
+
+ def _XcodeSdkPath(self, sdk_root):
if sdk_root not in XcodeSettings._sdk_path_cache:
- XcodeSettings._sdk_path_cache[sdk_root] = self._GetSdkVersionInfoItem(
- sdk_root, 'Path')
+ sdk_path = self._GetSdkVersionInfoItem(sdk_root, 'Path')
+ XcodeSettings._sdk_path_cache[sdk_root] = sdk_path
+ if sdk_root:
+ XcodeSettings._sdk_root_cache[sdk_path] = sdk_root
return XcodeSettings._sdk_path_cache[sdk_root]
def _AppendPlatformVersionMinFlags(self, lst):
@@ -317,7 +444,7 @@ class XcodeSettings(object):
cflags = []
sdk_root = self._SdkPath()
- if 'SDKROOT' in self._Settings():
+ if 'SDKROOT' in self._Settings() and sdk_root:
cflags.append('-isysroot %s' % sdk_root)
if self._Test('CLANG_WARN_CONSTANT_CONVERSION', 'YES', default='NO'):
@@ -383,7 +510,8 @@ class XcodeSettings(object):
if arch is not None:
archs = [arch]
else:
- archs = self._Settings().get('ARCHS', [self._DefaultArch()])
+ assert self.configname
+ archs = self.GetActiveArchs(self.configname)
if len(archs) != 1:
# TODO: Supporting fat binaries will be annoying.
self._WarnUnimplemented('ARCHS')
@@ -403,10 +531,14 @@ class XcodeSettings(object):
cflags += self._Settings().get('WARNING_CFLAGS', [])
+ if sdk_root:
+ framework_root = sdk_root
+ else:
+ framework_root = ''
config = self.spec['configurations'][self.configname]
framework_dirs = config.get('mac_framework_dirs', [])
for directory in framework_dirs:
- cflags.append('-F' + directory.replace('$(SDKROOT)', sdk_root))
+ cflags.append('-F' + directory.replace('$(SDKROOT)', framework_root))
self.configname = None
return cflags
@@ -622,7 +754,7 @@ class XcodeSettings(object):
self._AppendPlatformVersionMinFlags(ldflags)
- if 'SDKROOT' in self._Settings():
+ if 'SDKROOT' in self._Settings() and self._SdkPath():
ldflags.append('-isysroot ' + self._SdkPath())
for library_path in self._Settings().get('LIBRARY_SEARCH_PATHS', []):
@@ -636,7 +768,8 @@ class XcodeSettings(object):
if arch is not None:
archs = [arch]
else:
- archs = self._Settings().get('ARCHS', [self._DefaultArch()])
+ assert self.configname
+ archs = self.GetActiveArchs(self.configname)
if len(archs) != 1:
# TODO: Supporting fat binaries will be annoying.
self._WarnUnimplemented('ARCHS')
@@ -653,10 +786,15 @@ class XcodeSettings(object):
for rpath in self._Settings().get('LD_RUNPATH_SEARCH_PATHS', []):
ldflags.append('-Wl,-rpath,' + rpath)
+ sdk_root = self._SdkPath()
+ if not sdk_root:
+ sdk_root = ''
config = self.spec['configurations'][self.configname]
framework_dirs = config.get('mac_framework_dirs', [])
for directory in framework_dirs:
- ldflags.append('-F' + directory.replace('$(SDKROOT)', self._SdkPath()))
+ ldflags.append('-F' + directory.replace('$(SDKROOT)', sdk_root))
+
+ self._Appendf(ldflags, 'CLANG_CXX_LIBRARY', '-stdlib=%s')
self.configname = None
return ldflags
@@ -814,9 +952,11 @@ class XcodeSettings(object):
['security', 'find-identity', '-p', 'codesigning', '-v'])
for line in output.splitlines():
if identity in line:
- assert identity not in XcodeSettings._codesigning_key_cache, (
- "Multiple codesigning identities for identity: %s" % identity)
- XcodeSettings._codesigning_key_cache[identity] = line.split()[1]
+ fingerprint = line.split()[1]
+ cache = XcodeSettings._codesigning_key_cache
+ assert identity not in cache or fingerprint == cache[identity], (
+ "Multiple codesigning fingerprints for identity: %s" % identity)
+ XcodeSettings._codesigning_key_cache[identity] = fingerprint
return XcodeSettings._codesigning_key_cache.get(identity, '')
def AddImplicitPostbuilds(self, configname, output, output_binary,
@@ -837,7 +977,11 @@ class XcodeSettings(object):
l = '-l' + m.group(1)
else:
l = library
- return l.replace('$(SDKROOT)', self._SdkPath(config_name))
+
+ sdk_root = self._SdkPath(config_name)
+ if not sdk_root:
+ sdk_root = ''
+ return l.replace('$(SDKROOT)', sdk_root)
def AdjustLibraries(self, libraries, config_name=None):
"""Transforms entries like 'Cocoa.framework' in libraries into entries like
@@ -848,27 +992,7 @@ class XcodeSettings(object):
return libraries
def _BuildMachineOSBuild(self):
- return self._GetStdout(['sw_vers', '-buildVersion'])
-
- def _XcodeVersion(self):
- # `xcodebuild -version` output looks like
- # Xcode 4.6.3
- # Build version 4H1503
- # or like
- # Xcode 3.2.6
- # Component versions: DevToolsCore-1809.0; DevToolsSupport-1806.0
- # BuildVersion: 10M2518
- # Convert that to '0463', '4H1503'.
- if len(XcodeSettings._xcode_version_cache) == 0:
- version_list = self._GetStdout(['xcodebuild', '-version']).splitlines()
- version = version_list[0]
- build = version_list[-1]
- # Be careful to convert "4.2" to "0420":
- version = version.split()[-1].replace('.', '')
- version = (version + '0' * (3 - len(version))).zfill(4)
- build = build.split()[-1]
- XcodeSettings._xcode_version_cache = (version, build)
- return XcodeSettings._xcode_version_cache
+ return GetStdout(['sw_vers', '-buildVersion'])
def _XcodeIOSDeviceFamily(self, configname):
family = self.xcode_settings[configname].get('TARGETED_DEVICE_FAMILY', '1')
@@ -880,11 +1004,13 @@ class XcodeSettings(object):
cache = {}
cache['BuildMachineOSBuild'] = self._BuildMachineOSBuild()
- xcode, xcode_build = self._XcodeVersion()
+ xcode, xcode_build = XcodeVersion()
cache['DTXcode'] = xcode
cache['DTXcodeBuild'] = xcode_build
sdk_root = self._SdkRoot(configname)
+ if not sdk_root:
+ sdk_root = self._DefaultSdkRoot()
cache['DTSDKName'] = sdk_root
if xcode >= '0430':
cache['DTSDKBuild'] = self._GetSdkVersionInfoItem(
@@ -909,28 +1035,34 @@ class XcodeSettings(object):
items['UIDeviceFamily'] = self._XcodeIOSDeviceFamily(configname)
return items
- def _DefaultArch(self):
- # For Mac projects, Xcode changed the default value used when ARCHS is not
- # set from "i386" to "x86_64".
- #
- # For iOS projects, if ARCHS is unset, it defaults to "armv7 armv7s" when
- # building for a device, and the simulator binaries are always build for
- # "i386".
- #
- # For new projects, ARCHS is set to $(ARCHS_STANDARD_INCLUDING_64_BIT),
- # which correspond to "armv7 armv7s arm64", and when building the simulator
- # the architecture is either "i386" or "x86_64" depending on the simulated
- # device (respectively 32-bit or 64-bit device).
- #
- # Since the value returned by this function is only used when ARCHS is not
- # set, then on iOS we return "i386", as the default xcode project generator
- # does not set ARCHS if it is not set in the .gyp file.
- if self.isIOS:
- return 'i386'
- version, build = self._XcodeVersion()
- if version >= '0500':
- return 'x86_64'
- return 'i386'
+ def _DefaultSdkRoot(self):
+ """Returns the default SDKROOT to use.
+
+ Prior to version 5.0.0, if SDKROOT was not explicitly set in the Xcode
+ project, then the environment variable was empty. Starting with this
+ version, Xcode uses the name of the newest SDK installed.
+ """
+ xcode_version, xcode_build = XcodeVersion()
+ if xcode_version < '0500':
+ return ''
+ default_sdk_path = self._XcodeSdkPath('')
+ default_sdk_root = XcodeSettings._sdk_root_cache.get(default_sdk_path)
+ if default_sdk_root:
+ return default_sdk_root
+ try:
+ all_sdks = GetStdout(['xcodebuild', '-showsdks'])
+ except:
+ # If xcodebuild fails, there will be no valid SDKs
+ return ''
+ for line in all_sdks.splitlines():
+ items = line.split()
+ if len(items) >= 3 and items[-2] == '-sdk':
+ sdk_root = items[-1]
+ sdk_path = self._XcodeSdkPath(sdk_root)
+ if sdk_path == default_sdk_path:
+ return sdk_root
+ return ''
+
class MacPrefixHeader(object):
"""A class that helps with emulating Xcode's GCC_PREFIX_HEADER feature.
@@ -1038,6 +1170,81 @@ class MacPrefixHeader(object):
]
+def XcodeVersion():
+ """Returns a tuple of version and build version of installed Xcode."""
+ # `xcodebuild -version` output looks like
+ # Xcode 4.6.3
+ # Build version 4H1503
+ # or like
+ # Xcode 3.2.6
+ # Component versions: DevToolsCore-1809.0; DevToolsSupport-1806.0
+ # BuildVersion: 10M2518
+ # Convert that to '0463', '4H1503'.
+ global XCODE_VERSION_CACHE
+ if XCODE_VERSION_CACHE:
+ return XCODE_VERSION_CACHE
+ try:
+ version_list = GetStdout(['xcodebuild', '-version']).splitlines()
+ # In some circumstances xcodebuild exits 0 but doesn't return
+ # the right results; for example, a user on 10.7 or 10.8 with
+ # a bogus path set via xcode-select
+ # In that case this may be a CLT-only install so fall back to
+ # checking that version.
+ if len(version_list) < 2:
+ raise GypError, "xcodebuild returned unexpected results"
+ except:
+ version = CLTVersion()
+ if version:
+ version = re.match('(\d\.\d\.?\d*)', version).groups()[0]
+ else:
+ raise GypError, "No Xcode or CLT version detected!"
+ # The CLT has no build information, so we return an empty string.
+ version_list = [version, '']
+ version = version_list[0]
+ build = version_list[-1]
+ # Be careful to convert "4.2" to "0420":
+ version = version.split()[-1].replace('.', '')
+ version = (version + '0' * (3 - len(version))).zfill(4)
+ if build:
+ build = build.split()[-1]
+ XCODE_VERSION_CACHE = (version, build)
+ return XCODE_VERSION_CACHE
+
+
+# This function ported from the logic in Homebrew's CLT version check
+def CLTVersion():
+ """Returns the version of command-line tools from pkgutil."""
+ # pkgutil output looks like
+ # package-id: com.apple.pkg.CLTools_Executables
+ # version: 5.0.1.0.1.1382131676
+ # volume: /
+ # location: /
+ # install-time: 1382544035
+ # groups: com.apple.FindSystemFiles.pkg-group com.apple.DevToolsBoth.pkg-group com.apple.DevToolsNonRelocatableShared.pkg-group
+ STANDALONE_PKG_ID = "com.apple.pkg.DeveloperToolsCLILeo"
+ FROM_XCODE_PKG_ID = "com.apple.pkg.DeveloperToolsCLI"
+ MAVERICKS_PKG_ID = "com.apple.pkg.CLTools_Executables"
+
+ regex = re.compile('version: (?P<version>.+)')
+ for key in [MAVERICKS_PKG_ID, STANDALONE_PKG_ID, FROM_XCODE_PKG_ID]:
+ try:
+ output = GetStdout(['/usr/sbin/pkgutil', '--pkg-info', key])
+ return re.search(regex, output).groupdict()['version']
+ except:
+ continue
+
+
+def GetStdout(cmdlist):
+ """Returns the content of standard output returned by invoking |cmdlist|.
+ Raises |GypError| if the command return with a non-zero return code."""
+ job = subprocess.Popen(cmdlist, stdout=subprocess.PIPE)
+ out = job.communicate()[0]
+ if job.returncode != 0:
+ sys.stderr.write(out + '\n')
+ raise GypError('Error %d running %s' % (job.returncode, cmdlist[0]))
+ return out.rstrip('\n')
+
+
def MergeGlobalXcodeSettingsToSpec(global_dict, spec):
"""Merges the global xcode_settings dictionary into each configuration of the
target represented by spec. For keys that are both in the global and the local
@@ -1217,6 +1424,11 @@ def _GetXcodeEnv(xcode_settings, built_products_dir, srcroot, configuration,
install_name_base = xcode_settings.GetInstallNameBase()
if install_name_base:
env['DYLIB_INSTALL_NAME_BASE'] = install_name_base
+ if XcodeVersion() >= '0500' and not env.get('SDKROOT'):
+ sdk_root = xcode_settings._SdkRoot(configuration)
+ if not sdk_root:
+ sdk_root = xcode_settings._XcodeSdkPath('')
+ env['SDKROOT'] = sdk_root
if not additional_settings:
additional_settings = {}
@@ -1327,16 +1539,16 @@ def _HasIOSTarget(targets):
def _AddIOSDeviceConfigurations(targets):
"""Clone all targets and append -iphoneos to the name. Configure these targets
- to build for iOS devices."""
- for target_dict in targets.values():
- for config_name in target_dict['configurations'].keys():
- config = target_dict['configurations'][config_name]
- new_config_name = config_name + '-iphoneos'
- new_config_dict = copy.deepcopy(config)
- if target_dict['toolset'] == 'target':
- new_config_dict['xcode_settings']['ARCHS'] = ['armv7']
- new_config_dict['xcode_settings']['SDKROOT'] = 'iphoneos'
- target_dict['configurations'][new_config_name] = new_config_dict
+ to build for iOS devices and use correct architectures for those builds."""
+ for target_dict in targets.itervalues():
+ toolset = target_dict['toolset']
+ configs = target_dict['configurations']
+ for config_name, config_dict in dict(configs).iteritems():
+ iphoneos_config_dict = copy.deepcopy(config_dict)
+ configs[config_name + '-iphoneos'] = iphoneos_config_dict
+ configs[config_name + '-iphonesimulator'] = config_dict
+ if toolset == 'target':
+ iphoneos_config_dict['xcode_settings']['SDKROOT'] = 'iphoneos'
return targets
def CloneConfigurationForDeviceAndEmulator(target_dicts):
diff --git a/chromium/tools/gyp/pylib/gyp/xcode_ninja.py b/chromium/tools/gyp/pylib/gyp/xcode_ninja.py
new file mode 100644
index 00000000000..0e5a70c714e
--- /dev/null
+++ b/chromium/tools/gyp/pylib/gyp/xcode_ninja.py
@@ -0,0 +1,257 @@
+# Copyright (c) 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Xcode-ninja wrapper project file generator.
+
+This updates the data structures passed to the Xcode gyp generator to build
+with ninja instead. The Xcode project itself is transformed into a list of
+executable targets, each with a build step to build with ninja, and a target
+with every source and resource file. This appears to sidestep some of the
+major performance headaches experienced using complex projects and large number
+of targets within Xcode.
+"""
+
+import errno
+import gyp.generator.ninja
+import os
+import re
+import xml.sax.saxutils
+
+
+def _WriteWorkspace(main_gyp, sources_gyp):
+ """ Create a workspace to wrap main and sources gyp paths. """
+ (build_file_root, build_file_ext) = os.path.splitext(main_gyp)
+ workspace_path = build_file_root + '.xcworkspace'
+ try:
+ os.makedirs(workspace_path)
+ except OSError, e:
+ if e.errno != errno.EEXIST:
+ raise
+ output_string = '<?xml version="1.0" encoding="UTF-8"?>\n' + \
+ '<Workspace version = "1.0">\n'
+ for gyp_name in [main_gyp, sources_gyp]:
+ name = os.path.splitext(os.path.basename(gyp_name))[0] + '.xcodeproj'
+ name = xml.sax.saxutils.quoteattr("group:" + name)
+ output_string += ' <FileRef location = %s></FileRef>\n' % name
+ output_string += '</Workspace>\n'
+
+ workspace_file = os.path.join(workspace_path, "contents.xcworkspacedata")
+
+ try:
+ with open(workspace_file, 'r') as input_file:
+ input_string = input_file.read()
+ if input_string == output_string:
+ return
+ except IOError:
+ # Ignore errors if the file doesn't exist.
+ pass
+
+ with open(workspace_file, 'w') as output_file:
+ output_file.write(output_string)
+
+def _TargetFromSpec(old_spec, params):
+ """ Create fake target for xcode-ninja wrapper. """
+ # Determine ninja top level build dir (e.g. /path/to/out).
+ ninja_toplevel = None
+ jobs = 0
+ if params:
+ options = params['options']
+ ninja_toplevel = \
+ os.path.join(options.toplevel_dir,
+ gyp.generator.ninja.ComputeOutputDir(params))
+ jobs = params.get('generator_flags', {}).get('xcode_ninja_jobs', 0)
+
+ target_name = old_spec.get('target_name')
+ product_name = old_spec.get('product_name', target_name)
+
+ ninja_target = {}
+ ninja_target['target_name'] = target_name
+ ninja_target['product_name'] = product_name
+ ninja_target['toolset'] = old_spec.get('toolset')
+ ninja_target['default_configuration'] = old_spec.get('default_configuration')
+ ninja_target['configurations'] = {}
+
+ # Tell Xcode to look in |ninja_toplevel| for build products.
+ new_xcode_settings = {}
+ if ninja_toplevel:
+ new_xcode_settings['CONFIGURATION_BUILD_DIR'] = \
+ "%s/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)" % ninja_toplevel
+
+ if 'configurations' in old_spec:
+ for config in old_spec['configurations'].iterkeys():
+ old_xcode_settings = old_spec['configurations'][config]['xcode_settings']
+ if 'IPHONEOS_DEPLOYMENT_TARGET' in old_xcode_settings:
+ new_xcode_settings['CODE_SIGNING_REQUIRED'] = "NO"
+ new_xcode_settings['IPHONEOS_DEPLOYMENT_TARGET'] = \
+ old_xcode_settings['IPHONEOS_DEPLOYMENT_TARGET']
+ ninja_target['configurations'][config] = {}
+ ninja_target['configurations'][config]['xcode_settings'] = \
+ new_xcode_settings
+
+ ninja_target['mac_bundle'] = old_spec.get('mac_bundle', 0)
+ ninja_target['type'] = old_spec['type']
+ if ninja_toplevel:
+ ninja_target['actions'] = [
+ {
+ 'action_name': 'Compile and copy %s via ninja' % target_name,
+ 'inputs': [],
+ 'outputs': [],
+ 'action': [
+ 'env',
+ 'PATH=%s' % os.environ['PATH'],
+ 'ninja',
+ '-C',
+ new_xcode_settings['CONFIGURATION_BUILD_DIR'],
+ target_name,
+ ],
+ 'message': 'Compile and copy %s via ninja' % target_name,
+ },
+ ]
+ if jobs > 0:
+ ninja_target['actions'][0]['action'].extend(('-j', jobs))
+ return ninja_target
+
+def IsValidTargetForWrapper(target_extras, executable_target_pattern, spec):
+ """Limit targets for Xcode wrapper.
+
+ Xcode sometimes performs poorly with too many targets, so only include
+ proper executable targets, with filters to customize.
+ Arguments:
+ target_extras: Regular expression to always add, matching any target.
+ executable_target_pattern: Regular expression limiting executable targets.
+ spec: Specifications for target.
+ """
+ target_name = spec.get('target_name')
+ # Always include targets matching target_extras.
+ if target_extras is not None and re.search(target_extras, target_name):
+ return True
+
+ # Otherwise just show executable targets.
+ if spec.get('type', '') == 'executable' and \
+ spec.get('product_extension', '') != 'bundle':
+
+ # If there is a filter and the target does not match, exclude the target.
+ if executable_target_pattern is not None:
+ if not re.search(executable_target_pattern, target_name):
+ return False
+ return True
+ return False
+
+def CreateWrapper(target_list, target_dicts, data, params):
+ """Initialize targets for the ninja wrapper.
+
+ This sets up the necessary variables in the targets to generate Xcode projects
+ that use ninja as an external builder.
+ Arguments:
+ target_list: List of target pairs: 'base/base.gyp:base'.
+ target_dicts: Dict of target properties keyed on target pair.
+ data: Dict of flattened build files keyed on gyp path.
+ params: Dict of global options for gyp.
+ """
+ orig_gyp = params['build_files'][0]
+ for gyp_name, gyp_dict in data.iteritems():
+ if gyp_name == orig_gyp:
+ depth = gyp_dict['_DEPTH']
+
+ # Check for custom main gyp name, otherwise use the default CHROMIUM_GYP_FILE
+ # and prepend .ninja before the .gyp extension.
+ generator_flags = params.get('generator_flags', {})
+ main_gyp = generator_flags.get('xcode_ninja_main_gyp', None)
+ if main_gyp is None:
+ (build_file_root, build_file_ext) = os.path.splitext(orig_gyp)
+ main_gyp = build_file_root + ".ninja" + build_file_ext
+
+ # Create new |target_list|, |target_dicts| and |data| data structures.
+ new_target_list = []
+ new_target_dicts = {}
+ new_data = {}
+
+ # Set base keys needed for |data|.
+ new_data[main_gyp] = {}
+ new_data[main_gyp]['included_files'] = []
+ new_data[main_gyp]['targets'] = []
+ new_data[main_gyp]['xcode_settings'] = \
+ data[orig_gyp].get('xcode_settings', {})
+
+ # Normally the xcode-ninja generator includes only valid executable targets.
+ # If |xcode_ninja_executable_target_pattern| is set, that list is reduced to
+ # executable targets that match the pattern. (Default all)
+ executable_target_pattern = \
+ generator_flags.get('xcode_ninja_executable_target_pattern', None)
+
+ # For including other non-executable targets, add the matching target name
+ # to the |xcode_ninja_target_pattern| regular expression. (Default none)
+ target_extras = generator_flags.get('xcode_ninja_target_pattern', None)
+
+ for old_qualified_target in target_list:
+ spec = target_dicts[old_qualified_target]
+ if IsValidTargetForWrapper(target_extras, executable_target_pattern, spec):
+ # Add to new_target_list.
+ target_name = spec.get('target_name')
+ new_target_name = '%s:%s#target' % (main_gyp, target_name)
+ new_target_list.append(new_target_name)
+
+ # Add to new_target_dicts.
+ new_target_dicts[new_target_name] = _TargetFromSpec(spec, params)
+
+ # Add to new_data.
+ for old_target in data[old_qualified_target.split(':')[0]]['targets']:
+ if old_target['target_name'] == target_name:
+ new_data_target = {}
+ new_data_target['target_name'] = old_target['target_name']
+ new_data_target['toolset'] = old_target['toolset']
+ new_data[main_gyp]['targets'].append(new_data_target)
+
+ # Create sources target.
+ sources_target_name = 'sources_for_indexing'
+ sources_target = _TargetFromSpec(
+ { 'target_name' : sources_target_name,
+ 'toolset': 'target',
+ 'default_configuration': 'Default',
+ 'mac_bundle': '0',
+ 'type': 'executable'
+ }, None)
+
+ # Tell Xcode to look everywhere for headers.
+ sources_target['configurations'] = {'Default': { 'include_dirs': [ depth ] } }
+
+ sources = []
+ for target, target_dict in target_dicts.iteritems():
+ base = os.path.dirname(target)
+ files = target_dict.get('sources', []) + \
+ target_dict.get('mac_bundle_resources', [])
+ # Remove files starting with $. These are mostly intermediate files for the
+ # build system.
+ files = [ file for file in files if not file.startswith('$')]
+
+ # Make sources relative to root build file.
+ relative_path = os.path.dirname(main_gyp)
+ sources += [ os.path.relpath(os.path.join(base, file), relative_path)
+ for file in files ]
+
+ sources_target['sources'] = sorted(set(sources))
+
+ # Put sources_to_index in it's own gyp.
+ sources_gyp = \
+ os.path.join(os.path.dirname(main_gyp), sources_target_name + ".gyp")
+ fully_qualified_target_name = \
+ '%s:%s#target' % (sources_gyp, sources_target_name)
+
+ # Add to new_target_list, new_target_dicts and new_data.
+ new_target_list.append(fully_qualified_target_name)
+ new_target_dicts[fully_qualified_target_name] = sources_target
+ new_data_target = {}
+ new_data_target['target_name'] = sources_target['target_name']
+ new_data_target['_DEPTH'] = depth
+ new_data_target['toolset'] = "target"
+ new_data[sources_gyp] = {}
+ new_data[sources_gyp]['targets'] = []
+ new_data[sources_gyp]['included_files'] = []
+ new_data[sources_gyp]['xcode_settings'] = \
+ data[orig_gyp].get('xcode_settings', {})
+ new_data[sources_gyp]['targets'].append(new_data_target)
+
+ # Write workspace to file.
+ _WriteWorkspace(main_gyp, sources_gyp)
+ return (new_target_list, new_target_dicts, new_data)
diff --git a/chromium/tools/gyp/pylib/gyp/xcodeproj_file.py b/chromium/tools/gyp/pylib/gyp/xcodeproj_file.py
index 6e4a1dc69dc..79c3abcf025 100644
--- a/chromium/tools/gyp/pylib/gyp/xcodeproj_file.py
+++ b/chromium/tools/gyp/pylib/gyp/xcodeproj_file.py
@@ -1509,6 +1509,7 @@ class PBXFileReference(XCFileLikeElement, XCContainerPortal, XCRemoteObject):
'storyboard': 'file.storyboard',
'strings': 'text.plist.strings',
'ttf': 'file',
+ 'xcassets': 'folder.assetcatalog',
'xcconfig': 'text.xcconfig',
'xcdatamodel': 'wrapper.xcdatamodel',
'xib': 'file.xib',
diff --git a/chromium/tools/gyp/pylintrc b/chromium/tools/gyp/pylintrc
deleted file mode 100644
index d7c23d2a211..00000000000
--- a/chromium/tools/gyp/pylintrc
+++ /dev/null
@@ -1,307 +0,0 @@
-[MASTER]
-
-# Specify a configuration file.
-#rcfile=
-
-# Python code to execute, usually for sys.path manipulation such as
-# pygtk.require().
-#init-hook=
-
-# Profiled execution.
-profile=no
-
-# Add files or directories to the blacklist. They should be base names, not
-# paths.
-ignore=CVS
-
-# Pickle collected data for later comparisons.
-persistent=yes
-
-# List of plugins (as comma separated values of python modules names) to load,
-# usually to register additional checkers.
-load-plugins=
-
-
-[MESSAGES CONTROL]
-
-# Enable the message, report, category or checker with the given id(s). You can
-# either give multiple identifier separated by comma (,) or put this option
-# multiple time.
-#enable=
-
-# Disable the message, report, category or checker with the given id(s). You
-# can either give multiple identifier separated by comma (,) or put this option
-# multiple time (only on the command line, not in the configuration file where
-# it should appear only once).
-# C0103: Invalid name "NN" (should match [a-z_][a-z0-9_]{2,30}$)
-# C0111: Missing docstring
-# C0302: Too many lines in module (NN)
-# R0902: Too many instance attributes (N/7)
-# R0903: Too few public methods (N/2)
-# R0904: Too many public methods (NN/20)
-# R0912: Too many branches (NN/12)
-# R0913: Too many arguments (N/5)
-# R0914: Too many local variables (NN/15)
-# R0915: Too many statements (NN/50)
-# W0141: Used builtin function 'map'
-# W0142: Used * or ** magic
-# W0232: Class has no __init__ method
-# W0511: TODO
-# W0603: Using the global statement
-#
-# These should be enabled eventually:
-# C0112: Empty docstring
-# C0301: Line too long (NN/80)
-# C0321: More than one statement on single line
-# C0322: Operator not preceded by a space
-# C0323: Operator not followed by a space
-# C0324: Comma not followed by a space
-# E0101: Explicit return in __init__
-# E0102: function already defined line NN
-# E1002: Use of super on an old style class
-# E1101: Instance of 'XX' has no 'YY' member
-# E1103: Instance of 'XX' has no 'XX' member (but some types could not be inferred)
-# E0602: Undefined variable 'XX'
-# F0401: Unable to import 'XX'
-# R0201: Method could be a function
-# R0801: Similar lines in N files
-# W0102: Dangerous default value {} as argument
-# W0104: Statement seems to have no effect
-# W0105: String statement has no effect
-# W0108: Lambda may not be necessary
-# W0201: Attribute 'XX' defined outside __init__
-# W0212: Access to a protected member XX of a client class
-# W0221: Arguments number differs from overridden method
-# W0223: Method 'XX' is abstract in class 'YY' but is not overridden
-# W0231: __init__ method from base class 'XX' is not called
-# W0301: Unnecessary semicolon
-# W0311: Bad indentation. Found NN spaces, expected NN
-# W0401: Wildcard import XX
-# W0402: Uses of a deprecated module 'string'
-# W0403: Relative import 'XX', should be 'YY.XX'
-# W0404: Reimport 'XX' (imported line NN)
-# W0601: Global variable 'XX' undefined at the module level
-# W0602: Using global for 'XX' but no assignment is done
-# W0611: Unused import pprint
-# W0612: Unused variable 'XX'
-# W0613: Unused argument 'XX'
-# W0614: Unused import XX from wildcard import
-# W0621: Redefining name 'XX' from outer scope (line NN)
-# W0622: Redefining built-in 'NN'
-# W0631: Using possibly undefined loop variable 'XX'
-# W0701: Raising a string exception
-# W0702: No exception type(s) specified
-disable=C0103,C0111,C0302,R0902,R0903,R0904,R0912,R0913,R0914,R0915,W0141,W0142,W0232,W0511,W0603,C0112,C0301,C0321,C0322,C0323,C0324,E0101,E0102,E1002,E1101,E1103,E0602,F0401,R0201,R0801,W0102,W0104,W0105,W0108,W0201,W0212,W0221,W0223,W0231,W0301,W0311,W0401,W0402,W0403,W0404,W0601,W0602,W0611,W0612,W0613,W0614,W0621,W0622,W0631,W0701,W0702
-
-
-[REPORTS]
-
-# Set the output format. Available formats are text, parseable, colorized, msvs
-# (visual studio) and html
-output-format=text
-
-# Include message's id in output
-include-ids=yes
-
-# Put messages in a separate file for each module / package specified on the
-# command line instead of printing them on stdout. Reports (if any) will be
-# written in a file name "pylint_global.[txt|html]".
-files-output=no
-
-# Tells whether to display a full report or only the messages
-reports=no
-
-# Python expression which should return a note less than 10 (10 is the highest
-# note). You have access to the variables errors warning, statement which
-# respectively contain the number of errors / warnings messages and the total
-# number of statements analyzed. This is used by the global evaluation report
-# (RP0004).
-evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
-
-# Add a comment according to your evaluation note. This is used by the global
-# evaluation report (RP0004).
-comment=no
-
-
-[VARIABLES]
-
-# Tells whether we should check for unused import in __init__ files.
-init-import=no
-
-# A regular expression matching the beginning of the name of dummy variables
-# (i.e. not used).
-dummy-variables-rgx=_|dummy
-
-# List of additional names supposed to be defined in builtins. Remember that
-# you should avoid to define new builtins when possible.
-additional-builtins=
-
-
-[TYPECHECK]
-
-# Tells whether missing members accessed in mixin class should be ignored. A
-# mixin class is detected if its name ends with "mixin" (case insensitive).
-ignore-mixin-members=yes
-
-# List of classes names for which member attributes should not be checked
-# (useful for classes with attributes dynamically set).
-ignored-classes=SQLObject
-
-# When zope mode is activated, add a predefined set of Zope acquired attributes
-# to generated-members.
-zope=no
-
-# List of members which are set dynamically and missed by pylint inference
-# system, and so shouldn't trigger E0201 when accessed. Python regular
-# expressions are accepted.
-generated-members=REQUEST,acl_users,aq_parent
-
-
-[MISCELLANEOUS]
-
-# List of note tags to take in consideration, separated by a comma.
-notes=FIXME,XXX,TODO
-
-
-[SIMILARITIES]
-
-# Minimum lines number of a similarity.
-min-similarity-lines=4
-
-# Ignore comments when computing similarities.
-ignore-comments=yes
-
-# Ignore docstrings when computing similarities.
-ignore-docstrings=yes
-
-
-[FORMAT]
-
-# Maximum number of characters on a single line.
-max-line-length=80
-
-# Maximum number of lines in a module
-max-module-lines=1000
-
-# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
-# tab).
-indent-string=' '
-
-
-[BASIC]
-
-# Required attributes for module, separated by a comma
-required-attributes=
-
-# List of builtins function names that should not be used, separated by a comma
-bad-functions=map,filter,apply,input
-
-# Regular expression which should only match correct module names
-module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
-
-# Regular expression which should only match correct module level names
-const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$
-
-# Regular expression which should only match correct class names
-class-rgx=[A-Z_][a-zA-Z0-9]+$
-
-# Regular expression which should only match correct function names
-function-rgx=[a-z_][a-z0-9_]{2,30}$
-
-# Regular expression which should only match correct method names
-method-rgx=[a-z_][a-z0-9_]{2,30}$
-
-# Regular expression which should only match correct instance attribute names
-attr-rgx=[a-z_][a-z0-9_]{2,30}$
-
-# Regular expression which should only match correct argument names
-argument-rgx=[a-z_][a-z0-9_]{2,30}$
-
-# Regular expression which should only match correct variable names
-variable-rgx=[a-z_][a-z0-9_]{2,30}$
-
-# Regular expression which should only match correct list comprehension /
-# generator expression variable names
-inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$
-
-# Good variable names which should always be accepted, separated by a comma
-good-names=i,j,k,ex,Run,_
-
-# Bad variable names which should always be refused, separated by a comma
-bad-names=foo,bar,baz,toto,tutu,tata
-
-# Regular expression which should only match functions or classes name which do
-# not require a docstring
-no-docstring-rgx=__.*__
-
-
-[DESIGN]
-
-# Maximum number of arguments for function / method
-max-args=5
-
-# Argument names that match this expression will be ignored. Default to name
-# with leading underscore
-ignored-argument-names=_.*
-
-# Maximum number of locals for function / method body
-max-locals=15
-
-# Maximum number of return / yield for function / method body
-max-returns=6
-
-# Maximum number of branch for function / method body
-max-branchs=12
-
-# Maximum number of statements in function / method body
-max-statements=50
-
-# Maximum number of parents for a class (see R0901).
-max-parents=7
-
-# Maximum number of attributes for a class (see R0902).
-max-attributes=7
-
-# Minimum number of public methods for a class (see R0903).
-min-public-methods=2
-
-# Maximum number of public methods for a class (see R0904).
-max-public-methods=20
-
-
-[CLASSES]
-
-# List of interface methods to ignore, separated by a comma. This is used for
-# instance to not check methods defines in Zope's Interface base class.
-ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by
-
-# List of method names used to declare (i.e. assign) instance attributes.
-defining-attr-methods=__init__,__new__,setUp
-
-# List of valid names for the first argument in a class method.
-valid-classmethod-first-arg=cls
-
-
-[IMPORTS]
-
-# Deprecated modules which should not be used, separated by a comma
-deprecated-modules=regsub,string,TERMIOS,Bastion,rexec
-
-# Create a graph of every (i.e. internal and external) dependencies in the
-# given file (report RP0402 must not be disabled)
-import-graph=
-
-# Create a graph of external dependencies in the given file (report RP0402 must
-# not be disabled)
-ext-import-graph=
-
-# Create a graph of internal dependencies in the given file (report RP0402 must
-# not be disabled)
-int-import-graph=
-
-
-[EXCEPTIONS]
-
-# Exceptions that will emit a warning when being caught. Defaults to
-# "Exception"
-overgeneral-exceptions=Exception
diff --git a/chromium/tools/gyp/test/analyzer/subdir/subdir.gyp b/chromium/tools/gyp/test/analyzer/subdir/subdir.gyp
new file mode 100644
index 00000000000..cd0f0134e54
--- /dev/null
+++ b/chromium/tools/gyp/test/analyzer/subdir/subdir.gyp
@@ -0,0 +1,19 @@
+# Copyright (c) 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'variables': {
+ 'trailing_dir_path': '../',
+ },
+ 'targets': [
+ {
+ 'target_name': 'foo',
+ 'type': 'static_library',
+ 'sources': [
+ 'subdir_source.c',
+ '<(trailing_dir_path)/parent_source.c',
+ ],
+ },
+ ],
+}
diff --git a/chromium/tools/gyp/test/analyzer/test.gyp b/chromium/tools/gyp/test/analyzer/test.gyp
new file mode 100644
index 00000000000..b3fcdd35166
--- /dev/null
+++ b/chromium/tools/gyp/test/analyzer/test.gyp
@@ -0,0 +1,54 @@
+# Copyright (c) 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'variables': {
+ 'test_variable%': 0,
+ 'variable_path': 'subdir',
+ },
+ 'targets': [
+ {
+ 'target_name': 'exe',
+ 'type': 'executable',
+ 'dependencies': [
+ 'subdir/subdir.gyp:foo',
+ ],
+ 'sources': [
+ 'foo.c',
+ '<(variable_path)/subdir_source2.c',
+ ],
+ 'conditions': [
+ ['test_variable==1', {
+ 'sources': [
+ 'conditional_source.c',
+ ],
+ }],
+ ],
+ 'actions': [
+ {
+ 'action_name': 'action',
+ 'inputs': [
+ '<(PRODUCT_DIR)/product_dir_input.c',
+ 'action_input.c',
+ ],
+ 'outputs': [
+ 'action_output.c',
+ ],
+ },
+ ],
+ 'rules': [
+ {
+ 'rule_name': 'rule',
+ 'extension': 'pdf',
+ 'inputs': [
+ 'rule_input.c',
+ ],
+ 'outputs': [
+ 'rule_output.pdf',
+ ],
+ },
+ ],
+ },
+ ],
+}
diff --git a/chromium/tools/gyp/test/android/hello.gyp b/chromium/tools/gyp/test/android/hello.gyp
new file mode 100644
index 00000000000..da58a2b707f
--- /dev/null
+++ b/chromium/tools/gyp/test/android/hello.gyp
@@ -0,0 +1,15 @@
+# Copyright (c) 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'hello',
+ 'type': 'executable',
+ 'sources': [
+ 'hello.c',
+ ],
+ },
+ ],
+}
diff --git a/chromium/tools/gyp/test/android/make_functions.gyp b/chromium/tools/gyp/test/android/make_functions.gyp
new file mode 100644
index 00000000000..4b617cc932d
--- /dev/null
+++ b/chromium/tools/gyp/test/android/make_functions.gyp
@@ -0,0 +1,31 @@
+# Copyright (c) 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'file-in',
+ 'type': 'none',
+ 'copies': [
+ {
+ 'destination': '<(PRODUCT_DIR)',
+ 'files': [ 'file.in' ],
+ },
+ ],
+ },
+ {
+ 'target_name': 'file-out',
+ 'type': 'none',
+ 'dependencies': [ 'file-in' ],
+ 'actions': [
+ {
+ 'action_name': 'copy-file',
+ 'inputs': [ '$(strip <(PRODUCT_DIR)/file.in)' ],
+ 'outputs': [ '<(PRODUCT_DIR)/file.out' ],
+ 'action': [ 'cp', '$(strip <(PRODUCT_DIR)/file.in)', '<(PRODUCT_DIR)/file.out' ],
+ }
+ ],
+ },
+ ],
+}
diff --git a/chromium/tools/gyp/test/android/space_filenames.gyp b/chromium/tools/gyp/test/android/space_filenames.gyp
new file mode 100644
index 00000000000..487ac551db2
--- /dev/null
+++ b/chromium/tools/gyp/test/android/space_filenames.gyp
@@ -0,0 +1,18 @@
+# Copyright (c) 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'do_actions',
+ 'type': 'none',
+ 'actions': [{
+ 'action_name': 'should_be_forbidden',
+ 'inputs': [ 'name with spaces' ],
+ 'outputs': [ '<(SHARED_INTERMEDIATE_DIR)/name with spaces' ],
+ 'action': [ 'true' ],
+ }],
+ },
+ ],
+}
diff --git a/chromium/tools/gyp/test/compiler-override/compiler-host.gyp b/chromium/tools/gyp/test/compiler-override/compiler-host.gyp
index 05b0368d4c2..ab3d247e0bf 100644
--- a/chromium/tools/gyp/test/compiler-override/compiler-host.gyp
+++ b/chromium/tools/gyp/test/compiler-override/compiler-host.gyp
@@ -5,7 +5,7 @@
{
'targets': [
{
- 'toolset': 'host',
+ 'toolset': 'host',
'target_name': 'hello',
'type': 'executable',
'sources': [
diff --git a/chromium/tools/gyp/test/configurations/inheritance/duplicates.gyp b/chromium/tools/gyp/test/configurations/inheritance/duplicates.gyp
new file mode 100644
index 00000000000..6930ce3b39a
--- /dev/null
+++ b/chromium/tools/gyp/test/configurations/inheritance/duplicates.gyp
@@ -0,0 +1,27 @@
+# Copyright 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'target_defaults': {
+ 'default_configuration': 'A',
+ 'configurations': {
+ 'A': {
+ 'defines': ['SOMETHING'],
+ },
+ 'B': {
+ 'inherit_from': ['A'],
+ },
+ },
+ 'cflags': ['-g'],
+ },
+ 'targets': [
+ {
+ 'target_name': 'configurations',
+ 'type': 'executable',
+ 'sources': [
+ 'configurations.c',
+ ],
+ },
+ ],
+}
diff --git a/chromium/tools/gyp/test/cxxflags/cxxflags.gyp b/chromium/tools/gyp/test/cxxflags/cxxflags.gyp
index 24d883aaed6..a082d494924 100644
--- a/chromium/tools/gyp/test/cxxflags/cxxflags.gyp
+++ b/chromium/tools/gyp/test/cxxflags/cxxflags.gyp
@@ -7,7 +7,6 @@
{
'target_name': 'cxxflags',
'type': 'executable',
- 'opt': '-Os',
'sources': [
'cxxflags.cc',
],
diff --git a/chromium/tools/gyp/test/ios/app-bundle/test-archs.gyp b/chromium/tools/gyp/test/ios/app-bundle/test-archs.gyp
index 761fd6b1294..b1558c94bec 100644
--- a/chromium/tools/gyp/test/ios/app-bundle/test-archs.gyp
+++ b/chromium/tools/gyp/test/ios/app-bundle/test-archs.gyp
@@ -5,101 +5,106 @@
'make_global_settings': [
['CC', '/usr/bin/clang'],
],
+ 'target_defaults': {
+ 'product_extension': 'bundle',
+ 'mac_bundle_resources': [
+ 'TestApp/English.lproj/InfoPlist.strings',
+ 'TestApp/English.lproj/MainMenu.xib',
+ ],
+ 'link_settings': {
+ 'libraries': [
+ '$(SDKROOT)/System/Library/Frameworks/Foundation.framework',
+ '$(SDKROOT)/System/Library/Frameworks/UIKit.framework',
+ ],
+ },
+ 'xcode_settings': {
+ 'OTHER_CFLAGS': [
+ '-fobjc-abi-version=2',
+ ],
+ 'CODE_SIGNING_REQUIRED': 'NO',
+ 'SDKROOT': 'iphonesimulator', # -isysroot
+ 'TARGETED_DEVICE_FAMILY': '1,2',
+ 'INFOPLIST_FILE': 'TestApp/TestApp-Info.plist',
+ 'IPHONEOS_DEPLOYMENT_TARGET': '7.0',
+ 'CONFIGURATION_BUILD_DIR':'build/Default',
+ },
+ },
'targets': [
{
- 'target_name': 'test_no_archs',
- 'product_name': 'Test No Archs',
+ 'target_name': 'TestNoArchs',
+ 'product_name': 'TestNoArchs',
'type': 'executable',
- 'product_extension': 'bundle',
'mac_bundle': 1,
'sources': [
'TestApp/main.m',
'TestApp/only-compile-in-32-bits.m',
],
- 'mac_bundle_resources': [
- 'TestApp/English.lproj/InfoPlist.strings',
- 'TestApp/English.lproj/MainMenu.xib',
- ],
- 'link_settings': {
- 'libraries': [
- '$(SDKROOT)/System/Library/Frameworks/Foundation.framework',
- '$(SDKROOT)/System/Library/Frameworks/UIKit.framework',
- ],
- },
'xcode_settings': {
- 'OTHER_CFLAGS': [
- '-fobjc-abi-version=2',
+ 'VALID_ARCHS': [
+ 'i386',
+ 'x86_64',
+ 'arm64',
+ 'armv7',
],
- 'SDKROOT': 'iphonesimulator', # -isysroot
- 'TARGETED_DEVICE_FAMILY': '1,2',
- 'INFOPLIST_FILE': 'TestApp/TestApp-Info.plist',
- 'IPHONEOS_DEPLOYMENT_TARGET': '7.0',
- 'CONFIGURATION_BUILD_DIR':'build/Default',
- },
+ }
},
{
- 'target_name': 'test_archs_i386',
- 'product_name': 'Test Archs i386',
+ 'target_name': 'TestArch32Bits',
+ 'product_name': 'TestArch32Bits',
'type': 'executable',
- 'product_extension': 'bundle',
'mac_bundle': 1,
'sources': [
'TestApp/main.m',
'TestApp/only-compile-in-32-bits.m',
],
- 'mac_bundle_resources': [
- 'TestApp/English.lproj/InfoPlist.strings',
- 'TestApp/English.lproj/MainMenu.xib',
- ],
- 'link_settings': {
- 'libraries': [
- '$(SDKROOT)/System/Library/Frameworks/Foundation.framework',
- '$(SDKROOT)/System/Library/Frameworks/UIKit.framework',
- ],
- },
'xcode_settings': {
- 'OTHER_CFLAGS': [
- '-fobjc-abi-version=2',
+ 'ARCHS': [
+ '$(ARCHS_STANDARD)',
+ ],
+ 'VALID_ARCHS': [
+ 'i386',
+ 'armv7',
],
- 'SDKROOT': 'iphonesimulator', # -isysroot
- 'TARGETED_DEVICE_FAMILY': '1,2',
- 'INFOPLIST_FILE': 'TestApp/TestApp-Info.plist',
- 'IPHONEOS_DEPLOYMENT_TARGET': '7.0',
- 'CONFIGURATION_BUILD_DIR':'build/Default',
- 'ARCHS': ['i386'],
},
},
{
- 'target_name': 'test_archs_x86_64',
- 'product_name': 'Test Archs x86_64',
+ 'target_name': 'TestArch64Bits',
+ 'product_name': 'TestArch64Bits',
'type': 'executable',
- 'product_extension': 'bundle',
'mac_bundle': 1,
'sources': [
'TestApp/main.m',
'TestApp/only-compile-in-64-bits.m',
],
- 'mac_bundle_resources': [
- 'TestApp/English.lproj/InfoPlist.strings',
- 'TestApp/English.lproj/MainMenu.xib',
- ],
- 'link_settings': {
- 'libraries': [
- '$(SDKROOT)/System/Library/Frameworks/Foundation.framework',
- '$(SDKROOT)/System/Library/Frameworks/UIKit.framework',
+ 'xcode_settings': {
+ 'ARCHS': [
+ '$(ARCHS_STANDARD_INCLUDING_64_BIT)',
+ ],
+ 'VALID_ARCHS': [
+ 'x86_64',
+ 'arm64',
],
},
+ },
+ {
+ 'target_name': 'TestMultiArchs',
+ 'product_name': 'TestMultiArchs',
+ 'type': 'executable',
+ 'mac_bundle': 1,
+ 'sources': [
+ 'TestApp/main.m',
+ ],
'xcode_settings': {
- 'OTHER_CFLAGS': [
- '-fobjc-abi-version=2',
+ 'ARCHS': [
+ '$(ARCHS_STANDARD_INCLUDING_64_BIT)',
],
- 'SDKROOT': 'iphonesimulator', # -isysroot
- 'TARGETED_DEVICE_FAMILY': '1,2',
- 'INFOPLIST_FILE': 'TestApp/TestApp-Info.plist',
- 'IPHONEOS_DEPLOYMENT_TARGET': '7.0',
- 'CONFIGURATION_BUILD_DIR':'build/Default',
- 'ARCHS': ['x86_64'],
- },
+ 'VALID_ARCHS': [
+ 'x86_64',
+ 'i386',
+ 'arm64',
+ 'armv7',
+ ],
+ }
},
],
}
diff --git a/chromium/tools/gyp/test/ios/app-bundle/test-crosscompile.gyp b/chromium/tools/gyp/test/ios/app-bundle/test-crosscompile.gyp
new file mode 100644
index 00000000000..d9049588ba3
--- /dev/null
+++ b/chromium/tools/gyp/test/ios/app-bundle/test-crosscompile.gyp
@@ -0,0 +1,47 @@
+# Copyright (c) 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+{
+ 'make_global_settings': [
+ ['CC', '/usr/bin/clang'],
+ ],
+ 'targets': [
+ # This target will not be built, but is here so that ninja Xcode emulation
+ # understand this is a multi-platform (ios + mac) build.
+ {
+ 'target_name': 'TestDummy',
+ 'product_name': 'TestDummy',
+ 'toolsets': ['target'],
+ 'type': 'executable',
+ 'mac_bundle': 1,
+ 'sources': [
+ 'tool_main.cc',
+ ],
+ 'xcode_settings': {
+ 'SDKROOT': 'iphonesimulator', # -isysroot
+ 'TARGETED_DEVICE_FAMILY': '1,2',
+ 'IPHONEOS_DEPLOYMENT_TARGET': '7.0',
+ },
+ },
+ {
+ 'target_name': 'TestHost',
+ 'product_name': 'TestHost',
+ 'toolsets': ['host'],
+ 'type': 'executable',
+ 'mac_bundle': 0,
+ 'sources': [
+ 'tool_main.cc',
+ ],
+ 'xcode_settings': {
+ 'SDKROOT': 'macosx',
+ 'ARCHS': [
+ '$(ARCHS_STANDARD)',
+ 'x86_64',
+ ],
+ 'VALID_ARCHS': [
+ 'x86_64',
+ ],
+ }
+ }
+ ],
+}
diff --git a/chromium/tools/gyp/test/ios/app-bundle/test.gyp b/chromium/tools/gyp/test/ios/app-bundle/test.gyp
index 619976dd370..a8601e869e2 100644
--- a/chromium/tools/gyp/test/ios/app-bundle/test.gyp
+++ b/chromium/tools/gyp/test/ios/app-bundle/test.gyp
@@ -15,7 +15,6 @@
'target_name': 'test_app',
'product_name': 'Test App Gyp',
'type': 'executable',
- 'product_extension': 'bundle',
'mac_bundle': 1,
'sources': [
'TestApp/main.m',
diff --git a/chromium/tools/gyp/test/link-dependency/test.gyp b/chromium/tools/gyp/test/link-dependency/test.gyp
new file mode 100644
index 00000000000..47cec15005f
--- /dev/null
+++ b/chromium/tools/gyp/test/link-dependency/test.gyp
@@ -0,0 +1,37 @@
+{
+ 'variables': {
+ 'custom_malloc%' : 1,
+ },
+ 'target_defaults': {
+ 'conditions': [
+ ['custom_malloc==1', {
+ 'dependencies': [
+ 'malloc',
+ ],
+ }],
+ ],
+ },
+ 'targets': [
+ {
+ 'target_name': 'main',
+ 'type': 'none',
+ 'dependencies': [ 'main_initial',],
+ },
+ {
+ 'target_name': 'main_initial',
+ 'type': 'executable',
+ 'product_name': 'main',
+ 'sources': [ 'main.c' ],
+ },
+ {
+ 'target_name': 'malloc',
+ 'type': 'shared_library',
+ 'variables': {
+ 'prune_self_dependency': 1,
+ # Targets with type 'none' won't depend on this target.
+ 'link_dependency': 1,
+ },
+ 'sources': [ 'mymalloc.c' ],
+ },
+ ],
+}
diff --git a/chromium/tools/gyp/test/mac/archs/test-archs-multiarch.gyp b/chromium/tools/gyp/test/mac/archs/test-archs-multiarch.gyp
index a187ca5c357..567e8a6653c 100644
--- a/chromium/tools/gyp/test/mac/archs/test-archs-multiarch.gyp
+++ b/chromium/tools/gyp/test/mac/archs/test-archs-multiarch.gyp
@@ -21,6 +21,16 @@
},
},
{
+ 'target_name': 'shared_32_64_bundle',
+ 'product_name': 'My Framework',
+ 'type': 'shared_library',
+ 'mac_bundle': 1,
+ 'sources': [ 'my_file.cc' ],
+ 'xcode_settings': {
+ 'ARCHS': [ 'i386', 'x86_64' ],
+ },
+ },
+ {
'target_name': 'module_32_64',
'type': 'loadable_module',
'sources': [ 'my_file.cc' ],
@@ -29,6 +39,16 @@
},
},
{
+ 'target_name': 'module_32_64_bundle',
+ 'product_name': 'My Bundle',
+ 'type': 'loadable_module',
+ 'mac_bundle': 1,
+ 'sources': [ 'my_file.cc' ],
+ 'xcode_settings': {
+ 'ARCHS': [ 'i386', 'x86_64' ],
+ },
+ },
+ {
'target_name': 'exe_32_64',
'type': 'executable',
'sources': [ 'empty_main.cc' ],
@@ -56,5 +76,17 @@
'GCC_PRECOMPILE_PREFIX_HEADER': 'YES',
},
},
+ # This does not compile but should not cause generation errors.
+ {
+ 'target_name': 'exe_32_64_no_sources',
+ 'type': 'executable',
+ 'dependencies': [
+ 'static_32_64',
+ ],
+ 'sources': [],
+ 'xcode_settings': {
+ 'ARCHS': ['i386', 'x86_64'],
+ },
+ },
]
}
diff --git a/chromium/tools/gyp/test/mac/archs/test-valid-archs.gyp b/chromium/tools/gyp/test/mac/archs/test-valid-archs.gyp
new file mode 100644
index 00000000000..c90ec1fe9b3
--- /dev/null
+++ b/chromium/tools/gyp/test/mac/archs/test-valid-archs.gyp
@@ -0,0 +1,28 @@
+# Copyright (c) 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'lib',
+ 'product_name': 'Test',
+ 'type': 'static_library',
+ 'sources': [ 'my_file.cc' ],
+ 'xcode_settings': {
+ 'ARCHS': ['i386', 'x86_64', 'unknown-arch'],
+ 'VALID_ARCHS': ['x86_64'],
+ },
+ },
+ {
+ 'target_name': 'exe',
+ 'product_name': 'Test',
+ 'type': 'executable',
+ 'dependencies': [ 'lib' ],
+ 'sources': [ 'my_main_file.cc' ],
+ 'xcode_settings': {
+ 'ARCHS': ['i386', 'x86_64', 'unknown-arch'],
+ 'VALID_ARCHS': ['x86_64'],
+ },
+ }]
+}
diff --git a/chromium/tools/gyp/test/mac/xcode-gcc/test.gyp b/chromium/tools/gyp/test/mac/xcode-gcc/test.gyp
index c0fcb504a17..1ca8b215d87 100644
--- a/chromium/tools/gyp/test/mac/xcode-gcc/test.gyp
+++ b/chromium/tools/gyp/test/mac/xcode-gcc/test.gyp
@@ -2,11 +2,6 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
{
- 'make_global_settings': [
- ['CC', '/usr/bin/gcc'],
- ['CXX', '/usr/bin/g++'],
- ],
-
'target_defaults': {
'xcode_settings': {
'GCC_TREAT_WARNINGS_AS_ERRORS': 'YES',
diff --git a/chromium/tools/gyp/test/mac/xcode-support-actions/test.gyp b/chromium/tools/gyp/test/mac/xcode-support-actions/test.gyp
new file mode 100644
index 00000000000..ad81b8c456c
--- /dev/null
+++ b/chromium/tools/gyp/test/mac/xcode-support-actions/test.gyp
@@ -0,0 +1,26 @@
+# Copyright (c) 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+{
+ 'targets': [
+ {
+ 'target_name': 'target',
+ 'product_name': 'Product',
+ 'type': 'shared_library',
+ 'mac_bundle': 1,
+ 'sources': [
+ '<(PRODUCT_DIR)/copy.c',
+ ],
+ 'actions': [
+ {
+ 'action_name': 'Helper',
+ 'description': 'Helps',
+ 'inputs': [ 'source.c' ],
+ 'outputs': [ '<(PRODUCT_DIR)/copy.c' ],
+ 'action': [ 'cp', '${SOURCE_ROOT}/source.c',
+ '<(PRODUCT_DIR)/copy.c' ],
+ },
+ ],
+ },
+ ],
+}
diff --git a/chromium/tools/gyp/test/make_global_settings/ar/make_global_settings_ar.gyp b/chromium/tools/gyp/test/make_global_settings/ar/make_global_settings_ar.gyp
new file mode 100644
index 00000000000..3430d82a517
--- /dev/null
+++ b/chromium/tools/gyp/test/make_global_settings/ar/make_global_settings_ar.gyp
@@ -0,0 +1,29 @@
+# Copyright (c) 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style licence that can be
+# found in the LICENSE file.
+
+{
+ 'variables': {
+ 'custom_ar_target%': '',
+ 'custom_ar_host%': '',
+ },
+ 'conditions': [
+ ['"<(custom_ar_target)"!=""', {
+ 'make_global_settings': [
+ ['AR', '<(custom_ar_target)'],
+ ],
+ }],
+ ['"<(custom_ar_host)"!=""', {
+ 'make_global_settings': [
+ ['AR.host', '<(custom_ar_host)'],
+ ],
+ }],
+ ],
+ 'targets': [
+ {
+ 'target_name': 'make_global_settings_ar_test',
+ 'type': 'static_library',
+ 'sources': [ 'foo.c' ],
+ },
+ ],
+}
diff --git a/chromium/tools/gyp/test/make_global_settings/ld/make_global_settings_ld.gyp b/chromium/tools/gyp/test/make_global_settings/ld/make_global_settings_ld.gyp
new file mode 100644
index 00000000000..6837c773261
--- /dev/null
+++ b/chromium/tools/gyp/test/make_global_settings/ld/make_global_settings_ld.gyp
@@ -0,0 +1,29 @@
+# Copyright (c) 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style licence that can be
+# found in the LICENSE file.
+
+{
+ 'variables': {
+ 'custom_ld_target%': '',
+ 'custom_ld_host%': '',
+ },
+ 'conditions': [
+ ['"<(custom_ld_target)"!=""', {
+ 'make_global_settings': [
+ ['LD', '<(custom_ld_target)'],
+ ],
+ }],
+ ['"<(custom_ld_host)"!=""', {
+ 'make_global_settings': [
+ ['LD.host', '<(custom_ld_host)'],
+ ],
+ }],
+ ],
+ 'targets': [
+ {
+ 'target_name': 'make_global_settings_ld_test',
+ 'type': 'static_library',
+ 'sources': [ 'foo.c' ],
+ },
+ ],
+}
diff --git a/chromium/tools/gyp/test/msvs/buildevents/buildevents.gyp b/chromium/tools/gyp/test/msvs/buildevents/buildevents.gyp
new file mode 100644
index 00000000000..e0304dd5c61
--- /dev/null
+++ b/chromium/tools/gyp/test/msvs/buildevents/buildevents.gyp
@@ -0,0 +1,14 @@
+# Copyright (c) 2011 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+{
+ 'targets': [
+ {
+ 'target_name': 'main',
+ 'type': 'executable',
+ 'sources': [ 'main.cc', ],
+ 'msvs_prebuild': r'echo starting',
+ 'msvs_postbuild': r'echo finished',
+ },
+ ],
+}
diff --git a/chromium/tools/gyp/test/msvs/filters/filters.gyp b/chromium/tools/gyp/test/msvs/filters/filters.gyp
new file mode 100644
index 00000000000..a4106dc8eb3
--- /dev/null
+++ b/chromium/tools/gyp/test/msvs/filters/filters.gyp
@@ -0,0 +1,47 @@
+# Copyright (c) 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'no_source_files',
+ 'type': 'none',
+ 'sources': [ ],
+ },
+ {
+ 'target_name': 'one_source_file',
+ 'type': 'executable',
+ 'sources': [
+ '../folder/a.c',
+ ],
+ },
+ {
+ 'target_name': 'two_source_files',
+ 'type': 'executable',
+ 'sources': [
+ '../folder/a.c',
+ '../folder/b.c',
+ ],
+ },
+ {
+ 'target_name': 'three_files_in_two_folders',
+ 'type': 'executable',
+ 'sources': [
+ '../folder1/a.c',
+ '../folder1/b.c',
+ '../folder2/c.c',
+ ],
+ },
+ {
+ 'target_name': 'nested_folders',
+ 'type': 'executable',
+ 'sources': [
+ '../folder1/nested/a.c',
+ '../folder2/d.c',
+ '../folder1/nested/b.c',
+ '../folder1/other/c.c',
+ ],
+ },
+ ],
+}
diff --git a/chromium/tools/gyp/test/ninja/normalize-paths-win/normalize-paths.gyp b/chromium/tools/gyp/test/ninja/normalize-paths-win/normalize-paths.gyp
index ba0ee28157b..544d06456d9 100644
--- a/chromium/tools/gyp/test/ninja/normalize-paths-win/normalize-paths.gyp
+++ b/chromium/tools/gyp/test/ninja/normalize-paths-win/normalize-paths.gyp
@@ -30,6 +30,18 @@
],
},
{
+ 'target_name': 'Copy_Target',
+ 'type': 'none',
+ 'copies': [
+ {
+ 'destination': '<(PRODUCT_DIR)',
+ 'files': [
+ '$(VSInstallDir)\\bin\\cl.exe',
+ ],
+ },
+ ],
+ },
+ {
'target_name': 'action',
'type': 'none',
'msvs_cygwin_shell': '0',
diff --git a/chromium/tools/gyp/test/rules-dirname/src/subdir/input-rule-dirname.gyp b/chromium/tools/gyp/test/rules-dirname/src/subdir/input-rule-dirname.gyp
index 6f41d4f489b..da749a2231f 100644
--- a/chromium/tools/gyp/test/rules-dirname/src/subdir/input-rule-dirname.gyp
+++ b/chromium/tools/gyp/test/rules-dirname/src/subdir/input-rule-dirname.gyp
@@ -5,7 +5,7 @@
{
'targets': [
{
- 'target_name': 'print_rule_input_path',
+ 'target_name': 'print_rule_input_dirname',
'type': 'none',
'msvs_cygwin_shell': 0,
'sources': [
@@ -20,36 +20,52 @@
'printvars.py',
],
'outputs': [
- '<(RULE_INPUT_DIRNAME)/<(RULE_INPUT_ROOT).printed',
+ '<(RULE_INPUT_DIRNAME)/<(RULE_INPUT_ROOT).dirname',
],
'action': [
'python', '<@(_inputs)', '<(RULE_INPUT_DIRNAME)', '<@(_outputs)',
],
},
- ],
+ ],
+ },
+ {
+ 'target_name': 'print_rule_input_path',
+ 'type': 'none',
+ 'msvs_cygwin_shell': 0,
+ 'sources': [
+ 'foo/bar/baz.printvars',
+ 'a/b/c.printvars',
+ ],
+ 'rules': [
+ {
+ 'rule_name': 'printvars',
+ 'extension': 'printvars',
+ 'inputs': [
+ 'printvars.py',
+ ],
+ 'outputs': [
+ '<(RULE_INPUT_DIRNAME)/<(RULE_INPUT_ROOT).path',
+ ],
+ 'action': [
+ 'python', '<@(_inputs)', '<(RULE_INPUT_PATH)', '<@(_outputs)',
+ ],
+ },
+ ],
},
{
'target_name': 'gencc_int_output',
'type': 'executable',
'msvs_cygwin_shell': 0,
- 'msvs_cygwin_dirs': ['../../../../../../<(DEPTH)/third_party/cygwin'],
'sources': [
+ 'nodir.gencc',
'foo/bar/baz.gencc',
'a/b/c.gencc',
- 'main.cc',
- ],
- 'conditions': [
- ['OS=="win"', {
- 'dependencies': [
- 'cygwin',
- ],
- }],
+ 'main.cc',
],
'rules': [
{
'rule_name': 'gencc',
'extension': 'gencc',
- 'msvs_external_rule': 1,
'inputs': [
'<(DEPTH)/copy-file.py',
],
@@ -61,13 +77,45 @@
],
'process_outputs_as_sources': 1,
},
- ],
+ ],
},
],
'conditions': [
['OS=="win"', {
'targets': [
{
+ 'target_name': 'gencc_int_output_external',
+ 'type': 'executable',
+ 'msvs_cygwin_shell': 0,
+ 'msvs_cygwin_dirs': ['../../../../../../<(DEPTH)/third_party/cygwin'],
+ 'sources': [
+ 'nodir.gencc',
+ 'foo/bar/baz.gencc',
+ 'a/b/c.gencc',
+ 'main.cc',
+ ],
+ 'dependencies': [
+ 'cygwin',
+ ],
+ 'rules': [
+ {
+ 'rule_name': 'gencc',
+ 'extension': 'gencc',
+ 'msvs_external_rule': 1,
+ 'inputs': [
+ '<(DEPTH)/copy-file.py',
+ ],
+ 'outputs': [
+ '<(INTERMEDIATE_DIR)/<(RULE_INPUT_DIRNAME)/<(RULE_INPUT_ROOT).cc',
+ ],
+ 'action': [
+ 'python', '<@(_inputs)', '<(RULE_INPUT_PATH)', '<@(_outputs)',
+ ],
+ 'process_outputs_as_sources': 1,
+ },
+ ],
+ },
+ {
'target_name': 'cygwin',
'type': 'none',
'actions': [
diff --git a/chromium/tools/gyp/test/rules/src/actions.gyp b/chromium/tools/gyp/test/rules/src/actions.gyp
index 5c0a40b0ce9..84376a71937 100644
--- a/chromium/tools/gyp/test/rules/src/actions.gyp
+++ b/chromium/tools/gyp/test/rules/src/actions.gyp
@@ -9,6 +9,7 @@
'type': 'none',
'dependencies': [
'subdir1/executable.gyp:*',
+ 'subdir2/both_rule_and_action_input.gyp:*',
'subdir2/never_used.gyp:*',
'subdir2/no_inputs.gyp:*',
'subdir2/no_action.gyp:*',
diff --git a/chromium/tools/gyp/test/rules/src/special-variables.gyp b/chromium/tools/gyp/test/rules/src/special-variables.gyp
index fc55665e75b..d1443af5ba0 100644
--- a/chromium/tools/gyp/test/rules/src/special-variables.gyp
+++ b/chromium/tools/gyp/test/rules/src/special-variables.gyp
@@ -13,7 +13,6 @@
'extension': 'S',
'inputs': [
'as.bat',
- '$(InputPath)'
],
'outputs': [
'$(IntDir)/$(InputName).obj',
diff --git a/chromium/tools/gyp/test/rules/src/subdir2/both_rule_and_action_input.gyp b/chromium/tools/gyp/test/rules/src/subdir2/both_rule_and_action_input.gyp
new file mode 100644
index 00000000000..e5e6f3ec2b1
--- /dev/null
+++ b/chromium/tools/gyp/test/rules/src/subdir2/both_rule_and_action_input.gyp
@@ -0,0 +1,50 @@
+# Copyright (c) 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# Tests that if a rule input is also an action input, both the rule and action
+# are executed
+{
+ 'targets': [
+ {
+ 'target_name': 'files_both_rule_and_action_input',
+ 'type': 'executable',
+ 'msvs_cygwin_shell': 0,
+ 'sources': [
+ 'program.c',
+ 'file1.in',
+ 'file2.in',
+ ],
+ 'rules': [
+ {
+ 'rule_name': 'copy_file',
+ 'extension': 'in',
+ 'inputs': [
+ '../copy-file.py',
+ ],
+ 'outputs': [
+ '<(RULE_INPUT_ROOT).out4',
+ ],
+ 'action': [
+ 'python', '<(_inputs)', '<(RULE_INPUT_PATH)', '<@(_outputs)',
+ ],
+ },
+ ],
+ 'actions': [
+ {
+ 'action_name': 'copy_file1_in',
+ 'inputs': [
+ '../copy-file.py',
+ 'file1.in',
+ ],
+ 'outputs': [
+ 'file1.copy',
+ ],
+ 'action': [
+ 'python', '<@(_inputs)', '<(_outputs)'
+ ],
+ },
+ ],
+ },
+ ],
+}
diff --git a/chromium/tools/gyp/test/variables/commands/repeated_multidir/dir_1/test_1.gyp b/chromium/tools/gyp/test/variables/commands/repeated_multidir/dir_1/test_1.gyp
new file mode 100644
index 00000000000..328fc306cd3
--- /dev/null
+++ b/chromium/tools/gyp/test/variables/commands/repeated_multidir/dir_1/test_1.gyp
@@ -0,0 +1,13 @@
+# Copyright 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'variables': {
+ 'expected_value': 'dir_1',
+ 'target_name': 'target_1',
+ },
+ 'includes': [
+ '../repeated_command_common.gypi',
+ ],
+}
diff --git a/chromium/tools/gyp/test/variables/commands/repeated_multidir/dir_2/test_2.gyp b/chromium/tools/gyp/test/variables/commands/repeated_multidir/dir_2/test_2.gyp
new file mode 100644
index 00000000000..18e0c62c937
--- /dev/null
+++ b/chromium/tools/gyp/test/variables/commands/repeated_multidir/dir_2/test_2.gyp
@@ -0,0 +1,13 @@
+# Copyright 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'variables': {
+ 'expected_value': 'dir_2',
+ 'target_name': 'target_2',
+ },
+ 'includes': [
+ '../repeated_command_common.gypi',
+ ],
+}
diff --git a/chromium/tools/gyp/test/variables/commands/repeated_multidir/main.gyp b/chromium/tools/gyp/test/variables/commands/repeated_multidir/main.gyp
new file mode 100644
index 00000000000..5beeeb7244d
--- /dev/null
+++ b/chromium/tools/gyp/test/variables/commands/repeated_multidir/main.gyp
@@ -0,0 +1,16 @@
+# Copyright 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'main',
+ 'type': 'none',
+ 'dependencies': [
+ 'dir_1/test_1.gyp:target_1',
+ 'dir_2/test_2.gyp:target_2',
+ ],
+ },
+ ],
+}
diff --git a/chromium/tools/gyp/test/variables/commands/repeated_multidir/repeated_command_common.gypi b/chromium/tools/gyp/test/variables/commands/repeated_multidir/repeated_command_common.gypi
new file mode 100644
index 00000000000..74366771aa0
--- /dev/null
+++ b/chromium/tools/gyp/test/variables/commands/repeated_multidir/repeated_command_common.gypi
@@ -0,0 +1,25 @@
+# Copyright 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'variables': {
+ # This command will be run from the directories of the .gyp files that
+ # include this .gypi, the subdirectories dir_1 and dir_2, so use a
+ # relative path from those directories to the script.
+ 'observed_value': '<!(python ../print_cwd_basename.py)',
+ },
+ 'targets': [
+ {
+ 'target_name': '<(target_name)',
+ 'type': 'none',
+ 'conditions': [
+ ['observed_value != expected_value', {
+ # Attempt to expand an undefined variable. This triggers a GYP
+ # error.
+ 'assertion': '<(observed_value_must_equal_expected_value)',
+ }],
+ ],
+ },
+ ],
+}
diff --git a/chromium/tools/gyp/test/win/command-quote/command-quote.gyp b/chromium/tools/gyp/test/win/command-quote/command-quote.gyp
index 8489c5040d3..faf724674fc 100644
--- a/chromium/tools/gyp/test/win/command-quote/command-quote.gyp
+++ b/chromium/tools/gyp/test/win/command-quote/command-quote.gyp
@@ -15,7 +15,6 @@
'rule_name': 'build_with_batch',
'msvs_cygwin_shell': 0,
'extension': 'S',
- 'inputs': ['<(RULE_INPUT_PATH)'],
'outputs': ['output.obj'],
'action': ['call go.bat', '<(RULE_INPUT_PATH)', 'output.obj'],
},],
@@ -29,7 +28,6 @@
'rule_name': 'build_with_batch2',
'msvs_cygwin_shell': 0,
'extension': 'S',
- 'inputs': ['<(RULE_INPUT_PATH)'],
'outputs': ['output2.obj'],
'action': ['call', 'go.bat', '<(RULE_INPUT_PATH)', 'output2.obj'],
},],
@@ -43,7 +41,6 @@
'rule_name': 'build_with_batch3',
'msvs_cygwin_shell': 0,
'extension': 'S',
- 'inputs': ['<(RULE_INPUT_PATH)'],
'outputs': ['output3.obj'],
'action': ['bat with spaces.bat', '<(RULE_INPUT_PATH)', 'output3.obj'],
},],
@@ -57,7 +54,6 @@
'rule_name': 'build_with_batch3',
'msvs_cygwin_shell': 1,
'extension': 'S',
- 'inputs': ['<(RULE_INPUT_PATH)'],
'outputs': ['output4.obj'],
'arguments': ['-v'],
'action': ['python', '-c', 'import shutil; '
@@ -73,7 +69,6 @@
'rule_name': 'build_with_batch3',
'msvs_cygwin_shell': 1,
'extension': 'S',
- 'inputs': ['<(RULE_INPUT_PATH)'],
'outputs': ['output5.obj'],
'action': ['python', '-c', "import shutil; "
"shutil.copy('<(RULE_INPUT_PATH)', 'output5.obj')"],
diff --git a/chromium/tools/gyp/test/win/command-quote/subdir/and/another/in-subdir.gyp b/chromium/tools/gyp/test/win/command-quote/subdir/and/another/in-subdir.gyp
index be363bbc893..3dff4c40b97 100644
--- a/chromium/tools/gyp/test/win/command-quote/subdir/and/another/in-subdir.gyp
+++ b/chromium/tools/gyp/test/win/command-quote/subdir/and/another/in-subdir.gyp
@@ -18,7 +18,6 @@
'rule_name': 'build_with_batch4',
'msvs_cygwin_shell': 0,
'extension': 'S',
- 'inputs': ['<(RULE_INPUT_PATH)'],
'outputs': ['output4.obj'],
'action': ['<@(filepath)', '<(RULE_INPUT_PATH)', 'output4.obj'],
},],
diff --git a/chromium/tools/gyp/test/win/compiler-flags/enable-enhanced-instruction-set.gyp b/chromium/tools/gyp/test/win/compiler-flags/enable-enhanced-instruction-set.gyp
new file mode 100644
index 00000000000..44d8ad36a71
--- /dev/null
+++ b/chromium/tools/gyp/test/win/compiler-flags/enable-enhanced-instruction-set.gyp
@@ -0,0 +1,54 @@
+# Copyright (c) 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'sse_extensions',
+ 'type': 'executable',
+ 'msvs_settings': {
+ 'VCCLCompilerTool': {
+ 'EnableEnhancedInstructionSet': '1', # StreamingSIMDExtensions
+ }
+ },
+ 'sources': ['enable-enhanced-instruction-set.cc'],
+ },
+ {
+ 'target_name': 'sse2_extensions',
+ 'type': 'executable',
+ 'msvs_settings': {
+ 'VCCLCompilerTool': {
+ 'EnableEnhancedInstructionSet': '2', # StreamingSIMDExtensions2
+ }
+ },
+ 'sources': ['enable-enhanced-instruction-set.cc'],
+ },
+ ],
+ 'conditions': [
+ ['MSVS_VERSION[0:4]>"2010"', {
+ 'targets': [
+ {
+ 'target_name': 'avx_extensions',
+ 'type': 'executable',
+ 'msvs_settings': {
+ 'VCCLCompilerTool': {
+ 'EnableEnhancedInstructionSet': '3', # AdvancedVectorExtensions
+ }
+ },
+ 'sources': ['enable-enhanced-instruction-set.cc'],
+ },
+ {
+ 'target_name': 'no_extensions',
+ 'type': 'executable',
+ 'msvs_settings': {
+ 'VCCLCompilerTool': {
+ 'EnableEnhancedInstructionSet': '4', # NoExtensions
+ }
+ },
+ 'sources': ['enable-enhanced-instruction-set.cc'],
+ },
+ ],
+ }],
+ ],
+}
diff --git a/chromium/tools/gyp/test/win/idl-excluded/idl-excluded.gyp b/chromium/tools/gyp/test/win/idl-excluded/idl-excluded.gyp
new file mode 100644
index 00000000000..972b7dedac3
--- /dev/null
+++ b/chromium/tools/gyp/test/win/idl-excluded/idl-excluded.gyp
@@ -0,0 +1,58 @@
+# Copyright (c) 2014 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.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'exclude_with_action',
+ 'type': 'none',
+ 'msvs_cygwin_shell': 0,
+ 'actions': [{
+ 'action_name': 'copy_action',
+ 'inputs': [
+ 'copy-file.py',
+ 'bad.idl',
+ ],
+ 'outputs': [
+ '<(INTERMEDIATE_DIR)/bad.idl',
+ ],
+ 'action': [
+ 'python', '<@(_inputs)', '<@(_outputs)',
+ ],
+ }],
+ },
+ {
+ 'target_name': 'exclude_with_rule',
+ 'type': 'none',
+ 'msvs_cygwin_shell': 0,
+ 'sources': [
+ 'bad.idl',
+ ],
+ 'rules': [{
+ 'rule_name': 'copy_rule',
+ 'extension': 'idl',
+ 'inputs': [
+ 'copy-file.py',
+ ],
+ 'outputs': [
+ '<(INTERMEDIATE_DIR)/<(RULE_INPUT_ROOT).idl',
+ ],
+ 'action': [
+ 'python', '<@(_inputs)', '<(RULE_INPUT_PATH)', '<@(_outputs)',
+ ],
+ }],
+ },
+ {
+ 'target_name': 'program',
+ 'type': 'executable',
+ 'sources': [
+ 'program.cc',
+ ],
+ 'dependencies': [
+ 'exclude_with_action',
+ 'exclude_with_rule',
+ ],
+ },
+ ],
+}
diff --git a/chromium/tools/gyp/test/win/linker-flags/force-symbol-reference.gyp b/chromium/tools/gyp/test/win/linker-flags/force-symbol-reference.gyp
new file mode 100644
index 00000000000..d6d02a6848c
--- /dev/null
+++ b/chromium/tools/gyp/test/win/linker-flags/force-symbol-reference.gyp
@@ -0,0 +1,39 @@
+# Copyright (c) 2013 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'test_force_reference_lib',
+ 'type': 'static_library',
+ 'sources': ['x.cc', 'y.cc'],
+ },
+ {
+ 'target_name': 'test_force_reference',
+ 'type': 'executable',
+ # Turn on debug info to get symbols in disasm for the test code, and
+ # turn on opt:ref to drop unused symbols to make sure we wouldn't
+ # otherwise have the symbols.
+ 'msvs_settings': {
+ 'VCCLCompilerTool': {
+ 'DebugInformationFormat': '3',
+ },
+ 'VCLinkerTool': {
+ 'GenerateDebugInformation': 'true',
+ 'AdditionalOptions': [
+ '/OPT:REF',
+ ],
+ 'ForceSymbolReferences': [
+ '?x@@YAHXZ',
+ '?y@@YAHXZ',
+ ],
+ },
+ },
+ 'sources': ['hello.cc'],
+ 'dependencies': [
+ 'test_force_reference_lib',
+ ],
+ },
+ ]
+}
diff --git a/chromium/tools/gyp/test/win/linker-flags/generate-manifest.gyp b/chromium/tools/gyp/test/win/linker-flags/generate-manifest.gyp
index 41f888fafb5..34a68d1a489 100644
--- a/chromium/tools/gyp/test/win/linker-flags/generate-manifest.gyp
+++ b/chromium/tools/gyp/test/win/linker-flags/generate-manifest.gyp
@@ -152,5 +152,15 @@
},
},
},
+ {
+ 'target_name': 'test_generate_manifest_default_embed_default',
+ 'type': 'executable',
+ 'sources': ['hello.cc'],
+ 'msvs_settings': {
+ 'VCLinkerTool': {
+ 'EnableUAC': 'true',
+ },
+ },
+ },
]
}
diff --git a/chromium/tools/gyp/test/win/linker-flags/link-ordering.gyp b/chromium/tools/gyp/test/win/linker-flags/link-ordering.gyp
new file mode 100644
index 00000000000..66f44309d13
--- /dev/null
+++ b/chromium/tools/gyp/test/win/linker-flags/link-ordering.gyp
@@ -0,0 +1,95 @@
+# Copyright (c) 2013 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'test_ordering_exe',
+ 'type': 'executable',
+ # These are so the names of the functions appear in the disassembly.
+ 'msvs_settings': {
+ 'VCCLCompilerTool': {
+ 'DebugInformationFormat': '3',
+ 'Optimization': '2',
+ },
+ 'VCLinkerTool': {
+ 'GenerateDebugInformation': 'true',
+ 'LinkIncremental': '1',
+ 'GenerateManifest': 'false',
+ # Minimize the disassembly to just our code.
+ 'AdditionalOptions': [
+ '/NODEFAULTLIB',
+ ],
+ },
+ },
+ 'sources': [
+ # Explicitly sorted the same way as the disassembly in the test .py.
+ 'main-crt.c',
+ 'z.cc',
+ 'x.cc',
+ 'y.cc',
+ 'hello.cc',
+ ],
+ },
+
+ {
+ 'target_name': 'test_ordering_subdirs',
+ 'type': 'executable',
+ # These are so the names of the functions appear in the disassembly.
+ 'msvs_settings': {
+ 'VCCLCompilerTool': {
+ 'DebugInformationFormat': '3',
+ 'Optimization': '2',
+ },
+ 'VCLinkerTool': {
+ 'GenerateDebugInformation': 'true',
+ 'LinkIncremental': '1',
+ 'GenerateManifest': 'false',
+ # Minimize the disassembly to just our code.
+ 'AdditionalOptions': [
+ '/NODEFAULTLIB',
+ ],
+ },
+ },
+ 'sources': [
+ # Explicitly sorted the same way as the disassembly in the test .py.
+ 'main-crt.c',
+ 'hello.cc',
+ 'b/y.cc',
+ 'a/z.cc',
+ ],
+ },
+
+
+ {
+ 'target_name': 'test_ordering_subdirs_mixed',
+ 'type': 'executable',
+ # These are so the names of the functions appear in the disassembly.
+ 'msvs_settings': {
+ 'VCCLCompilerTool': {
+ 'DebugInformationFormat': '3',
+ 'Optimization': '2',
+ },
+ 'VCLinkerTool': {
+ 'GenerateDebugInformation': 'true',
+ 'LinkIncremental': '1',
+ 'GenerateManifest': 'false',
+ # Minimize the disassembly to just our code.
+ 'AdditionalOptions': [
+ '/NODEFAULTLIB',
+ ],
+ },
+ },
+ 'sources': [
+ # Explicitly sorted the same way as the disassembly in the test .py.
+ 'main-crt.c',
+ 'a/x.cc',
+ 'hello.cc',
+ 'a/z.cc',
+ 'y.cc',
+ ],
+ },
+
+ ]
+}
diff --git a/chromium/tools/gyp/test/win/linker-flags/pdb-output.gyp b/chromium/tools/gyp/test/win/linker-flags/pdb-output.gyp
new file mode 100644
index 00000000000..21d3cd76f3e
--- /dev/null
+++ b/chromium/tools/gyp/test/win/linker-flags/pdb-output.gyp
@@ -0,0 +1,36 @@
+# Copyright (c) 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'test_pdb_output_exe',
+ 'type': 'executable',
+ 'sources': ['hello.cc'],
+ 'msvs_settings': {
+ 'VCCLCompilerTool': {
+ 'DebugInformationFormat': '3'
+ },
+ 'VCLinkerTool': {
+ 'GenerateDebugInformation': 'true',
+ 'ProgramDatabaseFile': 'output_exe.pdb',
+ },
+ },
+ },
+ {
+ 'target_name': 'test_pdb_output_dll',
+ 'type': 'shared_library',
+ 'sources': ['hello.cc'],
+ 'msvs_settings': {
+ 'VCCLCompilerTool': {
+ 'DebugInformationFormat': '3'
+ },
+ 'VCLinkerTool': {
+ 'GenerateDebugInformation': 'true',
+ 'ProgramDatabaseFile': 'output_dll.pdb',
+ },
+ },
+ },
+ ]
+}
diff --git a/chromium/tools/gyp/test/win/linker-flags/pgo.gyp b/chromium/tools/gyp/test/win/linker-flags/pgo.gyp
index 9c5d4768839..da32639973c 100644
--- a/chromium/tools/gyp/test/win/linker-flags/pgo.gyp
+++ b/chromium/tools/gyp/test/win/linker-flags/pgo.gyp
@@ -35,7 +35,7 @@
'VCLinkerTool': {
'ProfileGuidedDatabase': '$(OutDir)\\<(pgd_basename).pgd',
'TargetMachine': '1', # x86 - 32
- 'SubSystem': '1', # /SUBSYSTEM:CONSOLE
+ 'SubSystem': '1', # /SUBSYSTEM:CONSOLE
# Tell ninja generator not to pass /ManifestFile:<filename> option
# to the linker, because it causes LNK1268 error in PGO biuld.
'GenerateManifest': 'false',
diff --git a/chromium/tools/gyp/test/win/linker-flags/program-database.gyp b/chromium/tools/gyp/test/win/linker-flags/program-database.gyp
index b822a8be40e..6e60ac0dc99 100644
--- a/chromium/tools/gyp/test/win/linker-flags/program-database.gyp
+++ b/chromium/tools/gyp/test/win/linker-flags/program-database.gyp
@@ -4,9 +4,10 @@
{
'targets': [
- # Verify that 'ProgramDataBase' option correctly makes it to LINK step in Ninja
+ # Verify that 'ProgramDatabaseFile' option correctly makes it to LINK
+ # step in Ninja.
{
- # Verify that VC macros and windows paths work correctly
+ # Verify that VC macros and windows paths work correctly.
'target_name': 'test_pdb_outdir',
'type': 'executable',
'sources': ['hello.cc'],
@@ -21,7 +22,7 @@
},
},
{
- # Verify that GYP macros and POSIX paths work correctly
+ # Verify that GYP macros and POSIX paths work correctly.
'target_name': 'test_pdb_proddir',
'type': 'executable',
'sources': ['hello.cc'],
diff --git a/chromium/tools/gyp/test/win/linker-flags/safeseh.gyp b/chromium/tools/gyp/test/win/linker-flags/safeseh.gyp
new file mode 100644
index 00000000000..61036200519
--- /dev/null
+++ b/chromium/tools/gyp/test/win/linker-flags/safeseh.gyp
@@ -0,0 +1,47 @@
+# Copyright (c) 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'test_safeseh_default',
+ 'type': 'executable',
+ 'msvs_settings': {
+ },
+ 'sources': [
+ 'safeseh_hello.cc',
+ 'safeseh_zero.asm',
+ ],
+ },
+ {
+ 'target_name': 'test_safeseh_no',
+ 'type': 'executable',
+ 'msvs_settings': {
+ 'VCLinkerTool': {
+ 'ImageHasSafeExceptionHandlers': 'false',
+ },
+ },
+ 'sources': [
+ 'safeseh_hello.cc',
+ 'safeseh_zero.asm',
+ ],
+ },
+ {
+ 'target_name': 'test_safeseh_yes',
+ 'type': 'executable',
+ 'msvs_settings': {
+ 'VCLinkerTool': {
+ 'ImageHasSafeExceptionHandlers': 'true',
+ },
+ 'MASM': {
+ 'UseSafeExceptionHandlers': 'true',
+ },
+ },
+ 'sources': [
+ 'safeseh_hello.cc',
+ 'safeseh_zero.asm',
+ ],
+ },
+ ]
+}
diff --git a/chromium/tools/gyp/test/win/linker-flags/unsupported-manifest.gyp b/chromium/tools/gyp/test/win/linker-flags/unsupported-manifest.gyp
new file mode 100644
index 00000000000..5549e7cb9bd
--- /dev/null
+++ b/chromium/tools/gyp/test/win/linker-flags/unsupported-manifest.gyp
@@ -0,0 +1,13 @@
+# Copyright (c) 2013 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'test_unsupported',
+ 'type': 'executable',
+ 'sources': ['manifest-in-comment.cc'],
+ },
+ ],
+}
diff --git a/chromium/tools/gyp/test/win/linker-flags/warn-as-error.gyp b/chromium/tools/gyp/test/win/linker-flags/warn-as-error.gyp
index 600eb0c353f..83c67e9df1a 100644
--- a/chromium/tools/gyp/test/win/linker-flags/warn-as-error.gyp
+++ b/chromium/tools/gyp/test/win/linker-flags/warn-as-error.gyp
@@ -1,33 +1,33 @@
-# Copyright (c) 2013 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'targets': [
- {
- 'target_name': 'test_on',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'TreatLinkerWarningAsErrors': 'true',
- }
- },
- 'sources': ['link-warning.cc'],
- },
- {
- 'target_name': 'test_off',
- 'type': 'executable',
- 'msvs_settings': {
- 'VCLinkerTool': {
- 'TreatLinkerWarningAsErrors': 'false',
- }
- },
- 'sources': ['link-warning.cc'],
- },
- {
- 'target_name': 'test_default',
- 'type': 'executable',
- 'sources': ['link-warning.cc'],
- },
- ]
-}
+# Copyright (c) 2013 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'test_on',
+ 'type': 'executable',
+ 'msvs_settings': {
+ 'VCLinkerTool': {
+ 'TreatLinkerWarningAsErrors': 'true',
+ }
+ },
+ 'sources': ['link-warning.cc'],
+ },
+ {
+ 'target_name': 'test_off',
+ 'type': 'executable',
+ 'msvs_settings': {
+ 'VCLinkerTool': {
+ 'TreatLinkerWarningAsErrors': 'false',
+ }
+ },
+ 'sources': ['link-warning.cc'],
+ },
+ {
+ 'target_name': 'test_default',
+ 'type': 'executable',
+ 'sources': ['link-warning.cc'],
+ },
+ ]
+}
diff --git a/chromium/tools/gyp/test/win/ml-safeseh/ml-safeseh.gyp b/chromium/tools/gyp/test/win/ml-safeseh/ml-safeseh.gyp
new file mode 100644
index 00000000000..bf8618f8656
--- /dev/null
+++ b/chromium/tools/gyp/test/win/ml-safeseh/ml-safeseh.gyp
@@ -0,0 +1,24 @@
+# Copyright (c) 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'ml_safeseh',
+ 'type': 'executable',
+ 'sources': [
+ 'hello.cc',
+ 'a.asm',
+ ],
+ 'msvs_settings': {
+ 'VCLinkerTool': {
+ 'ImageHasSafeExceptionHandlers': 'true',
+ },
+ 'MASM': {
+ 'UseSafeExceptionHandlers': 'true',
+ },
+ },
+ },
+ ]
+}
diff --git a/chromium/tools/gyp/test/win/shard/shard.gyp b/chromium/tools/gyp/test/win/shard/shard.gyp
index 0635a75dde9..eac45fcff77 100644
--- a/chromium/tools/gyp/test/win/shard/shard.gyp
+++ b/chromium/tools/gyp/test/win/shard/shard.gyp
@@ -16,5 +16,16 @@
],
'product_dir': '<(PRODUCT_DIR)',
},
+ {
+ 'target_name': 'refs_to_shard',
+ 'type': 'executable',
+ 'dependencies': [
+ # Make sure references are correctly updated.
+ 'shard',
+ ],
+ 'sources': [
+ 'hello.cc',
+ ],
+ },
]
}
diff --git a/chromium/tools/gyp/test/win/shard/shard_ref.gyp b/chromium/tools/gyp/test/win/shard/shard_ref.gyp
new file mode 100644
index 00000000000..3ec8d76f991
--- /dev/null
+++ b/chromium/tools/gyp/test/win/shard/shard_ref.gyp
@@ -0,0 +1,41 @@
+# Copyright 2014 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'refs_to_shard_external_lib',
+ 'type': 'static_library',
+ 'dependencies': [
+ # Make sure references in other files are updated correctly.
+ 'shard.gyp:shard',
+ ],
+ 'sources': [
+ 'hello.cc',
+ ],
+ },
+ {
+ 'target_name': 'refs_to_shard_external_exe',
+ 'type': 'executable',
+ 'dependencies': [
+ # Make sure references in other files are updated correctly.
+ 'shard.gyp:shard',
+ ],
+ 'sources': [
+ 'hello.cc',
+ ],
+ },
+ {
+ 'target_name': 'refs_to_shard_external_dll',
+ 'type': 'shared_library',
+ 'dependencies': [
+ # Make sure references in other files are updated correctly.
+ 'shard.gyp:shard',
+ ],
+ 'sources': [
+ 'hello.cc',
+ ],
+ },
+ ]
+}
diff --git a/chromium/tools/gyp/test/win/vs-macros/containing-gyp.gyp b/chromium/tools/gyp/test/win/vs-macros/containing-gyp.gyp
index fa799a4e4e5..c07b639ff1c 100644
--- a/chromium/tools/gyp/test/win/vs-macros/containing-gyp.gyp
+++ b/chromium/tools/gyp/test/win/vs-macros/containing-gyp.gyp
@@ -16,7 +16,6 @@
'extension': 'S',
'inputs': [
'as.py',
- '$(InputPath)'
],
'outputs': [
'$(IntDir)/$(InputName).obj',
diff --git a/chromium/tools/gyp/test/win/vs-macros/input-output-macros.gyp b/chromium/tools/gyp/test/win/vs-macros/input-output-macros.gyp
index b7a3c1e3bde..b4520f8cb8d 100644
--- a/chromium/tools/gyp/test/win/vs-macros/input-output-macros.gyp
+++ b/chromium/tools/gyp/test/win/vs-macros/input-output-macros.gyp
@@ -13,7 +13,6 @@
'rule_name': 'generate_file',
'extension': 'blah',
'inputs': [
- '<(RULE_INPUT_PATH)',
'do_stuff.py',
],
'outputs': [
diff --git a/chromium/tools/gyp/test/win/win-tool/copies_readonly_files.gyp b/chromium/tools/gyp/test/win/win-tool/copies_readonly_files.gyp
new file mode 100644
index 00000000000..3cd7e69f1a2
--- /dev/null
+++ b/chromium/tools/gyp/test/win/win-tool/copies_readonly_files.gyp
@@ -0,0 +1,29 @@
+{
+ 'targets': [
+ {
+ 'target_name': 'foo',
+ 'type': 'none',
+ 'copies': [
+ {
+ 'destination': '<(PRODUCT_DIR)/dest',
+ 'files': [
+ 'read-only-file',
+ ],
+ },
+ ],
+ }, # target: foo
+
+ {
+ 'target_name': 'bar',
+ 'type': 'none',
+ 'copies': [
+ {
+ 'destination': '<(PRODUCT_DIR)/dest',
+ 'files': [
+ 'subdir/',
+ ],
+ },
+ ],
+ }, # target: bar
+ ],
+}
diff --git a/chromium/tools/gypv8sh.py b/chromium/tools/gypv8sh.py
index 918368cbbfc..b8bd4066ec2 100755
--- a/chromium/tools/gypv8sh.py
+++ b/chromium/tools/gypv8sh.py
@@ -5,10 +5,6 @@
"""This script is used by chrome_tests.gypi's js2webui action to maintain the
argument lists and to generate inlinable tests.
-
-Usage:
- python tools/gypv8sh.py v8_shell mock.js test_api.js js2webui.js \
- inputfile inputrelfile cxxoutfile jsoutfile
"""
import json
@@ -22,20 +18,28 @@ import shutil
def main ():
parser = optparse.OptionParser()
parser.set_usage(
- "%prog v8_shell mock.js axs_testing.js test_api.js js2webui.js "
+ "%prog v8_shell mock.js test_api.js js2webui.js "
"testtype inputfile inputrelfile cxxoutfile jsoutfile")
parser.add_option('-v', '--verbose', action='store_true')
parser.add_option('-n', '--impotent', action='store_true',
help="don't execute; just print (as if verbose)")
+ parser.add_option('--deps_js', action="store",
+ help=("Path to deps.js for dependency resolution, " +
+ "optional."))
(opts, args) = parser.parse_args()
- if len(args) != 10:
+ if len(args) != 9:
parser.error('all arguments are required.')
- (v8_shell, mock_js, axs_testing_js, test_api, js2webui, test_type,
+ (v8_shell, mock_js, test_api, js2webui, test_type,
inputfile, inputrelfile, cxxoutfile, jsoutfile) = args
- arguments = [js2webui, inputfile, inputrelfile, cxxoutfile, test_type]
- cmd = [v8_shell, '-e', "arguments=" + json.dumps(arguments), mock_js,
- axs_testing_js, test_api, js2webui]
+ cmd = [v8_shell]
+ icudatafile = os.path.join(os.path.dirname(v8_shell), 'icudtl.dat')
+ if os.path.exists(icudatafile):
+ cmd.extend(['--icu-data-file=%s' % icudatafile])
+ arguments = [js2webui, inputfile, inputrelfile, opts.deps_js,
+ cxxoutfile, test_type]
+ cmd.extend(['-e', "arguments=" + json.dumps(arguments), mock_js,
+ test_api, js2webui])
if opts.verbose or opts.impotent:
print cmd
if not opts.impotent:
@@ -45,6 +49,8 @@ def main ():
shutil.copyfile(inputfile, jsoutfile)
except Exception, ex:
if os.path.exists(cxxoutfile):
+ # The contents of the output file will include the error message.
+ print open(cxxoutfile).read()
os.remove(cxxoutfile)
if os.path.exists(jsoutfile):
os.remove(jsoutfile)
diff --git a/chromium/tools/idl_parser/idl_lexer.py b/chromium/tools/idl_parser/idl_lexer.py
index d7311df1ca6..9c320d6e3c8 100755
--- a/chromium/tools/idl_parser/idl_lexer.py
+++ b/chromium/tools/idl_parser/idl_lexer.py
@@ -67,6 +67,7 @@ class IDLLexer(object):
'attribute' : 'ATTRIBUTE',
'boolean' : 'BOOLEAN',
'byte' : 'BYTE',
+ 'ByteString' : 'BYTESTRING',
'callback' : 'CALLBACK',
'const' : 'CONST',
'creator' : 'CREATOR',
@@ -94,7 +95,9 @@ class IDLLexer(object):
'or' : 'OR',
'partial' : 'PARTIAL',
'readonly' : 'READONLY',
+ 'RegExp' : 'REGEXP',
'sequence' : 'SEQUENCE',
+ 'serializer' : 'SERIALIZER',
'setter': 'SETTER',
'short' : 'SHORT',
'static' : 'STATIC',
diff --git a/chromium/tools/idl_parser/idl_node.py b/chromium/tools/idl_parser/idl_node.py
index 83aefa52adc..e50fc4e1bae 100755
--- a/chromium/tools/idl_parser/idl_node.py
+++ b/chromium/tools/idl_parser/idl_node.py
@@ -201,7 +201,7 @@ class IDLNode(object):
child._parent = self
self._children.append(child)
continue
- raise RuntimeError('Adding child of type .\n' % type(child).__name__)
+ raise RuntimeError('Adding child of type %s.\n' % type(child).__name__)
#
diff --git a/chromium/tools/idl_parser/idl_parser.py b/chromium/tools/idl_parser/idl_parser.py
index 8a682ea688b..fabe2daa000 100755
--- a/chromium/tools/idl_parser/idl_parser.py
+++ b/chromium/tools/idl_parser/idl_parser.py
@@ -12,7 +12,7 @@
# on WebIDL.
#
# WebIDL, and WebIDL grammar can be found at:
-# http://dev.w3.org/2006/webapi/WebIDL/
+# http://heycam.github.io/webidl/
# PLY can be found at:
# http://www.dabeaz.com/ply/
#
@@ -144,7 +144,7 @@ def TokenTypeName(t):
# http://www.dabeaz.com/ply/
#
# The parser is based on the WebIDL standard. See:
-# http://www.w3.org/TR/WebIDL/#idl-grammar
+# http://heycam.github.io/webidl/#idl-grammar
#
# The various productions are annotated so that the WHOLE number greater than
# zero in the comment denotes the matching WebIDL grammar definition.
@@ -183,7 +183,7 @@ class IDLParser(object):
#
#The parser is based on the WebIDL standard. See:
-# http://www.w3.org/TR/WebIDL/#idl-grammar
+# http://heycam.github.io/webidl/#idl-grammar
#
# [1]
def p_Definitions(self, p):
@@ -193,7 +193,7 @@ class IDLParser(object):
p[2].AddChildren(p[1])
p[0] = ListFromConcat(p[2], p[3])
- # [2] Add INLINE definition
+ # [2]
def p_Definition(self, p):
"""Definition : CallbackOrInterface
| Partial
@@ -229,13 +229,13 @@ class IDLParser(object):
"""Interface : INTERFACE identifier Inheritance '{' InterfaceMembers '}' ';'"""
p[0] = self.BuildNamed('Interface', p, 2, ListFromConcat(p[3], p[5]))
- # [6] Error recovery for PARTIAL
+ # [6]
def p_Partial(self, p):
"""Partial : PARTIAL PartialDefinition"""
p[2].AddChildren(self.BuildTrue('Partial'))
p[0] = p[2]
- # [6.1] Error recovery for Enums
+ # [6.1] Error recovery for Partial
def p_PartialError(self, p):
"""Partial : PARTIAL error"""
p[0] = self.BuildError(p, 'Partial')
@@ -262,7 +262,7 @@ class IDLParser(object):
# [10]
def p_InterfaceMember(self, p):
"""InterfaceMember : Const
- | AttributeOrOperation"""
+ | AttributeOrOperationOrIterator"""
p[0] = p[1]
# [11]
@@ -353,47 +353,54 @@ class IDLParser(object):
# [21]
def p_EnumValueList(self, p):
- """EnumValueList : ExtendedAttributeList string EnumValues"""
+ """EnumValueList : ExtendedAttributeList string EnumValueListComma"""
enum = self.BuildNamed('EnumItem', p, 2, p[1])
p[0] = ListFromConcat(enum, p[3])
# [22]
- def p_EnumValues(self, p):
- """EnumValues : ',' ExtendedAttributeList string EnumValues
- |"""
+ def p_EnumValueListComma(self, p):
+ """EnumValueListComma : ',' EnumValueListString
+ |"""
if len(p) > 1:
- enum = self.BuildNamed('EnumItem', p, 3, p[2])
- p[0] = ListFromConcat(enum, p[4])
+ p[0] = p[2]
# [23]
+ def p_EnumValueListString(self, p):
+ """EnumValueListString : ExtendedAttributeList string EnumValueListComma
+ |"""
+ if len(p) > 1:
+ enum = self.BuildNamed('EnumItem', p, 2, p[1])
+ p[0] = ListFromConcat(enum, p[3])
+
+ # [24]
def p_CallbackRest(self, p):
"""CallbackRest : identifier '=' ReturnType '(' ArgumentList ')' ';'"""
arguments = self.BuildProduction('Arguments', p, 4, p[5])
p[0] = self.BuildNamed('Callback', p, 1, ListFromConcat(p[3], arguments))
- # [24]
+ # [25]
def p_Typedef(self, p):
"""Typedef : TYPEDEF ExtendedAttributeListNoComments Type identifier ';'"""
p[0] = self.BuildNamed('Typedef', p, 4, ListFromConcat(p[2], p[3]))
- # [24.1] Error recovery for Typedefs
+ # [25.1] Error recovery for Typedefs
def p_TypedefError(self, p):
"""Typedef : TYPEDEF error ';'"""
p[0] = self.BuildError(p, 'Typedef')
- # [25]
+ # [26]
def p_ImplementsStatement(self, p):
"""ImplementsStatement : identifier IMPLEMENTS identifier ';'"""
name = self.BuildAttribute('REFERENCE', p[3])
p[0] = self.BuildNamed('Implements', p, 1, name)
- # [26]
+ # [27]
def p_Const(self, p):
"""Const : CONST ConstType identifier '=' ConstValue ';'"""
value = self.BuildProduction('Value', p, 5, p[5])
p[0] = self.BuildNamed('Const', p, 3, ListFromConcat(p[2], value))
- # [27]
+ # [28]
def p_ConstValue(self, p):
"""ConstValue : BooleanLiteral
| FloatLiteral
@@ -405,20 +412,20 @@ class IDLParser(object):
else:
p[0] = p[1]
- # [27.1] Add definition for NULL
+ # [28.1] Add definition for NULL
def p_null(self, p):
"""null : NULL"""
p[0] = ListFromConcat(self.BuildAttribute('TYPE', 'NULL'),
self.BuildAttribute('NAME', 'NULL'))
- # [28]
+ # [29]
def p_BooleanLiteral(self, p):
"""BooleanLiteral : TRUE
| FALSE"""
value = self.BuildAttribute('VALUE', Boolean(p[1] == 'true'))
p[0] = ListFromConcat(self.BuildAttribute('TYPE', 'boolean'), value)
- # [29]
+ # [30]
def p_FloatLiteral(self, p):
"""FloatLiteral : float
| '-' INFINITY
@@ -431,69 +438,82 @@ class IDLParser(object):
p[0] = ListFromConcat(self.BuildAttribute('TYPE', 'float'),
self.BuildAttribute('VALUE', val))
- # [30]
- def p_AttributeOrOperation(self, p):
- """AttributeOrOperation : STRINGIFIER StringifierAttributeOrOperation
- | Attribute
- | Operation"""
- if len(p) > 2:
- p[0] = p[2]
- else:
- p[0] = p[1]
+ # [31] Removed unsupported: Serializer, Stringifier
+ def p_AttributeOrOperationOrIterator(self, p):
+ """AttributeOrOperationOrIterator : StaticMember
+ | Attribute
+ | OperationOrIterator"""
+ p[0] = p[1]
- # [31]
- def p_StringifierAttributeOrOperation(self, p):
- """StringifierAttributeOrOperation : Attribute
- | OperationRest
- | ';'"""
- if p[1] == ';':
- p[0] = self.BuildAttribute('STRINGIFIER', Boolean(True))
+ # [32-37] NOT IMPLEMENTED (Serializer)
+ # [38-39] FIXME: NOT IMPLEMENTED (Stringifier) http://crbug.com/306606
+
+ # [40]
+ def p_StaticMember(self, p):
+ """StaticMember : STATIC StaticMemberRest"""
+ p[2].AddChildren(self.BuildTrue('STATIC'))
+ p[0] = p[2]
+
+ # [41]
+ def p_StaticMemberRest(self, p):
+ """StaticMemberRest : AttributeRest
+ | ReturnType OperationRest"""
+ if len(p) == 2:
+ p[0] = p[1]
else:
- p[0] = ListFromConcat(self.BuildAttribute('STRINGIFIER', p[1]), p[1])
+ p[2].AddChildren(p[1])
+ p[0] = p[2]
- # [32]
+ # [42]
def p_Attribute(self, p):
- """Attribute : Inherit ReadOnly ATTRIBUTE Type identifier ';'"""
- p[0] = self.BuildNamed('Attribute', p, 5,
- ListFromConcat(p[1], p[2], p[4]))
+ """Attribute : Inherit AttributeRest"""
+ p[2].AddChildren(ListFromConcat(p[1]))
+ p[0] = p[2]
- # [33]
+ # [43]
+ def p_AttributeRest(self, p):
+ """AttributeRest : ReadOnly ATTRIBUTE Type identifier ';'"""
+ p[0] = self.BuildNamed('Attribute', p, 4,
+ ListFromConcat(p[1], p[3]))
+
+ # [44]
def p_Inherit(self, p):
"""Inherit : INHERIT
|"""
if len(p) > 1:
p[0] = self.BuildTrue('INHERIT')
- # [34]
+ # [45]
def p_ReadOnly(self, p):
"""ReadOnly : READONLY
- |"""
+ |"""
if len(p) > 1:
p[0] = self.BuildTrue('READONLY')
- # [35]
- def p_Operation(self, p):
- """Operation : Qualifiers OperationRest"""
- p[2].AddChildren(p[1])
- p[0] = p[2]
-
- # [36]
- def p_Qualifiers(self, p):
- """Qualifiers : STATIC
- | Specials"""
- if p[1] == 'static':
- p[0] = self.BuildTrue('STATIC')
+ # [46]
+ def p_OperationOrIterator(self, p):
+ """OperationOrIterator : ReturnType OperationOrIteratorRest
+ | SpecialOperation"""
+ if len(p) == 3:
+ p[2].AddChildren(p[1])
+ p[0] = p[2]
else:
p[0] = p[1]
- # [37]
+ # [47]
+ def p_SpecialOperation(self, p):
+ """SpecialOperation : Special Specials ReturnType OperationRest"""
+ p[4].AddChildren(ListFromConcat(p[1], p[2], p[3]))
+ p[0] = p[4]
+
+ # [48]
def p_Specials(self, p):
"""Specials : Special Specials
| """
if len(p) > 1:
p[0] = ListFromConcat(p[1], p[2])
- # [38]
+ # [49]
def p_Special(self, p):
"""Special : GETTER
| SETTER
@@ -502,14 +522,20 @@ class IDLParser(object):
| LEGACYCALLER"""
p[0] = self.BuildTrue(p[1].upper())
+ # [50] Removed unsupported: IteratorRest
+ def p_OperationOrIteratorRest(self, p):
+ """OperationOrIteratorRest : OperationRest"""
+ p[0] = p[1]
+
+ # [51-53] NOT IMPLEMENTED (IteratorRest)
- # [39]
+ # [54]
def p_OperationRest(self, p):
- """OperationRest : ReturnType OptionalIdentifier '(' ArgumentList ')' ';'"""
- arguments = self.BuildProduction('Arguments', p, 3, p[4])
- p[0] = self.BuildNamed('Operation', p, 2, ListFromConcat(p[1], arguments))
+ """OperationRest : OptionalIdentifier '(' ArgumentList ')' ';'"""
+ arguments = self.BuildProduction('Arguments', p, 2, p[3])
+ p[0] = self.BuildNamed('Operation', p, 1, arguments)
- # [40]
+ # [55]
def p_OptionalIdentifier(self, p):
"""OptionalIdentifier : identifier
|"""
@@ -518,33 +544,32 @@ class IDLParser(object):
else:
p[0] = '_unnamed_'
- # [41]
+ # [56]
def p_ArgumentList(self, p):
"""ArgumentList : Argument Arguments
|"""
if len(p) > 1:
p[0] = ListFromConcat(p[1], p[2])
- # [41.1] ArgumentList error recovery
+ # [56.1] ArgumentList error recovery
def p_ArgumentListError(self, p):
"""ArgumentList : error """
p[0] = self.BuildError(p, 'ArgumentList')
- # [42]
+ # [57]
def p_Arguments(self, p):
"""Arguments : ',' Argument Arguments
|"""
if len(p) > 1:
p[0] = ListFromConcat(p[2], p[3])
- # [43]
+ # [58]
def p_Argument(self, p):
"""Argument : ExtendedAttributeList OptionalOrRequiredArgument"""
p[2].AddChildren(p[1])
p[0] = p[2]
-
- # [44]
+ # [59]
def p_OptionalOrRequiredArgument(self, p):
"""OptionalOrRequiredArgument : OPTIONAL Type ArgumentName Default
| Type Ellipsis ArgumentName"""
@@ -555,13 +580,13 @@ class IDLParser(object):
arg = self.BuildNamed('Argument', p, 3, ListFromConcat(p[1], p[2]))
p[0] = arg
- # [45]
+ # [60]
def p_ArgumentName(self, p):
"""ArgumentName : ArgumentNameKeyword
| identifier"""
p[0] = p[1]
- # [46]
+ # [61]
def p_Ellipsis(self, p):
"""Ellipsis : ELLIPSIS
|"""
@@ -569,23 +594,23 @@ class IDLParser(object):
p[0] = self.BuildNamed('Argument', p, 1)
p[0].AddChildren(self.BuildTrue('ELLIPSIS'))
- # [47]
+ # [62]
def p_ExceptionMember(self, p):
"""ExceptionMember : Const
| ExceptionField"""
p[0] = p[1]
- # [48]
+ # [63]
def p_ExceptionField(self, p):
"""ExceptionField : Type identifier ';'"""
p[0] = self.BuildNamed('ExceptionField', p, 2, p[1])
- # [48.1] Error recovery for ExceptionMembers
+ # [63.1] Error recovery for ExceptionMembers
def p_ExceptionFieldError(self, p):
"""ExceptionField : error"""
p[0] = self.BuildError(p, 'ExceptionField')
- # [49] No comment version for mid statement attributes.
+ # [64] No comment version for mid statement attributes.
def p_ExtendedAttributeListNoComments(self, p):
"""ExtendedAttributeListNoComments : '[' ExtendedAttribute ExtendedAttributes ']'
| """
@@ -593,7 +618,7 @@ class IDLParser(object):
items = ListFromConcat(p[2], p[3])
p[0] = self.BuildProduction('ExtAttributes', p, 1, items)
- # [49.1] Add optional comment field for start of statements.
+ # [64.1] Add optional comment field for start of statements.
def p_ExtendedAttributeList(self, p):
"""ExtendedAttributeList : Comments '[' ExtendedAttribute ExtendedAttributes ']'
| Comments """
@@ -604,7 +629,7 @@ class IDLParser(object):
else:
p[0] = p[1]
- # [50]
+ # [65]
def p_ExtendedAttributes(self, p):
"""ExtendedAttributes : ',' ExtendedAttribute ExtendedAttributes
|"""
@@ -616,8 +641,8 @@ class IDLParser(object):
# [ identifier = identifier ]
# [ identifier ( ArgumentList )]
# [ identifier = identifier ( ArgumentList )]
- # [51] map directly to 74-77
- # [52-54, 56] are unsupported
+ # [66] map directly to [91-93, 95]
+ # [67-69, 71] are unsupported
def p_ExtendedAttribute(self, p):
"""ExtendedAttribute : ExtendedAttributeNoArgs
| ExtendedAttributeArgList
@@ -625,7 +650,7 @@ class IDLParser(object):
| ExtendedAttributeNamedArgList"""
p[0] = p[1]
- # [55]
+ # [70]
def p_ArgumentNameKeyword(self, p):
"""ArgumentNameKeyword : ATTRIBUTE
| CALLBACK
@@ -640,6 +665,7 @@ class IDLParser(object):
| INHERIT
| LEGACYCALLER
| PARTIAL
+ | SERIALIZER
| SETTER
| STATIC
| STRINGIFIER
@@ -647,7 +673,7 @@ class IDLParser(object):
| UNRESTRICTED"""
p[0] = p[1]
- # [57]
+ # [72]
def p_Type(self, p):
"""Type : SingleType
| UnionType TypeSuffix"""
@@ -656,7 +682,7 @@ class IDLParser(object):
else:
p[0] = self.BuildProduction('Type', p, 1, ListFromConcat(p[1], p[2]))
- # [58]
+ # [73]
def p_SingleType(self, p):
"""SingleType : NonAnyType
| ANY TypeSuffixStartingWithArray"""
@@ -665,21 +691,24 @@ class IDLParser(object):
else:
p[0] = ListFromConcat(self.BuildProduction('Any', p, 1), p[2])
- # [59]
+ # [74]
def p_UnionType(self, p):
"""UnionType : '(' UnionMemberType OR UnionMemberType UnionMemberTypes ')'"""
- # [60]
+ # [75]
def p_UnionMemberType(self, p):
"""UnionMemberType : NonAnyType
| UnionType TypeSuffix
| ANY '[' ']' TypeSuffix"""
- # [61]
+ # [76]
def p_UnionMemberTypes(self, p):
"""UnionMemberTypes : OR UnionMemberType UnionMemberTypes
|"""
- # [62] Moved DATE, DOMSTRING, OBJECT to PrimitiveType
+ # [77] Moved BYTESTRING, DOMSTRING, OBJECT, DATE, REGEXP to PrimitiveType
+ # Moving all built-in types into PrimitiveType makes it easier to
+ # differentiate between them and 'identifier', since p[1] would be a string in
+ # both cases.
def p_NonAnyType(self, p):
"""NonAnyType : PrimitiveType TypeSuffix
| identifier TypeSuffix
@@ -695,7 +724,7 @@ class IDLParser(object):
p[0] = self.BuildProduction('Sequence', p, 1, ListFromConcat(p[3], p[5]))
- # [63]
+ # [78]
def p_ConstType(self, p):
"""ConstType : PrimitiveType Null
| identifier Null"""
@@ -706,23 +735,25 @@ class IDLParser(object):
p[0] = p[1]
- # [64]
+ # [79] Added BYTESTRING, DOMSTRING, OBJECT, DATE, REGEXP
def p_PrimitiveType(self, p):
"""PrimitiveType : UnsignedIntegerType
| UnrestrictedFloatType
| BOOLEAN
| BYTE
| OCTET
+ | BYTESTRING
| DOMSTRING
+ | OBJECT
| DATE
- | OBJECT"""
+ | REGEXP"""
if type(p[1]) == str:
p[0] = self.BuildNamed('PrimitiveType', p, 1)
else:
p[0] = p[1]
- # [65]
+ # [80]
def p_UnrestrictedFloatType(self, p):
"""UnrestrictedFloatType : UNRESTRICTED FloatType
| FloatType"""
@@ -734,13 +765,13 @@ class IDLParser(object):
p[0] = typeref
- # [66]
+ # [81]
def p_FloatType(self, p):
"""FloatType : FLOAT
| DOUBLE"""
p[0] = p[1]
- # [67]
+ # [82]
def p_UnsignedIntegerType(self, p):
"""UnsignedIntegerType : UNSIGNED IntegerType
| IntegerType"""
@@ -749,7 +780,7 @@ class IDLParser(object):
else:
p[0] = 'unsigned ' + p[2]
- # [68]
+ # [83]
def p_IntegerType(self, p):
"""IntegerType : SHORT
| LONG OptionalLong"""
@@ -758,7 +789,7 @@ class IDLParser(object):
else:
p[0] = p[1] + p[2]
- # [69]
+ # [84]
def p_OptionalLong(self, p):
"""OptionalLong : LONG
| """
@@ -768,7 +799,7 @@ class IDLParser(object):
p[0] = ''
- # [70] Add support for sized array
+ # [85] Add support for sized array
def p_TypeSuffix(self, p):
"""TypeSuffix : '[' integer ']' TypeSuffix
| '[' ']' TypeSuffix
@@ -784,21 +815,21 @@ class IDLParser(object):
p[0] = ListFromConcat(self.BuildTrue('NULLABLE'), p[2])
- # [71]
+ # [86]
def p_TypeSuffixStartingWithArray(self, p):
"""TypeSuffixStartingWithArray : '[' ']' TypeSuffix
| """
if len(p) > 1:
p[0] = self.BuildProduction('Array', p, 0, p[3])
- # [72]
+ # [87]
def p_Null(self, p):
"""Null : '?'
|"""
if len(p) > 1:
p[0] = self.BuildTrue('NULLABLE')
- # [73]
+ # [88]
def p_ReturnType(self, p):
"""ReturnType : Type
| VOID"""
@@ -808,30 +839,36 @@ class IDLParser(object):
else:
p[0] = p[1]
- # [74]
+ # [89-90] NOT IMPLEMENTED (IdentifierList)
+
+ # [91]
def p_ExtendedAttributeNoArgs(self, p):
"""ExtendedAttributeNoArgs : identifier"""
p[0] = self.BuildNamed('ExtAttribute', p, 1)
- # [75]
+ # [92]
def p_ExtendedAttributeArgList(self, p):
"""ExtendedAttributeArgList : identifier '(' ArgumentList ')'"""
arguments = self.BuildProduction('Arguments', p, 2, p[3])
p[0] = self.BuildNamed('ExtAttribute', p, 1, arguments)
- # [76]
+ # [93]
def p_ExtendedAttributeIdent(self, p):
"""ExtendedAttributeIdent : identifier '=' identifier"""
value = self.BuildAttribute('VALUE', p[3])
p[0] = self.BuildNamed('ExtAttribute', p, 1, value)
- # [77]
+ # [94] NOT IMPLEMENTED (ExtendedAttributeIdentList)
+
+ # [95]
def p_ExtendedAttributeNamedArgList(self, p):
"""ExtendedAttributeNamedArgList : identifier '=' identifier '(' ArgumentList ')'"""
args = self.BuildProduction('Arguments', p, 4, p[5])
value = self.BuildNamed('Call', p, 3, args)
p[0] = self.BuildNamed('ExtAttribute', p, 1, value)
+ # [96] NOT IMPLEMENTED (ExtendedAttributeTypePair)
+
#
# Parser Errors
#
diff --git a/chromium/tools/idl_parser/idl_ppapi_lexer.py b/chromium/tools/idl_parser/idl_ppapi_lexer.py
index 9e834863c8d..3d5d39e0584 100755
--- a/chromium/tools/idl_parser/idl_ppapi_lexer.py
+++ b/chromium/tools/idl_parser/idl_ppapi_lexer.py
@@ -58,8 +58,9 @@ class IDLPPAPILexer(IDLLexer):
self._AddKeywords(['mem_t', 'str_t', 'cstr_t', 'interface_t'])
# Remove JS types
- self._DelKeywords(['boolean', 'byte', 'Date', 'DOMString', 'double',
- 'float', 'long', 'object', 'octet', 'short', 'unsigned'])
+ self._DelKeywords(['boolean', 'byte', 'ByteString', 'Date', 'DOMString',
+ 'double', 'float', 'long', 'object', 'octet', 'RegExp',
+ 'short', 'unsigned'])
# If run by itself, attempt to build the lexer
diff --git a/chromium/tools/idl_parser/idl_ppapi_parser.py b/chromium/tools/idl_parser/idl_ppapi_parser.py
index c02e42c818f..639a8415ba6 100755
--- a/chromium/tools/idl_parser/idl_ppapi_parser.py
+++ b/chromium/tools/idl_parser/idl_ppapi_parser.py
@@ -12,7 +12,7 @@
# on WebIDL.
#
# WebIDL, and WebIDL grammar can be found at:
-# http://dev.w3.org/2006/webapi/WebIDL/
+# http://heycam.github.io/webidl/
# PLY can be found at:
# http://www.dabeaz.com/ply/
#
@@ -50,7 +50,7 @@ class IDLPPAPIParser(IDLParser):
#
#The parser is based on the WebIDL standard. See:
-# http://www.w3.org/TR/WebIDL/#idl-grammar
+# http://heycam.github.io/webidl/#idl-grammar
#
# [1]
def p_Definitions(self, p):
diff --git a/chromium/tools/idl_parser/test_lexer/keywords.in b/chromium/tools/idl_parser/test_lexer/keywords.in
index 11baff907f3..16dc32fc151 100644
--- a/chromium/tools/idl_parser/test_lexer/keywords.in
+++ b/chromium/tools/idl_parser/test_lexer/keywords.in
@@ -1,6 +1,7 @@
ANY any
ATTRIBUTE attribute
BOOLEAN boolean
+BYTESTRING ByteString
BYTE byte
CALLBACK callback
CONST const
@@ -26,6 +27,8 @@ OPTIONAL optional
OR or
PARTIAL partial
READONLY readonly
+REGEXP RegExp
+SERIALIZER serializer
SETTER setter
SHORT short
STATIC static
diff --git a/chromium/tools/idl_parser/test_parser/enum_web.idl b/chromium/tools/idl_parser/test_parser/enum_web.idl
index 233410c5d5d..e3107c0ae41 100644
--- a/chromium/tools/idl_parser/test_parser/enum_web.idl
+++ b/chromium/tools/idl_parser/test_parser/enum_web.idl
@@ -67,6 +67,18 @@ enum MealType2 {
"other"
};
+/* TREE
+ *Enum(TrailingComma)
+ * EnumItem(rice)
+ * EnumItem(noodles)
+ * EnumItem(other)
+*/
+enum TrailingComma {
+ "rice",
+ "noodles",
+ "other",
+};
+
/* BUILD Error(Unexpected string "noodles" after string "rice".) */
/* ERROR Unexpected string "noodles" after string "rice". */
enum MissingComma {
@@ -75,14 +87,6 @@ enum MissingComma {
"other"
};
-/* BUILD Error(Trailing comma in block.) */
-/* ERROR Trailing comma in block. */
-enum TrailingComma {
- "rice",
- "noodles",
- "other",
-};
-
/* BUILD Error(Unexpected "," after ",".) */
/* ERROR Unexpected "," after ",". */
enum ExtraComma {
diff --git a/chromium/tools/idl_parser/test_parser/interface_web.idl b/chromium/tools/idl_parser/test_parser/interface_web.idl
index a8a4135e5c1..accbf35ec92 100644
--- a/chromium/tools/idl_parser/test_parser/interface_web.idl
+++ b/chromium/tools/idl_parser/test_parser/interface_web.idl
@@ -76,13 +76,23 @@ interface MyIFaceBig {
* Attribute(readOnlyString)
* Type()
* PrimitiveType(DOMString)
+ * Attribute(staticString)
+ * Type()
+ * PrimitiveType(DOMString)
* Operation(myFunction)
+ * Arguments()
+ * Argument(myLong)
+ * Type()
+ * PrimitiveType(long long)
* Type()
* PrimitiveType(void)
+ * Operation(staticFunction)
* Arguments()
* Argument(myLong)
* Type()
* PrimitiveType(long long)
+ * Type()
+ * PrimitiveType(void)
*/
interface MyIFaceBig2 {
const DOMString? nullValue = null;
@@ -90,35 +100,37 @@ interface MyIFaceBig2 {
const long long longValue2 = 123;
attribute DOMString myString;
readonly attribute DOMString readOnlyString;
+ static attribute DOMString staticString;
void myFunction(long long myLong);
+ static void staticFunction(long long myLong);
};
/* TREE
*Interface(MyIFaceSpecials)
* Operation(set)
- * Type()
- * PrimitiveType(void)
* Arguments()
* Argument(property)
* Type()
* PrimitiveType(DOMString)
- * Operation(_unnamed_)
* Type()
- * PrimitiveType(double)
+ * PrimitiveType(void)
+ * Operation(_unnamed_)
* Arguments()
* Argument(property)
* Type()
* PrimitiveType(DOMString)
- * Operation(GetFiveSix)
* Type()
- * PrimitiveType(long long)
- * Array(5)
- * Array(6)
+ * PrimitiveType(double)
+ * Operation(GetFiveSix)
* Arguments()
* Argument(arg)
* Type()
* Typeref(SomeType)
+ * Type()
+ * PrimitiveType(long long)
+ * Array(5)
+ * Array(6)
*/
interface MyIFaceSpecials {
setter creator void set(DOMString property);
diff --git a/chromium/tools/imagediff/DEPS b/chromium/tools/imagediff/DEPS
deleted file mode 100644
index 170e24fb81f..00000000000
--- a/chromium/tools/imagediff/DEPS
+++ /dev/null
@@ -1,4 +0,0 @@
-include_rules = [
- "+third_party/libpng/png.h",
- "+third_party/zlib/zlib.h",
-]
diff --git a/chromium/tools/imagediff/image_diff.cc b/chromium/tools/imagediff/image_diff.cc
deleted file mode 100644
index 604f27e88df..00000000000
--- a/chromium/tools/imagediff/image_diff.cc
+++ /dev/null
@@ -1,449 +0,0 @@
-// Copyright (c) 2011 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.
-
-// This file input format is based loosely on
-// Tools/DumpRenderTree/ImageDiff.m
-
-// The exact format of this tool's output to stdout is important, to match
-// what the run-webkit-tests script expects.
-
-#include <algorithm>
-#include <iostream>
-#include <string>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/command_line.h"
-#include "base/containers/hash_tables.h"
-#include "base/file_util.h"
-#include "base/files/file_path.h"
-#include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/process/memory.h"
-#include "base/safe_numerics.h"
-#include "base/strings/string_util.h"
-#include "base/strings/utf_string_conversions.h"
-#include "tools/imagediff/image_diff_png.h"
-
-#if defined(OS_WIN)
-#include "windows.h"
-#endif
-
-// Causes the app to remain open, waiting for pairs of filenames on stdin.
-// The caller is then responsible for terminating this app.
-static const char kOptionPollStdin[] = "use-stdin";
-// Causes the app to additionally calculate a diff of the color histograms
-// (which is resistant to shifts in layout).
-static const char kOptionCompareHistograms[] = "histogram";
-// Causes the app to output an image that visualizes the difference.
-static const char kOptionGenerateDiff[] = "diff";
-
-// Return codes used by this utility.
-static const int kStatusSame = 0;
-static const int kStatusDifferent = 1;
-static const int kStatusError = 2;
-
-// Color codes.
-static const uint32 RGBA_RED = 0x000000ff;
-static const uint32 RGBA_ALPHA = 0xff000000;
-
-class Image {
- public:
- Image() : w_(0), h_(0) {
- }
-
- Image(const Image& image)
- : w_(image.w_),
- h_(image.h_),
- data_(image.data_) {
- }
-
- bool has_image() const {
- return w_ > 0 && h_ > 0;
- }
-
- int w() const {
- return w_;
- }
-
- int h() const {
- return h_;
- }
-
- const unsigned char* data() const {
- return &data_.front();
- }
-
- // Creates the image from stdin with the given data length. On success, it
- // will return true. On failure, no other methods should be accessed.
- bool CreateFromStdin(size_t byte_length) {
- if (byte_length == 0)
- return false;
-
- scoped_ptr<unsigned char[]> source(new unsigned char[byte_length]);
- if (fread(source.get(), 1, byte_length, stdin) != byte_length)
- return false;
-
- if (!image_diff_png::DecodePNG(source.get(), byte_length,
- &data_, &w_, &h_)) {
- Clear();
- return false;
- }
- return true;
- }
-
- // Creates the image from the given filename on disk, and returns true on
- // success.
- bool CreateFromFilename(const base::FilePath& path) {
- FILE* f = base::OpenFile(path, "rb");
- if (!f)
- return false;
-
- std::vector<unsigned char> compressed;
- const int buf_size = 1024;
- unsigned char buf[buf_size];
- size_t num_read = 0;
- while ((num_read = fread(buf, 1, buf_size, f)) > 0) {
- compressed.insert(compressed.end(), buf, buf + num_read);
- }
-
- base::CloseFile(f);
-
- if (!image_diff_png::DecodePNG(&compressed[0], compressed.size(),
- &data_, &w_, &h_)) {
- Clear();
- return false;
- }
- return true;
- }
-
- void Clear() {
- w_ = h_ = 0;
- data_.clear();
- }
-
- // Returns the RGBA value of the pixel at the given location
- uint32 pixel_at(int x, int y) const {
- DCHECK(x >= 0 && x < w_);
- DCHECK(y >= 0 && y < h_);
- return *reinterpret_cast<const uint32*>(&(data_[(y * w_ + x) * 4]));
- }
-
- void set_pixel_at(int x, int y, uint32 color) const {
- DCHECK(x >= 0 && x < w_);
- DCHECK(y >= 0 && y < h_);
- void* addr = &const_cast<unsigned char*>(&data_.front())[(y * w_ + x) * 4];
- *reinterpret_cast<uint32*>(addr) = color;
- }
-
- private:
- // pixel dimensions of the image
- int w_, h_;
-
- std::vector<unsigned char> data_;
-};
-
-float PercentageDifferent(const Image& baseline, const Image& actual) {
- int w = std::min(baseline.w(), actual.w());
- int h = std::min(baseline.h(), actual.h());
-
- // Compute pixels different in the overlap.
- int pixels_different = 0;
- for (int y = 0; y < h; y++) {
- for (int x = 0; x < w; x++) {
- if (baseline.pixel_at(x, y) != actual.pixel_at(x, y))
- pixels_different++;
- }
- }
-
- // Count pixels that are a difference in size as also being different.
- int max_w = std::max(baseline.w(), actual.w());
- int max_h = std::max(baseline.h(), actual.h());
- // These pixels are off the right side, not including the lower right corner.
- pixels_different += (max_w - w) * h;
- // These pixels are along the bottom, including the lower right corner.
- pixels_different += (max_h - h) * max_w;
-
- // Like the WebKit ImageDiff tool, we define percentage different in terms
- // of the size of the 'actual' bitmap.
- float total_pixels = static_cast<float>(actual.w()) *
- static_cast<float>(actual.h());
- if (total_pixels == 0) {
- // When the bitmap is empty, they are 100% different.
- return 100.0f;
- }
- return 100.0f * pixels_different / total_pixels;
-}
-
-typedef base::hash_map<uint32, int32> RgbaToCountMap;
-
-float HistogramPercentageDifferent(const Image& baseline, const Image& actual) {
- // TODO(johnme): Consider using a joint histogram instead, as described in
- // "Comparing Images Using Joint Histograms" by Pass & Zabih
- // http://www.cs.cornell.edu/~rdz/papers/pz-jms99.pdf
-
- int w = std::min(baseline.w(), actual.w());
- int h = std::min(baseline.h(), actual.h());
-
- // Count occurences of each RGBA pixel value of baseline in the overlap.
- RgbaToCountMap baseline_histogram;
- for (int y = 0; y < h; y++) {
- for (int x = 0; x < w; x++) {
- // hash_map operator[] inserts a 0 (default constructor) if key not found.
- baseline_histogram[baseline.pixel_at(x, y)]++;
- }
- }
-
- // Compute pixels different in the histogram of the overlap.
- int pixels_different = 0;
- for (int y = 0; y < h; y++) {
- for (int x = 0; x < w; x++) {
- uint32 actual_rgba = actual.pixel_at(x, y);
- RgbaToCountMap::iterator it = baseline_histogram.find(actual_rgba);
- if (it != baseline_histogram.end() && it->second > 0)
- it->second--;
- else
- pixels_different++;
- }
- }
-
- // Count pixels that are a difference in size as also being different.
- int max_w = std::max(baseline.w(), actual.w());
- int max_h = std::max(baseline.h(), actual.h());
- // These pixels are off the right side, not including the lower right corner.
- pixels_different += (max_w - w) * h;
- // These pixels are along the bottom, including the lower right corner.
- pixels_different += (max_h - h) * max_w;
-
- // Like the WebKit ImageDiff tool, we define percentage different in terms
- // of the size of the 'actual' bitmap.
- float total_pixels = static_cast<float>(actual.w()) *
- static_cast<float>(actual.h());
- if (total_pixels == 0) {
- // When the bitmap is empty, they are 100% different.
- return 100.0f;
- }
- return 100.0f * pixels_different / total_pixels;
-}
-
-void PrintHelp() {
- fprintf(stderr,
- "Usage:\n"
- " image_diff [--histogram] <compare file> <reference file>\n"
- " Compares two files on disk, returning 0 when they are the same;\n"
- " passing \"--histogram\" additionally calculates a diff of the\n"
- " RGBA value histograms (which is resistant to shifts in layout)\n"
- " image_diff --use-stdin\n"
- " Stays open reading pairs of filenames from stdin, comparing them,\n"
- " and sending 0 to stdout when they are the same\n"
- " image_diff --diff <compare file> <reference file> <output file>\n"
- " Compares two files on disk, outputs an image that visualizes the\n"
- " difference to <output file>\n");
- /* For unfinished webkit-like-mode (see below)
- "\n"
- " image_diff -s\n"
- " Reads stream input from stdin, should be EXACTLY of the format\n"
- " \"Content-length: <byte length> <data>Content-length: ...\n"
- " it will take as many file pairs as given, and will compare them as\n"
- " (cmp_file, reference_file) pairs\n");
- */
-}
-
-int CompareImages(const base::FilePath& file1,
- const base::FilePath& file2,
- bool compare_histograms) {
- Image actual_image;
- Image baseline_image;
-
- if (!actual_image.CreateFromFilename(file1)) {
- fprintf(stderr, "image_diff: Unable to open file \"%" PRFilePath "\"\n",
- file1.value().c_str());
- return kStatusError;
- }
- if (!baseline_image.CreateFromFilename(file2)) {
- fprintf(stderr, "image_diff: Unable to open file \"%" PRFilePath "\"\n",
- file2.value().c_str());
- return kStatusError;
- }
-
- if (compare_histograms) {
- float percent = HistogramPercentageDifferent(actual_image, baseline_image);
- const char* passed = percent > 0.0 ? "failed" : "passed";
- printf("histogram diff: %01.2f%% %s\n", percent, passed);
- }
-
- const char* diff_name = compare_histograms ? "exact diff" : "diff";
- float percent = PercentageDifferent(actual_image, baseline_image);
- const char* passed = percent > 0.0 ? "failed" : "passed";
- printf("%s: %01.2f%% %s\n", diff_name, percent, passed);
- if (percent > 0.0) {
- // failure: The WebKit version also writes the difference image to
- // stdout, which seems excessive for our needs.
- return kStatusDifferent;
- }
- // success
- return kStatusSame;
-
-/* Untested mode that acts like WebKit's image comparator. I wrote this but
- decided it's too complicated. We may use it in the future if it looks useful
-
- char buffer[2048];
- while (fgets(buffer, sizeof(buffer), stdin)) {
-
- if (strncmp("Content-length: ", buffer, 16) == 0) {
- char* context;
- strtok_s(buffer, " ", &context);
- int image_size = strtol(strtok_s(NULL, " ", &context), NULL, 10);
-
- bool success = false;
- if (image_size > 0 && actual_image.has_image() == 0) {
- if (!actual_image.CreateFromStdin(image_size)) {
- fputs("Error, input image can't be decoded.\n", stderr);
- return 1;
- }
- } else if (image_size > 0 && baseline_image.has_image() == 0) {
- if (!baseline_image.CreateFromStdin(image_size)) {
- fputs("Error, baseline image can't be decoded.\n", stderr);
- return 1;
- }
- } else {
- fputs("Error, image size must be specified.\n", stderr);
- return 1;
- }
- }
-
- if (actual_image.has_image() && baseline_image.has_image()) {
- float percent = PercentageDifferent(actual_image, baseline_image);
- if (percent > 0.0) {
- // failure: The WebKit version also writes the difference image to
- // stdout, which seems excessive for our needs.
- printf("diff: %01.2f%% failed\n", percent);
- } else {
- // success
- printf("diff: %01.2f%% passed\n", percent);
- }
- actual_image.Clear();
- baseline_image.Clear();
- }
-
- fflush(stdout);
- }
-*/
-}
-
-bool CreateImageDiff(const Image& image1, const Image& image2, Image* out) {
- int w = std::min(image1.w(), image2.w());
- int h = std::min(image1.h(), image2.h());
- *out = Image(image1);
- bool same = (image1.w() == image2.w()) && (image1.h() == image2.h());
-
- // TODO(estade): do something with the extra pixels if the image sizes
- // are different.
- for (int y = 0; y < h; y++) {
- for (int x = 0; x < w; x++) {
- uint32 base_pixel = image1.pixel_at(x, y);
- if (base_pixel != image2.pixel_at(x, y)) {
- // Set differing pixels red.
- out->set_pixel_at(x, y, RGBA_RED | RGBA_ALPHA);
- same = false;
- } else {
- // Set same pixels as faded.
- uint32 alpha = base_pixel & RGBA_ALPHA;
- uint32 new_pixel = base_pixel - ((alpha / 2) & RGBA_ALPHA);
- out->set_pixel_at(x, y, new_pixel);
- }
- }
- }
-
- return same;
-}
-
-int DiffImages(const base::FilePath& file1, const base::FilePath& file2,
- const base::FilePath& out_file) {
- Image actual_image;
- Image baseline_image;
-
- if (!actual_image.CreateFromFilename(file1)) {
- fprintf(stderr, "image_diff: Unable to open file \"%" PRFilePath "\"\n",
- file1.value().c_str());
- return kStatusError;
- }
- if (!baseline_image.CreateFromFilename(file2)) {
- fprintf(stderr, "image_diff: Unable to open file \"%" PRFilePath "\"\n",
- file2.value().c_str());
- return kStatusError;
- }
-
- Image diff_image;
- bool same = CreateImageDiff(baseline_image, actual_image, &diff_image);
- if (same)
- return kStatusSame;
-
- std::vector<unsigned char> png_encoding;
- image_diff_png::EncodeRGBAPNG(
- diff_image.data(), diff_image.w(), diff_image.h(),
- diff_image.w() * 4, &png_encoding);
- if (file_util::WriteFile(out_file,
- reinterpret_cast<char*>(&png_encoding.front()),
- base::checked_numeric_cast<int>(png_encoding.size())) < 0)
- return kStatusError;
-
- return kStatusDifferent;
-}
-
-// It isn't strictly correct to only support ASCII paths, but this
-// program reads paths on stdin and the program that spawns it outputs
-// paths as non-wide strings anyway.
-base::FilePath FilePathFromASCII(const std::string& str) {
-#if defined(OS_WIN)
- return base::FilePath(ASCIIToWide(str));
-#else
- return base::FilePath(str);
-#endif
-}
-
-int main(int argc, const char* argv[]) {
- base::EnableTerminationOnHeapCorruption();
- CommandLine::Init(argc, argv);
- const CommandLine& parsed_command_line = *CommandLine::ForCurrentProcess();
- bool histograms = parsed_command_line.HasSwitch(kOptionCompareHistograms);
- if (parsed_command_line.HasSwitch(kOptionPollStdin)) {
- // Watch stdin for filenames.
- std::string stdin_buffer;
- base::FilePath filename1;
- while (std::getline(std::cin, stdin_buffer)) {
- if (stdin_buffer.empty())
- continue;
-
- if (!filename1.empty()) {
- // CompareImages writes results to stdout unless an error occurred.
- base::FilePath filename2 = FilePathFromASCII(stdin_buffer);
- if (CompareImages(filename1, filename2, histograms) == kStatusError)
- printf("error\n");
- fflush(stdout);
- filename1 = base::FilePath();
- } else {
- // Save the first filename in another buffer and wait for the second
- // filename to arrive via stdin.
- filename1 = FilePathFromASCII(stdin_buffer);
- }
- }
- return 0;
- }
-
- const CommandLine::StringVector& args = parsed_command_line.GetArgs();
- if (parsed_command_line.HasSwitch(kOptionGenerateDiff)) {
- if (args.size() == 3) {
- return DiffImages(base::FilePath(args[0]),
- base::FilePath(args[1]),
- base::FilePath(args[2]));
- }
- } else if (args.size() == 2) {
- return CompareImages(
- base::FilePath(args[0]), base::FilePath(args[1]), histograms);
- }
-
- PrintHelp();
- return kStatusError;
-}
diff --git a/chromium/tools/imagediff/image_diff_png.cc b/chromium/tools/imagediff/image_diff_png.cc
deleted file mode 100644
index a34a799811c..00000000000
--- a/chromium/tools/imagediff/image_diff_png.cc
+++ /dev/null
@@ -1,650 +0,0 @@
-// 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.
-
-#include "tools/imagediff/image_diff_png.h"
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "base/logging.h"
-#include "build/build_config.h"
-#include "third_party/libpng/png.h"
-#include "third_party/zlib/zlib.h"
-
-namespace image_diff_png {
-
-// This is a duplicate of ui/gfx/codec/png_codec.cc, after removing code related
-// to Skia, that we can use when running layout tests with minimal dependencies.
-namespace {
-
-enum ColorFormat {
- // 3 bytes per pixel (packed), in RGB order regardless of endianness.
- // This is the native JPEG format.
- FORMAT_RGB,
-
- // 4 bytes per pixel, in RGBA order in memory regardless of endianness.
- FORMAT_RGBA,
-
- // 4 bytes per pixel, in BGRA order in memory regardless of endianness.
- // This is the default Windows DIB order.
- FORMAT_BGRA,
-
- // 4 bytes per pixel, in pre-multiplied kARGB_8888_Config format. For use
- // with directly writing to a skia bitmap.
- FORMAT_SkBitmap
-};
-
-// Represents a comment in the tEXt ancillary chunk of the png.
-struct Comment {
- Comment(const std::string& k, const std::string& t)
- : key(k), text(t) {
- }
-
- ~Comment() {
- };
-
- std::string key;
- std::string text;
-};
-
-// Converts BGRA->RGBA and RGBA->BGRA.
-void ConvertBetweenBGRAandRGBA(const unsigned char* input, int pixel_width,
- unsigned char* output, bool* is_opaque) {
- for (int x = 0; x < pixel_width; x++) {
- const unsigned char* pixel_in = &input[x * 4];
- unsigned char* pixel_out = &output[x * 4];
- pixel_out[0] = pixel_in[2];
- pixel_out[1] = pixel_in[1];
- pixel_out[2] = pixel_in[0];
- pixel_out[3] = pixel_in[3];
- }
-}
-
-void ConvertRGBAtoRGB(const unsigned char* rgba, int pixel_width,
- unsigned char* rgb, bool* is_opaque) {
- for (int x = 0; x < pixel_width; x++) {
- const unsigned char* pixel_in = &rgba[x * 4];
- unsigned char* pixel_out = &rgb[x * 3];
- pixel_out[0] = pixel_in[0];
- pixel_out[1] = pixel_in[1];
- pixel_out[2] = pixel_in[2];
- }
-}
-
-} // namespace
-
-// Decoder --------------------------------------------------------------------
-//
-// This code is based on WebKit libpng interface (PNGImageDecoder), which is
-// in turn based on the Mozilla png decoder.
-
-namespace {
-
-// Gamma constants: We assume we're on Windows which uses a gamma of 2.2.
-const double kMaxGamma = 21474.83; // Maximum gamma accepted by png library.
-const double kDefaultGamma = 2.2;
-const double kInverseGamma = 1.0 / kDefaultGamma;
-
-class PngDecoderState {
- public:
- // Output is a vector<unsigned char>.
- PngDecoderState(ColorFormat ofmt, std::vector<unsigned char>* o)
- : output_format(ofmt),
- output_channels(0),
- is_opaque(true),
- output(o),
- row_converter(NULL),
- width(0),
- height(0),
- done(false) {
- }
-
- ColorFormat output_format;
- int output_channels;
-
- // Used during the reading of an SkBitmap. Defaults to true until we see a
- // pixel with anything other than an alpha of 255.
- bool is_opaque;
-
- // An intermediary buffer for decode output.
- std::vector<unsigned char>* output;
-
- // Called to convert a row from the library to the correct output format.
- // When NULL, no conversion is necessary.
- void (*row_converter)(const unsigned char* in, int w, unsigned char* out,
- bool* is_opaque);
-
- // Size of the image, set in the info callback.
- int width;
- int height;
-
- // Set to true when we've found the end of the data.
- bool done;
-};
-
-void ConvertRGBtoRGBA(const unsigned char* rgb, int pixel_width,
- unsigned char* rgba, bool* is_opaque) {
- for (int x = 0; x < pixel_width; x++) {
- const unsigned char* pixel_in = &rgb[x * 3];
- unsigned char* pixel_out = &rgba[x * 4];
- pixel_out[0] = pixel_in[0];
- pixel_out[1] = pixel_in[1];
- pixel_out[2] = pixel_in[2];
- pixel_out[3] = 0xff;
- }
-}
-
-void ConvertRGBtoBGRA(const unsigned char* rgb, int pixel_width,
- unsigned char* bgra, bool* is_opaque) {
- for (int x = 0; x < pixel_width; x++) {
- const unsigned char* pixel_in = &rgb[x * 3];
- unsigned char* pixel_out = &bgra[x * 4];
- pixel_out[0] = pixel_in[2];
- pixel_out[1] = pixel_in[1];
- pixel_out[2] = pixel_in[0];
- pixel_out[3] = 0xff;
- }
-}
-
-// Called when the png header has been read. This code is based on the WebKit
-// PNGImageDecoder
-void DecodeInfoCallback(png_struct* png_ptr, png_info* info_ptr) {
- PngDecoderState* state = static_cast<PngDecoderState*>(
- png_get_progressive_ptr(png_ptr));
-
- int bit_depth, color_type, interlace_type, compression_type;
- int filter_type, channels;
- png_uint_32 w, h;
- png_get_IHDR(png_ptr, info_ptr, &w, &h, &bit_depth, &color_type,
- &interlace_type, &compression_type, &filter_type);
-
- // Bounds check. When the image is unreasonably big, we'll error out and
- // end up back at the setjmp call when we set up decoding. "Unreasonably big"
- // means "big enough that w * h * 32bpp might overflow an int"; we choose this
- // threshold to match WebKit and because a number of places in code assume
- // that an image's size (in bytes) fits in a (signed) int.
- unsigned long long total_size =
- static_cast<unsigned long long>(w) * static_cast<unsigned long long>(h);
- if (total_size > ((1 << 29) - 1))
- longjmp(png_jmpbuf(png_ptr), 1);
- state->width = static_cast<int>(w);
- state->height = static_cast<int>(h);
-
- // Expand to ensure we use 24-bit for RGB and 32-bit for RGBA.
- if (color_type == PNG_COLOR_TYPE_PALETTE ||
- (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8))
- png_set_expand(png_ptr);
-
- // Transparency for paletted images.
- if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))
- png_set_expand(png_ptr);
-
- // Convert 16-bit to 8-bit.
- if (bit_depth == 16)
- png_set_strip_16(png_ptr);
-
- // Expand grayscale to RGB.
- if (color_type == PNG_COLOR_TYPE_GRAY ||
- color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
- png_set_gray_to_rgb(png_ptr);
-
- // Deal with gamma and keep it under our control.
- double gamma;
- if (png_get_gAMA(png_ptr, info_ptr, &gamma)) {
- if (gamma <= 0.0 || gamma > kMaxGamma) {
- gamma = kInverseGamma;
- png_set_gAMA(png_ptr, info_ptr, gamma);
- }
- png_set_gamma(png_ptr, kDefaultGamma, gamma);
- } else {
- png_set_gamma(png_ptr, kDefaultGamma, kInverseGamma);
- }
-
- // Tell libpng to send us rows for interlaced pngs.
- if (interlace_type == PNG_INTERLACE_ADAM7)
- png_set_interlace_handling(png_ptr);
-
- // Update our info now
- png_read_update_info(png_ptr, info_ptr);
- channels = png_get_channels(png_ptr, info_ptr);
-
- // Pick our row format converter necessary for this data.
- if (channels == 3) {
- switch (state->output_format) {
- case FORMAT_RGB:
- state->row_converter = NULL; // no conversion necessary
- state->output_channels = 3;
- break;
- case FORMAT_RGBA:
- state->row_converter = &ConvertRGBtoRGBA;
- state->output_channels = 4;
- break;
- case FORMAT_BGRA:
- state->row_converter = &ConvertRGBtoBGRA;
- state->output_channels = 4;
- break;
- default:
- NOTREACHED() << "Unknown output format";
- break;
- }
- } else if (channels == 4) {
- switch (state->output_format) {
- case FORMAT_RGB:
- state->row_converter = &ConvertRGBAtoRGB;
- state->output_channels = 3;
- break;
- case FORMAT_RGBA:
- state->row_converter = NULL; // no conversion necessary
- state->output_channels = 4;
- break;
- case FORMAT_BGRA:
- state->row_converter = &ConvertBetweenBGRAandRGBA;
- state->output_channels = 4;
- break;
- default:
- NOTREACHED() << "Unknown output format";
- break;
- }
- } else {
- NOTREACHED() << "Unknown input channels";
- longjmp(png_jmpbuf(png_ptr), 1);
- }
-
- state->output->resize(
- state->width * state->output_channels * state->height);
-}
-
-void DecodeRowCallback(png_struct* png_ptr, png_byte* new_row,
- png_uint_32 row_num, int pass) {
- PngDecoderState* state = static_cast<PngDecoderState*>(
- png_get_progressive_ptr(png_ptr));
-
- DCHECK(pass == 0);
- if (static_cast<int>(row_num) > state->height) {
- NOTREACHED() << "Invalid row";
- return;
- }
-
- unsigned char* base = NULL;
- base = &state->output->front();
-
- unsigned char* dest = &base[state->width * state->output_channels * row_num];
- if (state->row_converter)
- state->row_converter(new_row, state->width, dest, &state->is_opaque);
- else
- memcpy(dest, new_row, state->width * state->output_channels);
-}
-
-void DecodeEndCallback(png_struct* png_ptr, png_info* info) {
- PngDecoderState* state = static_cast<PngDecoderState*>(
- png_get_progressive_ptr(png_ptr));
-
- // Mark the image as complete, this will tell the Decode function that we
- // have successfully found the end of the data.
- state->done = true;
-}
-
-// Automatically destroys the given read structs on destruction to make
-// cleanup and error handling code cleaner.
-class PngReadStructDestroyer {
- public:
- PngReadStructDestroyer(png_struct** ps, png_info** pi) : ps_(ps), pi_(pi) {
- }
- ~PngReadStructDestroyer() {
- png_destroy_read_struct(ps_, pi_, NULL);
- }
- private:
- png_struct** ps_;
- png_info** pi_;
-};
-
-bool BuildPNGStruct(const unsigned char* input, size_t input_size,
- png_struct** png_ptr, png_info** info_ptr) {
- if (input_size < 8)
- return false; // Input data too small to be a png
-
- // Have libpng check the signature, it likes the first 8 bytes.
- if (png_sig_cmp(const_cast<unsigned char*>(input), 0, 8) != 0)
- return false;
-
- *png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
- if (!*png_ptr)
- return false;
-
- *info_ptr = png_create_info_struct(*png_ptr);
- if (!*info_ptr) {
- png_destroy_read_struct(png_ptr, NULL, NULL);
- return false;
- }
-
- return true;
-}
-
-} // namespace
-
-// static
-bool Decode(const unsigned char* input, size_t input_size,
- ColorFormat format, std::vector<unsigned char>* output,
- int* w, int* h) {
- png_struct* png_ptr = NULL;
- png_info* info_ptr = NULL;
- if (!BuildPNGStruct(input, input_size, &png_ptr, &info_ptr))
- return false;
-
- PngReadStructDestroyer destroyer(&png_ptr, &info_ptr);
- if (setjmp(png_jmpbuf(png_ptr))) {
- // The destroyer will ensure that the structures are cleaned up in this
- // case, even though we may get here as a jump from random parts of the
- // PNG library called below.
- return false;
- }
-
- PngDecoderState state(format, output);
-
- png_set_progressive_read_fn(png_ptr, &state, &DecodeInfoCallback,
- &DecodeRowCallback, &DecodeEndCallback);
- png_process_data(png_ptr,
- info_ptr,
- const_cast<unsigned char*>(input),
- input_size);
-
- if (!state.done) {
- // Fed it all the data but the library didn't think we got all the data, so
- // this file must be truncated.
- output->clear();
- return false;
- }
-
- *w = state.width;
- *h = state.height;
- return true;
-}
-
-// Encoder --------------------------------------------------------------------
-//
-// This section of the code is based on nsPNGEncoder.cpp in Mozilla
-// (Copyright 2005 Google Inc.)
-
-namespace {
-
-// Passed around as the io_ptr in the png structs so our callbacks know where
-// to write data.
-struct PngEncoderState {
- explicit PngEncoderState(std::vector<unsigned char>* o) : out(o) {}
- std::vector<unsigned char>* out;
-};
-
-// Called by libpng to flush its internal buffer to ours.
-void EncoderWriteCallback(png_structp png, png_bytep data, png_size_t size) {
- PngEncoderState* state = static_cast<PngEncoderState*>(png_get_io_ptr(png));
- DCHECK(state->out);
-
- size_t old_size = state->out->size();
- state->out->resize(old_size + size);
- memcpy(&(*state->out)[old_size], data, size);
-}
-
-void FakeFlushCallback(png_structp png) {
- // We don't need to perform any flushing since we aren't doing real IO, but
- // we're required to provide this function by libpng.
-}
-
-void ConvertBGRAtoRGB(const unsigned char* bgra, int pixel_width,
- unsigned char* rgb, bool* is_opaque) {
- for (int x = 0; x < pixel_width; x++) {
- const unsigned char* pixel_in = &bgra[x * 4];
- unsigned char* pixel_out = &rgb[x * 3];
- pixel_out[0] = pixel_in[2];
- pixel_out[1] = pixel_in[1];
- pixel_out[2] = pixel_in[0];
- }
-}
-
-#ifdef PNG_TEXT_SUPPORTED
-
-inline char* strdup(const char* str) {
-#if defined(OS_WIN)
- return _strdup(str);
-#else
- return ::strdup(str);
-#endif
-}
-
-class CommentWriter {
- public:
- explicit CommentWriter(const std::vector<Comment>& comments)
- : comments_(comments),
- png_text_(new png_text[comments.size()]) {
- for (size_t i = 0; i < comments.size(); ++i)
- AddComment(i, comments[i]);
- }
-
- ~CommentWriter() {
- for (size_t i = 0; i < comments_.size(); ++i) {
- free(png_text_[i].key);
- free(png_text_[i].text);
- }
- delete [] png_text_;
- }
-
- bool HasComments() {
- return !comments_.empty();
- }
-
- png_text* get_png_text() {
- return png_text_;
- }
-
- int size() {
- return static_cast<int>(comments_.size());
- }
-
- private:
- void AddComment(size_t pos, const Comment& comment) {
- png_text_[pos].compression = PNG_TEXT_COMPRESSION_NONE;
- // A PNG comment's key can only be 79 characters long.
- DCHECK(comment.key.length() < 79);
- png_text_[pos].key = strdup(comment.key.substr(0, 78).c_str());
- png_text_[pos].text = strdup(comment.text.c_str());
- png_text_[pos].text_length = comment.text.length();
-#ifdef PNG_iTXt_SUPPORTED
- png_text_[pos].itxt_length = 0;
- png_text_[pos].lang = 0;
- png_text_[pos].lang_key = 0;
-#endif
- }
-
- const std::vector<Comment> comments_;
- png_text* png_text_;
-};
-#endif // PNG_TEXT_SUPPORTED
-
-// The type of functions usable for converting between pixel formats.
-typedef void (*FormatConverter)(const unsigned char* in, int w,
- unsigned char* out, bool* is_opaque);
-
-// libpng uses a wacky setjmp-based API, which makes the compiler nervous.
-// We constrain all of the calls we make to libpng where the setjmp() is in
-// place to this function.
-// Returns true on success.
-bool DoLibpngWrite(png_struct* png_ptr, png_info* info_ptr,
- PngEncoderState* state,
- int width, int height, int row_byte_width,
- const unsigned char* input, int compression_level,
- int png_output_color_type, int output_color_components,
- FormatConverter converter,
- const std::vector<Comment>& comments) {
-#ifdef PNG_TEXT_SUPPORTED
- CommentWriter comment_writer(comments);
-#endif
- unsigned char* row_buffer = NULL;
-
- // Make sure to not declare any locals here -- locals in the presence
- // of setjmp() in C++ code makes gcc complain.
-
- if (setjmp(png_jmpbuf(png_ptr))) {
- delete[] row_buffer;
- return false;
- }
-
- png_set_compression_level(png_ptr, compression_level);
-
- // Set our callback for libpng to give us the data.
- png_set_write_fn(png_ptr, state, EncoderWriteCallback, FakeFlushCallback);
-
- png_set_IHDR(png_ptr, info_ptr, width, height, 8, png_output_color_type,
- PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT,
- PNG_FILTER_TYPE_DEFAULT);
-
-#ifdef PNG_TEXT_SUPPORTED
- if (comment_writer.HasComments()) {
- png_set_text(png_ptr, info_ptr, comment_writer.get_png_text(),
- comment_writer.size());
- }
-#endif
-
- png_write_info(png_ptr, info_ptr);
-
- if (!converter) {
- // No conversion needed, give the data directly to libpng.
- for (int y = 0; y < height; y ++) {
- png_write_row(png_ptr,
- const_cast<unsigned char*>(&input[y * row_byte_width]));
- }
- } else {
- // Needs conversion using a separate buffer.
- row_buffer = new unsigned char[width * output_color_components];
- for (int y = 0; y < height; y ++) {
- converter(&input[y * row_byte_width], width, row_buffer, NULL);
- png_write_row(png_ptr, row_buffer);
- }
- delete[] row_buffer;
- }
-
- png_write_end(png_ptr, info_ptr);
- return true;
-}
-
-} // namespace
-
-// static
-bool EncodeWithCompressionLevel(const unsigned char* input, ColorFormat format,
- const int width, const int height,
- int row_byte_width,
- bool discard_transparency,
- const std::vector<Comment>& comments,
- int compression_level,
- std::vector<unsigned char>* output) {
- // Run to convert an input row into the output row format, NULL means no
- // conversion is necessary.
- FormatConverter converter = NULL;
-
- int input_color_components, output_color_components;
- int png_output_color_type;
- switch (format) {
- case FORMAT_RGB:
- input_color_components = 3;
- output_color_components = 3;
- png_output_color_type = PNG_COLOR_TYPE_RGB;
- discard_transparency = false;
- break;
-
- case FORMAT_RGBA:
- input_color_components = 4;
- if (discard_transparency) {
- output_color_components = 3;
- png_output_color_type = PNG_COLOR_TYPE_RGB;
- converter = ConvertRGBAtoRGB;
- } else {
- output_color_components = 4;
- png_output_color_type = PNG_COLOR_TYPE_RGB_ALPHA;
- converter = NULL;
- }
- break;
-
- case FORMAT_BGRA:
- input_color_components = 4;
- if (discard_transparency) {
- output_color_components = 3;
- png_output_color_type = PNG_COLOR_TYPE_RGB;
- converter = ConvertBGRAtoRGB;
- } else {
- output_color_components = 4;
- png_output_color_type = PNG_COLOR_TYPE_RGB_ALPHA;
- converter = ConvertBetweenBGRAandRGBA;
- }
- break;
-
- default:
- NOTREACHED() << "Unknown pixel format";
- return false;
- }
-
- // Row stride should be at least as long as the length of the data.
- DCHECK(input_color_components * width <= row_byte_width);
-
- png_struct* png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING,
- NULL, NULL, NULL);
- if (!png_ptr)
- return false;
- png_info* info_ptr = png_create_info_struct(png_ptr);
- if (!info_ptr) {
- png_destroy_write_struct(&png_ptr, NULL);
- return false;
- }
-
- PngEncoderState state(output);
- bool success = DoLibpngWrite(png_ptr, info_ptr, &state,
- width, height, row_byte_width,
- input, compression_level, png_output_color_type,
- output_color_components, converter, comments);
- png_destroy_write_struct(&png_ptr, &info_ptr);
-
- return success;
-}
-
-// static
-bool Encode(const unsigned char* input, ColorFormat format,
- const int width, const int height, int row_byte_width,
- bool discard_transparency,
- const std::vector<Comment>& comments,
- std::vector<unsigned char>* output) {
- return EncodeWithCompressionLevel(input, format, width, height,
- row_byte_width,
- discard_transparency,
- comments, Z_DEFAULT_COMPRESSION,
- output);
-}
-
-// Decode a PNG into an RGBA pixel array.
-bool DecodePNG(const unsigned char* input, size_t input_size,
- std::vector<unsigned char>* output,
- int* width, int* height) {
- return Decode(input, input_size, FORMAT_RGBA, output, width, height);
-}
-
-// Encode an RGBA pixel array into a PNG.
-bool EncodeRGBAPNG(const unsigned char* input,
- int width,
- int height,
- int row_byte_width,
- std::vector<unsigned char>* output) {
- return Encode(input, FORMAT_RGBA,
- width, height, row_byte_width, false,
- std::vector<Comment>(), output);
-}
-
-// Encode an BGRA pixel array into a PNG.
-bool EncodeBGRAPNG(const unsigned char* input,
- int width,
- int height,
- int row_byte_width,
- bool discard_transparency,
- std::vector<unsigned char>* output) {
- return Encode(input, FORMAT_BGRA,
- width, height, row_byte_width, discard_transparency,
- std::vector<Comment>(), output);
-}
-
-} // image_diff_png
diff --git a/chromium/tools/imagediff/image_diff_png.h b/chromium/tools/imagediff/image_diff_png.h
deleted file mode 100644
index c371337f99d..00000000000
--- a/chromium/tools/imagediff/image_diff_png.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// 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.
-
-#ifndef TOOLS_IMAGEDIFF_IMAGE_DIFF_PNG_H_
-#define TOOLS_IMAGEDIFF_IMAGE_DIFF_PNG_H_
-
-#include <string>
-#include <vector>
-
-namespace image_diff_png {
-
-// Decode a PNG into an RGBA pixel array.
-bool DecodePNG(const unsigned char* input, size_t input_size,
- std::vector<unsigned char>* output,
- int* width, int* height);
-
-// Encode an RGBA pixel array into a PNG.
-bool EncodeRGBAPNG(const unsigned char* input,
- int width,
- int height,
- int row_byte_width,
- std::vector<unsigned char>* output);
-
-// Encode an BGRA pixel array into a PNG.
-bool EncodeBGRAPNG(const unsigned char* input,
- int width,
- int height,
- int row_byte_width,
- bool discard_transparency,
- std::vector<unsigned char>* output);
-
-} // namespace image_diff_png
-
-#endif // TOOLS_IMAGEDIFF_IMAGE_DIFF_PNG_H_
diff --git a/chromium/tools/include_tracer.py b/chromium/tools/include_tracer.py
deleted file mode 100755
index df30c65c005..00000000000
--- a/chromium/tools/include_tracer.py
+++ /dev/null
@@ -1,202 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-# based on an almost identical script by: jyrki@google.com (Jyrki Alakuijala)
-
-"""Prints out include dependencies in chrome.
-
-Since it ignores defines, it gives just a rough estimation of file size.
-
-Usage:
- tools/include_tracer.py chrome/browser/ui/browser.h
-"""
-
-import os
-import sys
-
-# Created by copying the command line for prerender_browsertest.cc, replacing
-# spaces with newlines, and dropping everything except -F and -I switches.
-# TODO(port): Add windows, linux directories.
-INCLUDE_PATHS = [
- '',
- 'gpu',
- 'skia/config',
- 'skia/ext',
- 'testing/gmock/include',
- 'testing/gtest/include',
- 'third_party/GTM',
- 'third_party/WebKit/Source',
- 'third_party/WebKit/Source/wtf',
- 'third_party/WebKit/Source/core',
- 'third_party/WebKit/Source/core/accessibility',
- 'third_party/WebKit/Source/core/accessibility/chromium',
- 'third_party/WebKit/Source/core/bindings',
- 'third_party/WebKit/Source/core/bindings/generic',
- 'third_party/WebKit/Source/core/bindings/v8',
- 'third_party/WebKit/Source/core/bindings/v8/custom',
- 'third_party/WebKit/Source/core/bindings/v8/specialization',
- 'third_party/WebKit/Source/core/bridge',
- 'third_party/WebKit/Source/core/bridge/jni',
- 'third_party/WebKit/Source/core/bridge/jni/v8',
- 'third_party/WebKit/Source/core/css',
- 'third_party/WebKit/Source/core/dom',
- 'third_party/WebKit/Source/core/dom/default',
- 'third_party/WebKit/Source/core/editing',
- 'third_party/WebKit/Source/core/fileapi',
- 'third_party/WebKit/Source/core/history',
- 'third_party/WebKit/Source/core/html',
- 'third_party/WebKit/Source/core/html/canvas',
- 'third_party/WebKit/Source/core/html/parser',
- 'third_party/WebKit/Source/core/html/shadow',
- 'third_party/WebKit/Source/core/inspector',
- 'third_party/WebKit/Source/core/loader',
- 'third_party/WebKit/Source/core/loader/appcache',
- 'third_party/WebKit/Source/core/loader/archive',
- 'third_party/WebKit/Source/core/loader/cache',
- 'third_party/WebKit/Source/core/loader/icon',
- 'third_party/WebKit/Source/core/mathml',
- 'third_party/WebKit/Source/core/notifications',
- 'third_party/WebKit/Source/core/page',
- 'third_party/WebKit/Source/core/page/animation',
- 'third_party/WebKit/Source/core/page/chromium',
- 'third_party/WebKit/Source/core/platform',
- 'third_party/WebKit/Source/core/platform/animation',
- 'third_party/WebKit/Source/core/platform/audio',
- 'third_party/WebKit/Source/core/platform/audio/chromium',
- 'third_party/WebKit/Source/core/platform/audio/mac',
- 'third_party/WebKit/Source/core/platform/chromium',
- 'third_party/WebKit/Source/core/platform/cocoa',
- 'third_party/WebKit/Source/core/platform/graphics',
- 'third_party/WebKit/Source/core/platform/graphics/cg',
- 'third_party/WebKit/Source/core/platform/graphics/chromium',
- 'third_party/WebKit/Source/core/platform/graphics/cocoa',
- 'third_party/WebKit/Source/core/platform/graphics/filters',
- 'third_party/WebKit/Source/core/platform/graphics/gpu',
- 'third_party/WebKit/Source/core/platform/graphics/mac',
- 'third_party/WebKit/Source/core/platform/graphics/opentype',
- 'third_party/WebKit/Source/core/platform/graphics/skia',
- 'third_party/WebKit/Source/core/platform/graphics/transforms',
- 'third_party/WebKit/Source/core/platform/image-decoders',
- 'third_party/WebKit/Source/core/platform/image-decoders/bmp',
- 'third_party/WebKit/Source/core/platform/image-decoders/gif',
- 'third_party/WebKit/Source/core/platform/image-decoders/ico',
- 'third_party/WebKit/Source/core/platform/image-decoders/jpeg',
- 'third_party/WebKit/Source/core/platform/image-decoders/png',
- 'third_party/WebKit/Source/core/platform/image-decoders/skia',
- 'third_party/WebKit/Source/core/platform/image-decoders/webp',
- 'third_party/WebKit/Source/core/platform/image-decoders/xbm',
- 'third_party/WebKit/Source/core/platform/image-encoders/skia',
- 'third_party/WebKit/Source/core/platform/mac',
- 'third_party/WebKit/Source/core/platform/mock',
- 'third_party/WebKit/Source/core/platform/network',
- 'third_party/WebKit/Source/core/platform/network/chromium',
- 'third_party/WebKit/Source/core/platform/sql',
- 'third_party/WebKit/Source/core/platform/text',
- 'third_party/WebKit/Source/core/platform/text/mac',
- 'third_party/WebKit/Source/core/platform/text/transcoder',
- 'third_party/WebKit/Source/core/plugins',
- 'third_party/WebKit/Source/core/plugins/chromium',
- 'third_party/WebKit/Source/core/rendering',
- 'third_party/WebKit/Source/core/rendering/style',
- 'third_party/WebKit/Source/core/rendering/svg',
- 'third_party/WebKit/Source/core/storage',
- 'third_party/WebKit/Source/core/storage/chromium',
- 'third_party/WebKit/Source/core/svg',
- 'third_party/WebKit/Source/core/svg/animation',
- 'third_party/WebKit/Source/core/svg/graphics',
- 'third_party/WebKit/Source/core/svg/graphics/filters',
- 'third_party/WebKit/Source/core/svg/properties',
- 'third_party/WebKit/Source/core/webaudio',
- 'third_party/WebKit/Source/core/websockets',
- 'third_party/WebKit/Source/core/workers',
- 'third_party/WebKit/Source/core/xml',
- 'third_party/WebKit/Source/public',
- 'third_party/WebKit/Source/web',
- 'third_party/cld',
- 'third_party/icu/public/common',
- 'third_party/icu/public/i18n',
- 'third_party/npapi',
- 'third_party/npapi/bindings',
- 'third_party/protobuf',
- 'third_party/protobuf/src',
- 'third_party/skia/gpu/include',
- 'third_party/skia/include/config',
- 'third_party/skia/include/core',
- 'third_party/skia/include/effects',
- 'third_party/skia/include/gpu',
- 'third_party/skia/include/pdf',
- 'third_party/skia/include/ports',
- 'v8/include',
- 'xcodebuild/Debug/include',
- 'xcodebuild/DerivedSources/Debug/chrome',
- 'xcodebuild/DerivedSources/Debug/policy',
- 'xcodebuild/DerivedSources/Debug/protoc_out',
- 'xcodebuild/DerivedSources/Debug/webkit',
- 'xcodebuild/DerivedSources/Debug/webkit/bindings',
-]
-
-
-def Walk(seen, filename, parent, indent):
- """Returns the size of |filename| plus the size of all files included by
- |filename| and prints the include tree of |filename| to stdout. Every file
- is visited at most once.
- """
- total_bytes = 0
-
- # .proto(devel) filename translation
- if filename.endswith('.pb.h'):
- basename = filename[:-5]
- if os.path.exists(basename + '.proto'):
- filename = basename + '.proto'
- else:
- print 'could not find ', filename
-
- # Show and count files only once.
- if filename in seen:
- return total_bytes
- seen.add(filename)
-
- # Display the paths.
- print ' ' * indent + filename
-
- # Skip system includes.
- if filename[0] == '<':
- return total_bytes
-
- # Find file in all include paths.
- resolved_filename = filename
- for root in INCLUDE_PATHS + [os.path.dirname(parent)]:
- if os.path.exists(os.path.join(root, filename)):
- resolved_filename = os.path.join(root, filename)
- break
-
- # Recurse.
- if os.path.exists(resolved_filename):
- lines = open(resolved_filename).readlines()
- else:
- print ' ' * (indent + 2) + "-- not found"
- lines = []
- for line in lines:
- line = line.strip()
- if line.startswith('#include "'):
- total_bytes += Walk(
- seen, line.split('"')[1], resolved_filename, indent + 2)
- elif line.startswith('#include '):
- include = '<' + line.split('<')[1].split('>')[0] + '>'
- total_bytes += Walk(
- seen, include, resolved_filename, indent + 2)
- elif line.startswith('import '):
- total_bytes += Walk(
- seen, line.split('"')[1], resolved_filename, indent + 2)
- return total_bytes + len("".join(lines))
-
-
-def main():
- bytes = Walk(set(), sys.argv[1], '', 0)
- print
- print float(bytes) / (1 << 20), "megabytes of chrome source"
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/ipc_fuzzer/DEPS b/chromium/tools/ipc_fuzzer/DEPS
deleted file mode 100644
index f3d83f86c0b..00000000000
--- a/chromium/tools/ipc_fuzzer/DEPS
+++ /dev/null
@@ -1,3 +0,0 @@
-include_rules = [
- "+tools/ipc_fuzzer/message_lib",
-]
diff --git a/chromium/tools/ipc_fuzzer/OWNERS b/chromium/tools/ipc_fuzzer/OWNERS
deleted file mode 100644
index 729e2fa5530..00000000000
--- a/chromium/tools/ipc_fuzzer/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-aedla@chromium.org
-tsepez@chromium.org
diff --git a/chromium/tools/ipc_fuzzer/ipc_fuzzer.gyp b/chromium/tools/ipc_fuzzer/ipc_fuzzer.gyp
index 46e1bdb53d6..320cde4c347 100644
--- a/chromium/tools/ipc_fuzzer/ipc_fuzzer.gyp
+++ b/chromium/tools/ipc_fuzzer/ipc_fuzzer.gyp
@@ -12,6 +12,8 @@
'type': 'none',
'dependencies': [
'mutate/mutate.gyp:ipc_fuzzer_mutate',
+ 'mutate/mutate.gyp:ipc_fuzzer_generate',
+ 'mutate/mutate.gyp:ipc_message_util',
'replay/replay.gyp:ipc_fuzzer_replay',
],
},
diff --git a/chromium/tools/ipc_fuzzer/message_lib/DEPS b/chromium/tools/ipc_fuzzer/message_lib/DEPS
deleted file mode 100644
index cf3a55280c4..00000000000
--- a/chromium/tools/ipc_fuzzer/message_lib/DEPS
+++ /dev/null
@@ -1,8 +0,0 @@
-include_rules = [
- "+chrome/common",
- "+components/autofill/content/common",
- "+components/nacl/common",
- "+components/tracing",
- "+components/visitedlink/common",
- "+content/common",
-]
diff --git a/chromium/tools/ipc_fuzzer/message_lib/all_messages.h b/chromium/tools/ipc_fuzzer/message_lib/all_messages.h
deleted file mode 100644
index 19aaae18a30..00000000000
--- a/chromium/tools/ipc_fuzzer/message_lib/all_messages.h
+++ /dev/null
@@ -1,14 +0,0 @@
-// 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.
-
-// Multiply-included file, hence no include guard.
-// Inclusion of all message files recognized by message_lib. All messages
-// received by RenderProcessHost should be included here for the IPC fuzzer.
-
-#include "chrome/common/all_messages.h"
-#include "components/autofill/content/common/autofill_messages.h"
-#include "components/nacl/common/nacl_host_messages.h"
-#include "components/tracing/tracing_messages.h"
-#include "components/visitedlink/common/visitedlink_messages.h"
-#include "content/common/all_messages.h"
diff --git a/chromium/tools/ipc_fuzzer/message_lib/message_cracker.h b/chromium/tools/ipc_fuzzer/message_lib/message_cracker.h
deleted file mode 100644
index 37acf961830..00000000000
--- a/chromium/tools/ipc_fuzzer/message_lib/message_cracker.h
+++ /dev/null
@@ -1,32 +0,0 @@
-// 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.
-
-#ifndef TOOLS_IPC_FUZZER_MESSAGE_LIB_MESSAGE_CRACKER_H_
-#define TOOLS_IPC_FUZZER_MESSAGE_LIB_MESSAGE_CRACKER_H_
-
-#include <string.h>
-#include "ipc/ipc_message.h"
-
-// Means for updating protected message fields.
-class MessageCracker : public IPC::Message {
- public:
- static void CopyMessageID(IPC::Message* dst, IPC::Message* src) {
- memcpy(ToCracker(dst)->mutable_payload(),
- ToCracker(src)->payload(),
- sizeof(int));
- }
-
- static void SetMessageType(IPC::Message* message, uint32 type) {
- ToCracker(message)->header()->type = type;
- }
-
- private:
- static MessageCracker* ToCracker(IPC::Message* message) {
- return reinterpret_cast<MessageCracker*>(message);
- }
-
- DISALLOW_COPY_AND_ASSIGN(MessageCracker);
-};
-
-#endif // TOOLS_IPC_FUZZER_MESSAGE_LIB_MESSAGE_CRACKER_H_
diff --git a/chromium/tools/ipc_fuzzer/message_lib/message_file.h b/chromium/tools/ipc_fuzzer/message_lib/message_file.h
deleted file mode 100644
index 726571ebb96..00000000000
--- a/chromium/tools/ipc_fuzzer/message_lib/message_file.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// 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.
-
-#ifndef TOOLS_IPC_FUZZER_MESSAGE_LIB_MESSAGE_FILE_H_
-#define TOOLS_IPC_FUZZER_MESSAGE_LIB_MESSAGE_FILE_H_
-
-#include "base/files/file_path.h"
-#include "base/memory/scoped_vector.h"
-#include "ipc/ipc_message.h"
-
-namespace ipc_fuzzer {
-
-typedef ScopedVector<IPC::Message> MessageVector;
-
-class MessageFile {
- public:
- static bool Read(const base::FilePath& path, MessageVector* messages);
- static bool Write(const base::FilePath& path, const MessageVector& messages);
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MessageFile);
-};
-
-} // namespace ipc_fuzzer
-
-#endif // TOOLS_IPC_FUZZER_MESSAGE_LIB_MESSAGE_FILE_H_
diff --git a/chromium/tools/ipc_fuzzer/message_lib/message_file_format.h b/chromium/tools/ipc_fuzzer/message_lib/message_file_format.h
deleted file mode 100644
index 005f9364db5..00000000000
--- a/chromium/tools/ipc_fuzzer/message_lib/message_file_format.h
+++ /dev/null
@@ -1,63 +0,0 @@
-// 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.
-
-#ifndef TOOLS_IPC_FUZZER_MESSAGE_LIB_MESSAGE_FILE_FORMAT_H_
-#define TOOLS_IPC_FUZZER_MESSAGE_LIB_MESSAGE_FILE_FORMAT_H_
-
-#include "base/basictypes.h"
-
-// Message file contains IPC messages and message names. Each message type
-// has a NameTableEntry mapping the type to a name.
-//
-// |========================|
-// | FileHeader |
-// |========================|
-// | Message |
-// |------------------------|
-// | Message |
-// |------------------------|
-// | ... |
-// |========================|
-// | NameTableEntry |
-// |------------------------|
-// | NameTableEntry |
-// |------------------------|
-// | ... |
-// |------------------------|
-// | type = 0x0002070f |
-// | string_table_offset = ---.
-// |------------------------| \
-// | ... | |
-// |========================| |
-// | message name | |
-// |------------------------| |
-// | message name | |
-// |------------------------| |
-// | ... | |
-// |------------------------| /
-// | "ViewHostMsg_OpenURL" <--*
-// |------------------------|
-// | ... |
-// |========================|
-
-namespace ipc_fuzzer {
-
-struct FileHeader {
- static const uint32 kMagicValue = 0x1bcf11ee;
- static const uint32 kCurrentVersion = 1;
-
- uint32 magic;
- uint32 version;
- uint32 message_count;
- uint32 name_count;
-};
-
-struct NameTableEntry {
- uint32 type;
- uint32 string_table_offset;
-};
-
-} // namespace ipc_fuzzer
-
-#endif // TOOLS_IPC_FUZZER_MESSAGE_LIB_MESSAGE_FILE_FORMAT_H_
diff --git a/chromium/tools/ipc_fuzzer/message_lib/message_file_reader.cc b/chromium/tools/ipc_fuzzer/message_lib/message_file_reader.cc
deleted file mode 100644
index e93c460b7e2..00000000000
--- a/chromium/tools/ipc_fuzzer/message_lib/message_file_reader.cc
+++ /dev/null
@@ -1,230 +0,0 @@
-// 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.
-
-#include <limits.h>
-
-#include "base/files/file_path.h"
-#include "base/files/memory_mapped_file.h"
-#include "base/logging.h"
-#include "base/strings/string_piece.h"
-#include "ipc/ipc_message.h"
-#include "tools/ipc_fuzzer/message_lib/message_cracker.h"
-#include "tools/ipc_fuzzer/message_lib/message_file.h"
-#include "tools/ipc_fuzzer/message_lib/message_file_format.h"
-#include "tools/ipc_fuzzer/message_lib/message_names.h"
-
-namespace ipc_fuzzer {
-
-namespace {
-
-// Helper class to read IPC message file into a MessageVector and
-// fix message types.
-class Reader {
- public:
- Reader(const base::FilePath& path);
- bool Read(MessageVector* messages);
-
- private:
- template <typename T>
- bool CutObject(const T** object);
-
- // Reads the header, checks magic and version.
- bool ReadHeader();
-
- bool MapFile();
- bool ReadMessages();
-
- // Last part of the file is a string table for message names.
- bool ReadStringTable();
-
- // Reads type <-> name mapping into name_map_. References string table.
- bool ReadNameTable();
-
- // Removes obsolete messages from the vector.
- bool RemoveUnknownMessages();
-
- // Does type -> name -> correct_type fixup.
- void FixMessageTypes();
-
- // Raw data.
- base::FilePath path_;
- base::MemoryMappedFile mapped_file_;
- base::StringPiece file_data_;
- base::StringPiece string_table_;
-
- // Parsed data.
- const FileHeader* header_;
- MessageVector* messages_;
- MessageNames name_map_;
-
- DISALLOW_COPY_AND_ASSIGN(Reader);
-};
-
-Reader::Reader(const base::FilePath& path)
- : path_(path),
- header_(NULL),
- messages_(NULL) {
-}
-
-template <typename T>
-bool Reader::CutObject(const T** object) {
- if (file_data_.size() < sizeof(T)) {
- LOG(ERROR) << "Unexpected EOF.";
- return false;
- }
- *object = reinterpret_cast<const T*>(file_data_.data());
- file_data_.remove_prefix(sizeof(T));
- return true;
-}
-
-bool Reader::ReadHeader() {
- if (!CutObject<FileHeader>(&header_))
- return false;
- if (header_->magic != FileHeader::kMagicValue) {
- LOG(ERROR) << path_.value() << " is not an IPC message file.";
- return false;
- }
- if (header_->version != FileHeader::kCurrentVersion) {
- LOG(ERROR) << "Wrong version for message file " << path_.value() << ". "
- << "File version is " << header_->version << ", "
- << "current version is " << FileHeader::kCurrentVersion << ".";
- return false;
- }
- return true;
-}
-
-bool Reader::MapFile() {
- if (!mapped_file_.Initialize(path_)) {
- LOG(ERROR) << "Failed to map testcase: " << path_.value();
- return false;
- }
- const char* data = reinterpret_cast<const char*>(mapped_file_.data());
- file_data_.set(data, mapped_file_.length());
- return true;
-}
-
-bool Reader::ReadMessages() {
- for (size_t i = 0; i < header_->message_count; ++i) {
- const char* begin = file_data_.begin();
- const char* end = file_data_.end();
- const char* message_tail = IPC::Message::FindNext(begin, end);
- if (!message_tail) {
- LOG(ERROR) << "Failed to parse message.";
- return false;
- }
-
- size_t msglen = message_tail - begin;
- if (msglen > INT_MAX) {
- LOG(ERROR) << "Message too large.";
- return false;
- }
-
- // Copy is necessary to fix message type later.
- IPC::Message const_message(begin, msglen);
- IPC::Message* message = new IPC::Message(const_message);
- messages_->push_back(message);
- file_data_.remove_prefix(msglen);
- }
- return true;
-}
-
-bool Reader::ReadStringTable() {
- size_t name_count = header_->name_count;
- if (!name_count)
- return true;
- if (name_count > file_data_.size() / sizeof(NameTableEntry)) {
- LOG(ERROR) << "Invalid name table size: " << name_count;
- return false;
- }
-
- size_t string_table_offset = name_count * sizeof(NameTableEntry);
- string_table_ = file_data_.substr(string_table_offset);
- if (string_table_.empty()) {
- LOG(ERROR) << "Missing string table.";
- return false;
- }
- if (string_table_.end()[-1] != '\0') {
- LOG(ERROR) << "String table doesn't end with NUL.";
- return false;
- }
- return true;
-}
-
-bool Reader::ReadNameTable() {
- for (size_t i = 0; i < header_->name_count; ++i) {
- const NameTableEntry* entry;
- if (!CutObject<NameTableEntry>(&entry))
- return false;
- size_t offset = entry->string_table_offset;
- if (offset >= string_table_.size()) {
- LOG(ERROR) << "Invalid string table offset: " << offset;
- return false;
- }
- name_map_.Add(entry->type, std::string(string_table_.data() + offset));
- }
- return true;
-}
-
-bool Reader::RemoveUnknownMessages() {
- MessageVector::iterator it = messages_->begin();
- while (it != messages_->end()) {
- uint32 type = (*it)->type();
- if (!name_map_.TypeExists(type)) {
- LOG(ERROR) << "Missing name table entry for type " << type;
- return false;
- }
- const std::string& name = name_map_.TypeToName(type);
- if (!MessageNames::GetInstance()->NameExists(name)) {
- LOG(WARNING) << "Unknown message " << name;
- it = messages_->erase(it);
- } else {
- ++it;
- }
- }
- return true;
-}
-
-// Message types are based on line numbers, so a minor edit of *_messages.h
-// changes the types of messages in that file. The types are fixed here to
-// increase the lifetime of message files. This is only a partial fix because
-// message arguments and structure layouts can change as well.
-void Reader::FixMessageTypes() {
- for (MessageVector::iterator it = messages_->begin();
- it != messages_->end(); ++it) {
- uint32 type = (*it)->type();
- const std::string& name = name_map_.TypeToName(type);
- uint32 correct_type = MessageNames::GetInstance()->NameToType(name);
- if (type != correct_type)
- MessageCracker::SetMessageType(*it, correct_type);
- }
-}
-
-bool Reader::Read(MessageVector* messages) {
- messages_ = messages;
-
- if (!MapFile())
- return false;
- if (!ReadHeader())
- return false;
- if (!ReadMessages())
- return false;
- if (!ReadStringTable())
- return false;
- if (!ReadNameTable())
- return false;
- if (!RemoveUnknownMessages())
- return false;
- FixMessageTypes();
-
- return true;
-}
-
-} // namespace
-
-bool MessageFile::Read(const base::FilePath& path, MessageVector* messages) {
- Reader reader(path);
- return reader.Read(messages);
-}
-
-} // namespace ipc_fuzzer
diff --git a/chromium/tools/ipc_fuzzer/message_lib/message_file_writer.cc b/chromium/tools/ipc_fuzzer/message_lib/message_file_writer.cc
deleted file mode 100644
index 46953d8f500..00000000000
--- a/chromium/tools/ipc_fuzzer/message_lib/message_file_writer.cc
+++ /dev/null
@@ -1,176 +0,0 @@
-// 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.
-
-#include <limits.h>
-#include <set>
-
-#include "base/logging.h"
-#include "base/platform_file.h"
-#include "tools/ipc_fuzzer/message_lib/message_file.h"
-#include "tools/ipc_fuzzer/message_lib/message_file_format.h"
-#include "tools/ipc_fuzzer/message_lib/message_names.h"
-
-namespace ipc_fuzzer {
-
-namespace {
-
-// Helper class to write a MessageVector + message names to a file.
-class Writer {
- public:
- Writer(const base::FilePath& path);
- ~Writer();
- bool Write(const MessageVector& messages);
-
- private:
- bool OpenFile();
-
- // Helper to append data to file_.
- bool WriteBlob(const void *buffer, size_t size);
-
- // Collects a set of MessageVector message types. Corresponding message
- // names need to be included in the file.
- bool CollectMessageTypes();
-
- bool WriteHeader();
- bool WriteMessages();
-
- // Each name table entry is a message type + string table offset.
- bool WriteNameTable();
-
- // String table contains the actual message names.
- bool WriteStringTable();
-
- typedef std::set<uint32> TypesSet;
- base::FilePath path_;
- base::PlatformFile file_;
- const MessageVector* messages_;
- TypesSet types_;
-
- DISALLOW_COPY_AND_ASSIGN(Writer);
-};
-
-Writer::Writer(const base::FilePath& path)
- : path_(path),
- file_(base::kInvalidPlatformFileValue),
- messages_(NULL) {
-}
-
-Writer::~Writer() {
- if (file_ != base::kInvalidPlatformFileValue)
- base::ClosePlatformFile(file_);
-}
-
-bool Writer::OpenFile() {
- file_ = base::CreatePlatformFile(
- path_,
- base::PLATFORM_FILE_CREATE_ALWAYS | base::PLATFORM_FILE_WRITE,
- NULL,
- NULL);
- if (file_ == base::kInvalidPlatformFileValue) {
- LOG(ERROR) << "Failed to create IPC message file: " << path_.value();
- return false;
- }
- return true;
-}
-
-bool Writer::WriteBlob(const void *buffer, size_t size) {
- if (size > INT_MAX)
- return false;
- const char* char_buffer = static_cast<const char*>(buffer);
- int ret = base::WritePlatformFileAtCurrentPos(file_, char_buffer, size);
- if (ret != size) {
- LOG(ERROR) << "Failed to write " << size << " bytes.";
- return false;
- }
- return true;
-}
-
-bool Writer::CollectMessageTypes() {
- for (size_t i = 0; i < messages_->size(); ++i) {
- uint32_t type = (*messages_)[i]->type();
- if (!MessageNames::GetInstance()->TypeExists(type)) {
- LOG(ERROR) << "Unknown message type: " << type;
- return false;
- }
- types_.insert(type);
- }
- return true;
-}
-
-bool Writer::WriteHeader() {
- FileHeader header;
- if (messages_->size() > UINT_MAX)
- return false;
- header.magic = FileHeader::kMagicValue;
- header.version = FileHeader::kCurrentVersion;
- header.message_count = messages_->size();
- header.name_count = types_.size();
- if (!WriteBlob(&header, sizeof(FileHeader)))
- return false;
- return true;
-}
-
-bool Writer::WriteMessages() {
- for (size_t i = 0; i < messages_->size(); ++i) {
- IPC::Message* message = (*messages_)[i];
- if (!WriteBlob(message->data(), message->size()))
- return false;
- }
- return true;
-}
-
-bool Writer::WriteNameTable() {
- size_t string_table_offset = 0;
- NameTableEntry entry;
-
- for (TypesSet::iterator it = types_.begin(); it != types_.end(); ++it) {
- if (string_table_offset > UINT_MAX)
- return false;
- entry.type = *it;
- entry.string_table_offset = string_table_offset;
- if (!WriteBlob(&entry, sizeof(NameTableEntry)))
- return false;
- const std::string& name = MessageNames::GetInstance()->TypeToName(*it);
- string_table_offset += name.length() + 1;
- }
- return true;
-}
-
-bool Writer::WriteStringTable() {
- for (TypesSet::iterator it = types_.begin(); it != types_.end(); ++it) {
- const std::string& name = MessageNames::GetInstance()->TypeToName(*it);
- if (!WriteBlob(name.c_str(), name.length() + 1))
- return false;
- }
- return true;
-}
-
-bool Writer::Write(const MessageVector& messages) {
- messages_ = &messages;
-
- if (!OpenFile())
- return false;
- if (!CollectMessageTypes())
- return false;
- if (!WriteHeader())
- return false;
- if (!WriteMessages())
- return false;
- if (!WriteNameTable())
- return false;
- if (!WriteStringTable())
- return false;
-
- return true;
-}
-
-} // namespace
-
-bool MessageFile::Write(const base::FilePath& path,
- const MessageVector& messages) {
- Writer writer(path);
- return writer.Write(messages);
-}
-
-} // namespace ipc_fuzzer
diff --git a/chromium/tools/ipc_fuzzer/message_lib/message_lib.gyp b/chromium/tools/ipc_fuzzer/message_lib/message_lib.gyp
index 013fb6d336e..64141d8a3c1 100644
--- a/chromium/tools/ipc_fuzzer/message_lib/message_lib.gyp
+++ b/chromium/tools/ipc_fuzzer/message_lib/message_lib.gyp
@@ -14,7 +14,11 @@
'../../../base/base.gyp:base',
'../../../chrome/chrome.gyp:common',
'../../../ipc/ipc.gyp:ipc',
+ '../../../media/cast/cast.gyp:cast_transport',
'../../../skia/skia.gyp:skia',
+ '../../../third_party/libjingle/libjingle.gyp:libjingle',
+ '../../../third_party/WebKit/public/blink.gyp:blink',
+ '../../../ui/accessibility/accessibility.gyp:ax_gen',
],
'sources': [
'all_messages.h',
@@ -27,7 +31,10 @@
'message_names.h',
],
'include_dirs': [
- '../..',
+ '../../..',
+ ],
+ 'defines': [
+ 'USE_CUPS',
],
},
],
diff --git a/chromium/tools/ipc_fuzzer/message_lib/message_names.cc b/chromium/tools/ipc_fuzzer/message_lib/message_names.cc
deleted file mode 100644
index b80b3881c00..00000000000
--- a/chromium/tools/ipc_fuzzer/message_lib/message_names.cc
+++ /dev/null
@@ -1,37 +0,0 @@
-// 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.
-
-#include "tools/ipc_fuzzer/message_lib/message_names.h"
-#include "tools/ipc_fuzzer/message_lib/all_messages.h"
-
-#include "ipc/ipc_message_null_macros.h"
-#undef IPC_MESSAGE_DECL
-#define IPC_MESSAGE_DECL(kind, type, name, in, out, ilist, olist) \
- names.Add(static_cast<uint32>(name::ID), #name);
-
-void PopulateIpcMessageNames(ipc_fuzzer::MessageNames& names) {
-#include "tools/ipc_fuzzer/message_lib/all_messages.h"
-}
-
-namespace ipc_fuzzer {
-
-// static
-MessageNames* MessageNames::all_names_ = NULL;
-
-MessageNames::MessageNames() {
-}
-
-MessageNames::~MessageNames() {
-}
-
-// static
-MessageNames* MessageNames::GetInstance() {
- if (!all_names_) {
- all_names_ = new MessageNames();
- PopulateIpcMessageNames(*all_names_);
- }
- return all_names_;
-}
-
-} // namespace ipc_fuzzer
diff --git a/chromium/tools/ipc_fuzzer/message_lib/message_names.h b/chromium/tools/ipc_fuzzer/message_lib/message_names.h
deleted file mode 100644
index 7ad47cc6b56..00000000000
--- a/chromium/tools/ipc_fuzzer/message_lib/message_names.h
+++ /dev/null
@@ -1,59 +0,0 @@
-// 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.
-
-#ifndef TOOLS_IPC_FUZZER_MESSAGE_LIB_MESSAGE_NAMES_H_
-#define TOOLS_IPC_FUZZER_MESSAGE_LIB_MESSAGE_NAMES_H_
-
-#include <map>
-#include <string>
-#include "base/basictypes.h"
-#include "base/logging.h"
-
-namespace ipc_fuzzer {
-
-class MessageNames {
- public:
- MessageNames();
- ~MessageNames();
- static MessageNames* GetInstance();
-
- void Add(uint32 type, const std::string& name) {
- name_map_[type] = name;
- type_map_[name] = type;
- }
-
- bool TypeExists(uint32 type) {
- return name_map_.find(type) != name_map_.end();
- }
-
- bool NameExists(const std::string& name) {
- return type_map_.find(name) != type_map_.end();
- }
-
- const std::string& TypeToName(uint32 type) {
- TypeToNameMap::iterator it = name_map_.find(type);
- CHECK(it != name_map_.end());
- return it->second;
- }
-
- uint32 NameToType(const std::string& name) {
- NameToTypeMap::iterator it = type_map_.find(name);
- CHECK(it != type_map_.end());
- return it->second;
- }
-
- private:
- typedef std::map<uint32, std::string> TypeToNameMap;
- typedef std::map<std::string, uint32> NameToTypeMap;
- TypeToNameMap name_map_;
- NameToTypeMap type_map_;
-
- static MessageNames* all_names_;
-
- DISALLOW_COPY_AND_ASSIGN(MessageNames);
-};
-
-} // namespace ipc_fuzzer
-
-#endif // TOOLS_IPC_FUZZER_MESSAGE_LIB_MESSAGE_NAMES_H_
diff --git a/chromium/tools/ipc_fuzzer/mutate/mutate.cc b/chromium/tools/ipc_fuzzer/mutate/mutate.cc
deleted file mode 100644
index 4264879fce1..00000000000
--- a/chromium/tools/ipc_fuzzer/mutate/mutate.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// 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.
-
-#include <stdlib.h>
-
-int main(int argc, const char** argv) {
- // TODO(aedla): Implement mutator.
- return EXIT_SUCCESS;
-}
diff --git a/chromium/tools/ipc_fuzzer/mutate/mutate.gyp b/chromium/tools/ipc_fuzzer/mutate/mutate.gyp
index 0ba896726c6..1f63766d95f 100644
--- a/chromium/tools/ipc_fuzzer/mutate/mutate.gyp
+++ b/chromium/tools/ipc_fuzzer/mutate/mutate.gyp
@@ -11,12 +11,91 @@
'target_name': 'ipc_fuzzer_mutate',
'type': 'executable',
'dependencies': [
+ '../../../base/base.gyp:base',
+ '../../../chrome/chrome.gyp:common',
+ '../../../ipc/ipc.gyp:ipc',
+ '../../../media/cast/cast.gyp:cast_transport',
+ '../../../ppapi/ppapi_internal.gyp:ppapi_ipc',
+ '../../../skia/skia.gyp:skia',
+ '../../../third_party/libjingle/libjingle.gyp:libjingle',
+ '../../../third_party/mt19937ar/mt19937ar.gyp:mt19937ar',
+ '../../../third_party/WebKit/public/blink.gyp:blink',
+ '../../../ui/accessibility/accessibility.gyp:ax_gen',
+ '../message_lib/message_lib.gyp:ipc_message_lib',
],
'sources': [
'mutate.cc',
+ 'rand_util.h',
+ 'rand_util.cc',
+ ],
+ 'conditions': [
+ ['asan==1', {
+ 'cflags!': [
+ # Compiling mutate.cc with ASan takes too long, see
+ # http://crbug.com/360158.
+ '-fsanitize=address',
+ ],
+ }],
+ ],
+ 'include_dirs': [
+ '../../..',
+ ],
+ 'defines': [
+ 'USE_CUPS',
+ ],
+ },
+ {
+ 'target_name': 'ipc_fuzzer_generate',
+ 'type': 'executable',
+ 'dependencies': [
+ '../../../base/base.gyp:base',
+ '../../../chrome/chrome.gyp:common',
+ '../../../ipc/ipc.gyp:ipc',
+ '../../../media/cast/cast.gyp:cast_transport',
+ '../../../ppapi/ppapi_internal.gyp:ppapi_ipc',
+ '../../../skia/skia.gyp:skia',
+ '../../../third_party/libjingle/libjingle.gyp:libjingle',
+ '../../../third_party/mt19937ar/mt19937ar.gyp:mt19937ar',
+ '../../../third_party/WebKit/public/blink.gyp:blink',
+ '../../../ui/accessibility/accessibility.gyp:ax_gen',
+ '../message_lib/message_lib.gyp:ipc_message_lib',
+ ],
+ 'sources': [
+ 'generate.cc',
+ 'rand_util.h',
+ 'rand_util.cc',
+ ],
+ 'conditions': [
+ ['asan==1', {
+ 'cflags!': [
+ # Compiling generate.cc with ASan takes too long, see
+ # http://crbug.com/360158.
+ '-fsanitize=address',
+ ],
+ }],
],
'include_dirs': [
- '../..',
+ '../../..',
+ ],
+ 'defines': [
+ 'USE_CUPS',
+ ],
+ },
+ {
+ 'target_name': 'ipc_message_util',
+ 'type': 'executable',
+ 'dependencies': [
+ '../../../third_party/re2/re2.gyp:re2',
+ '../message_lib/message_lib.gyp:ipc_message_lib',
+ ],
+ 'sources': [
+ 'message_util.cc',
+ ],
+ 'include_dirs': [
+ '../../..',
+ ],
+ 'defines': [
+ 'USE_CUPS',
],
},
],
diff --git a/chromium/tools/ipc_fuzzer/play_testcase.py b/chromium/tools/ipc_fuzzer/play_testcase.py
deleted file mode 100755
index 32a7662195b..00000000000
--- a/chromium/tools/ipc_fuzzer/play_testcase.py
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/usr/bin/env python
-# 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.
-
-"""Wrapper around chrome.
-
-Replaces all the child processes (renderer, GPU, plugins and utility) with the
-IPC fuzzer. The fuzzer will then play back a specified testcase.
-
-Depends on ipc_fuzzer being available on the same directory as chrome.
-"""
-
-import os
-import platform
-import subprocess
-import sys
-
-def main():
- if len(sys.argv) <= 1:
- print 'Usage: play_testcase.py [chrome_flag...] testcase'
- return 1
-
- script_path = os.path.realpath(__file__)
- ipc_fuzzer_dir = os.path.dirname(script_path)
- out_dir = os.path.abspath(os.path.join(ipc_fuzzer_dir, os.pardir,
- os.pardir, 'out'));
- build_dir = ''
- chrome_path = ''
- chrome_binary = 'chrome'
-
- for build in ['Debug', 'Release']:
- try_build = os.path.join(out_dir, build)
- try_chrome = os.path.join(try_build, chrome_binary)
- if os.path.exists(try_chrome):
- build_dir = try_build
- chrome_path = try_chrome
-
- if not chrome_path:
- print 'chrome executable not found.'
- return 1
-
- fuzzer_path = os.path.join(build_dir, 'ipc_fuzzer_replay')
- if not os.path.exists(fuzzer_path):
- print fuzzer_path + ' not found.'
- print ('Please use enable_ipc_fuzzer=1 GYP define and '
- 'build ipc_fuzzer target.')
- return 1
-
- prefixes = {
- '--renderer-cmd-prefix',
- '--gpu-launcher',
- '--plugin-launcher',
- '--ppapi-plugin-launcher',
- '--utility-cmd-prefix',
- }
-
- args = [
- chrome_path,
- '--ipc-fuzzer-testcase=' + sys.argv[-1],
- '--no-sandbox',
- '--disable-kill-after-bad-ipc',
- ]
-
- launchers = {}
- for prefix in prefixes:
- launchers[prefix] = fuzzer_path
-
- for arg in sys.argv[1:-1]:
- if arg.find('=') != -1:
- switch, value = arg.split('=', 1)
- if switch in prefixes:
- launchers[switch] = value + ' ' + launchers[switch]
- continue
- args.append(arg)
-
- for switch, value in launchers.items():
- args.append(switch + '=' + value)
-
- print args
-
- return subprocess.call(args)
-
-
-if __name__ == "__main__":
- sys.exit(main())
diff --git a/chromium/tools/ipc_fuzzer/replay/DEPS b/chromium/tools/ipc_fuzzer/replay/DEPS
deleted file mode 100644
index 3a889e705e6..00000000000
--- a/chromium/tools/ipc_fuzzer/replay/DEPS
+++ /dev/null
@@ -1,3 +0,0 @@
-include_rules = [
- "+chrome/common",
-]
diff --git a/chromium/tools/ipc_fuzzer/replay/replay.cc b/chromium/tools/ipc_fuzzer/replay/replay.cc
deleted file mode 100644
index 73bf55ae587..00000000000
--- a/chromium/tools/ipc_fuzzer/replay/replay.cc
+++ /dev/null
@@ -1,20 +0,0 @@
-// 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.
-
-#include <stdlib.h>
-#include "tools/ipc_fuzzer/replay/replay_process.h"
-
-int main(int argc, const char** argv) {
- ipc_fuzzer::ReplayProcess replay;
- if (!replay.Initialize(argc, argv))
- return EXIT_FAILURE;
-
- replay.OpenChannel();
-
- if (!replay.OpenTestcase())
- return EXIT_FAILURE;
-
- replay.Run();
- return EXIT_SUCCESS;
-}
diff --git a/chromium/tools/ipc_fuzzer/replay/replay.gyp b/chromium/tools/ipc_fuzzer/replay/replay.gyp
index 57273f8591f..ae47cc85dae 100644
--- a/chromium/tools/ipc_fuzzer/replay/replay.gyp
+++ b/chromium/tools/ipc_fuzzer/replay/replay.gyp
@@ -15,6 +15,7 @@
'../../../base/base.gyp:base',
'../../../chrome/chrome.gyp:common',
'../../../ipc/ipc.gyp:ipc',
+ '../../../media/cast/cast.gyp:cast_transport',
],
'sources': [
'replay.cc',
@@ -22,7 +23,10 @@
'replay_process.h',
],
'include_dirs': [
- '../..',
+ '../../..',
+ ],
+ 'defines': [
+ 'USE_CUPS',
],
},
],
diff --git a/chromium/tools/ipc_fuzzer/replay/replay_process.cc b/chromium/tools/ipc_fuzzer/replay/replay_process.cc
deleted file mode 100644
index f5a53671c9f..00000000000
--- a/chromium/tools/ipc_fuzzer/replay/replay_process.cc
+++ /dev/null
@@ -1,106 +0,0 @@
-// 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.
-
-#include "tools/ipc_fuzzer/replay/replay_process.h"
-
-#include <limits.h>
-#include <string>
-#include "base/bind.h"
-#include "base/command_line.h"
-#include "base/files/file_path.h"
-#include "base/logging.h"
-#include "base/posix/global_descriptors.h"
-#include "chrome/common/chrome_switches.h"
-#include "ipc/ipc_descriptors.h"
-#include "ipc/ipc_switches.h"
-
-namespace ipc_fuzzer {
-
-ReplayProcess::ReplayProcess()
- : main_loop_(base::MessageLoop::TYPE_DEFAULT),
- io_thread_("Chrome_ChildIOThread"),
- shutdown_event_(true, false),
- message_index_(0) {
-}
-
-ReplayProcess::~ReplayProcess() {
- channel_.reset();
-}
-
-bool ReplayProcess::Initialize(int argc, const char** argv) {
- CommandLine::Init(argc, argv);
-
- if (!CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kIpcFuzzerTestcase)) {
- LOG(ERROR) << "This binary shouldn't be executed directly, "
- << "please use tools/ipc_fuzzer/play_testcase.py";
- return false;
- }
-
- // Log to default destination.
- logging::SetMinLogLevel(logging::LOG_ERROR);
- logging::InitLogging(logging::LoggingSettings());
-
- io_thread_.StartWithOptions(
- base::Thread::Options(base::MessageLoop::TYPE_IO, 0));
-
- base::GlobalDescriptors* g_fds = base::GlobalDescriptors::GetInstance();
- g_fds->Set(kPrimaryIPCChannel,
- kPrimaryIPCChannel + base::GlobalDescriptors::kBaseDescriptor);
- return true;
-}
-
-void ReplayProcess::OpenChannel() {
- std::string channel_name =
- CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
- switches::kProcessChannelID);
-
- channel_.reset(
- new IPC::ChannelProxy(channel_name,
- IPC::Channel::MODE_CLIENT,
- this,
- io_thread_.message_loop_proxy()));
-}
-
-bool ReplayProcess::OpenTestcase() {
- base::FilePath path = CommandLine::ForCurrentProcess()->GetSwitchValuePath(
- switches::kIpcFuzzerTestcase);
- return MessageFile::Read(path, &messages_);
-}
-
-void ReplayProcess::SendNextMessage() {
- if (message_index_ >= messages_.size()) {
- base::MessageLoop::current()->Quit();
- return;
- }
-
- // Take next message and release it from vector.
- IPC::Message* message = messages_[message_index_];
- messages_[message_index_++] = NULL;
-
- if (!channel_->Send(message)) {
- LOG(ERROR) << "ChannelProxy::Send() failed";
- base::MessageLoop::current()->Quit();
- }
-}
-
-void ReplayProcess::Run() {
- timer_.reset(new base::Timer(false, true));
- timer_->Start(FROM_HERE,
- base::TimeDelta::FromMilliseconds(1),
- base::Bind(&ReplayProcess::SendNextMessage,
- base::Unretained(this)));
- base::MessageLoop::current()->Run();
-}
-
-bool ReplayProcess::OnMessageReceived(const IPC::Message& msg) {
- return true;
-}
-
-void ReplayProcess::OnChannelError() {
- LOG(ERROR) << "Channel error, quitting";
- base::MessageLoop::current()->Quit();
-}
-
-} // namespace ipc_fuzzer
diff --git a/chromium/tools/ipc_fuzzer/replay/replay_process.h b/chromium/tools/ipc_fuzzer/replay/replay_process.h
deleted file mode 100644
index 8a396a85602..00000000000
--- a/chromium/tools/ipc_fuzzer/replay/replay_process.h
+++ /dev/null
@@ -1,59 +0,0 @@
-// 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.
-
-#ifndef TOOLS_IPC_FUZZER_REPLAY_REPLAY_PROCESS_H_
-#define TOOLS_IPC_FUZZER_REPLAY_REPLAY_PROCESS_H_
-
-#include "base/memory/scoped_ptr.h"
-#include "base/message_loop/message_loop.h"
-#include "base/synchronization/waitable_event.h"
-#include "base/threading/thread.h"
-#include "base/timer/timer.h"
-#include "ipc/ipc_channel_proxy.h"
-#include "ipc/ipc_listener.h"
-#include "ipc/ipc_message.h"
-#include "tools/ipc_fuzzer/message_lib/message_file.h"
-
-namespace ipc_fuzzer {
-
-class ReplayProcess : public IPC::Listener {
- public:
- ReplayProcess();
- virtual ~ReplayProcess();
-
- // Set up command line, logging, IO thread. Returns true on success, false
- // otherwise.
- bool Initialize(int argc, const char** argv);
-
- // Open a channel to the browser process. It will think we are a renderer.
- void OpenChannel();
-
- // Extract messages from a file specified by --ipc-fuzzer-testcase=
- // Returns true on success, false otherwise.
- bool OpenTestcase();
-
- // Send messages to the browser.
- void Run();
-
- // IPC::Listener implementation.
- virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
- virtual void OnChannelError() OVERRIDE;
-
- private:
- void SendNextMessage();
-
- scoped_ptr<IPC::ChannelProxy> channel_;
- base::MessageLoop main_loop_;
- base::Thread io_thread_;
- base::WaitableEvent shutdown_event_;
- scoped_ptr<base::Timer> timer_;
- MessageVector messages_;
- size_t message_index_;
-
- DISALLOW_COPY_AND_ASSIGN(ReplayProcess);
-};
-
-} // namespace ipc_fuzzer
-
-#endif // TOOLS_IPC_FUZZER_REPLAY_REPLAY_PROCESS_H_
diff --git a/chromium/tools/ipc_messages_log.py b/chromium/tools/ipc_messages_log.py
deleted file mode 100755
index 26284d1cd60..00000000000
--- a/chromium/tools/ipc_messages_log.py
+++ /dev/null
@@ -1,168 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2012 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.
-
-""""Processes a log file and resolves IPC message identifiers.
-
-Resolves IPC messages of the form [unknown type NNNNNN] to named IPC messages.
-
-e.g. logfile containing
-
-I/stderr ( 3915): ipc 3915.3.1370207904 2147483647 S [unknown type 66372]
-
-will be transformed to:
-
-I/stderr ( 3915): ipc 3915.3.1370207904 2147483647 S ViewMsg_SetCSSColors
-
-In order to find the message header files efficiently, it requires that
-Chromium is checked out using git.
-"""
-
-import optparse
-import os
-import re
-import subprocess
-import sys
-
-
-def _SourceDir():
- """Get chromium's source directory."""
- return os.path.join(sys.path[0], '..')
-
-
-def _ReadLines(f):
- """Read from file f and generate right-stripped lines."""
- for line in f:
- yield line.rstrip()
-
-
-def _GetMsgStartTable():
- """Read MsgStart enumeration from ipc/ipc_message_utils.h.
-
- Determines the message type identifiers by reading.
- header file ipc/ipc_message_utils.h and looking for
- enum IPCMessageStart. Assumes following code format in header file:
- enum IPCMessageStart {
- Type1MsgStart ...,
- Type2MsgStart,
- };
-
- Returns:
- A dictionary mapping StartName to enumeration value.
- """
- ipc_message_file = _SourceDir() + '/ipc/ipc_message_utils.h'
- ipc_message_lines = _ReadLines(open(ipc_message_file))
- is_msg_start = False
- count = 0
- msg_start_table = dict()
- for line in ipc_message_lines:
- if is_msg_start:
- if line.strip() == '};':
- break
- msgstart_index = line.find('MsgStart')
- msg_type = line[:msgstart_index] + 'MsgStart'
- msg_start_table[msg_type.strip()] = count
- count+=1
- elif line.strip() == 'enum IPCMessageStart {':
- is_msg_start = True
-
- return msg_start_table
-
-
-def _FindMessageHeaderFiles():
- """Look through the source directory for *_messages.h."""
- os.chdir(_SourceDir())
- pipe = subprocess.Popen(['git', 'ls-files', '--', '*_messages.h'],
- stdout=subprocess.PIPE)
- return _ReadLines(pipe.stdout)
-
-
-def _GetMsgId(msg_start, line_number, msg_start_table):
- """Construct the meessage id given the msg_start and the line number."""
- hex_str = '%x%04x' % (msg_start_table[msg_start], line_number)
- return int(hex_str, 16)
-
-
-def _ReadHeaderFile(f, msg_start_table, msg_map):
- """Read a header file and construct a map from message_id to message name."""
- msg_def_re = re.compile(
- '^IPC_(?:SYNC_)?MESSAGE_[A-Z0-9_]+\(([A-Za-z0-9_]+).*')
- msg_start_re = re.compile(
- '^\s*#define\s+IPC_MESSAGE_START\s+([a-zA-Z0-9_]+MsgStart).*')
- msg_start = None
- msg_name = None
- line_number = 0
-
- for line in f:
- line_number+=1
- match = re.match(msg_start_re, line)
- if match:
- msg_start = match.group(1)
- # print "msg_start = " + msg_start
- match = re.match(msg_def_re, line)
- if match:
- msg_name = match.group(1)
- # print "msg_name = " + msg_name
- if msg_start and msg_name:
- msg_id = _GetMsgId(msg_start, line_number, msg_start_table)
- msg_map[msg_id] = msg_name
- return msg_map
-
-
-def _ResolveMsg(msg_type, msg_map):
- """Fully resolve a message type to a name."""
- if msg_type in msg_map:
- return msg_map[msg_type]
- else:
- return '[Unknown message %d (0x%x)]x' % (msg_type, msg_type)
-
-
-def _ProcessLog(f, msg_map):
- """Read lines from f and resolve the IPC messages according to msg_map."""
- unknown_msg_re = re.compile('\[unknown type (\d+)\]')
- for line in f:
- line = line.rstrip()
- match = re.search(unknown_msg_re, line)
- if match:
- line = re.sub(unknown_msg_re,
- _ResolveMsg(int(match.group(1)), msg_map),
- line)
- print line
-
-
-def _GetMsgMap():
- """Returns a dictionary mapping from message number to message name."""
- msg_start_table = _GetMsgStartTable()
- msg_map = dict()
- for header_file in _FindMessageHeaderFiles():
- _ReadHeaderFile(open(header_file),
- msg_start_table,
- msg_map)
- return msg_map
-
-
-def main():
- """Processes one or more log files with IPC logging messages.
-
- Replaces '[unknown type NNNNNN]' with resolved
- IPC messages.
-
- Reads from standard input if no log files specified on the
- command line.
- """
- parser = optparse.OptionParser('usage: %prog [LOGFILE...]')
- (_, args) = parser.parse_args()
-
- msg_map = _GetMsgMap()
- log_files = args
-
- if log_files:
- for log_file in log_files:
- _ProcessLog(open(log_file), msg_map)
- else:
- _ProcessLog(sys.stdin, msg_map)
-
-
-if __name__ == '__main__':
- main()
diff --git a/chromium/tools/json_schema_compiler/BUILD.gn b/chromium/tools/json_schema_compiler/BUILD.gn
new file mode 100644
index 00000000000..2d7c183807d
--- /dev/null
+++ b/chromium/tools/json_schema_compiler/BUILD.gn
@@ -0,0 +1,13 @@
+# Copyright 2014 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.
+
+# Utility sources against which generated API modules should be linked.
+source_set("generated_api_util") {
+ sources = [
+ "util.cc",
+ "util.h"
+ ]
+ deps = [ "//base" ]
+}
+
diff --git a/chromium/tools/json_schema_compiler/cc_generator.py b/chromium/tools/json_schema_compiler/cc_generator.py
index 371c60d3032..61f5bf1f04b 100644
--- a/chromium/tools/json_schema_compiler/cc_generator.py
+++ b/chromium/tools/json_schema_compiler/cc_generator.py
@@ -46,9 +46,12 @@ class _Generator(object):
.Append('#include "base/strings/string_number_conversions.h"')
.Append('#include "base/strings/utf_string_conversions.h"')
.Append('#include "%s/%s.h"' %
- (self._namespace.source_file_dir, self._namespace.unix_name))
+ (self._namespace.source_file_dir, self._namespace.short_filename))
+ .Append('#include <set>')
.Cblock(self._type_helper.GenerateIncludes(include_soft=True))
.Append()
+ .Append('using base::UTF8ToUTF16;')
+ .Append()
.Concat(cpp_util.OpenNamespace(self._cpp_namespace))
.Cblock(self._type_helper.GetNamespaceStart())
)
@@ -91,6 +94,7 @@ class _Generator(object):
(c.Concat(self._type_helper.GetNamespaceEnd())
.Cblock(cpp_util.CloseNamespace(self._cpp_namespace))
)
+ c.Append()
return c
def _GenerateType(self, cpp_namespace, type_):
@@ -142,11 +146,16 @@ class _Generator(object):
def _GenerateInitializersAndBody(self, type_):
items = []
for prop in type_.properties.values():
- if prop.optional:
- continue
-
t = prop.type_
- if t.property_type == PropertyType.INTEGER:
+
+ real_t = self._type_helper.FollowRef(t)
+ if real_t.property_type == PropertyType.ENUM:
+ items.append('%s(%s)' % (
+ prop.unix_name,
+ self._type_helper.GetEnumNoneValue(t)))
+ elif prop.optional:
+ continue
+ elif t.property_type == PropertyType.INTEGER:
items.append('%s(0)' % prop.unix_name)
elif t.property_type == PropertyType.DOUBLE:
items.append('%s(0.0)' % prop.unix_name)
@@ -156,12 +165,11 @@ class _Generator(object):
t.property_type == PropertyType.ARRAY or
t.property_type == PropertyType.BINARY or # mapped to std::string
t.property_type == PropertyType.CHOICES or
- t.property_type == PropertyType.ENUM or
t.property_type == PropertyType.OBJECT or
t.property_type == PropertyType.FUNCTION or
t.property_type == PropertyType.REF or
t.property_type == PropertyType.STRING):
- # TODO(miket): It would be nice to initialize CHOICES and ENUM, but we
+ # TODO(miket): It would be nice to initialize CHOICES, but we
# don't presently have the semantics to indicate which one of a set
# should be the default.
continue
@@ -187,6 +195,9 @@ class _Generator(object):
.Sblock(' %s) {' % self._GenerateParams(
('const base::Value& value', '%(name)s* out'))))
+ if self._generate_error_messages:
+ c.Append('DCHECK(error);')
+
if type_.property_type == PropertyType.CHOICES:
for choice in type_.choices:
(c.Sblock('if (%s) {' % self._GenerateValueIsTypeExpression('value',
@@ -216,10 +227,24 @@ class _Generator(object):
if type_.properties or type_.additional_properties is not None:
c.Append('const base::DictionaryValue* dict = '
'static_cast<const base::DictionaryValue*>(&value);')
- for prop in type_.properties.values():
+ if self._generate_error_messages:
+ c.Append('std::set<std::string> keys;')
+ for prop in type_.properties.itervalues():
c.Concat(self._InitializePropertyToDefault(prop, 'out'))
- for prop in type_.properties.values():
+ for prop in type_.properties.itervalues():
+ if self._generate_error_messages:
+ c.Append('keys.insert("%s");' % (prop.name))
c.Concat(self._GenerateTypePopulateProperty(prop, 'dict', 'out'))
+ # Check for extra values.
+ if self._generate_error_messages:
+ (c.Sblock('for (base::DictionaryValue::Iterator it(*dict); '
+ '!it.IsAtEnd(); it.Advance()) {')
+ .Sblock('if (!keys.count(it.key())) {')
+ .Concat(self._GenerateError('"found unexpected key \'" + '
+ 'it.key() + "\'"'))
+ .Eblock('}')
+ .Eblock('}')
+ )
if type_.additional_properties is not None:
if type_.additional_properties.property_type == PropertyType.ANY:
c.Append('out->additional_properties.MergeDictionary(dict);')
@@ -295,7 +320,10 @@ class _Generator(object):
(c.Append('// static')
.Append('scoped_ptr<%s> %s::FromValue(%s) {' % (classname,
cpp_namespace, self._GenerateParams(('const base::Value& value',))))
- .Append(' scoped_ptr<%s> out(new %s());' % (classname, classname))
+ )
+ if self._generate_error_messages:
+ c.Append('DCHECK(error);')
+ (c.Append(' scoped_ptr<%s> out(new %s());' % (classname, classname))
.Append(' if (!Populate(%s))' % self._GenerateArgs(
('value', 'out.get()')))
.Append(' return scoped_ptr<%s>();' % classname)
@@ -328,24 +356,26 @@ class _Generator(object):
)
for prop in type_.properties.values():
+ prop_var = 'this->%s' % prop.unix_name
if prop.optional:
# Optional enum values are generated with a NONE enum value.
underlying_type = self._type_helper.FollowRef(prop.type_)
if underlying_type.property_type == PropertyType.ENUM:
c.Sblock('if (%s != %s) {' %
- (prop.unix_name,
+ (prop_var,
self._type_helper.GetEnumNoneValue(prop.type_)))
else:
- c.Sblock('if (%s.get()) {' % prop.unix_name)
+ c.Sblock('if (%s.get()) {' % prop_var)
# ANY is a base::Value which is abstract and cannot be a direct member, so
# it will always be a pointer.
is_ptr = prop.optional or prop.type_.property_type == PropertyType.ANY
- c.Append('value->SetWithoutPathExpansion("%s", %s);' % (
+ c.Cblock(self._CreateValueFromType(
+ 'value->SetWithoutPathExpansion("%s", %%s);' % prop.name,
prop.name,
- self._CreateValueFromType(prop.type_,
- 'this->%s' % prop.unix_name,
- is_ptr=is_ptr)))
+ prop.type_,
+ prop_var,
+ is_ptr=is_ptr))
if prop.optional:
c.Eblock('}')
@@ -364,10 +394,11 @@ class _Generator(object):
cpp_util.PadForGenerics(cpp_type))
.Append(' additional_properties.begin();')
.Append(' it != additional_properties.end(); ++it) {')
- .Append('value->SetWithoutPathExpansion(it->first, %s);' %
- self._CreateValueFromType(
- type_.additional_properties,
- '%sit->second' % ('*' if needs_unwrap else '')))
+ .Cblock(self._CreateValueFromType(
+ 'value->SetWithoutPathExpansion(it->first, %s);',
+ type_.additional_properties.name,
+ type_.additional_properties,
+ '%sit->second' % ('*' if needs_unwrap else '')))
.Eblock('}')
)
@@ -387,8 +418,10 @@ class _Generator(object):
(c.Sblock('if (%s) {' % choice_var)
.Append('DCHECK(!result) << "Cannot set multiple choices for %s";' %
type_.unix_name)
- .Append('result.reset(%s);' %
- self._CreateValueFromType(choice, '*%s' % choice_var))
+ .Cblock(self._CreateValueFromType('result.reset(%s);',
+ choice.name,
+ choice,
+ '*%s' % choice_var))
.Eblock('}')
)
(c.Append('DCHECK(result) << "Must set at least one choice for %s";' %
@@ -424,7 +457,8 @@ class _Generator(object):
# Results::Create function
if function.callback:
- c.Concat(self._GenerateCreateCallbackArguments('Results',
+ c.Concat(self._GenerateCreateCallbackArguments(function_namespace,
+ 'Results',
function.callback))
c.Append('} // namespace %s' % function_namespace)
@@ -437,12 +471,14 @@ class _Generator(object):
(c.Append('namespace %s {' % event_namespace)
.Append()
.Cblock(self._GenerateEventNameConstant(None, event))
- .Cblock(self._GenerateCreateCallbackArguments(None, event))
+ .Cblock(self._GenerateCreateCallbackArguments(event_namespace,
+ None,
+ event))
.Append('} // namespace %s' % event_namespace)
)
return c
- def _CreateValueFromType(self, type_, var, is_ptr=False):
+ def _CreateValueFromType(self, code, prop_name, type_, var, is_ptr=False):
"""Creates a base::Value given a type. Generated code passes ownership
to caller.
@@ -450,6 +486,52 @@ class _Generator(object):
E.g for std::string, generate new base::StringValue(var)
"""
+ c = Code()
+ underlying_type = self._type_helper.FollowRef(type_)
+ if underlying_type.property_type == PropertyType.ARRAY:
+ # Enums are treated specially because C++ templating thinks that they're
+ # ints, but really they're strings. So we create a vector of strings and
+ # populate it with the names of the enum in the array. The |ToString|
+ # function of the enum can be in another namespace when the enum is
+ # referenced. Templates can not be used here because C++ templating does
+ # not support passing a namespace as an argument.
+ item_type = self._type_helper.FollowRef(underlying_type.item_type)
+ if item_type.property_type == PropertyType.ENUM:
+ vardot = '(%s)%s' % (var, '->' if is_ptr else '.')
+
+ maybe_namespace = ''
+ if type_.item_type.property_type == PropertyType.REF:
+ maybe_namespace = '%s::' % item_type.namespace.unix_name
+
+ enum_list_var = '%s_list' % prop_name
+ # Scope the std::vector variable declaration inside braces.
+ (c.Sblock('{')
+ .Append('std::vector<std::string> %s;' % enum_list_var)
+ .Append('for (std::vector<%s>::const_iterator it = %sbegin();'
+ % (self._type_helper.GetCppType(item_type), vardot))
+ .Sblock(' it != %send(); ++it) {' % vardot)
+ .Append('%s.push_back(%sToString(*it));' % (enum_list_var,
+ maybe_namespace))
+ .Eblock('}'))
+
+ # Because the std::vector above is always created for both required and
+ # optional enum arrays, |is_ptr| is set to false and uses the
+ # std::vector to create the values.
+ (c.Append(code %
+ self._GenerateCreateValueFromType(type_, enum_list_var, False))
+ .Eblock('}'))
+ return c
+
+ c.Append(code % self._GenerateCreateValueFromType(type_, var, is_ptr))
+ return c
+
+ def _GenerateCreateValueFromType(self, type_, var, is_ptr):
+ """Generates the statement to create a base::Value given a type.
+
+ type_: The type of the values being converted.
+ var: The name of the variable.
+ is_ptr: Whether |type_| is optional.
+ """
underlying_type = self._type_helper.FollowRef(type_)
if (underlying_type.property_type == PropertyType.CHOICES or
underlying_type.property_type == PropertyType.OBJECT):
@@ -465,7 +547,10 @@ class _Generator(object):
vardot = '(%s).' % var
return '%sDeepCopy()' % vardot
elif underlying_type.property_type == PropertyType.ENUM:
- return 'new base::StringValue(ToString(%s))' % var
+ maybe_namespace = ''
+ if type_.property_type == PropertyType.REF:
+ maybe_namespace = '%s::' % underlying_type.namespace.unix_name
+ return 'new base::StringValue(%sToString(%s))' % (maybe_namespace, var)
elif underlying_type.property_type == PropertyType.BINARY:
if is_ptr:
vardot = var + '->'
@@ -475,7 +560,6 @@ class _Generator(object):
(vardot, vardot))
elif underlying_type.property_type == PropertyType.ARRAY:
return '%s.release()' % self._util_cc_helper.CreateValueFromArray(
- underlying_type,
var,
is_ptr)
elif underlying_type.property_type.is_fundamental:
@@ -527,8 +611,12 @@ class _Generator(object):
(c.Append('// static')
.Sblock('scoped_ptr<Params> Params::Create(%s) {' % self._GenerateParams(
['const base::ListValue& args']))
- .Concat(self._GenerateParamsCheck(function, 'args'))
- .Append('scoped_ptr<Params> params(new Params());'))
+ )
+ if self._generate_error_messages:
+ c.Append('DCHECK(error);')
+ (c.Concat(self._GenerateParamsCheck(function, 'args'))
+ .Append('scoped_ptr<Params> params(new Params());')
+ )
for param in function.params:
c.Concat(self._InitializePropertyToDefault(param, 'params'))
@@ -590,7 +678,6 @@ class _Generator(object):
|failure_value|.
"""
c = Code()
- c.Sblock('{')
underlying_type = self._type_helper.FollowRef(type_)
@@ -603,10 +690,13 @@ class _Generator(object):
'"\'%%(key)s\': expected ' + '%s, got " + %s' % (
type_.name,
self._util_cc_helper.GetValueTypeString(
- '%%(src_var)s', True))))
- .Append('return %(failure_value)s;')
- .Eblock('}')
- .Append('%(dst_var)s.reset(new %(cpp_type)s(temp));')
+ '%%(src_var)s', True)))))
+ c.Append('%(dst_var)s.reset();')
+ if not self._generate_error_messages:
+ c.Append('return %(failure_value)s;')
+ (c.Eblock('}')
+ .Append('else')
+ .Append(' %(dst_var)s.reset(new %(cpp_type)s(temp));')
)
else:
(c.Sblock('if (!%s) {' % cpp_util.GetAsFundamentalValue(
@@ -627,15 +717,23 @@ class _Generator(object):
.Sblock('if (!%(src_var)s->GetAsDictionary(&dictionary)) {')
.Concat(self._GenerateError(
'"\'%%(key)s\': expected dictionary, got " + ' +
- self._util_cc_helper.GetValueTypeString('%%(src_var)s', True)))
- .Append('return %(failure_value)s;')
- .Eblock('}')
+ self._util_cc_helper.GetValueTypeString('%%(src_var)s', True))))
+ # If an optional property fails to populate, the population can still
+ # succeed with a warning. If no error messages are generated, this
+ # warning is not set and we fail out instead.
+ if not self._generate_error_messages:
+ c.Append('return %(failure_value)s;')
+ (c.Eblock('}')
+ .Sblock('else {')
.Append('scoped_ptr<%(cpp_type)s> temp(new %(cpp_type)s());')
.Append('if (!%%(cpp_type)s::Populate(%s)) {' % self._GenerateArgs(
('*dictionary', 'temp.get()')))
.Append(' return %(failure_value)s;')
- .Append('}')
- .Append('%(dst_var)s = temp.Pass();')
+ )
+ (c.Append('}')
+ .Append('else')
+ .Append(' %(dst_var)s = temp.Pass();')
+ .Eblock('}')
)
else:
(c.Append('const base::DictionaryValue* dictionary = NULL;')
@@ -662,8 +760,13 @@ class _Generator(object):
.Concat(self._GenerateError(
'"\'%%(key)s\': expected list, got " + ' +
self._util_cc_helper.GetValueTypeString('%%(src_var)s', True)))
- .Append('return %(failure_value)s;')
- .Eblock('}'))
+ )
+ if is_ptr and self._generate_error_messages:
+ c.Append('%(dst_var)s.reset();')
+ else:
+ c.Append('return %(failure_value)s;')
+ c.Eblock('}')
+ c.Sblock('else {')
item_type = self._type_helper.FollowRef(underlying_type.item_type)
if item_type.property_type == PropertyType.ENUM:
c.Concat(self._GenerateListValueToEnumArrayConversion(
@@ -674,15 +777,17 @@ class _Generator(object):
is_ptr=is_ptr))
else:
(c.Sblock('if (!%s) {' % self._util_cc_helper.PopulateArrayFromList(
- underlying_type,
'list',
dst_var,
- is_ptr))
- .Concat(self._GenerateError(
+ is_ptr)))
+ c.Concat(self._GenerateError(
'"unable to populate array \'%%(parent_key)s\'"'))
- .Append('return %(failure_value)s;')
- .Eblock('}')
- )
+ if is_ptr and self._generate_error_messages:
+ c.Append('%(dst_var)s.reset();')
+ else:
+ c.Append('return %(failure_value)s;')
+ c.Eblock('}')
+ c.Eblock('}')
elif underlying_type.property_type == PropertyType.CHOICES:
if is_ptr:
(c.Append('scoped_ptr<%(cpp_type)s> temp(new %(cpp_type)s());')
@@ -696,19 +801,23 @@ class _Generator(object):
('*%(src_var)s', '&%(dst_var)s')))
.Append(' return %(failure_value)s;'))
elif underlying_type.property_type == PropertyType.ENUM:
- c.Concat(self._GenerateStringToEnumConversion(type_,
+ c.Concat(self._GenerateStringToEnumConversion(underlying_type,
src_var,
dst_var,
failure_value))
elif underlying_type.property_type == PropertyType.BINARY:
- (c.Sblock('if (!%(src_var)s->IsType(base::Value::TYPE_BINARY)) {')
+ (c.Append('const base::BinaryValue* binary_value = NULL;')
+ .Sblock('if (!%(src_var)s->IsType(base::Value::TYPE_BINARY)) {')
.Concat(self._GenerateError(
'"\'%%(key)s\': expected binary, got " + ' +
self._util_cc_helper.GetValueTypeString('%%(src_var)s', True)))
- .Append('return %(failure_value)s;')
- .Eblock('}')
- .Append('const base::BinaryValue* binary_value =')
- .Append(' static_cast<const base::BinaryValue*>(%(src_var)s);')
+ )
+ if not self._generate_error_messages:
+ c.Append('return %(failure_value)s;')
+ (c.Eblock('}')
+ .Sblock('else {')
+ .Append(' binary_value =')
+ .Append(' static_cast<const base::BinaryValue*>(%(src_var)s);')
)
if is_ptr:
(c.Append('%(dst_var)s.reset(')
@@ -719,16 +828,19 @@ class _Generator(object):
(c.Append('%(dst_var)s.assign(binary_value->GetBuffer(),')
.Append(' binary_value->GetSize());')
)
+ c.Eblock('}')
else:
raise NotImplementedError(type_)
- return c.Eblock('}').Substitute({
+ if c.IsEmpty():
+ return c
+ return Code().Sblock('{').Concat(c.Substitute({
'cpp_type': self._type_helper.GetCppType(type_),
'src_var': src_var,
'dst_var': dst_var,
'failure_value': failure_value,
'key': type_.name,
- 'parent_key': type_.parent.name
- })
+ 'parent_key': type_.parent.name,
+ })).Eblock('}')
def _GenerateListValueToEnumArrayConversion(self,
item_type,
@@ -768,8 +880,14 @@ class _Generator(object):
type |type_| in |dst_var|. In the generated code, if |src_var| is not
a valid enum name then the function will return |failure_value|.
"""
+ if type_.property_type != PropertyType.ENUM:
+ raise TypeError(type_)
c = Code()
enum_as_string = '%s_as_string' % type_.unix_name
+ cpp_type_namespace = ''
+ if type_.namespace != self._namespace:
+ cpp_type_namespace = '%s::' % type_.namespace.unix_name
+ cpp_type_name = self._type_helper.GetCppType(type_)
(c.Append('std::string %s;' % enum_as_string)
.Sblock('if (!%s->GetAsString(&%s)) {' % (src_var, enum_as_string))
.Concat(self._GenerateError(
@@ -777,11 +895,13 @@ class _Generator(object):
self._util_cc_helper.GetValueTypeString('%%(src_var)s', True)))
.Append('return %s;' % failure_value)
.Eblock('}')
- .Append('%s = Parse%s(%s);' % (dst_var,
- self._type_helper.GetCppType(type_),
- enum_as_string))
- .Sblock('if (%s == %s) {' % (dst_var,
- self._type_helper.GetEnumNoneValue(type_)))
+ .Append('%s = %sParse%s(%s);' % (dst_var,
+ cpp_type_namespace,
+ cpp_util.Classname(type_.name),
+ enum_as_string))
+ .Sblock('if (%s == %s%s) {' % (dst_var,
+ cpp_type_namespace,
+ self._type_helper.GetEnumNoneValue(type_)))
.Concat(self._GenerateError(
'\"\'%%(key)s\': expected \\"' +
'\\" or \\"'.join(
@@ -821,8 +941,11 @@ class _Generator(object):
(maybe_namespace, classname))
c.Sblock('switch (enum_param) {')
for enum_value in self._type_helper.FollowRef(type_).enum_values:
+ name = enum_value.name
+ if 'camel_case_enum_to_string' in self._namespace.compiler_options:
+ name = enum_value.CamelName()
(c.Append('case %s: ' % self._type_helper.GetEnumValue(type_, enum_value))
- .Append(' return "%s";' % enum_value.name))
+ .Append(' return "%s";' % name))
(c.Append('case %s:' % self._type_helper.GetEnumNoneValue(type_))
.Append(' return "";')
.Eblock('}')
@@ -858,7 +981,10 @@ class _Generator(object):
)
return c
- def _GenerateCreateCallbackArguments(self, function_scope, callback):
+ def _GenerateCreateCallbackArguments(self,
+ cpp_namespace,
+ function_scope,
+ callback):
"""Generate all functions to create Value parameters for a callback.
E.g for function "Bar", generate Bar::Results::Create
@@ -881,8 +1007,10 @@ class _Generator(object):
for param in params:
declaration_list.append(cpp_util.GetParameterDeclaration(
param, self._type_helper.GetCppType(param.type_)))
- c.Append('create_results->Append(%s);' %
- self._CreateValueFromType(param.type_, param.unix_name))
+ c.Cblock(self._CreateValueFromType('create_results->Append(%s);',
+ param.name,
+ param.type_,
+ param.unix_name))
c.Append('return create_results.Pass();')
c.Eblock('}')
c.Substitute({
@@ -925,8 +1053,9 @@ class _Generator(object):
c = Code()
if not self._generate_error_messages:
return c
- (c.Append('if (error)')
- .Append(' *error = UTF8ToUTF16(' + body + ');'))
+ (c.Append('if (error->length())')
+ .Append(' error->append(UTF8ToUTF16("; "));')
+ .Append('error->append(UTF8ToUTF16(%s));' % body))
return c
def _GenerateParams(self, params):
diff --git a/chromium/tools/json_schema_compiler/compiler.py b/chromium/tools/json_schema_compiler/compiler.py
index 21281fcdabf..98f44d743e4 100755
--- a/chromium/tools/json_schema_compiler/compiler.py
+++ b/chromium/tools/json_schema_compiler/compiler.py
@@ -38,14 +38,15 @@ def GenerateSchema(generator,
root,
destdir,
root_namespace,
- dart_overrides_dir):
- schema_loader = SchemaLoader(
- os.path.dirname(os.path.relpath(os.path.normpath(filenames[0]), root)),
- os.path.dirname(filenames[0]))
+ dart_overrides_dir,
+ impl_dir):
# Merge the source files into a single list of schemas.
api_defs = []
for filename in filenames:
schema = os.path.normpath(filename)
+ schema_loader = SchemaLoader(
+ os.path.dirname(os.path.relpath(os.path.normpath(filename), root)),
+ os.path.dirname(filename))
api_def = schema_loader.LoadSchema(os.path.split(schema)[1])
# If compiling the C++ model code, delete 'nocompile' nodes.
@@ -59,37 +60,40 @@ def GenerateSchema(generator,
# is the default one.
default_namespace = None
+ # If we have files from multiple source paths, we'll use the common parent
+ # path as the source directory.
+ src_path = None
+
# Load the actual namespaces into the model.
for target_namespace, schema_filename in zip(api_defs, filenames):
relpath = os.path.relpath(os.path.normpath(schema_filename), root)
namespace = api_model.AddNamespace(target_namespace,
relpath,
include_compiler_options=True)
+
if default_namespace is None:
default_namespace = namespace
+ if src_path is None:
+ src_path = namespace.source_file_dir
+ else:
+ src_path = os.path.commonprefix((src_path, namespace.source_file_dir))
+
path, filename = os.path.split(schema_filename)
short_filename, extension = os.path.splitext(filename)
- # Filenames are checked against the unix_names of the namespaces they
- # generate because the gyp uses the names of the JSON files to generate
- # the names of the .cc and .h files. We want these to be using unix_names.
- if namespace.unix_name != short_filename:
- sys.exit("Filename %s is illegal. Name files using unix_hacker style." %
- schema_filename)
-
# Construct the type generator with all the namespaces in this model.
type_generator = CppTypeGenerator(api_model,
schema_loader,
default_namespace=default_namespace)
-
if generator == 'cpp-bundle':
cpp_bundle_generator = CppBundleGenerator(root,
api_model,
api_defs,
type_generator,
root_namespace,
- namespace.source_file_dir)
+ src_path,
+ impl_dir)
generators = [
('generated_api.cc', cpp_bundle_generator.api_cc_generator),
('generated_api.h', cpp_bundle_generator.api_h_generator),
@@ -99,8 +103,8 @@ def GenerateSchema(generator,
elif generator == 'cpp':
cpp_generator = CppGenerator(type_generator, root_namespace)
generators = [
- ('%s.h' % namespace.unix_name, cpp_generator.h_generator),
- ('%s.cc' % namespace.unix_name, cpp_generator.cc_generator)
+ ('%s.h' % short_filename, cpp_generator.h_generator),
+ ('%s.cc' % short_filename, cpp_generator.cc_generator)
]
elif generator == 'dart':
generators = [
@@ -120,8 +124,10 @@ def GenerateSchema(generator,
for filename, generator in generators:
code = generator.Generate(namespace).Render()
if destdir:
- with open(os.path.join(destdir, namespace.source_file_dir,
- filename), 'w') as f:
+ output_dir = os.path.join(destdir, src_path)
+ if not os.path.exists(output_dir):
+ os.makedirs(output_dir)
+ with open(os.path.join(output_dir, filename), 'w') as f:
f.write(code)
output_code += [filename, '', code, '']
@@ -145,6 +151,8 @@ if __name__ == '__main__':
' %s' % GENERATORS)
parser.add_option('-D', '--dart-overrides-dir', dest='dart_overrides_dir',
help='Adds custom dart from files in the given directory (Dart only).')
+ parser.add_option('-i', '--impl-dir', dest='impl_dir',
+ help='The root path of all API implementations')
(opts, filenames) = parser.parse_args()
@@ -158,6 +166,7 @@ if __name__ == '__main__':
"Unless in bundle mode, only one file can be specified at a time.")
result = GenerateSchema(opts.generator, filenames, opts.root, opts.destdir,
- opts.namespace, opts.dart_overrides_dir)
+ opts.namespace, opts.dart_overrides_dir,
+ opts.impl_dir)
if not opts.destdir:
print result
diff --git a/chromium/tools/json_schema_compiler/cpp_bundle_generator.py b/chromium/tools/json_schema_compiler/cpp_bundle_generator.py
index 1cadff8348d..91ae920c32d 100644
--- a/chromium/tools/json_schema_compiler/cpp_bundle_generator.py
+++ b/chromium/tools/json_schema_compiler/cpp_bundle_generator.py
@@ -40,13 +40,15 @@ class CppBundleGenerator(object):
api_defs,
cpp_type_generator,
cpp_namespace,
- source_file_dir):
+ source_file_dir,
+ impl_dir):
self._root = root
self._model = model
self._api_defs = api_defs
self._cpp_type_generator = cpp_type_generator
self._cpp_namespace = cpp_namespace
self._source_file_dir = source_file_dir
+ self._impl_dir = impl_dir
self.api_cc_generator = _APICCGenerator(self)
self.api_h_generator = _APIHGenerator(self)
@@ -183,8 +185,9 @@ class _APICCGenerator(object):
namespace_name = namespace.unix_name.replace("experimental_", "")
implementation_header = namespace.compiler_options.get(
"implemented_in",
- "chrome/browser/extensions/api/%s/%s_api.h" % (namespace_name,
- namespace_name))
+ "%s/%s/%s_api.h" % (self._bundle._impl_dir,
+ namespace_name,
+ namespace_name))
if not os.path.exists(
os.path.join(self._bundle._root,
os.path.normpath(implementation_header))):
@@ -203,7 +206,7 @@ class _APICCGenerator(object):
c.Append("#endif // %s" % ifdefs, indent_level=0)
c.Append()
c.Append('#include '
- '"chrome/browser/extensions/extension_function_registry.h"')
+ '"extensions/browser/extension_function_registry.h"')
c.Append()
c.Concat(cpp_util.OpenNamespace(self._bundle._cpp_namespace))
c.Append()
@@ -271,10 +274,15 @@ class _SchemasCCGenerator(object):
json_content = json.dumps([_RemoveDescriptions(api)],
separators=(',', ':'))
# Escape all double-quotes and backslashes. For this to output a valid
- # JSON C string, we need to escape \ and ".
- json_content = json_content.replace('\\', '\\\\').replace('"', '\\"')
+ # JSON C string, we need to escape \ and ". Note that some schemas are
+ # too large to compile on windows. Split the JSON up into several
+ # strings, since apparently that helps.
+ max_length = 8192
+ segments = [json_content[i:i + max_length].replace('\\', '\\\\')
+ .replace('"', '\\"')
+ for i in xrange(0, len(json_content), max_length)]
c.Append('const char %s[] = "%s";' %
- (_FormatNameAsConstant(namespace.name), json_content))
+ (_FormatNameAsConstant(namespace.name), '" "'.join(segments)))
c.Append('}')
c.Concat(cpp_util.OpenNamespace(self._bundle._cpp_namespace))
c.Append()
diff --git a/chromium/tools/json_schema_compiler/cpp_type_generator.py b/chromium/tools/json_schema_compiler/cpp_type_generator.py
index d485b46c5cd..75972faf04c 100644
--- a/chromium/tools/json_schema_compiler/cpp_type_generator.py
+++ b/chromium/tools/json_schema_compiler/cpp_type_generator.py
@@ -59,13 +59,21 @@ class CppTypeGenerator(object):
"""
return '%s_NONE' % self.FollowRef(type_).unix_name.upper()
+ def GetEnumLastValue(self, type_):
+ """Gets the enum value in the given model.Property indicating the last value
+ for the type.
+ """
+ return '%s_LAST' % self.FollowRef(type_).unix_name.upper()
+
def GetEnumValue(self, type_, enum_value):
"""Gets the enum value of the given model.Property of the given type.
e.g VAR_STRING
"""
- value = '%s_%s' % (self.FollowRef(type_).unix_name.upper(),
- cpp_util.Classname(enum_value.name.upper()))
+ value = cpp_util.Classname(enum_value.name.upper())
+ prefix = (type_.cpp_enum_prefix_override or
+ self.FollowRef(type_).unix_name)
+ value = '%s_%s' % (prefix.upper(), value)
# To avoid collisions with built-in OS_* preprocessor definitions, we add a
# trailing slash to enum names that start with OS_.
if value.startswith("OS_"):
@@ -89,10 +97,7 @@ class CppTypeGenerator(object):
ref_type = self._FindType(type_.ref_type)
if ref_type is None:
raise KeyError('Cannot find referenced type: %s' % type_.ref_type)
- if self._default_namespace is ref_type.namespace:
- cpp_type = ref_type.name
- else:
- cpp_type = '%s::%s' % (ref_type.namespace.unix_name, ref_type.name)
+ cpp_type = self.GetCppType(ref_type)
elif type_.property_type == PropertyType.BOOLEAN:
cpp_type = 'bool'
elif type_.property_type == PropertyType.INTEGER:
@@ -103,13 +108,16 @@ class CppTypeGenerator(object):
cpp_type = 'double'
elif type_.property_type == PropertyType.STRING:
cpp_type = 'std::string'
- elif type_.property_type == PropertyType.ENUM:
- cpp_type = cpp_util.Classname(type_.name)
+ elif type_.property_type in (PropertyType.ENUM,
+ PropertyType.OBJECT,
+ PropertyType.CHOICES):
+ if self._default_namespace is type_.namespace:
+ cpp_type = cpp_util.Classname(type_.name)
+ else:
+ cpp_type = '%s::%s' % (type_.namespace.unix_name,
+ cpp_util.Classname(type_.name))
elif type_.property_type == PropertyType.ANY:
cpp_type = 'base::Value'
- elif (type_.property_type == PropertyType.OBJECT or
- type_.property_type == PropertyType.CHOICES):
- cpp_type = cpp_util.Classname(type_.name)
elif type_.property_type == PropertyType.FUNCTION:
# Functions come into the json schema compiler as empty objects. We can
# record these as empty DictionaryValues so that we know if the function
diff --git a/chromium/tools/json_schema_compiler/cpp_util.py b/chromium/tools/json_schema_compiler/cpp_util.py
index 1e7c3707883..e7c29ac0777 100644
--- a/chromium/tools/json_schema_compiler/cpp_util.py
+++ b/chromium/tools/json_schema_compiler/cpp_util.py
@@ -110,6 +110,10 @@ def OpenNamespace(namespace):
"""Get opening root namespace declarations.
"""
c = Code()
+ # In lieu of GYP supporting None for the namespace variable the '' namespace
+ # implies there is no root namespace.
+ if namespace == '':
+ return c
for component in namespace.split('::'):
c.Append('namespace %s {' % component)
return c
@@ -119,6 +123,10 @@ def CloseNamespace(namespace):
"""Get closing root namespace declarations.
"""
c = Code()
+ # In lieu of GYP supporting None for the namespace variable the '' namespace
+ # implies there is no root namespace.
+ if namespace == '':
+ return c
for component in reversed(namespace.split('::')):
c.Append('} // namespace %s' % component)
return c
diff --git a/chromium/tools/json_schema_compiler/dart_generator_test.py b/chromium/tools/json_schema_compiler/dart_generator_test.py
index fd88625fc05..b01d4674cc0 100755
--- a/chromium/tools/json_schema_compiler/dart_generator_test.py
+++ b/chromium/tools/json_schema_compiler/dart_generator_test.py
@@ -32,7 +32,7 @@ class DartTest(unittest.TestCase):
if REBASE_MODE:
output_dir = TESTS_DIR
output_code = GenerateSchema('dart', ['%s.idl' % file_rel], TESTS_DIR,
- output_dir, None, None)
+ output_dir, None, None, None)
if not REBASE_MODE:
with open('%s.dart' % file_rel) as f:
diff --git a/chromium/tools/json_schema_compiler/dart_test/comments.dart b/chromium/tools/json_schema_compiler/dart_test/comments.dart
index d734d56f522..2df51b042cb 100644
--- a/chromium/tools/json_schema_compiler/dart_test/comments.dart
+++ b/chromium/tools/json_schema_compiler/dart_test/comments.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
diff --git a/chromium/tools/json_schema_compiler/dart_test/dictionaries.dart b/chromium/tools/json_schema_compiler/dart_test/dictionaries.dart
index ebe92a6c1eb..d6b6874e808 100644
--- a/chromium/tools/json_schema_compiler/dart_test/dictionaries.dart
+++ b/chromium/tools/json_schema_compiler/dart_test/dictionaries.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
diff --git a/chromium/tools/json_schema_compiler/dart_test/empty_namespace.dart b/chromium/tools/json_schema_compiler/dart_test/empty_namespace.dart
index d2378a2860c..f6e48bee0aa 100644
--- a/chromium/tools/json_schema_compiler/dart_test/empty_namespace.dart
+++ b/chromium/tools/json_schema_compiler/dart_test/empty_namespace.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
diff --git a/chromium/tools/json_schema_compiler/dart_test/empty_type.dart b/chromium/tools/json_schema_compiler/dart_test/empty_type.dart
index ebe8e69659a..29e8df95c05 100644
--- a/chromium/tools/json_schema_compiler/dart_test/empty_type.dart
+++ b/chromium/tools/json_schema_compiler/dart_test/empty_type.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
diff --git a/chromium/tools/json_schema_compiler/dart_test/events.dart b/chromium/tools/json_schema_compiler/dart_test/events.dart
index d2e79ba1b31..14cb19b211d 100644
--- a/chromium/tools/json_schema_compiler/dart_test/events.dart
+++ b/chromium/tools/json_schema_compiler/dart_test/events.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
diff --git a/chromium/tools/json_schema_compiler/dart_test/functions.dart b/chromium/tools/json_schema_compiler/dart_test/functions.dart
index 2b4f02bc1c6..cea71fd6a84 100644
--- a/chromium/tools/json_schema_compiler/dart_test/functions.dart
+++ b/chromium/tools/json_schema_compiler/dart_test/functions.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
diff --git a/chromium/tools/json_schema_compiler/dart_test/operatable_type.dart b/chromium/tools/json_schema_compiler/dart_test/operatable_type.dart
index 725d6a68882..2cc9dc87bde 100644
--- a/chromium/tools/json_schema_compiler/dart_test/operatable_type.dart
+++ b/chromium/tools/json_schema_compiler/dart_test/operatable_type.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
diff --git a/chromium/tools/json_schema_compiler/dart_test/tags.dart b/chromium/tools/json_schema_compiler/dart_test/tags.dart
index 4c3514aeebf..e4adfd87c58 100644
--- a/chromium/tools/json_schema_compiler/dart_test/tags.dart
+++ b/chromium/tools/json_schema_compiler/dart_test/tags.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
diff --git a/chromium/tools/json_schema_compiler/h_generator.py b/chromium/tools/json_schema_compiler/h_generator.py
index 0a2dc89003c..fbb79e3f817 100644
--- a/chromium/tools/json_schema_compiler/h_generator.py
+++ b/chromium/tools/json_schema_compiler/h_generator.py
@@ -138,14 +138,18 @@ class _Generator(object):
return dependency_order
def _GenerateEnumDeclaration(self, enum_name, type_):
- """Generate the declaration of a C++ enum.
+ """Generate a code object with the declaration of a C++ enum.
"""
c = Code()
c.Sblock('enum %s {' % enum_name)
c.Append(self._type_helper.GetEnumNoneValue(type_) + ',')
for value in type_.enum_values:
- c.Append(self._type_helper.GetEnumValue(type_, value) + ',')
- return c.Eblock('};')
+ current_enum_string = self._type_helper.GetEnumValue(type_, value)
+ c.Append(current_enum_string + ',')
+ c.Append('%s = %s,' % (
+ self._type_helper.GetEnumLastValue(type_), current_enum_string))
+ c.Eblock('};')
+ return c
def _GenerateFields(self, props):
"""Generates the field declarations when declaring a type.
@@ -205,19 +209,15 @@ class _Generator(object):
elif type_.property_type == PropertyType.ENUM:
if type_.description:
c.Comment(type_.description)
- c.Sblock('enum %(classname)s {')
- c.Append('%s,' % self._type_helper.GetEnumNoneValue(type_))
- for value in type_.enum_values:
- c.Append('%s,' % self._type_helper.GetEnumValue(type_, value))
+ c.Cblock(self._GenerateEnumDeclaration(classname, type_));
# Top level enums are in a namespace scope so the methods shouldn't be
# static. On the other hand, those declared inline (e.g. in an object) do.
maybe_static = '' if is_toplevel else 'static '
- (c.Eblock('};')
- .Append()
+ (c.Append()
.Append('%sstd::string ToString(%s as_enum);' %
- (maybe_static, classname))
+ (maybe_static, classname))
.Append('%s%s Parse%s(const std::string& as_string);' %
- (maybe_static, classname, classname))
+ (maybe_static, classname, classname))
)
elif type_.property_type in (PropertyType.CHOICES,
PropertyType.OBJECT):
@@ -392,6 +392,11 @@ class _Generator(object):
def _GenerateParams(self, params):
"""Builds the parameter list for a function, given an array of parameters.
"""
+ # |error| is populated with warnings and/or errors found during parsing.
+ # |error| being set does not necessarily imply failure and may be
+ # recoverable.
+ # For example, optional properties may have failed to parse, but the
+ # parser was able to continue.
if self._generate_error_messages:
- params += ('base::string16* error = NULL',)
+ params += ('base::string16* error',)
return ', '.join(str(p) for p in params)
diff --git a/chromium/tools/json_schema_compiler/idl_schema.py b/chromium/tools/json_schema_compiler/idl_schema.py
index c6e49bf507b..89bb8816b0c 100644
--- a/chromium/tools/json_schema_compiler/idl_schema.py
+++ b/chromium/tools/json_schema_compiler/idl_schema.py
@@ -146,7 +146,9 @@ class Dictionary(object):
result = {'id': self.node.GetName(),
'properties': properties,
'type': 'object'}
- if self.node.GetProperty('inline_doc'):
+ if self.node.GetProperty('nodoc'):
+ result['nodoc'] = True
+ elif self.node.GetProperty('inline_doc'):
result['inline_doc'] = True
elif self.node.GetProperty('noinline_doc'):
result['noinline_doc'] = True
@@ -166,6 +168,8 @@ class Member(object):
def process(self, callbacks):
properties = OrderedDict()
name = self.node.GetName()
+ if self.node.GetProperty('deprecated'):
+ properties['deprecated'] = self.node.GetProperty('deprecated')
for property_name in ('OPTIONAL', 'nodoc', 'nocompile', 'nodart'):
if self.node.GetProperty(property_name):
properties[property_name.lower()] = True
@@ -214,7 +218,7 @@ class Typeref(object):
function parameter, converts into a Python dictionary that the JSON schema
compiler expects to see.
'''
- def __init__(self, typeref, parent, additional_properties=OrderedDict()):
+ def __init__(self, typeref, parent, additional_properties):
self.typeref = typeref
self.parent = parent
self.additional_properties = additional_properties
@@ -223,7 +227,7 @@ class Typeref(object):
properties = self.additional_properties
result = properties
- if self.parent.GetProperty('OPTIONAL'):
+ if self.parent.GetPropertyLocal('OPTIONAL'):
properties['optional'] = True
# The IDL parser denotes array types by adding a child 'Array' node onto
@@ -262,6 +266,13 @@ class Typeref(object):
if 'additionalProperties' not in properties:
properties['additionalProperties'] = OrderedDict()
properties['additionalProperties']['type'] = 'any'
+ elif self.parent.GetPropertyLocal('Union'):
+ choices = []
+ properties['choices'] = [Typeref(node.GetProperty('TYPEREF'),
+ node,
+ OrderedDict()).process(callbacks)
+ for node in self.parent.GetChildren()
+ if node.cls == 'Option']
elif self.typeref is None:
properties['type'] = 'function'
else:
@@ -307,9 +318,12 @@ class Enum(object):
'description': self.description,
'type': 'string',
'enum': enum}
- for property_name in ('inline_doc', 'noinline_doc', 'nodoc'):
+ for property_name in (
+ 'inline_doc', 'noinline_doc', 'nodoc', 'cpp_enum_prefix_override',):
if self.node.GetProperty(property_name):
- result[property_name] = True
+ result[property_name] = self.node.GetProperty(property_name)
+ if self.node.GetProperty('deprecated'):
+ result[deprecated] = self.node.GetProperty('deprecated')
return result
@@ -325,7 +339,8 @@ class Namespace(object):
nodoc=False,
internal=False,
platforms=None,
- compiler_options=None):
+ compiler_options=None,
+ deprecated=None):
self.namespace = namespace_node
self.nodoc = nodoc
self.internal = internal
@@ -336,6 +351,7 @@ class Namespace(object):
self.types = []
self.callbacks = OrderedDict()
self.description = description
+ self.deprecated = deprecated
def process(self):
for node in self.namespace.GetChildren():
@@ -364,7 +380,8 @@ class Namespace(object):
'internal': self.internal,
'events': self.events,
'platforms': self.platforms,
- 'compiler_options': compiler_options}
+ 'compiler_options': compiler_options,
+ 'deprecated': self.deprecated}
def process_interface(self, node):
members = []
@@ -390,7 +407,8 @@ class IDLSchema(object):
internal = False
description = None
platforms = None
- compiler_options = None
+ compiler_options = {}
+ deprecated = None
for node in self.idl:
if node.cls == 'Namespace':
if not description:
@@ -400,7 +418,8 @@ class IDLSchema(object):
description = ''
namespace = Namespace(node, description, nodoc, internal,
platforms=platforms,
- compiler_options=compiler_options)
+ compiler_options=compiler_options or None,
+ deprecated=deprecated)
namespaces.append(namespace.process())
nodoc = False
internal = False
@@ -418,7 +437,11 @@ class IDLSchema(object):
elif node.name == 'platforms':
platforms = list(node.value)
elif node.name == 'implemented_in':
- compiler_options = {'implemented_in': node.value}
+ compiler_options['implemented_in'] = node.value
+ elif node.name == 'camel_case_enum_to_string':
+ compiler_options['camel_case_enum_to_string'] = node.value
+ elif node.name == 'deprecated':
+ deprecated = str(node.value)
else:
continue
else:
@@ -446,8 +469,14 @@ def Main():
Dump a json serialization of parse result for the IDL files whose names
were passed in on the command line.
'''
- for filename in sys.argv[1:]:
- schema = Load(filename)
+ if len(sys.argv) > 1:
+ for filename in sys.argv[1:]:
+ schema = Load(filename)
+ print json.dumps(schema, indent=2)
+ else:
+ contents = sys.stdin.read()
+ idl = idl_parser.IDLParser().ParseData(contents, '<stdin>')
+ schema = IDLSchema(idl).process()
print json.dumps(schema, indent=2)
diff --git a/chromium/tools/json_schema_compiler/idl_schema_test.py b/chromium/tools/json_schema_compiler/idl_schema_test.py
index 212efdc6713..85a689e6287 100755
--- a/chromium/tools/json_schema_compiler/idl_schema_test.py
+++ b/chromium/tools/json_schema_compiler/idl_schema_test.py
@@ -6,6 +6,8 @@
import idl_schema
import unittest
+from json_parse import OrderedDict
+
def getFunction(schema, name):
for item in schema['functions']:
if item['name'] == name:
@@ -35,33 +37,34 @@ class IdlSchemaTest(unittest.TestCase):
self.assertEquals(1, len(loaded))
self.assertEquals('idl_basics', loaded[0]['namespace'])
self.idl_basics = loaded[0]
+ self.maxDiff = None
def testSimpleCallbacks(self):
schema = self.idl_basics
- expected = [{'type':'function', 'name':'cb', 'parameters':[]}]
+ expected = [{'type': 'function', 'name': 'cb', 'parameters':[]}]
self.assertEquals(expected, getParams(schema, 'function4'))
- expected = [{'type':'function', 'name':'cb',
- 'parameters':[{'name':'x', 'type':'integer'}]}]
+ expected = [{'type': 'function', 'name': 'cb',
+ 'parameters':[{'name': 'x', 'type': 'integer'}]}]
self.assertEquals(expected, getParams(schema, 'function5'))
- expected = [{'type':'function', 'name':'cb',
- 'parameters':[{'name':'arg', '$ref':'MyType1'}]}]
+ expected = [{'type': 'function', 'name': 'cb',
+ 'parameters':[{'name': 'arg', '$ref': 'MyType1'}]}]
self.assertEquals(expected, getParams(schema, 'function6'))
def testCallbackWithArrayArgument(self):
schema = self.idl_basics
- expected = [{'type':'function', 'name':'cb',
- 'parameters':[{'name':'arg', 'type':'array',
- 'items':{'$ref':'MyType2'}}]}]
+ expected = [{'type': 'function', 'name': 'cb',
+ 'parameters':[{'name': 'arg', 'type': 'array',
+ 'items':{'$ref': 'MyType2'}}]}]
self.assertEquals(expected, getParams(schema, 'function12'))
def testArrayOfCallbacks(self):
- schema = idl_schema.Load('test/idl_callback_arrays.idl')[0]
- expected = [{'type':'array', 'name':'callbacks',
- 'items':{'type':'function', 'name':'MyCallback',
- 'parameters':[{'type':'integer', 'name':'x'}]}}]
+ schema = idl_schema.Load('test/idl_function_types.idl')[0]
+ expected = [{'type': 'array', 'name': 'callbacks',
+ 'items':{'type': 'function', 'name': 'MyCallback',
+ 'parameters':[{'type': 'integer', 'name': 'x'}]}}]
self.assertEquals(expected, getParams(schema, 'whatever'))
def testLegalValues(self):
@@ -88,15 +91,35 @@ class IdlSchemaTest(unittest.TestCase):
'type': 'string', 'id': 'EnumType'}
self.assertEquals(expected, getType(schema, expected['id']))
- expected = [{'name':'type', '$ref':'EnumType'},
- {'type':'function', 'name':'cb',
- 'parameters':[{'name':'type', '$ref':'EnumType'}]}]
+ expected = [{'name': 'type', '$ref': 'EnumType'},
+ {'type': 'function', 'name': 'cb',
+ 'parameters':[{'name': 'type', '$ref': 'EnumType'}]}]
self.assertEquals(expected, getParams(schema, 'function13'))
expected = [{'items': {'$ref': 'EnumType'}, 'name': 'types',
'type': 'array'}]
self.assertEquals(expected, getParams(schema, 'function14'))
+ def testScopedArguments(self):
+ schema = self.idl_basics
+ expected = [{'name': 'value', '$ref': 'idl_other_namespace.SomeType'}]
+ self.assertEquals(expected, getParams(schema, 'function20'))
+
+ expected = [{'items': {'$ref': 'idl_other_namespace.SomeType'},
+ 'name': 'values',
+ 'type': 'array'}]
+ self.assertEquals(expected, getParams(schema, 'function21'))
+
+ expected = [{'name': 'value',
+ '$ref': 'idl_other_namespace.sub_namespace.AnotherType'}]
+ self.assertEquals(expected, getParams(schema, 'function22'))
+
+ expected = [{'items': {'$ref': 'idl_other_namespace.sub_namespace.'
+ 'AnotherType'},
+ 'name': 'values',
+ 'type': 'array'}]
+ self.assertEquals(expected, getParams(schema, 'function23'))
+
def testNoCompile(self):
schema = self.idl_basics
func = getFunction(schema, 'function15')
@@ -117,20 +140,27 @@ class IdlSchemaTest(unittest.TestCase):
def testReturnTypes(self):
schema = self.idl_basics
- self.assertEquals({'name': 'function19', 'type': 'integer'},
- getReturns(schema, 'function19'))
- self.assertEquals({'name': 'function20', '$ref': 'MyType1',
+ self.assertEquals({'name': 'function24', 'type': 'integer'},
+ getReturns(schema, 'function24'))
+ self.assertEquals({'name': 'function25', '$ref': 'MyType1',
'optional': True},
- getReturns(schema, 'function20'))
- self.assertEquals({'name': 'function21', 'type': 'array',
+ getReturns(schema, 'function25'))
+ self.assertEquals({'name': 'function26', 'type': 'array',
'items': {'$ref': 'MyType1'}},
- getReturns(schema, 'function21'))
- self.assertEquals({'name': 'function22', '$ref': 'EnumType',
+ getReturns(schema, 'function26'))
+ self.assertEquals({'name': 'function27', '$ref': 'EnumType',
'optional': True},
- getReturns(schema, 'function22'))
- self.assertEquals({'name': 'function23', 'type': 'array',
+ getReturns(schema, 'function27'))
+ self.assertEquals({'name': 'function28', 'type': 'array',
'items': {'$ref': 'EnumType'}},
- getReturns(schema, 'function23'))
+ getReturns(schema, 'function28'))
+ self.assertEquals({'name': 'function29', '$ref':
+ 'idl_other_namespace.SomeType',
+ 'optional': True},
+ getReturns(schema, 'function29'))
+ self.assertEquals({'name': 'function30', 'type': 'array',
+ 'items': {'$ref': 'idl_other_namespace.SomeType'}},
+ getReturns(schema, 'function30'))
def testChromeOSPlatformsNamespace(self):
schema = idl_schema.Load('test/idl_namespace_chromeos.idl')[0]
@@ -221,6 +251,145 @@ class IdlSchemaTest(unittest.TestCase):
self.assertEquals('Foo', params[0]['$ref'])
self.assertEquals('enum', params[1]['$ref'])
+ def testObjectTypes(self):
+ schema = idl_schema.Load('test/idl_object_types.idl')[0]
+
+ foo_type = getType(schema, 'FooType')
+ self.assertEquals('object', foo_type['type'])
+ self.assertEquals('integer', foo_type['properties']['x']['type'])
+ self.assertEquals('object', foo_type['properties']['y']['type'])
+ self.assertEquals(
+ 'any',
+ foo_type['properties']['y']['additionalProperties']['type'])
+ self.assertEquals('object', foo_type['properties']['z']['type'])
+ self.assertEquals(
+ 'any',
+ foo_type['properties']['z']['additionalProperties']['type'])
+ self.assertEquals('Window', foo_type['properties']['z']['isInstanceOf'])
+
+ bar_type = getType(schema, 'BarType')
+ self.assertEquals('object', bar_type['type'])
+ self.assertEquals('any', bar_type['properties']['x']['type'])
+
+ def testObjectTypesInFunctions(self):
+ schema = idl_schema.Load('test/idl_object_types.idl')[0]
+
+ params = getParams(schema, 'objectFunction1')
+ self.assertEquals('object', params[0]['type'])
+ self.assertEquals('any', params[0]['additionalProperties']['type'])
+ self.assertEquals('ImageData', params[0]['isInstanceOf'])
+
+ params = getParams(schema, 'objectFunction2')
+ self.assertEquals('any', params[0]['type'])
+
+ def testObjectTypesWithOptionalFields(self):
+ schema = idl_schema.Load('test/idl_object_types.idl')[0]
+
+ baz_type = getType(schema, 'BazType')
+ self.assertEquals(True, baz_type['properties']['x']['optional'])
+ self.assertEquals('integer', baz_type['properties']['x']['type'])
+ self.assertEquals(True, baz_type['properties']['foo']['optional'])
+ self.assertEquals('FooType', baz_type['properties']['foo']['$ref'])
+
+ def testObjectTypesWithUnions(self):
+ schema = idl_schema.Load('test/idl_object_types.idl')[0]
+
+ union_type = getType(schema, 'UnionType')
+ expected = {
+ 'type': 'object',
+ 'id': 'UnionType',
+ 'properties': {
+ 'x': {
+ 'name': 'x',
+ 'optional': True,
+ 'choices': [
+ {'type': 'integer'},
+ {'$ref': 'FooType'},
+ ]
+ },
+ 'y': {
+ 'name': 'y',
+ 'choices': [
+ {'type': 'string'},
+ {'type': 'object',
+ 'additionalProperties': {'type': 'any'}}
+ ]
+ },
+ 'z': {
+ 'name': 'z',
+ 'choices': [
+ {'type': 'object', 'isInstanceOf': 'ImageData',
+ 'additionalProperties': {'type': 'any'}},
+ {'type': 'integer'}
+ ]
+ }
+ },
+ }
+
+ self.assertEquals(expected, union_type)
+
+ def testUnionsWithModifiers(self):
+ schema = idl_schema.Load('test/idl_object_types.idl')[0]
+
+ union_type = getType(schema, 'ModifiedUnionType')
+ expected = {
+ 'type': 'object',
+ 'id': 'ModifiedUnionType',
+ 'properties': {
+ 'x': {
+ 'name': 'x',
+ 'nodoc': True,
+ 'choices': [
+ {'type': 'integer'},
+ {'type': 'string'}
+ ]
+ }
+ }
+ }
+
+ self.assertEquals(expected, union_type)
+
+ def testUnionsWithFunctions(self):
+ schema = idl_schema.Load('test/idl_function_types.idl')[0]
+
+ union_params = getParams(schema, 'union_params')
+ expected = [{
+ 'name': 'x',
+ 'choices': [
+ {'type': 'integer'},
+ {'type': 'string'}
+ ]
+ }]
+
+ self.assertEquals(expected, union_params)
+
+ def testUnionsWithCallbacks(self):
+ schema = idl_schema.Load('test/idl_function_types.idl')[0]
+
+ blah_params = getParams(schema, 'blah')
+ expected = [{
+ 'type': 'function', 'name': 'callback', 'parameters': [{
+ 'name': 'x',
+ 'choices': [
+ {'type': 'integer'},
+ {'type': 'string'}
+ ]}
+ ]
+ }]
+ self.assertEquals(expected, blah_params)
+
+ badabish_params = getParams(schema, 'badabish')
+ expected = [{
+ 'type': 'function', 'name': 'callback', 'parameters': [{
+ 'name': 'x', 'optional': True, 'choices': [
+ {'type': 'integer'},
+ {'type': 'string'}
+ ]
+ }]
+ }]
+
+ self.assertEquals(expected, badabish_params)
+
if __name__ == '__main__':
unittest.main()
diff --git a/chromium/tools/json_schema_compiler/model.py b/chromium/tools/json_schema_compiler/model.py
index dd68e9b1056..ed8a2ec404e 100644
--- a/chromium/tools/json_schema_compiler/model.py
+++ b/chromium/tools/json_schema_compiler/model.py
@@ -81,6 +81,7 @@ class Namespace(object):
Properties:
- |name| the name of the namespace
- |description| the description of the namespace
+ - |deprecated| a reason and possible alternative for a deprecated api
- |unix_name| the unix_name of the namespace
- |source_file| the file that contained the namespace definition
- |source_file_dir| the directory component of |source_file|
@@ -102,9 +103,11 @@ class Namespace(object):
'on the API summary page.' % self.name)
json['description'] = ''
self.description = json['description']
+ self.deprecated = json.get('deprecated', None)
self.unix_name = UnixName(self.name)
self.source_file = source_file
self.source_file_dir, self.source_file_filename = os.path.split(source_file)
+ self.short_filename = os.path.basename(source_file).split('.')[0]
self.parent = None
self.platforms = _GetPlatforms(json)
toplevel_origin = Origin(from_client=True, from_json=True)
@@ -187,6 +190,7 @@ class Type(object):
elif 'enum' in json and json_type == 'string':
self.property_type = PropertyType.ENUM
self.enum_values = [EnumValue(value) for value in json['enum']]
+ self.cpp_enum_prefix_override = json.get('cpp_enum_prefix_override', None)
elif json_type == 'any':
self.property_type = PropertyType.ANY
elif json_type == 'binary':
@@ -406,6 +410,9 @@ class EnumValue(object):
self.name = json
self.description = None
+ def CamelName(self):
+ return CamelName(self.name)
+
class _Enum(object):
"""Superclass for enum types with a "name" field, setting up repr/eq/ne.
Enums need to do this so that equality/non-equality work over pickling.
@@ -480,6 +487,19 @@ def UnixName(name):
return ''.join(unix_name)
+@memoize
+def CamelName(snake):
+ ''' Converts a snake_cased_string to a camelCasedOne. '''
+ pieces = snake.split('_')
+ camel = []
+ for i, piece in enumerate(pieces):
+ if i == 0:
+ camel.append(piece)
+ else:
+ camel.append(piece.capitalize())
+ return ''.join(camel)
+
+
def _StripNamespace(name, namespace):
if name.startswith(namespace.name + '.'):
return name[len(namespace.name + '.'):]
diff --git a/chromium/tools/json_schema_compiler/model_test.py b/chromium/tools/json_schema_compiler/model_test.py
index 0e398a5a5bb..75ed9c5817f 100755
--- a/chromium/tools/json_schema_compiler/model_test.py
+++ b/chromium/tools/json_schema_compiler/model_test.py
@@ -118,6 +118,21 @@ class ModelTest(unittest.TestCase):
for name in expectations:
self.assertEquals(expectations[name], model.UnixName(name))
+ def testCamelName(self):
+ expectations = {
+ 'foo': 'foo',
+ 'fooBar': 'fooBar',
+ 'foo_bar_baz': 'fooBarBaz',
+ 'FOO_BAR': 'FOOBar',
+ 'FOO_bar': 'FOOBar',
+ '_bar': 'Bar',
+ '_bar_baz': 'BarBaz',
+ 'bar_': 'bar',
+ 'bar_baz_': 'barBaz',
+ }
+ for testcase, expected in expectations.iteritems():
+ self.assertEquals(expected, model.CamelName(testcase))
+
def testPlatforms(self):
self.assertEqual([Platforms.CHROMEOS],
self.idl_namespace_chromeos.platforms)
diff --git a/chromium/tools/json_schema_compiler/schema_loader.py b/chromium/tools/json_schema_compiler/schema_loader.py
index 9fea1ab8250..358381f847f 100644
--- a/chromium/tools/json_schema_compiler/schema_loader.py
+++ b/chromium/tools/json_schema_compiler/schema_loader.py
@@ -3,11 +3,12 @@
# found in the LICENSE file.
import os
+import re
import sys
import idl_schema
import json_schema
-from model import Model
+from model import Model, UnixName
class SchemaLoader(object):
'''Resolves a type name into the namespace the type belongs to.
@@ -30,8 +31,13 @@ class SchemaLoader(object):
return default_namespace
namespace_name, type_name = name_parts
real_name = None
+ # Try to find the file defining the namespace. Eg. for
+ # nameSpace.sub_name_space.Type' the following heuristics looks for:
+ # 1. name_space_sub_name_space.json,
+ # 2. name_space_sub_name_space.idl.
for ext in ['json', 'idl']:
- filename = '%s.%s' % (namespace_name, ext)
+ basename = UnixName(namespace_name)
+ filename = '%s.%s' % (basename, ext)
filepath = os.path.join(self._real_path, filename);
if os.path.exists(filepath):
real_name = filename
diff --git a/chromium/tools/json_schema_compiler/test/json_schema_compiler_tests.gyp b/chromium/tools/json_schema_compiler/test/json_schema_compiler_tests.gyp
index 27ec4385be8..9eb325050db 100644
--- a/chromium/tools/json_schema_compiler/test/json_schema_compiler_tests.gyp
+++ b/chromium/tools/json_schema_compiler/test/json_schema_compiler_tests.gyp
@@ -20,6 +20,8 @@
'functions_as_parameters.json',
'functions_on_types.json',
'idl_basics.idl',
+ 'idl_other_namespace.idl',
+ 'idl_other_namespace_sub_namespace.idl',
'idl_object_types.idl',
'objects.json',
'simple_api.json',
diff --git a/chromium/tools/json_schema_compiler/util.cc b/chromium/tools/json_schema_compiler/util.cc
index d0e77659e6a..2806cfcf0f9 100644
--- a/chromium/tools/json_schema_compiler/util.cc
+++ b/chromium/tools/json_schema_compiler/util.cc
@@ -70,23 +70,23 @@ void AddItemToList(const linked_ptr<base::DictionaryValue>& from,
out->Append(static_cast<base::Value*>(from->DeepCopy()));
}
-std::string ValueTypeToString(Value::Type type) {
+std::string ValueTypeToString(base::Value::Type type) {
switch(type) {
- case Value::TYPE_NULL:
+ case base::Value::TYPE_NULL:
return "null";
- case Value::TYPE_BOOLEAN:
+ case base::Value::TYPE_BOOLEAN:
return "boolean";
- case Value::TYPE_INTEGER:
+ case base::Value::TYPE_INTEGER:
return "integer";
- case Value::TYPE_DOUBLE:
+ case base::Value::TYPE_DOUBLE:
return "number";
- case Value::TYPE_STRING:
+ case base::Value::TYPE_STRING:
return "string";
- case Value::TYPE_BINARY:
+ case base::Value::TYPE_BINARY:
return "binary";
- case Value::TYPE_DICTIONARY:
+ case base::Value::TYPE_DICTIONARY:
return "dictionary";
- case Value::TYPE_LIST:
+ case base::Value::TYPE_LIST:
return "list";
}
NOTREACHED();
diff --git a/chromium/tools/json_schema_compiler/util.h b/chromium/tools/json_schema_compiler/util.h
index b775be7e0cc..228ecedba6b 100644
--- a/chromium/tools/json_schema_compiler/util.h
+++ b/chromium/tools/json_schema_compiler/util.h
@@ -173,7 +173,7 @@ scoped_ptr<base::Value> CreateValueFromOptionalArray(
return scoped_ptr<base::Value>();
}
-std::string ValueTypeToString(Value::Type type);
+std::string ValueTypeToString(base::Value::Type type);
} // namespace util
} // namespace json_schema_compiler
diff --git a/chromium/tools/json_schema_compiler/util_cc_helper.py b/chromium/tools/json_schema_compiler/util_cc_helper.py
index df5b6de0f50..0e41abfa12b 100644
--- a/chromium/tools/json_schema_compiler/util_cc_helper.py
+++ b/chromium/tools/json_schema_compiler/util_cc_helper.py
@@ -2,7 +2,8 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-API_UTIL_NAMESPACE = 'json_schema_compiler::util'
+_API_UTIL_NAMESPACE = 'json_schema_compiler::util'
+
class UtilCCHelper(object):
"""A util class that generates code that uses
@@ -19,7 +20,7 @@ class UtilCCHelper(object):
"""
prop = array_prop.item_type
sub = {
- 'namespace': API_UTIL_NAMESPACE,
+ 'namespace': _API_UTIL_NAMESPACE,
'name': name,
'src': src,
'dst': dst,
@@ -35,45 +36,34 @@ class UtilCCHelper(object):
return val % sub
- def PopulateArrayFromList(self, array_prop, src, dst, optional):
+ def PopulateArrayFromList(self, src, dst, optional):
"""Generates code to get an array from src into dst.
src: ListValue*
dst: std::vector or scoped_ptr<std::vector>
"""
- prop = array_prop.item_type
- sub = {
- 'namespace': API_UTIL_NAMESPACE,
- 'src': src,
- 'dst': dst,
- 'type': self._type_manager.GetCppType(prop),
- }
-
if optional:
val = '%(namespace)s::PopulateOptionalArrayFromList(*%(src)s, &%(dst)s)'
else:
val = '%(namespace)s::PopulateArrayFromList(*%(src)s, &%(dst)s)'
+ return val % {
+ 'namespace': _API_UTIL_NAMESPACE,
+ 'src': src,
+ 'dst': dst
+ }
- return val % sub
-
- def CreateValueFromArray(self, array_prop, src, optional):
+ def CreateValueFromArray(self, src, optional):
"""Generates code to create a scoped_pt<Value> from the array at src.
- src: std::vector or scoped_ptr<std::vector>
+ |src| The variable to convert, either a vector or scoped_ptr<vector>.
+ |optional| Whether |type_| was optional. Optional types are pointers so
+ must be treated differently.
"""
- prop = array_prop.item_type
- sub = {
- 'namespace': API_UTIL_NAMESPACE,
- 'src': src,
- 'type': self._type_manager.GetCppType(prop),
- }
-
if optional:
- val = '%(namespace)s::CreateValueFromOptionalArray(%(src)s)'
+ name = 'CreateValueFromOptionalArray'
else:
- val = '%(namespace)s::CreateValueFromArray(%(src)s)'
-
- return val % sub
+ name = 'CreateValueFromArray'
+ return '%s::%s(%s)' % (_API_UTIL_NAMESPACE, name, src)
def GetIncludePath(self):
return '#include "tools/json_schema_compiler/util.h"'
diff --git a/chromium/tools/json_to_struct/PRESUBMIT.py b/chromium/tools/json_to_struct/PRESUBMIT.py
deleted file mode 100644
index dd4d9a46ba9..00000000000
--- a/chromium/tools/json_to_struct/PRESUBMIT.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright 2012 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.
-
-"""Presubmit script for changes affecting tools/json_to_struct/
-
-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
-for more details about the presubmit API built into gcl.
-"""
-
-WHITELIST = [ r'.+_test.py$' ]
-
-def CheckChangeOnUpload(input_api, output_api):
- return input_api.canned_checks.RunUnitTestsInDirectory(
- input_api, output_api, '.', whitelist=WHITELIST)
-
-
-def CheckChangeOnCommit(input_api, output_api):
- return input_api.canned_checks.RunUnitTestsInDirectory(
- input_api, output_api, '.', whitelist=WHITELIST)
diff --git a/chromium/tools/json_to_struct/element_generator.py b/chromium/tools/json_to_struct/element_generator.py
deleted file mode 100644
index 20d3069a1c0..00000000000
--- a/chromium/tools/json_to_struct/element_generator.py
+++ /dev/null
@@ -1,122 +0,0 @@
-# Copyright (c) 2012 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.
-
-import json
-import struct_generator
-
-def _JSONToCString16(json_string_literal):
- """Converts a JSON string literal to a C++ UTF-16 string literal. This is
- done by converting \\u#### to \\x####.
- """
- c_string_literal = json_string_literal
- escape_index = c_string_literal.find('\\')
- while escape_index > 0:
- if c_string_literal[escape_index + 1] == 'u':
- # We close the C string literal after the 4 hex digits and reopen it right
- # after, otherwise the Windows compiler will sometimes try to get more
- # than 4 characters in the hex string.
- c_string_literal = (c_string_literal[0:escape_index + 1] + 'x' +
- c_string_literal[escape_index + 2:escape_index + 6] + '" L"' +
- c_string_literal[escape_index + 6:])
- escape_index = c_string_literal.find('\\', escape_index + 6)
- return c_string_literal
-
-def _GenerateString(content, lines):
- """Generates an UTF-8 string to be included in a static structure initializer.
- If content is not specified, uses NULL.
- """
- if content is None:
- lines.append(' NULL,')
- else:
- # json.dumps quotes the string and escape characters as required.
- lines.append(' %s,' % json.dumps(content))
-
-def _GenerateString16(content, lines):
- """Generates an UTF-16 string to be included in a static structure
- initializer. If content is not specified, uses NULL.
- """
- if content is None:
- lines.append(' NULL,')
- else:
- # json.dumps quotes the string and escape characters as required.
- lines.append(' L%s,' % _JSONToCString16(json.dumps(content)))
-
-def _GenerateArray(element_name, field_info, content, lines):
- """Generates an array to be included in a static structure initializer. If
- content is not specified, uses NULL. The array is assigned to a temporary
- variable which is initialized before the structure.
- """
- if content is None:
- lines.append(' NULL,')
- lines.append(' 0,') # Size of the array.
- return
-
- # Create a new array variable and use it in the structure initializer.
- # This prohibits nested arrays. Add a clash detection and renaming mechanism
- # to solve the problem.
- var = 'array_%s_%s' % (element_name, field_info['field']);
- lines.append(' %s,' % var)
- lines.append(' %s,' % len(content)) # Size of the array.
- # Generate the array content.
- array_lines = []
- field_info['contents']['field'] = var;
- array_lines.append(struct_generator.GenerateField(
- field_info['contents']) + '[] = {')
- for subcontent in content:
- GenerateFieldContent(element_name, field_info['contents'], subcontent,
- array_lines)
- array_lines.append('};')
- # Prepend the generated array so it is initialized before the structure.
- lines.reverse()
- array_lines.reverse()
- lines.extend(array_lines)
- lines.reverse()
-
-def GenerateFieldContent(element_name, field_info, content, lines):
- """Generate the content of a field to be included in the static structure
- initializer. If the field's content is not specified, uses the default value
- if one exists.
- """
- if content is None:
- content = field_info.get('default', None)
- type = field_info['type']
- if type == 'int' or type == 'enum':
- lines.append(' %s,' % content)
- elif type == 'string':
- _GenerateString(content, lines)
- elif type == 'string16':
- _GenerateString16(content, lines)
- elif type == 'array':
- _GenerateArray(element_name, field_info, content, lines)
- else:
- raise RuntimeError('Unknown field type "%s"' % type)
-
-def GenerateElement(type_name, schema, element_name, element):
- """Generate the static structure initializer for one element.
- """
- lines = [];
- lines.append('const %s %s = {' % (type_name, element_name));
- for field_info in schema:
- content = element.get(field_info['field'], None)
- if (content == None and not field_info.get('optional', False)):
- raise RuntimeError('Mandatory field "%s" omitted in element "%s".' %
- (field_info['field'], element_name))
- GenerateFieldContent(element_name, field_info, content, lines)
- lines.append('};')
- return '\n'.join(lines)
-
-def GenerateElements(type_name, schema, description):
- """Generate the static structure initializer for all the elements in the
- description['elements'] dictionary, as well as for any variables in
- description['int_variables'].
- """
- result = [];
- for var_name, value in description.get('int_variables', {}).items():
- result.append('const int %s = %s;' % (var_name, value))
- result.append('')
-
- for element_name, element in description.get('elements', {}).items():
- result.append(GenerateElement(type_name, schema, element_name, element))
- result.append('')
- return '\n'.join(result)
diff --git a/chromium/tools/json_to_struct/element_generator_test.py b/chromium/tools/json_to_struct/element_generator_test.py
deleted file mode 100755
index 67459a1d871..00000000000
--- a/chromium/tools/json_to_struct/element_generator_test.py
+++ /dev/null
@@ -1,160 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-from element_generator import GenerateFieldContent
-from element_generator import GenerateElements
-import unittest
-
-class ElementGeneratorTest(unittest.TestCase):
- def testGenerateIntFieldContent(self):
- lines = [];
- GenerateFieldContent('', {'type': 'int', 'default': 5}, None, lines)
- self.assertEquals([' 5,'], lines)
- lines = [];
- GenerateFieldContent('', {'type': 'int', 'default': 5}, 12, lines)
- self.assertEquals([' 12,'], lines)
- lines = [];
- GenerateFieldContent('', {'type': 'int'}, -3, lines)
- self.assertEquals([' -3,'], lines)
-
- def testGenerateStringFieldContent(self):
- lines = [];
- GenerateFieldContent('', {'type': 'string', 'default': 'foo_bar'}, None,
- lines)
- self.assertEquals([' "foo_bar",'], lines)
- lines = [];
- GenerateFieldContent('', {'type': 'string', 'default': 'foo'}, 'bar\n',
- lines)
- self.assertEquals([' "bar\\n",'], lines)
- lines = [];
- GenerateFieldContent('', {'type': 'string'}, None, lines)
- self.assertEquals([' NULL,'], lines)
- lines = [];
- GenerateFieldContent('', {'type': 'string'}, 'foo', lines)
- self.assertEquals([' "foo",'], lines)
-
- def testGenerateString16FieldContent(self):
- lines = [];
- GenerateFieldContent('', {'type': 'string16',
- 'default': u'f\u00d8\u00d81a'}, None, lines)
- self.assertEquals([' L"f\\x00d8" L"\\x00d8" L"1a",'], lines)
- lines = [];
- GenerateFieldContent('', {'type': 'string16', 'default': 'foo'},
- u'b\uc3a5r', lines)
- self.assertEquals([' L"b\\xc3a5" L"r",'], lines)
- lines = [];
- GenerateFieldContent('', {'type': 'string16'}, None, lines)
- self.assertEquals([' NULL,'], lines)
- lines = [];
- GenerateFieldContent('', {'type': 'string16'}, u'foo\\u1234', lines)
- self.assertEquals([' L"foo\\\\u1234",'], lines)
-
- def testGenerateEnumFieldContent(self):
- lines = [];
- GenerateFieldContent('', {'type': 'enum', 'default': 'RED'}, None, lines)
- self.assertEquals([' RED,'], lines)
- lines = [];
- GenerateFieldContent('', {'type': 'enum', 'default': 'RED'}, 'BLACK', lines)
- self.assertEquals([' BLACK,'], lines)
- lines = [];
- GenerateFieldContent('', {'type': 'enum'}, 'BLUE', lines)
- self.assertEquals([' BLUE,'], lines)
-
- def testGenerateArrayFieldContent(self):
- lines = ['STRUCT BEGINS'];
- GenerateFieldContent('test', {'type': 'array', 'contents': {'type': 'int'}},
- None, lines)
- self.assertEquals(['STRUCT BEGINS', ' NULL,', ' 0,'], lines)
- lines = ['STRUCT BEGINS'];
- GenerateFieldContent('test', {'field': 'my_array', 'type': 'array',
- 'contents': {'type': 'int'}}, [3, 4], lines)
- self.assertEquals('const int array_test_my_array[] = {\n' +
- ' 3,\n' +
- ' 4,\n' +
- '};\n' +
- 'STRUCT BEGINS\n' +
- ' array_test_my_array,\n' +
- ' 2,', '\n'.join(lines))
-
- def testGenerateElements(self):
- schema = [
- {'field': 'f0', 'type': 'int', 'default': 1000, 'optional': True},
- {'field': 'f1', 'type': 'string'},
- {'field': 'f2', 'type': 'enum', 'ctype': 'QuasiBool', 'default': 'MAYBE',
- 'optional': True},
- {'field': 'f3', 'type': 'array', 'contents': {'type': 'string16'},
- 'optional': True}
- ]
- description = {
- 'int_variables': {'a': -5, 'b': 5},
- 'elements': {
- 'elem0': {'f0': 5, 'f1': 'foo', 'f2': 'SURE'},
- 'elem1': {'f2': 'NOWAY', 'f0': -2, 'f1': 'bar'},
- 'elem2': {'f1': 'foo_bar', 'f3': [u'bar', u'foo']}
- }
- }
-
- # Build the expected result stream based on the unpredicatble order the
- # dictionary element are listed in.
- int_variable_expected = {
- 'a': 'const int a = -5;\n',
- 'b': 'const int b = 5;\n',
- }
- elements_expected = {
- 'elem0': 'const MyType elem0 = {\n' +
- ' 5,\n' +
- ' "foo",\n' +
- ' SURE,\n' +
- ' NULL,\n' +
- ' 0,\n'
- '};\n',
- 'elem1': 'const MyType elem1 = {\n' +
- ' -2,\n' +
- ' "bar",\n' +
- ' NOWAY,\n' +
- ' NULL,\n' +
- ' 0,\n'
- '};\n',
- 'elem2': 'const wchar_t* const array_elem2_f3[] = {\n' +
- ' L"bar",\n' +
- ' L"foo",\n' +
- '};\n' +
- 'const MyType elem2 = {\n' +
- ' 1000,\n' +
- ' "foo_bar",\n' +
- ' MAYBE,\n' +
- ' array_elem2_f3,\n' +
- ' 2,\n'
- '};\n'
- }
- expected = ''
- for key, value in description['int_variables'].items():
- expected += int_variable_expected[key]
- expected += '\n'
- elements = []
- for key, value in description['elements'].items():
- elements.append(elements_expected[key])
- expected += '\n'.join(elements)
-
- result = GenerateElements('MyType', schema, description)
- self.assertEquals(expected, result)
-
- def testGenerateElementsMissingMandatoryField(self):
- schema = [
- {'field': 'f0', 'type': 'int'},
- {'field': 'f1', 'type': 'string'},
- ]
- description = {
- 'int_variables': {'a': -5, 'b': 5},
- 'elements': {
- 'elem0': {'f0': 5},
- }
- }
-
- self.assertRaises(RuntimeError,
- lambda: GenerateElements('MyType', schema, description))
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/chromium/tools/json_to_struct/json_to_struct.py b/chromium/tools/json_to_struct/json_to_struct.py
deleted file mode 100755
index 38b6341091c..00000000000
--- a/chromium/tools/json_to_struct/json_to_struct.py
+++ /dev/null
@@ -1,211 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2012 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.
-
-# Format for the JSON schema file:
-# {
-# "type_name": "DesiredCStructName",
-# "headers": [ // Optional list of headers to be included by the .h.
-# "path/to/header.h"
-# ],
-# "schema": [ // Fields of the generated structure.
-# {
-# "field": "my_enum_field",
-# "type": "enum", // Either: int, string, string16, enum, array.
-# "default": "RED", // Optional. Cannot be used for array.
-# "ctype": "Color" // Only for enum, specify the C type.
-# },
-# {
-# "field": "my_int_array_field", // my_int_array_field_size will also
-# "type": "array", // be generated.
-# "contents": {
-# "type": "int" // Either: int, string, string16, enum, array.
-# }
-# },
-# ...
-# ]
-# }
-#
-# Format for the JSON description file:
-# {
-# "int_variables": { // An optional list of constant int variables.
-# "kDesiredConstantName": 45
-# },
-# "elements": { // All the elements for which to create static
-# // initialization code in the .cc file.
-# "my_const_variable": {
-# "my_int_field": 10,
-# "my_string_field": "foo bar",
-# "my_enum_field": "BLACK",
-# "my_int_array_field": [ 1, 2, 3, 5, 7 ],
-# },
-# "my_other_const_variable": {
-# ...
-# }
-# }
-# }
-
-import json
-from datetime import datetime
-import os.path
-import sys
-import optparse
-import re
-_script_path = os.path.realpath(__file__)
-
-sys.path.insert(0, os.path.normpath(_script_path + "/../../json_comment_eater"))
-try:
- import json_comment_eater
-finally:
- sys.path.pop(0)
-
-import struct_generator
-import element_generator
-
-HEAD = """// Copyright %d 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.
-
-// GENERATED FROM THE SCHEMA DEFINITION AND DESCRIPTION IN
-// %s
-// %s
-// DO NOT EDIT.
-
-"""
-
-def _GenerateHeaderGuard(h_filename):
- """Generates the string used in #ifndef guarding the header file.
- """
- result = re.sub('[%s\\\\.]' % os.sep, '_', h_filename.upper())
- return re.sub('^_*', '', result) + '_' # Remove leading underscores.
-
-def _GenerateH(basepath, fileroot, head, namespace, schema, description):
- """Generates the .h file containing the definition of the structure specified
- by the schema.
-
- Args:
- basepath: The base directory in which files are generated.
- fileroot: The filename and path, relative to basepath, of the file to
- create, without an extension.
- head: The string to output as the header of the .h file.
- namespace: A string corresponding to the C++ namespace to use.
- schema: A dict containing the schema. See comment at the top of this file.
- description: A dict containing the description. See comment at the top of
- this file.
- """
-
- h_filename = fileroot + '.h'
- with open(os.path.join(basepath, h_filename), 'w') as f:
- f.write(head)
-
- f.write('#include <cstddef>\n')
- f.write('\n')
-
- header_guard = _GenerateHeaderGuard(h_filename)
- f.write('#ifndef %s\n' % header_guard)
- f.write('#define %s\n' % header_guard)
- f.write('\n')
-
- for header in schema.get('headers', []):
- f.write('#include "%s"\n' % header)
- f.write('\n')
-
- if namespace:
- f.write('namespace %s {\n' % namespace)
- f.write('\n')
-
- f.write(struct_generator.GenerateStruct(
- schema['type_name'], schema['schema']))
- f.write('\n')
-
- for var_name, value in description.get('int_variables', []).items():
- f.write('extern const int %s;\n' % var_name)
- f.write('\n')
-
- for element_name, element in description['elements'].items():
- f.write('extern const %s %s;\n' % (schema['type_name'], element_name))
-
- if namespace:
- f.write('\n')
- f.write('} // namespace %s\n' % namespace)
-
- f.write('\n')
- f.write( '#endif // %s\n' % header_guard)
-
-def _GenerateCC(basepath, fileroot, head, namespace, schema, description):
- """Generates the .cc file containing the static initializers for the
- of the elements specified in the description.
-
- Args:
- basepath: The base directory in which files are generated.
- fileroot: The filename and path, relative to basepath, of the file to
- create, without an extension.
- head: The string to output as the header of the .cc file.
- namespace: A string corresponding to the C++ namespace to use.
- schema: A dict containing the schema. See comment at the top of this file.
- description: A dict containing the description. See comment at the top of
- this file.
- """
-
- with open(os.path.join(basepath, fileroot + '.cc'), 'w') as f:
- f.write(head)
-
- f.write('#include "%s"\n' % (fileroot + '.h'))
- f.write('\n')
-
- if namespace:
- f.write('namespace %s {\n' % namespace)
- f.write('\n')
-
- f.write(element_generator.GenerateElements(schema['type_name'],
- schema['schema'], description))
-
- if namespace:
- f.write('\n')
- f.write('} // namespace %s\n' % namespace)
-
-def _Load(filename):
- """Loads a JSON file int a Python object and return this object.
- """
- # TODO(beaudoin): When moving to Python 2.7 use object_pairs_hook=OrderedDict.
- with open(filename, 'r') as handle:
- result = json.loads(json_comment_eater.Nom(handle.read()))
- return result
-
-if __name__ == '__main__':
- parser = optparse.OptionParser(
- description='Generates an C++ array of struct from a JSON description.',
- usage='usage: %prog [option] -s schema description')
- parser.add_option('-b', '--destbase',
- help='base directory of generated files.')
- parser.add_option('-d', '--destdir',
- help='directory to output generated files, relative to destbase.')
- parser.add_option('-n', '--namespace',
- help='C++ namespace for generated files. e.g search_providers.')
- parser.add_option('-s', '--schema', help='path to the schema file, '
- 'mandatory.')
- (opts, args) = parser.parse_args()
-
- if not opts.schema:
- parser.error('You must specify a --schema.')
-
- description_filename = os.path.normpath(args[0])
- root, ext = os.path.splitext(description_filename)
- shortroot = os.path.split(root)[1]
- if opts.destdir:
- output_root = os.path.join(os.path.normpath(opts.destdir), shortroot)
- else:
- output_root = shortroot
-
- if opts.destbase:
- basepath = os.path.normpath(opts.destbase)
- else:
- basepath = ''
-
- schema = _Load(opts.schema)
- description = _Load(description_filename)
-
- head = HEAD % (datetime.now().year, opts.schema, description_filename)
- _GenerateH(basepath, output_root, head, opts.namespace, schema, description)
- _GenerateCC(basepath, output_root, head, opts.namespace, schema, description)
diff --git a/chromium/tools/json_to_struct/struct_generator.py b/chromium/tools/json_to_struct/struct_generator.py
deleted file mode 100644
index 501cb577e52..00000000000
--- a/chromium/tools/json_to_struct/struct_generator.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright (c) 2012 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.
-
-def _GenerateArrayField(field_info):
- """Generate a string defining an array field in a C structure.
- """
- contents = field_info['contents']
- contents['field'] = '* ' + field_info['field']
- if contents['type'] == 'array':
- raise RuntimeError('Nested arrays are not supported.')
- return (GenerateField(contents) + ';\n' +
- ' const size_t %s_size') % field_info['field'];
-
-def GenerateField(field_info):
- """Generate a string defining a field of the type specified by
- field_info['type'] in a C structure.
- """
- field = field_info['field']
- type = field_info['type']
- if type == 'int':
- return 'const int %s' % field
- elif type == 'string':
- return 'const char* const %s' % field
- elif type == 'string16':
- return 'const wchar_t* const %s' % field
- elif type == 'enum':
- return 'const %s %s' % (field_info['ctype'], field)
- elif type == 'array':
- return _GenerateArrayField(field_info)
- else:
- raise RuntimeError('Unknown field type "%s"' % type)
-
-def GenerateStruct(type_name, schema):
- """Generate a string defining a structure containing the fields specified in
- the schema list.
- """
- lines = [];
- lines.append('struct %s {' % type_name)
- for field_info in schema:
- lines.append(' ' + GenerateField(field_info) + ';')
- lines.append('};');
- return '\n'.join(lines) + '\n';
diff --git a/chromium/tools/json_to_struct/struct_generator_test.py b/chromium/tools/json_to_struct/struct_generator_test.py
deleted file mode 100755
index 8566c335bcd..00000000000
--- a/chromium/tools/json_to_struct/struct_generator_test.py
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-from struct_generator import GenerateField
-from struct_generator import GenerateStruct
-import unittest
-
-class StructGeneratorTest(unittest.TestCase):
- def testGenerateIntField(self):
- self.assertEquals('const int foo_bar',
- GenerateField({'type': 'int', 'field': 'foo_bar'}))
-
- def testGenerateStringField(self):
- self.assertEquals('const char* const bar_foo',
- GenerateField({'type': 'string', 'field': 'bar_foo'}))
-
- def testGenerateString16Field(self):
- self.assertEquals('const wchar_t* const foo_bar',
- GenerateField({'type': 'string16', 'field': 'foo_bar'}))
-
- def testGenerateEnumField(self):
- self.assertEquals('const MyEnumType foo_foo',
- GenerateField({'type': 'enum',
- 'field': 'foo_foo',
- 'ctype': 'MyEnumType'}))
-
- def testGenerateArrayField(self):
- self.assertEquals('const int * bar_bar;\n'
- ' const size_t bar_bar_size',
- GenerateField({'type': 'array',
- 'field': 'bar_bar',
- 'contents': {'type': 'int'}}))
-
- def testGenerateStruct(self):
- schema = [
- {'type': 'int', 'field': 'foo_bar'},
- {'type': 'string', 'field': 'bar_foo', 'default': 'dummy'},
- {
- 'type': 'array',
- 'field': 'bar_bar',
- 'contents': {
- 'type': 'enum',
- 'ctype': 'MyEnumType'
- }
- }
- ]
- struct = ('struct MyTypeName {\n'
- ' const int foo_bar;\n'
- ' const char* const bar_foo;\n'
- ' const MyEnumType * bar_bar;\n'
- ' const size_t bar_bar_size;\n'
- '};\n')
- self.assertEquals(struct, GenerateStruct('MyTypeName', schema))
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/chromium/tools/licenses.py b/chromium/tools/licenses.py
deleted file mode 100755
index e87a54d1682..00000000000
--- a/chromium/tools/licenses.py
+++ /dev/null
@@ -1,470 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-"""Utility for checking and processing licensing information in third_party
-directories.
-
-Usage: licenses.py <command>
-
-Commands:
- scan scan third_party directories, verifying that we have licensing info
- credits generate about:credits on stdout
-
-(You can also import this as a module.)
-"""
-
-import cgi
-import os
-import sys
-
-# Paths from the root of the tree to directories to skip.
-PRUNE_PATHS = set([
- # Same module occurs in crypto/third_party/nss and net/third_party/nss, so
- # skip this one.
- os.path.join('third_party','nss'),
-
- # Placeholder directory only, not third-party code.
- os.path.join('third_party','adobe'),
-
- # Build files only, not third-party code.
- os.path.join('third_party','widevine'),
-
- # Only binaries, used during development.
- os.path.join('third_party','valgrind'),
-
- # Used for development and test, not in the shipping product.
- os.path.join('third_party','bison'),
- os.path.join('third_party','cygwin'),
- os.path.join('third_party','gnu_binutils'),
- os.path.join('third_party','gold'),
- os.path.join('third_party','gperf'),
- os.path.join('third_party','lighttpd'),
- os.path.join('third_party','llvm'),
- os.path.join('third_party','llvm-build'),
- os.path.join('third_party','mingw-w64'),
- os.path.join('third_party','nacl_sdk_binaries'),
- os.path.join('third_party','pefile'),
- os.path.join('third_party','perl'),
- os.path.join('third_party','psyco_win32'),
- os.path.join('third_party','pylib'),
- os.path.join('third_party','python_26'),
- os.path.join('third_party','pywebsocket'),
- os.path.join('third_party','syzygy'),
- os.path.join('tools','gn'),
-
- # Chromium code in third_party.
- os.path.join('third_party','fuzzymatch'),
- os.path.join('tools', 'swarming_client'),
-
- # Stuff pulled in from chrome-internal for official builds/tools.
- os.path.join('third_party', 'clear_cache'),
- os.path.join('third_party', 'gnu'),
- os.path.join('third_party', 'googlemac'),
- os.path.join('third_party', 'pcre'),
- os.path.join('third_party', 'psutils'),
- os.path.join('third_party', 'sawbuck'),
-
- # Redistribution does not require attribution in documentation.
- os.path.join('third_party','directxsdk'),
- os.path.join('third_party','platformsdk_win2008_6_1'),
- os.path.join('third_party','platformsdk_win7'),
-])
-
-# Directories we don't scan through.
-VCS_METADATA_DIRS = ('.svn', '.git')
-PRUNE_DIRS = (VCS_METADATA_DIRS +
- ('out', 'Debug', 'Release', # build files
- 'layout_tests')) # lots of subdirs
-
-ADDITIONAL_PATHS = (
- os.path.join('breakpad'),
- os.path.join('chrome', 'common', 'extensions', 'docs', 'examples'),
- os.path.join('chrome', 'test', 'chromeos', 'autotest'),
- os.path.join('chrome', 'test', 'data'),
- os.path.join('native_client'),
- os.path.join('net', 'tools', 'spdyshark'),
- os.path.join('sdch', 'open-vcdiff'),
- os.path.join('testing', 'gmock'),
- os.path.join('testing', 'gtest'),
- # The directory with the word list for Chinese and Japanese segmentation
- # with different license terms than ICU.
- os.path.join('third_party','icu','source','data','brkitr'),
- os.path.join('tools', 'grit'),
- os.path.join('tools', 'gyp'),
- os.path.join('tools', 'page_cycler', 'acid3'),
- os.path.join('url', 'third_party', 'mozilla'),
- os.path.join('v8'),
- # Fake directory so we can include the strongtalk license.
- os.path.join('v8', 'strongtalk'),
-)
-
-
-# Directories where we check out directly from upstream, and therefore
-# can't provide a README.chromium. Please prefer a README.chromium
-# wherever possible.
-SPECIAL_CASES = {
- os.path.join('native_client'): {
- "Name": "native client",
- "URL": "http://code.google.com/p/nativeclient",
- "License": "BSD",
- },
- os.path.join('sdch', 'open-vcdiff'): {
- "Name": "open-vcdiff",
- "URL": "http://code.google.com/p/open-vcdiff",
- "License": "Apache 2.0, MIT, GPL v2 and custom licenses",
- "License Android Compatible": "yes",
- },
- os.path.join('testing', 'gmock'): {
- "Name": "gmock",
- "URL": "http://code.google.com/p/googlemock",
- "License": "BSD",
- "License File": "NOT_SHIPPED",
- },
- os.path.join('testing', 'gtest'): {
- "Name": "gtest",
- "URL": "http://code.google.com/p/googletest",
- "License": "BSD",
- "License File": "NOT_SHIPPED",
- },
- os.path.join('third_party', 'angle'): {
- "Name": "Almost Native Graphics Layer Engine",
- "URL": "http://code.google.com/p/angleproject/",
- "License": "BSD",
- },
- os.path.join('third_party', 'cros_system_api'): {
- "Name": "Chromium OS system API",
- "URL": "http://www.chromium.org/chromium-os",
- "License": "BSD",
- # Absolute path here is resolved as relative to the source root.
- "License File": "/LICENSE.chromium_os",
- },
- os.path.join('third_party', 'GTM'): {
- "Name": "Google Toolbox for Mac",
- "URL": "http://code.google.com/p/google-toolbox-for-mac/",
- "License": "Apache 2.0",
- "License File": "COPYING",
- },
- os.path.join('third_party', 'lss'): {
- "Name": "linux-syscall-support",
- "URL": "http://code.google.com/p/linux-syscall-support/",
- "License": "BSD",
- "License File": "/LICENSE",
- },
- os.path.join('third_party', 'ots'): {
- "Name": "OTS (OpenType Sanitizer)",
- "URL": "http://code.google.com/p/ots/",
- "License": "BSD",
- },
- os.path.join('third_party', 'pdfsqueeze'): {
- "Name": "pdfsqueeze",
- "URL": "http://code.google.com/p/pdfsqueeze/",
- "License": "Apache 2.0",
- "License File": "COPYING",
- },
- os.path.join('third_party', 'ppapi'): {
- "Name": "ppapi",
- "URL": "http://code.google.com/p/ppapi/",
- },
- os.path.join('third_party', 'scons-2.0.1'): {
- "Name": "scons-2.0.1",
- "URL": "http://www.scons.org",
- "License": "MIT",
- "License File": "NOT_SHIPPED",
- },
- os.path.join('third_party', 'trace-viewer'): {
- "Name": "trace-viewer",
- "URL": "http://code.google.com/p/trace-viewer",
- "License": "BSD",
- "License File": "NOT_SHIPPED",
- },
- os.path.join('third_party', 'v8-i18n'): {
- "Name": "Internationalization Library for v8",
- "URL": "http://code.google.com/p/v8-i18n/",
- "License": "Apache 2.0",
- },
- os.path.join('third_party', 'WebKit'): {
- "Name": "WebKit",
- "URL": "http://webkit.org/",
- "License": "BSD and GPL v2",
- # Absolute path here is resolved as relative to the source root.
- "License File": "/webkit/LICENSE",
- },
- os.path.join('third_party', 'webpagereplay'): {
- "Name": "webpagereplay",
- "URL": "http://code.google.com/p/web-page-replay",
- "License": "Apache 2.0",
- "License File": "NOT_SHIPPED",
- },
- os.path.join('tools', 'grit'): {
- "Name": "grit",
- "URL": "http://code.google.com/p/grit-i18n",
- "License": "BSD",
- "License File": "NOT_SHIPPED",
- },
- os.path.join('tools', 'gyp'): {
- "Name": "gyp",
- "URL": "http://code.google.com/p/gyp",
- "License": "BSD",
- "License File": "NOT_SHIPPED",
- },
- os.path.join('v8'): {
- "Name": "V8 JavaScript Engine",
- "URL": "http://code.google.com/p/v8",
- "License": "BSD",
- },
- os.path.join('v8', 'strongtalk'): {
- "Name": "Strongtalk",
- "URL": "http://www.strongtalk.org/",
- "License": "BSD",
- # Absolute path here is resolved as relative to the source root.
- "License File": "/v8/LICENSE.strongtalk",
- },
-}
-
-# Special value for 'License File' field used to indicate that the license file
-# should not be used in about:credits.
-NOT_SHIPPED = "NOT_SHIPPED"
-
-
-class LicenseError(Exception):
- """We raise this exception when a directory's licensing info isn't
- fully filled out."""
- pass
-
-def AbsolutePath(path, filename, root):
- """Convert a path in README.chromium to be absolute based on the source
- root."""
- if filename.startswith('/'):
- # Absolute-looking paths are relative to the source root
- # (which is the directory we're run from).
- absolute_path = os.path.join(root, filename[1:])
- else:
- absolute_path = os.path.join(root, path, filename)
- if os.path.exists(absolute_path):
- return absolute_path
- return None
-
-def ParseDir(path, root, require_license_file=True):
- """Examine a third_party/foo component and extract its metadata."""
-
- # Parse metadata fields out of README.chromium.
- # We examine "LICENSE" for the license file by default.
- metadata = {
- "License File": "LICENSE", # Relative path to license text.
- "Name": None, # Short name (for header on about:credits).
- "URL": None, # Project home page.
- "License": None, # Software license.
- }
-
- # Relative path to a file containing some html we're required to place in
- # about:credits.
- optional_keys = ["Required Text", "License Android Compatible"]
-
- if path in SPECIAL_CASES:
- metadata.update(SPECIAL_CASES[path])
- else:
- # Try to find README.chromium.
- readme_path = os.path.join(root, path, 'README.chromium')
- if not os.path.exists(readme_path):
- raise LicenseError("missing README.chromium or licenses.py "
- "SPECIAL_CASES entry")
-
- for line in open(readme_path):
- line = line.strip()
- if not line:
- break
- for key in metadata.keys() + optional_keys:
- field = key + ": "
- if line.startswith(field):
- metadata[key] = line[len(field):]
-
- # Check that all expected metadata is present.
- for key, value in metadata.iteritems():
- if not value:
- raise LicenseError("couldn't find '" + key + "' line "
- "in README.chromium or licences.py "
- "SPECIAL_CASES")
-
- # Special-case modules that aren't in the shipping product, so don't need
- # their license in about:credits.
- if metadata["License File"] != NOT_SHIPPED:
- # Check that the license file exists.
- for filename in (metadata["License File"], "COPYING"):
- license_path = AbsolutePath(path, filename, root)
- if license_path is not None:
- break
-
- if require_license_file and not license_path:
- raise LicenseError("License file not found. "
- "Either add a file named LICENSE, "
- "import upstream's COPYING if available, "
- "or add a 'License File:' line to "
- "README.chromium with the appropriate path.")
- metadata["License File"] = license_path
-
- if "Required Text" in metadata:
- required_path = AbsolutePath(path, metadata["Required Text"], root)
- if required_path is not None:
- metadata["Required Text"] = required_path
- else:
- raise LicenseError("Required text file listed but not found.")
-
- return metadata
-
-
-def ContainsFiles(path, root):
- """Determines whether any files exist in a directory or in any of its
- subdirectories."""
- for _, dirs, files in os.walk(os.path.join(root, path)):
- if files:
- return True
- for vcs_metadata in VCS_METADATA_DIRS:
- if vcs_metadata in dirs:
- dirs.remove(vcs_metadata)
- return False
-
-
-def FilterDirsWithFiles(dirs_list, root):
- # If a directory contains no files, assume it's a DEPS directory for a
- # project not used by our current configuration and skip it.
- return [x for x in dirs_list if ContainsFiles(x, root)]
-
-
-def FindThirdPartyDirs(prune_paths, root):
- """Find all third_party directories underneath the source root."""
- third_party_dirs = []
- for path, dirs, files in os.walk(root):
- path = path[len(root)+1:] # Pretty up the path.
-
- if path in prune_paths:
- dirs[:] = []
- continue
-
- # Prune out directories we want to skip.
- # (Note that we loop over PRUNE_DIRS so we're not iterating over a
- # list that we're simultaneously mutating.)
- for skip in PRUNE_DIRS:
- if skip in dirs:
- dirs.remove(skip)
-
- if os.path.basename(path) == 'third_party':
- # Add all subdirectories that are not marked for skipping.
- for dir in dirs:
- dirpath = os.path.join(path, dir)
- if dirpath not in prune_paths:
- third_party_dirs.append(dirpath)
-
- # Don't recurse into any subdirs from here.
- dirs[:] = []
- continue
-
- # Don't recurse into paths in ADDITIONAL_PATHS, like we do with regular
- # third_party/foo paths.
- if path in ADDITIONAL_PATHS:
- dirs[:] = []
-
- for dir in ADDITIONAL_PATHS:
- if dir not in prune_paths:
- third_party_dirs.append(dir)
-
- return third_party_dirs
-
-
-def ScanThirdPartyDirs(root=None):
- """Scan a list of directories and report on any problems we find."""
- if root is None:
- root = os.getcwd()
- third_party_dirs = FindThirdPartyDirs(PRUNE_PATHS, root)
- third_party_dirs = FilterDirsWithFiles(third_party_dirs, root)
-
- errors = []
- for path in sorted(third_party_dirs):
- try:
- metadata = ParseDir(path, root)
- except LicenseError, e:
- errors.append((path, e.args[0]))
- continue
-
- for path, error in sorted(errors):
- print path + ": " + error
-
- return len(errors) == 0
-
-
-def GenerateCredits():
- """Generate about:credits."""
-
- if len(sys.argv) not in (2, 3):
- print 'usage: licenses.py credits [output_file]'
- return False
-
- def EvaluateTemplate(template, env, escape=True):
- """Expand a template with variables like {{foo}} using a
- dictionary of expansions."""
- for key, val in env.items():
- if escape and not key.endswith("_unescaped"):
- val = cgi.escape(val)
- template = template.replace('{{%s}}' % key, val)
- return template
-
- root = os.path.join(os.path.dirname(__file__), '..')
- third_party_dirs = FindThirdPartyDirs(PRUNE_PATHS, root)
-
- entry_template = open(os.path.join(root, 'chrome', 'browser', 'resources',
- 'about_credits_entry.tmpl'), 'rb').read()
- entries = []
- for path in sorted(third_party_dirs):
- try:
- metadata = ParseDir(path, root)
- except LicenseError:
- # TODO(phajdan.jr): Convert to fatal error (http://crbug.com/39240).
- continue
- if metadata['License File'] == NOT_SHIPPED:
- continue
- env = {
- 'name': metadata['Name'],
- 'url': metadata['URL'],
- 'license': open(metadata['License File'], 'rb').read(),
- 'license_unescaped': '',
- }
- if 'Required Text' in metadata:
- required_text = open(metadata['Required Text'], 'rb').read()
- env["license_unescaped"] = required_text
- entries.append(EvaluateTemplate(entry_template, env))
-
- file_template = open(os.path.join(root, 'chrome', 'browser', 'resources',
- 'about_credits.tmpl'), 'rb').read()
- template_contents = "<!-- Generated by licenses.py; do not edit. -->"
- template_contents += EvaluateTemplate(file_template,
- {'entries': '\n'.join(entries)},
- escape=False)
-
- if len(sys.argv) == 3:
- with open(sys.argv[2], 'w') as output_file:
- output_file.write(template_contents)
- elif len(sys.argv) == 2:
- print template_contents
-
- return True
-
-
-def main():
- command = 'help'
- if len(sys.argv) > 1:
- command = sys.argv[1]
-
- if command == 'scan':
- if not ScanThirdPartyDirs():
- return 1
- elif command == 'credits':
- if not GenerateCredits():
- return 1
- else:
- print __doc__
- return 1
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/linux/PRESUBMIT.py b/chromium/tools/linux/PRESUBMIT.py
deleted file mode 100644
index d4d8601f9e6..00000000000
--- a/chromium/tools/linux/PRESUBMIT.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# 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.
-
-"""Top-level presubmit script for linux.
-
-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for
-details on the presubmit API built into gcl.
-"""
-
-
-def CommonChecks(input_api, output_api):
- import sys
- def join(*args):
- return input_api.os_path.join(input_api.PresubmitLocalPath(), *args)
-
- output = []
- sys_path_backup = sys.path
- try:
- sys.path = [
- join('..', 'linux'),
- ] + sys.path
- output.extend(input_api.canned_checks.RunPylint(input_api, output_api))
- finally:
- sys.path = sys_path_backup
-
- output.extend(
- input_api.canned_checks.RunUnitTestsInDirectory(
- input_api, output_api,
- input_api.os_path.join(input_api.PresubmitLocalPath(), 'tests'),
- whitelist=[r'.+_tests\.py$']))
-
- if input_api.is_committing:
- output.extend(input_api.canned_checks.PanProjectChecks(input_api,
- output_api,
- owners_check=False))
- return output
-
-
-def CheckChangeOnUpload(input_api, output_api):
- return CommonChecks(input_api, output_api)
-
-
-def CheckChangeOnCommit(input_api, output_api):
- return CommonChecks(input_api, output_api)
diff --git a/chromium/tools/linux/dump-static-initializers.py b/chromium/tools/linux/dump-static-initializers.py
deleted file mode 100755
index 865559b9320..00000000000
--- a/chromium/tools/linux/dump-static-initializers.py
+++ /dev/null
@@ -1,231 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-"""Dump functions called by static intializers in a Linux Release binary.
-
-Usage example:
- tools/linux/dump-static-intializers.py out/Release/chrome
-
-A brief overview of static initialization:
-1) the compiler writes out, per object file, a function that contains
- the static intializers for that file.
-2) the compiler also writes out a pointer to that function in a special
- section.
-3) at link time, the linker concatenates the function pointer sections
- into a single list of all initializers.
-4) at run time, on startup the binary runs all function pointers.
-
-The functions in (1) all have mangled names of the form
- _GLOBAL__I_foobar.cc
-using objdump, we can disassemble those functions and dump all symbols that
-they reference.
-"""
-
-import optparse
-import re
-import subprocess
-import sys
-
-# A map of symbol => informative text about it.
-NOTES = {
- '__cxa_atexit@plt': 'registers a dtor to run at exit',
- 'std::__ioinit': '#includes <iostream>, use <ostream> instead',
-}
-
-# Determine whether this is a git checkout (as opposed to e.g. svn).
-IS_GIT_WORKSPACE = (subprocess.Popen(
- ['git', 'rev-parse'], stderr=subprocess.PIPE).wait() == 0)
-
-class Demangler(object):
- """A wrapper around c++filt to provide a function to demangle symbols."""
- def __init__(self):
- self.cppfilt = subprocess.Popen(['c++filt'],
- stdin=subprocess.PIPE,
- stdout=subprocess.PIPE)
-
- def Demangle(self, sym):
- """Given mangled symbol |sym|, return its demangled form."""
- self.cppfilt.stdin.write(sym + '\n')
- return self.cppfilt.stdout.readline().strip()
-
-# Matches for example: "cert_logger.pb.cc", capturing "cert_logger".
-protobuf_filename_re = re.compile(r'(.*)\.pb\.cc$')
-def QualifyFilenameAsProto(filename):
- """Attempt to qualify a bare |filename| with a src-relative path, assuming it
- is a protoc-generated file. If a single match is found, it is returned.
- Otherwise the original filename is returned."""
- if not IS_GIT_WORKSPACE:
- return filename
- match = protobuf_filename_re.match(filename)
- if not match:
- return filename
- basename = match.groups(0)
- gitlsfiles = subprocess.Popen(
- ['git', 'ls-files', '--', '*/%s.proto' % basename],
- stdout=subprocess.PIPE)
- candidate = filename
- for line in gitlsfiles.stdout:
- if candidate != filename:
- return filename # Multiple hits, can't help.
- candidate = line.strip()
- return candidate
-
-# Regex matching the substring of a symbol's demangled text representation most
-# likely to appear in a source file.
-# Example: "v8::internal::Builtins::InitBuiltinFunctionTable()" becomes
-# "InitBuiltinFunctionTable", since the first (optional & non-capturing) group
-# picks up any ::-qualification and the last fragment picks up a suffix that
-# starts with an opener.
-symbol_code_name_re = re.compile(r'^(?:[^(<[]*::)?([^:(<[]*).*?$')
-def QualifyFilename(filename, symbol):
- """Given a bare filename and a symbol that occurs in it, attempt to qualify
- it with a src-relative path. If more than one file matches, return the
- original filename."""
- if not IS_GIT_WORKSPACE:
- return filename
- match = symbol_code_name_re.match(symbol)
- if not match:
- return filename
- symbol = match.group(1)
- gitgrep = subprocess.Popen(
- ['git', 'grep', '-l', symbol, '--', '*/%s' % filename],
- stdout=subprocess.PIPE)
- candidate = filename
- for line in gitgrep.stdout:
- if candidate != filename: # More than one candidate; return bare filename.
- return filename
- candidate = line.strip()
- return candidate
-
-# Regex matching nm output for the symbols we're interested in.
-# See test_ParseNmLine for examples.
-nm_re = re.compile(r'(\S+) (\S+) t (?:_ZN12)?_GLOBAL__(?:sub_)?I_(.*)')
-def ParseNmLine(line):
- """Given a line of nm output, parse static initializers as a
- (file, start, size) tuple."""
- match = nm_re.match(line)
- if match:
- addr, size, filename = match.groups()
- return (filename, int(addr, 16), int(size, 16))
-
-
-def test_ParseNmLine():
- """Verify the nm_re regex matches some sample lines."""
- parse = ParseNmLine(
- '0000000001919920 0000000000000008 t '
- '_ZN12_GLOBAL__I_safe_browsing_service.cc')
- assert parse == ('safe_browsing_service.cc', 26319136, 8), parse
-
- parse = ParseNmLine(
- '00000000026b9eb0 0000000000000024 t '
- '_GLOBAL__sub_I_extension_specifics.pb.cc')
- assert parse == ('extension_specifics.pb.cc', 40607408, 36), parse
-
-# Just always run the test; it is fast enough.
-test_ParseNmLine()
-
-
-def ParseNm(binary):
- """Given a binary, yield static initializers as (file, start, size) tuples."""
- nm = subprocess.Popen(['nm', '-S', binary], stdout=subprocess.PIPE)
- for line in nm.stdout:
- parse = ParseNmLine(line)
- if parse:
- yield parse
-
-# Regex matching objdump output for the symbols we're interested in.
-# Example line:
-# 12354ab: (disassembly, including <FunctionReference>)
-disassembly_re = re.compile(r'^\s+[0-9a-f]+:.*<(\S+)>')
-def ExtractSymbolReferences(binary, start, end):
- """Given a span of addresses, returns symbol references from disassembly."""
- cmd = ['objdump', binary, '--disassemble',
- '--start-address=0x%x' % start, '--stop-address=0x%x' % end]
- objdump = subprocess.Popen(cmd, stdout=subprocess.PIPE)
-
- refs = set()
- for line in objdump.stdout:
- if '__static_initialization_and_destruction' in line:
- raise RuntimeError, ('code mentions '
- '__static_initialization_and_destruction; '
- 'did you accidentally run this on a Debug binary?')
- match = disassembly_re.search(line)
- if match:
- (ref,) = match.groups()
- if ref.startswith('.LC') or ref.startswith('_DYNAMIC'):
- # Ignore these, they are uninformative.
- continue
- if ref.startswith('_GLOBAL__I_'):
- # Probably a relative jump within this function.
- continue
- refs.add(ref)
-
- return sorted(refs)
-
-def main():
- parser = optparse.OptionParser(usage='%prog [option] filename')
- parser.add_option('-d', '--diffable', dest='diffable',
- action='store_true', default=False,
- help='Prints the filename on each line, for more easily '
- 'diff-able output. (Used by sizes.py)')
- opts, args = parser.parse_args()
- if len(args) != 1:
- parser.error('missing filename argument')
- return 1
- binary = args[0]
-
- demangler = Demangler()
- file_count = 0
- initializer_count = 0
-
- files = ParseNm(binary)
- if opts.diffable:
- files = sorted(files)
- for filename, addr, size in files:
- file_count += 1
- ref_output = []
-
- qualified_filename = QualifyFilenameAsProto(filename)
-
- if size == 2:
- # gcc generates a two-byte 'repz retq' initializer when there is a
- # ctor even when the ctor is empty. This is fixed in gcc 4.6, but
- # Android uses gcc 4.4.
- ref_output.append('[empty ctor, but it still has cost on gcc <4.6]')
- else:
- for ref in ExtractSymbolReferences(binary, addr, addr+size):
- initializer_count += 1
-
- ref = demangler.Demangle(ref)
- if qualified_filename == filename:
- qualified_filename = QualifyFilename(filename, ref)
-
- note = ''
- if ref in NOTES:
- note = NOTES[ref]
- elif ref.endswith('_2eproto()'):
- note = 'protocol compiler bug: crbug.com/105626'
-
- if note:
- ref_output.append('%s [%s]' % (ref, note))
- else:
- ref_output.append(ref)
-
- if opts.diffable:
- print '\n'.join('# ' + qualified_filename + ' ' + r for r in ref_output)
- else:
- print '%s (initializer offset 0x%x size 0x%x)' % (qualified_filename,
- addr, size)
- print ''.join(' %s\n' % r for r in ref_output)
-
- if opts.diffable:
- print '#',
- print 'Found %d static initializers in %d files.' % (initializer_count,
- file_count)
-
- return 0
-
-if '__main__' == __name__:
- sys.exit(main())
diff --git a/chromium/tools/linux/procfs.py b/chromium/tools/linux/procfs.py
deleted file mode 100755
index 6308fdd93da..00000000000
--- a/chromium/tools/linux/procfs.py
+++ /dev/null
@@ -1,729 +0,0 @@
-#!/usr/bin/env python
-# 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.
-
-# A Python library to read and store procfs (/proc) information on Linux.
-#
-# Each information storage class in this file stores original data as original
-# as reasonablly possible. Translation is done when requested. It is to make it
-# always possible to probe the original data.
-
-
-import collections
-import logging
-import os
-import re
-import struct
-import sys
-
-
-class _NullHandler(logging.Handler):
- def emit(self, record):
- pass
-
-
-_LOGGER = logging.getLogger('procfs')
-_LOGGER.addHandler(_NullHandler())
-
-
-class ProcStat(object):
- """Reads and stores information in /proc/pid/stat."""
- _PATTERN = re.compile(r'^'
- '(?P<PID>-?[0-9]+) '
- '\((?P<COMM>.+)\) '
- '(?P<STATE>[RSDZTW]) '
- '(?P<PPID>-?[0-9]+) '
- '(?P<PGRP>-?[0-9]+) '
- '(?P<SESSION>-?[0-9]+) '
- '(?P<TTY_NR>-?[0-9]+) '
- '(?P<TPGID>-?[0-9]+) '
- '(?P<FLAGS>[0-9]+) '
- '(?P<MINFIT>[0-9]+) '
- '(?P<CMINFIT>[0-9]+) '
- '(?P<MAJFIT>[0-9]+) '
- '(?P<CMAJFIT>[0-9]+) '
- '(?P<UTIME>[0-9]+) '
- '(?P<STIME>[0-9]+) '
- '(?P<CUTIME>[0-9]+) '
- '(?P<CSTIME>[0-9]+) '
- '(?P<PRIORITY>[0-9]+) '
- '(?P<NICE>[0-9]+) '
- '(?P<NUM_THREADS>[0-9]+) '
- '(?P<ITREALVALUE>[0-9]+) '
- '(?P<STARTTIME>[0-9]+) '
- '(?P<VSIZE>[0-9]+) '
- '(?P<RSS>[0-9]+) '
- '(?P<RSSLIM>[0-9]+) '
- '(?P<STARTCODE>[0-9]+) '
- '(?P<ENDCODE>[0-9]+) '
- '(?P<STARTSTACK>[0-9]+) '
- '(?P<KSTKESP>[0-9]+) '
- '(?P<KSTKEIP>[0-9]+) '
- '(?P<SIGNAL>[0-9]+) '
- '(?P<BLOCKED>[0-9]+) '
- '(?P<SIGIGNORE>[0-9]+) '
- '(?P<SIGCATCH>[0-9]+) '
- '(?P<WCHAN>[0-9]+) '
- '(?P<NSWAP>[0-9]+) '
- '(?P<CNSWAP>[0-9]+) '
- '(?P<EXIT_SIGNAL>[0-9]+) '
- '(?P<PROCESSOR>[0-9]+) '
- '(?P<RT_PRIORITY>[0-9]+) '
- '(?P<POLICY>[0-9]+) '
- '(?P<DELAYACCT_BLKIO_TICKS>[0-9]+) '
- '(?P<GUEST_TIME>[0-9]+) '
- '(?P<CGUEST_TIME>[0-9]+)', re.IGNORECASE)
-
- def __init__(self, raw, pid, vsize, rss):
- self._raw = raw
- self._pid = pid
- self._vsize = vsize
- self._rss = rss
-
- @staticmethod
- def load_file(stat_f):
- raw = stat_f.readlines()
- stat = ProcStat._PATTERN.match(raw[0])
- return ProcStat(raw,
- stat.groupdict().get('PID'),
- stat.groupdict().get('VSIZE'),
- stat.groupdict().get('RSS'))
-
- @staticmethod
- def load(pid):
- with open(os.path.join('/proc', str(pid), 'stat'), 'r') as stat_f:
- return ProcStat.load_file(stat_f)
-
- @property
- def raw(self):
- return self._raw
-
- @property
- def pid(self):
- return int(self._pid)
-
- @property
- def vsize(self):
- return int(self._vsize)
-
- @property
- def rss(self):
- return int(self._rss)
-
-
-class ProcStatm(object):
- """Reads and stores information in /proc/pid/statm."""
- _PATTERN = re.compile(r'^'
- '(?P<SIZE>[0-9]+) '
- '(?P<RESIDENT>[0-9]+) '
- '(?P<SHARE>[0-9]+) '
- '(?P<TEXT>[0-9]+) '
- '(?P<LIB>[0-9]+) '
- '(?P<DATA>[0-9]+) '
- '(?P<DT>[0-9]+)', re.IGNORECASE)
-
- def __init__(self, raw, size, resident, share, text, lib, data, dt):
- self._raw = raw
- self._size = size
- self._resident = resident
- self._share = share
- self._text = text
- self._lib = lib
- self._data = data
- self._dt = dt
-
- @staticmethod
- def load_file(statm_f):
- raw = statm_f.readlines()
- statm = ProcStatm._PATTERN.match(raw[0])
- return ProcStatm(raw,
- statm.groupdict().get('SIZE'),
- statm.groupdict().get('RESIDENT'),
- statm.groupdict().get('SHARE'),
- statm.groupdict().get('TEXT'),
- statm.groupdict().get('LIB'),
- statm.groupdict().get('DATA'),
- statm.groupdict().get('DT'))
-
- @staticmethod
- def load(pid):
- with open(os.path.join('/proc', str(pid), 'statm'), 'r') as statm_f:
- return ProcStatm.load_file(statm_f)
-
- @property
- def raw(self):
- return self._raw
-
- @property
- def size(self):
- return int(self._size)
-
- @property
- def resident(self):
- return int(self._resident)
-
- @property
- def share(self):
- return int(self._share)
-
- @property
- def text(self):
- return int(self._text)
-
- @property
- def lib(self):
- return int(self._lib)
-
- @property
- def data(self):
- return int(self._data)
-
- @property
- def dt(self):
- return int(self._dt)
-
-
-class ProcStatus(object):
- """Reads and stores information in /proc/pid/status."""
- _PATTERN = re.compile(r'^(?P<NAME>[A-Za-z0-9_]+):\s+(?P<VALUE>.*)')
-
- def __init__(self, raw, dct):
- self._raw = raw
- self._pid = dct.get('Pid')
- self._name = dct.get('Name')
- self._vm_peak = dct.get('VmPeak')
- self._vm_size = dct.get('VmSize')
- self._vm_lck = dct.get('VmLck')
- self._vm_pin = dct.get('VmPin')
- self._vm_hwm = dct.get('VmHWM')
- self._vm_rss = dct.get('VmRSS')
- self._vm_data = dct.get('VmData')
- self._vm_stack = dct.get('VmStk')
- self._vm_exe = dct.get('VmExe')
- self._vm_lib = dct.get('VmLib')
- self._vm_pte = dct.get('VmPTE')
- self._vm_swap = dct.get('VmSwap')
-
- @staticmethod
- def load_file(status_f):
- raw = status_f.readlines()
- dct = {}
- for line in raw:
- status_match = ProcStatus._PATTERN.match(line)
- if status_match:
- match_dict = status_match.groupdict()
- dct[match_dict['NAME']] = match_dict['VALUE']
- else:
- raise SyntaxError('Unknown /proc/pid/status format.')
- return ProcStatus(raw, dct)
-
- @staticmethod
- def load(pid):
- with open(os.path.join('/proc', str(pid), 'status'), 'r') as status_f:
- return ProcStatus.load_file(status_f)
-
- @property
- def raw(self):
- return self._raw
-
- @property
- def pid(self):
- return int(self._pid)
-
- @property
- def vm_peak(self):
- """Returns a high-water (peak) virtual memory size in kilo-bytes."""
- if self._vm_peak.endswith('kB'):
- return int(self._vm_peak.split()[0])
- raise ValueError('VmPeak is not in kB.')
-
- @property
- def vm_size(self):
- """Returns a virtual memory size in kilo-bytes."""
- if self._vm_size.endswith('kB'):
- return int(self._vm_size.split()[0])
- raise ValueError('VmSize is not in kB.')
-
- @property
- def vm_hwm(self):
- """Returns a high-water (peak) resident set size (RSS) in kilo-bytes."""
- if self._vm_hwm.endswith('kB'):
- return int(self._vm_hwm.split()[0])
- raise ValueError('VmHWM is not in kB.')
-
- @property
- def vm_rss(self):
- """Returns a resident set size (RSS) in kilo-bytes."""
- if self._vm_rss.endswith('kB'):
- return int(self._vm_rss.split()[0])
- raise ValueError('VmRSS is not in kB.')
-
-
-class ProcMapsEntry(object):
- """A class representing one line in /proc/pid/maps."""
-
- def __init__(
- self, begin, end, readable, writable, executable, private, offset,
- major, minor, inode, name):
- self.begin = begin
- self.end = end
- self.readable = readable
- self.writable = writable
- self.executable = executable
- self.private = private
- self.offset = offset
- self.major = major
- self.minor = minor
- self.inode = inode
- self.name = name
-
- def as_dict(self):
- return {
- 'begin': self.begin,
- 'end': self.end,
- 'readable': self.readable,
- 'writable': self.writable,
- 'executable': self.executable,
- 'private': self.private,
- 'offset': self.offset,
- 'major': self.major,
- 'minor': self.minor,
- 'inode': self.inode,
- 'name': self.name,
- }
-
-
-class ProcMaps(object):
- """Reads and stores information in /proc/pid/maps."""
-
- MAPS_PATTERN = re.compile(
- r'^([a-f0-9]+)-([a-f0-9]+)\s+(.)(.)(.)(.)\s+([a-f0-9]+)\s+(\S+):(\S+)\s+'
- r'(\d+)\s*(.*)$', re.IGNORECASE)
-
- def __init__(self):
- self._sorted_indexes = []
- self._dictionary = {}
- self._sorted = True
-
- def iter(self, condition):
- if not self._sorted:
- self._sorted_indexes.sort()
- self._sorted = True
- for index in self._sorted_indexes:
- if not condition or condition(self._dictionary[index]):
- yield self._dictionary[index]
-
- def __iter__(self):
- if not self._sorted:
- self._sorted_indexes.sort()
- self._sorted = True
- for index in self._sorted_indexes:
- yield self._dictionary[index]
-
- @staticmethod
- def load_file(maps_f):
- table = ProcMaps()
- for line in maps_f:
- table.append_line(line)
- return table
-
- @staticmethod
- def load(pid):
- with open(os.path.join('/proc', str(pid), 'maps'), 'r') as maps_f:
- return ProcMaps.load_file(maps_f)
-
- def append_line(self, line):
- entry = self.parse_line(line)
- if entry:
- self._append_entry(entry)
- return entry
-
- @staticmethod
- def parse_line(line):
- matched = ProcMaps.MAPS_PATTERN.match(line)
- if matched:
- return ProcMapsEntry( # pylint: disable=W0212
- int(matched.group(1), 16), # begin
- int(matched.group(2), 16), # end
- matched.group(3), # readable
- matched.group(4), # writable
- matched.group(5), # executable
- matched.group(6), # private
- int(matched.group(7), 16), # offset
- matched.group(8), # major
- matched.group(9), # minor
- int(matched.group(10), 10), # inode
- matched.group(11) # name
- )
- else:
- return None
-
- @staticmethod
- def constants(entry):
- return (entry.writable == '-' and entry.executable == '-' and re.match(
- '\S+(\.(so|dll|dylib|bundle)|chrome)((\.\d+)+\w*(\.\d+){0,3})?',
- entry.name))
-
- @staticmethod
- def executable(entry):
- return (entry.executable == 'x' and re.match(
- '\S+(\.(so|dll|dylib|bundle)|chrome)((\.\d+)+\w*(\.\d+){0,3})?',
- entry.name))
-
- @staticmethod
- def executable_and_constants(entry):
- return (((entry.writable == '-' and entry.executable == '-') or
- entry.executable == 'x') and re.match(
- '\S+(\.(so|dll|dylib|bundle)|chrome)((\.\d+)+\w*(\.\d+){0,3})?',
- entry.name))
-
- def _append_entry(self, entry):
- if self._sorted_indexes and self._sorted_indexes[-1] > entry.begin:
- self._sorted = False
- self._sorted_indexes.append(entry.begin)
- self._dictionary[entry.begin] = entry
-
-
-class ProcSmaps(object):
- """Reads and stores information in /proc/pid/smaps."""
- _SMAPS_PATTERN = re.compile(r'^(?P<NAME>[A-Za-z0-9_]+):\s+(?P<VALUE>.*)')
-
- class VMA(object):
- def __init__(self):
- self._size = 0
- self._rss = 0
- self._pss = 0
-
- def append(self, name, value):
- dct = {
- 'Size': '_size',
- 'Rss': '_rss',
- 'Pss': '_pss',
- 'Referenced': '_referenced',
- 'Private_Clean': '_private_clean',
- 'Shared_Clean': '_shared_clean',
- 'KernelPageSize': '_kernel_page_size',
- 'MMUPageSize': '_mmu_page_size',
- }
- if name in dct:
- self.__setattr__(dct[name], value)
-
- @property
- def size(self):
- if self._size.endswith('kB'):
- return int(self._size.split()[0])
- return int(self._size)
-
- @property
- def rss(self):
- if self._rss.endswith('kB'):
- return int(self._rss.split()[0])
- return int(self._rss)
-
- @property
- def pss(self):
- if self._pss.endswith('kB'):
- return int(self._pss.split()[0])
- return int(self._pss)
-
- def __init__(self, raw, total_dct, maps, vma_internals):
- self._raw = raw
- self._size = total_dct['Size']
- self._rss = total_dct['Rss']
- self._pss = total_dct['Pss']
- self._referenced = total_dct['Referenced']
- self._shared_clean = total_dct['Shared_Clean']
- self._private_clean = total_dct['Private_Clean']
- self._kernel_page_size = total_dct['KernelPageSize']
- self._mmu_page_size = total_dct['MMUPageSize']
- self._maps = maps
- self._vma_internals = vma_internals
-
- @staticmethod
- def load(pid):
- with open(os.path.join('/proc', str(pid), 'smaps'), 'r') as smaps_f:
- raw = smaps_f.readlines()
-
- vma = None
- vma_internals = collections.OrderedDict()
- total_dct = collections.defaultdict(int)
- maps = ProcMaps()
- for line in raw:
- maps_match = ProcMaps.MAPS_PATTERN.match(line)
- if maps_match:
- vma = maps.append_line(line.strip())
- vma_internals[vma] = ProcSmaps.VMA()
- else:
- smaps_match = ProcSmaps._SMAPS_PATTERN.match(line)
- if smaps_match:
- match_dict = smaps_match.groupdict()
- vma_internals[vma].append(match_dict['NAME'], match_dict['VALUE'])
- total_dct[match_dict['NAME']] += int(match_dict['VALUE'].split()[0])
-
- return ProcSmaps(raw, total_dct, maps, vma_internals)
-
- @property
- def size(self):
- return self._size
-
- @property
- def rss(self):
- return self._rss
-
- @property
- def referenced(self):
- return self._referenced
-
- @property
- def pss(self):
- return self._pss
-
- @property
- def private_clean(self):
- return self._private_clean
-
- @property
- def shared_clean(self):
- return self._shared_clean
-
- @property
- def kernel_page_size(self):
- return self._kernel_page_size
-
- @property
- def mmu_page_size(self):
- return self._mmu_page_size
-
- @property
- def vma_internals(self):
- return self._vma_internals
-
-
-class ProcPagemap(object):
- """Reads and stores partial information in /proc/pid/pagemap.
-
- It picks up virtual addresses to read based on ProcMaps (/proc/pid/maps).
- See https://www.kernel.org/doc/Documentation/vm/pagemap.txt for details.
- """
- _BYTES_PER_PAGEMAP_VALUE = 8
- _BYTES_PER_OS_PAGE = 4096
- _VIRTUAL_TO_PAGEMAP_OFFSET = _BYTES_PER_OS_PAGE / _BYTES_PER_PAGEMAP_VALUE
-
- _MASK_PRESENT = 1 << 63
- _MASK_SWAPPED = 1 << 62
- _MASK_FILEPAGE_OR_SHAREDANON = 1 << 61
- _MASK_SOFTDIRTY = 1 << 55
- _MASK_PFN = (1 << 55) - 1
-
- class VMA(object):
- def __init__(self, vsize, present, swapped, pageframes):
- self._vsize = vsize
- self._present = present
- self._swapped = swapped
- self._pageframes = pageframes
-
- @property
- def vsize(self):
- return int(self._vsize)
-
- @property
- def present(self):
- return int(self._present)
-
- @property
- def swapped(self):
- return int(self._swapped)
-
- @property
- def pageframes(self):
- return self._pageframes
-
- def __init__(self, vsize, present, swapped, vma_internals, in_process_dup):
- self._vsize = vsize
- self._present = present
- self._swapped = swapped
- self._vma_internals = vma_internals
- self._in_process_dup = in_process_dup
-
- @staticmethod
- def load(pid, maps):
- total_present = 0
- total_swapped = 0
- total_vsize = 0
- in_process_dup = 0
- vma_internals = collections.OrderedDict()
- process_pageframe_set = set()
-
- pagemap_fd = os.open(
- os.path.join('/proc', str(pid), 'pagemap'), os.O_RDONLY)
- for vma in maps:
- present = 0
- swapped = 0
- vsize = 0
- pageframes = collections.defaultdict(int)
- begin_offset = ProcPagemap._offset(vma.begin)
- chunk_size = ProcPagemap._offset(vma.end) - begin_offset
- os.lseek(pagemap_fd, begin_offset, os.SEEK_SET)
- buf = os.read(pagemap_fd, chunk_size)
- if len(buf) < chunk_size:
- _LOGGER.warn('Failed to read pagemap at 0x%x in %d.' % (vma.begin, pid))
- pagemap_values = struct.unpack(
- '=%dQ' % (len(buf) / ProcPagemap._BYTES_PER_PAGEMAP_VALUE), buf)
- for pagemap_value in pagemap_values:
- vsize += ProcPagemap._BYTES_PER_OS_PAGE
- if pagemap_value & ProcPagemap._MASK_PRESENT:
- if (pagemap_value & ProcPagemap._MASK_PFN) in process_pageframe_set:
- in_process_dup += ProcPagemap._BYTES_PER_OS_PAGE
- else:
- process_pageframe_set.add(pagemap_value & ProcPagemap._MASK_PFN)
- if (pagemap_value & ProcPagemap._MASK_PFN) not in pageframes:
- present += ProcPagemap._BYTES_PER_OS_PAGE
- pageframes[pagemap_value & ProcPagemap._MASK_PFN] += 1
- if pagemap_value & ProcPagemap._MASK_SWAPPED:
- swapped += ProcPagemap._BYTES_PER_OS_PAGE
- vma_internals[vma] = ProcPagemap.VMA(vsize, present, swapped, pageframes)
- total_present += present
- total_swapped += swapped
- total_vsize += vsize
- os.close(pagemap_fd)
-
- return ProcPagemap(total_vsize, total_present, total_swapped,
- vma_internals, in_process_dup)
-
- @staticmethod
- def _offset(virtual_address):
- return virtual_address / ProcPagemap._VIRTUAL_TO_PAGEMAP_OFFSET
-
- @property
- def vsize(self):
- return int(self._vsize)
-
- @property
- def present(self):
- return int(self._present)
-
- @property
- def swapped(self):
- return int(self._swapped)
-
- @property
- def vma_internals(self):
- return self._vma_internals
-
-
-class _ProcessMemory(object):
- """Aggregates process memory information from /proc for manual testing."""
- def __init__(self, pid):
- self._pid = pid
- self._maps = None
- self._pagemap = None
- self._stat = None
- self._status = None
- self._statm = None
- self._smaps = []
-
- def _read(self, proc_file):
- lines = []
- with open(os.path.join('/proc', str(self._pid), proc_file), 'r') as proc_f:
- lines = proc_f.readlines()
- return lines
-
- def read_all(self):
- self.read_stat()
- self.read_statm()
- self.read_status()
- self.read_smaps()
- self.read_maps()
- self.read_pagemap(self._maps)
-
- def read_maps(self):
- self._maps = ProcMaps.load(self._pid)
-
- def read_pagemap(self, maps):
- self._pagemap = ProcPagemap.load(self._pid, maps)
-
- def read_smaps(self):
- self._smaps = ProcSmaps.load(self._pid)
-
- def read_stat(self):
- self._stat = ProcStat.load(self._pid)
-
- def read_statm(self):
- self._statm = ProcStatm.load(self._pid)
-
- def read_status(self):
- self._status = ProcStatus.load(self._pid)
-
- @property
- def pid(self):
- return self._pid
-
- @property
- def maps(self):
- return self._maps
-
- @property
- def pagemap(self):
- return self._pagemap
-
- @property
- def smaps(self):
- return self._smaps
-
- @property
- def stat(self):
- return self._stat
-
- @property
- def statm(self):
- return self._statm
-
- @property
- def status(self):
- return self._status
-
-
-def main(argv):
- """The main function for manual testing."""
- _LOGGER.setLevel(logging.WARNING)
- handler = logging.StreamHandler()
- handler.setLevel(logging.WARNING)
- handler.setFormatter(logging.Formatter(
- '%(asctime)s:%(name)s:%(levelname)s:%(message)s'))
- _LOGGER.addHandler(handler)
-
- pids = []
- for arg in argv[1:]:
- try:
- pid = int(arg)
- except ValueError:
- raise SyntaxError("%s is not an integer." % arg)
- else:
- pids.append(pid)
-
- procs = {}
- for pid in pids:
- procs[pid] = _ProcessMemory(pid)
- procs[pid].read_all()
-
- print '=== PID: %d ===' % pid
-
- print ' stat: %d' % procs[pid].stat.vsize
- print ' statm: %d' % (procs[pid].statm.size * 4096)
- print ' status: %d (Peak:%d)' % (procs[pid].status.vm_size * 1024,
- procs[pid].status.vm_peak * 1024)
- print ' smaps: %d' % (procs[pid].smaps.size * 1024)
- print 'pagemap: %d' % procs[pid].pagemap.vsize
- print ' stat: %d' % (procs[pid].stat.rss * 4096)
- print ' statm: %d' % (procs[pid].statm.resident * 4096)
- print ' status: %d (Peak:%d)' % (procs[pid].status.vm_rss * 1024,
- procs[pid].status.vm_hwm * 1024)
- print ' smaps: %d' % (procs[pid].smaps.rss * 1024)
- print 'pagemap: %d' % procs[pid].pagemap.present
-
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main(sys.argv))
diff --git a/chromium/tools/lsan/PRESUBMIT.py b/chromium/tools/lsan/PRESUBMIT.py
deleted file mode 100644
index 8364d2c0dba..00000000000
--- a/chromium/tools/lsan/PRESUBMIT.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# 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.
-
-"""
-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
-for more details on the presubmit API built into gcl.
-"""
-
-import re
-
-def CheckChange(input_api, output_api):
- errors = []
-
- for f in input_api.AffectedFiles():
- if not f.LocalPath().endswith('suppressions.txt'):
- continue
- for line_num, line in enumerate(f.NewContents()):
- line = line.strip()
- if line.startswith('#') or not line:
- continue
- if not line.startswith('leak:'):
- errors.append('"%s" should be "leak:..." in %s line %d' %
- (line, f.LocalPath(), line_num))
- if errors:
- return [output_api.PresubmitError('\n'.join(errors))]
- return []
-
-def CheckChangeOnUpload(input_api, output_api):
- return CheckChange(input_api, output_api)
-
-def CheckChangeOnCommit(input_api, output_api):
- return CheckChange(input_api, output_api)
-
-def GetPreferredTrySlaves():
- return ['linux_asan']
diff --git a/chromium/tools/lsan/suppressions.txt b/chromium/tools/lsan/suppressions.txt
deleted file mode 100644
index a600398f495..00000000000
--- a/chromium/tools/lsan/suppressions.txt
+++ /dev/null
@@ -1,113 +0,0 @@
-# HeapCheck sanity test
-leak:base::ToolsSanityTest_MemoryLeak_Test::TestBody
-
-#### Third-party leaks ####
-
-# False positives in libfontconfig. http://crbug.com/39050
-leak:libfontconfig
-
-# False positive in Blink due to bit twiddling on pointers. http://crbug.com/242672
-# TODO(earthdok): Annotate.
-leak:WTF::BitVector::resizeOutOfLine
-
-# V8 leak, expect 1024 bytes leaked per process. http://crbug.com/99304
-leak:v8::internal::V8::Initialize
-
-# V8 GC issues in ProxyResolver tests, probably harmless. http://crbug.com/67378
-leak:net::ProxyResolverV8::SetPacScript
-leak:net::(anonymous namespace)::ProxyResolverV8WithMockBindings::SetPacScriptFromDisk
-leak:net::(anonymous namespace)::InitResolver
-leak:net::ProxyResolverScriptData::FromUTF8
-
-# A small string is leaked here (57 bytes per process). http://crbug.com/46571#c9
-leak:WebCore::V8GCController::collectGarbage
-
-# Intentional leak in Blink. http://crbug.com/121729
-# TODO(earthdok): annotate it.
-leak:WebCore::parseUASheet
-
-# http://crbug.com/270180
-leak:net::ProxyResolverV8::Context::ResolveProxy
-
-# NSS leaks in CertDatabaseNSSTest tests. http://crbug.com/51988
-leak:net::NSSCertDatabase::ImportFromPKCS12
-leak:net::NSSCertDatabase::ListCerts
-leak:net::NSSCertDatabase::DeleteCertAndKey
-leak:crypto::ScopedTestNSSDB::ScopedTestNSSDB
-# Another leak due to not shutting down NSS properly. http://crbug.com/124445
-leak:error_get_my_stack
-
-# The NSS suppressions above will not fire when the fast stack unwinder is used,
-# because it can't unwind through NSS libraries. Apply blanket suppressions for
-# now.
-leak:libnssutil3
-leak:libnspr4
-leak:libnss3
-leak:libplds4
-leak:libnssckbi
-
-# Skia leaks. http://crbug.com/189170
-leak:FontConfigTypeface::LegacyCreateTypeface
-
-# Skia leaks GrGpuGL::ProgramCache::Entry. http://crbug.com/262934
-leak:GrGpuGL::flushGraphicsState
-
-# xrandr leak. http://crbug.com/119677
-leak:XRRFindDisplay
-
-# V8 may leak this by design in unit tests. http://crbug.com/323149
-leak:v8::internal::Genesis::Genesis
-
-# Suppressions for objects which can be owned by the V8 heap. This is a
-# temporary workaround until LeakSanitizer supports the V8 heap.
-# http://crbug.com/328552
-leak:extensions::ObjectBackedNativeHandler::RouteFunction
-leak:toString<WTF::AtomicString>
-leak:WebCore::StringCache::createStringAndInsertIntoCache
-leak:WebCore::V8WindowShell::initializeIfNeeded
-leak:WebCore::V8MouseEvent::constructorCallback
-leak:WebCore::*::*GetterCallback
-leak:WebCore::*::*SetterCallback
-leak:WebCore::*::errorMethodCallback
-leak:WebCore::v8StringToWebCoreString
-leak:WTF::StringImpl::createUninitialized
-leak:ResourceBundleSourceMap::GetSource
-
-# http://crbug.com/328987
-leak:MetricsNetworkObserver::ProbeWifiPHYLayerProtocol
-leak:MetricsLog::MetricsLog
-
-#### Actual bugs in Chromium code ####
-# PLEASE DO NOT ADD NEW SUPPRESSIONS TO THIS SECTION. Instead, commits that
-# introduce memory leaks should be reverted.
-
-# Small test-only leak in ppapi_unittests. http://crbug.com/258113
-leak:ppapi::proxy::PPP_Instance_Private_ProxyTest_PPPInstancePrivate_Test
-
-# Leak in base_unittests. http://crbug.com/268267
-leak:base::WeakPtrTest_MoveOwnershipAfterInvalidate_Test::TestBody
-
-# Leak in cc_unittests. http://crbug.com/285174
-leak:gpu::gles2::GLES2DecoderImpl::DoBindRenderbuffer
-leak:gpu::gles2::GLES2DecoderImpl::DoRenderbufferStorage
-
-# Leak in cc_unittests. http://crbug.com/317965
-leak:cc::ThreadProxy::ReadyToFinalizeTextureUpdates
-
-# Leak in unit_tests and browser_tests. http://crbug.com/309468
-leak:TranslateBubbleView::CreateViewBeforeTranslate()
-
-# GTK leaks. GTK is deprecated, so we won't be fixing these.
-# Most of them should apply to the full browser process only.
-leak:StatusIconGtk::UpdatePlatformContextMenu
-leak:GlobalMenuBar::GlobalMenuBar
-leak:BookmarkBubbleGtk::InitFolderComboModel
-leak:TranslateInfoBarBase::CreateLanguageCombobox
-leak:GtkNativeViewManager
-leak:_gdk_x11_window_get_toplevel
-leak:gtk_util::*AppModal
-
-# http://crbug.com/318221
-leak:base::EnsureProcessTerminated
-
-# PLEASE DO NOT ADD NEW SUPPRESSIONS HERE. See the comment above.
diff --git a/chromium/tools/mac/dump-static-initializers.py b/chromium/tools/mac/dump-static-initializers.py
deleted file mode 100755
index 3a2c125062d..00000000000
--- a/chromium/tools/mac/dump-static-initializers.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 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.
-
-"""
-Dumps a list of files with static initializers. Use with release builds.
-
-Usage:
- tools/mac/dump-static-initializers.py out/Release/Chromium\ Framework.framework.dSYM/Contents/Resources/DWARF/Chromium\ Framework
-
-Do NOT use mac_strip_release=0 or component=shared_library if you want to use
-this script.
-"""
-
-import optparse
-import re
-import subprocess
-import sys
-
-# Matches for example:
-# [ 1] 000001ca 64 (N_SO ) 00 0000 0000000000000000 'test.cc'
-dsymutil_file_re = re.compile("N_SO.*'([^']*)'")
-
-# Matches for example:
-# [ 2] 000001d2 66 (N_OSO ) 00 0001 000000004ed856a0 '/Volumes/MacintoshHD2/src/chrome-git/src/test.o'
-dsymutil_o_file_re = re.compile("N_OSO.*'([^']*)'")
-
-# Matches for example:
-# [ 8] 00000233 24 (N_FUN ) 01 0000 0000000000001b40 '__GLOBAL__I_s'
-# [185989] 00dc69ef 26 (N_STSYM ) 02 0000 00000000022e2290 '__GLOBAL__I_a'
-dsymutil_re = re.compile(r"(?:N_FUN|N_STSYM).*\s[0-9a-f]*\s'__GLOBAL__I_")
-
-def ParseDsymutil(binary):
- """Given a binary, prints source and object filenames for files with
- static initializers.
- """
-
- child = subprocess.Popen(['dsymutil', '-s', binary], stdout=subprocess.PIPE)
- for line in child.stdout:
- file_match = dsymutil_file_re.search(line)
- if file_match:
- current_filename = file_match.group(1)
- else:
- o_file_match = dsymutil_o_file_re.search(line)
- if o_file_match:
- current_o_filename = o_file_match.group(1)
- else:
- match = dsymutil_re.search(line)
- if match:
- print current_filename
- print current_o_filename
- print
-
-
-def main():
- parser = optparse.OptionParser(usage='%prog filename')
- opts, args = parser.parse_args()
- if len(args) != 1:
- parser.error('missing filename argument')
- return 1
- binary = args[0]
-
- ParseDsymutil(binary)
- return 0
-
-
-if '__main__' == __name__:
- sys.exit(main())
diff --git a/chromium/tools/mac/symbolicate_crash.py b/chromium/tools/mac/symbolicate_crash.py
deleted file mode 100755
index 731cc85f8dc..00000000000
--- a/chromium/tools/mac/symbolicate_crash.py
+++ /dev/null
@@ -1,504 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-"""
-This script can take an Apple-style CrashReporter log and symbolicate it. This
-is useful for when a user's reports aren't being uploaded, for example.
-
-Only versions 6, 7, 8, and 9 reports are supported. For more information on the
-file format, reference this document:
- TN2123 <http://developer.apple.com/library/mac/#technotes/tn2004/tn2123.html>
-
-Information on symbolication was gleaned from:
- <http://developer.apple.com/tools/xcode/symbolizingcrashdumps.html>
-"""
-
-import optparse
-import os.path
-import re
-import subprocess
-import sys
-
-# Maps binary image identifiers to binary names (minus the .dSYM portion) found
-# in the archive. These are the only objects that will be looked up.
-SYMBOL_IMAGE_MAP = {
- 'com.google.Chrome': 'Google Chrome.app',
- 'com.google.Chrome.framework': 'Google Chrome Framework.framework',
- 'com.google.Chrome.helper': 'Google Chrome Helper.app'
-}
-
-class CrashReport(object):
- """A parsed representation of an Apple CrashReport text file."""
- def __init__(self, file_name):
- super(CrashReport, self).__init__()
- self.report_info = {}
- self.threads = []
- self._binary_images = {}
-
- fd = open(file_name, 'r')
- self._ParseHeader(fd)
-
- # Try and get the report version. If it's not a version we handle, abort.
- self.report_version = int(self.report_info['Report Version'])
- # Version 6: 10.5 and 10.6 crash report
- # Version 7: 10.6 spindump report
- # Version 8: 10.7 spindump report
- # Version 9: 10.7 crash report
- valid_versions = (6, 7, 8, 9)
- if self.report_version not in valid_versions:
- raise Exception("Only crash reports of versions %s are accepted." %
- str(valid_versions))
-
- # If this is a spindump (version 7 or 8 report), use a special parser. The
- # format is undocumented, but is similar to version 6. However, the spindump
- # report contains user and kernel stacks for every process on the system.
- if self.report_version == 7 or self.report_version == 8:
- self._ParseSpindumpStack(fd)
- else:
- self._ParseStack(fd)
-
- self._ParseBinaryImages(fd)
- fd.close()
-
- def Symbolicate(self, symbol_path):
- """Symbolicates a crash report stack trace."""
- # In order to be efficient, collect all the offsets that will be passed to
- # atos by the image name.
- offsets_by_image = self._CollectAddressesForImages(SYMBOL_IMAGE_MAP.keys())
-
- # For each image, run atos with the list of addresses.
- for image_name, addresses in offsets_by_image.items():
- # If this image was not loaded or is in no stacks, skip.
- if image_name not in self._binary_images or not len(addresses):
- continue
-
- # Combine the |image_name| and |symbol_path| into the path of the dSYM.
- dsym_file = self._GetDSymPath(symbol_path, image_name)
-
- # From the list of 2-Tuples of (frame, address), create a list of just
- # addresses.
- address_list = map(lambda x: x[1], addresses)
-
- # Look up the load address of the image.
- binary_base = self._binary_images[image_name][0]
-
- # This returns a list of just symbols. The indices will match up with the
- # list of |addresses|.
- symbol_names = self._RunAtos(binary_base, dsym_file, address_list)
- if not symbol_names:
- print 'Error loading symbols for ' + image_name
- continue
-
- # Attaches a list of symbol names to stack frames. This assumes that the
- # order of |addresses| has stayed the same as |symbol_names|.
- self._AddSymbolsToFrames(symbol_names, addresses)
-
- def _ParseHeader(self, fd):
- """Parses the header section of a crash report, which contains the OS and
- application version information."""
- # The header is made up of different sections, depending on the type of
- # report and the report version. Almost all have a format of a key and
- # value separated by a colon. Accumulate all of these artifacts into a
- # dictionary until the first thread stack is reached.
- thread_re = re.compile('^[ \t]*Thread ([a-f0-9]+)')
- line = ''
- while not thread_re.match(line):
- # Skip blank lines. There are typically three or four sections separated
- # by newlines in the header.
- line = line.strip()
- if line:
- parts = line.split(':', 1)
- # Certain lines in different report versions don't follow the key-value
- # format, so skip them.
- if len(parts) == 2:
- # There's a varying amount of space padding after the ':' to align all
- # the values; strip that.
- self.report_info[parts[0]] = parts[1].lstrip()
- line = fd.readline()
-
- # When this loop exits, the header has been read in full. However, the first
- # thread stack heading has been read past. Seek backwards from the current
- # position by the length of the line so that it is re-read when
- # _ParseStack() is entered.
- fd.seek(-len(line), os.SEEK_CUR)
-
- def _ParseStack(self, fd):
- """Parses the stack dump of a crash report and creates a list of threads
- and their stack traces."""
- # Compile a regex that matches the start of a thread stack. Note that this
- # must be specific to not include the thread state section, which comes
- # right after all the stack traces.
- line_re = re.compile('^Thread ([0-9]+)( Crashed)?:(.*)')
-
- # On entry into this function, the fd has been walked up to the "Thread 0"
- # line.
- line = fd.readline().rstrip()
- in_stack = False
- thread = None
- while line_re.match(line) or in_stack:
- # Check for start of the thread stack.
- matches = line_re.match(line)
-
- if not line.strip():
- # A blank line indicates a break in the thread stack.
- in_stack = False
- elif matches:
- # If this is the start of a thread stack, create the CrashThread.
- in_stack = True
- thread = CrashThread(matches.group(1))
- thread.name = matches.group(3)
- thread.did_crash = matches.group(2) != None
- self.threads.append(thread)
- else:
- # All other lines are stack frames.
- thread.stack.append(self._ParseStackFrame(line))
- # Read the next line.
- line = fd.readline()
-
- def _ParseStackFrame(self, line):
- """Takes in a single line of text and transforms it into a StackFrame."""
- frame = StackFrame(line)
-
- # A stack frame is in the format of:
- # |<frame-number> <binary-image> 0x<address> <symbol> <offset>|.
- regex = '^([0-9]+) +(.+)[ \t]+(0x[0-9a-f]+) (.*) \+ ([0-9]+)$'
- matches = re.match(regex, line)
- if matches is None:
- return frame
-
- # Create a stack frame with the information extracted from the regex.
- frame.frame_id = matches.group(1)
- frame.image = matches.group(2)
- frame.address = int(matches.group(3), 0) # Convert HEX to an int.
- frame.original_symbol = matches.group(4)
- frame.offset = matches.group(5)
- frame.line = None
- return frame
-
- def _ParseSpindumpStack(self, fd):
- """Parses a spindump stack report. In this format, each thread stack has
- both a user and kernel trace. Only the user traces are symbolicated."""
-
- # The stack trace begins with the thread header, which is identified by a
- # HEX number. The thread names appear to be incorrect in spindumps.
- user_thread_re = re.compile('^ Thread ([0-9a-fx]+)')
-
- # When this method is called, the fd has been walked right up to the first
- # line.
- line = fd.readline()
- in_user_stack = False
- in_kernel_stack = False
- thread = None
- frame_id = 0
- while user_thread_re.match(line) or in_user_stack or in_kernel_stack:
- # Check for the start of a thread.
- matches = user_thread_re.match(line)
-
- if not line.strip():
- # A blank line indicates the start of a new thread. The blank line comes
- # after the kernel stack before a new thread header.
- in_kernel_stack = False
- elif matches:
- # This is the start of a thread header. The next line is the heading for
- # the user stack, followed by the actual trace.
- thread = CrashThread(matches.group(1))
- frame_id = 0
- self.threads.append(thread)
- in_user_stack = True
- line = fd.readline() # Read past the 'User stack:' header.
- elif line.startswith(' Kernel stack:'):
- # The kernel stack header comes immediately after the last frame (really
- # the top frame) in the user stack, without a blank line.
- in_user_stack = False
- in_kernel_stack = True
- elif in_user_stack:
- # If this is a line while in the user stack, parse it as a stack frame.
- thread.stack.append(self._ParseSpindumpStackFrame(line))
- # Loop with the next line.
- line = fd.readline()
-
- # When the loop exits, the file has been read through the 'Binary images:'
- # header. Seek backwards so that _ParseBinaryImages() does the right thing.
- fd.seek(-len(line), os.SEEK_CUR)
-
- def _ParseSpindumpStackFrame(self, line):
- """Parses a spindump-style stackframe."""
- frame = StackFrame(line)
-
- # The format of the frame is either:
- # A: |<space><steps> <symbol> + <offset> (in <image-name>) [<address>]|
- # B: |<space><steps> ??? (in <image-name> + <offset>) [<address>]|
- regex_a = '^([ ]+[0-9]+) (.*) \+ ([0-9]+) \(in (.*)\) \[(0x[0-9a-f]+)\]'
- regex_b = '^([ ]+[0-9]+) \?\?\?( \(in (.*) \+ ([0-9]+)\))? \[(0x[0-9a-f]+)\]'
-
- # Create the stack frame with the information extracted from the regex.
- matches = re.match(regex_a, line)
- if matches:
- frame.frame_id = matches.group(1)[4:] # Remove some leading spaces.
- frame.original_symbol = matches.group(2)
- frame.offset = matches.group(3)
- frame.image = matches.group(4)
- frame.address = int(matches.group(5), 0)
- frame.line = None
- return frame
-
- # If pattern A didn't match (which it will most of the time), try B.
- matches = re.match(regex_b, line)
- if matches:
- frame.frame_id = matches.group(1)[4:] # Remove some leading spaces.
- frame.image = matches.group(3)
- frame.offset = matches.group(4)
- frame.address = int(matches.group(5), 0)
- frame.line = None
- return frame
-
- # Otherwise, this frame could not be matched and just use the raw input.
- frame.line = frame.line.strip()
- return frame
-
- def _ParseBinaryImages(self, fd):
- """Parses out the binary images section in order to get the load offset."""
- # The parser skips some sections, so advance until the "Binary Images"
- # header is reached.
- while not fd.readline().lstrip().startswith("Binary Images:"): pass
-
- # Create a regex to match the lines of format:
- # |0x<start> - 0x<end> <binary-image> <version> (<version>) <<UUID>> <path>|
- image_re = re.compile(
- '[ ]*(0x[0-9a-f]+) -[ \t]+(0x[0-9a-f]+) [+ ]([a-zA-Z0-9._\-]+)')
-
- # This section is in this format:
- # |<start address> - <end address> <image name>|.
- while True:
- line = fd.readline()
- if not line.strip():
- # End when a blank line is hit.
- return
- # Match the line to the regex.
- match = image_re.match(line)
- if match:
- # Store the offsets by image name so it can be referenced during
- # symbolication. These are hex numbers with leading '0x', so int() can
- # convert them to decimal if base=0.
- address_range = (int(match.group(1), 0), int(match.group(2), 0))
- self._binary_images[match.group(3)] = address_range
-
- def _CollectAddressesForImages(self, images):
- """Iterates all the threads and stack frames and all the stack frames that
- are in a list of binary |images|. The result is a dictionary, keyed by the
- image name that maps to a list of tuples. Each is a 2-Tuple of
- (stack_frame, address)"""
- # Create the collection and initialize it with empty lists for each image.
- collection = {}
- for image in images:
- collection[image] = []
-
- # Perform the iteration.
- for thread in self.threads:
- for frame in thread.stack:
- image_name = self._ImageForAddress(frame.address)
- if image_name in images:
- # Replace the image name in the frame in case it was elided.
- frame.image = image_name
- collection[frame.image].append((frame, frame.address))
-
- # Return the result.
- return collection
-
- def _ImageForAddress(self, address):
- """Given a PC address, returns the bundle identifier of the image in which
- the address resides."""
- for image_name, address_range in self._binary_images.items():
- if address >= address_range[0] and address <= address_range[1]:
- return image_name
- return None
-
- def _GetDSymPath(self, base_path, image_name):
- """Takes a base path for the symbols and an image name. It looks the name up
- in SYMBOL_IMAGE_MAP and creates a full path to the dSYM in the bundle."""
- image_file = SYMBOL_IMAGE_MAP[image_name]
- return os.path.join(base_path, image_file + '.dSYM', 'Contents',
- 'Resources', 'DWARF',
- os.path.splitext(image_file)[0]) # Chop off the extension.
-
- def _RunAtos(self, load_address, dsym_file, addresses):
- """Runs the atos with the provided arguments. |addresses| is used as stdin.
- Returns a list of symbol information in the same order as |addresses|."""
- args = ['atos', '-l', str(load_address), '-o', dsym_file]
-
- # Get the arch type. This is of the format |X86 (Native)|.
- if 'Code Type' in self.report_info:
- arch = self.report_info['Code Type'].lower().split(' ')
- if len(arch) == 2:
- arch = arch[0]
- if arch == 'x86':
- # The crash report refers to i386 as x86, but atos doesn't know what
- # that is.
- arch = 'i386'
- args.extend(['-arch', arch])
-
- proc = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
- addresses = map(hex, addresses)
- (stdout, stderr) = proc.communicate(' '.join(addresses))
- if proc.returncode:
- return None
- return stdout.rstrip().split('\n')
-
- def _AddSymbolsToFrames(self, symbols, address_tuples):
- """Takes a single value (the list) from _CollectAddressesForImages and does
- a smart-zip with the data returned by atos in |symbols|. Note that the
- indices must match for this to succeed."""
- if len(symbols) != len(address_tuples):
- print 'symbols do not match'
-
- # Each line of output from atos is in this format:
- # |<symbol> (in <image>) (<file>:<line>)|.
- line_regex = re.compile('(.+) \(in (.+)\) (\((.+):([0-9]+)\))?')
-
- # Zip the two data sets together.
- for i in range(len(symbols)):
- symbol_parts = line_regex.match(symbols[i])
- if not symbol_parts:
- continue # Error.
- frame = address_tuples[i][0]
- frame.symbol = symbol_parts.group(1)
- frame.image = symbol_parts.group(2)
- frame.file_name = symbol_parts.group(4)
- frame.line_number = symbol_parts.group(5)
-
-
-class CrashThread(object):
- """A CrashThread represents a stacktrace of a single thread """
- def __init__(self, thread_id):
- super(CrashThread, self).__init__()
- self.thread_id = thread_id
- self.name = None
- self.did_crash = False
- self.stack = []
-
- def __repr__(self):
- name = ''
- if self.name:
- name = ': ' + self.name
- return 'Thread ' + self.thread_id + name + '\n' + \
- '\n'.join(map(str, self.stack))
-
-
-class StackFrame(object):
- """A StackFrame is owned by a CrashThread."""
- def __init__(self, line):
- super(StackFrame, self).__init__()
- # The original line. This will be set to None if symbolication was
- # successfuly.
- self.line = line
-
- self.frame_id = 0
- self.image = None
- self.address = 0x0
- self.original_symbol = None
- self.offset = 0x0
- # The following members are set after symbolication.
- self.symbol = None
- self.file_name = None
- self.line_number = 0
-
- def __repr__(self):
- # If symbolication failed, just use the original line.
- if self.line:
- return ' %s' % self.line
-
- # Use different location information depending on symbolicated data.
- location = None
- if self.file_name:
- location = ' - %s:%s' % (self.file_name, self.line_number)
- else:
- location = ' + %s' % self.offset
-
- # Same with the symbol information.
- symbol = self.original_symbol
- if self.symbol:
- symbol = self.symbol
-
- return ' %s\t0x%x\t[%s\t%s]\t%s' % (self.frame_id, self.address,
- self.image, location, symbol)
-
-
-def PrettyPrintReport(report):
- """Takes a crash report and prints it like the crash server would."""
- print 'Process : ' + report.report_info['Process']
- print 'Version : ' + report.report_info['Version']
- print 'Date : ' + report.report_info['Date/Time']
- print 'OS Version : ' + report.report_info['OS Version']
- print
- if 'Crashed Thread' in report.report_info:
- print 'Crashed Thread : ' + report.report_info['Crashed Thread']
- print
- if 'Event' in report.report_info:
- print 'Event : ' + report.report_info['Event']
- print
-
- for thread in report.threads:
- print
- if thread.did_crash:
- exc_type = report.report_info['Exception Type'].split(' ')[0]
- exc_code = report.report_info['Exception Codes'].replace('at', '@')
- print '*CRASHED* ( ' + exc_type + ' / ' + exc_code + ' )'
- # Version 7 reports have spindump-style output (with a stepped stack trace),
- # so remove the first tab to get better alignment.
- if report.report_version == 7:
- for line in repr(thread).split('\n'):
- print line.replace('\t', ' ', 1)
- else:
- print thread
-
-
-def Main(args):
- """Program main."""
- parser = optparse.OptionParser(
- usage='%prog [options] symbol_path crash_report',
- description='This will parse and symbolicate an Apple CrashReporter v6-9 '
- 'file.')
- parser.add_option('-s', '--std-path', action='store_true', dest='std_path',
- help='With this flag, the symbol_path is a containing '
- 'directory, in which a dSYM files are stored in a '
- 'directory named by the version. Example: '
- '[symbolicate_crash.py -s ./symbols/ report.crash] will '
- 'look for dSYMs in ./symbols/15.0.666.0/ if the report is '
- 'from that verison.')
- (options, args) = parser.parse_args(args[1:])
-
- # Check that we have something to symbolicate.
- if len(args) != 2:
- parser.print_usage()
- return 1
-
- report = CrashReport(args[1])
- symbol_path = None
-
- # If not using the standard layout, this is a full path to the symbols.
- if not options.std_path:
- symbol_path = args[0]
- # Otherwise, use the report version to locate symbols in a directory.
- else:
- # This is in the format of |M.N.B.P (B.P)|. Get just the part before the
- # space.
- chrome_version = report.report_info['Version'].split(' ')[0]
- symbol_path = os.path.join(args[0], chrome_version)
-
- # Check that the symbols exist.
- if not os.path.isdir(symbol_path):
- print >>sys.stderr, 'Symbol path %s is not a directory' % symbol_path
- return 2
-
- print >>sys.stderr, 'Using symbols from ' + symbol_path
- print >>sys.stderr, '=' * 80
-
- report.Symbolicate(symbol_path)
- PrettyPrintReport(report)
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(Main(sys.argv))
diff --git a/chromium/tools/measure_page_load_time/ff_ext/chrome.manifest b/chromium/tools/measure_page_load_time/ff_ext/chrome.manifest
deleted file mode 100644
index 9e1d73d4284..00000000000
--- a/chromium/tools/measure_page_load_time/ff_ext/chrome.manifest
+++ /dev/null
@@ -1,2 +0,0 @@
-content measurepageloadtimeextension content/
-overlay chrome://browser/content/browser.xul chrome://measurepageloadtimeextension/content/firefoxOverlay.xul
diff --git a/chromium/tools/measure_page_load_time/ff_ext/content/firefoxOverlay.xul b/chromium/tools/measure_page_load_time/ff_ext/content/firefoxOverlay.xul
deleted file mode 100644
index 1c5529eaa69..00000000000
--- a/chromium/tools/measure_page_load_time/ff_ext/content/firefoxOverlay.xul
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?xml-stylesheet href="chrome://measurepageloadtimeextension/skin/overlay.css" type="text/css"?>
-<!DOCTYPE overlay SYSTEM "chrome://measurepageloadtimeextension/locale/measurepageloadtimeextension.dtd">
-<overlay id="measurepageloadtimeextension-overlay"
- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
- <script src="measure_page_load_time.js"/>
-</overlay>
diff --git a/chromium/tools/measure_page_load_time/ff_ext/content/measure_page_load_time.js b/chromium/tools/measure_page_load_time/ff_ext/content/measure_page_load_time.js
deleted file mode 100644
index 44473ccb105..00000000000
--- a/chromium/tools/measure_page_load_time/ff_ext/content/measure_page_load_time.js
+++ /dev/null
@@ -1,209 +0,0 @@
-// Copyright (c) 2012 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.
-
-/**
- * @fileoverview measure_page_load_time.js implements a Firefox extension
- * for measuring how long a page takes to load. It waits on TCP port
- * 42492 for connections, then accepts URLs and returns strings of the
- * form url,time, where "time" is the load time in milliseconds or the
- * string "timeout" or "error". Load time is measured from the call to
- * loadURI until the load event fires, or until the status changes to
- * STATUS_STOP if the load event doesn't fire (there's an error.)
- * @author jhaas@google.com (Jonathan Haas) */
-
-// Shorthand reference to nsIWebProgress[Listener] interfaces
-var IWP = Components.interfaces.nsIWebProgress;
-var IWPL = Components.interfaces.nsIWebProgressListener;
-
-
-var MPLT = {
- /**
- * Constants
- */
- PORT_NUMBER : 42492, // port to listen for connections on
- TIME_OUT : 4 * 60 * 1000, // timeout in 4 minutes
-
- /**
- * Incoming URL buffer
- * @type {string}
- */
- textBuffer : '',
-
- /**
- * URL we're currently visiting
- * @type {string}
- */
- URL : '',
-
- /**
- * Listener to accept incoming connections
- * @type {nsIServerSocketListener}
- */
- acceptListener :
- {
- onSocketAccepted : function(serverSocket, transport)
- {
- MPLT.streamInput = transport.openInputStream(0,0,0);
- MPLT.streamOutput = transport.openOutputStream(0,0,0);
-
- MPLT.scriptStream = Components.classes['@mozilla.org/scriptableinputstream;1']
- .createInstance(Components.interfaces.nsIScriptableInputStream);
- MPLT.scriptStream.init(MPLT.streamInput);
- MPLT.pump = Components.classes['@mozilla.org/network/input-stream-pump;1']
- .createInstance(Components.interfaces.nsIInputStreamPump);
- MPLT.pump.init(MPLT.streamInput, -1, -1, 0, 0, false);
- MPLT.pump.asyncRead(MPLT.dataListener,null);
- },
-
- onStopListening : function(){}
- },
-
- /**
- * Listener for network input
- * @type {nsIStreamListener}
- */
- dataListener :
- {
- onStartRequest: function(){},
- onStopRequest: function(){},
- onDataAvailable: function(request, context, inputStream, offset, count){
- // Add the received data to the buffer, then process it
- // Change CRLF to newline while we're at it
- MPLT.textBuffer += MPLT.scriptStream.read(count).replace('\r\n', '\n');
-
- MPLT.process();
- }
- },
-
- /**
- * Process the incoming data buffer
- */
- process : function()
- {
- // If we're waiting for a page to finish loading, wait
- if (MPLT.timeLoadStarted)
- return;
-
- // Look for a carriage return
- var firstCR = MPLT.textBuffer.indexOf('\n');
-
- // If we haven't received a carriage return yet, wait
- if (firstCR < 0)
- return;
-
- // If the first character was a carriage return, we're done!
- if (firstCR == 0) {
- MPLT.textBuffer = '';
- MPLT.streamInput.close();
- MPLT.streamOutput.close();
-
- return;
- }
-
- // Remove the URL from the buffer
- MPLT.URL = MPLT.textBuffer.substr(0, firstCR);
- MPLT.textBuffer = MPLT.textBuffer.substr(firstCR + 1);
-
- // Remember the current time and navigate to the new URL
- MPLT.timeLoadStarted = new Date();
- gBrowser.loadURIWithFlags(MPLT.URL, gBrowser.LOAD_FLAGS_BYPASS_CACHE);
- setTimeout('MPLT.onTimeOut()', MPLT.TIME_OUT);
- },
-
- /**
- * Page load completion handler
- */
- onPageLoad : function(e) {
- // Ignore loads of non-HTML documents
- if (!(e.originalTarget instanceof HTMLDocument))
- return;
-
- // Also ignore subframe loads
- if (e.originalTarget.defaultView.frameElement)
- return;
-
- clearTimeout();
- var timeElapsed = new Date() - MPLT.timeLoadStarted;
-
- MPLT.outputResult(timeElapsed);
- },
-
- /**
- * Timeout handler
- */
- onTimeOut : function() {
- gBrowser.stop();
-
- MPLT.outputResult('timeout');
- },
-
-
- /**
- * Sends a properly-formatted result to the client
- * @param {string} result The value to send along with the URL
- */
- outputResult : function(result) {
-
- if (MPLT.URL) {
- var outputString = MPLT.URL + ',' + result + '\n';
- MPLT.streamOutput.write(outputString, outputString.length);
- MPLT.URL = '';
- }
-
- MPLT.timeLoadStarted = null;
- MPLT.process();
- },
-
- /**
- * Time the page load started. If null, we're waiting for the
- * initial page load, or otherwise don't care about the page
- * that's currently loading
- * @type {number}
- */
- timeLoadStarted : null,
-
- /*
- * TODO(jhaas): add support for nsIWebProgressListener
- * If the URL being visited died as part of a network error
- * (host not found, connection reset by peer, etc), the onload
- * event doesn't fire. The only way to catch it would be in
- * a web progress listener. However, nsIWebProgress is not
- * behaving according to documentation. More research is needed.
- * For now, omitting it means that if any of our URLs are "dirty"
- * (do not point to real web servers with real responses), we'll log
- * them as timeouts. This doesn't affect pages where the server
- * exists but returns an error code.
- */
-
- /**
- * Initialize the plugin, create the socket and listen
- */
- initialize: function() {
- // Register for page load events
- gBrowser.addEventListener('load', this.onPageLoad, true);
-
- // Set a timeout to wait for the initial page to load
- MPLT.timeLoadStarted = new Date();
- setTimeout('MPLT.onTimeOut()', MPLT.TIME_OUT);
-
- // Create the listening socket
- MPLT.serverSocket = Components.classes['@mozilla.org/network/server-socket;1']
- .createInstance(Components.interfaces.nsIServerSocket);
-
- MPLT.serverSocket.init(MPLT.PORT_NUMBER, true, 1);
- MPLT.serverSocket.asyncListen(this.acceptListener);
- },
-
- /**
- * Close the socket(s)
- */
- deinitialize: function() {
- if (MPLT.streamInput) MPLT.streamInput.close();
- if (MPLT.streamOutput) MPLT.streamOutput.close();
- if (MPLT.serverSocket) MPLT.serverSocket.close();
- }
-};
-
-window.addEventListener('load', function(e) { MPLT.initialize(); }, false);
-window.addEventListener('unload', function(e) { MPLT.deinitialize(); }, false);
diff --git a/chromium/tools/measure_page_load_time/ff_ext/install.rdf b/chromium/tools/measure_page_load_time/ff_ext/install.rdf
deleted file mode 100644
index c79d24e66f3..00000000000
--- a/chromium/tools/measure_page_load_time/ff_ext/install.rdf
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:em="http://www.mozilla.org/2004/em-rdf#">
- <Description about="urn:mozilla:install-manifest">
- <em:id>measurepageloadtimeextension@google.com</em:id>
- <em:name>MeasurePageLoadTime</em:name>
- <em:version>1.0</em:version>
- <em:creator>Jonathan Haas</em:creator>
- <em:targetApplication>
- <Description>
- <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> <!-- firefox -->
- <em:minVersion>1.5</em:minVersion>
- <em:maxVersion>3.0.*</em:maxVersion>
- </Description>
- </em:targetApplication>
- </Description>
-</RDF>
diff --git a/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.cpp b/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.cpp
deleted file mode 100644
index d3a8d542519..00000000000
--- a/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright (c) 2012 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.
-
-// MeasurePageLoadTime.cpp : Implementation of DLL Exports.
-
-#include "stdafx.h"
-#include "resource.h"
-#include "MeasurePageLoadTime.h"
-
-
-class CMeasurePageLoadTimeModule : public CAtlDllModuleT< CMeasurePageLoadTimeModule >
-{
-public :
- DECLARE_LIBID(LIBID_MeasurePageLoadTimeLib)
- DECLARE_REGISTRY_APPID_RESOURCEID(IDR_MEASUREPAGELOADTIME, "{56C6D9F9-643C-4F6E-906C-5F7CECB23C24}")
-};
-
-CMeasurePageLoadTimeModule _AtlModule;
-
-
-#ifdef _MANAGED
-#pragma managed(push, off)
-#endif
-
-// DLL Entry Point
-extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
-{
- if (dwReason == DLL_PROCESS_ATTACH)
- {
- DisableThreadLibraryCalls(hInstance);
- }
- return _AtlModule.DllMain(dwReason, lpReserved);
-}
-
-#ifdef _MANAGED
-#pragma managed(pop)
-#endif
-
-
-
-
-// Used to determine whether the DLL can be unloaded by OLE
-STDAPI DllCanUnloadNow(void)
-{
- return _AtlModule.DllCanUnloadNow();
-}
-
-
-// Returns a class factory to create an object of the requested type
-STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
-{
- return _AtlModule.DllGetClassObject(rclsid, riid, ppv);
-}
-
-
-// DllRegisterServer - Adds entries to the system registry
-STDAPI DllRegisterServer(void)
-{
- // registers object, typelib and all interfaces in typelib
- HRESULT hr = _AtlModule.DllRegisterServer();
- return hr;
-}
-
-
-// DllUnregisterServer - Removes entries from the system registry
-STDAPI DllUnregisterServer(void)
-{
- HRESULT hr = _AtlModule.DllUnregisterServer();
- return hr;
-}
-
diff --git a/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.def b/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.def
deleted file mode 100644
index 5552923379d..00000000000
--- a/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.def
+++ /dev/null
@@ -1,9 +0,0 @@
-; MeasurePageLoadTime.def : Declares the module parameters.
-
-LIBRARY "MeasurePageLoadTime.DLL"
-
-EXPORTS
- DllCanUnloadNow PRIVATE
- DllGetClassObject PRIVATE
- DllRegisterServer PRIVATE
- DllUnregisterServer PRIVATE
diff --git a/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.idl b/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.idl
deleted file mode 100644
index d2f98da3089..00000000000
--- a/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright (c) 2012 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.
-
-// MeasurePageLoadTime.idl : IDL source for MeasurePageLoadTime
-//
-
-// This file will be processed by the MIDL tool to
-// produce the type library (MeasurePageLoadTime.tlb) and marshalling code.
-
-import "oaidl.idl";
-import "ocidl.idl";
-
-[
- object,
- uuid(019637EB-B865-485B-9A66-419477EE55A0),
- dual,
- nonextensible,
- helpstring("IMeasurePageLoadTimeBHO Interface"),
- pointer_default(unique)
-]
-interface IMeasurePageLoadTimeBHO : IDispatch{
-};
-[
- uuid(61AC7AC4-B715-4955-A238-5F9AEA80DF4B),
- version(1.0),
- helpstring("MeasurePageLoadTime 1.0 Type Library")
-]
-library MeasurePageLoadTimeLib
-{
- importlib("stdole2.tlb");
- [
- uuid(807E68BC-238F-4163-AE4B-0A3604F3E145),
- helpstring("MeasurePageLoadTimeBHO Class")
- ]
- coclass MeasurePageLoadTimeBHO
- {
- [default] interface IMeasurePageLoadTimeBHO;
- };
-};
diff --git a/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.rc b/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.rc
deleted file mode 100644
index 9285a705062..00000000000
--- a/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.rc
+++ /dev/null
@@ -1,121 +0,0 @@
-// Microsoft Visual C++ generated resource script.
-//
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "winres.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// English (U.S.) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-#ifdef _WIN32
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-#pragma code_page(1252)
-#endif //_WIN32
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE
-BEGIN
- "resource.h\0"
-END
-
-2 TEXTINCLUDE
-BEGIN
- "#include ""winres.h""\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "1 TYPELIB ""MeasurePageLoadTime.tlb""\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1,0,0,1
- PRODUCTVERSION 1,0,0,1
- FILEFLAGSMASK 0x3fL
-#ifdef _DEBUG
- FILEFLAGS 0x1L
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS 0x4L
- FILETYPE 0x2L
- FILESUBTYPE 0x0L
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904e4"
- BEGIN
- VALUE "CompanyName", "Google"
- VALUE "FileDescription", "Measures page load times"
- VALUE "FileVersion", "1.0.0.1"
- VALUE "LegalCopyright", "(c) 2008 Google. All rights reserved."
- VALUE "InternalName", "MeasurePageLoadTime.dll"
- VALUE "OriginalFilename", "MeasurePageLoadTime.dll"
- VALUE "ProductName", "MeasurePageLoadTime"
- VALUE "ProductVersion", "1.0.0.1"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1252
- END
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// REGISTRY
-//
-
-IDR_MEASUREPAGELOADTIME REGISTRY "MeasurePageLoadTime.rgs"
-IDR_MEASUREPAGELOADTIMEBHO REGISTRY "MeasurePageLoadTimeBHO.rgs"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE
-BEGIN
- IDS_PROJNAME "MeasurePageLoadTime"
-END
-
-#endif // English (U.S.) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-1 TYPELIB "MeasurePageLoadTime.tlb"
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
-
diff --git a/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.rgs b/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.rgs
deleted file mode 100644
index 98e7f78318e..00000000000
--- a/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.rgs
+++ /dev/null
@@ -1,29 +0,0 @@
-HKCR
-{
- NoRemove AppID
- {
- '%APPID%' = s 'MeasurePageLoadTime'
- 'MeasurePageLoadTime.DLL'
- {
- val AppID = s '%APPID%'
- }
- }
-}
-
-HKLM {
- NoRemove SOFTWARE {
- NoRemove Microsoft {
- NoRemove Windows {
- NoRemove CurrentVersion {
- NoRemove Explorer {
- NoRemove 'Browser Helper Objects' {
- ForceRemove '{807E68BC-238F-4163-AE4B-0A3604F3E145}' = s 'MeasurePageLoadTimeBHO' {
- val 'NoExplorer' = d '1'
- }
- }
- }
- }
- }
- }
- }
-}
diff --git a/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.vcproj b/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.vcproj
deleted file mode 100644
index 9ed8327bf95..00000000000
--- a/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.vcproj
+++ /dev/null
@@ -1,320 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8.00"
- Name="MeasurePageLoadTime"
- ProjectGUID="{151243DF-25BE-4A88-B566-8B7AE8970E86}"
- RootNamespace="MeasurePageLoadTime"
- Keyword="AtlProj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="2"
- UseOfATL="2"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="_DEBUG"
- MkTypLibCompatible="false"
- TargetEnvironment="1"
- GenerateStublessProxies="true"
- TypeLibraryName="$(IntDir)/MeasurePageLoadTime.tlb"
- HeaderFileName="MeasurePageLoadTime.h"
- DLLDataFileName=""
- InterfaceIdentifierFileName="MeasurePageLoadTime_i.c"
- ProxyFileName="MeasurePageLoadTime_p.c"
- ValidateParameters="false"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG;_USRDLL"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="2"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- AdditionalIncludeDirectories="$(IntDir)"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- RegisterOutput="true"
- IgnoreImportLibrary="true"
- AdditionalDependencies="ws2_32.lib"
- LinkIncremental="2"
- ModuleDefinitionFile=".\MeasurePageLoadTime.def"
- GenerateDebugInformation="true"
- SubSystem="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="2"
- UseOfATL="1"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="NDEBUG"
- MkTypLibCompatible="false"
- TargetEnvironment="1"
- GenerateStublessProxies="true"
- TypeLibraryName="$(IntDir)/MeasurePageLoadTime.tlb"
- HeaderFileName="MeasurePageLoadTime.h"
- DLLDataFileName=""
- InterfaceIdentifierFileName="MeasurePageLoadTime_i.c"
- ProxyFileName="MeasurePageLoadTime_p.c"
- ValidateParameters="false"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG;_USRDLL"
- RuntimeLibrary="0"
- UsePrecompiledHeader="2"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- AdditionalIncludeDirectories="$(IntDir)"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- RegisterOutput="true"
- IgnoreImportLibrary="true"
- AdditionalDependencies="ws2_32.lib"
- LinkIncremental="1"
- ModuleDefinitionFile=".\MeasurePageLoadTime.def"
- GenerateDebugInformation="true"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath=".\MeasurePageLoadTime.cpp"
- >
- </File>
- <File
- RelativePath=".\MeasurePageLoadTime.def"
- >
- </File>
- <File
- RelativePath=".\MeasurePageLoadTime.idl"
- >
- </File>
- <File
- RelativePath=".\MeasurePageLoadTimeBHO.cpp"
- >
- </File>
- <File
- RelativePath=".\stdafx.cpp"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="1"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="1"
- />
- </FileConfiguration>
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File
- RelativePath=".\MeasurePageLoadTimeBHO.h"
- >
- </File>
- <File
- RelativePath=".\stdafx.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- <File
- RelativePath=".\MeasurePageLoadTime.rc"
- >
- </File>
- <File
- RelativePath=".\MeasurePageLoadTime.rgs"
- >
- </File>
- <File
- RelativePath=".\MeasurePageLoadTimeBHO.rgs"
- >
- </File>
- </Filter>
- <Filter
- Name="Generated Files"
- SourceControlFiles="false"
- >
- <File
- RelativePath=".\MeasurePageLoadTime.h"
- >
- </File>
- <File
- RelativePath=".\MeasurePageLoadTime_i.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="0"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="0"
- />
- </FileConfiguration>
- </File>
- </Filter>
- <File
- RelativePath=".\ReadMe.txt"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTimeBHO.cpp b/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTimeBHO.cpp
deleted file mode 100644
index 3de87f3c803..00000000000
--- a/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTimeBHO.cpp
+++ /dev/null
@@ -1,292 +0,0 @@
-// Copyright (c) 2012 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.
-
-// Implements a Browser Helper Object (BHO) which opens a socket
-// and waits to receive URLs over it. Visits those URLs, measuring
-// how long it takes between the start of navigation and the
-// DocumentComplete event, and returns the time in milliseconds as
-// a string to the caller.
-
-#include "stdafx.h"
-#include "MeasurePageLoadTimeBHO.h"
-
-#define MAX_URL 1024 // size of URL buffer
-#define MAX_PAGELOADTIME (4*60*1000) // assume all pages take < 4 minutes
-#define PORT 42492 // port to listen on. Also jhaas's
- // old MSFT employee number
-
-
-// Static function to serve as thread entry point, takes a "this"
-// pointer as pParam and calls the method in the object
-static DWORD WINAPI ProcessPageTimeRequests(LPVOID pThis) {
- reinterpret_cast<CMeasurePageLoadTimeBHO*>(pThis)->ProcessPageTimeRequests();
-
- return 0;
-}
-
-
-STDMETHODIMP CMeasurePageLoadTimeBHO::SetSite(IUnknown* pUnkSite)
-{
- if (pUnkSite != NULL)
- {
- // Cache the pointer to IWebBrowser2.
- HRESULT hr = pUnkSite->QueryInterface(IID_IWebBrowser2, (void **)&m_spWebBrowser);
- if (SUCCEEDED(hr))
- {
- // Register to sink events from DWebBrowserEvents2.
- hr = DispEventAdvise(m_spWebBrowser);
- if (SUCCEEDED(hr))
- {
- m_fAdvised = TRUE;
- }
-
- // Stash the interface in the global interface table
- CComGITPtr<IWebBrowser2> git(m_spWebBrowser);
- m_dwCookie = git.Detach();
-
- // Create the event to be signaled when navigation completes.
- // Start it in nonsignaled state, and allow it to be triggered
- // when the initial page load is done.
- m_hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
-
- // Create a thread to wait on the socket
- HANDLE hThread = CreateThread(NULL, 0, ::ProcessPageTimeRequests, this, 0, NULL);
- }
- }
- else
- {
- // Unregister event sink.
- if (m_fAdvised)
- {
- DispEventUnadvise(m_spWebBrowser);
- m_fAdvised = FALSE;
- }
-
- // Release cached pointers and other resources here.
- m_spWebBrowser.Release();
- }
-
- // Call base class implementation.
- return IObjectWithSiteImpl<CMeasurePageLoadTimeBHO>::SetSite(pUnkSite);
-}
-
-
-void STDMETHODCALLTYPE CMeasurePageLoadTimeBHO::OnDocumentComplete(IDispatch *pDisp, VARIANT *pvarURL)
-{
- if (pDisp == m_spWebBrowser)
- {
- // Fire the event when the page is done loading
- // to unblock the other thread.
- SetEvent(m_hEvent);
- }
-}
-
-
-void CMeasurePageLoadTimeBHO::ProcessPageTimeRequests()
-{
- CoInitialize(NULL);
-
- // The event will start in nonsignaled state, meaning that
- // the initial page load isn't done yet. Wait for that to
- // finish before doing anything.
- //
- // It seems to be the case that the BHO will get loaded
- // and SetSite called always before the initial page load
- // even begins, but just to be on the safe side, we won't
- // wait indefinitely.
- WaitForSingleObject(m_hEvent, MAX_PAGELOADTIME);
-
- // Retrieve the web browser interface from the global table
- CComGITPtr<IWebBrowser2> git(m_dwCookie);
- IWebBrowser2* browser;
- git.CopyTo(&browser);
-
- // Create a listening socket
- m_sockListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- if (m_sockListen == SOCKET_ERROR)
- ErrorExit();
-
- BOOL on = TRUE;
- if (setsockopt(m_sockListen, SOL_SOCKET, SO_REUSEADDR,
- (const char*)&on, sizeof(on)))
- ErrorExit();
-
- // Bind the listening socket
- SOCKADDR_IN addrBind;
-
- addrBind.sin_family = AF_INET;
- addrBind.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
- addrBind.sin_port = htons(PORT);
-
- if (bind(m_sockListen, (sockaddr*)&addrBind, sizeof(addrBind)))
- ErrorExit();
-
- // Listen for incoming connections
- if (listen(m_sockListen, 1))
- ErrorExit();
-
- // Ensure the socket is blocking... it should be by default, but
- // it can't hurt to make sure
- unsigned long nNonblocking = 0;
- if (ioctlsocket(m_sockListen, FIONBIO, &nNonblocking))
- ErrorExit();
-
- m_sockTransport = 0;
-
- // Loop indefinitely waiting for connections
- while(1)
- {
- SOCKADDR_IN addrConnected;
- int sConnected = sizeof(addrConnected);
-
- // Wait for a client to connect and send a URL
- m_sockTransport = accept(
- m_sockListen, (sockaddr*)&addrConnected, &sConnected);
-
- if (m_sockTransport == SOCKET_ERROR)
- ErrorExit();
-
- char pbBuffer[MAX_URL], strURL[MAX_URL];
- DWORD cbRead, cbWritten;
-
- bool fDone = false;
-
- // Loop until we're done with this client
- while (!fDone)
- {
- *strURL = '\0';
- bool fReceivedCR = false;
-
- do
- {
- // Only receive up to the first carriage return
- cbRead = recv(m_sockTransport, pbBuffer, MAX_URL-1, MSG_PEEK);
-
- // An error on read most likely means that the remote peer
- // closed the connection. Go back to waiting
- if (cbRead == 0)
- {
- fDone = true;
- break;
- }
-
- // Null terminate the received characters so strchr() is safe
- pbBuffer[cbRead] = '\0';
-
- if(char* pchFirstCR = strchr(pbBuffer, '\n'))
- {
- cbRead = (DWORD)(pchFirstCR - pbBuffer + 1);
- fReceivedCR = true;
- }
-
- // The below call will not block, since we determined with
- // MSG_PEEK that at least cbRead bytes are in the TCP receive buffer
- recv(m_sockTransport, pbBuffer, cbRead, 0);
- pbBuffer[cbRead] = '\0';
-
- strcat_s(strURL, sizeof(strURL), pbBuffer);
- } while (!fReceivedCR);
-
- // If an error occurred while reading, exit this loop
- if (fDone)
- break;
-
- // Strip the trailing CR and/or LF
- int i;
- for (i = (int)strlen(strURL)-1; i >= 0 && isspace(strURL[i]); i--)
- {
- strURL[i] = '\0';
- }
-
- if (i < 0)
- {
- // Sending a carriage return on a line by itself means that
- // the client is done making requests
- fDone = true;
- }
- else
- {
- // Send the browser to the requested URL
- CComVariant vNavFlags( navNoReadFromCache );
- CComVariant vTargetFrame("_self");
- CComVariant vPostData("");
- CComVariant vHTTPHeaders("");
-
- ResetEvent(m_hEvent);
- DWORD dwStartTime = GetTickCount();
-
- HRESULT hr = browser->Navigate(
- CComBSTR(strURL),
- &vNavFlags,
- &vTargetFrame, // TargetFrameName
- &vPostData, // PostData
- &vHTTPHeaders // Headers
- );
-
- // The main browser thread will call OnDocumentComplete() when
- // the page is done loading, which will in turn trigger
- // m_hEvent. Wait here until then; the event will reset itself
- // once this thread is released
- if (WaitForSingleObject(m_hEvent, MAX_PAGELOADTIME) == WAIT_TIMEOUT)
- {
- sprintf_s(pbBuffer, sizeof(pbBuffer), "%s,timeout\n", strURL);
-
- browser->Stop();
- }
- else
- {
- // Format the elapsed time as a string
- DWORD dwLoadTime = GetTickCount() - dwStartTime;
- sprintf_s(
- pbBuffer, sizeof(pbBuffer), "%s,%d\n", strURL, dwLoadTime);
- }
-
- // Send the result. Just in case the TCP buffer can't handle
- // the whole thing, send in parts if necessary
- char *chSend = pbBuffer;
-
- while (*chSend)
- {
- cbWritten = send(
- m_sockTransport, chSend, (int)strlen(chSend), 0);
-
- // Error on send probably means connection reset by peer
- if (cbWritten == 0)
- {
- fDone = true;
- break;
- }
-
- chSend += cbWritten;
- }
- }
- }
-
- // Close the transport socket and wait for another connection
- closesocket(m_sockTransport);
- m_sockTransport = 0;
- }
-}
-
-
-void CMeasurePageLoadTimeBHO::ErrorExit()
-{
- // Unlink from IE, close the sockets, then terminate this
- // thread
- SetSite(NULL);
-
- if (m_sockTransport && m_sockTransport != SOCKET_ERROR)
- {
- closesocket(m_sockTransport);
- m_sockTransport = 0;
- }
-
- if (m_sockListen && m_sockListen != SOCKET_ERROR)
- {
- closesocket(m_sockListen);
- m_sockListen = 0;
- }
-
- TerminateThread(GetCurrentThread(), -1);
-}
diff --git a/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTimeBHO.h b/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTimeBHO.h
deleted file mode 100644
index cabb02401f5..00000000000
--- a/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTimeBHO.h
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright (c) 2006-2008 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.
-
-// MeasurePageLoadTimeBHO.h : Declaration of the CMeasurePageLoadTimeBHO
-
-#include "resource.h" // main symbols
-
-#include <shlguid.h> // IID_IWebBrowser2, DIID_DWebBrowserEvents2, et
-#include <exdispid.h> // DISPID_DOCUMENTCOMPLETE, etc.
-
-#include <string>
-
-#include "MeasurePageLoadTime.h"
-
-
-#if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
-#error "Single-threaded COM objects are not properly supported on Windows CE platform, such as the Windows Mobile platforms that do not include full DCOM support. Define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA to force ATL to support creating single-thread COM objects and allow use of its single-threaded COM object implementations. The threading model in your rgs file was set to 'Free' as that is the only threading model supported in non DCOM Windows CE platforms."
-#endif
-
-
-
-// CMeasurePageLoadTimeBHO
-
-class ATL_NO_VTABLE CMeasurePageLoadTimeBHO :
- public CComObjectRootEx<CComSingleThreadModel>,
- public CComCoClass<CMeasurePageLoadTimeBHO, &CLSID_MeasurePageLoadTimeBHO>,
- public IObjectWithSiteImpl<CMeasurePageLoadTimeBHO>,
- public IDispatchImpl<IMeasurePageLoadTimeBHO, &IID_IMeasurePageLoadTimeBHO, &LIBID_MeasurePageLoadTimeLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
- public IDispEventImpl<1, CMeasurePageLoadTimeBHO, &DIID_DWebBrowserEvents2, &LIBID_SHDocVw, 1, 1>
-{
-public:
- CMeasurePageLoadTimeBHO()
- {
- }
-
-DECLARE_REGISTRY_RESOURCEID(IDR_MEASUREPAGELOADTIMEBHO)
-
-DECLARE_NOT_AGGREGATABLE(CMeasurePageLoadTimeBHO)
-
-BEGIN_COM_MAP(CMeasurePageLoadTimeBHO)
- COM_INTERFACE_ENTRY(IMeasurePageLoadTimeBHO)
- COM_INTERFACE_ENTRY(IDispatch)
- COM_INTERFACE_ENTRY(IObjectWithSite)
-END_COM_MAP()
-
-BEGIN_SINK_MAP(CMeasurePageLoadTimeBHO)
- SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE, OnDocumentComplete)
-END_SINK_MAP()
-
- // DWebBrowserEvents2
- void STDMETHODCALLTYPE OnDocumentComplete(IDispatch *pDisp, VARIANT *pvarURL);
- STDMETHOD(SetSite)(IUnknown *pUnkSite);
-
- DECLARE_PROTECT_FINAL_CONSTRUCT()
-
- HRESULT FinalConstruct()
- {
- return S_OK;
- }
-
- void FinalRelease()
- {
- }
-
- void ProcessPageTimeRequests(void);
- void VisitNextURL(void);
- void ErrorExit(void);
-
-private:
- CComPtr<IWebBrowser2> m_spWebBrowser;
- BOOL m_fAdvised;
-
- // Handle to global interface table
- DWORD m_dwCookie;
-
- // Handle to event to signal when navigation completes
- HANDLE m_hEvent;
-
- // Socket for accepting incoming connections
- SOCKET m_sockListen;
-
- // Socket for communicating with remote peers
- SOCKET m_sockTransport;
-};
-
-OBJECT_ENTRY_AUTO(__uuidof(MeasurePageLoadTimeBHO), CMeasurePageLoadTimeBHO)
diff --git a/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTimeBHO.rgs b/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTimeBHO.rgs
deleted file mode 100644
index 907015fc30b..00000000000
--- a/chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTimeBHO.rgs
+++ /dev/null
@@ -1,27 +0,0 @@
-HKCR
-{
- MeasurePageLoadTime.MeasurePageLoadTi.1 = s 'MeasurePageLoadTimeBHO Class'
- {
- CLSID = s '{807E68BC-238F-4163-AE4B-0A3604F3E145}'
- }
- MeasurePageLoadTime.MeasurePageLoadTime = s 'MeasurePageLoadTimeBHO Class'
- {
- CLSID = s '{807E68BC-238F-4163-AE4B-0A3604F3E145}'
- CurVer = s 'MeasurePageLoadTime.MeasurePageLoadTi.1'
- }
- NoRemove CLSID
- {
- ForceRemove {807E68BC-238F-4163-AE4B-0A3604F3E145} = s 'MeasurePageLoadTimeBHO Class'
- {
- ProgID = s 'MeasurePageLoadTime.MeasurePageLoadTi.1'
- VersionIndependentProgID = s 'MeasurePageLoadTime.MeasurePageLoadTime'
- ForceRemove 'Programmable'
- InprocServer32 = s '%MODULE%'
- {
- val ThreadingModel = s 'Apartment'
- }
- val AppID = s '%APPID%'
- 'TypeLib' = s '{61AC7AC4-B715-4955-A238-5F9AEA80DF4B}'
- }
- }
-}
diff --git a/chromium/tools/measure_page_load_time/ie_bho/resource.h b/chromium/tools/measure_page_load_time/ie_bho/resource.h
deleted file mode 100644
index 38dc82565b7..00000000000
--- a/chromium/tools/measure_page_load_time/ie_bho/resource.h
+++ /dev/null
@@ -1,18 +0,0 @@
-//{{NO_DEPENDENCIES}}
-// Microsoft Visual C++ generated include file.
-// Used by MeasurePageLoadTime.rc
-//
-#define IDS_PROJNAME 100
-#define IDR_MEASUREPAGELOADTIME 101
-#define IDR_MEASUREPAGELOADTIMEBHO 102
-
-// Next default values for new objects
-//
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 201
-#define _APS_NEXT_COMMAND_VALUE 32768
-#define _APS_NEXT_CONTROL_VALUE 201
-#define _APS_NEXT_SYMED_VALUE 103
-#endif
-#endif
diff --git a/chromium/tools/memory_watcher/DEPS b/chromium/tools/memory_watcher/DEPS
deleted file mode 100644
index b273ae3319c..00000000000
--- a/chromium/tools/memory_watcher/DEPS
+++ /dev/null
@@ -1,3 +0,0 @@
-include_rules = [
- "+ui/gfx",
-]
diff --git a/chromium/tools/memory_watcher/README b/chromium/tools/memory_watcher/README
deleted file mode 100644
index 4850b18246f..00000000000
--- a/chromium/tools/memory_watcher/README
+++ /dev/null
@@ -1,17 +0,0 @@
-memory_watcher is a library that can be linked into chromium to trace the
-memory allocations. It works by hooking the system allocation/deallocation
-functions, and recording the actions.
-
-To use memory_watcher in chromium:
-
-(1) Compile the memory_watcher library (it is part of the solution by default)
-
-(2) Run chromium with these flags "--memory-profile -no-sandbox"
-(The instrumentation doesn't work with the sandbox)
-
-(3) Hit ctrl-alt-D to generate a dump of the memory allocations.
-This will create a log file called memorywatcher.logXXXX for every
-chromium process (where XXXX is the pid).
-
-The log file is a human readable text format, which can be further analyzed
-using the helpers in the "scripts/" directory.
diff --git a/chromium/tools/memory_watcher/call_stack.cc b/chromium/tools/memory_watcher/call_stack.cc
deleted file mode 100644
index 6f829b45017..00000000000
--- a/chromium/tools/memory_watcher/call_stack.cc
+++ /dev/null
@@ -1,399 +0,0 @@
-// Copyright (c) 2010 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.
-
-#include "tools/memory_watcher/call_stack.h"
-
-#include <shlwapi.h>
-#include <tlhelp32.h>
-
-#include "base/strings/string_number_conversions.h"
-#include "tools/memory_watcher/memory_hook.h"
-
-// Typedefs for explicit dynamic linking with functions exported from
-// dbghelp.dll.
-typedef BOOL (__stdcall *t_StackWalk64)(DWORD, HANDLE, HANDLE,
- LPSTACKFRAME64, PVOID,
- PREAD_PROCESS_MEMORY_ROUTINE64,
- PFUNCTION_TABLE_ACCESS_ROUTINE64,
- PGET_MODULE_BASE_ROUTINE64,
- PTRANSLATE_ADDRESS_ROUTINE64);
-typedef PVOID (__stdcall *t_SymFunctionTableAccess64)(HANDLE, DWORD64);
-typedef DWORD64 (__stdcall *t_SymGetModuleBase64)(HANDLE, DWORD64);
-typedef BOOL (__stdcall *t_SymCleanup)(HANDLE);
-typedef BOOL (__stdcall *t_SymGetSymFromAddr64)(HANDLE, DWORD64,
- PDWORD64, PIMAGEHLP_SYMBOL64);
-typedef BOOL (__stdcall *t_SymGetLineFromAddr64)(HANDLE, DWORD64, PDWORD,
- PIMAGEHLP_LINE64);
-typedef BOOL (__stdcall *t_SymInitialize)(HANDLE, PCTSTR, BOOL);
-typedef DWORD (__stdcall *t_SymGetOptions)(void);
-typedef DWORD (__stdcall *t_SymSetOptions)(DWORD);
-typedef BOOL (__stdcall *t_SymGetSearchPath)(HANDLE, PTSTR, DWORD);
-typedef DWORD64 (__stdcall *t_SymLoadModule64)(HANDLE, HANDLE, PCSTR,
- PCSTR, DWORD64, DWORD);
-typedef BOOL (__stdcall *t_SymGetModuleInfo64)(HANDLE, DWORD64,
- PIMAGEHLP_MODULE64);
-
-// static
-base::Lock CallStack::dbghelp_lock_;
-// static
-bool CallStack::dbghelp_loaded_ = false;
-// static
-DWORD CallStack::active_thread_id_ = 0;
-
-
-static t_StackWalk64 pStackWalk64 = NULL;
-static t_SymCleanup pSymCleanup = NULL;
-static t_SymGetSymFromAddr64 pSymGetSymFromAddr64 = NULL;
-static t_SymFunctionTableAccess64 pSymFunctionTableAccess64 = NULL;
-static t_SymGetModuleBase64 pSymGetModuleBase64 = NULL;
-static t_SymGetLineFromAddr64 pSymGetLineFromAddr64 = NULL;
-static t_SymInitialize pSymInitialize = NULL;
-static t_SymGetOptions pSymGetOptions = NULL;
-static t_SymSetOptions pSymSetOptions = NULL;
-static t_SymGetModuleInfo64 pSymGetModuleInfo64 = NULL;
-static t_SymGetSearchPath pSymGetSearchPath = NULL;
-static t_SymLoadModule64 pSymLoadModule64 = NULL;
-
-#define LOADPROC(module, name) do { \
- p##name = reinterpret_cast<t_##name>(GetProcAddress(module, #name)); \
- if (p##name == NULL) return false; \
-} while (0)
-
-// This code has to be VERY careful to not induce any allocations, as memory
-// watching code may cause recursion, which may obscure the stack for the truly
-// offensive issue. We use this function to break into a debugger, and it
-// is guaranteed to not do any allocations (in fact, not do anything).
-static void UltraSafeDebugBreak() {
- _asm int(3);
-}
-
-// static
-bool CallStack::LoadDbgHelp() {
- if (!dbghelp_loaded_) {
- base::AutoLock Lock(dbghelp_lock_);
-
- // Re-check if we've loaded successfully now that we have the lock.
- if (dbghelp_loaded_)
- return true;
-
- // Load dbghelp.dll, and obtain pointers to the exported functions that we
- // will be using.
- HMODULE dbghelp_module = LoadLibrary(L"dbghelp.dll");
- if (dbghelp_module) {
- LOADPROC(dbghelp_module, StackWalk64);
- LOADPROC(dbghelp_module, SymFunctionTableAccess64);
- LOADPROC(dbghelp_module, SymGetModuleBase64);
- LOADPROC(dbghelp_module, SymCleanup);
- LOADPROC(dbghelp_module, SymGetSymFromAddr64);
- LOADPROC(dbghelp_module, SymGetLineFromAddr64);
- LOADPROC(dbghelp_module, SymInitialize);
- LOADPROC(dbghelp_module, SymGetOptions);
- LOADPROC(dbghelp_module, SymSetOptions);
- LOADPROC(dbghelp_module, SymGetModuleInfo64);
- LOADPROC(dbghelp_module, SymGetSearchPath);
- LOADPROC(dbghelp_module, SymLoadModule64);
- dbghelp_loaded_ = true;
- } else {
- UltraSafeDebugBreak();
- return false;
- }
- }
- return dbghelp_loaded_;
-}
-
-// Load the symbols for generating stack traces.
-static bool LoadSymbols(HANDLE process_handle) {
- static bool symbols_loaded = false;
- if (symbols_loaded) return true;
-
- BOOL ok;
-
- // Initialize the symbol engine.
- ok = pSymInitialize(process_handle, /* hProcess */
- NULL, /* UserSearchPath */
- FALSE); /* fInvadeProcess */
- if (!ok) return false;
-
- DWORD options = pSymGetOptions();
- options |= SYMOPT_LOAD_LINES;
- options |= SYMOPT_FAIL_CRITICAL_ERRORS;
- options |= SYMOPT_UNDNAME;
- options = pSymSetOptions(options);
-
- const DWORD kMaxSearchPath = 1024;
- TCHAR buf[kMaxSearchPath] = {0};
- ok = pSymGetSearchPath(process_handle, buf, kMaxSearchPath);
- if (!ok)
- return false;
-
- HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,
- GetCurrentProcessId());
- if (snapshot == INVALID_HANDLE_VALUE)
- return false;
-
- MODULEENTRY32W module;
- module.dwSize = sizeof(module); // Set the size of the structure.
- BOOL cont = Module32FirstW(snapshot, &module);
- while (cont) {
- DWORD64 base;
- // NOTE the SymLoadModule64 function has the peculiarity of accepting a
- // both unicode and ASCII strings even though the parameter is PSTR.
- base = pSymLoadModule64(process_handle,
- 0,
- reinterpret_cast<PSTR>(module.szExePath),
- reinterpret_cast<PSTR>(module.szModule),
- reinterpret_cast<DWORD64>(module.modBaseAddr),
- module.modBaseSize);
- if (base == 0) {
- int err = GetLastError();
- if (err != ERROR_MOD_NOT_FOUND && err != ERROR_INVALID_HANDLE)
- return false;
- }
- cont = Module32NextW(snapshot, &module);
- }
- CloseHandle(snapshot);
-
- symbols_loaded = true;
- return true;
-}
-
-
-CallStack::SymbolCache* CallStack::symbol_cache_;
-
-bool CallStack::Initialize() {
- // We need to delay load the symbol cache until after
- // the MemoryHook heap is alive.
- symbol_cache_ = new SymbolCache();
- return LoadDbgHelp();
-}
-
-CallStack::CallStack() {
- static LONG callstack_id = 0;
- frame_count_ = 0;
- hash_ = 0;
- id_ = InterlockedIncrement(&callstack_id);
- valid_ = false;
-
- if (!dbghelp_loaded_) {
- UltraSafeDebugBreak(); // Initialize should have been called.
- return;
- }
-
- GetStackTrace();
-}
-
-bool CallStack::IsEqual(const CallStack &target) {
- if (frame_count_ != target.frame_count_)
- return false; // They can't be equal if the sizes are different.
-
- // Walk the frames array until we
- // either find a mismatch, or until we reach the end of the call stacks.
- for (int index = 0; index < frame_count_; index++) {
- if (frames_[index] != target.frames_[index])
- return false; // Found a mismatch. They are not equal.
- }
-
- // Reached the end of the call stacks. They are equal.
- return true;
-}
-
-void CallStack::AddFrame(DWORD_PTR pc) {
- DCHECK(frame_count_ < kMaxTraceFrames);
- frames_[frame_count_++] = pc;
-
- // Create a unique id for this CallStack.
- pc = pc + (frame_count_ * 13); // Alter the PC based on position in stack.
- hash_ = ~hash_ + (pc << 15);
- hash_ = hash_ ^ (pc >> 12);
- hash_ = hash_ + (pc << 2);
- hash_ = hash_ ^ (pc >> 4);
- hash_ = hash_ * 2057;
- hash_ = hash_ ^ (pc >> 16);
-}
-
-bool CallStack::LockedRecursionDetected() const {
- if (!active_thread_id_) return false;
- DWORD thread_id = GetCurrentThreadId();
- // TODO(jar): Perchance we should use atomic access to member.
- return thread_id == active_thread_id_;
-}
-
-bool CallStack::GetStackTrace() {
- if (LockedRecursionDetected())
- return false;
-
- // Initialize the context record.
- CONTEXT context;
- memset(&context, 0, sizeof(context));
- context.ContextFlags = CONTEXT_FULL;
- __asm call x
- __asm x: pop eax
- __asm mov context.Eip, eax
- __asm mov context.Ebp, ebp
- __asm mov context.Esp, esp
-
- STACKFRAME64 frame;
- memset(&frame, 0, sizeof(frame));
-
-#ifdef _M_IX86
- DWORD image_type = IMAGE_FILE_MACHINE_I386;
- frame.AddrPC.Offset = context.Eip;
- frame.AddrPC.Mode = AddrModeFlat;
- frame.AddrFrame.Offset = context.Ebp;
- frame.AddrFrame.Mode = AddrModeFlat;
- frame.AddrStack.Offset = context.Esp;
- frame.AddrStack.Mode = AddrModeFlat;
-#elif
- NOT IMPLEMENTED!
-#endif
-
- HANDLE current_process = GetCurrentProcess();
- HANDLE current_thread = GetCurrentThread();
-
- // Walk the stack.
- unsigned int count = 0;
- {
- AutoDbgHelpLock thread_monitoring_lock;
-
- while (count < kMaxTraceFrames) {
- count++;
- if (!pStackWalk64(image_type,
- current_process,
- current_thread,
- &frame,
- &context,
- 0,
- pSymFunctionTableAccess64,
- pSymGetModuleBase64,
- NULL))
- break; // Couldn't trace back through any more frames.
-
- if (frame.AddrFrame.Offset == 0)
- continue; // End of stack.
-
- // Push this frame's program counter onto the provided CallStack.
- AddFrame((DWORD_PTR)frame.AddrPC.Offset);
- }
- valid_ = true;
- }
- return true;
-}
-
-void CallStack::ToString(PrivateAllocatorString* output) {
- static const int kStackWalkMaxNameLen = MAX_SYM_NAME;
- HANDLE current_process = GetCurrentProcess();
-
- if (!LoadSymbols(current_process)) {
- *output = "Error";
- return;
- }
-
- base::AutoLock lock(dbghelp_lock_);
-
- // Iterate through each frame in the call stack.
- for (int32 index = 0; index < frame_count_; index++) {
- PrivateAllocatorString line;
-
- DWORD_PTR intruction_pointer = frame(index);
-
- SymbolCache::iterator it;
- it = symbol_cache_->find(intruction_pointer);
- if (it != symbol_cache_->end()) {
- line = it->second;
- } else {
- // Try to locate a symbol for this frame.
- DWORD64 symbol_displacement = 0;
- ULONG64 buffer[(sizeof(IMAGEHLP_SYMBOL64) +
- sizeof(TCHAR)*kStackWalkMaxNameLen +
- sizeof(ULONG64) - 1) / sizeof(ULONG64)];
- IMAGEHLP_SYMBOL64* symbol = reinterpret_cast<IMAGEHLP_SYMBOL64*>(buffer);
- memset(buffer, 0, sizeof(buffer));
- symbol->SizeOfStruct = sizeof(IMAGEHLP_SYMBOL64);
- symbol->MaxNameLength = kStackWalkMaxNameLen;
- BOOL ok = pSymGetSymFromAddr64(current_process, // hProcess
- intruction_pointer, // Address
- &symbol_displacement, // Displacement
- symbol); // Symbol
- if (ok) {
- // Try to locate more source information for the symbol.
- IMAGEHLP_LINE64 Line;
- memset(&Line, 0, sizeof(Line));
- Line.SizeOfStruct = sizeof(Line);
- DWORD line_displacement;
- ok = pSymGetLineFromAddr64(current_process,
- intruction_pointer,
- &line_displacement,
- &Line);
- if (ok) {
- // Skip junk symbols from our internal stuff.
- if (strstr(symbol->Name, "CallStack::") ||
- strstr(symbol->Name, "MemoryWatcher::") ||
- strstr(symbol->Name, "Perftools_") ||
- strstr(symbol->Name, "MemoryHook::") ) {
- // Just record a blank string.
- (*symbol_cache_)[intruction_pointer] = "";
- continue;
- }
-
- line += " ";
- line += static_cast<char*>(Line.FileName);
- line += " (";
- // TODO(jar): get something like this template to work :-/
- // line += IntToCustomString<PrivateAllocatorString>(Line.LineNumber);
- // ...and then delete this line, which uses std::string.
- line += base::IntToString(Line.LineNumber).c_str();
- line += "): ";
- line += symbol->Name;
- line += "\n";
- } else {
- line += " unknown (0):";
- line += symbol->Name;
- line += "\n";
- }
- } else {
- // OK - couldn't get any info. Try for the module.
- IMAGEHLP_MODULE64 module_info;
- module_info.SizeOfStruct = sizeof(module_info);
- if (pSymGetModuleInfo64(current_process, intruction_pointer,
- &module_info)) {
- line += " (";
- line += static_cast<char*>(module_info.ModuleName);
- line += ")\n";
- } else {
- line += " ???\n";
- }
- }
- }
-
- (*symbol_cache_)[intruction_pointer] = line;
- *output += line;
- }
- *output += "==================\n";
-}
-
-
-base::Lock AllocationStack::freelist_lock_;
-AllocationStack* AllocationStack::freelist_ = NULL;
-
-void* AllocationStack::operator new(size_t size) {
- DCHECK(size == sizeof(AllocationStack));
- {
- base::AutoLock lock(freelist_lock_);
- if (freelist_ != NULL) {
- AllocationStack* stack = freelist_;
- freelist_ = freelist_->next_;
- stack->next_ = NULL;
- return stack;
- }
- }
- return MemoryHook::Alloc(size);
-}
-
-void AllocationStack::operator delete(void* ptr) {
- AllocationStack *stack = reinterpret_cast<AllocationStack*>(ptr);
- base::AutoLock lock(freelist_lock_);
- DCHECK(stack->next_ == NULL);
- stack->next_ = freelist_;
- freelist_ = stack;
-}
diff --git a/chromium/tools/memory_watcher/call_stack.h b/chromium/tools/memory_watcher/call_stack.h
deleted file mode 100644
index 941aad4987e..00000000000
--- a/chromium/tools/memory_watcher/call_stack.h
+++ /dev/null
@@ -1,168 +0,0 @@
-// Copyright (c) 2010 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.
-//
-// Parts of this module come from:
-// http://www.codeproject.com/KB/applications/visualleakdetector.aspx
-// by Dan Moulding.
-// http://www.codeproject.com/KB/threads/StackWalker.aspx
-// by Jochen Kalmbach
-
-#ifndef TOOLS_MEMORY_WATCHER_CALL_STACK_H_
-#define TOOLS_MEMORY_WATCHER_CALL_STACK_H_
-
-#include <windows.h>
-#include <dbghelp.h>
-#include <functional>
-#include <map>
-#include <string>
-
-#include "base/logging.h"
-#include "base/synchronization/lock.h"
-#include "tools/memory_watcher/memory_watcher.h"
-
-// The CallStack Class
-// A stack where memory has been allocated.
-class CallStack {
- public:
- // Initialize for tracing CallStacks.
- static bool Initialize();
-
- CallStack();
- virtual ~CallStack() {}
-
- // Get a hash for this CallStack.
- // Identical stack traces will have matching hashes.
- int32 hash() { return hash_; }
-
- // Get a unique ID for this CallStack.
- // No two CallStacks will ever have the same ID. The ID is a monotonically
- // increasing number. Newer CallStacks always have larger IDs.
- int32 id() { return id_; }
-
- // Retrieves the frame at the specified index.
- DWORD_PTR frame(int32 index) {
- DCHECK(index < frame_count_ && index >= 0);
- return frames_[index];
- }
-
- // Compares the CallStack to another CallStack
- // for equality. Two CallStacks are equal if they are the same size and if
- // every frame in each is identical to the corresponding frame in the other.
- bool IsEqual(const CallStack &target);
-
- typedef std::basic_string<char, std::char_traits<char>,
- PrivateHookAllocator<char> > PrivateAllocatorString;
-
- // Convert the callstack to a string stored in output.
- void CallStack::ToString(PrivateAllocatorString* output);
-
- //
- bool Valid() const { return valid_; }
-
- private:
- // The maximum number of frames to trace.
- static const int kMaxTraceFrames = 32;
-
- // Pushes a frame's program counter onto the CallStack.
- void AddFrame(DWORD_PTR programcounter);
-
- // Traces the stack, starting from this function, up to kMaxTraceFrames
- // frames.
- bool GetStackTrace();
-
- // Functions for manipulating the frame list.
- void ClearFrames();
-
- // Dynamically load the DbgHelp library and supporting routines that we
- // will use.
- static bool LoadDbgHelp();
-
- static void LockDbgHelp() {
- dbghelp_lock_.Acquire();
- active_thread_id_ = GetCurrentThreadId();
- }
-
- static void UnlockDbgHelp() {
- active_thread_id_ = 0;
- dbghelp_lock_.Release();
- }
-
- class AutoDbgHelpLock {
- public:
- AutoDbgHelpLock() {
- CallStack::LockDbgHelp();
- }
- ~AutoDbgHelpLock() {
- CallStack::UnlockDbgHelp();
- }
- };
-
- // Check to see if this thread is already processing a stack.
- bool LockedRecursionDetected() const;
-
- // According to http://msdn2.microsoft.com/en-us/library/ms680650(VS.85).aspx
- // "All DbgHelp functions, such as this one, are single threaded. Therefore,
- // calls from more than one thread to this function will likely result in
- // unexpected behavior or memory corruption. To avoid this, you must
- // synchromize all concurrent calls from one thread to this function."
- //
- // dbghelp_lock_ is used to serialize access across all calls to the DbgHelp
- // library. This may be overly conservative (serializing them all together),
- // but does guarantee correctness.
- static base::Lock dbghelp_lock_;
-
- // Record the fact that dbghelp has been loaded.
- // Changes to this variable are protected by dbghelp_lock_.
- // It will only changes once... from false to true.
- static bool dbghelp_loaded_;
-
- // To prevent infinite recursion due to unexpected side effects in libraries,
- // we track the thread_id of the thread currently holding the dbghelp_lock_.
- // We avoid re-aquiring said lock and return an !valid_ instance when we
- // detect recursion.
- static DWORD active_thread_id_;
-
- int frame_count_; // Current size (in frames)
- DWORD_PTR frames_[kMaxTraceFrames];
- int32 hash_;
- int32 id_;
-
- // Indicate is this is a valid stack.
- // This is false if recursion precluded a real stack generation.
- bool valid_;
-
- // Cache ProgramCounter -> Symbol lookups.
- // This cache is not thread safe.
- typedef std::map<int32, PrivateAllocatorString, std::less<int32>,
- PrivateHookAllocator<int32> > SymbolCache;
- static SymbolCache* symbol_cache_;
-
- DISALLOW_COPY_AND_ASSIGN(CallStack);
-};
-
-// An AllocationStack is a type of CallStack which represents a CallStack where
-// memory has been allocated. This class is also a list item, so that it can
-// be easilly allocated and deallocated from its static singly-linked-list of
-// free instances.
-class AllocationStack : public CallStack {
- public:
- explicit AllocationStack(int32 size)
- : next_(NULL), size_(size), CallStack() {}
-
- // We maintain a freelist of the AllocationStacks.
- void* operator new(size_t s);
- void operator delete(void*p);
-
- int32 size() const { return size_; }
-
- private:
- AllocationStack* next_; // Pointer used when on the freelist.
- int32 size_; // Size of block allocated.
- static AllocationStack* freelist_;
- static base::Lock freelist_lock_;
-
- DISALLOW_COPY_AND_ASSIGN(AllocationStack);
-};
-
-#endif // TOOLS_MEMORY_WATCHER_CALL_STACK_H_
diff --git a/chromium/tools/memory_watcher/dllmain.cc b/chromium/tools/memory_watcher/dllmain.cc
deleted file mode 100644
index 6bd91535d50..00000000000
--- a/chromium/tools/memory_watcher/dllmain.cc
+++ /dev/null
@@ -1,155 +0,0 @@
-// Copyright (c) 2012 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.
-
-// The memory_watcher.dll is hooked by simply linking it. When we get the
-// windows notification that this DLL is loaded, we do a few things:
-// 1) Register a Hot Key.
-// Only one process can hook the Hot Key, so one will get it, and the
-// others will silently fail.
-// 2) Create a thread to wait on an event.
-// Since only one process will get the HotKey, it will be responsible for
-// notifying all process when it's time to do something. Each process
-// will have a thread waiting for communication from the master to dump
-// the callstacks.
-
-#include <windows.h>
-
-#include "base/at_exit.h"
-#include "tools/memory_watcher/memory_watcher.h"
-#include "tools/memory_watcher/hotkey.h"
-
-class MemoryWatcherDumpKey; // Defined below.
-
-static wchar_t* kDumpEvent = L"MemWatcher.DumpEvent";
-static base::AtExitManager* g_memory_watcher_exit_manager = NULL;
-static MemoryWatcher* g_memory_watcher = NULL;
-static MemoryWatcherDumpKey* g_hotkey_handler = NULL;
-static HANDLE g_dump_event = INVALID_HANDLE_VALUE;
-static HANDLE g_quit_event = INVALID_HANDLE_VALUE;
-static HANDLE g_watcher_thread = INVALID_HANDLE_VALUE;
-
-// A HotKey to dump the memory statistics.
-class MemoryWatcherDumpKey : public HotKeyHandler {
- public:
- MemoryWatcherDumpKey(UINT modifiers, UINT vkey)
- : HotKeyHandler(modifiers, vkey) {}
-
- virtual LRESULT OnHotKey(UINT, WPARAM, LPARAM, BOOL& bHandled) {
- SetEvent(g_dump_event);
- return 1;
- }
-};
-
-// Creates the global memory watcher.
-void CreateMemoryWatcher() {
- g_memory_watcher_exit_manager = new base::AtExitManager();
- g_memory_watcher = new MemoryWatcher();
- // Register ALT-CONTROL-D to Dump Memory stats.
- g_hotkey_handler = new MemoryWatcherDumpKey(MOD_ALT|MOD_CONTROL, 0x44);
-}
-
-// Deletes the global memory watcher.
-void DeleteMemoryWatcher() {
- if (g_hotkey_handler)
- delete g_hotkey_handler;
- g_hotkey_handler = NULL;
- if (g_memory_watcher)
- delete g_memory_watcher;
- g_memory_watcher = NULL;
-
- // Intentionly leak g_memory_watcher_exit_manager.
-}
-
-// Thread for watching for key events.
-DWORD WINAPI ThreadMain(LPVOID) {
- bool stopping = false;
- HANDLE events[2] = { g_dump_event, g_quit_event };
- while (!stopping) {
- DWORD rv = WaitForMultipleObjects(2, events, FALSE, INFINITE);
- switch (rv) {
- case WAIT_OBJECT_0:
- if (g_memory_watcher) {
- g_memory_watcher->DumpLeaks();
- }
- stopping = true;
- break;
- case WAIT_OBJECT_0 + 1:
- stopping = true;
- break;
- default:
- NOTREACHED();
- break;
- }
- }
- return 0;
-}
-
-// Creates the background thread
-void CreateBackgroundThread() {
- // Create a named event which can be used to notify
- // all watched processes.
- g_dump_event = CreateEvent(0, TRUE, FALSE, kDumpEvent);
- DCHECK(g_dump_event != NULL);
-
- // Create a local event which can be used to kill our
- // background thread.
- g_quit_event = CreateEvent(0, TRUE, FALSE, NULL);
- DCHECK(g_quit_event != NULL);
-
- // Create the background thread.
- g_watcher_thread = CreateThread(0,
- 0,
- ThreadMain,
- 0,
- 0,
- 0);
- DCHECK(g_watcher_thread != NULL);
-}
-
-// Tell the background thread to stop.
-void StopBackgroundThread() {
- // Send notification to our background thread.
- SetEvent(g_quit_event);
-
- // Wait for our background thread to die.
- DWORD rv = WaitForSingleObject(g_watcher_thread, INFINITE);
- DCHECK(rv == WAIT_OBJECT_0);
-
- // Cleanup our global handles.
- CloseHandle(g_quit_event);
- CloseHandle(g_dump_event);
- CloseHandle(g_watcher_thread);
-}
-
-bool IsChromeExe() {
- return GetModuleHandleA("chrome.exe") != NULL;
-}
-
-extern "C" {
-// DllMain is the windows entry point to this DLL.
-// We use the entry point as the mechanism for starting and stopping
-// the MemoryWatcher.
-BOOL WINAPI DllMain(HINSTANCE dll_instance, DWORD reason,
- LPVOID reserved) {
- if (!IsChromeExe())
- return FALSE;
-
- switch (reason) {
- case DLL_PROCESS_ATTACH:
- CreateMemoryWatcher();
- CreateBackgroundThread();
- break;
- case DLL_PROCESS_DETACH:
- DeleteMemoryWatcher();
- StopBackgroundThread();
- break;
- }
- return TRUE;
-}
-
-__declspec(dllexport) void __cdecl SetLogName(char* name) {
- g_memory_watcher->SetLogName(name);
-}
-
-} // extern "C"
diff --git a/chromium/tools/memory_watcher/hotkey.h b/chromium/tools/memory_watcher/hotkey.h
deleted file mode 100644
index 3773e5d7f81..00000000000
--- a/chromium/tools/memory_watcher/hotkey.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) 2009 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.
-
-#ifndef TOOLS_MEMORY_WATCHER_HOTKEY_H_
-#define TOOLS_MEMORY_WATCHER_HOTKEY_H_
-
-#include "ui/gfx/rect.h"
-#include "ui/gfx/win/window_impl.h"
-
-// HotKey handler.
-// Programs wishing to register a hotkey can use this.
-class HotKeyHandler : public gfx::WindowImpl {
- public:
- HotKeyHandler(UINT modifiers, UINT vk)
- : modifiers_(modifiers),
- vkey_(vk) {
- Start();
- }
- ~HotKeyHandler() { Stop(); }
-
- BEGIN_MSG_MAP_EX(HotKeyHandler)
- MESSAGE_HANDLER(WM_HOTKEY, OnHotKey)
- END_MSG_MAP()
-
- private:
- static const int hotkey_id = 0x0000baba;
-
- bool Start() {
- set_window_style(WS_POPUP);
- Init(NULL, gfx::Rect());
- return RegisterHotKey(hwnd(), hotkey_id, modifiers_, vkey_) == TRUE;
- }
-
- void Stop() {
- UnregisterHotKey(hwnd(), hotkey_id);
- DestroyWindow(hwnd());
- }
-
- // Handle the registered Hotkey being pressed.
- virtual LRESULT OnHotKey(UINT /*uMsg*/, WPARAM /*wParam*/,
- LPARAM /*lParam*/, BOOL& bHandled) = 0;
-
- UINT modifiers_;
- UINT vkey_;
-};
-
-#endif // TOOLS_MEMORY_WATCHER_HOTKEY_H_
diff --git a/chromium/tools/memory_watcher/ia32_modrm_map.cc b/chromium/tools/memory_watcher/ia32_modrm_map.cc
deleted file mode 100644
index 5c4ec3f2ff4..00000000000
--- a/chromium/tools/memory_watcher/ia32_modrm_map.cc
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright (c) 2012 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.
-
-/*
- * Table of relevant information about how to decode the ModR/M byte.
- * Based on information in the IA 32 Intel Architecture
- * Software Developer's Manual Volume 2: Instruction Set Reference.
- */
-
-#include "mini_disassembler.h"
-#include "mini_disassembler_types.h"
-
-namespace sidestep {
-
-const ModrmEntry MiniDisassembler::s_ia16_modrm_map_[] = {
-// mod == 00
- /* r/m == 000 */ { false, false, OS_ZERO },
- /* r/m == 001 */ { false, false, OS_ZERO },
- /* r/m == 010 */ { false, false, OS_ZERO },
- /* r/m == 011 */ { false, false, OS_ZERO },
- /* r/m == 100 */ { false, false, OS_ZERO },
- /* r/m == 101 */ { false, false, OS_ZERO },
- /* r/m == 110 */ { true, false, OS_WORD },
- /* r/m == 111 */ { false, false, OS_ZERO },
-// mod == 01
- /* r/m == 000 */ { true, false, OS_BYTE },
- /* r/m == 001 */ { true, false, OS_BYTE },
- /* r/m == 010 */ { true, false, OS_BYTE },
- /* r/m == 011 */ { true, false, OS_BYTE },
- /* r/m == 100 */ { true, false, OS_BYTE },
- /* r/m == 101 */ { true, false, OS_BYTE },
- /* r/m == 110 */ { true, false, OS_BYTE },
- /* r/m == 111 */ { true, false, OS_BYTE },
-// mod == 10
- /* r/m == 000 */ { true, false, OS_WORD },
- /* r/m == 001 */ { true, false, OS_WORD },
- /* r/m == 010 */ { true, false, OS_WORD },
- /* r/m == 011 */ { true, false, OS_WORD },
- /* r/m == 100 */ { true, false, OS_WORD },
- /* r/m == 101 */ { true, false, OS_WORD },
- /* r/m == 110 */ { true, false, OS_WORD },
- /* r/m == 111 */ { true, false, OS_WORD },
-// mod == 11
- /* r/m == 000 */ { false, false, OS_ZERO },
- /* r/m == 001 */ { false, false, OS_ZERO },
- /* r/m == 010 */ { false, false, OS_ZERO },
- /* r/m == 011 */ { false, false, OS_ZERO },
- /* r/m == 100 */ { false, false, OS_ZERO },
- /* r/m == 101 */ { false, false, OS_ZERO },
- /* r/m == 110 */ { false, false, OS_ZERO },
- /* r/m == 111 */ { false, false, OS_ZERO }
-};
-
-const ModrmEntry MiniDisassembler::s_ia32_modrm_map_[] = {
-// mod == 00
- /* r/m == 000 */ { false, false, OS_ZERO },
- /* r/m == 001 */ { false, false, OS_ZERO },
- /* r/m == 010 */ { false, false, OS_ZERO },
- /* r/m == 011 */ { false, false, OS_ZERO },
- /* r/m == 100 */ { false, true, OS_ZERO },
- /* r/m == 101 */ { true, false, OS_DOUBLE_WORD },
- /* r/m == 110 */ { false, false, OS_ZERO },
- /* r/m == 111 */ { false, false, OS_ZERO },
-// mod == 01
- /* r/m == 000 */ { true, false, OS_BYTE },
- /* r/m == 001 */ { true, false, OS_BYTE },
- /* r/m == 010 */ { true, false, OS_BYTE },
- /* r/m == 011 */ { true, false, OS_BYTE },
- /* r/m == 100 */ { true, true, OS_BYTE },
- /* r/m == 101 */ { true, false, OS_BYTE },
- /* r/m == 110 */ { true, false, OS_BYTE },
- /* r/m == 111 */ { true, false, OS_BYTE },
-// mod == 10
- /* r/m == 000 */ { true, false, OS_DOUBLE_WORD },
- /* r/m == 001 */ { true, false, OS_DOUBLE_WORD },
- /* r/m == 010 */ { true, false, OS_DOUBLE_WORD },
- /* r/m == 011 */ { true, false, OS_DOUBLE_WORD },
- /* r/m == 100 */ { true, true, OS_DOUBLE_WORD },
- /* r/m == 101 */ { true, false, OS_DOUBLE_WORD },
- /* r/m == 110 */ { true, false, OS_DOUBLE_WORD },
- /* r/m == 111 */ { true, false, OS_DOUBLE_WORD },
-// mod == 11
- /* r/m == 000 */ { false, false, OS_ZERO },
- /* r/m == 001 */ { false, false, OS_ZERO },
- /* r/m == 010 */ { false, false, OS_ZERO },
- /* r/m == 011 */ { false, false, OS_ZERO },
- /* r/m == 100 */ { false, false, OS_ZERO },
- /* r/m == 101 */ { false, false, OS_ZERO },
- /* r/m == 110 */ { false, false, OS_ZERO },
- /* r/m == 111 */ { false, false, OS_ZERO },
-};
-
-}; // namespace sidestep
diff --git a/chromium/tools/memory_watcher/ia32_opcode_map.cc b/chromium/tools/memory_watcher/ia32_opcode_map.cc
deleted file mode 100644
index 6fb15d81089..00000000000
--- a/chromium/tools/memory_watcher/ia32_opcode_map.cc
+++ /dev/null
@@ -1,1161 +0,0 @@
-// Copyright (c) 2012 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.
-
-/*
- * Opcode decoding maps. Based on the IA-32 Intel Architecture
- * Software Developer's Manual Volume 2: Instruction Set Reference. Idea
- * for how to lay out the tables in memory taken from the implementation
- * in the Bastard disassembly environment.
- */
-
-#include "mini_disassembler.h"
-
-namespace sidestep {
-
-/*
-* This is the first table to be searched; the first field of each
-* Opcode in the table is either 0 to indicate you're in the
-* right table, or an index to the correct table, in the global
-* map g_pentiumOpcodeMap
-*/
-const Opcode s_first_opcode_byte[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xE */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF */ { 1, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x10 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x11 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x12 */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x13 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x14 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x15 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x16 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x17 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x18 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x19 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1A */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1B */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1C */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1D */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1E */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1F */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x20 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x21 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x22 */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x23 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x24 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x25 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x26 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x27 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "daa", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x28 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x29 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2A */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2B */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2C */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2D */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2E */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2F */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "das", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x30 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x31 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x32 */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x33 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x34 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x35 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x36 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x37 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "aaa", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x38 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x39 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3A */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3B */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3C */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3D */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3E */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3F */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "aas", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x40 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x41 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x42 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x43 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x44 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x45 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x46 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x47 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x48 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x49 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4A */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4B */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4C */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4D */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4E */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4F */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x50 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x51 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x52 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x53 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x54 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x55 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x56 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x57 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x58 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x59 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5A */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5B */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5C */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5D */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5E */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5F */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x60 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "pushad", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x61 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "popad", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x62 */ { 0, IT_GENERIC, AM_G | OT_V, AM_M | OT_A, AM_NOT_USED, "bound", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x63 */ { 0, IT_GENERIC, AM_E | OT_W, AM_G | OT_W, AM_NOT_USED, "arpl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x64 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x65 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x66 */ { 0, IT_PREFIX_OPERAND, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x67 */ { 0, IT_PREFIX_ADDRESS, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x68 */ { 0, IT_GENERIC, AM_I | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x69 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_I | OT_V, "imul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6A */ { 0, IT_GENERIC, AM_I | OT_B, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6B */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_I | OT_B, "imul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6C */ { 0, IT_GENERIC, AM_Y | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "insb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6D */ { 0, IT_GENERIC, AM_Y | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "insd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6E */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_X | OT_B, AM_NOT_USED, "outsb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6F */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_X | OT_V, AM_NOT_USED, "outsb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x70 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x71 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jno", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x72 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x73 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jnc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x74 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x75 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jnz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x76 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jbe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x77 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "ja", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x78 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "js", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x79 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jns", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7A */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jpe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7B */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jpo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7C */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7D */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jge", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7E */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jle", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7F */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x80 */ { 2, IT_REFERENCE, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x81 */ { 3, IT_REFERENCE, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x82 */ { 4, IT_REFERENCE, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x83 */ { 5, IT_REFERENCE, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x84 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x85 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x86 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x87 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x88 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x89 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8A */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8B */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8C */ { 0, IT_GENERIC, AM_E | OT_W, AM_S | OT_W, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8D */ { 0, IT_GENERIC, AM_G | OT_V, AM_M | OT_ADDRESS_MODE_M, AM_NOT_USED, "lea", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8E */ { 0, IT_GENERIC, AM_S | OT_W, AM_E | OT_W, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8F */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x90 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "nop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x91 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x92 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x93 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x94 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x95 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x96 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x97 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x98 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "cwde", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x99 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "cdq", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9A */ { 0, IT_JUMP, AM_A | OT_P, AM_NOT_USED, AM_NOT_USED, "callf", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9B */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "wait", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9C */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "pushfd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9D */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "popfd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9E */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "sahf", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9F */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "lahf", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA0 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_O | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA1 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_O | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA2 */ { 0, IT_GENERIC, AM_O | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA3 */ { 0, IT_GENERIC, AM_O | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA4 */ { 0, IT_GENERIC, AM_X | OT_B, AM_Y | OT_B, AM_NOT_USED, "movsb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA5 */ { 0, IT_GENERIC, AM_X | OT_V, AM_Y | OT_V, AM_NOT_USED, "movsd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA6 */ { 0, IT_GENERIC, AM_X | OT_B, AM_Y | OT_B, AM_NOT_USED, "cmpsb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA7 */ { 0, IT_GENERIC, AM_X | OT_V, AM_Y | OT_V, AM_NOT_USED, "cmpsd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA8 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA9 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xAA */ { 0, IT_GENERIC, AM_Y | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "stosb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xAB */ { 0, IT_GENERIC, AM_Y | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "stosd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xAC */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_X| OT_B, AM_NOT_USED, "lodsb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xAD */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_X| OT_V, AM_NOT_USED, "lodsd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xAE */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_Y | OT_B, AM_NOT_USED, "scasb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xAF */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_Y | OT_V, AM_NOT_USED, "scasd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB0 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB1 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB2 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB3 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB4 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB5 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB6 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB7 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB8 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB9 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xBA */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xBB */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xBC */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xBD */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xBE */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xBF */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC0 */ { 6, IT_REFERENCE, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC1 */ { 7, IT_REFERENCE, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC2 */ { 0, IT_RETURN, AM_I | OT_W, AM_NOT_USED, AM_NOT_USED, "ret", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC3 */ { 0, IT_RETURN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "ret", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC4 */ { 0, IT_GENERIC, AM_G | OT_V, AM_M | OT_P, AM_NOT_USED, "les", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC5 */ { 0, IT_GENERIC, AM_G | OT_V, AM_M | OT_P, AM_NOT_USED, "lds", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC6 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC8 */ { 0, IT_GENERIC, AM_I | OT_W, AM_I | OT_B, AM_NOT_USED, "enter", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC9 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "leave", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xCA */ { 0, IT_RETURN, AM_I | OT_W, AM_NOT_USED, AM_NOT_USED, "retf", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xCB */ { 0, IT_RETURN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "retf", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xCC */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "int3", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xCD */ { 0, IT_GENERIC, AM_I | OT_B, AM_NOT_USED, AM_NOT_USED, "int", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xCE */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "into", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xCF */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "iret", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD0 */ { 8, IT_REFERENCE, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD1 */ { 9, IT_REFERENCE, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD2 */ { 10, IT_REFERENCE, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD3 */ { 11, IT_REFERENCE, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD4 */ { 0, IT_GENERIC, AM_I | OT_B, AM_NOT_USED, AM_NOT_USED, "aam", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD5 */ { 0, IT_GENERIC, AM_I | OT_B, AM_NOT_USED, AM_NOT_USED, "aad", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD6 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD7 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "xlat", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
-
- // The following 8 lines would be references to the FPU tables, but we currently
- // do not support the FPU instructions in this disassembler.
-
- /* 0xD8 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD9 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xDA */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xDB */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xDC */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xDD */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xDE */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xDF */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
-
-
- /* 0xE0 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "loopnz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xE1 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "loopz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xE2 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "loop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xE3 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jcxz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xE4 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "in", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xE5 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "in", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xE6 */ { 0, IT_GENERIC, AM_I | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "out", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xE7 */ { 0, IT_GENERIC, AM_I | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "out", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xE8 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "call", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xE9 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xEA */ { 0, IT_JUMP, AM_A | OT_P, AM_NOT_USED, AM_NOT_USED, "jmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xEB */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xEC */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_REGISTER | OT_W, AM_NOT_USED, "in", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xED */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_W, AM_NOT_USED, "in", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xEE */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_REGISTER | OT_B, AM_NOT_USED, "out", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xEF */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_REGISTER | OT_V, AM_NOT_USED, "out", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF0 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "lock:", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF1 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF2 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "repne:", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF3 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "rep:", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF4 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "hlt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF5 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "cmc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF6 */ { 12, IT_REFERENCE, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF7 */ { 13, IT_REFERENCE, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF8 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "clc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF9 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "stc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xFA */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "cli", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xFB */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "sti", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xFC */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "cld", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xFD */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "std", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xFE */ { 14, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xFF */ { 15, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_0f[] = {
- /* 0x0 */ { 16, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 17, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_W, AM_NOT_USED, "lar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_W, AM_NOT_USED, "lsl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "clts", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "invd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "wbinvd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "ud2", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xE */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x10 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "movups", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "movsd" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "movss" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "movupd" } },
- /* 0x11 */ { 0, IT_GENERIC, AM_W | OT_PS, AM_V | OT_PS, AM_NOT_USED, "movups", true,
- /* F2h */ { 0, IT_GENERIC, AM_W | OT_SD, AM_V | OT_SD, AM_NOT_USED, "movsd" },
- /* F3h */ { 0, IT_GENERIC, AM_W | OT_SS, AM_V | OT_SS, AM_NOT_USED, "movss" },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_PD, AM_V | OT_PD, AM_NOT_USED, "movupd" } },
- /* 0x12 */ { 0, IT_GENERIC, AM_W | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movlps", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movhlps" }, // only one of ...
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movhlps" }, // ...these two is correct, Intel doesn't specify which
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_W | OT_S, AM_NOT_USED, "movlpd" } },
- /* 0x13 */ { 0, IT_GENERIC, AM_V | OT_Q, AM_W | OT_Q, AM_NOT_USED, "movlps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_W | OT_Q, AM_NOT_USED, "movlpd" } },
- /* 0x14 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_Q, AM_NOT_USED, "unpcklps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_Q, AM_NOT_USED, "unpcklpd" } },
- /* 0x15 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_Q, AM_NOT_USED, "unpckhps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_Q, AM_NOT_USED, "unpckhpd" } },
- /* 0x16 */ { 0, IT_GENERIC, AM_V | OT_Q, AM_W | OT_Q, AM_NOT_USED, "movhps", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movlhps" }, // only one of...
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movlhps" }, // ...these two is correct, Intel doesn't specify which
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_W | OT_Q, AM_NOT_USED, "movhpd" } },
- /* 0x17 */ { 0, IT_GENERIC, AM_W | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movhps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movhpd" } },
- /* 0x18 */ { 18, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x19 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1A */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1B */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1C */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1D */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1E */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1F */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x20 */ { 0, IT_GENERIC, AM_R | OT_D, AM_C | OT_D, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x21 */ { 0, IT_GENERIC, AM_R | OT_D, AM_D | OT_D, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x22 */ { 0, IT_GENERIC, AM_C | OT_D, AM_R | OT_D, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x23 */ { 0, IT_GENERIC, AM_D | OT_D, AM_R | OT_D, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x24 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x25 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x26 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x27 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x28 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "movaps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "movapd" } },
- /* 0x29 */ { 0, IT_GENERIC, AM_W | OT_PS, AM_V | OT_PS, AM_NOT_USED, "movaps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_PD, AM_V | OT_PD, AM_NOT_USED, "movapd" } },
- /* 0x2A */ { 0, IT_GENERIC, AM_V | OT_PS, AM_Q | OT_Q, AM_NOT_USED, "cvtpi2ps", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_E | OT_D, AM_NOT_USED, "cvtsi2sd" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_E | OT_D, AM_NOT_USED, "cvtsi2ss" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_Q | OT_DQ, AM_NOT_USED, "cvtpi2pd" } },
- /* 0x2B */ { 0, IT_GENERIC, AM_W | OT_PS, AM_V | OT_PS, AM_NOT_USED, "movntps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_PD, AM_V | OT_PD, AM_NOT_USED, "movntpd" } },
- /* 0x2C */ { 0, IT_GENERIC, AM_Q | OT_Q, AM_W | OT_PS, AM_NOT_USED, "cvttps2pi", true,
- /* F2h */ { 0, IT_GENERIC, AM_G | OT_D, AM_W | OT_SD, AM_NOT_USED, "cvttsd2si" },
- /* F3h */ { 0, IT_GENERIC, AM_G | OT_D, AM_W | OT_SS, AM_NOT_USED, "cvttss2si" },
- /* 66h */ { 0, IT_GENERIC, AM_Q | OT_DQ, AM_W | OT_PD, AM_NOT_USED, "cvttpd2pi" } },
- /* 0x2D */ { 0, IT_GENERIC, AM_Q | OT_Q, AM_W | OT_PS, AM_NOT_USED, "cvtps2pi", true,
- /* F2h */ { 0, IT_GENERIC, AM_G | OT_D, AM_W | OT_SD, AM_NOT_USED, "cvtsd2si" },
- /* F3h */ { 0, IT_GENERIC, AM_G | OT_D, AM_W | OT_SS, AM_NOT_USED, "cvtss2si" },
- /* 66h */ { 0, IT_GENERIC, AM_Q | OT_DQ, AM_W | OT_PD, AM_NOT_USED, "cvtpd2pi" } },
- /* 0x2E */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "ucomiss", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "ucomisd" } },
- /* 0x2F */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_SS, AM_NOT_USED, "comiss", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "comisd" } },
- /* 0x30 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "wrmsr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x31 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "rdtsc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x32 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "rdmsr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x33 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "rdpmc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x34 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "sysenter", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x35 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "sysexit", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x36 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x37 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x38 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x39 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3A */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3B */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3C */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "movnti", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3D */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3E */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3F */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x40 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x41 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovno", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x42 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x43 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovnc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x44 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x45 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovnz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x46 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovbe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x47 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmova", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x48 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovs", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x49 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovns", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4A */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovpe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4B */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovpo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4C */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4D */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovge", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4E */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovle", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4F */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x50 */ { 0, IT_GENERIC, AM_E | OT_D, AM_V | OT_PS, AM_NOT_USED, "movmskps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_E | OT_D, AM_V | OT_PD, AM_NOT_USED, "movmskpd" } },
- /* 0x51 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "sqrtps", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "sqrtsd" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "sqrtss" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "sqrtpd" } },
- /* 0x52 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "rsqrtps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "rsqrtss" },
- /* 66h */ { 0 } },
- /* 0x53 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "rcpps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "rcpss" },
- /* 66h */ { 0 } },
- /* 0x54 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "andps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "andpd" } },
- /* 0x55 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "andnps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "andnpd" } },
- /* 0x56 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "orps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "orpd" } },
- /* 0x57 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "xorps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "xorpd" } },
- /* 0x58 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "addps", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "addsd" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "addss" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "addpd" } },
- /* 0x59 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "mulps", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "mulsd" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "mulss" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "mulpd" } },
- /* 0x5A */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PS, AM_NOT_USED, "cvtps2pd", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "cvtsd2ss" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "cvtss2sd" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PD, AM_NOT_USED, "cvtpd2ps" } },
- /* 0x5B */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_DQ, AM_NOT_USED, "cvtdq2ps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_PS, AM_NOT_USED, "cvttps2dq" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_PS, AM_NOT_USED, "cvtps2dq" } },
- /* 0x5C */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "subps", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "subsd" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "subss" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "subpd" } },
- /* 0x5D */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "minps", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "minsd" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "minss" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "minpd" } },
- /* 0x5E */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "divps", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "divsd" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "divss" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "divpd" } },
- /* 0x5F */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "maxps", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "maxsd" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "maxss" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "maxpd" } },
- /* 0x60 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "punpcklbw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "punpcklbw" } },
- /* 0x61 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "punpcklwd", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "punpcklwd" } },
- /* 0x62 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "punpckldq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "punpckldq" } },
- /* 0x63 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "packsswb", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "packsswb" } },
- /* 0x64 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "pcmpgtb", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pcmpgtb" } },
- /* 0x65 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "pcmpgtw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pcmpgtw" } },
- /* 0x66 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "pcmpgtd", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pcmpgtd" } },
- /* 0x67 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "packuswb", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "packuswb" } },
- /* 0x68 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "punpckhbw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_Q | OT_DQ, AM_NOT_USED, "punpckhbw" } },
- /* 0x69 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "punpckhwd", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_Q | OT_DQ, AM_NOT_USED, "punpckhwd" } },
- /* 0x6A */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "punpckhdq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_Q | OT_DQ, AM_NOT_USED, "punpckhdq" } },
- /* 0x6B */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "packssdw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_Q | OT_DQ, AM_NOT_USED, "packssdw" } },
- /* 0x6C */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "not used without prefix", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "punpcklqdq" } },
- /* 0x6D */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "not used without prefix", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "punpcklqdq" } },
- /* 0x6E */ { 0, IT_GENERIC, AM_P | OT_D, AM_E | OT_D, AM_NOT_USED, "movd", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_E | OT_D, AM_NOT_USED, "movd" } },
- /* 0x6F */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "movq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "movdqu" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "movdqa" } },
- /* 0x70 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_I | OT_B, "pshuf", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_I | OT_B, "pshuflw" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_I | OT_B, "pshufhw" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_I | OT_B, "pshufd" } },
- /* 0x71 */ { 19, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x72 */ { 20, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x73 */ { 21, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x74 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pcmpeqb", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pcmpeqb" } },
- /* 0x75 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pcmpeqw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pcmpeqw" } },
- /* 0x76 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pcmpeqd", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pcmpeqd" } },
- /* 0x77 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "emms", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
-
- // The following six opcodes are escapes into the MMX stuff, which this disassembler does not support.
- /* 0x78 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x79 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7A */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7B */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7C */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7D */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
-
- /* 0x7E */ { 0, IT_GENERIC, AM_E | OT_D, AM_P | OT_D, AM_NOT_USED, "movd", true,
- /* F2h */ { 0 },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_W | OT_Q, AM_NOT_USED, "movq" },
- /* 66h */ { 0, IT_GENERIC, AM_E | OT_D, AM_V | OT_DQ, AM_NOT_USED, "movd" } },
- /* 0x7F */ { 0, IT_GENERIC, AM_Q | OT_Q, AM_P | OT_Q, AM_NOT_USED, "movq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_V | OT_DQ, AM_NOT_USED, "movdqu" },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_V | OT_DQ, AM_NOT_USED, "movdqa" } },
- /* 0x80 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x81 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jno", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x82 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x83 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jnc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x84 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x85 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jnz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x86 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jbe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x87 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "ja", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x88 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "js", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x89 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jns", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8A */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jpe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8B */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jpo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8C */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8D */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jge", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8E */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jle", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8F */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x90 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "seto", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x91 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setno", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x92 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x93 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setnc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x94 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x95 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setnz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x96 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setbe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x97 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "seta", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x98 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "sets", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x99 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setns", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9A */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setpe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9B */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setpo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9C */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9D */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setge", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9E */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setle", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9F */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA0 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA1 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA2 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "cpuid", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "bt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_I | OT_B, "shld", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_I | OT_B | AM_REGISTER, "shld", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA6 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA7 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA8 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA9 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xAA */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "rsm", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xAB */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "bts", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xAC */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_I | OT_B, "shrd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xAD */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_I | OT_B | AM_REGISTER, "shrd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xAE */ { 22, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xAF */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "imul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "cmpxchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "cmpxchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB2 */ { 0, IT_GENERIC, AM_M | OT_P, AM_NOT_USED, AM_NOT_USED, "lss", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "btr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB4 */ { 0, IT_GENERIC, AM_M | OT_P, AM_NOT_USED, AM_NOT_USED, "lfs", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB5 */ { 0, IT_GENERIC, AM_M | OT_P, AM_NOT_USED, AM_NOT_USED, "lgs", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB6 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_B, AM_NOT_USED, "movzx", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB7 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_W, AM_NOT_USED, "movzx", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB8 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB9 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "ud1", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xBA */ { 23, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xBB */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "btc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xBC */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "bsf", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xBD */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "bsr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xBE */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_B, AM_NOT_USED, "movsx", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xBF */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_W, AM_NOT_USED, "movsx", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "xadd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "xadd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC2 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_I | OT_B, "cmpps", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_I | OT_B, "cmpsd" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_I | OT_B, "cmpss" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_I | OT_B, "cmppd" } },
- /* 0xC3 */ { 0, IT_GENERIC, AM_E | OT_D, AM_G | OT_D, AM_NOT_USED, "movnti", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC4 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_E | OT_D, AM_I | OT_B, "pinsrw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_E | OT_D, AM_I | OT_B, "pinsrw" } },
- /* 0xC5 */ { 0, IT_GENERIC, AM_G | OT_D, AM_P | OT_Q, AM_I | OT_B, "pextrw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_G | OT_D, AM_V | OT_DQ, AM_I | OT_B, "pextrw" } },
- /* 0xC6 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_I | OT_B, "shufps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_I | OT_B, "shufpd" } },
- /* 0xC7 */ { 24, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC8 */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC9 */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xCA */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xCB */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xCC */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xCD */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xCE */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xCF */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD1 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psrlw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psrlw" } },
- /* 0xD2 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psrld", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psrld" } },
- /* 0xD3 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psrlq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psrlq" } },
- /* 0xD4 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddq" } },
- /* 0xD5 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmullw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmullw" } },
- /* 0xD6 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "unused without prefix", true,
- /* F2h */ { 0, IT_GENERIC, AM_P | OT_Q, AM_W | OT_Q, AM_NOT_USED, "movdq2q" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_Q | OT_Q, AM_NOT_USED, "movq2dq" },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movq" } },
- /* 0xD7 */ { 0, IT_GENERIC, AM_G | OT_D, AM_P | OT_Q, AM_NOT_USED, "pmovmskb", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_G | OT_D, AM_V | OT_DQ, AM_NOT_USED, "pmovmskb" } },
- /* 0xD8 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubusb", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubusb" } },
- /* 0xD9 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubusw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubusw" } },
- /* 0xDA */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pminub", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pminub" } },
- /* 0xDB */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pand", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pand" } },
- /* 0xDC */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddusb", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddusb" } },
- /* 0xDD */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddusw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddusw" } },
- /* 0xDE */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmaxub", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmaxub" } },
- /* 0xDF */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pandn", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pandn" } },
- /* 0xE0 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pavgb", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pavgb" } },
- /* 0xE1 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psraw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psrqw" } },
- /* 0xE2 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psrad", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psrad" } },
- /* 0xE3 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pavgw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pavgw" } },
- /* 0xE4 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmulhuw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmulhuw" } },
- /* 0xE5 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmulhuw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmulhw" } },
- /* 0xE6 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "not used without prefix", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_PD, AM_NOT_USED, "cvtpd2dq" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_DQ, AM_NOT_USED, "cvtdq2pd" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_PD, AM_NOT_USED, "cvttpd2dq" } },
- /* 0xE7 */ { 0, IT_GENERIC, AM_W | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movntq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_V | OT_DQ, AM_NOT_USED, "movntdq" } },
- /* 0xE8 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubsb", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubsb" } },
- /* 0xE9 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubsw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubsw" } },
- /* 0xEA */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pminsw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pminsw" } },
- /* 0xEB */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "por", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "por" } },
- /* 0xEC */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddsb", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddsb" } },
- /* 0xED */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddsw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddsw" } },
- /* 0xEE */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmaxsw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmaxsw" } },
- /* 0xEF */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pxor", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pxor" } },
- /* 0xF0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF1 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psllw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psllw" } },
- /* 0xF2 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pslld", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pslld" } },
- /* 0xF3 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psllq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psllq" } },
- /* 0xF4 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmuludq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmuludq" } },
- /* 0xF5 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmaddwd", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmaddwd" } },
- /* 0xF6 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psadbw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psadbw" } },
- /* 0xF7 */ { 0, IT_GENERIC, AM_P | OT_PI, AM_Q | OT_PI, AM_NOT_USED, "maskmovq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "maskmovdqu" } },
- /* 0xF8 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubb", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubb" } },
- /* 0xF9 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubw" } },
- /* 0xFA */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubd", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubd" } },
- /* 0xFB */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubq" } },
- /* 0xFC */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddb", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddb" } },
- /* 0xFD */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddw" } },
- /* 0xFE */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddd", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddd" } },
- /* 0xFF */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_0f00[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "sldt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "str", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "lldt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "ltr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "verr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "verw", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_0f01[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_M | OT_S, AM_NOT_USED, AM_NOT_USED, "sgdt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_M | OT_S, AM_NOT_USED, AM_NOT_USED, "sidt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_M | OT_S, AM_NOT_USED, AM_NOT_USED, "lgdt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_M | OT_S, AM_NOT_USED, AM_NOT_USED, "lidt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "smsw", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "lmsw", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_M | OT_B, AM_NOT_USED, AM_NOT_USED, "invlpg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_0f18[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_M | OT_ADDRESS_MODE_M, AM_NOT_USED, AM_NOT_USED, "prefetch", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "prefetch", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "prefetch", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "prefetch", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_0f71[] = {
- /* 0x0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psrlw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psrlw" } },
- /* 0x3 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psraw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psraw" } },
- /* 0x5 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psllw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psllw" } },
- /* 0x7 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_0f72[] = {
- /* 0x0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psrld", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psrld" } },
- /* 0x3 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psrad", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psrad" } },
- /* 0x5 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "pslld", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "pslld" } },
- /* 0x7 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_0f73[] = {
- /* 0x0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psrlq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psrlq" } },
- /* 0x3 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psllq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psllq" } },
- /* 0x7 */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "pslldq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "pslldq" } },
-};
-
-const Opcode s_opcode_byte_after_0fae[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "fxsave", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "fxrstor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "ldmxcsr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "stmxcsr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "lfence", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "mfence", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "clflush/sfence", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
-};
-
-const Opcode s_opcode_byte_after_0fba[] = {
- /* 0x0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "bt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "bts", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "btr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "btc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_0fc7[] = {
- /* 0x0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_M | OT_Q, AM_NOT_USED, AM_NOT_USED, "cmpxch8b", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_80[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_81[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_82[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_83[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_c0[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "rol", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "ror", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "rcl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "rcr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "shl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "shr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "sal", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "sar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_c1[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "rol", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "ror", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "rcl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "rcr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "shl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "shr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "sal", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "sar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_d0[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "rol", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "ror", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "rcl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "rcr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "shl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "shr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "sal", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "sar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_d1[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "rol", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "ror", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "rcl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "rcr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "shl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "shr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "sal", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "sar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_d2[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "rol", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "ror", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "rcl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "rcr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "shl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "shr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "sal", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "sar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_d3[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "rol", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "ror", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "rcl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "rcr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "shl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "shr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "sal", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "sar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_f6[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "not", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "neg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, OT_B | AM_REGISTER, AM_E | OT_B, AM_NOT_USED, "mul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, OT_B | AM_REGISTER, AM_E | OT_B, AM_NOT_USED, "imul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_E | OT_B, AM_NOT_USED, "div", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_E | OT_B, AM_NOT_USED, "idiv", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_f7[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "not", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "neg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_E | OT_V, AM_NOT_USED, "mul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_E | OT_V, AM_NOT_USED, "imul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_E | OT_V, AM_NOT_USED, "div", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_E | OT_V, AM_NOT_USED, "idiv", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_fe[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_ff[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_JUMP, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "call", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_JUMP, AM_E | OT_P, AM_NOT_USED, AM_NOT_USED, "call", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_JUMP, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "jmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_JUMP, AM_E | OT_P, AM_NOT_USED, AM_NOT_USED, "jmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-/*
-* A table of all the other tables, containing some extra information, e.g.
-* how to mask out the byte we're looking at.
-*/
-const OpcodeTable MiniDisassembler::s_ia32_opcode_map_[]={
- // One-byte opcodes and jumps to larger
- /* 0 */ {s_first_opcode_byte, 0, 0xff, 0, 0xff},
- // Two-byte opcodes (second byte)
- /* 1 */ {s_opcode_byte_after_0f, 0, 0xff, 0, 0xff},
- // Start of tables for opcodes using ModR/M bits as extension
- /* 2 */ {s_opcode_byte_after_80, 3, 0x07, 0, 0x07},
- /* 3 */ {s_opcode_byte_after_81, 3, 0x07, 0, 0x07},
- /* 4 */ {s_opcode_byte_after_82, 3, 0x07, 0, 0x07},
- /* 5 */ {s_opcode_byte_after_83, 3, 0x07, 0, 0x07},
- /* 6 */ {s_opcode_byte_after_c0, 3, 0x07, 0, 0x07},
- /* 7 */ {s_opcode_byte_after_c1, 3, 0x07, 0, 0x07},
- /* 8 */ {s_opcode_byte_after_d0, 3, 0x07, 0, 0x07},
- /* 9 */ {s_opcode_byte_after_d1, 3, 0x07, 0, 0x07},
- /* 10 */ {s_opcode_byte_after_d2, 3, 0x07, 0, 0x07},
- /* 11 */ {s_opcode_byte_after_d3, 3, 0x07, 0, 0x07},
- /* 12 */ {s_opcode_byte_after_f6, 3, 0x07, 0, 0x07},
- /* 13 */ {s_opcode_byte_after_f7, 3, 0x07, 0, 0x07},
- /* 14 */ {s_opcode_byte_after_fe, 3, 0x07, 0, 0x01},
- /* 15 */ {s_opcode_byte_after_ff, 3, 0x07, 0, 0x07},
- /* 16 */ {s_opcode_byte_after_0f00, 3, 0x07, 0, 0x07},
- /* 17 */ {s_opcode_byte_after_0f01, 3, 0x07, 0, 0x07},
- /* 18 */ {s_opcode_byte_after_0f18, 3, 0x07, 0, 0x07},
- /* 19 */ {s_opcode_byte_after_0f71, 3, 0x07, 0, 0x07},
- /* 20 */ {s_opcode_byte_after_0f72, 3, 0x07, 0, 0x07},
- /* 21 */ {s_opcode_byte_after_0f73, 3, 0x07, 0, 0x07},
- /* 22 */ {s_opcode_byte_after_0fae, 3, 0x07, 0, 0x07},
- /* 23 */ {s_opcode_byte_after_0fba, 3, 0x07, 0, 0x07},
- /* 24 */ {s_opcode_byte_after_0fc7, 3, 0x07, 0, 0x01}
-};
-
-}; // namespace sidestep
diff --git a/chromium/tools/memory_watcher/memory_hook.cc b/chromium/tools/memory_watcher/memory_hook.cc
deleted file mode 100644
index 64df93d2041..00000000000
--- a/chromium/tools/memory_watcher/memory_hook.cc
+++ /dev/null
@@ -1,562 +0,0 @@
-// Copyright (c) 2006-2008 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.
-
-// Static class for hooking Win32 API routines.
-
-// Some notes about how to hook Memory Allocation Routines in Windows.
-//
-// For our purposes we do not hook the libc routines. There are two
-// reasons for this. First, the libc routines all go through HeapAlloc
-// anyway. So, it's redundant to log both HeapAlloc and malloc.
-// Second, it can be tricky to hook in both static and dynamic linkages
-// of libc.
-
-#include <windows.h>
-
-#include "memory_hook.h"
-#include "memory_watcher.h"
-#include "preamble_patcher.h"
-
-// Calls GetProcAddress, but casts to the correct type.
-#define GET_PROC_ADDRESS(hmodule, name) \
- ( (Type_##name)(::GetProcAddress(hmodule, #name)) )
-
-// Macro to declare Patch functions.
-#define DECLARE_PATCH(name) Patch<Type_##name> patch_##name
-
-// Macro to install Patch functions.
-#define INSTALL_PATCH(name) do { \
- patch_##name.set_original(GET_PROC_ADDRESS(hkernel32, ##name)); \
- patch_##name.Install(&Perftools_##name); \
-} while (0)
-
-// Macro to install Patch functions.
-#define INSTALL_NTDLLPATCH(name) do { \
- patch_##name.set_original(GET_PROC_ADDRESS(hntdll, ##name)); \
- patch_##name.Install(&Perftools_##name); \
-} while (0)
-
-// Macro to uninstall Patch functions.
-#define UNINSTALL_PATCH(name) patch_##name.Uninstall();
-
-
-
-// Windows APIs to be hooked
-
-// HeapAlloc routines
-typedef HANDLE (WINAPI *Type_HeapCreate)(DWORD flOptions,
- SIZE_T dwInitialSize,
- SIZE_T dwMaximumSize);
-typedef BOOL (WINAPI *Type_HeapDestroy)(HANDLE hHeap);
-typedef LPVOID (WINAPI *Type_HeapAlloc)(HANDLE hHeap, DWORD dwFlags,
- DWORD_PTR dwBytes);
-typedef LPVOID (WINAPI *Type_HeapReAlloc)(HANDLE hHeap, DWORD dwFlags,
- LPVOID lpMem, SIZE_T dwBytes);
-typedef BOOL (WINAPI *Type_HeapFree)(HANDLE hHeap, DWORD dwFlags,
- LPVOID lpMem);
-
-// GlobalAlloc routines
-typedef HGLOBAL (WINAPI *Type_GlobalAlloc)(UINT uFlags, SIZE_T dwBytes);
-typedef HGLOBAL (WINAPI *Type_GlobalReAlloc)(HGLOBAL hMem, SIZE_T dwBytes,
- UINT uFlags);
-typedef HGLOBAL (WINAPI *Type_GlobalFree)(HGLOBAL hMem);
-
-// LocalAlloc routines
-typedef HLOCAL (WINAPI *Type_LocalAlloc)(UINT uFlags, SIZE_T uBytes);
-typedef HLOCAL (WINAPI *Type_LocalReAlloc)(HLOCAL hMem, SIZE_T uBytes,
- UINT uFlags);
-typedef HLOCAL (WINAPI *Type_LocalFree)(HLOCAL hMem);
-
-// A Windows-API equivalent of mmap and munmap, for "anonymous regions"
-typedef LPVOID (WINAPI *Type_VirtualAllocEx)(HANDLE process, LPVOID address,
- SIZE_T size, DWORD type,
- DWORD protect);
-typedef BOOL (WINAPI *Type_VirtualFreeEx)(HANDLE process, LPVOID address,
- SIZE_T size, DWORD type);
-
-// A Windows-API equivalent of mmap and munmap, for actual files
-typedef LPVOID (WINAPI *Type_MapViewOfFile)(HANDLE hFileMappingObject,
- DWORD dwDesiredAccess,
- DWORD dwFileOffsetHigh,
- DWORD dwFileOffsetLow,
- SIZE_T dwNumberOfBytesToMap);
-typedef LPVOID (WINAPI *Type_MapViewOfFileEx)(HANDLE hFileMappingObject,
- DWORD dwDesiredAccess,
- DWORD dwFileOffsetHigh,
- DWORD dwFileOffsetLow,
- SIZE_T dwNumberOfBytesToMap,
- LPVOID lpBaseAddress);
-typedef BOOL (WINAPI *Type_UnmapViewOfFile)(LPVOID lpBaseAddress);
-
-typedef DWORD (WINAPI *Type_NtUnmapViewOfSection)(HANDLE process,
- LPVOID lpBaseAddress);
-
-
-// Patch is a template for keeping the pointer to the original
-// hooked routine, the function to call when hooked, and the
-// stub routine which is patched.
-template<class T>
-class Patch {
- public:
- // Constructor. Does not hook the function yet.
- Patch<T>()
- : original_function_(NULL),
- patch_function_(NULL),
- stub_function_(NULL) {
- }
-
- // Destructor. Unhooks the function if it has been hooked.
- ~Patch<T>() {
- Uninstall();
- }
-
- // Patches original function with func.
- // Must have called set_original to set the original function.
- void Install(T func) {
- patch_function_ = func;
- CHECK(patch_function_ != NULL);
- CHECK(original_function_ != NULL);
- CHECK(stub_function_ == NULL);
- CHECK(sidestep::SIDESTEP_SUCCESS ==
- sidestep::PreamblePatcher::Patch(original_function_,
- patch_function_, &stub_function_));
- }
-
- // Un-patches the function.
- void Uninstall() {
- if (stub_function_)
- sidestep::PreamblePatcher::Unpatch(original_function_,
- patch_function_, stub_function_);
- stub_function_ = NULL;
- }
-
- // Set the function to be patched.
- void set_original(T original) { original_function_ = original; }
-
- // Get the original function being patched.
- T original() { return original_function_; }
-
- // Get the patched function. (e.g. the replacement function)
- T patched() { return patch_function_; }
-
- // Access to the stub for calling the original function
- // while it is patched.
- T operator()() {
- DCHECK(stub_function_);
- return stub_function_;
- }
-
- private:
- // The function that we plan to patch.
- T original_function_;
- // The function to replace the original with.
- T patch_function_;
- // To unpatch, we also need to keep around a "stub" that points to the
- // pre-patched Windows function.
- T stub_function_;
-};
-
-
-// All Windows memory-allocation routines call through to one of these.
-DECLARE_PATCH(HeapCreate);
-DECLARE_PATCH(HeapDestroy);
-DECLARE_PATCH(HeapAlloc);
-DECLARE_PATCH(HeapReAlloc);
-DECLARE_PATCH(HeapFree);
-DECLARE_PATCH(VirtualAllocEx);
-DECLARE_PATCH(VirtualFreeEx);
-DECLARE_PATCH(MapViewOfFile);
-DECLARE_PATCH(MapViewOfFileEx);
-DECLARE_PATCH(UnmapViewOfFile);
-DECLARE_PATCH(GlobalAlloc);
-DECLARE_PATCH(GlobalReAlloc);
-DECLARE_PATCH(GlobalFree);
-DECLARE_PATCH(LocalAlloc);
-DECLARE_PATCH(LocalReAlloc);
-DECLARE_PATCH(LocalFree);
-DECLARE_PATCH(NtUnmapViewOfSection);
-
-// Our replacement functions.
-
-static HANDLE WINAPI Perftools_HeapCreate(DWORD flOptions,
- SIZE_T dwInitialSize,
- SIZE_T dwMaximumSize) {
- if (dwInitialSize > 4096)
- dwInitialSize = 4096;
- return patch_HeapCreate()(flOptions, dwInitialSize, dwMaximumSize);
-}
-
-static BOOL WINAPI Perftools_HeapDestroy(HANDLE hHeap) {
- return patch_HeapDestroy()(hHeap);
-}
-
-static LPVOID WINAPI Perftools_HeapAlloc(HANDLE hHeap, DWORD dwFlags,
- DWORD_PTR dwBytes) {
- LPVOID rv = patch_HeapAlloc()(hHeap, dwFlags, dwBytes);
- MemoryHook::hook()->OnTrack(hHeap, reinterpret_cast<int32>(rv), dwBytes);
- return rv;
-}
-
-static BOOL WINAPI Perftools_HeapFree(HANDLE hHeap, DWORD dwFlags,
- LPVOID lpMem) {
- size_t size = 0;
- if (lpMem != 0) {
- size = HeapSize(hHeap, 0, lpMem); // Will crash if lpMem is 0.
- // Note: size could be 0; HeapAlloc does allocate 0 length buffers.
- }
- MemoryHook::hook()->OnUntrack(hHeap, reinterpret_cast<int32>(lpMem), size);
- return patch_HeapFree()(hHeap, dwFlags, lpMem);
-}
-
-static LPVOID WINAPI Perftools_HeapReAlloc(HANDLE hHeap, DWORD dwFlags,
- LPVOID lpMem, SIZE_T dwBytes) {
- // Don't call realloc, but instead do a free/malloc. The problem is that
- // the builtin realloc may either expand a buffer, or it may simply
- // just call free/malloc. If so, we will already have tracked the new
- // block via Perftools_HeapAlloc.
-
- LPVOID rv = Perftools_HeapAlloc(hHeap, dwFlags, dwBytes);
- DCHECK_EQ((HEAP_REALLOC_IN_PLACE_ONLY & dwFlags), 0u);
-
- // If there was an old buffer, now copy the data to the new buffer.
- if (lpMem != 0) {
- size_t size = HeapSize(hHeap, 0, lpMem);
- if (size > dwBytes)
- size = dwBytes;
- // Note: size could be 0; HeapAlloc does allocate 0 length buffers.
- memcpy(rv, lpMem, size);
- Perftools_HeapFree(hHeap, dwFlags, lpMem);
- }
- return rv;
-}
-
-static LPVOID WINAPI Perftools_VirtualAllocEx(HANDLE process, LPVOID address,
- SIZE_T size, DWORD type,
- DWORD protect) {
- bool already_committed = false;
- if (address != NULL) {
- MEMORY_BASIC_INFORMATION info;
- CHECK(VirtualQuery(address, &info, sizeof(info)));
- if (info.State & MEM_COMMIT) {
- already_committed = true;
- CHECK(size >= info.RegionSize);
- }
- }
- bool reserving = (address == NULL) || (type & MEM_RESERVE);
- bool committing = !already_committed && (type & MEM_COMMIT);
-
-
- LPVOID result = patch_VirtualAllocEx()(process, address, size, type,
- protect);
- MEMORY_BASIC_INFORMATION info;
- CHECK(VirtualQuery(result, &info, sizeof(info)));
- size = info.RegionSize;
-
- if (committing)
- MemoryHook::hook()->OnTrack(0, reinterpret_cast<int32>(result), size);
-
- return result;
-}
-
-static BOOL WINAPI Perftools_VirtualFreeEx(HANDLE process, LPVOID address,
- SIZE_T size, DWORD type) {
- int chunk_size = size;
- MEMORY_BASIC_INFORMATION info;
- CHECK(VirtualQuery(address, &info, sizeof(info)));
- if (chunk_size == 0)
- chunk_size = info.RegionSize;
- bool decommit = (info.State & MEM_COMMIT) != 0;
-
- if (decommit)
- MemoryHook::hook()->OnUntrack(0, reinterpret_cast<int32>(address),
- chunk_size);
-
- return patch_VirtualFreeEx()(process, address, size, type);
-}
-
-static base::Lock known_maps_lock;
-static std::map<void*, int> known_maps;
-
-static LPVOID WINAPI Perftools_MapViewOfFileEx(HANDLE hFileMappingObject,
- DWORD dwDesiredAccess,
- DWORD dwFileOffsetHigh,
- DWORD dwFileOffsetLow,
- SIZE_T dwNumberOfBytesToMap,
- LPVOID lpBaseAddress) {
- // For this function pair, you always deallocate the full block of
- // data that you allocate, so NewHook/DeleteHook is the right API.
- LPVOID result = patch_MapViewOfFileEx()(hFileMappingObject, dwDesiredAccess,
- dwFileOffsetHigh, dwFileOffsetLow,
- dwNumberOfBytesToMap, lpBaseAddress);
- {
- base::AutoLock lock(known_maps_lock);
- MEMORY_BASIC_INFORMATION info;
- if (known_maps.find(result) == known_maps.end()) {
- CHECK(VirtualQuery(result, &info, sizeof(info)));
- // TODO(mbelshe): THIS map uses the standard heap!!!!
- known_maps[result] = 1;
- MemoryHook::hook()->OnTrack(0, reinterpret_cast<int32>(result),
- info.RegionSize);
- } else {
- known_maps[result] = known_maps[result] + 1;
- }
- }
- return result;
-}
-
-static LPVOID WINAPI Perftools_MapViewOfFile(HANDLE hFileMappingObject,
- DWORD dwDesiredAccess,
- DWORD dwFileOffsetHigh,
- DWORD dwFileOffsetLow,
- SIZE_T dwNumberOfBytesToMap) {
- return Perftools_MapViewOfFileEx(hFileMappingObject, dwDesiredAccess,
- dwFileOffsetHigh, dwFileOffsetLow,
- dwNumberOfBytesToMap, 0);
-}
-
-static BOOL WINAPI Perftools_UnmapViewOfFile(LPVOID lpBaseAddress) {
- // This will call into NtUnmapViewOfSection().
- return patch_UnmapViewOfFile()(lpBaseAddress);
-}
-
-static DWORD WINAPI Perftools_NtUnmapViewOfSection(HANDLE process,
- LPVOID lpBaseAddress) {
- // Some windows APIs call directly into this routine rather
- // than calling UnmapViewOfFile. If we didn't trap this function,
- // then we appear to have bogus leaks.
- {
- base::AutoLock lock(known_maps_lock);
- MEMORY_BASIC_INFORMATION info;
- CHECK(VirtualQuery(lpBaseAddress, &info, sizeof(info)));
- if (known_maps.find(lpBaseAddress) != known_maps.end()) {
- if (known_maps[lpBaseAddress] == 1) {
- MemoryHook::hook()->OnUntrack(0, reinterpret_cast<int32>(lpBaseAddress),
- info.RegionSize);
- known_maps.erase(lpBaseAddress);
- } else {
- known_maps[lpBaseAddress] = known_maps[lpBaseAddress] - 1;
- }
- }
- }
- return patch_NtUnmapViewOfSection()(process, lpBaseAddress);
-}
-
-static HGLOBAL WINAPI Perftools_GlobalAlloc(UINT uFlags, SIZE_T dwBytes) {
- // GlobalAlloc is built atop HeapAlloc anyway. So we don't track these.
- // GlobalAlloc will internally call into HeapAlloc and we track there.
-
- // Force all memory to be fixed.
- uFlags &= ~GMEM_MOVEABLE;
- HGLOBAL rv = patch_GlobalAlloc()(uFlags, dwBytes);
- return rv;
-}
-
-static HGLOBAL WINAPI Perftools_GlobalFree(HGLOBAL hMem) {
- return patch_GlobalFree()(hMem);
-}
-
-static HGLOBAL WINAPI Perftools_GlobalReAlloc(HGLOBAL hMem, SIZE_T dwBytes,
- UINT uFlags) {
- // TODO(jar): [The following looks like a copy/paste typo from LocalRealloc.]
- // GlobalDiscard is a macro which calls LocalReAlloc with size 0.
- if (dwBytes == 0) {
- return patch_GlobalReAlloc()(hMem, dwBytes, uFlags);
- }
-
- HGLOBAL rv = Perftools_GlobalAlloc(uFlags, dwBytes);
- if (hMem != 0) {
- size_t size = GlobalSize(hMem);
- if (size > dwBytes)
- size = dwBytes;
- // Note: size could be 0; HeapAlloc does allocate 0 length buffers.
- memcpy(rv, hMem, size);
- Perftools_GlobalFree(hMem);
- }
-
- return rv;
-}
-
-static HLOCAL WINAPI Perftools_LocalAlloc(UINT uFlags, SIZE_T dwBytes) {
- // LocalAlloc is built atop HeapAlloc anyway. So we don't track these.
- // LocalAlloc will internally call into HeapAlloc and we track there.
-
- // Force all memory to be fixed.
- uFlags &= ~LMEM_MOVEABLE;
- HLOCAL rv = patch_LocalAlloc()(uFlags, dwBytes);
- return rv;
-}
-
-static HLOCAL WINAPI Perftools_LocalFree(HLOCAL hMem) {
- return patch_LocalFree()(hMem);
-}
-
-static HLOCAL WINAPI Perftools_LocalReAlloc(HLOCAL hMem, SIZE_T dwBytes,
- UINT uFlags) {
- // LocalDiscard is a macro which calls LocalReAlloc with size 0.
- if (dwBytes == 0) {
- return patch_LocalReAlloc()(hMem, dwBytes, uFlags);
- }
-
- HGLOBAL rv = Perftools_LocalAlloc(uFlags, dwBytes);
- if (hMem != 0) {
- size_t size = LocalSize(hMem);
- if (size > dwBytes)
- size = dwBytes;
- // Note: size could be 0; HeapAlloc does allocate 0 length buffers.
- memcpy(rv, hMem, size);
- Perftools_LocalFree(hMem);
- }
-
- return rv;
-}
-
-bool MemoryHook::hooked_ = false;
-MemoryHook* MemoryHook::global_hook_ = NULL;
-
-MemoryHook::MemoryHook()
- : watcher_(NULL),
- heap_(NULL) {
- CreateHeap();
-}
-
-MemoryHook::~MemoryHook() {
- // It's a bit dangerous to ever close this heap; MemoryWatchers may have
- // used this heap for their tracking data. Closing the heap while any
- // MemoryWatchers still exist is pretty dangerous.
- CloseHeap();
-}
-
-bool MemoryHook::Initialize() {
- if (global_hook_ == NULL)
- global_hook_ = new MemoryHook();
- return true;
-}
-
-bool MemoryHook::Hook() {
- DCHECK(!hooked_);
- if (!hooked_) {
- DCHECK(global_hook_);
-
- // Luckily, Patch() doesn't call malloc or windows alloc routines
- // itself -- though it does call new (we can use PatchWithStub to
- // get around that, and will need to if we need to patch new).
-
- HMODULE hkernel32 = ::GetModuleHandle(L"kernel32");
- CHECK(hkernel32 != NULL);
-
- HMODULE hntdll = ::GetModuleHandle(L"ntdll");
- CHECK(hntdll != NULL);
-
- // Now that we've found all the functions, patch them
- INSTALL_PATCH(HeapCreate);
- INSTALL_PATCH(HeapDestroy);
- INSTALL_PATCH(HeapAlloc);
- INSTALL_PATCH(HeapReAlloc);
- INSTALL_PATCH(HeapFree);
- INSTALL_PATCH(VirtualAllocEx);
- INSTALL_PATCH(VirtualFreeEx);
- INSTALL_PATCH(MapViewOfFileEx);
- INSTALL_PATCH(MapViewOfFile);
- INSTALL_PATCH(UnmapViewOfFile);
- INSTALL_NTDLLPATCH(NtUnmapViewOfSection);
- INSTALL_PATCH(GlobalAlloc);
- INSTALL_PATCH(GlobalReAlloc);
- INSTALL_PATCH(GlobalFree);
- INSTALL_PATCH(LocalAlloc);
- INSTALL_PATCH(LocalReAlloc);
- INSTALL_PATCH(LocalFree);
-
- // We are finally completely hooked.
- hooked_ = true;
- }
- return true;
-}
-
-bool MemoryHook::Unhook() {
- if (hooked_) {
- // We need to go back to the system malloc/etc at global destruct time,
- // so objects that were constructed before tcmalloc, using the system
- // malloc, can destroy themselves using the system free. This depends
- // on DLLs unloading in the reverse order in which they load!
- //
- // We also go back to the default HeapAlloc/etc, just for consistency.
- // Who knows, it may help avoid weird bugs in some situations.
- UNINSTALL_PATCH(HeapCreate);
- UNINSTALL_PATCH(HeapDestroy);
- UNINSTALL_PATCH(HeapAlloc);
- UNINSTALL_PATCH(HeapReAlloc);
- UNINSTALL_PATCH(HeapFree);
- UNINSTALL_PATCH(VirtualAllocEx);
- UNINSTALL_PATCH(VirtualFreeEx);
- UNINSTALL_PATCH(MapViewOfFile);
- UNINSTALL_PATCH(MapViewOfFileEx);
- UNINSTALL_PATCH(UnmapViewOfFile);
- UNINSTALL_PATCH(NtUnmapViewOfSection);
- UNINSTALL_PATCH(GlobalAlloc);
- UNINSTALL_PATCH(GlobalReAlloc);
- UNINSTALL_PATCH(GlobalFree);
- UNINSTALL_PATCH(LocalAlloc);
- UNINSTALL_PATCH(LocalReAlloc);
- UNINSTALL_PATCH(LocalFree);
-
- hooked_ = false;
- }
- return true;
-}
-
-bool MemoryHook::RegisterWatcher(MemoryObserver* watcher) {
- DCHECK(global_hook_->watcher_ == NULL);
-
- if (!hooked_)
- Hook();
-
- DCHECK(global_hook_);
- global_hook_->watcher_ = watcher;
- return true;
-}
-
-bool MemoryHook::UnregisterWatcher(MemoryObserver* watcher) {
- DCHECK(hooked_);
- DCHECK(global_hook_->watcher_ == watcher);
- // TODO(jar): changing watcher_ here is very racy. Other threads may (without
- // a lock) testing, and then calling through this value. We probably can't
- // remove this until we are single threaded.
- global_hook_->watcher_ = NULL;
-
- // For now, since there are no more watchers, unhook memory.
- return Unhook();
-}
-
-bool MemoryHook::CreateHeap() {
- // Create a heap for our own memory.
- DCHECK(heap_ == NULL);
- heap_ = HeapCreate(0, 0, 0);
- DCHECK(heap_ != NULL);
- return heap_ != NULL;
-}
-
-bool MemoryHook::CloseHeap() {
- DCHECK(heap_ != NULL);
- HeapDestroy(heap_);
- heap_ = NULL;
- return true;
-}
-
-void MemoryHook::OnTrack(HANDLE heap, int32 id, int32 size) {
- // Don't notify about allocations to our internal heap.
- if (heap == heap_)
- return;
-
- if (watcher_)
- watcher_->OnTrack(heap, id, size);
-}
-
-void MemoryHook::OnUntrack(HANDLE heap, int32 id, int32 size) {
- // Don't notify about allocations to our internal heap.
- if (heap == heap_)
- return;
-
- if (watcher_)
- watcher_->OnUntrack(heap, id, size);
-}
diff --git a/chromium/tools/memory_watcher/memory_hook.h b/chromium/tools/memory_watcher/memory_hook.h
deleted file mode 100644
index 4227edb7ca4..00000000000
--- a/chromium/tools/memory_watcher/memory_hook.h
+++ /dev/null
@@ -1,153 +0,0 @@
-// Copyright (c) 2006-2008 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.
-//
-// Static class for hooking Win32 API routines. For now,
-// we only add one watcher at a time.
-//
-// TODO(mbelshe): Support multiple watchers.
-
-#ifndef MEMORY_WATCHER_MEMORY_HOOK_
-#define MEMORY_WATCHER_MEMORY_HOOK_
-
-#include "base/logging.h"
-
-// When allocating memory for internal use with the MemoryHook,
-// we must always use the MemoryHook's heap; otherwise, the memory
-// gets tracked, and it becomes an infinite loop (allocation() calls
-// MemoryHook() which calls allocation(), etc).
-//
-// PrivateHookAllocator is an STL-friendly Allocator so that STL lists,
-// maps, etc can be used on the global MemoryHook's heap.
-template <class T>
-class PrivateHookAllocator {
- public:
- // These type definitions are needed for stl allocators.
- typedef size_t size_type;
- typedef ptrdiff_t difference_type;
- typedef T* pointer;
- typedef const T* const_pointer;
- typedef T& reference;
- typedef const T& const_reference;
- typedef T value_type;
-
- PrivateHookAllocator() {}
-
- // Allocate memory for STL.
- pointer allocate(size_type n, const void * = 0) {
- return reinterpret_cast<T*>(MemoryHook::Alloc(n * sizeof(T)));
- }
-
- // Deallocate memory for STL.
- void deallocate(void* p, size_type) {
- if (p)
- MemoryHook::Free(p);
- }
-
- // Construct the object
- void construct(pointer p, const T& val) {
- new (reinterpret_cast<T*>(p))T(val);
- }
-
- // Destruct an object
- void destroy(pointer p) { p->~T(); }
-
- size_type max_size() const { return size_t(-1); }
-
- template <class U>
- struct rebind { typedef PrivateHookAllocator<U> other; };
-
- template <class U>
- PrivateHookAllocator(const PrivateHookAllocator<U>&) {}
-};
-
-template<class T, class U> inline
-bool operator==(const PrivateHookAllocator<T>&,
- const PrivateHookAllocator<U>&) {
- return (true);
-}
-
-template<class T, class U> inline
-bool operator!=(const PrivateHookAllocator<T>& left,
- const PrivateHookAllocator<U>& right) {
- return (!(left == right));
-}
-
-
-// Classes which monitor memory from these hooks implement
-// the MemoryObserver interface.
-class MemoryObserver {
- public:
- virtual ~MemoryObserver() {}
-
- // Track a pointer. Will capture the current StackTrace.
- virtual void OnTrack(HANDLE heap, int32 id, int32 size) = 0;
-
- // Untrack a pointer, removing it from our list.
- virtual void OnUntrack(HANDLE heap, int32 id, int32 size) = 0;
-};
-
-class MemoryHook : MemoryObserver {
- public:
- // Initialize the MemoryHook. Must be called before
- // registering watchers. This can be called repeatedly,
- // but is not thread safe.
- static bool Initialize();
-
- // Returns true is memory allocations and deallocations
- // are being traced.
- static bool hooked() { return hooked_ != NULL; }
-
- // Register a class to receive memory allocation & deallocation
- // callbacks. If we haven't hooked memory yet, this call will
- // force memory hooking to start.
- static bool RegisterWatcher(MemoryObserver* watcher);
-
- // Register a class to stop receiving callbacks. If there are
- // no more watchers, this call will unhook memory.
- static bool UnregisterWatcher(MemoryObserver* watcher);
-
- // MemoryHook provides a private heap for allocating
- // unwatched memory.
- static void* Alloc(size_t size) {
- DCHECK(global_hook_ && global_hook_->heap_);
- return HeapAlloc(global_hook_->heap_, 0, size);
- }
- static void Free(void* ptr) {
- DCHECK(global_hook_ && global_hook_->heap_);
- HeapFree(global_hook_->heap_, 0, ptr);
- }
-
- // Access the global hook. For internal use only from static "C"
- // hooks.
- static MemoryHook* hook() { return global_hook_; }
-
- // MemoryObserver interface.
- virtual void OnTrack(HANDLE hHeap, int32 id, int32 size);
- virtual void OnUntrack(HANDLE hHeap, int32 id, int32 size);
-
- private:
- MemoryHook();
- ~MemoryHook();
-
- // Enable memory tracing. When memory is 'hooked',
- // MemoryWatchers which have registered will be called
- // as memory is allocated and deallocated.
- static bool Hook();
-
- // Disables memory tracing.
- static bool Unhook();
-
- // Create our private heap
- bool CreateHeap();
-
- // Close our private heap.
- bool CloseHeap();
-
- MemoryObserver* watcher_;
- HANDLE heap_; // An internal accounting heap.
- static bool hooked_;
- static MemoryHook* global_hook_;
-};
-
-#endif // MEMORY_WATCHER_MEMORY_HOOK_
diff --git a/chromium/tools/memory_watcher/memory_watcher.cc b/chromium/tools/memory_watcher/memory_watcher.cc
deleted file mode 100644
index 4743a37840c..00000000000
--- a/chromium/tools/memory_watcher/memory_watcher.cc
+++ /dev/null
@@ -1,255 +0,0 @@
-// Copyright (c) 2010 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.
-
-#include <algorithm>
-#include <windows.h>
-#include <tlhelp32.h> // for CreateToolhelp32Snapshot()
-#include <map>
-
-#include "tools/memory_watcher/memory_watcher.h"
-#include "base/file_util.h"
-#include "base/logging.h"
-#include "base/metrics/stats_counters.h"
-#include "base/strings/string_util.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/synchronization/lock.h"
-#include "tools/memory_watcher/call_stack.h"
-#include "tools/memory_watcher/preamble_patcher.h"
-
-static base::StatsCounter mem_in_use("MemoryInUse.Bytes");
-static base::StatsCounter mem_in_use_blocks("MemoryInUse.Blocks");
-static base::StatsCounter mem_in_use_allocs("MemoryInUse.Allocs");
-static base::StatsCounter mem_in_use_frees("MemoryInUse.Frees");
-
-// ---------------------------------------------------------------------
-
-MemoryWatcher::MemoryWatcher()
- : file_(NULL),
- hooked_(false),
- active_thread_id_(0) {
- MemoryHook::Initialize();
- CallStack::Initialize();
-
- block_map_ = new CallStackMap();
-
- // Register last - only after we're ready for notifications!
- Hook();
-}
-
-MemoryWatcher::~MemoryWatcher() {
- Unhook();
-
- CloseLogFile();
-
- // Pointers in the block_map are part of the MemoryHook heap. Be sure
- // to delete the map before closing the heap.
- delete block_map_;
-}
-
-void MemoryWatcher::Hook() {
- DCHECK(!hooked_);
- MemoryHook::RegisterWatcher(this);
- hooked_ = true;
-}
-
-void MemoryWatcher::Unhook() {
- if (hooked_) {
- MemoryHook::UnregisterWatcher(this);
- hooked_ = false;
- }
-}
-
-void MemoryWatcher::OpenLogFile() {
- DCHECK(file_ == NULL);
- file_name_ = "memwatcher";
- if (!log_name_.empty()) {
- file_name_ += ".";
- file_name_ += log_name_;
- }
- file_name_ += ".log";
- char buf[16];
- file_name_ += _itoa(GetCurrentProcessId(), buf, 10);
-
- std::string tmp_name(file_name_);
- tmp_name += ".tmp";
- file_ = fopen(tmp_name.c_str(), "w+");
-}
-
-void MemoryWatcher::CloseLogFile() {
- if (file_ != NULL) {
- fclose(file_);
- file_ = NULL;
- std::wstring tmp_name = ASCIIToWide(file_name_);
- tmp_name += L".tmp";
- base::Move(base::FilePath(tmp_name),
- base::FilePath(ASCIIToWide(file_name_)));
- }
-}
-
-bool MemoryWatcher::LockedRecursionDetected() const {
- if (!active_thread_id_) return false;
- DWORD thread_id = GetCurrentThreadId();
- // TODO(jar): Perchance we should use atomic access to member.
- return thread_id == active_thread_id_;
-}
-
-void MemoryWatcher::OnTrack(HANDLE heap, int32 id, int32 size) {
- // Don't track zeroes. It's a waste of time.
- if (size == 0)
- return;
-
- if (LockedRecursionDetected())
- return;
-
- // AllocationStack overrides new/delete to not allocate
- // from the main heap.
- AllocationStack* stack = new AllocationStack(size);
- if (!stack->Valid()) return; // Recursion blocked generation of stack.
-
- {
- base::AutoLock lock(block_map_lock_);
-
- // Ideally, we'd like to verify that the block being added
- // here is not already in our list of tracked blocks. However,
- // the lookup in our hash table is expensive and slows us too
- // much.
- CallStackMap::iterator block_it = block_map_->find(id);
- if (block_it != block_map_->end()) {
-#if 0 // Don't do this until stack->ToString() uses ONLY our heap.
- active_thread_id_ = GetCurrentThreadId();
- PrivateAllocatorString output;
- block_it->second->ToString(&output);
- // VLOG(1) << "First Stack size " << stack->size() << "was\n" << output;
- stack->ToString(&output);
- // VLOG(1) << "Second Stack size " << stack->size() << "was\n" << output;
-#endif // 0
-
- // TODO(jar): We should delete one stack, and keep the other, perhaps
- // based on size.
- // For now, just delete the first, and keep the second?
- delete block_it->second;
- }
- // TODO(jar): Perchance we should use atomic access to member.
- active_thread_id_ = 0; // Note: Only do this AFTER exiting above scope!
-
- (*block_map_)[id] = stack;
- }
-
- mem_in_use.Add(size);
- mem_in_use_blocks.Increment();
- mem_in_use_allocs.Increment();
-}
-
-void MemoryWatcher::OnUntrack(HANDLE heap, int32 id, int32 size) {
- DCHECK_GE(size, 0);
-
- // Don't bother with these.
- if (size == 0)
- return;
-
- if (LockedRecursionDetected())
- return;
-
- {
- base::AutoLock lock(block_map_lock_);
- active_thread_id_ = GetCurrentThreadId();
-
- // First, find the block in our block_map.
- CallStackMap::iterator it = block_map_->find(id);
- if (it != block_map_->end()) {
- AllocationStack* stack = it->second;
- DCHECK(stack->size() == size);
- block_map_->erase(id);
- delete stack;
- } else {
- // Untracked item. This happens a fair amount, and it is
- // normal. A lot of time elapses during process startup
- // before the allocation routines are hooked.
- size = 0; // Ignore size in tallies.
- }
- // TODO(jar): Perchance we should use atomic access to member.
- active_thread_id_ = 0;
- }
-
- mem_in_use.Add(-size);
- mem_in_use_blocks.Decrement();
- mem_in_use_frees.Increment();
-}
-
-void MemoryWatcher::SetLogName(char* log_name) {
- if (!log_name)
- return;
-
- log_name_ = log_name;
-}
-
-// Help sort lists of stacks based on allocation cost.
-// Note: Sort based on allocation count is interesting too!
-static bool CompareCallStackIdItems(MemoryWatcher::StackTrack* left,
- MemoryWatcher::StackTrack* right) {
- return left->size > right->size;
-}
-
-
-void MemoryWatcher::DumpLeaks() {
- // We can only dump the leaks once. We'll cleanup the hooks here.
- if (!hooked_)
- return;
- Unhook();
-
- base::AutoLock lock(block_map_lock_);
- active_thread_id_ = GetCurrentThreadId();
-
- OpenLogFile();
-
- // Aggregate contributions from each allocated block on per-stack basis.
- CallStackIdMap stack_map;
- for (CallStackMap::iterator block_it = block_map_->begin();
- block_it != block_map_->end(); ++block_it) {
- AllocationStack* stack = block_it->second;
- int32 stack_hash = stack->hash();
- int32 alloc_block_size = stack->size();
- CallStackIdMap::iterator it = stack_map.find(stack_hash);
- if (it == stack_map.end()) {
- StackTrack tracker;
- tracker.count = 1;
- tracker.size = alloc_block_size;
- tracker.stack = stack; // Temporary pointer into block_map_.
- stack_map[stack_hash] = tracker;
- } else {
- it->second.count++;
- it->second.size += alloc_block_size;
- }
- }
- // Don't release lock yet, as block_map_ is still pointed into.
-
- // Put references to StrackTracks into array for sorting.
- std::vector<StackTrack*, PrivateHookAllocator<int32> >
- stack_tracks(stack_map.size());
- CallStackIdMap::iterator it = stack_map.begin();
- for (size_t i = 0; i < stack_tracks.size(); ++i) {
- stack_tracks[i] = &(it->second);
- ++it;
- }
- sort(stack_tracks.begin(), stack_tracks.end(), CompareCallStackIdItems);
-
- int32 total_bytes = 0;
- int32 total_blocks = 0;
- for (size_t i = 0; i < stack_tracks.size(); ++i) {
- StackTrack* stack_track = stack_tracks[i];
- fwprintf(file_, L"%d bytes, %d allocs, #%d\n",
- stack_track->size, stack_track->count, i);
- total_bytes += stack_track->size;
- total_blocks += stack_track->count;
-
- CallStack* stack = stack_track->stack;
- PrivateAllocatorString output;
- stack->ToString(&output);
- fprintf(file_, "%s", output.c_str());
- }
- fprintf(file_, "Total Leaks: %d\n", total_blocks);
- fprintf(file_, "Total Stacks: %d\n", stack_tracks.size());
- fprintf(file_, "Total Bytes: %d\n", total_bytes);
- CloseLogFile();
-}
diff --git a/chromium/tools/memory_watcher/memory_watcher.gyp b/chromium/tools/memory_watcher/memory_watcher.gyp
deleted file mode 100644
index 97c1b0d1df5..00000000000
--- a/chromium/tools/memory_watcher/memory_watcher.gyp
+++ /dev/null
@@ -1,48 +0,0 @@
-# Copyright (c) 2011 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.
-
-{
- 'variables': {
- 'chromium_code': 1,
- },
- 'targets': [
- {
- 'target_name': 'memory_watcher',
- 'type': 'shared_library',
- 'dependencies': [
- '../../base/base.gyp:base',
- '../../ui/gfx/gfx.gyp:gfx',
- ],
- 'defines': [
- 'BUILD_MEMORY_WATCHER',
- ],
- 'include_dirs': [
- '../..',
- '<(DEPTH)/third_party/wtl/include',
- ],
- # 4748 "/GS can not protect parameters and local variables from local
- # buffer overrun because optimizations are disabled in function".
- # 4740 "flow in or out of inline asm code suppresses global optimization"
- # (result of __asm call x, __asm x:).
- # Nothing to be done about these warnings.
- 'msvs_disabled_warnings': [ 4748, 4740 ],
- 'sources': [
- 'call_stack.cc',
- 'call_stack.h',
- 'dllmain.cc',
- 'hotkey.h',
- 'ia32_modrm_map.cc',
- 'ia32_opcode_map.cc',
- 'memory_hook.cc',
- 'memory_hook.h',
- 'memory_watcher.cc',
- 'memory_watcher.h',
- 'mini_disassembler.cc',
- 'preamble_patcher.cc',
- 'preamble_patcher.h',
- 'preamble_patcher_with_stub.cc',
- ],
- },
- ],
-}
diff --git a/chromium/tools/memory_watcher/memory_watcher.h b/chromium/tools/memory_watcher/memory_watcher.h
deleted file mode 100644
index 8f5f1c2eb6f..00000000000
--- a/chromium/tools/memory_watcher/memory_watcher.h
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright (c) 2006-2008 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.
-
-// MemoryWatcher.
-// The MemoryWatcher is a library that can be linked into any
-// win32 application. It will override the default memory allocators
-// and track call stacks for any allocations that are made. It can
-// then be used to see what memory is in use.
-
-#ifndef TOOLS_MEMORY_WATCHER_MEMORY_WATCHER_
-#define TOOLS_MEMORY_WATCHER_MEMORY_WATCHER_
-
-#include <map>
-#include <functional>
-
-#include "base/synchronization/lock.h"
-#include "tools/memory_watcher/memory_hook.h"
-
-class CallStack;
-class AllocationStack;
-
-// The MemoryWatcher installs allocation hooks and monitors
-// allocations and frees.
-class MemoryWatcher : MemoryObserver {
- public:
- struct StackTrack {
- CallStack* stack;
- int count;
- int size;
- };
-
- typedef std::map<int32, AllocationStack*, std::less<int32>,
- PrivateHookAllocator<int32> > CallStackMap;
- typedef std::map<int32, StackTrack, std::less<int32>,
- PrivateHookAllocator<int32> > CallStackIdMap;
- typedef std::basic_string<char, std::char_traits<char>,
- PrivateHookAllocator<char> > PrivateAllocatorString;
-
- MemoryWatcher();
- virtual ~MemoryWatcher();
-
- // Dump all tracked pointers still in use.
- void DumpLeaks();
-
- // MemoryObserver interface.
- virtual void OnTrack(HANDLE heap, int32 id, int32 size);
- virtual void OnUntrack(HANDLE heap, int32 id, int32 size);
-
- // Sets a name that appears in the generated file name.
- void SetLogName(char* log_name);
-
- private:
- // Opens the logfile which we create.
- void OpenLogFile();
-
- // Close the logfile.
- void CloseLogFile();
-
- // Hook the memory hooks.
- void Hook();
-
- // Unhooks our memory hooks.
- void Unhook();
-
- // Check to see if this thread is already processing a block, and should not
- // recurse.
- bool LockedRecursionDetected() const;
-
- // This is for logging.
- FILE* file_;
-
- bool hooked_; // True when this class has the memory_hooks hooked.
-
- // Either 0, or else the threadID for a thread that is actively working on
- // a stack track. Used to avoid recursive tracking.
- DWORD active_thread_id_;
-
- base::Lock block_map_lock_;
- // The block_map provides quick lookups based on the allocation
- // pointer. This is important for having fast round trips through
- // malloc/free.
- CallStackMap *block_map_;
-
- // The file name for that log.
- std::string file_name_;
-
- // An optional name that appears in the log file name (used to differentiate
- // logs).
- std::string log_name_;
-};
-
-
-
-#endif // TOOLS_MEMORY_WATCHER_MEMORY_WATCHER_
diff --git a/chromium/tools/memory_watcher/mini_disassembler.cc b/chromium/tools/memory_watcher/mini_disassembler.cc
deleted file mode 100644
index c97ae6f3e2b..00000000000
--- a/chromium/tools/memory_watcher/mini_disassembler.cc
+++ /dev/null
@@ -1,392 +0,0 @@
-// Copyright (c) 2012 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.
-
-/*
- * Implementation of MiniDisassembler.
- */
-
-#include "mini_disassembler.h"
-
-namespace sidestep {
-
-MiniDisassembler::MiniDisassembler(bool operand_default_is_32_bits,
- bool address_default_is_32_bits)
- : operand_default_is_32_bits_(operand_default_is_32_bits),
- address_default_is_32_bits_(address_default_is_32_bits) {
- Initialize();
-}
-
-MiniDisassembler::MiniDisassembler()
- : operand_default_is_32_bits_(true),
- address_default_is_32_bits_(true) {
- Initialize();
-}
-
-InstructionType MiniDisassembler::Disassemble(
- unsigned char* start_byte,
- unsigned int& instruction_bytes) {
- // Clean up any state from previous invocations.
- Initialize();
-
- // Start by processing any prefixes.
- unsigned char* current_byte = start_byte;
- unsigned int size = 0;
- InstructionType instruction_type = ProcessPrefixes(current_byte, size);
-
- if (IT_UNKNOWN == instruction_type)
- return instruction_type;
-
- current_byte += size;
- size = 0;
-
- // Invariant: We have stripped all prefixes, and the operand_is_32_bits_
- // and address_is_32_bits_ flags are correctly set.
-
- instruction_type = ProcessOpcode(current_byte, 0, size);
-
- // Check for error processing instruction
- if ((IT_UNKNOWN == instruction_type_) || (IT_UNUSED == instruction_type_)) {
- return IT_UNKNOWN;
- }
-
- current_byte += size;
-
- // Invariant: operand_bytes_ indicates the total size of operands
- // specified by the opcode and/or ModR/M byte and/or SIB byte.
- // pCurrentByte points to the first byte after the ModR/M byte, or after
- // the SIB byte if it is present (i.e. the first byte of any operands
- // encoded in the instruction).
-
- // We get the total length of any prefixes, the opcode, and the ModR/M and
- // SIB bytes if present, by taking the difference of the original starting
- // address and the current byte (which points to the first byte of the
- // operands if present, or to the first byte of the next instruction if
- // they are not). Adding the count of bytes in the operands encoded in
- // the instruction gives us the full length of the instruction in bytes.
- instruction_bytes += operand_bytes_ + (current_byte - start_byte);
-
- // Return the instruction type, which was set by ProcessOpcode().
- return instruction_type_;
-}
-
-void MiniDisassembler::Initialize() {
- operand_is_32_bits_ = operand_default_is_32_bits_;
- address_is_32_bits_ = address_default_is_32_bits_;
- operand_bytes_ = 0;
- have_modrm_ = false;
- should_decode_modrm_ = false;
- instruction_type_ = IT_UNKNOWN;
- got_f2_prefix_ = false;
- got_f3_prefix_ = false;
- got_66_prefix_ = false;
-}
-
-InstructionType MiniDisassembler::ProcessPrefixes(unsigned char* start_byte,
- unsigned int& size) {
- InstructionType instruction_type = IT_GENERIC;
- const Opcode& opcode = s_ia32_opcode_map_[0].table_[*start_byte];
-
- switch (opcode.type_) {
- case IT_PREFIX_ADDRESS:
- address_is_32_bits_ = !address_default_is_32_bits_;
- goto nochangeoperand;
- case IT_PREFIX_OPERAND:
- operand_is_32_bits_ = !operand_default_is_32_bits_;
- nochangeoperand:
- case IT_PREFIX:
-
- if (0xF2 == (*start_byte))
- got_f2_prefix_ = true;
- else if (0xF3 == (*start_byte))
- got_f3_prefix_ = true;
- else if (0x66 == (*start_byte))
- got_66_prefix_ = true;
-
- instruction_type = opcode.type_;
- size ++;
- // we got a prefix, so add one and check next byte
- ProcessPrefixes(start_byte + 1, size);
- default:
- break; // not a prefix byte
- }
-
- return instruction_type;
-}
-
-InstructionType MiniDisassembler::ProcessOpcode(unsigned char* start_byte,
- unsigned int table_index,
- unsigned int& size) {
- const OpcodeTable& table = s_ia32_opcode_map_[table_index]; // Get our table
- unsigned char current_byte = (*start_byte) >> table.shift_;
- current_byte = current_byte & table.mask_; // Mask out the bits we will use
-
- // Check whether the byte we have is inside the table we have.
- if (current_byte < table.min_lim_ || current_byte > table.max_lim_) {
- instruction_type_ = IT_UNKNOWN;
- return instruction_type_;
- }
-
- const Opcode& opcode = table.table_[current_byte];
- if (IT_UNUSED == opcode.type_) {
- // This instruction is not used by the IA-32 ISA, so we indicate
- // this to the user. Probably means that we were pointed to
- // a byte in memory that was not the start of an instruction.
- instruction_type_ = IT_UNUSED;
- return instruction_type_;
- } else if (IT_REFERENCE == opcode.type_) {
- // We are looking at an opcode that has more bytes (or is continued
- // in the ModR/M byte). Recursively find the opcode definition in
- // the table for the opcode's next byte.
- size++;
- ProcessOpcode(start_byte + 1, opcode.table_index_, size);
- return instruction_type_;
- }
-
- const SpecificOpcode* specific_opcode = (SpecificOpcode*)&opcode;
- if (opcode.is_prefix_dependent_) {
- if (got_f2_prefix_ && opcode.opcode_if_f2_prefix_.mnemonic_ != 0) {
- specific_opcode = &opcode.opcode_if_f2_prefix_;
- } else if (got_f3_prefix_ && opcode.opcode_if_f3_prefix_.mnemonic_ != 0) {
- specific_opcode = &opcode.opcode_if_f3_prefix_;
- } else if (got_66_prefix_ && opcode.opcode_if_66_prefix_.mnemonic_ != 0) {
- specific_opcode = &opcode.opcode_if_66_prefix_;
- }
- }
-
- // Inv: The opcode type is known.
- instruction_type_ = specific_opcode->type_;
-
- // Let's process the operand types to see if we have any immediate
- // operands, and/or a ModR/M byte.
-
- ProcessOperand(specific_opcode->flag_dest_);
- ProcessOperand(specific_opcode->flag_source_);
- ProcessOperand(specific_opcode->flag_aux_);
-
- // Inv: We have processed the opcode and incremented operand_bytes_
- // by the number of bytes of any operands specified by the opcode
- // that are stored in the instruction (not registers etc.). Now
- // we need to return the total number of bytes for the opcode and
- // for the ModR/M or SIB bytes if they are present.
-
- if (table.mask_ != 0xff) {
- if (have_modrm_) {
- // we're looking at a ModR/M byte so we're not going to
- // count that into the opcode size
- ProcessModrm(start_byte, size);
- return IT_GENERIC;
- } else {
- // need to count the ModR/M byte even if it's just being
- // used for opcode extension
- size++;
- return IT_GENERIC;
- }
- } else {
- if (have_modrm_) {
- // The ModR/M byte is the next byte.
- size++;
- ProcessModrm(start_byte + 1, size);
- return IT_GENERIC;
- } else {
- size++;
- return IT_GENERIC;
- }
- }
-}
-
-bool MiniDisassembler::ProcessOperand(int flag_operand) {
- bool succeeded = true;
- if (AM_NOT_USED == flag_operand)
- return succeeded;
-
- // Decide what to do based on the addressing mode.
- switch (flag_operand & AM_MASK) {
- // No ModR/M byte indicated by these addressing modes, and no
- // additional (e.g. immediate) parameters.
- case AM_A: // Direct address
- case AM_F: // EFLAGS register
- case AM_X: // Memory addressed by the DS:SI register pair
- case AM_Y: // Memory addressed by the ES:DI register pair
- case AM_IMPLICIT: // Parameter is implicit, occupies no space in
- // instruction
- break;
-
- // There is a ModR/M byte but it does not necessarily need
- // to be decoded.
- case AM_C: // reg field of ModR/M selects a control register
- case AM_D: // reg field of ModR/M selects a debug register
- case AM_G: // reg field of ModR/M selects a general register
- case AM_P: // reg field of ModR/M selects an MMX register
- case AM_R: // mod field of ModR/M may refer only to a general register
- case AM_S: // reg field of ModR/M selects a segment register
- case AM_T: // reg field of ModR/M selects a test register
- case AM_V: // reg field of ModR/M selects a 128-bit XMM register
- have_modrm_ = true;
- break;
-
- // In these addressing modes, there is a ModR/M byte and it needs to be
- // decoded. No other (e.g. immediate) params than indicated in ModR/M.
- case AM_E: // Operand is either a general-purpose register or memory,
- // specified by ModR/M byte
- case AM_M: // ModR/M byte will refer only to memory
- case AM_Q: // Operand is either an MMX register or memory (complex
- // evaluation), specified by ModR/M byte
- case AM_W: // Operand is either a 128-bit XMM register or memory (complex
- // eval), specified by ModR/M byte
- have_modrm_ = true;
- should_decode_modrm_ = true;
- break;
-
- // These addressing modes specify an immediate or an offset value
- // directly, so we need to look at the operand type to see how many
- // bytes.
- case AM_I: // Immediate data.
- case AM_J: // Jump to offset.
- case AM_O: // Operand is at offset.
- switch (flag_operand & OT_MASK) {
- case OT_B: // Byte regardless of operand-size attribute.
- operand_bytes_ += OS_BYTE;
- break;
- case OT_C: // Byte or word, depending on operand-size attribute.
- if (operand_is_32_bits_)
- operand_bytes_ += OS_WORD;
- else
- operand_bytes_ += OS_BYTE;
- break;
- case OT_D: // Doubleword, regardless of operand-size attribute.
- operand_bytes_ += OS_DOUBLE_WORD;
- break;
- case OT_DQ: // Double-quadword, regardless of operand-size attribute.
- operand_bytes_ += OS_DOUBLE_QUAD_WORD;
- break;
- case OT_P: // 32-bit or 48-bit pointer, depending on operand-size
- // attribute.
- if (operand_is_32_bits_)
- operand_bytes_ += OS_48_BIT_POINTER;
- else
- operand_bytes_ += OS_32_BIT_POINTER;
- break;
- case OT_PS: // 128-bit packed single-precision floating-point data.
- operand_bytes_ += OS_128_BIT_PACKED_SINGLE_PRECISION_FLOATING;
- break;
- case OT_Q: // Quadword, regardless of operand-size attribute.
- operand_bytes_ += OS_QUAD_WORD;
- break;
- case OT_S: // 6-byte pseudo-descriptor.
- operand_bytes_ += OS_PSEUDO_DESCRIPTOR;
- break;
- case OT_SD: // Scalar Double-Precision Floating-Point Value
- case OT_PD: // Unaligned packed double-precision floating point value
- operand_bytes_ += OS_DOUBLE_PRECISION_FLOATING;
- break;
- case OT_SS:
- // Scalar element of a 128-bit packed single-precision
- // floating data.
- // We simply return enItUnknown since we don't have to support
- // floating point
- succeeded = false;
- break;
- case OT_V: // Word or doubleword, depending on operand-size attribute.
- if (operand_is_32_bits_)
- operand_bytes_ += OS_DOUBLE_WORD;
- else
- operand_bytes_ += OS_WORD;
- break;
- case OT_W: // Word, regardless of operand-size attribute.
- operand_bytes_ += OS_WORD;
- break;
-
- // Can safely ignore these.
- case OT_A: // Two one-word operands in memory or two double-word
- // operands in memory
- case OT_PI: // Quadword MMX technology register (e.g. mm0)
- case OT_SI: // Doubleword integer register (e.g., eax)
- break;
-
- default:
- break;
- }
- break;
-
- default:
- break;
- }
-
- return succeeded;
-}
-
-bool MiniDisassembler::ProcessModrm(unsigned char* start_byte,
- unsigned int& size) {
- // If we don't need to decode, we just return the size of the ModR/M
- // byte (there is never a SIB byte in this case).
- if (!should_decode_modrm_) {
- size++;
- return true;
- }
-
- // We never care about the reg field, only the combination of the mod
- // and r/m fields, so let's start by packing those fields together into
- // 5 bits.
- unsigned char modrm = (*start_byte);
- unsigned char mod = modrm & 0xC0; // mask out top two bits to get mod field
- modrm = modrm & 0x07; // mask out bottom 3 bits to get r/m field
- mod = mod >> 3; // shift the mod field to the right place
- modrm = mod | modrm; // combine the r/m and mod fields as discussed
- mod = mod >> 3; // shift the mod field to bits 2..0
-
- // Invariant: modrm contains the mod field in bits 4..3 and the r/m field
- // in bits 2..0, and mod contains the mod field in bits 2..0
-
- const ModrmEntry* modrm_entry = 0;
- if (address_is_32_bits_)
- modrm_entry = &s_ia32_modrm_map_[modrm];
- else
- modrm_entry = &s_ia16_modrm_map_[modrm];
-
- // Invariant: modrm_entry points to information that we need to decode
- // the ModR/M byte.
-
- // Add to the count of operand bytes, if the ModR/M byte indicates
- // that some operands are encoded in the instruction.
- if (modrm_entry->is_encoded_in_instruction_)
- operand_bytes_ += modrm_entry->operand_size_;
-
- // Process the SIB byte if necessary, and return the count
- // of ModR/M and SIB bytes.
- if (modrm_entry->use_sib_byte_) {
- size++;
- return ProcessSib(start_byte + 1, mod, size);
- } else {
- size++;
- return true;
- }
-}
-
-bool MiniDisassembler::ProcessSib(unsigned char* start_byte,
- unsigned char mod,
- unsigned int& size) {
- // get the mod field from the 2..0 bits of the SIB byte
- unsigned char sib_base = (*start_byte) & 0x07;
- if (0x05 == sib_base) {
- switch (mod) {
- case 0x00: // mod == 00
- case 0x02: // mod == 10
- operand_bytes_ += OS_DOUBLE_WORD;
- break;
- case 0x01: // mod == 01
- operand_bytes_ += OS_BYTE;
- break;
- case 0x03: // mod == 11
- // According to the IA-32 docs, there does not seem to be a disp
- // value for this value of mod
- default:
- break;
- }
- }
-
- size++;
- return true;
-}
-
-}; // namespace sidestep
diff --git a/chromium/tools/memory_watcher/mini_disassembler.h b/chromium/tools/memory_watcher/mini_disassembler.h
deleted file mode 100644
index 1d0f966e3b1..00000000000
--- a/chromium/tools/memory_watcher/mini_disassembler.h
+++ /dev/null
@@ -1,163 +0,0 @@
-// Copyright (c) 2012 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.
-
-/*
- * Definition of MiniDisassembler.
- */
-
-#ifndef GOOGLE_PERFTOOLS_MINI_DISASSEMBLER_H__
-#define GOOGLE_PERFTOOLS_MINI_DISASSEMBLER_H__
-
-#include <windows.h>
-#include "mini_disassembler_types.h"
-
-// compatibility shim
-#include "base/logging.h"
-#define ASSERT(cond, msg) DCHECK(cond)
-#define ASSERT1(cond) DCHECK(cond)
-
-namespace sidestep {
-
-// This small disassembler is very limited
-// in its functionality, and in fact does only the bare minimum required by the
-// preamble patching utility. It may be useful for other purposes, however.
-//
-// The limitations include at least the following:
-// -# No support for coprocessor opcodes, MMX, etc.
-// -# No machine-readable identification of opcodes or decoding of
-// assembly parameters. The name of the opcode (as a string) is given,
-// however, to aid debugging.
-//
-// You may ask what this little disassembler actually does, then? The answer is
-// that it does the following, which is exactly what the patching utility needs:
-// -# Indicates if opcode is a jump (any kind) or a return (any kind)
-// because this is important for the patching utility to determine if
-// a function is too short or there are jumps too early in it for it
-// to be preamble patched.
-// -# The opcode length is always calculated, so that the patching utility
-// can figure out where the next instruction starts, and whether it
-// already has enough instructions to replace with the absolute jump
-// to the patching code.
-//
-// The usage is quite simple; just create a MiniDisassembler and use its
-// Disassemble() method.
-//
-// If you would like to extend this disassembler, please refer to the
-// IA-32 Intel Architecture Software Developer's Manual Volume 2:
-// Instruction Set Reference for information about operand decoding
-// etc.
-class MiniDisassembler {
- public:
-
- // Creates a new instance and sets defaults.
- //
- // @param operand_default_32_bits If true, the default operand size is
- // set to 32 bits, which is the default under Win32. Otherwise it is 16 bits.
- // @param address_default_32_bits If true, the default address size is
- // set to 32 bits, which is the default under Win32. Otherwise it is 16 bits.
- MiniDisassembler(bool operand_default_32_bits,
- bool address_default_32_bits);
-
- // Equivalent to MiniDisassembler(true, true);
- MiniDisassembler();
-
- // Attempts to disassemble a single instruction starting from the
- // address in memory it is pointed to.
- //
- // @param start Address where disassembly should start.
- // @param instruction_bytes Variable that will be <b>incremented</b> by
- // the length in bytes of the instruction.
- // @return enItJump, enItReturn or enItGeneric on success. enItUnknown
- // if unable to disassemble, enItUnused if this seems to be an unused
- // opcode. In the last two (error) cases, cbInstruction will be set
- // to 0xffffffff.
- //
- // @post This instance of the disassembler is ready to be used again,
- // with unchanged defaults from creation time.
- InstructionType Disassemble(unsigned char* start, unsigned int& instruction_bytes);
-
- private:
-
- // Makes the disassembler ready for reuse.
- void Initialize();
-
- // Sets the flags for address and operand sizes.
- // @return Number of prefix bytes.
- InstructionType ProcessPrefixes(unsigned char* start, unsigned int& size);
-
- // Sets the flag for whether we have ModR/M, and increments
- // operand_bytes_ if any are specifies by the opcode directly.
- // @return Number of opcode bytes.
- InstructionType ProcessOpcode(unsigned char * start,
- unsigned int table,
- unsigned int& size);
-
- // Checks the type of the supplied operand. Increments
- // operand_bytes_ if it directly indicates an immediate etc.
- // operand. Asserts have_modrm_ if the operand specifies
- // a ModR/M byte.
- bool ProcessOperand(int flag_operand);
-
- // Increments operand_bytes_ by size specified by ModR/M and
- // by SIB if present.
- // @return 0 in case of error, 1 if there is just a ModR/M byte,
- // 2 if there is a ModR/M byte and a SIB byte.
- bool ProcessModrm(unsigned char* start, unsigned int& size);
-
- // Processes the SIB byte that it is pointed to.
- // @param start Pointer to the SIB byte.
- // @param mod The mod field from the ModR/M byte.
- // @return 1 to indicate success (indicates 1 SIB byte)
- bool ProcessSib(unsigned char* start, unsigned char mod, unsigned int& size);
-
- // The instruction type we have decoded from the opcode.
- InstructionType instruction_type_;
-
- // Counts the number of bytes that is occupied by operands in
- // the current instruction (note: we don't care about how large
- // operands stored in registers etc. are).
- unsigned int operand_bytes_;
-
- // True iff there is a ModR/M byte in this instruction.
- bool have_modrm_;
-
- // True iff we need to decode the ModR/M byte (sometimes it just
- // points to a register, we can tell by the addressing mode).
- bool should_decode_modrm_;
-
- // Current operand size is 32 bits if true, 16 bits if false.
- bool operand_is_32_bits_;
-
- // Default operand size is 32 bits if true, 16 bits if false.
- bool operand_default_is_32_bits_;
-
- // Current address size is 32 bits if true, 16 bits if false.
- bool address_is_32_bits_;
-
- // Default address size is 32 bits if true, 16 bits if false.
- bool address_default_is_32_bits_;
-
- // Huge big opcode table based on the IA-32 manual, defined
- // in Ia32OpcodeMap.cc
- static const OpcodeTable s_ia32_opcode_map_[];
-
- // Somewhat smaller table to help with decoding ModR/M bytes
- // when 16-bit addressing mode is being used. Defined in
- // Ia32ModrmMap.cc
- static const ModrmEntry s_ia16_modrm_map_[];
-
- // Somewhat smaller table to help with decoding ModR/M bytes
- // when 32-bit addressing mode is being used. Defined in
- // Ia32ModrmMap.cc
- static const ModrmEntry s_ia32_modrm_map_[];
-
- // Indicators of whether we got certain prefixes that certain
- // silly Intel instructions depend on in nonstandard ways for
- // their behaviors.
- bool got_f2_prefix_, got_f3_prefix_, got_66_prefix_;
-};
-
-}; // namespace sidestep
-
-#endif // GOOGLE_PERFTOOLS_MINI_DISASSEMBLER_H__
diff --git a/chromium/tools/memory_watcher/mini_disassembler_types.h b/chromium/tools/memory_watcher/mini_disassembler_types.h
deleted file mode 100644
index 4fc24abde34..00000000000
--- a/chromium/tools/memory_watcher/mini_disassembler_types.h
+++ /dev/null
@@ -1,199 +0,0 @@
-// Copyright (c) 2012 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.
-
-/*
- * Several simple types used by the disassembler and some of the patching
- * mechanisms.
- */
-
-#ifndef GOOGLE_PERFTOOLS_MINI_DISASSEMBLER_TYPES_H__
-#define GOOGLE_PERFTOOLS_MINI_DISASSEMBLER_TYPES_H__
-
-namespace sidestep {
-
-// Categories of instructions that we care about
-enum InstructionType {
- // This opcode is not used
- IT_UNUSED,
- // This disassembler does not recognize this opcode (error)
- IT_UNKNOWN,
- // This is not an instruction but a reference to another table
- IT_REFERENCE,
- // This byte is a prefix byte that we can ignore
- IT_PREFIX,
- // This is a prefix byte that switches to the nondefault address size
- IT_PREFIX_ADDRESS,
- // This is a prefix byte that switches to the nondefault operand size
- IT_PREFIX_OPERAND,
- // A jump or call instruction
- IT_JUMP,
- // A return instruction
- IT_RETURN,
- // Any other type of instruction (in this case we don't care what it is)
- IT_GENERIC,
-};
-
-// Lists IA-32 operand sizes in multiples of 8 bits
-enum OperandSize {
- OS_ZERO = 0,
- OS_BYTE = 1,
- OS_WORD = 2,
- OS_DOUBLE_WORD = 4,
- OS_QUAD_WORD = 8,
- OS_DOUBLE_QUAD_WORD = 16,
- OS_32_BIT_POINTER = 32/8,
- OS_48_BIT_POINTER = 48/8,
- OS_SINGLE_PRECISION_FLOATING = 32/8,
- OS_DOUBLE_PRECISION_FLOATING = 64/8,
- OS_DOUBLE_EXTENDED_PRECISION_FLOATING = 80/8,
- OS_128_BIT_PACKED_SINGLE_PRECISION_FLOATING = 128/8,
- OS_PSEUDO_DESCRIPTOR = 6
-};
-
-// Operand addressing methods from the IA-32 manual. The enAmMask value
-// is a mask for the rest. The other enumeration values are named for the
-// names given to the addressing methods in the manual, e.g. enAm_D is for
-// the D addressing method.
-//
-// The reason we use a full 4 bytes and a mask, is that we need to combine
-// these flags with the enOperandType to store the details
-// on the operand in a single integer.
-enum AddressingMethod {
- AM_NOT_USED = 0, // This operand is not used for this instruction
- AM_MASK = 0x00FF0000, // Mask for the rest of the values in this enumeration
- AM_A = 0x00010000, // A addressing type
- AM_C = 0x00020000, // C addressing type
- AM_D = 0x00030000, // D addressing type
- AM_E = 0x00040000, // E addressing type
- AM_F = 0x00050000, // F addressing type
- AM_G = 0x00060000, // G addressing type
- AM_I = 0x00070000, // I addressing type
- AM_J = 0x00080000, // J addressing type
- AM_M = 0x00090000, // M addressing type
- AM_O = 0x000A0000, // O addressing type
- AM_P = 0x000B0000, // P addressing type
- AM_Q = 0x000C0000, // Q addressing type
- AM_R = 0x000D0000, // R addressing type
- AM_S = 0x000E0000, // S addressing type
- AM_T = 0x000F0000, // T addressing type
- AM_V = 0x00100000, // V addressing type
- AM_W = 0x00110000, // W addressing type
- AM_X = 0x00120000, // X addressing type
- AM_Y = 0x00130000, // Y addressing type
- AM_REGISTER = 0x00140000, // Specific register is always used as this op
- AM_IMPLICIT = 0x00150000, // An implicit, fixed value is used
-};
-
-// Operand types from the IA-32 manual. The enOtMask value is
-// a mask for the rest. The rest of the values are named for the
-// names given to these operand types in the manual, e.g. enOt_ps
-// is for the ps operand type in the manual.
-//
-// The reason we use a full 4 bytes and a mask, is that we need
-// to combine these flags with the enAddressingMethod to store the details
-// on the operand in a single integer.
-enum OperandType {
- OT_MASK = 0xFF000000,
- OT_A = 0x01000000,
- OT_B = 0x02000000,
- OT_C = 0x03000000,
- OT_D = 0x04000000,
- OT_DQ = 0x05000000,
- OT_P = 0x06000000,
- OT_PI = 0x07000000,
- OT_PS = 0x08000000, // actually unsupported for (we don't know its size)
- OT_Q = 0x09000000,
- OT_S = 0x0A000000,
- OT_SS = 0x0B000000,
- OT_SI = 0x0C000000,
- OT_V = 0x0D000000,
- OT_W = 0x0E000000,
- OT_SD = 0x0F000000, // scalar double-precision floating-point value
- OT_PD = 0x10000000, // double-precision floating point
- // dummy "operand type" for address mode M - which doesn't specify
- // operand type
- OT_ADDRESS_MODE_M = 0x80000000
-};
-
-// Everything that's in an Opcode (see below) except the three
-// alternative opcode structs for different prefixes.
-struct SpecificOpcode {
- // Index to continuation table, or 0 if this is the last
- // byte in the opcode.
- int table_index_;
-
- // The opcode type
- InstructionType type_;
-
- // Description of the type of the dest, src and aux operands,
- // put together from an enOperandType flag and an enAddressingMethod
- // flag.
- int flag_dest_;
- int flag_source_;
- int flag_aux_;
-
- // We indicate the mnemonic for debugging purposes
- const char* mnemonic_;
-};
-
-// The information we keep in our tables about each of the different
-// valid instructions recognized by the IA-32 architecture.
-struct Opcode {
- // Index to continuation table, or 0 if this is the last
- // byte in the opcode.
- int table_index_;
-
- // The opcode type
- InstructionType type_;
-
- // Description of the type of the dest, src and aux operands,
- // put together from an enOperandType flag and an enAddressingMethod
- // flag.
- int flag_dest_;
- int flag_source_;
- int flag_aux_;
-
- // We indicate the mnemonic for debugging purposes
- const char* mnemonic_;
-
- // Alternative opcode info if certain prefixes are specified.
- // In most cases, all of these are zeroed-out. Only used if
- // bPrefixDependent is true.
- bool is_prefix_dependent_;
- SpecificOpcode opcode_if_f2_prefix_;
- SpecificOpcode opcode_if_f3_prefix_;
- SpecificOpcode opcode_if_66_prefix_;
-};
-
-// Information about each table entry.
-struct OpcodeTable {
- // Table of instruction entries
- const Opcode* table_;
- // How many bytes left to shift ModR/M byte <b>before</b> applying mask
- unsigned char shift_;
- // Mask to apply to byte being looked at before comparing to table
- unsigned char mask_;
- // Minimum/maximum indexes in table.
- unsigned char min_lim_;
- unsigned char max_lim_;
-};
-
-// Information about each entry in table used to decode ModR/M byte.
-struct ModrmEntry {
- // Is the operand encoded as bytes in the instruction (rather than
- // if it's e.g. a register in which case it's just encoded in the
- // ModR/M byte)
- bool is_encoded_in_instruction_;
-
- // Is there a SIB byte? In this case we always need to decode it.
- bool use_sib_byte_;
-
- // What is the size of the operand (only important if it's encoded
- // in the instruction)?
- OperandSize operand_size_;
-};
-
-}; // namespace sidestep
-
-#endif // GOOGLE_PERFTOOLS_MINI_DISASSEMBLER_TYPES_H__
diff --git a/chromium/tools/memory_watcher/preamble_patcher.cc b/chromium/tools/memory_watcher/preamble_patcher.cc
deleted file mode 100644
index 846d88141be..00000000000
--- a/chromium/tools/memory_watcher/preamble_patcher.cc
+++ /dev/null
@@ -1,228 +0,0 @@
-// Copyright (c) 2010 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.
-
-#include "preamble_patcher.h"
-#include "memory_hook.h"
-#include "mini_disassembler.h"
-
-// compatibility shims
-#include "base/logging.h"
-
-// Definitions of assembly statements we need
-#define ASM_JMP32REL 0xE9
-#define ASM_INT3 0xCC
-
-namespace sidestep {
-
-SideStepError PreamblePatcher::RawPatchWithStubAndProtections(
- void* target_function, void *replacement_function,
- unsigned char* preamble_stub, unsigned long stub_size,
- unsigned long* bytes_needed) {
- // We need to be able to write to a process-local copy of the first
- // MAX_PREAMBLE_STUB_SIZE bytes of target_function. We may be giving execute
- // privilege to something that doesn't have it, but that's the price to pay
- // for tools.
- DWORD old_target_function_protect = 0;
- BOOL succeeded = ::VirtualProtect(reinterpret_cast<void*>(target_function),
- MAX_PREAMBLE_STUB_SIZE,
- PAGE_EXECUTE_READWRITE,
- &old_target_function_protect);
- if (!succeeded) {
- ASSERT(false, "Failed to make page containing target function "
- "copy-on-write.");
- return SIDESTEP_ACCESS_DENIED;
- }
-
- SideStepError error_code = RawPatchWithStub(target_function,
- replacement_function,
- preamble_stub,
- stub_size,
- bytes_needed);
- if (SIDESTEP_SUCCESS != error_code) {
- ASSERT1(false);
- return error_code;
- }
-
- // Restore the protection of the first MAX_PREAMBLE_STUB_SIZE bytes of
- // pTargetFunction to what they were before we started goofing around.
- succeeded = ::VirtualProtect(reinterpret_cast<void*>(target_function),
- MAX_PREAMBLE_STUB_SIZE,
- old_target_function_protect,
- &old_target_function_protect);
- if (!succeeded) {
- ASSERT(false, "Failed to restore protection to target function.");
- // We must not return an error here because the function has actually
- // been patched, and returning an error would likely cause our client
- // code not to unpatch it. So we just keep going.
- }
-
- // Flush the instruction cache to make sure the processor doesn't execute the
- // old version of the instructions (before our patch).
- //
- // FlushInstructionCache is actually a no-op at least on single-processor
- // XP machines. I'm not sure why this is so, but it is, yet I want to keep
- // the call to the API here for correctness in case there is a difference in
- // some variants of Windows/hardware.
- succeeded = ::FlushInstructionCache(::GetCurrentProcess(),
- target_function,
- MAX_PREAMBLE_STUB_SIZE);
- if (!succeeded) {
- ASSERT(false, "Failed to flush instruction cache.");
- // We must not return an error here because the function has actually
- // been patched, and returning an error would likely cause our client
- // code not to unpatch it. So we just keep going.
- }
-
- return SIDESTEP_SUCCESS;
-}
-
-SideStepError PreamblePatcher::RawPatch(void* target_function,
- void* replacement_function,
- void** original_function_stub) {
- if (!target_function || !replacement_function || !original_function_stub ||
- (*original_function_stub) || target_function == replacement_function) {
- ASSERT(false, "Preconditions not met");
- return SIDESTEP_INVALID_PARAMETER;
- }
-
- // @see MAX_PREAMBLE_STUB_SIZE for an explanation of how we arrives at
- // this size
- unsigned char* preamble_stub =
- reinterpret_cast<unsigned char*>(
- MemoryHook::Alloc(sizeof(unsigned char) * MAX_PREAMBLE_STUB_SIZE));
- if (!preamble_stub) {
- ASSERT(false, "Unable to allocate preamble-stub.");
- return SIDESTEP_INSUFFICIENT_BUFFER;
- }
-
- // Change the protection of the newly allocated preamble stub to
- // PAGE_EXECUTE_READWRITE. This is required to work with DEP (Data
- // Execution Prevention) which will cause an exception if code is executed
- // from a page on which you do not have read access.
- DWORD old_stub_protect = 0;
- BOOL succeeded = VirtualProtect(preamble_stub, MAX_PREAMBLE_STUB_SIZE,
- PAGE_EXECUTE_READWRITE, &old_stub_protect);
- if (!succeeded) {
- ASSERT(false, "Failed to make page preamble stub read-write-execute.");
- delete[] preamble_stub;
- return SIDESTEP_ACCESS_DENIED;
- }
-
- SideStepError error_code = RawPatchWithStubAndProtections(target_function,
- replacement_function,
- preamble_stub,
- MAX_PREAMBLE_STUB_SIZE,
- NULL);
- if (SIDESTEP_SUCCESS != error_code) {
- ASSERT1(false);
- delete[] preamble_stub;
- return error_code;
- }
-
- *original_function_stub = reinterpret_cast<void*>(preamble_stub);
-
- // NOTE: For hooking malloc/free, we don't want to use streams which
- // allocate. Basically, we've hooked malloc, but not necessarily
- // hooked free yet. To do anything which uses the heap could crash
- // with a mismatched malloc/free!
- //VLOG(1) << "PreamblePatcher::RawPatch successfully patched 0x"
- // << target_function;
-
- return SIDESTEP_SUCCESS;
-}
-
-SideStepError PreamblePatcher::Unpatch(void* target_function,
- void* replacement_function,
- void* original_function_stub) {
- ASSERT1(target_function && original_function_stub);
- if (!target_function || !original_function_stub) {
- return SIDESTEP_INVALID_PARAMETER;
- }
-
- // We disassemble the preamble of the _stub_ to see how many bytes we
- // originally copied to the stub.
- MiniDisassembler disassembler;
- unsigned int preamble_bytes = 0;
- while (preamble_bytes < 5) {
- InstructionType instruction_type = disassembler.Disassemble(
- reinterpret_cast<unsigned char*>(original_function_stub) +
- preamble_bytes, preamble_bytes);
- if (IT_GENERIC != instruction_type) {
- ASSERT(false, "Should only have generic instructions in stub!!");
- return SIDESTEP_UNSUPPORTED_INSTRUCTION;
- }
- }
-
- // Before unpatching, target_function should be a JMP to
- // replacement_function. If it's not, then either it's an error, or
- // we're falling into the case where the original instruction was a
- // JMP, and we patched the jumped_to address rather than the JMP
- // itself. (For instance, if malloc() is just a JMP to __malloc(),
- // we patched __malloc() and not malloc().)
- unsigned char* target = reinterpret_cast<unsigned char*>(target_function);
- while (1) { // we stop when target is a JMP to replacement_function
- if (target[0] != ASM_JMP32REL) {
- ASSERT(false, "target_function does not look like it was patched.");
- return SIDESTEP_INVALID_PARAMETER;
- }
- int relative_offset; // Windows guarantees int is 4 bytes
- ASSERT1(sizeof(relative_offset) == 4);
- memcpy(reinterpret_cast<void*>(&relative_offset),
- reinterpret_cast<void*>(target + 1), 4);
- unsigned char* jump_to = target + 5 + relative_offset;
- if (jump_to == replacement_function)
- break;
- target = jump_to; // follow the jmp
- }
-
- // We need to be able to write to a process-local copy of the first
- // MAX_PREAMBLE_STUB_SIZE bytes of target_function. We may be giving execute
- // privilege to something that doesn't have it, but that's the price to pay
- // for tools.
- DWORD old_target_function_protect = 0;
- BOOL succeeded = ::VirtualProtect(reinterpret_cast<void*>(target),
- MAX_PREAMBLE_STUB_SIZE,
- PAGE_EXECUTE_READWRITE,
- &old_target_function_protect);
- if (!succeeded) {
- ASSERT(false, "Failed to make page containing target function "
- "copy-on-write.");
- return SIDESTEP_ACCESS_DENIED;
- }
-
- // Replace the first few bytes of the original function with the bytes we
- // previously moved to the preamble stub.
- memcpy(reinterpret_cast<void*>(target),
- original_function_stub, preamble_bytes);
-
- // Stub is now useless so delete it.
- // [csilvers: Commented out for perftools because it causes big problems
- // when we're unpatching malloc. We just let this live on as a leak.]
- //delete original_function_stub;
-
- // Restore the protection of the first MAX_PREAMBLE_STUB_SIZE bytes of
- // target to what they were before we started goofing around.
- succeeded = ::VirtualProtect(reinterpret_cast<void*>(target),
- MAX_PREAMBLE_STUB_SIZE,
- old_target_function_protect,
- &old_target_function_protect);
-
- // Flush the instruction cache to make sure the processor doesn't execute the
- // old version of the instructions (before our patch).
- //
- // See comment on FlushInstructionCache elsewhere in this file.
- succeeded = ::FlushInstructionCache(::GetCurrentProcess(),
- target,
- MAX_PREAMBLE_STUB_SIZE);
- if (!succeeded) {
- ASSERT(false, "Failed to flush instruction cache.");
- return SIDESTEP_UNEXPECTED;
- }
-
- VLOG(1) << "PreamblePatcher::Unpatch successfully unpatched 0x"
- << target_function;
- return SIDESTEP_SUCCESS;
-}
-
-}; // namespace sidestep
diff --git a/chromium/tools/memory_watcher/preamble_patcher.h b/chromium/tools/memory_watcher/preamble_patcher.h
deleted file mode 100644
index fae2551bd7b..00000000000
--- a/chromium/tools/memory_watcher/preamble_patcher.h
+++ /dev/null
@@ -1,293 +0,0 @@
-// Copyright (c) 2012 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.
-
-/*
- * Definition of PreamblePatcher
- */
-
-#ifndef MEMORY_WATCHER_PREAMBLE_PATCHER_H__
-#define MEMORY_WATCHER_PREAMBLE_PATCHER_H__
-
-#include <windows.h>
-
-// compatibility shim
-#include "base/logging.h"
-#define ASSERT(cond, msg) DCHECK(cond)
-#define ASSERT1(cond) DCHECK(cond)
-
-// Maximum size of the preamble stub. We overwrite at least the first 5
-// bytes of the function. Considering the worst case scenario, we need 4
-// bytes + the max instruction size + 5 more bytes for our jump back to
-// the original code. With that in mind, 32 is a good number :)
-#define MAX_PREAMBLE_STUB_SIZE (32)
-
-namespace sidestep {
-
-// Possible results of patching/unpatching
-enum SideStepError {
- SIDESTEP_SUCCESS = 0,
- SIDESTEP_INVALID_PARAMETER,
- SIDESTEP_INSUFFICIENT_BUFFER,
- SIDESTEP_JUMP_INSTRUCTION,
- SIDESTEP_FUNCTION_TOO_SMALL,
- SIDESTEP_UNSUPPORTED_INSTRUCTION,
- SIDESTEP_NO_SUCH_MODULE,
- SIDESTEP_NO_SUCH_FUNCTION,
- SIDESTEP_ACCESS_DENIED,
- SIDESTEP_UNEXPECTED,
-};
-
-#define SIDESTEP_TO_HRESULT(error) \
- MAKE_HRESULT(SEVERITY_ERROR, FACILITY_NULL, error)
-
-// Implements a patching mechanism that overwrites the first few bytes of
-// a function preamble with a jump to our hook function, which is then
-// able to call the original function via a specially-made preamble-stub
-// that imitates the action of the original preamble.
-//
-// NOTE: This patching mechanism should currently only be used for
-// non-production code, e.g. unit tests, because it is not threadsafe.
-// See the TODO in preamble_patcher_with_stub.cc for instructions on what
-// we need to do before using it in production code; it's fairly simple
-// but unnecessary for now since we only intend to use it in unit tests.
-//
-// To patch a function, use either of the typesafe Patch() methods. You
-// can unpatch a function using Unpatch().
-//
-// Typical usage goes something like this:
-// @code
-// typedef int (*MyTypesafeFuncPtr)(int x);
-// MyTypesafeFuncPtr original_func_stub;
-// int MyTypesafeFunc(int x) { return x + 1; }
-// int HookMyTypesafeFunc(int x) { return 1 + original_func_stub(x); }
-//
-// void MyPatchInitializingFunction() {
-// original_func_stub = PreamblePatcher::Patch(
-// MyTypesafeFunc, HookMyTypesafeFunc);
-// if (!original_func_stub) {
-// // ... error handling ...
-// }
-//
-// // ... continue - you have patched the function successfully ...
-// }
-// @endcode
-//
-// Note that there are a number of ways that this method of patching can
-// fail. The most common are:
-// - If there is a jump (jxx) instruction in the first 5 bytes of
-// the function being patched, we cannot patch it because in the
-// current implementation we do not know how to rewrite relative
-// jumps after relocating them to the preamble-stub. Note that
-// if you really really need to patch a function like this, it
-// would be possible to add this functionality (but at some cost).
-// - If there is a return (ret) instruction in the first 5 bytes
-// we cannot patch the function because it may not be long enough
-// for the jmp instruction we use to inject our patch.
-// - If there is another thread currently executing within the bytes
-// that are copied to the preamble stub, it will crash in an undefined
-// way.
-//
-// If you get any other error than the above, you're either pointing the
-// patcher at an invalid instruction (e.g. into the middle of a multi-
-// byte instruction, or not at memory containing executable instructions)
-// or, there may be a bug in the disassembler we use to find
-// instruction boundaries.
-//
-// NOTE: In optimized builds, when you have very trivial functions that
-// the compiler can reason do not have side effects, the compiler may
-// reuse the result of calling the function with a given parameter, which
-// may mean if you patch the function in between your patch will never get
-// invoked. See preamble_patcher_test.cc for an example.
-class PreamblePatcher {
- public:
-
- // This is a typesafe version of RawPatch(), identical in all other
- // ways than it takes a template parameter indicating the type of the
- // function being patched.
- //
- // @param T The type of the function you are patching. Usually
- // you will establish this type using a typedef, as in the following
- // example:
- // @code
- // typedef BOOL (WINAPI *MessageBoxPtr)(HWND, LPCTSTR, LPCTSTR, UINT);
- // MessageBoxPtr original = NULL;
- // PreamblePatcher::Patch(MessageBox, Hook_MessageBox, &original);
- // @endcode
- template <class T>
- static SideStepError Patch(T target_function,
- T replacement_function,
- T* original_function_stub) {
- // NOTE: casting from a function to a pointer is contra the C++
- // spec. It's not safe on IA64, but is on i386. We use
- // a C-style cast here to emphasize this is not legal C++.
- return RawPatch((void*)(target_function),
- (void*)(replacement_function),
- (void**)(original_function_stub));
- }
-
- // Patches a named function imported from the named module using
- // preamble patching. Uses RawPatch() to do the actual patching
- // work.
- //
- // @param T The type of the function you are patching. Must
- // exactly match the function you specify using module_name and
- // function_name.
- //
- // @param module_name The name of the module from which the function
- // is being imported. Note that the patch will fail if this module
- // has not already been loaded into the current process.
- //
- // @param function_name The name of the function you wish to patch.
- //
- // @param replacement_function Your replacement function which
- // will be called whenever code tries to call the original function.
- //
- // @param original_function_stub Pointer to memory that should receive a
- // pointer that can be used (e.g. in the replacement function) to call the
- // original function, or NULL to indicate failure.
- //
- // @return One of the EnSideStepError error codes; only SIDESTEP_SUCCESS
- // indicates success.
- template <class T>
- static SideStepError Patch(LPCTSTR module_name,
- LPCSTR function_name,
- T replacement_function,
- T* original_function_stub) {
- ASSERT1(module_name && function_name);
- if (!module_name || !function_name) {
- ASSERT(false,
- "You must specify a module name and function name.");
- return SIDESTEP_INVALID_PARAMETER;
- }
- HMODULE module = ::GetModuleHandle(module_name);
- ASSERT1(module != NULL);
- if (!module) {
- ASSERT(false, "Invalid module name.");
- return SIDESTEP_NO_SUCH_MODULE;
- }
- FARPROC existing_function = ::GetProcAddress(module, function_name);
- if (!existing_function) {
- return SIDESTEP_NO_SUCH_FUNCTION;
- }
- // NOTE: casting from a function to a pointer is contra the C++
- // spec. It's not safe on IA64, but is on i386. We use
- // a C-style cast here to emphasize this is not legal C++.
- return RawPatch((void*)existing_function, (void*)replacement_function,
- (void**)(original_function_stub));
- }
-
- // Patches a function by overwriting its first few bytes with
- // a jump to a different function. This is the "worker" function
- // for each of the typesafe Patch() functions. In most cases,
- // it is preferable to use the Patch() functions rather than
- // this one as they do more checking at compile time.
- //
- // @param target_function A pointer to the function that should be
- // patched.
- //
- // @param replacement_function A pointer to the function that should
- // replace the target function. The replacement function must have
- // exactly the same calling convention and parameters as the original
- // function.
- //
- // @param original_function_stub Pointer to memory that should receive a
- // pointer that can be used (e.g. in the replacement function) to call the
- // original function, or NULL to indicate failure.
- //
- // @param original_function_stub Pointer to memory that should receive a
- // pointer that can be used (e.g. in the replacement function) to call the
- // original function, or NULL to indicate failure.
- //
- // @return One of the EnSideStepError error codes; only SIDESTEP_SUCCESS
- // indicates success.
- //
- // @note The preamble-stub (the memory pointed to by
- // *original_function_stub) is allocated on the heap, and (in
- // production binaries) never destroyed, resulting in a memory leak. This
- // will be the case until we implement safe unpatching of a method.
- // However, it is quite difficult to unpatch a method (because other
- // threads in the process may be using it) so we are leaving it for now.
- // See however UnsafeUnpatch, which can be used for binaries where you
- // know only one thread is running, e.g. unit tests.
- static SideStepError RawPatch(void* target_function,
- void* replacement_function,
- void** original_function_stub);
-
- // Unpatches target_function and deletes the stub that previously could be
- // used to call the original version of the function.
- //
- // DELETES the stub that is passed to the function.
- //
- // @param target_function Pointer to the target function which was
- // previously patched, i.e. a pointer which value should match the value
- // of the symbol prior to patching it.
- //
- // @param replacement_function Pointer to the function target_function
- // was patched to.
- //
- // @param original_function_stub Pointer to the stub returned when
- // patching, that could be used to call the original version of the
- // patched function. This function will also delete the stub, which after
- // unpatching is useless.
- //
- // If your original call was
- // origptr = Patch(VirtualAlloc, MyVirtualAlloc)
- // then to undo it you would call
- // Unpatch(VirtualAlloc, MyVirtualAlloc, origptr);
- //
- // @return One of the EnSideStepError error codes; only SIDESTEP_SUCCESS
- // indicates success.
- static SideStepError Unpatch(void* target_function,
- void* replacement_function,
- void* original_function_stub);
-
- private:
-
- // Patches a function by overwriting its first few bytes with
- // a jump to a different function. This is similar to the RawPatch
- // function except that it uses the stub allocated by the caller
- // instead of allocating it.
- //
- // We call VirtualProtect to make the
- // target function writable at least for the duration of the call.
- //
- // @param target_function A pointer to the function that should be
- // patched.
- //
- // @param replacement_function A pointer to the function that should
- // replace the target function. The replacement function must have
- // exactly the same calling convention and parameters as the original
- // function.
- //
- // @param preamble_stub A pointer to a buffer where the preamble stub
- // should be copied. The size of the buffer should be sufficient to
- // hold the preamble bytes.
- //
- // @param stub_size Size in bytes of the buffer allocated for the
- // preamble_stub
- //
- // @param bytes_needed Pointer to a variable that receives the minimum
- // number of bytes required for the stub. Can be set to NULL if you're
- // not interested.
- //
- // @return An error code indicating the result of patching.
- static SideStepError RawPatchWithStubAndProtections(void* target_function,
- void *replacement_function,
- unsigned char* preamble_stub,
- unsigned long stub_size,
- unsigned long* bytes_needed);
-
- // A helper function used by RawPatchWithStubAndProtections -- it does
- // everything but the VirtualProtect wsork. Defined in
- // preamble_patcher_with_stub.cc.
- static SideStepError RawPatchWithStub(void* target_function,
- void *replacement_function,
- unsigned char* preamble_stub,
- unsigned long stub_size,
- unsigned long* bytes_needed);
-};
-
-}; // namespace sidestep
-
-#endif // MEMORY_WATCHER_PREAMBLE_PATCHER_H__
diff --git a/chromium/tools/memory_watcher/preamble_patcher_with_stub.cc b/chromium/tools/memory_watcher/preamble_patcher_with_stub.cc
deleted file mode 100644
index 31303065c36..00000000000
--- a/chromium/tools/memory_watcher/preamble_patcher_with_stub.cc
+++ /dev/null
@@ -1,174 +0,0 @@
-// Copyright (c) 2012 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.
-
-/*
- * Implementation of PreamblePatcher
- */
-
-#include "preamble_patcher.h"
-
-#include "mini_disassembler.h"
-
-// Definitions of assembly statements we need
-#define ASM_JMP32REL 0xE9
-#define ASM_INT3 0xCC
-
-namespace sidestep {
-
-SideStepError PreamblePatcher::RawPatchWithStub(
- void* target_function,
- void *replacement_function,
- unsigned char* preamble_stub,
- unsigned long stub_size,
- unsigned long* bytes_needed) {
- if ((NULL == target_function) ||
- (NULL == replacement_function) ||
- (NULL == preamble_stub)) {
- ASSERT(false, "Invalid parameters - either pTargetFunction or "
- "pReplacementFunction or pPreambleStub were NULL.");
- return SIDESTEP_INVALID_PARAMETER;
- }
-
- // TODO(V7:joi) Siggi and I just had a discussion and decided that both
- // patching and unpatching are actually unsafe. We also discussed a
- // method of making it safe, which is to freeze all other threads in the
- // process, check their thread context to see if their eip is currently
- // inside the block of instructions we need to copy to the stub, and if so
- // wait a bit and try again, then unfreeze all threads once we've patched.
- // Not implementing this for now since we're only using SideStep for unit
- // testing, but if we ever use it for production code this is what we
- // should do.
- //
- // NOTE: Stoyan suggests we can write 8 or even 10 bytes atomically using
- // FPU instructions, and on newer processors we could use cmpxchg8b or
- // cmpxchg16b. So it might be possible to do the patching/unpatching
- // atomically and avoid having to freeze other threads. Note though, that
- // doing it atomically does not help if one of the other threads happens
- // to have its eip in the middle of the bytes you change while you change
- // them.
- unsigned char* target = reinterpret_cast<unsigned char*>(target_function);
-
- // First, deal with a special case that we see with functions that
- // point into an IAT table (including functions linked statically
- // into the application): these function already starts with
- // ASM_JMP32REL. For instance, malloc() might be implemented as a
- // JMP to __malloc(). In that case, we replace the destination of
- // the JMP (__malloc), rather than the JMP itself (malloc). This
- // way we get the correct behavior no matter how malloc gets called.
- if (target[0] == ASM_JMP32REL) {
- // target[1-4] holds the place the jmp goes to, but it's
- // relative to the next instruction.
- int relative_offset; // Windows guarantees int is 4 bytes
- ASSERT1(sizeof(relative_offset) == 4);
- memcpy(reinterpret_cast<void*>(&relative_offset),
- reinterpret_cast<void*>(target + 1), 4);
- // I'd like to just say "target = target + 5 + relative_offset" here, but
- // I can't, because the new target will need to have its protections set.
- return RawPatchWithStubAndProtections(target + 5 + relative_offset,
- replacement_function, preamble_stub,
- stub_size, bytes_needed);
- }
-
- // Let's disassemble the preamble of the target function to see if we can
- // patch, and to see how much of the preamble we need to take. We need 5
- // bytes for our jmp instruction, so let's find the minimum number of
- // instructions to get 5 bytes.
- MiniDisassembler disassembler;
- unsigned int preamble_bytes = 0;
- while (preamble_bytes < 5) {
- InstructionType instruction_type =
- disassembler.Disassemble(target + preamble_bytes, preamble_bytes);
- if (IT_JUMP == instruction_type) {
- ASSERT(false, "Unable to patch because there is a jump instruction "
- "in the first 5 bytes.");
- return SIDESTEP_JUMP_INSTRUCTION;
- } else if (IT_RETURN == instruction_type) {
- ASSERT(false, "Unable to patch because function is too short");
- return SIDESTEP_FUNCTION_TOO_SMALL;
- } else if (IT_GENERIC != instruction_type) {
- ASSERT(false, "Disassembler encountered unsupported instruction "
- "(either unused or unknown)");
- return SIDESTEP_UNSUPPORTED_INSTRUCTION;
- }
- }
-
- if (NULL != bytes_needed)
- *bytes_needed = preamble_bytes + 5;
-
- // Inv: cbPreamble is the number of bytes (at least 5) that we need to take
- // from the preamble to have whole instructions that are 5 bytes or more
- // in size total. The size of the stub required is cbPreamble + size of
- // jmp (5)
- if (preamble_bytes + 5 > stub_size) {
- ASSERT1(false);
- return SIDESTEP_INSUFFICIENT_BUFFER;
- }
-
- // First, copy the preamble that we will overwrite.
- memcpy(reinterpret_cast<void*>(preamble_stub),
- reinterpret_cast<void*>(target), preamble_bytes);
-
- // Now, make a jmp instruction to the rest of the target function (minus the
- // preamble bytes we moved into the stub) and copy it into our preamble-stub.
- // find address to jump to, relative to next address after jmp instruction
-#ifdef _MSC_VER
-#pragma warning(push)
-#pragma warning(disable:4244)
-#endif
- int relative_offset_to_target_rest
- = ((reinterpret_cast<unsigned char*>(target) + preamble_bytes) -
- (preamble_stub + preamble_bytes + 5));
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
- // jmp (Jump near, relative, displacement relative to next instruction)
- preamble_stub[preamble_bytes] = ASM_JMP32REL;
- // copy the address
- memcpy(reinterpret_cast<void*>(preamble_stub + preamble_bytes + 1),
- reinterpret_cast<void*>(&relative_offset_to_target_rest), 4);
-
- // Inv: preamble_stub points to assembly code that will execute the
- // original function by first executing the first cbPreamble bytes of the
- // preamble, then jumping to the rest of the function.
-
- // Overwrite the first 5 bytes of the target function with a jump to our
- // replacement function.
- // (Jump near, relative, displacement relative to next instruction)
- target[0] = ASM_JMP32REL;
-
- // Find offset from instruction after jmp, to the replacement function.
-#ifdef _MSC_VER
-#pragma warning(push)
-#pragma warning(disable:4244)
-#endif
- int offset_to_replacement_function =
- reinterpret_cast<unsigned char*>(replacement_function) -
- reinterpret_cast<unsigned char*>(target) - 5;
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
- // complete the jmp instruction
- memcpy(reinterpret_cast<void*>(target + 1),
- reinterpret_cast<void*>(&offset_to_replacement_function), 4);
- // Set any remaining bytes that were moved to the preamble-stub to INT3 so
- // as not to cause confusion (otherwise you might see some strange
- // instructions if you look at the disassembly, or even invalid
- // instructions). Also, by doing this, we will break into the debugger if
- // some code calls into this portion of the code. If this happens, it
- // means that this function cannot be patched using this patcher without
- // further thought.
- if (preamble_bytes > 5) {
- memset(reinterpret_cast<void*>(target + 5), ASM_INT3, preamble_bytes - 5);
- }
-
- // Inv: The memory pointed to by target_function now points to a relative
- // jump instruction that jumps over to the preamble_stub. The preamble
- // stub contains the first stub_size bytes of the original target
- // function's preamble code, followed by a relative jump back to the next
- // instruction after the first cbPreamble bytes.
-
- return SIDESTEP_SUCCESS;
-}
-
-}; // namespace sidestep
diff --git a/chromium/tools/memory_watcher/scripts/finditem.pl b/chromium/tools/memory_watcher/scripts/finditem.pl
deleted file mode 100755
index 36838ebc733..00000000000
--- a/chromium/tools/memory_watcher/scripts/finditem.pl
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/perl
-# Copyright (c) 2012 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.
-
-sub process_raw($$) {
- my $file = shift;
- my $search = shift;
-
- my %leaks = ();
-
- my $save = 0;
- my $print = 0;
- my $bytes = 0;
- my $calls = 0;
- my $sum_bytes = 0;
- my $sum_calls = 0;
-
- open (LOGFILE, "$file") or die("could not open $file");
- while(<LOGFILE>) {
- my $line = $_;
- if ($line =~ m/([0-9]*) bytes, ([0-9]*) allocs/) {
- $save = "";
- $print = 0;
- $bytes = $1;
- $calls = $2;
- }
- elsif ($line =~ m/$search/) {
- $print = 1;
- }
- elsif ($line =~ m/=============/) {
- $save .= $line;
- if ($print) {
- print "$bytes bytes ($calls calls)\n";
- print $save;
- $sum_bytes += $bytes;
- $sum_calls += $calls;
- $save = "";
- $print = 0;
- $calls = 0;
- }
- }
- $save .= $line;
- }
- print("TOTAL: $sum_bytes bytes ($sum_calls calls)\n");
-}
-
-
-# ----- Main ------------------------------------------------
-
-# Get the command line argument
-my $filename = shift;
-my $search = shift;
-
-# Process the file.
-process_raw($filename, $search);
diff --git a/chromium/tools/memory_watcher/scripts/memprof.pl b/chromium/tools/memory_watcher/scripts/memprof.pl
deleted file mode 100755
index d902e5e4fac..00000000000
--- a/chromium/tools/memory_watcher/scripts/memprof.pl
+++ /dev/null
@@ -1,116 +0,0 @@
-#!/usr/bin/perl
-# Copyright (c) 2012 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.
-#
-# Given a memwatcher logfile, group memory allocations by callstack.
-#
-# Usage:
-#
-# memprof.pl <logfile>
-#
-# logfile -- The memwatcher.logXXXX file to summarize.
-#
-#
-#
-# Sample output:
-#
-# 54,061,617 100.00% AllocationStack::AllocationStack
-# 41,975,368 77.64% malloc
-# 11,886,592 21.99% VirtualAlloc
-# 7,168,000 13.26% v8::internal::OS::Allocate
-# 7,168,000 13.26% v8::internal::MemoryAllocator::AllocateRawMemory
-# 5,976,184 11.05% WebCore::V8Bridge::evaluate
-# 5,767,168 10.67% v8::internal::MemoryAllocator::AllocatePages
-# 5,451,776 10.08% WebCore::V8Proxy::initContextIfNeeded
-# ....
-#
-#
-#
-# ********
-# Note: The output is currently sorted by decreasing size.
-# ********
-#
-
-sub process_raw($$) {
- my $file = shift;
- my $filter = shift;
-
- my %leaks = ();
- my %stackframes = ();
-
- my $blamed = 0;
- my $bytes = 0;
- my $hits = 0;
- open (LOGFILE, "$file") or die("could not open $file");
- while(<LOGFILE>) {
- my $line = $_;
-#print "$line";
- chomp($line);
- if ($line =~ m/([0-9]*) bytes, ([0-9]*) allocs/) {
-
- # If we didn't find any frames to account this to, log that.
- if ($blamed == 0) {
- $leaks{"UNACCOUNTED"} += $bytes;
- }
-
-#print "START\n";
- #print("stackframe " . $1 . ", " . $2 . "\n");
- $hits = $2;
- $bytes = $1;
- %stackframes = (); # we have a new frame, clear the list.
- $blamed = 0; # we haven't blamed anyone yet
- }
- elsif ($line =~ m/Total Bytes:[ ]*([0-9]*)/) {
- $total_bytes += $1;
- }
- elsif ($line =~ m/=============/) {
- next;
- }
- elsif ($line =~ m/[ ]*([\-a-zA-Z_\\0-9\.]*) \(([0-9]*)\):[ ]*([<>_a-zA-Z_0-9:]*)/) {
-# print("junk: " . $line . "\n");
-# print("file: $1\n");
-# print("line: $2\n");
-# print("function: $3\n");
-#
-
- # blame the function
- my $pig = $3;
-# my $pig = $1;
-
- # only add the memory if this function is not yet on our callstack
- if (!exists $stackframes{$pig}) {
- $leaks{$pig} += $bytes;
- }
-
- $stackframes{$pig}++;
- $blamed++;
- }
- }
-
- # now dump our hash table
- my $sum = 0;
- my @keys = sort { $leaks{$b} <=> $leaks{$a} }keys %leaks;
- for ($i=0; $i<@keys; $i++) {
- my $key = @keys[$i];
- printf "%11s\t%3.2f%%\t%s\n", comma_print($leaks{$key}), (100* $leaks{$key} / $total_bytes), $key;
- $sum += $leaks{$key};
- }
- printf("TOTAL: %s\n", comma_print($sum));
-}
-
-# Insert commas into an integer after each three digits for printing.
-sub comma_print {
- my $num = "$_[0]";
- $num =~ s/(\d{1,3}?)(?=(\d{3})+$)/$1,/g;
- return $num;
-}
-
-# ----- Main ------------------------------------------------
-
-# Get the command line argument
-my $filename = shift;
-my $filter = shift;
-
-# Process the file.
-process_raw($filename, $filter);
diff --git a/chromium/tools/memory_watcher/scripts/memtrace.pl b/chromium/tools/memory_watcher/scripts/memtrace.pl
deleted file mode 100755
index 04a70fd8c29..00000000000
--- a/chromium/tools/memory_watcher/scripts/memtrace.pl
+++ /dev/null
@@ -1,146 +0,0 @@
-#!/usr/bin/perl
-# Copyright (c) 2012 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.
-#
-# Blame callstacks for each memory allocation.
-# Similar to memprof.pl, will also try to filter out unuseful stacks.
-# TODO: better describe how these tools differ.
-#
-# Usage:
-#
-# memtrace.pl <logfile>
-#
-# logfile -- The memwatcher.logXXXX file to summarize.
-#
-#
-#
-# Sample output:
-#
-# 41,975,368 77.64% f:\sp\vctools\crt_bld\self_x86\crt\src\malloc.c (163): malloc
-# 2,097,152 3.88% c:\src\chrome1\src\webkit\pending\frameloader.cpp (3300): WebCore::FrameLoader::committedLoad
-# 1,572,864 2.91% c:\src\chrome1\src\webkit\port\bridge\v8bridge.cpp (214): WebCore::V8Bridge::evaluate
-# 1,572,864 2.91% c:\src\chrome1\src\webkit\glue\webframeloaderclient_impl.cc (1071): WebFrameLoaderClient::committedLoad
-# 1,572,864 2.91% c:\src\chrome1\src\v8\src\ast.h (1181): v8::internal::Visitor::Visit
-#
-#
-#
-
-
-sub process_raw($) {
- my $file = shift;
-
- my %leaks = ();
-
- my $location_bytes = 0;
- my $location_hits = 0;
- my $location_blame = "";
- my $location_last = "";
- my $contains_load_lib = 0;
- my $total_bytes = 0;
- open (LOGFILE, "$file") or die("could not open $file");
- while(<LOGFILE>) {
- my $line = $_;
-#print "$line";
- chomp($line);
- if ($line =~ m/([0-9]*) bytes, ([0-9]*) allocs/) {
-
-#print "START\n";
- # Dump "prior" frame here
- if ($location_bytes > 0) {
-#print("GOTLEAK: $location_bytes ($location_hits) $location_blame\n");
- if ($location_blame eq "") {
- $location_blame = $location_last;
- }
- if (!$contains_load_lib) {
- $leaks{$location_blame} += $location_bytes;
- }
- $location_bytes = 0;
- $location_blame = "";
- $contains_load_lib = 0;
- }
-
- #print("stackframe " . $1 . ", " . $2 . "\n");
- $location_hits = $2;
- $location_bytes = $1;
- }
- elsif ($line =~ m/Total Bytes:[ ]*([0-9]*)/) {
- $total_bytes += $1;
- }
- elsif ($line =~ m/LoadLibrary/) {
- # skip these, they contain false positives.
- $contains_load_lib = 1;
- next;
- }
- elsif ($line =~ m/=============/) {
- next;
- }
- elsif ($line =~ m/Untracking untracked/) {
- next;
- }
- elsif ($line =~ m/[ ]*([a-z]:\\[a-z]*\\[a-zA-Z_\\0-9\.]*) /) {
- my $filename = $1;
- if ($filename =~ m/memory_watcher/) {
- next;
- }
- if ($filename =~ m/skmemory_stdlib.cpp/) {
- next;
- }
- if ($filename =~ m/stringimpl.cpp/) {
- next;
- }
- if ($filename =~ m/stringbuffer.h/) {
- next;
- }
- if ($filename =~ m/fastmalloc.h/) {
- next;
- }
- if ($filename =~ m/microsoft visual studio 8/) {
- next;
- }
- if ($filename =~ m/platformsdk_win2008_6_1/) {
- next;
- }
- if ($location_blame eq "") {
- # use this to blame the line
- $location_blame = $line;
-
- # use this to blame the file.
- # $location_blame = $filename;
-
-#print("blaming $location_blame\n");
- }
- } else {
-# print("junk: " . $line . "\n");
- if (! ($line =~ m/GetModuleFileNameA/) ) {
- $location_last = $line;
- }
- }
- }
-
- # now dump our hash table
- my $sum = 0;
- my @keys = sort { $leaks{$b} <=> $leaks{$a} }keys %leaks;
- for ($i=0; $i<@keys; $i++) {
- my $key = @keys[$i];
- if (0 == $total_bytes) { $total_bytes = 1; }
- printf "%11s\t%3.2f%%\t%s\n", comma_print($leaks{$key}), (100* $leaks{$key} / $total_bytes), $key;
- $sum += $leaks{$key};
- }
- printf("TOTAL: %s\n", comma_print($sum));
-}
-
-# Insert commas into an integer after each three digits for printing.
-sub comma_print {
- my $num = "$_[0]";
- $num =~ s/(\d{1,3}?)(?=(\d{3})+$)/$1,/g;
- return $num;
-}
-
-# ----- Main ------------------------------------------------
-
-# Get the command line argument
-my $filename = shift;
-
-# Process the file.
-process_raw($filename);
diff --git a/chromium/tools/memory_watcher/scripts/summary.pl b/chromium/tools/memory_watcher/scripts/summary.pl
deleted file mode 100755
index aaf09b94522..00000000000
--- a/chromium/tools/memory_watcher/scripts/summary.pl
+++ /dev/null
@@ -1,154 +0,0 @@
-#!/usr/bin/perl
-# Copyright (c) 2012 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.
-#
-# Read a memtrace logfile from stdin and group memory allocations by logical
-# code component. The code component is guessed from the callstack, and
-# is something like {v8, sqlite, disk cache, skia, etc..}
-#
-# Usage:
-#
-# summary.pl
-#
-# [STDIN] -- The memwatcher.logXXXX file to summarize.
-#
-
-sub process_stdin() {
- my %leaks = ();
- my $total_bytes = 0;
-
- while(<STDIN>) {
- my $line = $_;
- chomp($line);
- my $bytes, $loc;
- ($bytes, $loc) = ($line =~ m/[ \t]*([0-9]*)[ \t]*[0-9\.%]*[ \t]*(.*)/);
- chomp($loc);
- while(<STDIN>) {
- my $cont = $_;
- chomp($cont);
- last if $cont =~ m/=====/;
- $loc .= "\n" . $cont;
- }
- my $location_blame = "";
-
-# print "Found: $bytes, $loc\n";
-
- if ($loc =~ m/v8::internal::Snapshot::Deserialize/) {
- $location_blame = "v8 Snapshot Deserialize";
- } elsif ($loc =~ m/RenderStyle::create/) {
- $location_blame = "RenderStyle::create";
- } elsif ($loc =~ m/v8::internal::OldSpace::SlowAllocateRaw/) {
- $location_blame = "v8 OldSpace";
- } elsif ($loc =~ m/sqlite/) {
- $location_blame = "sqlite";
- } elsif ($loc =~ m/ TransportDIB::Map/) {
- $location_blame = "Shared Memory Backing Store";
- } elsif ($loc =~ m/imagedecoder/) {
- $location_blame = "img decoder";
- } elsif ($loc =~ m/SkBitmap/) {
- $location_blame = "skia";
- } elsif ($loc =~ m/disk_cache/) {
- $location_blame = "disk cache";
- } elsif ($loc =~ m/skia/) {
- $location_blame = "skia";
- } elsif ($loc =~ m/:WSA/) {
- $location_blame = "net";
- } elsif ($loc =~ m/dns/) {
- $location_blame = "net";
- } elsif ($loc =~ m/trunk\\net/) {
- $location_blame = "net";
- } elsif ($loc =~ m/WinHttp/) {
- $location_blame = "WinHttp";
- } elsif ($loc =~ m/:I_Crypt/) {
- $location_blame = "WinHttpSSL";
- } elsif ($loc =~ m/CryptGetTls/) {
- $location_blame = "WinHttpSSL";
- } elsif ($loc =~ m/WinVerifyTrust/) {
- $location_blame = "WinHttpSSL";
- } elsif ($loc =~ m/Cert/) {
- $location_blame = "WinHttpSSL";
- } elsif ($loc =~ m/plugin/) {
- $location_blame = "plugin";
- } elsif ($loc =~ m/NP_/) {
- $location_blame = "plugin";
- } elsif ($loc =~ m/hunspell/) {
- $location_blame = "hunspell";
- } elsif ($loc =~ m/TextCodec/) {
- $location_blame = "fonts";
- } elsif ($loc =~ m/glyph/) {
- $location_blame = "fonts";
- } elsif ($loc =~ m/cssparser/) {
- $location_blame = "webkit css";
- } elsif ($loc =~ m/::CSS/) {
- $location_blame = "webkit css";
- } elsif ($loc =~ m/Arena/) {
- $location_blame = "webkit arenas";
- } elsif ($loc =~ m/WebCore::.*ResourceLoader::addData/) {
- $location_blame = "WebCore *ResourceLoader addData";
- } elsif ($loc =~ m/OnUpdateVisitedLinks/) {
- $location_blame = "OnUpdateVisitedLinks";
- } elsif ($loc =~ m/IPC/) {
- $location_blame = "ipc";
- } elsif ($loc =~ m/trunk\\chrome\\browser/) {
- $location_blame = "browser";
- } elsif ($loc =~ m/trunk\\chrome\\renderer/) {
- $location_blame = "renderer";
- } elsif ($loc =~ m/webcore\\html/) {
- $location_blame = "webkit webcore html";
- } elsif ($loc =~ m/webkit.*string/) {
- $location_blame = "webkit strings";
- } elsif ($loc =~ m/htmltokenizer/) {
- $location_blame = "webkit HTMLTokenizer";
- } elsif ($loc =~ m/javascriptcore/) {
- $location_blame = "webkit javascriptcore";
- } elsif ($loc =~ m/webkit/) {
- $location_blame = "webkit other";
- } elsif ($loc =~ m/safe_browsing/) {
- $location_blame = "safe_browsing";
- } elsif ($loc =~ m/VisitedLinkMaster/) {
- $location_blame = "VisitedLinkMaster";
- } elsif ($loc =~ m/NewDOMUI/) {
- $location_blame = "NewDOMUI";
- } elsif ($loc =~ m/RegistryControlledDomainService/) {
- $location_blame = "RegistryControlledDomainService";
- } elsif ($loc =~ m/URLRequestChromeJob::DataAvailable/) {
- $location_blame = "URLRequestChromeJob DataAvailable";
- } else {
- $location_blame = "unknown";
- }
-
- # Surface large outliers in an "interesting" group.
- my $interesting_group = "unknown";
- my $interesting_size = 10000000; # Make this smaller as needed.
- # TODO(jar): Add this as a pair of shell arguments.
- if ($bytes > $interesting_size && $location_blame eq $interesting_group) {
- # Create a special group for the exact stack that contributed so much.
- $location_blame = $loc;
- }
-
- $total_bytes += $bytes;
- $leaks{$location_blame} += $bytes;
- }
-
- # now dump our hash table
- my $sum = 0;
- my @keys = sort { $leaks{$b} <=> $leaks{$a} }keys %leaks;
- for ($i=0; $i<@keys; $i++) {
- my $key = @keys[$i];
- printf "%11s\t(%3.2f%%)\t%s\n", comma_print($leaks{$key}), (100* $leaks{$key} / $total_bytes), $key;
- $sum += $leaks{$key};
- }
- printf("TOTAL: %s\n", comma_print($sum));
-}
-
-# Insert commas into an integer after each three digits for printing.
-sub comma_print {
- my $num = "$_[0]";
- $num =~ s/(\d{1,3}?)(?=(\d{3})+$)/$1,/g;
- return $num;
-}
-
-# ----- Main ------------------------------------------------
-
-process_stdin();
diff --git a/chromium/tools/metrics/OWNERS b/chromium/tools/metrics/OWNERS
deleted file mode 100644
index b8146456564..00000000000
--- a/chromium/tools/metrics/OWNERS
+++ /dev/null
@@ -1,10 +0,0 @@
-set noparent
-
-asvitkine@chromium.org
-isherman@chromium.org
-jar@chromium.org
-mpearson@chromium.org
-
-# Owners-in-training:
-# jwd@chromium.org
-
diff --git a/chromium/tools/metrics/actions/OWNERS b/chromium/tools/metrics/actions/OWNERS
deleted file mode 100644
index e57c08959a9..00000000000
--- a/chromium/tools/metrics/actions/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-# per-file rules:
-per-file chromeactions.txt=*
diff --git a/chromium/tools/metrics/actions/chromeactions.txt b/chromium/tools/metrics/actions/chromeactions.txt
deleted file mode 100644
index 9e7aeeb42be..00000000000
--- a/chromium/tools/metrics/actions/chromeactions.txt
+++ /dev/null
@@ -1,1878 +0,0 @@
-0x5d4affbdc9e636fe AboutChrome
-0x6c3fb8ca36f60394 AboutConflicts
-0xe93a6d5909da6a5a AboutFlags_StartupTick
-0xbfdd432b8d9d4ad6 AboutFlags_background-webapps
-0x439284a07fb851bb AboutFlags_click-to-play
-0x10ffe0a8b323b586 AboutFlags_cloud-print
-0x4da52e00bdfac86a AboutFlags_cloud-print-proxy
-0xc5ec36aaa32ceff4 AboutFlags_confirm-to-quit
-0x4e8fe1c674de45dd AboutFlags_conflicting-modules-check
-0x4ebeea0717b98e89 AboutFlags_disable-chrome-to-mobile
-0xe9d2339d6b9225c7 AboutFlags_disable-outdated-plugins
-0x40c0bddfe31a67c2 AboutFlags_disable-pnacl
-0xf73b5212b48e2a75 AboutFlags_disable-print-preview
-0x973035dcbd7da57d AboutFlags_disable-views-rect-based-targeting
-0x088990bbea59a185 AboutFlags_disable-website-settings
-0xdddbf34cee2c636c AboutFlags_dns-server
-0x3add7fc42803849e AboutFlags_downloads-new-ui
-0x487390cc957aa352 AboutFlags_enable-chrome-to-mobile
-0x4eae5ccc2900dffa AboutFlags_enable-nacl
-0x91d89fbc43b29963 AboutFlags_enable-nacl-debug
-0x6d932203ed5c6ae8 AboutFlags_enable-nacl-exception-handling
-0x26ca6c633d183f66 AboutFlags_enable-pnacl
-0x1a3d598e2cd416a0 AboutFlags_enable-smooth-scrolling
-0x22268494c966e464 AboutFlags_enable-website-settings
-0x79571e31c2dc4d3c AboutFlags_experimental-location-features
-0x307b8a127f85947e AboutFlags_expose-for-tabs
-0x2c97f94b6aca4a22 AboutFlags_extension-apis
-0x3a73624e6d06ac2e AboutFlags_focus-existing-tab-on-open
-0x66a2e456dfe783d3 AboutFlags_gpu-canvas-2d
-0x0a1b6a5d816fde03 AboutFlags_indexeddb-use-leveldb
-0x6cb0582a680ffec6 AboutFlags_instant-autocomplete-immediately
-0x67b7031bb00a6917 AboutFlags_instant-type
-0x681dbf08b11af420 AboutFlags_match-preview
-0x0156f26c1be32122 AboutFlags_my-special-feature
-0x3327ba9002a2b7b9 AboutFlags_nacl-debug-mask
-0x94c46ee32cd0fd19 AboutFlags_nacl-gdb
-0xbec26a19fa263850 AboutFlags_nacl-gdb-script
-0xb41d9c886871e31a AboutFlags_page-prerender
-0x735ca25b198de8ab AboutFlags_prerender-from-omnibox
-0xb33861525ba727a4 AboutFlags_print-preview
-0x75b933619fb87fec AboutFlags_remoting
-0x4ef8419b680e7a19 AboutFlags_save-page-as-mhtml
-0xb9396e0515186060 AboutFlags_snap-start
-0x4efbca63b3accd5f AboutFlags_tabbed-options
-0x2ec81fb90d9bed1e AboutFlags_verbatim-instant
-0x6e65ea1edca0f441 AboutFlags_vertical-tabs
-0xb5726d311462960f AboutFlags_views-use-rect-based-targeting
-0xb0140558fbb7c0bf AboutFlags_xss-auditor
-0x56d1715aaf01650e Accel_Accessible_Focus_Next
-0xbbf8552fa6bc4ec8 Accel_Accessible_Focus_Previous
-0x6897e3c3045c2049 Accel_Add_Remove_Display
-0x323b3db9c0dc8a29 Accel_Advanced_Print
-0x46299b11fb76c5d3 Accel_Back_Backspace
-0x942956b3c704a9a2 Accel_Back_F1
-0x651680cc43f0574d Accel_Back_Left
-0x9d53a3047a707543 Accel_BrightnessDown_F6
-0xb05e783429d6cfac Accel_BrightnessUp_F7
-0xbd73010eb2b54e3e Accel_Disable_Caps_Lock
-0x2fa7197377421869 Accel_Exit_First_Q
-0x75c842188f8d6864 Accel_Exit_Second_Q
-0x7f2c75700d286c16 Accel_FocusLocation_D
-0xe566241731cecfbb Accel_FocusLocation_L
-0xb4f736d60280d914 Accel_FocusSearch_E
-0xbe8f2bb497e569c3 Accel_FocusSearch_K
-0xd1a08c0ad9020bcb Accel_Focus_Bookmarks
-0x49eb338835815c65 Accel_Focus_Launcher
-0xf14b8cacdf69810d Accel_Focus_Location
-0xf5d5437926066992 Accel_Focus_Next_Pane
-0x34c39dd57d09c168 Accel_Focus_Previous_Pane
-0x4ee80099ff1e7faf Accel_Focus_Search
-0x8d13cf705975a471 Accel_Focus_Toolbar
-0x87886216ce3f147d Accel_Forward_Backspace
-0x5aa4a40eb4d92d0a Accel_Forward_F2
-0xad7e6131ff6f2528 Accel_Forward_Right
-0x36adab865c373745 Accel_Fullscreen_F4
-0x125f05329e660307 Accel_KeyboardBrightnessDown_F6
-0xcdd268156ab80bb1 Accel_KeyboardBrightnessUp_F7
-0xe0211ccf9161bf90 Accel_Launch_App
-0x18bced3edb68ea2e Accel_Launch_Last_App
-0xb3ca99d79240c92f Accel_LockScreen_L
-0x8fadf02749171923 Accel_LockScreen_LockButton
-0xaf0a974743d27634 Accel_LockScreen_PowerButton
-0x290302f64fd4dfe1 Accel_Maximize_Restore_F4
-0x5e6bce93ecde1df8 Accel_NewTab_T
-0xde2191f2bea26a79 Accel_New_Incognito_Window
-0x757d4b57a1ec0fc5 Accel_New_Window
-0x5a27559e6846a75e Accel_NextWindow_F5
-0xc217e3bb30e9a004 Accel_NextWindow_Tab
-0x0dbf80bca1f5aa55 Accel_Next_Ime
-0xf7e71746dcb2dcb6 Accel_Open_Crosh
-0x568322b9a748838c Accel_Open_Feedback_Page
-0x73d6c20888399463 Accel_Open_File_Manager
-0x450e0851cdca9dba Accel_Overview_F5
-0x2e92845dc8edee91 Accel_PrevWindow_F5
-0x49b33857117c4c43 Accel_PrevWindow_Tab
-0x1287b6b8d53be265 Accel_Previous_Ime
-0xa2654c422408df28 Accel_Reload_F3
-0x6db94baf96eb6cfd Accel_Reload_R
-0x6c2a5c8adfe66d24 Accel_Restore_Tab
-0x7a90b3b33e942604 Accel_Rotate_Window
-0x9898c5b87b6b9800 Accel_Scale_Ui_Down
-0xb1b4ccdf5b8a40d9 Accel_Scale_Ui_Reset
-0x51abf32e73b8d48b Accel_Scale_Ui_Up
-0xe315330404ef14a8 Accel_Search_LWin
-0x01b760c64064556f Accel_SelectNextTab
-0x86e5b771da4dc62f Accel_SelectPreviousTab
-0x9792f1f961c20c23 Accel_Show_App_Menu
-0xd87cd8d5a98aa3c3 Accel_Show_Keyboard_Overlay
-0x0fd23c275cddd272 Accel_Show_Message_Center_Bubble
-0x629c5c45c8c5d04d Accel_Show_System_Tray_Bubble
-0x718c0cc58e95908d Accel_Show_Task_Manager
-0x178d1faf1167b4ca Accel_ShutDown_PowerButton
-0x0c31c5b8cba6153c Accel_Silence_Spoken_Feedback
-0xd22a9c9640925fae Accel_Swap_Primary_Display
-0x66699817f069d43e Accel_Switch_Ime
-0x744101dfa25c0f2a Accel_Switch_To_Next_User
-0x9186389d613efe32 Accel_Switch_To_Previous_User
-0xf6a1706f2c8aaa07 Accel_Take_Partial_Screenshot
-0xc9658518e5333399 Accel_Take_Screenshot
-0x6e94b035f45335c8 Accel_Toggle_Caps_Lock
-0x5430faa376fbc325 Accel_Toggle_Maximized
-0x3336c54f07ac2500 Accel_Toggle_Minimized
-0x4a523ddfebc25031 Accel_Toggle_Minimized_M
-0x943a938771a11aaa Accel_Toggle_Minimized_Minus
-0xc90f960d50b63469 Accel_Toggle_Mirror_Mode
-0xa1a07dd227e5332e Accel_Toggle_Spoken_Feedback
-0x5523297f977df4f6 Accel_Touch_Hud_Clear
-0x7974ffb673dd5475 Accel_VolumeDown_F9
-0xbe6aee0aaab8ed8a Accel_VolumeMute_F8
-0x1cbd5b055dc9a3cc Accel_VolumeUp_F10
-0x62ff3afb978ab1bd Accel_Window_Position_Center
-0xbf7e1632990c4967 Accel_Window_Snap_Left
-0x361de755acf47c9b Accel_Window_Snap_Right
-0x649461e26c8e5796 AcceptedGeneratedKeyword
-0x2b6ed5e3f78e1295 AcceptedKeyword
-0xaa16d48a61361aa6 AcceptedKeywordHint
-0x21cdf71f12d41976 ActionBox.ClickButton
-0xbd451ad0142aa0c0 ActionBox.FindShareHandlers
-0xe86a88a8a34848a8 ActiveBrowserChanged
-0xb52f7beb7f11bedf ActiveTabChanged
-0x966cdbb949bad0d7 AppCloseButton_Clk
-0xfc0c75574fa0f498 AppList_ClickOnApp
-0x73d7010c18cf1912 AppList_ClickOnAppFromSearch
-0xdd57b39909cb275a AppList_Search
-0x9ff9ef57d8d1d87c AutoDetectChange
-0x2ec21bf8ac5a6992 AutomaticReset_WebUIBanner_BannerShown
-0xaa07e015f2ac0368 AutomaticReset_WebUIBanner_ManuallyClosed
-0x09adf2b62d945111 AutomaticReset_WebUIBanner_ResetClicked
-0x0557fa923dcee4d0 Back
-0xc66d44d8107c5f5d BackColor
-0xcafd9c09ee856f4d BackMenu_ChapterClick1
-0x0f870d70d3ad63af BackMenu_ChapterClick10
-0xcc7f480485be490f BackMenu_ChapterClick11
-0x66df4c323616cc9c BackMenu_ChapterClick12
-0x6ec9591704e695aa BackMenu_ChapterClick13
-0x58c363a6b68f5ea5 BackMenu_ChapterClick14
-0xce465328fcddd205 BackMenu_ChapterClick15
-0x537f15b23c6f30fd BackMenu_ChapterClick16
-0x59fc3ff15b0285ce BackMenu_ChapterClick17
-0x76eff190094eeebd BackMenu_ChapterClick18
-0x612d4da6cc153fcb BackMenu_ChapterClick19
-0x0a2a978da163a692 BackMenu_ChapterClick2
-0xaae08324262e26af BackMenu_ChapterClick3
-0x92f71dc4c198baa5 BackMenu_ChapterClick4
-0xfbeb6fe82a534622 BackMenu_ChapterClick5
-0x3b6f45a1f7eba171 BackMenu_ChapterClick6
-0x0b70734d408d755b BackMenu_ChapterClick7
-0x119b707f7f07cefe BackMenu_ChapterClick8
-0xb74f7eb6d083cb24 BackMenu_ChapterClick9
-0x8263388629c2ea39 BackMenu_HistoryClick1
-0x3a4283b20c70c670 BackMenu_HistoryClick10
-0xa283fd8a15a4e007 BackMenu_HistoryClick11
-0xd183cc11491b8574 BackMenu_HistoryClick12
-0x01409b3abb9faf3f BackMenu_HistoryClick13
-0x1cf609ef7031b464 BackMenu_HistoryClick14
-0xbbf3b3884419f441 BackMenu_HistoryClick15
-0x525beb7c7bf0b6c2 BackMenu_HistoryClick16
-0x087081f30a41a309 BackMenu_HistoryClick17
-0xe72486ef9669532b BackMenu_HistoryClick18
-0xd551fbd2fbcf39f3 BackMenu_HistoryClick19
-0xb4d488c6dbd86f28 BackMenu_HistoryClick2
-0xf3949ca015f2facd BackMenu_HistoryClick3
-0x314bb467b300d16f BackMenu_HistoryClick4
-0x2a8ce062be9f62c5 BackMenu_HistoryClick5
-0x6fda0344ca038ae7 BackMenu_HistoryClick6
-0x743a926f56fd079a BackMenu_HistoryClick7
-0xca86e954d3d40ec0 BackMenu_HistoryClick8
-0x24dc0dd3b2471a22 BackMenu_HistoryClick9
-0xd31dee084a5166e5 BackMenu_Popup
-0x478e9b82a50ffea5 BackMenu_ShowFullHistory
-0x048733a8c6205d00 BackgroundImageCache
-0x554b7c860c749c2f BadMessageTerminate_ACDH
-0x878b28b309d1205e BadMessageTerminate_AOF
-0xec6518c4af50b7ac BadMessageTerminate_BMF
-0x1f57dc66c6c91837 BadMessageTerminate_BPE
-0x0eba05c9a1e2be6a BadMessageTerminate_BPGM
-0x5a858938e484c903 BadMessageTerminate_BRPH
-0x6f41bf748eb54008 BadMessageTerminate_DBMF
-0xd910b7f4e1b53c11 BadMessageTerminate_DSMF
-0x3c463d9eb1c92f64 BadMessageTerminate_DSMF_1
-0x8b956c45b0f38be9 BadMessageTerminate_DSMF_2
-0x6ebaa5e3651107fa BadMessageTerminate_EFD
-0xff06108fb2aa73fa BadMessageTerminate_FAMF
-0xbecb3852be04c506 BadMessageTerminate_IDBMF
-0x9e69131e5123433a BadMessageTerminate_MIDI
-0xd7e4d61883121c76 BadMessageTerminate_NC
-0x448f44d226b839b7 BadMessageTerminate_NC17
-0xd267646495d87640 BadMessageTerminate_RDH
-0x90d4be9ff70af550 BadMessageTerminate_RFH
-0xce2d3186346ab161 BadMessageTerminate_RVD
-0xf845124429e7aa80 BadMessageTerminate_RVH
-0xcb59a352ad13dc91 BadMessageTerminate_RWH
-0xa47427921bd8233b BadMessageTerminate_RWH1
-0x1b40d08165319763 BadMessageTerminate_RWH2
-0xb4074307cbcb96bd BadMessageTerminate_RWH3
-0xa00e08812a4284c2 BadMessageTerminate_RWH4
-0xefc9deffa33ee67d BadMessageTerminate_RWH5
-0x5378a4f2a775cb88 BadMessageTerminate_RWHVA1
-0x3ceaa56d35b39da4 BadMessageTerminate_RWHVA2
-0x2996df71030ce814 BadMessageTerminate_SharedMemoryManager1
-0xf0a271d3e39e7deb BadMessageTerminate_SharedMemoryManager2
-0xb22079c43bc5b72e BadMessageTerminate_UnexpectedFrameType
-0xc4874f0e8e8b60aa BadMessageTerminate_WPH
-0x56649dd19258ed1f BindingsMismatchTerminate_RVH_WebUI
-0x85a700c6e9915ca8 BindingsMismatch_GetProcessHostPerSite
-0x1d145f0af708242c BlockNonsandboxedPlugins_Disable
-0xd80cc9291c9c82a9 BlockNonsandboxedPlugins_Enable
-0xe0daa169d443430e BlockedPluginInfobar.AllowThisTime
-0xbc5f7815d41f0a0a BlockedPluginInfobar.AlwaysAllow
-0xa6092c47f7cd698b BlockedPluginInfobar.Closed
-0xf73bbd9fdcaeb1f9 BlockedPluginInfobar.Dismissed
-0x4937bd47014fb3e0 BlockedPluginInfobar.LearnMore
-0x127e30ad4cde6b00 BlockedPluginInfobar.Shown
-0x4353c1e2880c75be BlockedPluginInfobar.Shown.Java
-0x84cc82257207df8d BlockedPluginInfobar.Shown.QuickTime
-0x819dbe166b094c47 BlockedPluginInfobar.Shown.RealPlayer
-0x65add1afd150b840 BlockedPluginInfobar.Shown.Shockwave
-0x0ef80834f3e539cc BlockedPluginInfobar.Shown.WindowsMediaPlayer
-0x114c3050111d8b8d Bold
-0x084d04c506da33c4 BookmarkAdded
-0x02f476e54c6d58bd BookmarkBarFolder_CtxMenu
-0x3012b56b98c28823 BookmarkBarFolder_DragEnd
-0xe71c0ba72ca2f331 BookmarkBarFolder_DragStart
-0x4213d5e4d5da1c0a BookmarkBar_ContextMenu_Add
-0x1ce97170a30f2fdd BookmarkBar_ContextMenu_Edit
-0xbe267767bb380a0d BookmarkBar_ContextMenu_NewFolder
-0x41b46cb5ee579e4a BookmarkBar_ContextMenu_Open
-0xc0b2c7f3e0cf1d69 BookmarkBar_ContextMenu_OpenAll
-0xb6828d311b612fdd BookmarkBar_ContextMenu_OpenAllInNewWindow
-0x95a93ad59fa23f78 BookmarkBar_ContextMenu_OpenAllIncognito
-0x798f8467fbe49e1e BookmarkBar_ContextMenu_OpenInNewTab
-0x14c4432cb3aca04b BookmarkBar_ContextMenu_OpenInNewWindow
-0x933a912dd22eacb3 BookmarkBar_ContextMenu_Redo
-0xd8a39c089af645f1 BookmarkBar_ContextMenu_Remove
-0xa90364ba80763db0 BookmarkBar_ContextMenu_RemoveFromBookmarkBar
-0xa905159308ac6adc BookmarkBar_ContextMenu_ShowInFolder
-0xb985dcc55f9d73a4 BookmarkBar_ContextMenu_Undo
-0x07801d0423d26682 BookmarkBar_CtxMenu
-0x8623e5f54147dbe6 BookmarkBar_DragButton
-0x4b37738130b32b3e BookmarkBar_DragEnd
-0x6c0fc567d362960e BookmarkBar_DragFromFolder
-0xeec5d4ade759d651 BookmarkBar_DragRecentlyBookmarked
-0xeffa5b8ce7f96fd9 BookmarkBar_DragStart
-0x949073bf8996b6c8 BookmarkBar_ShowOtherBookmarks
-0xef415d0bbf795b32 BookmarkBar_ShowRecentlyBookmarked
-0xd4d041fb05dcaebf BookmarkBubble_ChangeParent
-0x83076d556121e076 BookmarkBubble_ChangeTitleInBubble
-0x4cc462516fa2889d BookmarkBubble_Edit
-0x58cace8d3ebf1abe BookmarkBubble_EditFromCombobox
-0xf7694a5980ded770 BookmarkBubble_Options
-0x39ef6892d936d7a7 BookmarkBubble_RemoveFromBookmarkBar
-0x75e42372b72c1861 BookmarkBubble_ShowOnBookmarkBar
-0x30597ba5e2be6f6d BookmarkBubble_Unstar
-0xfd805402bb43ad35 BookmarkManager_Command_AddPage
-0xf415e2985a9b8797 BookmarkManager_Command_Copy
-0xd652521dd6f6520d BookmarkManager_Command_Cut
-0xf63d235dce12af6c BookmarkManager_Command_Delete
-0xeb9d14b63c668935 BookmarkManager_Command_Edit
-0x6952f508cca0af6c BookmarkManager_Command_Export
-0x07b4870fefd41631 BookmarkManager_Command_Import
-0x38f61b3a1f189cf1 BookmarkManager_Command_NewFolder
-0xfe57bff660e9bfdc BookmarkManager_Command_OpenInNewTab
-0xc60afc5e287d7673 BookmarkManager_Command_OpenInNewWindow
-0x4708046b0cfa4229 BookmarkManager_Command_OpenInSame
-0x1b3262b87b17f67c BookmarkManager_Command_OpenIncognito
-0x81230a6e417dcd81 BookmarkManager_Command_Paste
-0x35fe4acf56dc3bf4 BookmarkManager_Command_ShowInFolder
-0x000b578d014a1fac BookmarkManager_Command_Sort
-0x911ace5e57087cf7 BookmarkManager_Command_UndoDelete
-0x6596199ad9e751f9 BookmarkManager_Command_UndoGlobal
-0x4ac8df00196c66e3 BookmarkManager_Command_UndoNone
-0x1671befd86500f4c BookmarkManager_Export
-0x2a8f60054baba3eb BookmarkManager_Import
-0x6528526502a5491e BookmarkManager_NavigateTo_BookmarkBar
-0x1302e50e6a427538 BookmarkManager_NavigateTo_Mobile
-0x5103f6e198f61079 BookmarkManager_NavigateTo_Other
-0xbbc7d061af736ad3 BookmarkManager_NavigateTo_Recent
-0x5b3873d060943bd9 BookmarkManager_NavigateTo_Search
-0x2540c3dd2d046919 BookmarkManager_NavigateTo_SubFolder
-0xfc2f9e1efe0612ba BookmarkManager_Sort
-0xc7c989d7aa14f64d BookmarkManager_Sync
-0xec92650848f88dda BookmarkMenu_clicked
-0xd1cd299109c75a4c Bookmarks_Search
-0xbd8c276496f8eb7a BrowserPlugin.Guest.AbnormalDeath
-0x39907654af4d7a8a BrowserPlugin.Guest.Attached
-0x371d5e60b00738d9 BrowserPlugin.Guest.Crashed
-0x854cc1f139ba9418 BrowserPlugin.Guest.Create
-0xa1822ac47db91018 BrowserPlugin.Guest.DidNavigate
-0x6a80626069f68d37 BrowserPlugin.Guest.EnableAutoResize
-0xde8be5ce26955605 BrowserPlugin.Guest.Hung
-0xa369e99aa2e21969 BrowserPlugin.Guest.Killed
-0x428cf267aeb35e28 BrowserPlugin.Guest.Navigate
-0xdd4859340407e122 BrowserPlugin.Guest.PermissionRequest
-0x20ba04d2331f9bfa BrowserPlugin.Guest.PermissionRequest.Download
-0x8d7c904ec99c12fd BrowserPlugin.Guest.PermissionRequest.Geolocation
-0x5f74e8609b46daa5 BrowserPlugin.Guest.PermissionRequest.JSDialog
-0xf9453f6f98d12f02 BrowserPlugin.Guest.PermissionRequest.Media
-0x2b75a893f779e6df BrowserPlugin.Guest.PermissionRequest.NewWindow
-0x2ff464e34165d946 BrowserPlugin.Guest.PermissionRequest.PointerLock
-0x69b219de7f17c077 BrowserPlugin.Guest.Responsive
-0x7784cf1f8b1cc3f0 BrowserPlugin.Guest.Terminate
-0xd09d482ae9adff4b BrowserPlugin.PermissionAllow.Download
-0x3a3bb14eac6426bb BrowserPlugin.PermissionAllow.Geolocation
-0x442d4c824f5b759b BrowserPlugin.PermissionAllow.JSDialog
-0xdc67748c325b2bef BrowserPlugin.PermissionAllow.Media
-0xacb04f4eac00b0c1 BrowserPlugin.PermissionAllow.NewWindow
-0x22e3b8fb14f52567 BrowserPlugin.PermissionAllow.PointerLock
-0x72265ae5cdb0f2a7 BrowserPlugin.PermissionDeny.Download
-0x26bf51e48e5d3ea9 BrowserPlugin.PermissionDeny.Geolocation
-0xd04b55f5fd0ebf0e BrowserPlugin.PermissionDeny.JSDialog
-0x7fd68dfe783d4d92 BrowserPlugin.PermissionDeny.Media
-0x5d9f67464e131ce8 BrowserPlugin.PermissionDeny.NewWindow
-0x0e3e6d08f647aa69 BrowserPlugin.PermissionDeny.PointerLock
-0x24941c4fd42fb51f CanCommitURL_BlockedAndKilled
-0xea4788705e6873b4 Cancel
-0xb1c07c66ce4ae2ac Caption_ClickTogglesMaximize
-0x96c3ac2d2a5d9dba Caption_GestureTogglesMaximize
-0x13b9d3430f0ce5a7 Cast_Sender_CastDeviceSelected
-0xc8aef1b8545c6760 Cast_Sender_CastEnterFullscreen
-0x19a12dba54934c30 Cast_Sender_CastPlayRequested
-0x34878f681fad82d4 Cast_Sender_YouTubeDeviceSelected
-0x89394b102e55da81 ClearAuthenticationCache
-0x6bd5f5b094096aa7 ClearBrowsingData_Autofill
-0xae5b20986fb024db ClearBrowsingData_Cache
-0xb603e4fc4d7fe748 ClearBrowsingData_ContentLicenses
-0x6755e17f118c99d8 ClearBrowsingData_Cookies
-0xea9b835bf0310f85 ClearBrowsingData_Downloads
-0x02a6a06a2b91e758 ClearBrowsingData_Everything
-0xe3c9686626019346 ClearBrowsingData_History
-0x86678d0ede469c46 ClearBrowsingData_LSOData
-0x4c15666f9dd774eb ClearBrowsingData_LastDay
-0xbbbdc8f919aaba08 ClearBrowsingData_LastHour
-0xf38b7fedd47d32dc ClearBrowsingData_LastMonth
-0xa18138df43b60210 ClearBrowsingData_LastWeek
-0xe4d7f2be93ee4d1e ClearBrowsingData_MaskContainsExtension
-0xadd630995b43ce2f ClearBrowsingData_MaskContainsProtectedWeb
-0x1f885e1523585d6f ClearBrowsingData_MaskContainsUnprotectedWeb
-0x511e8366cdda3890 ClearBrowsingData_Passwords
-0x3db76495a0acc98c ClearBrowsingData_ServerBoundCerts
-0xdaaff0c5b7682b18 ClearBrowsingData_ShaderCache
-0x6d69a061f7adf595 ClearBrowsingData_ShowDlg
-0x9fd631c62234969a ClearSelection
-0x49c37636ddeb5a10 ClearSiteDataOnExitDisabled
-0xf63362e0c7d7420d ClearSiteDataOnExitEnabled
-0xdf8129e4f853f264 ClickDisableGpuAcceleration
-0xf2c974774a0fd57e ClickToPlay_AllowAlways
-0x3589e51b0b1bf730 ClickToPlay_Dismiss_Infobar
-0xe1b2d67ea37c5ba0 ClickToPlay_InfobarShown
-0xcfe5a8d495d7df34 ClickToPlay_LoadAll_Bubble
-0xb30dcb1850e21bce ClickToPlay_LoadAll_Infobar
-0x9cd1157e30fc2b55 ClickedBookmarkBarAppsShortcutButton
-0x57b3678b429935ee ClickedBookmarkBarFolder
-0x55c851e7c3d9a792 ClickedBookmarkBarURLButton
-0x4f667771b8f484b1 CloseAllSuppressedPopups
-0x74f6ce7e0602ca13 CloseButton_Clk
-0xde70efb3bc9fe575 CloseFromContextMenu
-0x9436ccb9a5cc6a27 CloseTab
-0x4443008dac19bfbc CloseTabByKey
-0x7596c9721c97c14c CloseTab_Accelerator
-0xd477cbce1681d404 CloseTab_Mouse
-0x4b31de70a21d7903 CloseWebApp
-0xdf8926d323575ff8 CloseWindow
-0xcd94a7d0199de11d CloseWindowByKey
-0x9c8159a6164781a3 ConfirmNotToOrderSpringCharger
-0x1829a4d20ed931da ConfirmOrderSpringCharger
-0x425627724623014d ConfirmOrderSpringChargerByPhone
-0x66cda49e27d7c2d6 ConfirmOrderSpringChargerOnline
-0x396aed4a5222c982 ConfirmSafeSpringCharger
-0xdbb661a1a17b4346 ConfirmStillUseOriginalChargerAfterOrder
-0xa0ebbbdb0eca8d89 ConflictBadge
-0x355517777b3f002e ConflictingModuleNotificationDismissed
-0x2f1ba1d06c32c45d ConflictingModuleNotificationShown
-0xe9bfc6aeb6f1668e ConnectivityDiagnostics.LaunchSource.OfflineChromeOS
-0xcfe3ac03c42c1b0c ConnectivityDiagnostics.LaunchSource.WebStore
-0x81e7cde22e323f67 ConnectivityDiagnostics.UA.LogsShown
-0x44111a04f143bfff ConnectivityDiagnostics.UA.PassingTestsShown
-0xc49cd7f91fc3e8f9 ConnectivityDiagnostics.UA.SettingsShown
-0x2273dcc7c3f0f0e7 ConnectivityDiagnostics.UA.TestResultExpanded
-0x36e43e592dddc21b ConnectivityDiagnostics.UA.TestSuiteRun
-0x33056b44f816c204 CookieBlockingDisabledPerDefault
-0xcc192d44d8f426c7 CookieBlockingEnabledPerDefault
-0x5fb63579fc981698 Copy
-0x89d1b3eda3d01e3a CopyToFindPboard
-0xb3d0f42456c6eaf6 CopyURLToClipBoard
-0x7f1e737de964f0e9 CreateHostedApp
-0x2aeb39c03cc86464 CreateLink
-0x1225d110ef7fba17 CreateProfile
-0x30604f84327d0ae5 CreateShortcut
-0x8b83a029888765ac CriticalNotificationShown
-0x3811e868a8b2639a CriticalNotification_AutoRestart
-0x74d29a646c3b335c CriticalNotification_Ignore
-0x417f35273c2e009b CriticalNotification_Restart
-0xfdf6ee64a0588855 Cryptohome.PKCS11InitFail
-0xeb334dca00e390e0 Cut
-0x24c15c9cd91f5be0 DataReductionProxy_PromoDisplayed
-0xdfc419c441193fae DataReductionProxy_PromoLearnMore
-0x3e571d8a556acc27 DataReductionProxy_TurnedOff
-0xb69483d9936c050e DataReductionProxy_TurnedOn
-0x92ebcc84f3abf206 DataReductionProxy_TurnedOnFromPromo
-0xb94d8a074eddd267 Debugger
-0xf2a6c498fb90ee34 Delete
-0xee9ce204f091eb10 DeleteBackward
-0x77996bb1dd52320d DeleteForward
-0xef062a4139c5c9f7 DeleteSelection
-0x7845bb87dfa671c5 DeleteToEndOfParagraph
-0x6c02931afa83fea8 DeleteWordBackward
-0x433dee161f756bb5 DeleteWordForward
-0x6efd3c1be94b4370 Destination_Application_Edit
-0x599586022e671645 Destination_Application_Launch
-0x7311c4dcd9426448 Destination_Application_Uninstall
-0x2caa887c60d0edea Destination_Bookmarks
-0x06fe9a0e5226b124 Destination_Bookmarks_OpenURL
-0x215c802c8c94cbed Destination_Downloads
-0x0813fdaffe0ea8c3 Destination_History
-0xdff1c6338f5f5371 Destination_History_OpenURL
-0x9d2d922e923f97f9 Destination_MostVisited
-0xee9739d40c3c4a7a Destination_MostVisited_OpenURL
-0x68b765b881701d50 Destination_Sessions
-0xee96389c3a0ed430 DevTools_InspectAndroidPage
-0xdce5103c1acca60d DevTools_InspectAndroidWebView
-0xd3e90631d6d04d51 DevTools_InspectElement
-0xcd5fb3d0ace59c55 DevTools_InspectRenderer
-0xe28426fa882a0b44 DevTools_InspectWorker
-0xbadaf91b6bdbbe68 DevTools_ToggleConsole
-0xddaad2f5e9238157 DevTools_ToggleWindow
-0x155de7afd2eae387 DevicesPage_AddPrintersClicked
-0x81bab07ab7408439 DevicesPage_LogInStartedFromDeviceListPromo
-0x97316d4fc731c000 DevicesPage_LogInStartedFromRegisterPromo
-0x876ad499b66d66f3 DevicesPage_ManageClicked
-0x62644a4c7aa75135 DevicesPage_Opened
-0xc95009afab055732 DevicesPage_RegisterCancel
-0xd5e873a27b2a9d34 DevicesPage_RegisterClicked
-0x48589e4ef5d72bba DevicesPage_RegisterFailure
-0x4e7f3f684b09d823 DevicesPage_RegisterSuccess
-0xe581401517f920ca DisabledExtensionNotificationDismissed
-0x240b0da0a404d35c DisabledExtensionNotificationShown
-0xdad0f491267f672e DockingWindow_Bottom
-0x7ecb78846fadf9bf DockingWindow_BottomHalf
-0xc818526e20834ebf DockingWindow_Left
-0xf87264dd1cac30d9 DockingWindow_LeftHalf
-0xa9f758a358041079 DockingWindow_Maximize
-0xc68b578019349940 DockingWindow_Right
-0xec44ad3c479571f4 DockingWindow_RightHalf
-0x91991a7061775526 DockingWindow_Top
-0xed75712b0eb1913c Duplicate
-0xae5fcc3ad3a00c19 EditApplicationSettings
-0x0326e6132edca57b EditKeywords
-0x2e08637d43bc3450 EditSearchEngines
-0x9a2fdef24427ff67 EmailPageLocation
-0xb63daeca06ecea16 EnterFullScreenWithWrenchMenu
-0xfef46e5063ce3dc7 Exit
-0xcf0c759bda6783fd ExtensionNotFound_ED
-0x29c354a2e25e4bc9 ExtensionWipeoutNotificationShown
-0xdf56dffe242f621a Extensions.ExtensionInstalled
-0x4f07c158c8047ab9 Extensions.ExtensionUninstalled
-0x08566bf746b7f665 Extensions.IDChangedError
-0xa295e3ad39bbacc0 Extensions.WebStoreLaunch
-0xbea4c2c8eb82d058 Feedback
-0x4268aeb48d5c0d1e FileBrowser.CreateNewFolder
-0x604a1468d08b7c7b FileBrowser.PhotoEditor.Edit
-0xca74d47b273dd801 FileBrowser.PhotoEditor.View
-0xf94a9b198a97d95b FileBrowser.SuggestApps.ShowDialog
-0xd1b4f6b656a826e8 FilterURLTermiate_About
-0x933a3a418a658dec FilterURLTermiate_Blocked
-0x6a372395e62bd36e FilterURLTermiate_Invalid
-0x4cfa6c981549e990 Find
-0x058404d575478e31 FindNext
-0xca56592cf013fc40 FindPrevious
-0xd9b084b400f26439 FindString
-0x79f97bfa526b56ec FirstRunDef_Accept
-0x7ff73528feb7491b FocusAppMenu
-0x05804843ffe72695 FocusBookmarksToolbar
-0x44c489e30171039c FocusChromeOSStatus
-0x1e226eae1a9e27ee FocusInfobars
-0xff4066491e7794bc FocusLocation
-0x930bb978f3a88be2 FocusNextPane
-0x5e6c303e567af436 FocusPageAndAppMenus
-0x658708a96ac44ccc FocusPreviousPane
-0x5b7b952796f109ad FocusSearch
-0xc27e065ab57a01e7 FocusToolbar
-0x12d7f80b419064fa FontName
-0x24b0296570b11c95 FontSize
-0x3c2f5208ba19e684 FontSizeDelta
-0xe45960835dd83532 ForeColor
-0x674e7408732120dc FormatBlock
-0x67d2f6740a8eaebf Forward
-0x407c6f01fc926581 ForwardDelete
-0x0659a6d28eeb3cdc ForwardMenu_ChapterClick1
-0x1cf8a9593dddd549 ForwardMenu_ChapterClick10
-0x282fb4c4773f6091 ForwardMenu_ChapterClick11
-0x7aaaba5ddf181715 ForwardMenu_ChapterClick12
-0xbf183c3b27f4612a ForwardMenu_ChapterClick13
-0x7b457b6824846628 ForwardMenu_ChapterClick14
-0xe7b6c76310cf28a0 ForwardMenu_ChapterClick15
-0xf83ba97f2dc5eda7 ForwardMenu_ChapterClick16
-0x9f7e9db5377a87fd ForwardMenu_ChapterClick17
-0x3b7969fdde988c47 ForwardMenu_ChapterClick18
-0xe00eaa33028aef1e ForwardMenu_ChapterClick19
-0x22ae6afaebb88ede ForwardMenu_ChapterClick2
-0xeaf788ceb40b4c52 ForwardMenu_ChapterClick3
-0xc36c2fcdcce64d3c ForwardMenu_ChapterClick4
-0xa4989f324b58fed9 ForwardMenu_ChapterClick5
-0x0f52ae4eda2f03a2 ForwardMenu_ChapterClick6
-0x50b4aac8ef09fad6 ForwardMenu_ChapterClick7
-0x6ad416ed5bbe25c3 ForwardMenu_ChapterClick8
-0xd636afb40773f667 ForwardMenu_ChapterClick9
-0x80457994e5624cb9 ForwardMenu_HistoryClick1
-0x4afed56ff6097552 ForwardMenu_HistoryClick10
-0xdc2821e4b1e4f4a5 ForwardMenu_HistoryClick11
-0x49d0080788fb2dcf ForwardMenu_HistoryClick12
-0x93c16e3dfa87e30e ForwardMenu_HistoryClick13
-0x73d941830a276551 ForwardMenu_HistoryClick14
-0xe7579f3c29b77b5b ForwardMenu_HistoryClick15
-0xb9c4a0ec5f6fdce5 ForwardMenu_HistoryClick16
-0x7c4fb0eac18dc2f7 ForwardMenu_HistoryClick17
-0x3130d901f8b9c6fe ForwardMenu_HistoryClick18
-0x2255d4f02bee3df3 ForwardMenu_HistoryClick19
-0xa975db997d781b24 ForwardMenu_HistoryClick2
-0xc22f8eaba64014d3 ForwardMenu_HistoryClick3
-0x4cadc0f6a99ba415 ForwardMenu_HistoryClick4
-0xe2f627fd545952fb ForwardMenu_HistoryClick5
-0x41b16a28f2130885 ForwardMenu_HistoryClick6
-0xf9a72fbc4c89c2b6 ForwardMenu_HistoryClick7
-0x4787fdb9e4526676 ForwardMenu_HistoryClick8
-0xb685d7994214aa1f ForwardMenu_HistoryClick9
-0xb8ea5cd4ac9a7a71 ForwardMenu_Popup
-0x87bdcab6bfd481db ForwardMenu_ShowFullHistory
-0x78646175083b9abe Gesture_Overview
-0x5f075ae3e1f9d038 Go
-0xab2334cdb766e7c7 GoogleNow.ButtonClicked0
-0xc06f4ecf7cf01b27 GoogleNow.ButtonClicked1
-0x813aeef215b68741 GoogleNow.Dismissed
-0x436c20892470d838 GoogleNow.MessageClicked
-0x80726a05369be7ca GoogleNow.WelcomeToastClickedNo
-0x1e6b0ae24163b1e8 GoogleNow.WelcomeToastClickedYes
-0x7813d5bea46a5fa8 GoogleNow.WelcomeToastDismissed
-0xd6c29b06a8c7e3e2 GpuAccelerationDisabled
-0xd18fed7efb6cf062 GpuAccelerationEnabled
-0x696c3c52634726aa HiliteColor
-0x77201c4b10451e59 HistoryPage_BookmarkStarClicked
-0x6590f397656717f0 HistoryPage_CancelRemoveSelected
-0x0368c6ea1d547d64 HistoryPage_ConfirmRemoveSelected
-0x29ad2e81f9dd07b0 HistoryPage_EntryLinkClick
-0x408ecf8ef58e563e HistoryPage_EntryLinkRightClick
-0xef342c7f49d28270 HistoryPage_EntryMenuRemoveFromHistory
-0xa99f2b83f809c313 HistoryPage_EntryMenuShowMoreFromSite
-0xb58708176abcc0fe HistoryPage_InitClearBrowsingData
-0x0138978105397298 HistoryPage_NewerHistoryClick
-0x5027e981a37ad402 HistoryPage_NewestHistoryClick
-0xd47b8fce881ce2df HistoryPage_OlderHistoryClick
-0xea2d5f6015fefa6c HistoryPage_RemoveSelected
-0x00431057dee9c3a2 HistoryPage_Search
-0xee4e188d1a5818c1 HistoryPage_SearchResultClick
-0xee812ce81df64b01 HistoryPage_SearchResultRemove
-0x4869b7ac0caae3fe History_DeleteHistory
-0xddf00e6e13ebc7ab History_DragIcon
-0xca7db0b9cda2eecd History_DragThumbnail
-0xdf8379d1cab60cbf History_Search
-0x8cf04a9734132302 Home
-0x3f8725913f9606e0 ImportLockDialogCocoa_Shown
-0x10209a50a49ea88f ImportLockDialogGtk_Shown
-0x03154e02d9a7d1b0 ImportLockDialogView_Shown
-0x2679e82f33d66fc0 Import_ShowDlg
-0x497470e76a40fc53 Indent
-0xddbd530e88f0baad InputMethodOptions_Open_chewing
-0x4b9b7bb2668d0482 InputMethodOptions_Open_english-m
-0xfe212a1637f75443 InputMethodOptions_Open_hangul
-0xf51582a1f3563c5d InputMethodOptions_Open_m17n:am:sera
-0x155fe2aa889c6475 InputMethodOptions_Open_m17n:ar:kbd
-0xddee376a378bb55a InputMethodOptions_Open_m17n:bn:itrans
-0x702d3712351014c9 InputMethodOptions_Open_m17n:fa:isiri
-0xf3d0bd08d56571df InputMethodOptions_Open_m17n:gu:itrans
-0xcd3d52a63eb9d19f InputMethodOptions_Open_m17n:hi:itrans
-0x76e4ec0d7dac8fbd InputMethodOptions_Open_m17n:kn:itrans
-0x4005c392a6808200 InputMethodOptions_Open_m17n:ml:itrans
-0x2a6f509c2aa50853 InputMethodOptions_Open_m17n:mr:itrans
-0x231bb5b79df1109d InputMethodOptions_Open_m17n:ta:inscript
-0x4f6c3bf8089610a3 InputMethodOptions_Open_m17n:ta:itrans
-0x641ffe0ae23919d9 InputMethodOptions_Open_m17n:ta:phonetic
-0x74ac378c41355823 InputMethodOptions_Open_m17n:ta:tamil99
-0x44628dae21677214 InputMethodOptions_Open_m17n:ta:typewriter
-0xab2182c49b66b7d6 InputMethodOptions_Open_m17n:te:itrans
-0x84a453cc41b70ade InputMethodOptions_Open_m17n:th:kesmanee
-0x781cb9476ef74fb6 InputMethodOptions_Open_m17n:th:pattachote
-0x7ed4a3c1dbbea563 InputMethodOptions_Open_m17n:th:tis820
-0x515db9088433579e InputMethodOptions_Open_m17n:vi:tcvn
-0x28585f828d27064e InputMethodOptions_Open_m17n:vi:telex
-0xaa5bd22b752b2402 InputMethodOptions_Open_m17n:vi:viqr
-0x32caeac9c52a0b3e InputMethodOptions_Open_m17n:vi:vni
-0x9b5fe154dcfed5fc InputMethodOptions_Open_m17n:zh:cangjie
-0x4b904484c5ae5ef9 InputMethodOptions_Open_m17n:zh:quick
-0xd760683dc9d7524f InputMethodOptions_Open_mozc
-0xf323966e4ec000ab InputMethodOptions_Open_mozc-chewing
-0xaf5b5ca01e17f82f InputMethodOptions_Open_mozc-dv
-0xd5513441251b0dfe InputMethodOptions_Open_mozc-hangul
-0x560b367165104ca0 InputMethodOptions_Open_mozc-jp
-0xfc8099598cc3d1e6 InputMethodOptions_Open_pinyin
-0xcef96af4d892e9ab InputMethodOptions_Open_pinyin-dv
-0x08ac76684d7e7d26 InputMethodOptions_Open_xkb:be::fra
-0x850b8ba271d39949 InputMethodOptions_Open_xkb:be::ger
-0x0b947d8e36f5c932 InputMethodOptions_Open_xkb:be::nld
-0x46a87a1ab952dc04 InputMethodOptions_Open_xkb:bg::bul
-0xa46c41e1afe6014b InputMethodOptions_Open_xkb:bg:phonetic:bul
-0x822bf0422c6827cd InputMethodOptions_Open_xkb:br::por
-0xabf8d015035007d4 InputMethodOptions_Open_xkb:ca::fra
-0x1c146e1accb26ba1 InputMethodOptions_Open_xkb:ca:eng:eng
-0x1092170d80d1a97e InputMethodOptions_Open_xkb:ch::ger
-0xee168304fd52c6da InputMethodOptions_Open_xkb:ch:fr:fra
-0x310e1c8edd3124fd InputMethodOptions_Open_xkb:cz::cze
-0xe7c956d1a5fe18b8 InputMethodOptions_Open_xkb:de::ger
-0x6ae0a3c608578b06 InputMethodOptions_Open_xkb:de:neo:ger
-0x54fd79dcc2c5078e InputMethodOptions_Open_xkb:dk::dan
-0xaaa3e638c0277e5d InputMethodOptions_Open_xkb:ee::est
-0x10d646c96bb290b0 InputMethodOptions_Open_xkb:es::spa
-0x9e9970f4b46c2945 InputMethodOptions_Open_xkb:es:cat:cat
-0x365b92eea899e7e7 InputMethodOptions_Open_xkb:fi::fin
-0xc81eae3dfb9e0b9d InputMethodOptions_Open_xkb:fr::fra
-0xbcf08367d19013e3 InputMethodOptions_Open_xkb:gb:dvorak:eng
-0x526ffe2c52ecda24 InputMethodOptions_Open_xkb:gb:extd:eng
-0x8030ee073cf7a3c6 InputMethodOptions_Open_xkb:gr::gre
-0xd154dbf3bb7c8107 InputMethodOptions_Open_xkb:hr::scr
-0x4f9eafd4473f6e19 InputMethodOptions_Open_xkb:hu::hun
-0x33f2b9f6c8539fde InputMethodOptions_Open_xkb:il::heb
-0x36471978fb1b0bea InputMethodOptions_Open_xkb:it::ita
-0x22020a263d5795ed InputMethodOptions_Open_xkb:jp::jpn
-0xed01f2795c864acf InputMethodOptions_Open_xkb:kr:kr104:kor
-0xfa8c5d3c569dfb46 InputMethodOptions_Open_xkb:latam::spa
-0xc165f3fd0b803830 InputMethodOptions_Open_xkb:lt::lit
-0x18b9e4dbb8025455 InputMethodOptions_Open_xkb:lv::lav
-0xcb6f3f90c1010f75 InputMethodOptions_Open_xkb:lv:apostrophe:lav
-0x34a05814ab58931d InputMethodOptions_Open_xkb:nl::nld
-0x4d16bf11c3ad7cd0 InputMethodOptions_Open_xkb:no::nob
-0x25659d10deab047d InputMethodOptions_Open_xkb:no::nor
-0xe39db1a9105a1816 InputMethodOptions_Open_xkb:pl::pol
-0x545654bd66e632ff InputMethodOptions_Open_xkb:pt::por
-0x0b2eb1ceb2af7e31 InputMethodOptions_Open_xkb:ro::rum
-0x397d3a57fed5bbac InputMethodOptions_Open_xkb:rs::srp
-0xd6b7cc8f607a5d62 InputMethodOptions_Open_xkb:ru::rus
-0xb6ded54d82c9c63d InputMethodOptions_Open_xkb:ru:phonetic:rus
-0xf18cf6b9c54bcd9e InputMethodOptions_Open_xkb:se::swe
-0x4fcae8c67666b3a4 InputMethodOptions_Open_xkb:si::slv
-0x06425a2a094ed04f InputMethodOptions_Open_xkb:sk::slo
-0x0217ffe65d9240b7 InputMethodOptions_Open_xkb:tr::tur
-0x029ef6d08daae227 InputMethodOptions_Open_xkb:ua::ukr
-0x8242054ab1bd9fdf InputMethodOptions_Open_xkb:us::eng
-0x6f0ca0c3f941e7f3 InputMethodOptions_Open_xkb:us:altgr-intl:eng
-0x3cafeb09bc83fb78 InputMethodOptions_Open_xkb:us:colemak:eng
-0x8c4bc3c1ddaf086f InputMethodOptions_Open_xkb:us:dvorak:eng
-0xcdb6a2617df255a0 InputMethodOptions_Open_xkb:us:intl:eng
-0x3f383d6272a64128 InsertBacktab
-0x22d1980eb6def616 InsertHTML
-0x0ff692418469f747 InsertHorizontalRule
-0xd90a0bafb43b7937 InsertImage
-0x6243f0401d9d1817 InsertLineBreak
-0x819ce2a733068b4d InsertNewline
-0x05534baac660c1e0 InsertNewlineInQuotedContent
-0xfe80e1819088136d InsertOrderedList
-0x876c542c54254736 InsertParagraph
-0x883d075e3e6d670c InsertTab
-0xb8890ced118a58f6 InsertText
-0x1342e1e52f335f69 InsertUnorderedList
-0x57267fa8e684477a InspectDevices
-0xb7c371f7dd19c6fd InstallSite
-0x9ee757dac968cead InstantExtended.MostVisitedClicked
-0x3545f6127f5688ab InstantExtended.ShowNTP
-0x67ae87c0c5a6f55d InstantExtended.ShowSRP
-0x1d874710ccdcd46b Italic
-0x5569092107ae9fb0 JustifyCenter
-0xb2e54b8c7671e92e JustifyLeft
-0xcd362d0d3c2a301a JustifyRight
-0xbcdd33480e8d115d KeySystemSupport.Widevine.Queried
-0x9768048447968d10 KeySystemSupport.Widevine.Supported
-0x2bde1e6310d1cd7d KeySystemSupport.WidevineWithType.Queried
-0xc15bca86fafab1d5 KeySystemSupport.WidevineWithType.Supported
-0x54eeedf1d26e7698 KeywordEditor_AddKeyword
-0x204aad0f4a1f0f22 KeywordEditor_AddKeywordJS
-0x37ac83353fd9be1f KeywordEditor_ModifiedKeyword
-0x2d038477eb20483b KeywordEditor_RemoveKeyword
-0xab20f097361154dc LanguageChange_Accept
-0x98ee7b2a2893443f LanguageChange_Revert
-0xcce20fb4bce11250 LanguageConfigView_Open
-0x6c9d4656451fe020 LanguageMenuButton_InputMethodChanged
-0x9895b811fa1a2f7e LanguageMenuButton_Open
-0x4bef75db451d23fb LanguageOptions_DisableInputMethod_chewing
-0xf8fff1e1c48a01f9 LanguageOptions_DisableInputMethod_english-m
-0xf336ef307e081efe LanguageOptions_DisableInputMethod_hangul
-0x473fff093fed5585 LanguageOptions_DisableInputMethod_m17n:am:sera
-0x31f603e454ce9301 LanguageOptions_DisableInputMethod_m17n:ar:kbd
-0x5cb365ca1a9f0a87 LanguageOptions_DisableInputMethod_m17n:bn:itrans
-0x8d99e4c7475dbc4e LanguageOptions_DisableInputMethod_m17n:fa:isiri
-0xa7e7896176de5020 LanguageOptions_DisableInputMethod_m17n:gu:itrans
-0x978a3702045ddd98 LanguageOptions_DisableInputMethod_m17n:hi:itrans
-0x7b8c5bcdf04dcec9 LanguageOptions_DisableInputMethod_m17n:kn:itrans
-0xe103b81ce59e1ff6 LanguageOptions_DisableInputMethod_m17n:ml:itrans
-0x466e0dad1b9632fd LanguageOptions_DisableInputMethod_m17n:mr:itrans
-0x52ef1a32c928ab9f LanguageOptions_DisableInputMethod_m17n:ta:inscript
-0x3b7bccba8f7c9d9d LanguageOptions_DisableInputMethod_m17n:ta:itrans
-0xaaa84d23cee33ba2 LanguageOptions_DisableInputMethod_m17n:ta:phonetic
-0x9d9736754936c0d2 LanguageOptions_DisableInputMethod_m17n:ta:tamil99
-0x915153efd566a118 LanguageOptions_DisableInputMethod_m17n:ta:typewriter
-0x0e3555d2c2574839 LanguageOptions_DisableInputMethod_m17n:te:itrans
-0x3bf8f7a682215755 LanguageOptions_DisableInputMethod_m17n:th:kesmanee
-0x7ddb7bc2e25e4c86 LanguageOptions_DisableInputMethod_m17n:th:pattachote
-0x7c79ba0a7ddc551f LanguageOptions_DisableInputMethod_m17n:th:tis820
-0x64a3fb231691a106 LanguageOptions_DisableInputMethod_m17n:vi:tcvn
-0x25c742d3c23ff71e LanguageOptions_DisableInputMethod_m17n:vi:telex
-0x2282d16406d4149c LanguageOptions_DisableInputMethod_m17n:vi:viqr
-0xc46962be71e81a74 LanguageOptions_DisableInputMethod_m17n:vi:vni
-0x6f8182b9533a7bf6 LanguageOptions_DisableInputMethod_m17n:zh:cangjie
-0xdd214c6e6e223f2c LanguageOptions_DisableInputMethod_m17n:zh:quick
-0xe5b7a334a40a29b1 LanguageOptions_DisableInputMethod_mozc
-0xb04e0a3af2d11cb7 LanguageOptions_DisableInputMethod_mozc-chewing
-0x34c0af16cc2283f8 LanguageOptions_DisableInputMethod_mozc-dv
-0x39e72b2fc3872c16 LanguageOptions_DisableInputMethod_mozc-hangul
-0x1e33e194e43d85ff LanguageOptions_DisableInputMethod_mozc-jp
-0xfd89518df98afaf3 LanguageOptions_DisableInputMethod_pinyin
-0xd6157bb480ef90f7 LanguageOptions_DisableInputMethod_pinyin-dv
-0x20108869230aba12 LanguageOptions_DisableInputMethod_xkb:be::fra
-0x977dc3accf7e638b LanguageOptions_DisableInputMethod_xkb:be::ger
-0xcf0b649f9a1a59c7 LanguageOptions_DisableInputMethod_xkb:be::nld
-0xde0ba68a4ea3a9bf LanguageOptions_DisableInputMethod_xkb:bg::bul
-0xdaacfedb410a091e LanguageOptions_DisableInputMethod_xkb:bg:phonetic:bul
-0x60f266cb898affd4 LanguageOptions_DisableInputMethod_xkb:br::por
-0x4fecb3e04929aca2 LanguageOptions_DisableInputMethod_xkb:ca::fra
-0x197d8fb2f176e036 LanguageOptions_DisableInputMethod_xkb:ca:eng:eng
-0x64305300f1ffa8af LanguageOptions_DisableInputMethod_xkb:ch::ger
-0xb3517f39d893bc56 LanguageOptions_DisableInputMethod_xkb:ch:fr:fra
-0xf407ba1d8f098570 LanguageOptions_DisableInputMethod_xkb:cz::cze
-0x66ec7b7c518dab3c LanguageOptions_DisableInputMethod_xkb:de::ger
-0x562bc573da86fe6c LanguageOptions_DisableInputMethod_xkb:de:neo:ger
-0xaab2b2ab32b79eaf LanguageOptions_DisableInputMethod_xkb:dk::dan
-0x231800f9acc70b4f LanguageOptions_DisableInputMethod_xkb:ee::est
-0x55901fb5aa842097 LanguageOptions_DisableInputMethod_xkb:es::spa
-0xec86a454fb80111e LanguageOptions_DisableInputMethod_xkb:es:cat:cat
-0x18ca64de485033c8 LanguageOptions_DisableInputMethod_xkb:fi::fin
-0x6d236611b97a8f64 LanguageOptions_DisableInputMethod_xkb:fr::fra
-0x204bead7902d82d7 LanguageOptions_DisableInputMethod_xkb:gb:dvorak:eng
-0x13facbf7da2f7826 LanguageOptions_DisableInputMethod_xkb:gb:extd:eng
-0x215d96a1bda18a53 LanguageOptions_DisableInputMethod_xkb:gr::gre
-0x6e3d64f780b3424a LanguageOptions_DisableInputMethod_xkb:hr::scr
-0x625fbaee633b4e53 LanguageOptions_DisableInputMethod_xkb:hu::hun
-0x14a66e0b221a13bb LanguageOptions_DisableInputMethod_xkb:il::heb
-0xf5dbc48f5bcfd65f LanguageOptions_DisableInputMethod_xkb:it::ita
-0x11cb89758a2d2606 LanguageOptions_DisableInputMethod_xkb:jp::jpn
-0x02b207c3740c92db LanguageOptions_DisableInputMethod_xkb:kr:kr104:kor
-0xbe433a85af5f3219 LanguageOptions_DisableInputMethod_xkb:latam::spa
-0xcafacab7d5bec6c3 LanguageOptions_DisableInputMethod_xkb:lt::lit
-0xa310032375e1a775 LanguageOptions_DisableInputMethod_xkb:lv::lav
-0x683e9f41fec504f1 LanguageOptions_DisableInputMethod_xkb:lv:apostrophe:lav
-0xfb0bedc9f892abf2 LanguageOptions_DisableInputMethod_xkb:nl::nld
-0x29d544cb2af7a80a LanguageOptions_DisableInputMethod_xkb:no::nob
-0xc7210bf937ebf4d1 LanguageOptions_DisableInputMethod_xkb:no::nor
-0x4f7d52ae0938b86e LanguageOptions_DisableInputMethod_xkb:pl::pol
-0xc7123952f2b4bf52 LanguageOptions_DisableInputMethod_xkb:pt::por
-0xbf5c339263965e41 LanguageOptions_DisableInputMethod_xkb:ro::rum
-0xf4c88d1eb003f153 LanguageOptions_DisableInputMethod_xkb:rs::srp
-0xddc77955cace9f69 LanguageOptions_DisableInputMethod_xkb:ru::rus
-0xb6e2bdd72bc5ca1b LanguageOptions_DisableInputMethod_xkb:ru:phonetic:rus
-0xbdbbb828f1afce9f LanguageOptions_DisableInputMethod_xkb:se::swe
-0xe65a7b8f5c72a35b LanguageOptions_DisableInputMethod_xkb:si::slv
-0x8e05ca20d7d104fa LanguageOptions_DisableInputMethod_xkb:sk::slo
-0x83928dfd8c874fd0 LanguageOptions_DisableInputMethod_xkb:tr::tur
-0x15f38552ce3ef440 LanguageOptions_DisableInputMethod_xkb:ua::ukr
-0x40118f4b64720619 LanguageOptions_DisableInputMethod_xkb:us::eng
-0x99b1530d498aa978 LanguageOptions_DisableInputMethod_xkb:us:altgr-intl:eng
-0x092d37b467b2355b LanguageOptions_DisableInputMethod_xkb:us:colemak:eng
-0x28a17da0e5170d9c LanguageOptions_DisableInputMethod_xkb:us:dvorak:eng
-0x36618553183c61a0 LanguageOptions_DisableInputMethod_xkb:us:intl:eng
-0xbf74d2491fd43546 LanguageOptions_EnableInputMethod_chewing
-0xd9282b12fa5f188f LanguageOptions_EnableInputMethod_english-m
-0xa3850d86987729e3 LanguageOptions_EnableInputMethod_hangul
-0x3f4b10aeaec96ce8 LanguageOptions_EnableInputMethod_m17n:am:sera
-0xbd41d816d8ffa4d0 LanguageOptions_EnableInputMethod_m17n:ar:kbd
-0xc203f3b486a353a5 LanguageOptions_EnableInputMethod_m17n:bn:itrans
-0xba649d035929fcc7 LanguageOptions_EnableInputMethod_m17n:fa:isiri
-0xed3203cbaaa64216 LanguageOptions_EnableInputMethod_m17n:gu:itrans
-0xd55995652310e97d LanguageOptions_EnableInputMethod_m17n:hi:itrans
-0x81829d172068cd4a LanguageOptions_EnableInputMethod_m17n:kn:itrans
-0x6735d1bbdb6402b2 LanguageOptions_EnableInputMethod_m17n:ml:itrans
-0xe446ca103495822f LanguageOptions_EnableInputMethod_m17n:mr:itrans
-0x4a404258c039c9f7 LanguageOptions_EnableInputMethod_m17n:ta:inscript
-0x99c1dad1382f9723 LanguageOptions_EnableInputMethod_m17n:ta:itrans
-0x4709812f00883cc2 LanguageOptions_EnableInputMethod_m17n:ta:phonetic
-0x4d7c4797ad697bbd LanguageOptions_EnableInputMethod_m17n:ta:tamil99
-0x638a88a46df1a617 LanguageOptions_EnableInputMethod_m17n:ta:typewriter
-0xbfa551d544d618b0 LanguageOptions_EnableInputMethod_m17n:te:itrans
-0xc9349a3c4ea64758 LanguageOptions_EnableInputMethod_m17n:th:kesmanee
-0x8ebf5ecdd9403d86 LanguageOptions_EnableInputMethod_m17n:th:pattachote
-0xc1771d7b829a738e LanguageOptions_EnableInputMethod_m17n:th:tis820
-0x094f24c724c35098 LanguageOptions_EnableInputMethod_m17n:vi:tcvn
-0x8f062dc3fbc54bd6 LanguageOptions_EnableInputMethod_m17n:vi:telex
-0xb31dc2cc3a8b46cd LanguageOptions_EnableInputMethod_m17n:vi:viqr
-0x905e70ae85a254d9 LanguageOptions_EnableInputMethod_m17n:vi:vni
-0xfef5e66f81905f45 LanguageOptions_EnableInputMethod_m17n:zh:cangjie
-0x707054c3cc12ba9b LanguageOptions_EnableInputMethod_m17n:zh:quick
-0xf757893b8f47d386 LanguageOptions_EnableInputMethod_mozc
-0x12e67d2f62569179 LanguageOptions_EnableInputMethod_mozc-chewing
-0x5e800e2879b118e1 LanguageOptions_EnableInputMethod_mozc-dv
-0xac71bc394dac5dd1 LanguageOptions_EnableInputMethod_mozc-hangul
-0x0876a103cad5d843 LanguageOptions_EnableInputMethod_mozc-jp
-0x56da8023f0cbe550 LanguageOptions_EnableInputMethod_pinyin
-0x95ce2c3e8dfefc08 LanguageOptions_EnableInputMethod_pinyin-dv
-0x7ddef14e3ae9ca9b LanguageOptions_EnableInputMethod_xkb:be::fra
-0xcd6ff3d5d0cc4817 LanguageOptions_EnableInputMethod_xkb:be::ger
-0xcc82746494498dc4 LanguageOptions_EnableInputMethod_xkb:be::nld
-0x0aa7853408b07074 LanguageOptions_EnableInputMethod_xkb:bg::bul
-0x699564bdd5712be7 LanguageOptions_EnableInputMethod_xkb:bg:phonetic:bul
-0xc644632c62aeb8ca LanguageOptions_EnableInputMethod_xkb:br::por
-0x3a2c133c17b2bc75 LanguageOptions_EnableInputMethod_xkb:ca::fra
-0x20bc5b77deb279f8 LanguageOptions_EnableInputMethod_xkb:ca:eng:eng
-0x6cb09a3c8026a7aa LanguageOptions_EnableInputMethod_xkb:ch::ger
-0x9ad6a4a9638b5782 LanguageOptions_EnableInputMethod_xkb:ch:fr:fra
-0xa559566c8c6ea637 LanguageOptions_EnableInputMethod_xkb:cz::cze
-0x98af6ef5e3f72fb2 LanguageOptions_EnableInputMethod_xkb:de::ger
-0xe3e1f005e4881269 LanguageOptions_EnableInputMethod_xkb:de:neo:ger
-0xd42956556814d1ac LanguageOptions_EnableInputMethod_xkb:dk::dan
-0x0a403824d4bf1af8 LanguageOptions_EnableInputMethod_xkb:ee::est
-0x6c0a59356dde2eac LanguageOptions_EnableInputMethod_xkb:es::spa
-0x8f92752907a878f4 LanguageOptions_EnableInputMethod_xkb:es:cat:cat
-0xcd068af26c3eeb04 LanguageOptions_EnableInputMethod_xkb:fi::fin
-0x23e04c4b87b2ec4a LanguageOptions_EnableInputMethod_xkb:fr::fra
-0xa25f41f242fc4801 LanguageOptions_EnableInputMethod_xkb:gb:dvorak:eng
-0x61b45586224d5505 LanguageOptions_EnableInputMethod_xkb:gb:extd:eng
-0xcf2286bdb20f63dd LanguageOptions_EnableInputMethod_xkb:gr::gre
-0xad8f3703500bedcc LanguageOptions_EnableInputMethod_xkb:hr::scr
-0xe37001b17655d436 LanguageOptions_EnableInputMethod_xkb:hu::hun
-0x48ece720994692cd LanguageOptions_EnableInputMethod_xkb:il::heb
-0xfbce8fb375d0cb10 LanguageOptions_EnableInputMethod_xkb:it::ita
-0xe86c32f284eaa235 LanguageOptions_EnableInputMethod_xkb:jp::jpn
-0x75254f6c14869f23 LanguageOptions_EnableInputMethod_xkb:kr:kr104:kor
-0x3ac95cb77e3aecd3 LanguageOptions_EnableInputMethod_xkb:latam::spa
-0x7e72cd1f5e56c8de LanguageOptions_EnableInputMethod_xkb:lt::lit
-0x7e55464b40755c35 LanguageOptions_EnableInputMethod_xkb:lv::lav
-0x984465cbf1dc14c7 LanguageOptions_EnableInputMethod_xkb:lv:apostrophe:lav
-0x1a1ca3eb2d8f9b6d LanguageOptions_EnableInputMethod_xkb:nl::nld
-0x73bfcb9c835bcb38 LanguageOptions_EnableInputMethod_xkb:no::nob
-0x06d15353036ca947 LanguageOptions_EnableInputMethod_xkb:no::nor
-0x1e7c51aa38eb9c65 LanguageOptions_EnableInputMethod_xkb:pl::pol
-0xa7e387a15749319e LanguageOptions_EnableInputMethod_xkb:pt::por
-0x87a75b792f1d8ee1 LanguageOptions_EnableInputMethod_xkb:ro::rum
-0x38e76dba9085fa94 LanguageOptions_EnableInputMethod_xkb:rs::srp
-0x9c6ce402bd03337b LanguageOptions_EnableInputMethod_xkb:ru::rus
-0x6bb6082988e4cbea LanguageOptions_EnableInputMethod_xkb:ru:phonetic:rus
-0xf78f942da3223853 LanguageOptions_EnableInputMethod_xkb:se::swe
-0x46d0c5799ae35ae7 LanguageOptions_EnableInputMethod_xkb:si::slv
-0x00084283db086e29 LanguageOptions_EnableInputMethod_xkb:sk::slo
-0xc079d20c400f3e61 LanguageOptions_EnableInputMethod_xkb:tr::tur
-0xac38bf5ba676edfb LanguageOptions_EnableInputMethod_xkb:ua::ukr
-0x4ae7cbf387b2ee2c LanguageOptions_EnableInputMethod_xkb:us::eng
-0xfc019a30579d475d LanguageOptions_EnableInputMethod_xkb:us:altgr-intl:eng
-0xf47b49df07dcafca LanguageOptions_EnableInputMethod_xkb:us:colemak:eng
-0xf6b8e8d4de66cf77 LanguageOptions_EnableInputMethod_xkb:us:dvorak:eng
-0x23aaf851e47f2bf7 LanguageOptions_EnableInputMethod_xkb:us:intl:eng
-0xfa78305d269c1ec1 LanguageOptions_Open
-0xda947fb4440a66e7 LanguageOptions_Restart
-0xb5f8e1034ebaab43 LanguageOptions_SignOut
-0x3bdcb57ed74b6f2c LanguageOptions_SpellCheckLanguageChange_af
-0x0268501c247fa3e1 LanguageOptions_SpellCheckLanguageChange_am
-0x9d68c5a82572b3a5 LanguageOptions_SpellCheckLanguageChange_ar
-0x216ae3faf9f4fc61 LanguageOptions_SpellCheckLanguageChange_az
-0x85bddda0d071875b LanguageOptions_SpellCheckLanguageChange_be
-0x552a4f4066bb456b LanguageOptions_SpellCheckLanguageChange_bg
-0xea6b28b89f3b1bc2 LanguageOptions_SpellCheckLanguageChange_bh
-0x173c0736c9838394 LanguageOptions_SpellCheckLanguageChange_bn
-0xa357a0df0b190220 LanguageOptions_SpellCheckLanguageChange_br
-0x474752275567a519 LanguageOptions_SpellCheckLanguageChange_bs
-0x77b12159bb08e0c0 LanguageOptions_SpellCheckLanguageChange_ca
-0x6872456b4ea20026 LanguageOptions_SpellCheckLanguageChange_co
-0x258da94c1135762c LanguageOptions_SpellCheckLanguageChange_cs
-0x29a8f1a61033a69a LanguageOptions_SpellCheckLanguageChange_cy
-0xb30aafb7259dcd76 LanguageOptions_SpellCheckLanguageChange_da
-0xd4d51eee8ca53562 LanguageOptions_SpellCheckLanguageChange_de
-0x8d90ebda20909ebe LanguageOptions_SpellCheckLanguageChange_de-AT
-0x2311311ecb5272c2 LanguageOptions_SpellCheckLanguageChange_de-CH
-0xdc02d8c4e8b01766 LanguageOptions_SpellCheckLanguageChange_de-DE
-0x7ee2af2c5a437e1a LanguageOptions_SpellCheckLanguageChange_el
-0x4fc6d56cdd72700e LanguageOptions_SpellCheckLanguageChange_en
-0x7a9875b0b8efb1ad LanguageOptions_SpellCheckLanguageChange_en-AU
-0x210830b65e90eedf LanguageOptions_SpellCheckLanguageChange_en-CA
-0x9c5ecf7ee4cd7fe6 LanguageOptions_SpellCheckLanguageChange_en-GB
-0xa1ca46cc1bacf01e LanguageOptions_SpellCheckLanguageChange_en-NZ
-0xc2ef2ccd8a872da8 LanguageOptions_SpellCheckLanguageChange_en-US
-0xfa49edbe6e1a8099 LanguageOptions_SpellCheckLanguageChange_en-ZA
-0xb89148d2ec4d78eb LanguageOptions_SpellCheckLanguageChange_eo
-0x7a8a9928c6951178 LanguageOptions_SpellCheckLanguageChange_es
-0x335c54f4600c0b06 LanguageOptions_SpellCheckLanguageChange_es-419
-0x2be5d12ada80fe8c LanguageOptions_SpellCheckLanguageChange_et
-0x85fb3829228fcc2e LanguageOptions_SpellCheckLanguageChange_eu
-0x888c6e9da75bd6ea LanguageOptions_SpellCheckLanguageChange_fa
-0x6a71fe1235b65ea8 LanguageOptions_SpellCheckLanguageChange_fi
-0x786510108f6bd621 LanguageOptions_SpellCheckLanguageChange_fil
-0xb65b87a46bc6848a LanguageOptions_SpellCheckLanguageChange_fo
-0x350594ed486733ab LanguageOptions_SpellCheckLanguageChange_fr
-0x92b548bfe8dc3ae9 LanguageOptions_SpellCheckLanguageChange_fr-CA
-0x22d8ce8d402861df LanguageOptions_SpellCheckLanguageChange_fr-CH
-0x04b12f0c336d715c LanguageOptions_SpellCheckLanguageChange_fr-FR
-0xedba3ba5ccd84adc LanguageOptions_SpellCheckLanguageChange_fy
-0xfc18bb1660a03b60 LanguageOptions_SpellCheckLanguageChange_ga
-0x1b9c8352f74b0c82 LanguageOptions_SpellCheckLanguageChange_gd
-0xfdfa4d8cd811f664 LanguageOptions_SpellCheckLanguageChange_gl
-0xac52fce34c780009 LanguageOptions_SpellCheckLanguageChange_gn
-0xd78744f6c3b943d5 LanguageOptions_SpellCheckLanguageChange_gu
-0xd4bb24d5585722d5 LanguageOptions_SpellCheckLanguageChange_ha
-0xa1df103387fe44eb LanguageOptions_SpellCheckLanguageChange_haw
-0xe6a740028864e54c LanguageOptions_SpellCheckLanguageChange_he
-0x4a5ac45c11294524 LanguageOptions_SpellCheckLanguageChange_hi
-0x5634d2d630b62db7 LanguageOptions_SpellCheckLanguageChange_hr
-0x0d9b2da08e908398 LanguageOptions_SpellCheckLanguageChange_hu
-0x6235fe36d587a174 LanguageOptions_SpellCheckLanguageChange_hy
-0x96a69530dcf9c952 LanguageOptions_SpellCheckLanguageChange_ia
-0x33858a0f90601b99 LanguageOptions_SpellCheckLanguageChange_id
-0x421fd3a986c9268a LanguageOptions_SpellCheckLanguageChange_is
-0x6963156dd2e5a8da LanguageOptions_SpellCheckLanguageChange_it
-0x0c579f6bc1d7eb3d LanguageOptions_SpellCheckLanguageChange_it-CH
-0x9415bc67e35d695b LanguageOptions_SpellCheckLanguageChange_it-IT
-0xc309312f7d87e667 LanguageOptions_SpellCheckLanguageChange_ja
-0xa16e44ff1be39a3e LanguageOptions_SpellCheckLanguageChange_jw
-0x69a6884a3d26b3da LanguageOptions_SpellCheckLanguageChange_ka
-0xda7c858e99e65ef4 LanguageOptions_SpellCheckLanguageChange_kk
-0x2ef0148c5104510b LanguageOptions_SpellCheckLanguageChange_km
-0x0c285764bac9c412 LanguageOptions_SpellCheckLanguageChange_kn
-0xdf1b960c7c2cc1e7 LanguageOptions_SpellCheckLanguageChange_ko
-0x5d128aa7040d29c6 LanguageOptions_SpellCheckLanguageChange_ku
-0x535257816775f9f5 LanguageOptions_SpellCheckLanguageChange_ky
-0x9c4079a6ebd99d4f LanguageOptions_SpellCheckLanguageChange_la
-0xbcdb116c72381903 LanguageOptions_SpellCheckLanguageChange_ln
-0x188a55a79836e3ab LanguageOptions_SpellCheckLanguageChange_lo
-0x35c70c9a4d851dc6 LanguageOptions_SpellCheckLanguageChange_lt
-0x8566b76a82e7fdeb LanguageOptions_SpellCheckLanguageChange_lv
-0xb21dc3c6409fb03b LanguageOptions_SpellCheckLanguageChange_mk
-0xbc1d9b51b30e674e LanguageOptions_SpellCheckLanguageChange_ml
-0xe184488215d31cff LanguageOptions_SpellCheckLanguageChange_mn
-0xb4048acd46620f9d LanguageOptions_SpellCheckLanguageChange_mo
-0x494852187a45238e LanguageOptions_SpellCheckLanguageChange_mr
-0x3252be13f227791e LanguageOptions_SpellCheckLanguageChange_ms
-0x47b98aa2c04db05a LanguageOptions_SpellCheckLanguageChange_mt
-0xd1019f3988676333 LanguageOptions_SpellCheckLanguageChange_nb
-0xc7d80d5be9fd265a LanguageOptions_SpellCheckLanguageChange_ne
-0x0fe1fa4c9113cdca LanguageOptions_SpellCheckLanguageChange_nl
-0xbf2dc22115880d3d LanguageOptions_SpellCheckLanguageChange_nn
-0xcab46544f005c97a LanguageOptions_SpellCheckLanguageChange_no
-0x031c51747e109ed0 LanguageOptions_SpellCheckLanguageChange_oc
-0x18148cc2641e2e75 LanguageOptions_SpellCheckLanguageChange_om
-0x5af0c86bd4fbc6d4 LanguageOptions_SpellCheckLanguageChange_or
-0xe9142e813c57d901 LanguageOptions_SpellCheckLanguageChange_pa
-0x56f8dea08fc60dd0 LanguageOptions_SpellCheckLanguageChange_pl
-0xcc46a9b43892cd17 LanguageOptions_SpellCheckLanguageChange_ps
-0xa8e521739e3a8111 LanguageOptions_SpellCheckLanguageChange_pt
-0x0965fa6496b7bc86 LanguageOptions_SpellCheckLanguageChange_pt-BR
-0xa245fca6322289f1 LanguageOptions_SpellCheckLanguageChange_pt-PT
-0x0c0249f8a5ddd2fd LanguageOptions_SpellCheckLanguageChange_qu
-0x1e4414f0c08e409b LanguageOptions_SpellCheckLanguageChange_rm
-0x9de3adae56cd4645 LanguageOptions_SpellCheckLanguageChange_ro
-0xdf75477e7e9105c9 LanguageOptions_SpellCheckLanguageChange_ru
-0xa5227b45669bf1d9 LanguageOptions_SpellCheckLanguageChange_sd
-0x99ac10d69235bc19 LanguageOptions_SpellCheckLanguageChange_sh
-0xb65301fe78a5f948 LanguageOptions_SpellCheckLanguageChange_si
-0x4043d3a9b8a0b7d3 LanguageOptions_SpellCheckLanguageChange_sk
-0xd48fd58efca4a848 LanguageOptions_SpellCheckLanguageChange_sl
-0x4811fa57db8aba7b LanguageOptions_SpellCheckLanguageChange_sn
-0xb460c6a021ce30ce LanguageOptions_SpellCheckLanguageChange_so
-0xcf8fbb2f35d437f9 LanguageOptions_SpellCheckLanguageChange_sq
-0x4266aeea5a172fed LanguageOptions_SpellCheckLanguageChange_sr
-0xb70d00fe5b60399f LanguageOptions_SpellCheckLanguageChange_st
-0x4f307c5e96126e39 LanguageOptions_SpellCheckLanguageChange_su
-0x793f0539702106b3 LanguageOptions_SpellCheckLanguageChange_sv
-0xd0683f1a88f2dcd9 LanguageOptions_SpellCheckLanguageChange_sw
-0x4adb832cdfa82e95 LanguageOptions_SpellCheckLanguageChange_ta
-0xe5e6f8a2c34dbf3f LanguageOptions_SpellCheckLanguageChange_te
-0xb56ca80c23e21e82 LanguageOptions_SpellCheckLanguageChange_tg
-0xc31434dd30b37c79 LanguageOptions_SpellCheckLanguageChange_th
-0xbf3ce64eb42276ce LanguageOptions_SpellCheckLanguageChange_ti
-0x9a7852d3d5a451dd LanguageOptions_SpellCheckLanguageChange_tk
-0x54a10166348130da LanguageOptions_SpellCheckLanguageChange_to
-0xceb028c8d98b6f69 LanguageOptions_SpellCheckLanguageChange_tr
-0x6110f46e5d1d5ce3 LanguageOptions_SpellCheckLanguageChange_tt
-0x9ed4a1802694e371 LanguageOptions_SpellCheckLanguageChange_tw
-0xf2aa74178fae8737 LanguageOptions_SpellCheckLanguageChange_ug
-0xeba4b1bfb148fe5c LanguageOptions_SpellCheckLanguageChange_uk
-0xdc2fbf10c4e3cc7e LanguageOptions_SpellCheckLanguageChange_ur
-0x7de2dd2191f8f3b5 LanguageOptions_SpellCheckLanguageChange_uz
-0x20f26902bf2b0f7e LanguageOptions_SpellCheckLanguageChange_vi
-0x69a672e997291046 LanguageOptions_SpellCheckLanguageChange_xh
-0xd95a13401430464b LanguageOptions_SpellCheckLanguageChange_yi
-0xdfa41d1e586edede LanguageOptions_SpellCheckLanguageChange_yo
-0xe464bee2f7b47f05 LanguageOptions_SpellCheckLanguageChange_zh
-0x02feeb3c3fbb0e6d LanguageOptions_SpellCheckLanguageChange_zh-CN
-0x388861c5b05fcfd7 LanguageOptions_SpellCheckLanguageChange_zh-TW
-0xa7832f7951587154 LanguageOptions_SpellCheckLanguageChange_zu
-0x28f95708216c5f3f LanguageOptions_UiLanguageChange_af
-0x64bf99d3a3ae3c09 LanguageOptions_UiLanguageChange_am
-0x37e45415ff188c83 LanguageOptions_UiLanguageChange_ar
-0xc16e98ac284f7a2c LanguageOptions_UiLanguageChange_az
-0x86afaa8af655ec3a LanguageOptions_UiLanguageChange_be
-0xd3444f0a33415c12 LanguageOptions_UiLanguageChange_bg
-0x2a970136519d8e05 LanguageOptions_UiLanguageChange_bh
-0x373b5f9df58f10b1 LanguageOptions_UiLanguageChange_bn
-0xaa60c4c46bab2840 LanguageOptions_UiLanguageChange_br
-0x576186b20f58a62e LanguageOptions_UiLanguageChange_bs
-0x2ee7812d1d628187 LanguageOptions_UiLanguageChange_ca
-0x0d39e71d36e3f98c LanguageOptions_UiLanguageChange_co
-0x009ad7b74dd6eead LanguageOptions_UiLanguageChange_cs
-0x9fc56d8b05719e95 LanguageOptions_UiLanguageChange_cy
-0x71c22450bc774ac6 LanguageOptions_UiLanguageChange_da
-0xdad8029db0738ca3 LanguageOptions_UiLanguageChange_de
-0xe5f02b9f07d5c321 LanguageOptions_UiLanguageChange_de-AT
-0x937082a0f96b339b LanguageOptions_UiLanguageChange_de-CH
-0x60067bef740b0cee LanguageOptions_UiLanguageChange_de-DE
-0x0598fe9cffcf7342 LanguageOptions_UiLanguageChange_el
-0x20682c0970bf6c39 LanguageOptions_UiLanguageChange_en
-0xb6b90d60aa7397dc LanguageOptions_UiLanguageChange_en-AU
-0x20ffa805c7cb2d11 LanguageOptions_UiLanguageChange_en-CA
-0x0abeddf23bb637dd LanguageOptions_UiLanguageChange_en-GB
-0x8e377316a588ae05 LanguageOptions_UiLanguageChange_en-NZ
-0x5e4314a4bd4d6ec1 LanguageOptions_UiLanguageChange_en-US
-0xacb33ac957ca869b LanguageOptions_UiLanguageChange_en-ZA
-0xabb1750f364f3fdf LanguageOptions_UiLanguageChange_eo
-0x42ef1c985cf8dac3 LanguageOptions_UiLanguageChange_es
-0x207a8d00a40289d5 LanguageOptions_UiLanguageChange_es-419
-0x3396cd1cc34fcd6b LanguageOptions_UiLanguageChange_et
-0x1bc0603299c4c900 LanguageOptions_UiLanguageChange_eu
-0x4f3e8052d630b9ef LanguageOptions_UiLanguageChange_fa
-0xef30a035ea67916e LanguageOptions_UiLanguageChange_fi
-0x6b0bf8c255f455c4 LanguageOptions_UiLanguageChange_fil
-0xa43a6a0b854ffefd LanguageOptions_UiLanguageChange_fo
-0x3636182675a031c8 LanguageOptions_UiLanguageChange_fr
-0x6f0bffdb3032caed LanguageOptions_UiLanguageChange_fr-CA
-0xd912f13c73979882 LanguageOptions_UiLanguageChange_fr-CH
-0xe924dfbfd17a3242 LanguageOptions_UiLanguageChange_fr-FR
-0x061bf0d19eeef81e LanguageOptions_UiLanguageChange_fy
-0x8251febc4083f54f LanguageOptions_UiLanguageChange_ga
-0xccd31a77ee4366bf LanguageOptions_UiLanguageChange_gd
-0x1f67f851b23ced0f LanguageOptions_UiLanguageChange_gl
-0xcc9859375f855961 LanguageOptions_UiLanguageChange_gn
-0xd56c64f864957d91 LanguageOptions_UiLanguageChange_gu
-0xd08b36368944e379 LanguageOptions_UiLanguageChange_ha
-0xb3a6464f5fe71073 LanguageOptions_UiLanguageChange_haw
-0xed8f4616b34e2185 LanguageOptions_UiLanguageChange_he
-0x88ca2030cc3a49d9 LanguageOptions_UiLanguageChange_hi
-0xb8bd533bdc898a53 LanguageOptions_UiLanguageChange_hr
-0x746a1a0e63dd3f6d LanguageOptions_UiLanguageChange_hu
-0x48906875b3fd6c95 LanguageOptions_UiLanguageChange_hy
-0x1366ee57f2aebfad LanguageOptions_UiLanguageChange_ia
-0xff1d8f2925f8463c LanguageOptions_UiLanguageChange_id
-0x915c19c85aed6a03 LanguageOptions_UiLanguageChange_is
-0xd1abd6db369ab7ef LanguageOptions_UiLanguageChange_it
-0xe0c3a22acdd867b9 LanguageOptions_UiLanguageChange_it-CH
-0x3090b03a3e46582b LanguageOptions_UiLanguageChange_it-IT
-0x60f4dd00cc06d874 LanguageOptions_UiLanguageChange_ja
-0x86c8f166345df95e LanguageOptions_UiLanguageChange_jw
-0x670ea55ac2c8b062 LanguageOptions_UiLanguageChange_ka
-0x5b57cde2d36ca8cd LanguageOptions_UiLanguageChange_kk
-0xbeb6576493ae6d05 LanguageOptions_UiLanguageChange_km
-0xce996c9699b3168c LanguageOptions_UiLanguageChange_kn
-0xbd07adaea57b26f5 LanguageOptions_UiLanguageChange_ko
-0x4f0a66f954fa580e LanguageOptions_UiLanguageChange_ku
-0xb87acb54b22131c8 LanguageOptions_UiLanguageChange_ky
-0x8263585e1943372f LanguageOptions_UiLanguageChange_la
-0x6642ed654dd4aaa4 LanguageOptions_UiLanguageChange_ln
-0x273efc98e31a51cd LanguageOptions_UiLanguageChange_lo
-0xd25cfe9ca78a31d7 LanguageOptions_UiLanguageChange_lt
-0x794081adfcb1744c LanguageOptions_UiLanguageChange_lv
-0xf6ea1c5fc4dcafb8 LanguageOptions_UiLanguageChange_mk
-0x2258884fcb94b3a3 LanguageOptions_UiLanguageChange_ml
-0x00bdaddaf47561d1 LanguageOptions_UiLanguageChange_mn
-0x3b0c2fa0b7b027db LanguageOptions_UiLanguageChange_mo
-0xfec577eb29f4b768 LanguageOptions_UiLanguageChange_mr
-0x2d1ef24818ca5e4f LanguageOptions_UiLanguageChange_ms
-0x06ddcd11da46bb50 LanguageOptions_UiLanguageChange_mt
-0x5683a40b0b8caa20 LanguageOptions_UiLanguageChange_nb
-0x2ba4d49749d043fa LanguageOptions_UiLanguageChange_ne
-0x584a118482ee3a32 LanguageOptions_UiLanguageChange_nl
-0x7ca178a2a1311c1e LanguageOptions_UiLanguageChange_nn
-0xcef3082674f7bfc0 LanguageOptions_UiLanguageChange_no
-0x4ef5f77644dbfc68 LanguageOptions_UiLanguageChange_oc
-0x648ba70088175e47 LanguageOptions_UiLanguageChange_om
-0xb76df1c750016022 LanguageOptions_UiLanguageChange_or
-0x4d3566c9fb39fde3 LanguageOptions_UiLanguageChange_pa
-0xb2e1327766d055ad LanguageOptions_UiLanguageChange_pl
-0x9e562f625cfbb008 LanguageOptions_UiLanguageChange_ps
-0xd970808d9c9448d1 LanguageOptions_UiLanguageChange_pt
-0xf7b46f1138de06a9 LanguageOptions_UiLanguageChange_pt-BR
-0x086ef991869ac783 LanguageOptions_UiLanguageChange_pt-PT
-0x69a974172e5e9f73 LanguageOptions_UiLanguageChange_qu
-0xdd1935e2579c1284 LanguageOptions_UiLanguageChange_rm
-0xe5738c8e946ba1d0 LanguageOptions_UiLanguageChange_ro
-0x125913fb14d47526 LanguageOptions_UiLanguageChange_ru
-0x0f156a0f15f74bb8 LanguageOptions_UiLanguageChange_sd
-0x9240b6a14cd35919 LanguageOptions_UiLanguageChange_sh
-0x6763083d96429a61 LanguageOptions_UiLanguageChange_si
-0x587831f4b9220eca LanguageOptions_UiLanguageChange_sk
-0x15a09e54aa1e9f4a LanguageOptions_UiLanguageChange_sl
-0x6a5ac197de560ec4 LanguageOptions_UiLanguageChange_sn
-0x93472fab0fe3f061 LanguageOptions_UiLanguageChange_so
-0x1bbc961a4eb4fb07 LanguageOptions_UiLanguageChange_sq
-0xb1392f5ad48fe1a7 LanguageOptions_UiLanguageChange_sr
-0x04e5f8326179901e LanguageOptions_UiLanguageChange_st
-0x5fef5745a2763b80 LanguageOptions_UiLanguageChange_su
-0x8993a9d1df3ccc59 LanguageOptions_UiLanguageChange_sv
-0xaedab7909dff790b LanguageOptions_UiLanguageChange_sw
-0x6c1f62315896ca95 LanguageOptions_UiLanguageChange_ta
-0x762084c13a9a9b62 LanguageOptions_UiLanguageChange_te
-0x0060f27c68e28c87 LanguageOptions_UiLanguageChange_tg
-0x80b5fea53c9d6164 LanguageOptions_UiLanguageChange_th
-0xeeb3bd273099c7d3 LanguageOptions_UiLanguageChange_ti
-0xfa67fec49e23c547 LanguageOptions_UiLanguageChange_tk
-0x052e8ac2c052128c LanguageOptions_UiLanguageChange_to
-0xaa97a95d0c9e20b5 LanguageOptions_UiLanguageChange_tr
-0x8e949fbebe2126cf LanguageOptions_UiLanguageChange_tt
-0xe0fc96469f2d822f LanguageOptions_UiLanguageChange_tw
-0xa4a84a5651503494 LanguageOptions_UiLanguageChange_ug
-0x0b0bcb0d93b5a367 LanguageOptions_UiLanguageChange_uk
-0x2be9356bc4812c15 LanguageOptions_UiLanguageChange_ur
-0xe0e1ece201b6889f LanguageOptions_UiLanguageChange_uz
-0x28a1a4b9dc5a83f1 LanguageOptions_UiLanguageChange_vi
-0xf16ab2f1f9cfeaab LanguageOptions_UiLanguageChange_xh
-0x26561f9577c4d728 LanguageOptions_UiLanguageChange_yi
-0x0d5d98b098d7429b LanguageOptions_UiLanguageChange_yo
-0xa9b1ee532cc5580b LanguageOptions_UiLanguageChange_zh
-0xbee911865b93d504 LanguageOptions_UiLanguageChange_zh-CN
-0x03a61bc8bd6c791b LanguageOptions_UiLanguageChange_zh-TW
-0xd93d87f83683d666 LanguageOptions_UiLanguageChange_zu
-0x7f28f030259fc65e Launcher_ClickOnApp
-0x2df1e564b9b0952f Launcher_ClickOnApplistButton
-0x384a6609143bbcae LoadURL
-0xe009e92f3909009c LoadURLFromKeyword
-0x5c9174370534d67c LocalDiscoveryNotificationsDisabled_Settings_Disable
-0xf4495a1060f7a361 LocalDiscoveryNotificationsDisabled_Settings_Enable
-0x795fc04747be6afa LockScreen
-0x733f4fb7447b7323 Login.CreateAccount
-0xb9cc6258dfd41f37 Login_DemoUserLoginSuccess
-0xfb40450c5de92998 Login_Failure
-0x31374d163aec5a5e Login_GuestLoginSuccess
-0x47421e3d3406b4e1 Login_OffTheRecordLoginSuccess
-0xc23fa875d14a7ddb Login_Success
-0xb8f04c6d0fe44916 ManagedMode_ClosePassphraseDialog
-0x2e52d9ec770aefb3 ManagedMode_LocallyManagedUserCreated
-0x41b5faabb7c9327c ManagedMode_MainFrameNavigation
-0xa29f3f7e4bb25494 ManagedMode_NewManagedUserWindow
-0x29c1bda4ed1db0e0 ManagedMode_OpenPassphraseDialog
-0x238d1563c0fa1ce2 ManagedMode_OpenSettings
-0x0b747e86c82229bc ManagedMode_StartupEnableManagedSwitch
-0x9f5c6206cd6609b6 ManagedMode_StartupManagedSwitch
-0x91519377450fa09e ManagedMode_StartupNoManagedSwitch
-0xe6e506b6ca3fd10f ManagedUsers_UploadItem_Queued
-0xc5b20d272f57cec5 ManagedUsers_UploadItem_Syncing
-0x336d5775206b39a0 MaxButton_Clk_ExitFS
-0x30e3f55c61ca1f4d MaxButton_Clk_Maximize
-0x49226fae388cd5f0 MaxButton_Clk_Restore
-0x9c4e110de24ddbfb MaxButton_MaxLeft
-0xe5e2c8bb60a6f019 MaxButton_MaxRight
-0x0ed29608c3edb9ee MaxButton_Maximize
-0xfa675ab4e35a8dfb MaxButton_Minimize
-0x9ddc8fc34f81c18c MaxButton_Restore
-0xf5f4e08ff4ffc48e MaxButton_ShowBubble
-0x84ba0ed3cbdf3956 MediaContextMenu_Controls
-0x7b82a108ac28a1ac MediaContextMenu_Loop
-0x458edb8f0451b9f5 MediaContextMenu_Mute
-0xcbbec2e6e4bc9bc7 MediaContextMenu_Pause
-0x8b5912c6a1d5add6 MediaContextMenu_Play
-0xc2d04b65a8ff1f89 MediaContextMenu_Unmute
-0x6b52c76dc897d0ac MinButton_Clk
-0x7b262d2127dd8256 Minimize_UsingKey
-0xfa4408343dc15b72 MixedScript_LoadAnyway_Bubble
-0x3f09ed78b409184e MobileActionBarShown
-0x3dce569ec6ea9080 MobileBeamCallbackSuccess
-0x90e5a607c36178ce MobileBeamInvalidAppState
-0xbc28c6539da4d688 MobileBreakpadUploadAttempt
-0x4622f7e73642ad8a MobileBreakpadUploadFailure
-0x29f2927c01084453 MobileBreakpadUploadSuccess
-0xd51394e7d79ed777 MobileContextMenuCopyImageLinkAddress
-0xa7b47844dbca122c MobileContextMenuCopyLinkAddress
-0x5ff99655278e08bf MobileContextMenuCopyLinkText
-0x329e7c190c46883a MobileContextMenuDownloadImage
-0x24fcd970b3be9539 MobileContextMenuDownloadLink
-0x19f18ed23304f451 MobileContextMenuDownloadVideo
-0x6607f1a62c7086b7 MobileContextMenuImage
-0x5ac057123a1aa102 MobileContextMenuLink
-0xaea6ec9898f5dca7 MobileContextMenuOpenImageInNewTab
-0xf20535df9a8b8956 MobileContextMenuOpenLink
-0x9e77fb06de21d0b4 MobileContextMenuOpenLinkInIncognito
-0xa024c8dce2320bb1 MobileContextMenuOpenLinkInNewTab
-0xde20f676a6805404 MobileContextMenuSaveImage
-0xf123d71a7f1df18a MobileContextMenuSearchByImage
-0x470fb8fde85c094b MobileContextMenuShareLink
-0xb177bc454b6a2105 MobileContextMenuText
-0x68b96cc2620ba615 MobileContextMenuVideo
-0xac284cf4338f8a66 MobileContextMenuViewImage
-0x145c1748b4db8fb5 MobileFocusedFakeboxOnNtp
-0x92ade4e05606fe2d MobileFocusedOmniboxNotOnNtp
-0x5b1e74ed79deac48 MobileFocusedOmniboxOnNtp
-0xaa0f56a837e6fc61 MobileFreAttemptSignIn
-0xe18a359c1fcb3fbb MobileFreSignInSuccessful
-0x1d68dcd4ec7fdadc MobileFreSkipSignIn
-0xd593c486af2f742f MobileMenuAddToBookmarks
-0x952e55d25fd7f645 MobileMenuAllBookmarks
-0x012de2560a8ce076 MobileMenuBack
-0x8e57c931b602766a MobileMenuCloseAllTabs
-0xa8326b05fd6bc10c MobileMenuCloseTab
-0x4852b77757f1128a MobileMenuFeedback
-0x70d79227bd988ebd MobileMenuFindInPage
-0x6a191ad02dfcfde5 MobileMenuForward
-0x32de876b3eb8f2fb MobileMenuFullscreen
-0xa880dc9ccdc2ed51 MobileMenuNewIncognitoTab
-0x8d1aefe7246707fa MobileMenuNewTab
-0x0581354d10947136 MobileMenuOpenTabs
-0x6771b11116f29809 MobileMenuQuit
-0xdeddac455059a536 MobileMenuReload
-0xbd48a04b98a0806d MobileMenuSettings
-0x4a8e89dbe7dc9821 MobileMenuShare
-0xc9389060e824d3ec MobileMenuShow
-0x23f55337b40c7686 MobileNTPBookmark
-0x2927c5a40258df17 MobileNTPForeignSession
-0x5a4f535062ffe001 MobileNTPMostVisited
-0x89a6184c5dabd612 MobileNTPRecentlyClosed
-0xc172db5c29ae2771 MobileNTPSwitchToBookmarks
-0xd4df8c01afe71935 MobileNTPSwitchToIncognito
-0x46c727e82f8494bc MobileNTPSwitchToMostVisited
-0x2f3ff7588b15e4b5 MobileNTPSwitchToOpenTabs
-0xd6643e725ce30ed4 MobileNewTabOpened
-0x5e3971df3da04b41 MobileOmniboxRefineSuggestion
-0x90071ab23ccdcd96 MobileOmniboxSearch
-0x23037bbea96a8ceb MobileOmniboxVoiceSearch
-0xb1249f32bf64d5e8 MobilePageLoaded
-0x029217f521222d21 MobilePageLoadedDesktopUserAgent
-0x7bdf9c4a8dab56fb MobilePageLoadedWithKeyboard
-0xe9e4921fd2dc5ca6 MobileReceivedExternalIntent
-0xd38e217ec665e879 MobileRendererCrashed
-0x09618d294069e60c MobileShortcutAllBookmarks
-0x2ad4806d40f823b2 MobileShortcutFindInPage
-0xc6e9ebacfe2e732e MobileShortcutNewIncognitoTab
-0x54aa16ebe7a27823 MobileShortcutNewTab
-0x5b326627b3bfa8f2 MobileSideSwipeFinished
-0xd96fefb036806b54 MobileStackViewCloseTab
-0x0a340661b1591ab5 MobileStackViewSwipeCloseTab
-0xe0c5fc409e7d2a9e MobileTabClobbered
-0x27caa49d16b71362 MobileTabClosed
-0x371b72b6cd5313f4 MobileTabStripCloseTab
-0xbb2496f58a543215 MobileTabStripNewTab
-0x61bd701a880845ea MobileTabSwitched
-0xeddccaa7cc01c9c4 MobileToolbarBack
-0x0082decef81a99e8 MobileToolbarForward
-0xc7cd1610c9a15c4d MobileToolbarNewTab
-0xf7a930aae6dd681f MobileToolbarReload
-0x3cf24b6fee3f97bf MobileToolbarShowMenu
-0x3deff4b1d1a6c795 MobileToolbarShowStackView
-0xa358306810cb78c4 MobileToolbarStackViewNewTab
-0x001b06917446ac95 MobileToolbarToggleBookmark
-0xfe5d7732799048fd MobileUsingMenuByHwButtonDragging
-0xb25fb65d8d767718 MobileUsingMenuByHwButtonTap
-0xaf60773aea14a7b5 MobileUsingMenuBySwButtonDragging
-0x15fd6bb5bff45129 MobileUsingMenuBySwButtonTap
-0x409a073e57298782 MostVisited0
-0xaf4909be766297ab MostVisited1
-0x6028c57529e1608f MostVisited2
-0x3a94312581f33dde MostVisited3
-0xd8a6b50e524602b1 MostVisited4
-0xa61f8bda87c26817 MostVisited5
-0xaf2d6d86c5115610 MostVisited6
-0x576b4b3570828783 MostVisited7
-0x7e2c4d68af709827 MostVisited8
-0x1b40c6b1b5dd7106 MostVisited9
-0x245e4aa9fe5a8a3c MostVisitedReordered
-0x9c6a4ef293d946ca MostVisited_BlacklistCleared
-0x110c33db0e4c6ebf MostVisited_Clicked
-0x018c0ec301cb02ae MostVisited_UrlBlacklisted
-0x4cbb82140919fe65 MostVisited_UrlPinned
-0xa90e38146e0a4399 MostVisited_UrlRemoved
-0xe39ca5075f8cb467 MostVisited_UrlUnpinned
-0x4a0afb1ce16f661e Mouse_Down
-0xf812385dfcc1a683 MoveBackward
-0xd5980f1362f718dd MoveBackwardAndModifySelection
-0x8c95fa949833ae3c MoveDown
-0x601512931eeb8aa3 MoveDownAndModifySelection
-0x122077e11a3cc3a5 MoveForward
-0x645ad0c708fc5558 MoveForwardAndModifySelection
-0xe8a98c6fabdea857 MoveLeft
-0xe7929afc55d64080 MoveLeftAndModifySelection
-0xffee5f8627577124 MovePageDown
-0x7c9e3f063ca16598 MovePageDownAndModifySelection
-0x3f2197bd2a87175c MovePageUp
-0x2b0ce1185e0ee65d MovePageUpAndModifySelection
-0x78af9b7fcdf1574f MoveRight
-0x90177a63e4ab5878 MoveRightAndModifySelection
-0x6c8c1cceb6be3172 MoveTabNext
-0x56f311997d5f98ed MoveTabPrevious
-0xb57645f74f42e96c MoveToBeginningOfDocument
-0x3379b28a420f0c0e MoveToBeginningOfLine
-0xe9ba772da7cca699 MoveToBeginningOfLineAndModifySelection
-0x02bb149b88f68e59 MoveToBeginningOfParagraph
-0xfa68df5359bb8fdc MoveToBeginningOfParagraphAndModifySelection
-0x0d05f6fc5732a16d MoveToEndOfDocument
-0xd6b0cd02740d6118 MoveToEndOfLine
-0x660cce052c15cd1c MoveToEndOfLineAndModifySelection
-0x925cca836b27299f MoveToEndOfParagraph
-0xafbef52070141639 MoveToEndOfParagraphAndModifySelection
-0xa56a3ff692c679e3 MoveUp
-0x5011c876151c1812 MoveUpAndModifySelection
-0xccdc0bb665a92238 MoveWordBackward
-0x9372bb835cd720fb MoveWordForward
-0x002e07cb5223cd33 MoveWordLeft
-0xd55f7c4e520b18a4 MoveWordRight
-0xfc8e40d96ab33f1b NTPPromoClosed
-0x0cdd043c5d63d234 NTPPromoShown
-0xdcf1af37de1d8dd0 NativeUI_Applications
-0x08b0a573ad336d14 NavEntryCommitted
-0xcace6bb1e166082f NavEntryCommitted.SRP
-0x3c6e0d9310ba3a20 NewIncognitoWindow
-0xeddaa38a10bf8374 NewProfileWindowByIndex
-0x290eb683f96572f1 NewTab
-0x95c990454684cb1d NewTabPage_ReopenTab
-0xab4d417c5ca44904 NewTab_Button
-0xbdc9ec125e7a3ade NewWindow
-0x56e2be5803efccc1 Notifications.Mute
-0xa86d43452b05bf72 Notifications.ShowMessageCenter
-0x9a102e132f96503f Notifications.ShowSettings
-0xd2175e238a75b56a Notifications.Unmute
-0xbace688dcdf180fe Omnibox.ServerSuggestDelete.Failure
-0x65a8c968a93ddb00 Omnibox.ServerSuggestDelete.Success
-0xa72c673a1f44d11f OmniboxDestinationURLIsSearchOnDSP
-0x6048dbd4f2f2ca50 OmniboxDestinationURLMatchesDefaultSearchProvider
-0x268376698078c71b OmniboxInputInProgress
-0xe7ff15c3f1043a26 Omnibox_DragString
-0x1a18c36c737ec22b Omnibox_DragURL
-0x56c5e8af805a2fe8 OpenAddBluetoothDeviceDialog
-0xa00fbd8da8229c83 OpenAllBookmarks
-0x7242962875070018 OpenAllBookmarksIncognitoWindow
-0x5e3bd4e3535ecc38 OpenAllBookmarksNewWindow
-0xf6bce188756ecaf8 OpenChangeProfilePictureDialog
-0x4b858349a1b8bb15 OpenFile
-0xedaa8487de2a33c6 OpenFileManager
-0xb3c3e8d99702cf70 OpenFileSystemPersistent
-0x1e6740b4b7fda686 OpenFileSystemTemporary
-0x4928347f9423c013 OpenInternetOptionsDialog
-0x83af6accb98b9954 OpenLanguageOptionsDialog
-0xe7147544a7db079d OpenSystemOptionsDialog
-0xe4f08e5732cebbd3 OpenTabpose
-0x7d3309f039cebdb1 Options_AppLanguage
-0xaabae975f4a0bb66 Options_AskForSaveLocation_Disable
-0x85464d6e64bbb505 Options_AskForSaveLocation_Enable
-0x158f62ce172e002b Options_AutoSpellCorrection_Disable
-0xa19b903d23620d91 Options_AutoSpellCorrection_Enable
-0xc77b497271ed97a4 Options_AutofillAuxiliaryProfiles_Disable
-0xb23c25ac48557c58 Options_AutofillAuxiliaryProfiles_Enable
-0x212dbab3096e37b2 Options_Autologin_Disable
-0x73bafa15344565f3 Options_Autologin_Enable
-0xbf4441a54e9b8e50 Options_BackgroundMode_Disable
-0xc481e10b3ba27f8c Options_BackgroundMode_Enable
-0xc65558de1b0b2371 Options_BlockAllPopups_Disable
-0x6886cd43bb132ac1 Options_BlockAllPopups_Enable
-0xa64d82b58336f482 Options_ChangeDefaultZoomLevel
-0x76cf57336cea96ff Options_ChangeFixedFont
-0xa198434035fd95dc Options_ChangeFontEncoding
-0xac4f01f24c2cad48 Options_ChangeProxies
-0x279dd81ae1252131 Options_ChangeSansSerifFont
-0xbbecdfd270d46408 Options_ChangeSerifFont
-0x45f2145964c18350 Options_ChangeStandardFont
-0x98ccc71c44973ca0 Options_CheckCertRevocation_Disable
-0xc6599b9ffadec866 Options_CheckCertRevocation_Enable
-0x67aa79d60894f3d7 Options_ClearData
-0x4f27f3cc73dfa3ce Options_CloudPrintDevicesPage
-0x2d5b58850046ac0a Options_ContentSettings
-0xe2fd858f8395432f Options_CustomFrame_Disable
-0x531823c36ca21da2 Options_CustomFrame_Enable
-0x33e7b018e003c5b1 Options_DefaultCookieSettingChanged
-0x3864ed1197ddceb8 Options_DefaultGeolocationSettingChanged
-0x3f92cd6678d2f595 Options_DefaultHandlersSettingChanged
-0x5dfe307474e6b526 Options_DefaultImagesSettingChanged
-0x8ac0134529158dae Options_DefaultJavaScriptSettingChanged
-0x3a8bb054f5841f1a Options_DefaultMIDISysExSettingChanged
-0x04303682ca0b2a8d Options_DefaultMediaStreamMicSettingChanged
-0x6a97ed68e3457d0e Options_DefaultMediaStreamSettingChanged
-0xfca02a749fa0f811 Options_DefaultMouseLockSettingChanged
-0xef2e38e7df25f488 Options_DefaultMultipleAutomaticDLSettingChange
-0xbc49f9107e7c7c7c Options_DefaultNotificationsSettingChanged
-0x6b91203aa4b5fb3c Options_DefaultPluginsSettingChanged
-0x8b20daa9a0c1a0a6 Options_DefaultPopupsSettingChanged
-0x2d3b125fe15e828e Options_DictionaryLanguage
-0xc895ecf32a4970be Options_DisableCloudPrintProxy
-0xa381adec8b0e61ee Options_DisableGData_Disable
-0x31bc6949351f46a1 Options_DisableGData_Enable
-0x3c91497bc48f7456 Options_DnsPrefetchCheckbox_Disable
-0xb1c929ead405f1a9 Options_DnsPrefetchCheckbox_Enable
-0x5e1d34b2eb43d66f Options_DoNotTrackCheckbox_Disable
-0x127ee5905bb2d0cd Options_DoNotTrackCheckbox_Enable
-0x24f63c90f4b05e70 Options_EnableCloudPrintProxy
-0x7224f61ec49ec7ce Options_FormAutofill_Disable
-0xe88933ca2c819b4e Options_FormAutofill_Enable
-0xb186750fe61b8254 Options_GearsSettings
-0x9014fbda0ce53308 Options_GoogleGeolocationAccessCheckbox_Disable
-0x4954403fd4c98f51 Options_GoogleGeolocationAccessCheckbox_Enable
-0x8e87d1b7048f4b2f Options_GtkThemeSet
-0xa8b432017c641f12 Options_Homepage_HideHomeButton
-0xcf50dce927f3c8a8 Options_Homepage_HomeButton_Disable
-0x9815eaa9d1b11198 Options_Homepage_HomeButton_Enable
-0xb2391b14884e357a Options_Homepage_IsNewTabPage_Disable
-0x2e719fd1ab37b148 Options_Homepage_IsNewTabPage_Enable
-0xc8faba7110ff04c3 Options_Homepage_ShowHomeButton
-0x26cdb65b6a92b56a Options_Homepage_UseNewTab
-0xca6dd0b172e6df26 Options_Homepage_UseURL
-0x3462530e3c04ab92 Options_ImagesCheckbox_Disable
-0x3b55d5acba24ebad Options_ImagesCheckbox_Enable
-0xe82fe68817c3bf54 Options_InstantEnabled_Disable
-0x6efe012fa2603811 Options_InstantEnabled_Enable
-0xd7bc54bcc7d96d7b Options_InstantExtendedEnabled_Disable
-0x9eb89c74eb206694 Options_InstantExtendedEnabled_Enable
-0x9e2677a81e8d73a3 Options_Internet_DataRoaming_Disable
-0xce32dc47692c5927 Options_Internet_DataRoaming_Enable
-0x386291531b93301b Options_JavaCheckbox_Disable
-0xe1d9dbcef8116c71 Options_JavaCheckbox_Enable
-0x704c162610c6ffd5 Options_LinkDoctorCheckbox_Disable
-0x64ea4cda15571db8 Options_LinkDoctorCheckbox_Enable
-0xc8073584c5521315 Options_ManageCloudPrinters
-0xd97025bbf470c3ba Options_ManageSSLCertificates
-0xfeb23e6946b41cdc Options_ManageSearchEngines
-0x84502179f3e2ae8c Options_ManagerCerts
-0x540bea8eaba24835 Options_MetricsReportingCheckbox_Disable
-0x4aa2c70a745dbb49 Options_MetricsReportingCheckbox_Enable
-0x224b0bf60dccdeda Options_MousePrimaryRight_Disable
-0xb23cd3cde814d929 Options_MousePrimaryRight_Enable
-0x820f29cc9c44d0d5 Options_PasswordGenerationCheckbox_Disable
-0x4df19d1fb4741c2a Options_PasswordGenerationCheckbox_Enable
-0xc5fbe9d9b3a165dd Options_PasswordManager_Disable
-0x59b4f208d9d9f648 Options_PasswordManager_Enable
-0x6149925370ef4f47 Options_PluginsCheckbox_Disable
-0x38a52a23bebcb35d Options_PluginsCheckbox_Enable
-0x4c8f0d80d0819583 Options_ResetAutoOpenFiles
-0x0e3ea2998edfc23b Options_ResetToDefaults
-0xdad9014dcb04a1be Options_SSL2_Disable
-0xdacc44975593ad02 Options_SSL2_Enable
-0x88e4d09541842432 Options_SSL3_Disable
-0x6b2fbab68d97bb5b Options_SSL3_Enable
-0x08e75d386343cc27 Options_SafeBrowsingCheckbox_Disable
-0xc951b246a33514ac Options_SafeBrowsingCheckbox_Enable
-0x7653dc09eac4e2bf Options_SearchEngineChanged
-0x47fd936f55f6abd4 Options_SensitivitySlider_Changed
-0xb6e98e1635e14c7d Options_SetAsDefaultBrowser
-0x6268ba17ac147927 Options_SetDownloadDirectory
-0xcbfeef35b3ad832e Options_ShowAutoFillSettings
-0xeaa21f7cf4791a0f Options_ShowBookmarksBar_Disable
-0x0e3c8e82d47db7c6 Options_ShowBookmarksBar_Enable
-0x626c01f2ae5a9ba2 Options_ShowCookies
-0x9b00328b8c542526 Options_ShowPasswordManager
-0x1d4a5f924ea24d2c Options_ShowPasswordsExceptions
-0xc7fbc422d732eac5 Options_ShowProxySettings
-0xc9362f32313889f1 Options_SpeedFactorSlider_Changed
-0xc8fa104e4dd724e3 Options_SpellCheck_Disable
-0x7470044370eb75f8 Options_SpellCheck_Enable
-0xf9f1e5efda6f9978 Options_Startup_Custom
-0xf8e60cd9af4e6187 Options_Startup_Homepage
-0x1747b98bb0705d52 Options_Startup_LastSession
-0x635cadbdc678371f Options_Startup_NewTab
-0x24301fc721f3f091 Options_TLS1_Disable
-0x1c669fc919a6eccb Options_TLS1_Enable
-0x0e213ca8fa03d268 Options_TabsToLinks_Disable
-0x60adcbc1d31d59a2 Options_TabsToLinks_Enable
-0x01c2684695fc839e Options_TapToClickCheckbox_Disable
-0x6f37e83ce98b3082 Options_TapToClickCheckbox_Enable
-0x73defd4825af2700 Options_ThemesGallery
-0x60d52658d42b1593 Options_ThemesReset
-0x5101b63f43ebef59 Options_TouchpadNaturalScroll_Disable
-0xe1b1c799201cdfd3 Options_TouchpadNaturalScroll_Enable
-0x4a469294c73f23e4 Options_TouchpadTapToClick_Disable
-0x61a29472d343cf72 Options_TouchpadTapToClick_Enable
-0xa35806253d8d8b30 Options_Translate_Disable
-0x280bb55487be6eb4 Options_Translate_Enable
-0x5ebf6f9ecb47b4ad Options_UseSpellingServiceCheckbox_Disable
-0x78f845e65f47f3f6 Options_UseSpellingServiceCheckbox_Enable
-0x6f40a6712a19568a Options_UseSuggestCheckbox_Disable
-0x9abd34cb9a857b9e Options_UseSuggestCheckbox_Enable
-0x24604cce8816243c Options_VertEdgeScrollCheckbox_Disable
-0x8d45d4c781319d53 Options_VertEdgeScrollCheckbox_Enable
-0x40a2640625760310 OutdatedPluginInfobar.AllowThisTime
-0xa0361f9250c19197 OutdatedPluginInfobar.Closed
-0xb4be73d2951aab5b OutdatedPluginInfobar.Dismissed
-0x883c4259bb3beddd OutdatedPluginInfobar.LearnMore
-0xaf62158873b29888 OutdatedPluginInfobar.Shown
-0x3691471b03ca8103 OutdatedPluginInfobar.Shown.Java
-0x25e1fc613aa70de4 OutdatedPluginInfobar.Shown.QuickTime
-0x703e5cc7ad485d8f OutdatedPluginInfobar.Shown.Reader
-0x5c977c210e40986b OutdatedPluginInfobar.Shown.RealPlayer
-0xcc2c490fe5fc55ef OutdatedPluginInfobar.Shown.Shockwave
-0x0ef39278378fe05d OutdatedPluginInfobar.Shown.Silverlight
-0x7e7073691a152241 OutdatedPluginInfobar.Update
-0x26da45ced13360f3 OutdatedUpgradeBubble.Later
-0xe55f92fea3aac9d0 OutdatedUpgradeBubble.Reinstall
-0x9a1b867a0b9532ca OutdatedUpgradeBubble.Show
-0x016839db155e0468 Outdent
-0x69fae31849862d21 OverrideEncoding
-0xdcb4676e49e95259 PDF.FitToHeightButton
-0xac15a659a088ccc5 PDF.FitToPageButton
-0x5f58a2db6428c1a0 PDF.FitToWidthButton
-0xc3c876c4e5846f66 PDF.LoadFailure
-0x9c67afdea49aa8c1 PDF.LoadSuccess
-0xa0853d13a6382cb2 PDF.PreviewDocumentLoadFailure
-0x715bc13f0a521ab7 PDF.PrintButton
-0x95be082d470e41c9 PDF.PrintPage
-0x5b2d6203fcccbfa9 PDF.SaveButton
-0xf7d4dd6244747179 PDF.SavePage
-0x99ed44568e5ff51a PDF.ZoomFromBrowser
-0x1d57434947820665 PDF.ZoomInButton
-0x40ca10ced9d81d17 PDF.ZoomOutButton
-0xcf6b6026dc11987b PDF_EnableReaderInfoBarCancel
-0x00a3a874d94e0ae5 PDF_EnableReaderInfoBarOK
-0x8cae37cf015a06ba PDF_EnableReaderInfoBarShown
-0x1f8608be3f132d3f PDF_InstallReaderInfoBarCancel
-0x020d4194a7e4b5e1 PDF_InstallReaderInfoBarOK
-0xe8d7c93dac04f552 PDF_InstallReaderInfoBarShown
-0xbd058843faaa1507 PDF_ReaderInterstitialCancel
-0x673c5fad6fc74eac PDF_ReaderInterstitialIgnore
-0xe1cd8e7ef514360d PDF_ReaderInterstitialShown
-0x4bde610f2543fbd7 PDF_ReaderInterstitialUpdate
-0x0b951f22f9dff291 PDF_Unsupported_3D
-0x3c012d5822815c63 PDF_Unsupported_Attachment
-0x7322054dc4e9d451 PDF_Unsupported_Bookmarks
-0x75035f67192c6952 PDF_Unsupported_Digital_Signature
-0xc09901d647ad722f PDF_Unsupported_Movie
-0x282157da06d467b9 PDF_Unsupported_Portfolios
-0xdb9aecef729fd680 PDF_Unsupported_Portfolios_Packages
-0x74d8faa1b4e92791 PDF_Unsupported_Rights_Management
-0x571f65a8518214ae PDF_Unsupported_Screen
-0xdf8b4231d4bd3f90 PDF_Unsupported_Shared_Form
-0xb7474a7496f9a77e PDF_Unsupported_Shared_Review
-0x6efe497913838ea5 PDF_Unsupported_Sound
-0x08640e2d5578cf94 PDF_Unsupported_XFA
-0xde70e21d95b52c83 PDF_UseReaderInfoBarCancel
-0xc35f4595bbf2a0fa PDF_UseReaderInfoBarOK
-0xb7334d4097ba87ef PDF_UseReaderInfoBarShown
-0xbf1053adc4e5cd87 PPAPI.BrokerInfobarClickedAllow
-0x146afa4664512557 PPAPI.BrokerInfobarClickedDeny
-0xcd9ed785cbf9424b PPAPI.BrokerInfobarDisplayed
-0x002f8a6579713ab1 PPAPI.BrokerSettingAllow
-0x957b8f35c259d30a PPAPI.BrokerSettingDeny
-0xee3677bcca83ece9 PageDown
-0xac722301695b9315 PageLoad
-0x4e1f42df4b730437 PageLoadSRP
-0x9b869c510c75c582 PageUp
-0x9ba3ff80fde405cd PasswordManager_Disabled
-0x6cc1116fbd900ebf PasswordManager_Enabled
-0xc21075c3ec75e973 PasswordManager_RemovePasswordException
-0xa7613e3a71f2d755 PasswordManager_RemoveSavedPassword
-0x36bb6559696dc912 Paste
-0x5d0e6942f354a06c PasteAndMatchStyle
-0xe4565a211e8f619e PeopleSearch_OpenChat
-0xdf5f68b97b71ccb0 PeopleSearch_SendEmail
-0x01c52e891f36d4fe PlatformVerificationAccepted
-0x1929087478be7017 PlatformVerificationRejected
-0xca471265efb33961 PluginContextMenu_RotateClockwise
-0xa260d9dde6e550c4 PluginContextMenu_RotateCounterclockwise
-0xd0aab07db234653a Plugin_200ForByteRange
-0x6f2cd84fa374c281 Plugin_Blocked
-0xcecb82fcd8e64529 Plugin_ClickToPlay
-0xc52b281d793adc6b Plugin_Hide_Click
-0x838019f901a8e405 Plugin_Hide_Menu
-0x007757ef58e358af Plugin_Load_Click
-0xd84554ce585d6c63 Plugin_Load_Menu
-0x116bd7e07524f140 Plugin_Load_UI
-0xa9b341634f9ea6ad Plugin_NPAPINotSupported
-0x352f2d6315d52044 PrintNow
-0xcb83fba9c48fd911 PrintPreview
-0x89ad6a22de4ca850 PrintView_PrintDialog
-0x77db2baef38a1efc PrintView_PrintNow
-0xf5105f4fc4c32476 PrintView_ZoomMinus
-0xd432798852b5bdde PrintView_ZoomPageFull
-0x05bdd1f2f9628b7a PrintView_ZoomPageWidth
-0x89fa328f28747907 PrintView_ZoomPlus
-0xe23f821c3632547c ProcessSwapBindingsMismatch_RVHM
-0x5afeaba074ef570d Redo
-0x58d906ea1827983c RegisterProtocolHandler.ContextMenu_Open
-0x2f25b38028a24b10 RegisterProtocolHandler.ContextMenu_Settings
-0x21fd8c0ce09e106a RegisterProtocolHandler.InfoBar_Deny
-0xb1d098583dc63173 RegisterProtocolHandler.InfoBar_LearnMore
-0x1596504542ebc81d RegisterProtocolHandler.InfoBar_Shown
-0xee4b2f044de46f4b RegisterProtocolHandler.Infobar_Accept
-0x4d1c8263ba103675 Reload
-0x4641db18f24b11e1 ReloadIgnoringCache
-0xbcc54eb67cab2ae9 RemoveFormat
-0xa728f2892204aabc ReportBug
-0x4129a29cb4b8675d ResetProfile
-0x8f83bd601e845bc1 RestoreTab
-0x665cc78aff3f37f5 SBInterstitialMalwareDontProceed
-0xb00e7625ea2bc160 SBInterstitialMalwareDontProceed_V1
-0x32d1ed791369d0f3 SBInterstitialMalwareDontProceed_V2
-0xe25978a348044c85 SBInterstitialMalwareForcedDontProceed
-0x1cdfeccb11aecbfd SBInterstitialMalwareForcedDontProceed_V1
-0xdac337204e30c8f6 SBInterstitialMalwareForcedDontProceed_V2
-0xf02ed35cab0dcf4b SBInterstitialMalwareProceed
-0x90c44a041377ef24 SBInterstitialMalwareProceed_V1
-0x7ca5ef009d952b10 SBInterstitialMalwareProceed_V2
-0x09af23846e454261 SBInterstitialMalwareShow
-0x496ab75c7d751661 SBInterstitialMalwareShow_V1
-0xe882bc7f116fd6cd SBInterstitialMalwareShow_V2
-0xc81645e63b16cb44 SBInterstitialMultipleDontProceed
-0x30f4fb842cb92288 SBInterstitialMultipleDontProceed_V1
-0xc20442d6ef877b4b SBInterstitialMultipleDontProceed_V2
-0x8dd6ffcec8e73dd6 SBInterstitialMultipleForcedDontProceed
-0xe9d5cef9ca3da7a3 SBInterstitialMultipleForcedDontProceed_V1
-0x6c7b42218d4c0506 SBInterstitialMultipleForcedDontProceed_V2
-0x866cc35d2bcdf71d SBInterstitialMultipleProceed
-0x7e06a09bd57fcafa SBInterstitialMultipleProceed_V1
-0x98962df6f96dd0be SBInterstitialMultipleProceed_V2
-0x6dbe9571062fcfde SBInterstitialMultipleShow
-0xe639000a76d7e498 SBInterstitialMultipleShow_V1
-0xbe02295974c9a940 SBInterstitialMultipleShow_V2
-0x60578de80374e115 SBInterstitialPhishingDontProceed
-0x827278fea0de39a7 SBInterstitialPhishingDontProceed_V1
-0x569becba96026dfa SBInterstitialPhishingDontProceed_V2
-0xf3714282bdf38737 SBInterstitialPhishingForcedDontProceed
-0x62e1ba78dee8193c SBInterstitialPhishingForcedDontProceed_V1
-0x16741330208d63a3 SBInterstitialPhishingForcedDontProceed_V2
-0x340331e81b86f933 SBInterstitialPhishingProceed
-0x959e2d9b5f4f4a1d SBInterstitialPhishingProceed_V1
-0x6c158c3fee4d1bcd SBInterstitialPhishingProceed_V2
-0xf8af4ff865669301 SBInterstitialPhishingShow
-0x322a4e72ca14756b SBInterstitialPhishingShow_V1
-0xafb9afa1a94e513c SBInterstitialPhishingShow_V2
-0xe1df5f4bee6d0e2f SSL.DisplayedInsecureContent
-0xba6bde79f10497a9 SSL.RanInsecureContent
-0x12affa291e3d0146 SSL.RanInsecureContentGoogle
-0xc9cc8cce247e49ba Save
-0xfc7723f7c10f79d5 SavePage
-0xc849f604a9954989 ScreenLocker_OnLoginFailure
-0x0b8efe82e35086c2 ScreenLocker_Show
-0xe643aadfeec1d6fc ScreenLocker_Signout
-0x61ce545b97b3f1cd ScreenLocker_StartScreenSaver
-0xf95c10e149147c52 Screenshot_CopyClipboard
-0x5a3d18767d558d27 Screenshot_TakeFull
-0x65e0ccd33d9eeb03 Screenshot_TakePartial
-0x7a0c1d1c5392ec8e SearchWithRLZ
-0x2e17e73bd11af537 SearchWithoutRLZ
-0x702bbdc91c8e399d SelectAll
-0xd016dafd5f0eca55 SelectLastTab
-0x64658593002b74ad SelectLine
-0x25243a56d24dffd3 SelectNextTab
-0x7ae303310d8cfc29 SelectNumberedTab
-0x893981a84c5d0871 SelectPrevTab
-0x4578941ed28b34dd SelectProfile
-0x5b166a78549ae371 SelectTab0
-0x8fadb48c1fd4356e SelectTab1
-0xfa3cfe1e11999c78 SelectTab2
-0x43382573b0490660 SelectTab3
-0xcc1402f3ad4cae89 SelectTab4
-0x2d9491c68a4ec635 SelectTab5
-0x8fa9d8e88271c82d SelectTab6
-0xdaa611aa645914e5 SelectTab7
-0x47c724f97b092332 SettingsResetBubble.LearnMore
-0x3dfc1380fca28405 SettingsResetBubble.NoThanks
-0x695a1dd28410f12d SettingsResetBubble.Reset
-0x7eb3241cff786567 SettingsResetBubble.Show
-0x9ab81dfe74af9e92 Shelf_AlignmentSetBottom
-0x10ae2fefd987bcfa Shelf_AlignmentSetLeft
-0x8f0d98403b8aafbd Shelf_AlignmentSetRight
-0xbc7eb334ae9f29d0 ShowAccessibilitySettings
-0x1da022468e27685c ShowAppLauncherPage
-0x0d1d6961dd313b79 ShowAppMenu
-0x9be2b265107318b8 ShowApplications
-0x853927a304493ac7 ShowAsTab
-0x2c5584a8586dc1ab ShowBluetoothSettingsPage
-0x1b93c35c19ff3600 ShowBookmarkManager
-0xd1a227df4f361dbb ShowBookmarks
-0x1afb02b1f90b177e ShowBookmarksBar
-0x4630aaa532379a8e ShowChargerReplacementDialog
-0xe8705f2d7890043e ShowControlPanel
-0x537e45904298316b ShowDateOptions
-0xa27f5c1b4192af95 ShowDisplayOptions
-0x3d0170d09a816e7f ShowDownloads
-0xf530f742ba5b2683 ShowExtensions
-0xa0118397d83c34d0 ShowFileBrowserFullTab
-0xb1abf919e7eea1ad ShowHelpTab
-0x12391b25bf32b0de ShowHelpTabViaF1
-0xb2a3954e828f87c9 ShowHelpTabViaWrenchMenu
-0xb04b2eea6e26ebef ShowHistory
-0x404c3c24f3091fd7 ShowJSConsole
-0xa231b4c4e5ada262 ShowModalDialog
-0x658963e1a47a5018 ShowOptions
-0x564171f658dcb78e ShowPageMenu
-0xecf70e5f5be34681 ShowRecentlyViewed
-0xfd243b004d004e00 ShowSections_RecentSitesDisabled
-0x3b86156dcf560cdb ShowSections_RecentSitesEnabled
-0x5118181c3ece5e84 ShowSessions
-0x1a4ebb180ba59b06 Shutdown
-0x09d79ad36a385dc7 SiteChipPress
-0x26f93e6e68e28a69 Star
-0x2fbe99005588ef01 StartupTick
-0x61d88befbaefa89a StatusArea_Accessability_DetailedView
-0x7f426d3c3fc349cb StatusArea_Audio_CurrentInputDevice
-0xc08bb03164134793 StatusArea_Audio_CurrentOutputDevice
-0x42a8978c0a7e4910 StatusArea_Audio_Detailed
-0x0bedcb41ae4e10a2 StatusArea_Audio_SwitchInputDevice
-0x8dfc66b302b53c35 StatusArea_Audio_SwitchOutputDevice
-0x98219794f13b6f19 StatusArea_AutoClickDisabled
-0xdf8318eeee7499a5 StatusArea_AutoClickEnabled
-0x4a4880442f78544f StatusArea_Bluetooth_Connect_Known
-0xabf7cef9a1865298 StatusArea_Bluetooth_Connect_Unknown
-0x39572ab6d4cb1829 StatusArea_Bluetooth_Detailed
-0x37df6e0429625056 StatusArea_Bluetooth_Disabled
-0x8e695b22dbec8ed8 StatusArea_Bluetooth_Enabled
-0xd26c8140dacced4e StatusArea_BrightnessChanged
-0x259ed8148e433ff5 StatusArea_Brightness_Detailed
-0xb5744d753e598294 StatusArea_CapsLock_Detailed
-0xda0423582289f5e3 StatusArea_CapsLock_DisabledByClick
-0xaad53fbb4eddba16 StatusArea_CapsLock_EnabledByClick
-0xdc5e7fa620ac749b StatusArea_CapsLock_Popup
-0xba2d03681372e761 StatusArea_Drive_CancelOperation
-0x807ca87245b0bcb8 StatusArea_Drive_Detailed
-0x5cae26dc499854d5 StatusArea_Drive_Settings
-0xdc358cbb3cd04f74 StatusArea_HighContrastDisabled
-0xe15f1e2ffa6ca5a4 StatusArea_HighContrastEnabled
-0xc506ef0ccc5f4842 StatusArea_IME_Detailed
-0x5ed2d8ae9a4d27d0 StatusArea_IME_SwitchMode
-0xa570b1aa4e3c9697 StatusArea_LargeCursorDisabled
-0x89aefa3fbcaf90d2 StatusArea_LargeCursorEnabled
-0x2e62eefedb24257f StatusArea_MagnifierDisabled
-0xc3a8212bc7b08422 StatusArea_MagnifierEnabled
-0x36388e1a16db228e StatusArea_MenuOpened
-0x9ef9e0169d6c451c StatusArea_Network_ConnectConfigured
-0x907b1216d95ddabd StatusArea_Network_ConnectToConfigured
-0x4917e98c05c24323 StatusArea_Network_ConnectUnconfigured
-0xd019e5bcf6a2be27 StatusArea_Network_ConnectionDetails
-0x778eb25e08d1a0c6 StatusArea_Network_Detailed
-0xf3cea7bbfa9f216b StatusArea_Network_JoinOther
-0x7c0afaedc976b5e2 StatusArea_Network_Settings
-0x4491cf3c0806bf66 StatusArea_Network_WifiDisabled
-0x789ff2ba9f3872c8 StatusArea_Network_WifiEnabled
-0xb43a5a7909331d06 StatusArea_SignOut
-0xff9eaf2114140f32 StatusArea_SpokenFeedbackDisabled
-0x90669ba72028bb72 StatusArea_SpokenFeedbackEnabled
-0xf080e59c449d63cc StatusArea_VPN_ConnectToNetwork
-0x3650d060cba6101c StatusArea_VPN_ConnectionDetails
-0x1bf61eee704c2807 StatusArea_VPN_Detailed
-0x6a55be1b0e62adec StatusArea_VPN_JoinOther
-0x4e887baf440f63fd StatusArea_VPN_Settings
-0xc0e9f67eb7dda1ac StatusArea_Volume_ChangedMenu
-0x6c76189fc7f0b318 StatusArea_Volume_ChangedPopup
-0x11a755d598c0c417 Stop
-0x926a51baad949d12 Strikethrough
-0x055a197053882ccd SuspiciousExtensionBubbleDismissed
-0x197787e3bdf50f03 SyncedNotifications.SendingServiceDisabled
-0xb789d5822bf411fe SyncedNotifications.SendingServiceEnabled
-0xc3100ff8c8a00184 SystemBack
-0x4c211ce58592c3e6 SystemBackForNavigation
-0x4d56afb0a9837d41 TabContextMenu_BookmarkAllTabs
-0x3712160bf3495979 TabContextMenu_CloseOtherTabs
-0x417bd10a7c5e0210 TabContextMenu_CloseTab
-0xa0965146c626cd18 TabContextMenu_CloseTabsOpenedBy
-0x6adcbb467523c7d9 TabContextMenu_CloseTabsToRight
-0xaadbb71a197d76ad TabContextMenu_CompactNavigationBar
-0x89e073e006a686d1 TabContextMenu_Duplicate
-0x88aefc727559ebaf TabContextMenu_NewTab
-0x218d462d319b449c TabContextMenu_OpenTabsLeftToRight
-0x807b9158faa086ca TabContextMenu_OpenTabsRightToLeft
-0x1180c152ca336f5d TabContextMenu_Reload
-0x7c86965f80103b54 TabContextMenu_RestoreTab
-0xdcc35326aa8a5aeb TabContextMenu_TogglePinned
-0xdd2b0058433af670 TabContextMenu_UseDestinationsTab_Off
-0xe5f9f328f5d86b51 TabContextMenu_UseDestinationsTab_On
-0x3fe88a1365e8dc47 TabContextMenu_UseVerticalTabs
-0xb5ffa70ecb67b6f3 TabOverview_DetachCell
-0x060f1f68f262b152 TabOverview_DragCell
-0xad9c26360444768c TabOverview_DragOverMiniWindow
-0x1cdf073bd93d5346 TabOverview_DropOnMiniWindow
-0x0d699bd1ec9da211 TabOverview_ExitMouse
-0x0dffb74e62a90ad3 TabOverview_Keystroke
-0x65b8a6d7098e4825 TabOverview_PressedCreateNewBrowserButton
-0x552a7bf28446f0aa Tab_DropURLBetweenTabs
-0xc508d4d1583f51d6 Tab_DropURLOnTab
-0xdad4668bc0b8e79c TaskManager
-0xbe0a9ab559ef544d Terminate_ProcessMismatch_CreateNewWidget
-0xa908a8af2378a060 Terminate_ProcessMismatch_CreateNewWindow
-0x23afdebb497957f4 Themes.Gone
-0x07c710bf40f92990 Themes.Loaded
-0x77ae5b6a7529d8b5 Themes.Migrated
-0x0e6b2a071df7800e Themes_Installed
-0xf1b1f7db67f07b8c Themes_Reset
-0xc2c0c13f120b9c7c ThirdPartyCookieBlockingDisabled
-0x60aa171d4c36e576 ThirdPartyCookieBlockingEnabled
-0x9e2832408b48e761 ToggleBold
-0x303ce89ccac1592b ToggleCompactNavigationBar
-0x94122935e94b54f3 ToggleDevTools
-0xb639f67713eed8ea ToggleDevToolsConsole
-0x887771883a8fbbae ToggleExtensionShelf
-0x5250f5caaff979ba ToggleFullscreen
-0xedf6e4b0b320885f ToggleItalic
-0x904d810f7dd68a8e ToggleUnderline
-0xb92bc75c64039682 Toolbar_DragStar
-0xa7e3acf7f6fac337 Touchpad_Gesture_Overview
-0x8ce9fbd537e4983c TouchscreenScroll
-0x112c55c811540624 TouchscreenScrollFling
-0x05691d7006369070 Touchscreen_Down
-0x5d7f9a146f393dfc TrackpadScroll
-0x6f2d421111db4527 TrackpadScrollFling
-0xaf70b1ac863830a4 Transpose
-0x84416581e5767dfc Tray_Help
-0x1bba1e9ab7b38249 Tray_LockScreen
-0xcb28c56123f30247 Tray_ShutDown
-0x852721aa5fc738df Underline
-0x1cdc076b28f70afa Undo
-0xc1a39b6a60f8b2f8 Unlink
-0x46b816f573557a53 Unselect
-0xbcd41ce97e3c5568 UpdateChrome
-0x0746723e6884a2fb Updater.ServerCertificateChanged
-0x169dd0fd613963e8 Updater.ServerCertificateFailed
-0x9b4b5afb2e791f23 UpgradeCheck_AlreadyUpToDate
-0x27b72192736f904d UpgradeCheck_AlreadyUpgraded
-0x7a54d49f1f7db4ee UpgradeCheck_Done
-0x8bcf8b1b4f3c7451 UpgradeCheck_Error
-0xe42c4b8d6cb9188f UpgradeCheck_Started
-0x7edc3598854d0ab1 UpgradeCheck_TimedOut
-0x72714123f2bd0636 UpgradeCheck_UpgradeIsAvailable
-0xcd4da03d7cbaeb84 UpgradeCheck_Upgraded
-0x624ddd04836efdcd Upgrade_Started
-0xa909d722e2ae4285 ViewAboutConflicts
-0xf3768ba285ebca7e ViewAboutFlash
-0xd3879291d67e1389 ViewAboutNaCl
-0xfb4a178539bac6bd ViewSource
-0x91586aefc4a53dc7 VirtualKeyboardLoaded
-0x6932875212d36f57 WP_EditImage
-0x34a770eb3bbf5632 WP_Gallery
-0xe56fc587145f9d39 WebView.CaptureVisibleRegion
-0x462194a5096cab5e WebView.ClearData
-0x1058b3af68275a1d WebView.ExecuteScript
-0xbe313bfe6325dad0 WebView.Go
-0xa63d5515805909a0 WebView.Guest.ClearData
-0xd3e3c2a0e45dd70c WebView.Guest.OverrideUA
-0x5b65b0b495331715 WebView.Guest.PermissionAllow.PluginLoad
-0xa813e2cd71aa848d WebView.Guest.PermissionDeny.PluginLoad
-0x8d7ae1bf68c5a2fe WebView.Guest.PluginLoadAllowed
-0x26c605f6aa82b885 WebView.Guest.PluginLoadDenied
-0xdc50ad37450d2f2d WebView.Guest.PluginLoadRequest
-0x749d2199e73fa34c WebView.Guest.Terminate
-0xdeb501c069a2ff19 WebView.Reload
-0xdc14030aa71d5472 WebView.Stop
-0x16400bbfff3e7619 WebView.Terminate
-0x50de3f60387a3613 WebView.WebRequest.AddListener
-0x949730a9468e27a1 WebsiteSettings_CookiesDialogOpened
-0xddc2a5698e145d16 WebsiteSettings_Opened
-0x75af94f65efafada Win8DesktopRestart
-0x8f88175ece0f933b Win8MetroRestart
-0x831a2e98aa899122 WindowSelector_Overview
-0x5f6808f9852ea6b0 WindowSelector_Selection
-0x10aeb586cdc4c632 WorkerProcess_BadProcessToKill
-0x554103fbf5582ee0 ZoomMinus
-0x82d278b1f2e78bcd ZoomMinus_AtMinimum
-0x4344cd22d03f6800 ZoomNormal
-0x860db3714d502e03 ZoomPlus
-0x644dbac8a6242f3f ZoomPlus_AtMaximum
-0xbfb6af70a0626dcd justifyFull
-0x2768e36e23ebef80 mceAddControl
-0xfe4c8898ac25e705 mceBeginUndoLevel
-0x02650dd15c064422 mceEndUndoLevel
-0x2e58ba22e02b06bb mceInsertContent
-0xd311c8d6ed1b9762 mceRepaint
-0xf4c75cafe4330950 mceSave
-0xfb7010f719b412c4 mceSetStyleInfo
-0x7174576438022591 styleWithCSS
-0xe302ba33f0b1d69e webapps.AddShortcut.AppShortcut
-0x4ba515be980efd9c webapps.AddShortcut.AppShortcutApple
-0xcc8255164f6f088c webapps.AddShortcut.Bookmark
diff --git a/chromium/tools/metrics/actions/extract_actions.py b/chromium/tools/metrics/actions/extract_actions.py
deleted file mode 100755
index b12e78fdaeb..00000000000
--- a/chromium/tools/metrics/actions/extract_actions.py
+++ /dev/null
@@ -1,636 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright (c) 2012 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.
-
-"""Extract UserMetrics "actions" strings from the Chrome source.
-
-This program generates the list of known actions we expect to see in the
-user behavior logs. It walks the Chrome source, looking for calls to
-UserMetrics functions, extracting actions and warning on improper calls,
-as well as generating the lists of possible actions in situations where
-there are many possible actions.
-
-See also:
- content/browser/user_metrics.h
- http://wiki.corp.google.com/twiki/bin/view/Main/ChromeUserExperienceMetrics
-
-If run with a "--hash" argument, chromeactions.txt will be updated.
-"""
-
-__author__ = 'evanm (Evan Martin)'
-
-import hashlib
-from HTMLParser import HTMLParser
-import os
-import re
-import sys
-
-sys.path.insert(1, os.path.join(sys.path[0], '..', '..', 'python'))
-from google import path_utils
-
-# Files that are known to use content::RecordComputedAction(), which means
-# they require special handling code in this script.
-# To add a new file, add it to this list and add the appropriate logic to
-# generate the known actions to AddComputedActions() below.
-KNOWN_COMPUTED_USERS = (
- 'back_forward_menu_model.cc',
- 'options_page_view.cc',
- 'render_view_host.cc', # called using webkit identifiers
- 'user_metrics.cc', # method definition
- 'new_tab_ui.cc', # most visited clicks 1-9
- 'extension_metrics_module.cc', # extensions hook for user metrics
- 'safe_browsing_blocking_page.cc', # various interstitial types and actions
- 'language_options_handler_common.cc', # languages and input methods in CrOS
- 'cros_language_options_handler.cc', # languages and input methods in CrOS
- 'about_flags.cc', # do not generate a warning; see AddAboutFlagsActions()
- 'external_metrics.cc', # see AddChromeOSActions()
- 'core_options_handler.cc', # see AddWebUIActions()
- 'browser_render_process_host.cc', # see AddRendererActions()
- 'render_thread_impl.cc', # impl of RenderThread::RecordComputedAction()
- 'render_process_host_impl.cc', # browser side impl for
- # RenderThread::RecordComputedAction()
- 'mock_render_thread.cc', # mock of RenderThread::RecordComputedAction()
- 'ppb_pdf_impl.cc', # see AddClosedSourceActions()
- 'pepper_pdf_host.cc', # see AddClosedSourceActions()
- 'key_systems_support_uma.cc', # See AddKeySystemSupportActions()
-)
-
-# Language codes used in Chrome. The list should be updated when a new
-# language is added to app/l10n_util.cc, as follows:
-#
-# % (cat app/l10n_util.cc | \
-# perl -n0e 'print $1 if /kAcceptLanguageList.*?\{(.*?)\}/s' | \
-# perl -nle 'print $1, if /"(.*)"/'; echo 'es-419') | \
-# sort | perl -pe "s/(.*)\n/'\$1', /" | \
-# fold -w75 -s | perl -pe 's/^/ /;s/ $//'; echo
-#
-# The script extracts language codes from kAcceptLanguageList, but es-419
-# (Spanish in Latin America) is an exception.
-LANGUAGE_CODES = (
- 'af', 'am', 'ar', 'az', 'be', 'bg', 'bh', 'bn', 'br', 'bs', 'ca', 'co',
- 'cs', 'cy', 'da', 'de', 'de-AT', 'de-CH', 'de-DE', 'el', 'en', 'en-AU',
- 'en-CA', 'en-GB', 'en-NZ', 'en-US', 'en-ZA', 'eo', 'es', 'es-419', 'et',
- 'eu', 'fa', 'fi', 'fil', 'fo', 'fr', 'fr-CA', 'fr-CH', 'fr-FR', 'fy',
- 'ga', 'gd', 'gl', 'gn', 'gu', 'ha', 'haw', 'he', 'hi', 'hr', 'hu', 'hy',
- 'ia', 'id', 'is', 'it', 'it-CH', 'it-IT', 'ja', 'jw', 'ka', 'kk', 'km',
- 'kn', 'ko', 'ku', 'ky', 'la', 'ln', 'lo', 'lt', 'lv', 'mk', 'ml', 'mn',
- 'mo', 'mr', 'ms', 'mt', 'nb', 'ne', 'nl', 'nn', 'no', 'oc', 'om', 'or',
- 'pa', 'pl', 'ps', 'pt', 'pt-BR', 'pt-PT', 'qu', 'rm', 'ro', 'ru', 'sd',
- 'sh', 'si', 'sk', 'sl', 'sn', 'so', 'sq', 'sr', 'st', 'su', 'sv', 'sw',
- 'ta', 'te', 'tg', 'th', 'ti', 'tk', 'to', 'tr', 'tt', 'tw', 'ug', 'uk',
- 'ur', 'uz', 'vi', 'xh', 'yi', 'yo', 'zh', 'zh-CN', 'zh-TW', 'zu',
-)
-
-# Input method IDs used in Chrome OS. The list should be updated when a
-# new input method is added to
-# chrome/browser/chromeos/input_method/input_methods.txt in the Chrome tree, as
-# follows:
-#
-# % sort chrome/browser/chromeos/input_method/input_methods.txt | \
-# perl -ne "print \"'\$1', \" if /^([^#]+?)\s/" | \
-# fold -w75 -s | perl -pe 's/^/ /;s/ $//'; echo
-#
-# The script extracts input method IDs from input_methods.txt.
-INPUT_METHOD_IDS = (
- 'english-m', 'm17n:am:sera', 'm17n:ar:kbd', 'm17n:bn:itrans',
- 'm17n:fa:isiri', 'm17n:gu:itrans', 'm17n:hi:itrans', 'm17n:kn:itrans',
- 'm17n:ml:itrans', 'm17n:mr:itrans', 'm17n:ta:inscript', 'm17n:ta:itrans',
- 'm17n:ta:phonetic', 'm17n:ta:tamil99', 'm17n:ta:typewriter',
- 'm17n:te:itrans', 'm17n:th:kesmanee', 'm17n:th:pattachote',
- 'm17n:th:tis820', 'm17n:vi:tcvn', 'm17n:vi:telex', 'm17n:vi:viqr',
- 'm17n:vi:vni', 'm17n:zh:cangjie', 'm17n:zh:quick', 'mozc', 'mozc-chewing',
- 'mozc-dv', 'mozc-hangul', 'mozc-jp', 'pinyin', 'pinyin-dv', 'xkb:be::fra',
- 'xkb:be::ger', 'xkb:be::nld', 'xkb:bg::bul', 'xkb:bg:phonetic:bul',
- 'xkb:br::por', 'xkb:ca::fra', 'xkb:ca:eng:eng', 'xkb:ch::ger',
- 'xkb:ch:fr:fra', 'xkb:cz::cze', 'xkb:de::ger', 'xkb:de:neo:ger',
- 'xkb:dk::dan', 'xkb:ee::est', 'xkb:es::spa', 'xkb:es:cat:cat',
- 'xkb:fi::fin', 'xkb:fr::fra', 'xkb:gb:dvorak:eng', 'xkb:gb:extd:eng',
- 'xkb:gr::gre', 'xkb:hr::scr', 'xkb:hu::hun', 'xkb:il::heb', 'xkb:it::ita',
- 'xkb:jp::jpn', 'xkb:kr:kr104:kor', 'xkb:latam::spa', 'xkb:lt::lit',
- 'xkb:lv:apostrophe:lav', 'xkb:no::nob', 'xkb:pl::pol', 'xkb:pt::por',
- 'xkb:ro::rum', 'xkb:rs::srp', 'xkb:ru::rus', 'xkb:ru:phonetic:rus',
- 'xkb:se::swe', 'xkb:si::slv', 'xkb:sk::slo', 'xkb:tr::tur', 'xkb:ua::ukr',
- 'xkb:us::eng', 'xkb:us:altgr-intl:eng', 'xkb:us:colemak:eng',
- 'xkb:us:dvorak:eng', 'xkb:us:intl:eng',
-)
-
-# The path to the root of the repository.
-REPOSITORY_ROOT = os.path.join(path_utils.ScriptDir(), '..', '..', '..')
-
-number_of_files_total = 0
-
-
-def AddComputedActions(actions):
- """Add computed actions to the actions list.
-
- Arguments:
- actions: set of actions to add to.
- """
-
- # Actions for back_forward_menu_model.cc.
- for dir in ('BackMenu_', 'ForwardMenu_'):
- actions.add(dir + 'ShowFullHistory')
- actions.add(dir + 'Popup')
- for i in range(1, 20):
- actions.add(dir + 'HistoryClick' + str(i))
- actions.add(dir + 'ChapterClick' + str(i))
-
- # Actions for new_tab_ui.cc.
- for i in range(1, 10):
- actions.add('MostVisited%d' % i)
-
- # Actions for safe_browsing_blocking_page.cc.
- for interstitial in ('Phishing', 'Malware', 'Multiple'):
- for action in ('Show', 'Proceed', 'DontProceed', 'ForcedDontProceed'):
- actions.add('SBInterstitial%s%s' % (interstitial, action))
-
- # Actions for language_options_handler.cc (Chrome OS specific).
- for input_method_id in INPUT_METHOD_IDS:
- actions.add('LanguageOptions_DisableInputMethod_%s' % input_method_id)
- actions.add('LanguageOptions_EnableInputMethod_%s' % input_method_id)
- actions.add('InputMethodOptions_Open_%s' % input_method_id)
- for language_code in LANGUAGE_CODES:
- actions.add('LanguageOptions_UiLanguageChange_%s' % language_code)
- actions.add('LanguageOptions_SpellCheckLanguageChange_%s' % language_code)
-
-def AddWebKitEditorActions(actions):
- """Add editor actions from editor_client_impl.cc.
-
- Arguments:
- actions: set of actions to add to.
- """
- action_re = re.compile(r'''\{ [\w']+, +\w+, +"(.*)" +\},''')
-
- editor_file = os.path.join(REPOSITORY_ROOT, 'webkit', 'api', 'src',
- 'EditorClientImpl.cc')
- for line in open(editor_file):
- match = action_re.search(line)
- if match: # Plain call to RecordAction
- actions.add(match.group(1))
-
-def AddClosedSourceActions(actions):
- """Add actions that are in code which is not checked out by default
-
- Arguments
- actions: set of actions to add to.
- """
- actions.add('PDF.FitToHeightButton')
- actions.add('PDF.FitToWidthButton')
- actions.add('PDF.LoadFailure')
- actions.add('PDF.LoadSuccess')
- actions.add('PDF.PreviewDocumentLoadFailure')
- actions.add('PDF.PrintButton')
- actions.add('PDF.PrintPage')
- actions.add('PDF.SaveButton')
- actions.add('PDF.ZoomFromBrowser')
- actions.add('PDF.ZoomInButton')
- actions.add('PDF.ZoomOutButton')
- actions.add('PDF_Unsupported_3D')
- actions.add('PDF_Unsupported_Attachment')
- actions.add('PDF_Unsupported_Bookmarks')
- actions.add('PDF_Unsupported_Digital_Signature')
- actions.add('PDF_Unsupported_Movie')
- actions.add('PDF_Unsupported_Portfolios_Packages')
- actions.add('PDF_Unsupported_Rights_Management')
- actions.add('PDF_Unsupported_Screen')
- actions.add('PDF_Unsupported_Shared_Form')
- actions.add('PDF_Unsupported_Shared_Review')
- actions.add('PDF_Unsupported_Sound')
- actions.add('PDF_Unsupported_XFA')
-
-def AddAndroidActions(actions):
- """Add actions that are used by Chrome on Android.
-
- Arguments
- actions: set of actions to add to.
- """
- actions.add('Cast_Sender_CastEnterFullscreen');
- actions.add('Cast_Sender_CastDeviceSelected');
- actions.add('Cast_Sender_YouTubeDeviceSelected');
- actions.add('Cast_Sender_CastPlayRequested');
- actions.add('DataReductionProxy_PromoDisplayed');
- actions.add('DataReductionProxy_PromoLearnMore');
- actions.add('DataReductionProxy_TurnedOn');
- actions.add('DataReductionProxy_TurnedOnFromPromo');
- actions.add('DataReductionProxy_TurnedOff');
- actions.add('MobileActionBarShown')
- actions.add('MobileBeamCallbackSuccess')
- actions.add('MobileBeamInvalidAppState')
- actions.add('MobileBreakpadUploadAttempt')
- actions.add('MobileBreakpadUploadFailure')
- actions.add('MobileBreakpadUploadSuccess')
- actions.add('MobileContextMenuCopyImageLinkAddress')
- actions.add('MobileContextMenuCopyLinkAddress')
- actions.add('MobileContextMenuCopyLinkText')
- actions.add('MobileContextMenuDownloadImage')
- actions.add('MobileContextMenuDownloadLink')
- actions.add('MobileContextMenuDownloadVideo')
- actions.add('MobileContextMenuImage')
- actions.add('MobileContextMenuLink')
- actions.add('MobileContextMenuOpenImageInNewTab')
- actions.add('MobileContextMenuOpenLink')
- actions.add('MobileContextMenuOpenLinkInIncognito')
- actions.add('MobileContextMenuOpenLinkInNewTab')
- actions.add('MobileContextMenuSaveImage')
- actions.add('MobileContextMenuSearchByImage')
- actions.add('MobileContextMenuShareLink')
- actions.add('MobileContextMenuText')
- actions.add('MobileContextMenuVideo')
- actions.add('MobileContextMenuViewImage')
- actions.add('MobileFocusedFakeboxOnNtp')
- actions.add('MobileFocusedOmniboxNotOnNtp')
- actions.add('MobileFocusedOmniboxOnNtp')
- actions.add('MobileFreAttemptSignIn')
- actions.add('MobileFreSignInSuccessful')
- actions.add('MobileFreSkipSignIn')
- actions.add('MobileMenuAddToBookmarks')
- actions.add('MobileMenuAllBookmarks')
- actions.add('MobileMenuBack')
- actions.add('MobileMenuCloseAllTabs')
- actions.add('MobileMenuCloseTab')
- actions.add('MobileMenuFeedback')
- actions.add('MobileMenuFindInPage')
- actions.add('MobileMenuForward')
- actions.add('MobileMenuFullscreen')
- actions.add('MobileMenuNewIncognitoTab')
- actions.add('MobileMenuNewTab')
- actions.add('MobileMenuOpenTabs')
- actions.add('MobileMenuQuit')
- actions.add('MobileMenuReload')
- actions.add('MobileMenuSettings')
- actions.add('MobileMenuShare')
- actions.add('MobileMenuShow')
- actions.add('MobileNTPBookmark')
- actions.add('MobileNTPForeignSession')
- actions.add('MobileNTPMostVisited')
- actions.add('MobileNTPRecentlyClosed')
- actions.add('MobileNTPSwitchToBookmarks')
- actions.add('MobileNTPSwitchToIncognito')
- actions.add('MobileNTPSwitchToMostVisited')
- actions.add('MobileNTPSwitchToOpenTabs')
- actions.add('MobileNewTabOpened')
- actions.add('MobileOmniboxSearch')
- actions.add('MobileOmniboxVoiceSearch')
- actions.add('MobileOmniboxRefineSuggestion')
- actions.add('MobilePageLoaded')
- actions.add('MobilePageLoadedDesktopUserAgent')
- actions.add('MobilePageLoadedWithKeyboard')
- actions.add('MobileReceivedExternalIntent')
- actions.add('MobileRendererCrashed')
- actions.add('MobileShortcutAllBookmarks')
- actions.add('MobileShortcutFindInPage')
- actions.add('MobileShortcutNewIncognitoTab')
- actions.add('MobileShortcutNewTab')
- actions.add('MobileSideSwipeFinished')
- actions.add('MobileStackViewCloseTab')
- actions.add('MobileStackViewSwipeCloseTab')
- actions.add('MobileTabClobbered')
- actions.add('MobileTabClosed')
- actions.add('MobileTabStripCloseTab')
- actions.add('MobileTabStripNewTab')
- actions.add('MobileTabSwitched')
- actions.add('MobileToolbarBack')
- actions.add('MobileToolbarForward')
- actions.add('MobileToolbarNewTab')
- actions.add('MobileToolbarReload')
- actions.add('MobileToolbarShowMenu')
- actions.add('MobileToolbarShowStackView')
- actions.add('MobileToolbarStackViewNewTab')
- actions.add('MobileToolbarToggleBookmark')
- actions.add('MobileUsingMenuByHwButtonDragging')
- actions.add('MobileUsingMenuByHwButtonTap')
- actions.add('MobileUsingMenuBySwButtonDragging')
- actions.add('MobileUsingMenuBySwButtonTap')
- actions.add('SystemBack')
- actions.add('SystemBackForNavigation')
-
-def AddAboutFlagsActions(actions):
- """This parses the experimental feature flags for UMA actions.
-
- Arguments:
- actions: set of actions to add to.
- """
- about_flags = os.path.join(REPOSITORY_ROOT, 'chrome', 'browser',
- 'about_flags.cc')
- flag_name_re = re.compile(r'\s*"([0-9a-zA-Z\-_]+)",\s*// FLAGS:RECORD_UMA')
- for line in open(about_flags):
- match = flag_name_re.search(line)
- if match:
- actions.add("AboutFlags_" + match.group(1))
- # If the line contains the marker but was not matched by the regex, put up
- # an error if the line is not a comment.
- elif 'FLAGS:RECORD_UMA' in line and line[0:2] != '//':
- print >>sys.stderr, 'WARNING: This line is marked for recording ' + \
- 'about:flags metrics, but is not in the proper format:\n' + line
-
-def AddBookmarkManagerActions(actions):
- """Add actions that are used by BookmarkManager.
-
- Arguments
- actions: set of actions to add to.
- """
- actions.add('BookmarkManager_Command_AddPage')
- actions.add('BookmarkManager_Command_Copy')
- actions.add('BookmarkManager_Command_Cut')
- actions.add('BookmarkManager_Command_Delete')
- actions.add('BookmarkManager_Command_Edit')
- actions.add('BookmarkManager_Command_Export')
- actions.add('BookmarkManager_Command_Import')
- actions.add('BookmarkManager_Command_NewFolder')
- actions.add('BookmarkManager_Command_OpenIncognito')
- actions.add('BookmarkManager_Command_OpenInNewTab')
- actions.add('BookmarkManager_Command_OpenInNewWindow')
- actions.add('BookmarkManager_Command_OpenInSame')
- actions.add('BookmarkManager_Command_Paste')
- actions.add('BookmarkManager_Command_ShowInFolder')
- actions.add('BookmarkManager_Command_Sort')
- actions.add('BookmarkManager_Command_UndoDelete')
- actions.add('BookmarkManager_Command_UndoGlobal')
- actions.add('BookmarkManager_Command_UndoNone')
-
- actions.add('BookmarkManager_NavigateTo_BookmarkBar')
- actions.add('BookmarkManager_NavigateTo_Mobile')
- actions.add('BookmarkManager_NavigateTo_Other')
- actions.add('BookmarkManager_NavigateTo_Recent')
- actions.add('BookmarkManager_NavigateTo_Search')
- actions.add('BookmarkManager_NavigateTo_SubFolder')
-
-def AddChromeOSActions(actions):
- """Add actions reported by non-Chrome processes in Chrome OS.
-
- Arguments:
- actions: set of actions to add to.
- """
- # Actions sent by Chrome OS update engine.
- actions.add('Updater.ServerCertificateChanged')
- actions.add('Updater.ServerCertificateFailed')
-
- # Actions sent by Chrome OS cryptohome.
- actions.add('Cryptohome.PKCS11InitFail')
-
-def AddExtensionActions(actions):
- """Add actions reported by extensions via chrome.metricsPrivate API.
-
- Arguments:
- actions: set of actions to add to.
- """
- # Actions sent by Chrome OS File Browser.
- actions.add('FileBrowser.CreateNewFolder')
- actions.add('FileBrowser.PhotoEditor.Edit')
- actions.add('FileBrowser.PhotoEditor.View')
- actions.add('FileBrowser.SuggestApps.ShowDialog')
-
- # Actions sent by Google Now client.
- actions.add('GoogleNow.MessageClicked')
- actions.add('GoogleNow.ButtonClicked0')
- actions.add('GoogleNow.ButtonClicked1')
- actions.add('GoogleNow.Dismissed')
-
- # Actions sent by Chrome Connectivity Diagnostics.
- actions.add('ConnectivityDiagnostics.LaunchSource.OfflineChromeOS')
- actions.add('ConnectivityDiagnostics.LaunchSource.WebStore')
- actions.add('ConnectivityDiagnostics.UA.LogsShown')
- actions.add('ConnectivityDiagnostics.UA.PassingTestsShown')
- actions.add('ConnectivityDiagnostics.UA.SettingsShown')
- actions.add('ConnectivityDiagnostics.UA.TestResultExpanded')
- actions.add('ConnectivityDiagnostics.UA.TestSuiteRun')
-
-def GrepForActions(path, actions):
- """Grep a source file for calls to UserMetrics functions.
-
- Arguments:
- path: path to the file
- actions: set of actions to add to
- """
- global number_of_files_total
- number_of_files_total = number_of_files_total + 1
- # we look for the UserMetricsAction structure constructor
- # this should be on one line
- action_re = re.compile(r'[^a-zA-Z]UserMetricsAction\("([^"]*)')
- malformed_action_re = re.compile(r'[^a-zA-Z]UserMetricsAction\([^"]')
- computed_action_re = re.compile(r'RecordComputedAction')
- line_number = 0
- for line in open(path):
- line_number = line_number + 1
- match = action_re.search(line)
- if match: # Plain call to RecordAction
- actions.add(match.group(1))
- elif malformed_action_re.search(line):
- # Warn if this line is using RecordAction incorrectly.
- print >>sys.stderr, ('WARNING: %s has malformed call to RecordAction'
- ' at %d' % (path, line_number))
- elif computed_action_re.search(line):
- # Warn if this file shouldn't be calling RecordComputedAction.
- if os.path.basename(path) not in KNOWN_COMPUTED_USERS:
- print >>sys.stderr, ('WARNING: %s has RecordComputedAction at %d' %
- (path, line_number))
-
-class WebUIActionsParser(HTMLParser):
- """Parses an HTML file, looking for all tags with a 'metric' attribute.
- Adds user actions corresponding to any metrics found.
-
- Arguments:
- actions: set of actions to add to
- """
- def __init__(self, actions):
- HTMLParser.__init__(self)
- self.actions = actions
-
- def handle_starttag(self, tag, attrs):
- # We only care to examine tags that have a 'metric' attribute.
- attrs = dict(attrs)
- if not 'metric' in attrs:
- return
-
- # Boolean metrics have two corresponding actions. All other metrics have
- # just one corresponding action. By default, we check the 'dataType'
- # attribute.
- is_boolean = ('dataType' in attrs and attrs['dataType'] == 'boolean')
- if 'type' in attrs and attrs['type'] in ('checkbox', 'radio'):
- if attrs['type'] == 'checkbox':
- is_boolean = True
- else:
- # Radio buttons are boolean if and only if their values are 'true' or
- # 'false'.
- assert(attrs['type'] == 'radio')
- if 'value' in attrs and attrs['value'] in ['true', 'false']:
- is_boolean = True
-
- if is_boolean:
- self.actions.add(attrs['metric'] + '_Enable')
- self.actions.add(attrs['metric'] + '_Disable')
- else:
- self.actions.add(attrs['metric'])
-
-def GrepForWebUIActions(path, actions):
- """Grep a WebUI source file for elements with associated metrics.
-
- Arguments:
- path: path to the file
- actions: set of actions to add to
- """
- close_called = False
- try:
- parser = WebUIActionsParser(actions)
- parser.feed(open(path).read())
- # An exception can be thrown by parser.close(), so do it in the try to
- # ensure the path of the file being parsed gets printed if that happens.
- close_called = True
- parser.close()
- except Exception, e:
- print "Error encountered for path %s" % path
- raise e
- finally:
- if not close_called:
- parser.close()
-
-def WalkDirectory(root_path, actions, extensions, callback):
- for path, dirs, files in os.walk(root_path):
- if '.svn' in dirs:
- dirs.remove('.svn')
- if '.git' in dirs:
- dirs.remove('.git')
- for file in files:
- ext = os.path.splitext(file)[1]
- if ext in extensions:
- callback(os.path.join(path, file), actions)
-
-def AddLiteralActions(actions):
- """Add literal actions specified via calls to UserMetrics functions.
-
- Arguments:
- actions: set of actions to add to.
- """
- EXTENSIONS = ('.cc', '.mm', '.c', '.m')
-
- # Walk the source tree to process all .cc files.
- ash_root = os.path.normpath(os.path.join(REPOSITORY_ROOT, 'ash'))
- WalkDirectory(ash_root, actions, EXTENSIONS, GrepForActions)
- chrome_root = os.path.normpath(os.path.join(REPOSITORY_ROOT, 'chrome'))
- WalkDirectory(chrome_root, actions, EXTENSIONS, GrepForActions)
- content_root = os.path.normpath(os.path.join(REPOSITORY_ROOT, 'content'))
- WalkDirectory(content_root, actions, EXTENSIONS, GrepForActions)
- webkit_root = os.path.normpath(os.path.join(REPOSITORY_ROOT, 'webkit'))
- WalkDirectory(os.path.join(webkit_root, 'glue'), actions, EXTENSIONS,
- GrepForActions)
- WalkDirectory(os.path.join(webkit_root, 'port'), actions, EXTENSIONS,
- GrepForActions)
-
-def AddWebUIActions(actions):
- """Add user actions defined in WebUI files.
-
- Arguments:
- actions: set of actions to add to.
- """
- resources_root = os.path.join(REPOSITORY_ROOT, 'chrome', 'browser',
- 'resources')
- WalkDirectory(resources_root, actions, ('.html'), GrepForWebUIActions)
-
-def AddHistoryPageActions(actions):
- """Add actions that are used in History page.
-
- Arguments
- actions: set of actions to add to.
- """
- actions.add('HistoryPage_BookmarkStarClicked')
- actions.add('HistoryPage_EntryMenuRemoveFromHistory')
- actions.add('HistoryPage_EntryLinkClick')
- actions.add('HistoryPage_EntryLinkRightClick')
- actions.add('HistoryPage_SearchResultClick')
- actions.add('HistoryPage_EntryMenuShowMoreFromSite')
- actions.add('HistoryPage_NewestHistoryClick')
- actions.add('HistoryPage_NewerHistoryClick')
- actions.add('HistoryPage_OlderHistoryClick')
- actions.add('HistoryPage_Search')
- actions.add('HistoryPage_InitClearBrowsingData')
- actions.add('HistoryPage_RemoveSelected')
- actions.add('HistoryPage_SearchResultRemove')
- actions.add('HistoryPage_ConfirmRemoveSelected')
- actions.add('HistoryPage_CancelRemoveSelected')
-
-def AddKeySystemSupportActions(actions):
- """Add actions that are used for key system support metrics.
-
- Arguments
- actions: set of actions to add to.
- """
- actions.add('KeySystemSupport.Widevine.Queried')
- actions.add('KeySystemSupport.WidevineWithType.Queried')
- actions.add('KeySystemSupport.Widevine.Supported')
- actions.add('KeySystemSupport.WidevineWithType.Supported')
-
-def AddAutomaticResetBannerActions(actions):
- """Add actions that are used for the automatic profile settings reset banner
- in chrome://settings.
-
- Arguments
- actions: set of actions to add to.
- """
- actions.add('AutomaticReset_WebUIBanner_BannerShown')
- actions.add('AutomaticReset_WebUIBanner_ManuallyClosed')
- actions.add('AutomaticReset_WebUIBanner_ResetClicked')
-
-def main(argv):
- if '--hash' in argv:
- hash_output = True
- else:
- hash_output = False
- print >>sys.stderr, "WARNING: If you added new UMA tags, you must" + \
- " use the --hash option to update chromeactions.txt."
- # if we do a hash output, we want to only append NEW actions, and we know
- # the file we want to work on
- actions = set()
-
- chromeactions_path = os.path.join(path_utils.ScriptDir(), "chromeactions.txt")
-
- if hash_output:
- f = open(chromeactions_path)
- for line in f:
- part = line.rpartition("\t")
- part = part[2].strip()
- actions.add(part)
- f.close()
-
-
- AddComputedActions(actions)
- # TODO(fmantek): bring back webkit editor actions.
- # AddWebKitEditorActions(actions)
- AddAboutFlagsActions(actions)
- AddWebUIActions(actions)
-
- AddLiteralActions(actions)
-
- # print "Scanned {0} number of files".format(number_of_files_total)
- # print "Found {0} entries".format(len(actions))
-
- AddAndroidActions(actions)
- AddAutomaticResetBannerActions(actions)
- AddBookmarkManagerActions(actions)
- AddChromeOSActions(actions)
- AddClosedSourceActions(actions)
- AddExtensionActions(actions)
- AddHistoryPageActions(actions)
- AddKeySystemSupportActions(actions)
-
- if hash_output:
- f = open(chromeactions_path, "wb")
-
-
- # Print out the actions as a sorted list.
- for action in sorted(actions):
- if hash_output:
- hash = hashlib.md5()
- hash.update(action)
- print >>f, '0x%s\t%s' % (hash.hexdigest()[:16], action)
- else:
- print action
-
- if hash_output:
- print "Done. Do not forget to add chromeactions.txt to your changelist"
- return 0
-
-
-if '__main__' == __name__:
- sys.exit(main(sys.argv))
diff --git a/chromium/tools/metrics/actions/extract_actions.sh b/chromium/tools/metrics/actions/extract_actions.sh
deleted file mode 100755
index 88b6d2fcdf5..00000000000
--- a/chromium/tools/metrics/actions/extract_actions.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-
-# Copyright (c) 2009 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.
-
-system_root=`cygpath "$SYSTEMROOT"`
-export PATH="/usr/bin:$system_root/system32:$system_root:$system_root/system32/WBEM"
-
-exec_dir=$(dirname $0)
-
-"$exec_dir/../../../third_party/python_24/python.exe" \
- "$exec_dir/extract_actions.py" "$@"
diff --git a/chromium/tools/metrics/histograms/PRESUBMIT.py b/chromium/tools/metrics/histograms/PRESUBMIT.py
deleted file mode 100644
index a4b4ee74b03..00000000000
--- a/chromium/tools/metrics/histograms/PRESUBMIT.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# 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.
-
-"""
-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
-for more details on the presubmit API built into gcl.
-"""
-
-
-def CheckChange(input_api, output_api):
- """Checks that histograms.xml is pretty-printed and well-formatted."""
- for f in input_api.AffectedTextFiles():
- p = f.AbsoluteLocalPath()
- if (input_api.basename(p) == 'histograms.xml'
- and input_api.os_path.dirname(p) == input_api.PresubmitLocalPath()):
- cwd = input_api.os_path.dirname(p)
- exit_code = input_api.subprocess.call(
- ['python', 'pretty_print.py', '--presubmit'], cwd=cwd)
- if exit_code != 0:
- return [output_api.PresubmitError(
- 'histograms.xml is not formatted correctly; run pretty_print.py '
- 'to fix')]
-
- exit_code = input_api.subprocess.call(
- ['python', 'validate_format.py'], cwd=cwd)
- if exit_code != 0:
- return [output_api.PresubmitError(
- 'histograms.xml is not well formatted; run validate_format.py '
- 'and fix the reported errors')]
- return []
-
-
-def CheckChangeOnUpload(input_api, output_api):
- return CheckChange(input_api, output_api)
-
-
-def CheckChangeOnCommit(input_api, output_api):
- return CheckChange(input_api, output_api)
diff --git a/chromium/tools/metrics/histograms/diffutil.py b/chromium/tools/metrics/histograms/diffutil.py
deleted file mode 100644
index 0350a58c8ec..00000000000
--- a/chromium/tools/metrics/histograms/diffutil.py
+++ /dev/null
@@ -1,47 +0,0 @@
-# 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.
-
-"""Utility functions for prompting user if changes automatically applied to some
-user-managed files are correct.
-"""
-
-import logging
-import os
-import webbrowser
-
-from difflib import HtmlDiff
-from tempfile import NamedTemporaryFile
-
-
-def PromptUserToAcceptDiff(old_text, new_text, prompt):
- """Displays a difference in two strings (old and new file contents) to the
- user and asks whether the new version is acceptable.
-
- Args:
- old_text: A string containing old file contents.
- new_text: A string containing new file contents.
- prompt: Text that should be displayed to the user, asking whether the new
- file contents should be accepted.
-
- Returns:
- True is user accepted the changes or there were no changes, False otherwise.
- """
- logging.info('Computing diff...')
- if old_text == new_text:
- logging.info('No changes detected')
- return True
- html_diff = HtmlDiff(wrapcolumn=80).make_file(
- old_text.splitlines(), new_text.splitlines(), fromdesc='Original',
- todesc='Updated', context=True, numlines=5)
- temp = NamedTemporaryFile(suffix='.html', delete=False)
- try:
- temp.write(html_diff)
- temp.close() # Close the file so the browser process can access it.
- webbrowser.open('file://' + temp.name)
- print prompt
- response = raw_input('(Y/n): ').strip().lower()
- finally:
- temp.close() # May be called on already closed file.
- os.remove(temp.name)
- return response == 'y' or response == ''
diff --git a/chromium/tools/metrics/histograms/extract_histograms.py b/chromium/tools/metrics/histograms/extract_histograms.py
deleted file mode 100644
index 6203e3b71a8..00000000000
--- a/chromium/tools/metrics/histograms/extract_histograms.py
+++ /dev/null
@@ -1,421 +0,0 @@
-# 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.
-
-"""Extract histogram names from the description XML file.
-
-For more information on the format of the XML file, which is self-documenting,
-see histograms.xml; however, here is a simple example to get you started. The
-XML below will generate the following five histograms:
-
- HistogramTime
- HistogramEnum
- HistogramEnum_Chrome
- HistogramEnum_IE
- HistogramEnum_Firefox
-
-<histogram-configuration>
-
-<histograms>
-
-<histogram name="HistogramTime" units="milliseconds">
- <summary>A brief description.</summary>
- <details>This is a more thorough description of this histogram.</details>
-</histogram>
-
-<histogram name="HistogramEnum" enum="MyEnumType">
- <summary>This histogram sports an enum value type.</summary>
-</histogram>
-
-</histograms>
-
-<enums>
-
-<enum name="MyEnumType">
- <summary>This is an example enum type, where the values mean little.</summary>
- <int value="1" label="FIRST_VALUE">This is the first value.</int>
- <int value="2" label="SECOND_VALUE">This is the second value.</int>
-</enum>
-
-</enums>
-
-<fieldtrials>
-
-<fieldtrial name="BrowserType">
- <group name="Chrome"/>
- <group name="IE"/>
- <group name="Firefox"/>
- <affected-histogram name="HistogramEnum"/>
-</fieldtrial>
-
-</fieldtrials>
-
-</histogram-configuration>
-
-"""
-
-import copy
-import logging
-import xml.dom.minidom
-
-
-MAX_FIELDTRIAL_DEPENDENCY_DEPTH = 5
-
-
-class Error(Exception):
- pass
-
-
-def _JoinChildNodes(tag):
- """Join child nodes into a single text.
-
- Applicable to leafs like 'summary' and 'detail'.
-
- Args:
- tag: parent node
-
- Returns:
- a string with concatenated nodes' text representation.
- """
- return ''.join(c.toxml() for c in tag.childNodes).strip()
-
-
-def _NormalizeString(s):
- """Normalizes a string (possibly of multiple lines) by replacing each
- whitespace sequence with a single space.
-
- Args:
- s: The string to normalize, e.g. ' \n a b c\n d '
-
- Returns:
- The normalized string, e.g. 'a b c d'
- """
- return ' '.join(s.split())
-
-
-def _NormalizeAllAttributeValues(node):
- """Recursively normalizes all tag attribute values in the given tree.
-
- Args:
- node: The minidom node to be normalized.
-
- Returns:
- The normalized minidom node.
- """
- if node.nodeType == xml.dom.minidom.Node.ELEMENT_NODE:
- for a in node.attributes.keys():
- node.attributes[a].value = _NormalizeString(node.attributes[a].value)
-
- for c in node.childNodes: _NormalizeAllAttributeValues(c)
- return node
-
-
-def _ExpandHistogramNameWithFieldTrial(group_name, histogram_name, fieldtrial):
- """Creates a new histogram name based on the field trial group.
-
- Args:
- group_name: The name of the field trial group. May be empty.
- histogram_name: The name of the histogram. May be of the form
- Group.BaseName or BaseName
- field_trial: The FieldTrial XML element.
-
- Returns:
- A string with the expanded histogram name.
-
- Raises:
- Error if the expansion can't be done.
- """
- if fieldtrial.hasAttribute('separator'):
- separator = fieldtrial.getAttribute('separator')
- else:
- separator = '_'
-
- if fieldtrial.hasAttribute('ordering'):
- ordering = fieldtrial.getAttribute('ordering')
- else:
- ordering = 'suffix'
- if ordering not in ['prefix', 'suffix']:
- logging.error('ordering needs to be prefix or suffix, value is %s' %
- ordering)
- raise Error()
-
- if not group_name:
- return histogram_name
-
- if ordering == 'suffix':
- return histogram_name + separator + group_name
-
- # For prefixes, the group_name is inserted between the "cluster" and the
- # "remainder", e.g. Foo.BarHist expanded with gamma becomes Foo.gamma_BarHist.
- sections = histogram_name.split('.')
- if len(sections) <= 1:
- logging.error(
- 'Prefix Field Trial expansions require histogram names which include a '
- 'dot separator. Histogram name is %s, and Field Trial is %s' %
- (histogram_name, fieldtrial.getAttribute('name')))
- raise Error()
-
- cluster = sections[0] + '.'
- remainder = '.'.join(sections[1:])
- return cluster + group_name + separator + remainder
-
-
-def _ExtractEnumsFromXmlTree(tree):
- """Extract all <enum> nodes in the tree into a dictionary."""
-
- enums = {}
- have_errors = False
-
- last_name = None
- for enum in tree.getElementsByTagName("enum"):
- if enum.getAttribute('type') != 'int':
- logging.error('Unknown enum type %s' % enum.getAttribute('type'))
- have_errors = True
- continue
-
- name = enum.getAttribute('name')
- if last_name is not None and name.lower() < last_name.lower():
- logging.error('Enums %s and %s are not in alphabetical order'
- % (last_name, name))
- have_errors = True
- last_name = name
-
- if name in enums:
- logging.error('Duplicate enum %s' % name)
- have_errors = True
- continue
-
- last_int_value = None
- enum_dict = {}
- enum_dict['name'] = name
- enum_dict['values'] = {}
-
- for int_tag in enum.getElementsByTagName("int"):
- value_dict = {}
- int_value = int(int_tag.getAttribute('value'))
- if last_int_value is not None and int_value < last_int_value:
- logging.error('Enum %s int values %d and %d are not in numerical order'
- % (name, last_int_value, int_value))
- have_errors = True
- last_int_value = int_value
- if int_value in enum_dict['values']:
- logging.error('Duplicate enum value %d for enum %s' % (int_value, name))
- have_errors = True
- continue
- value_dict['label'] = int_tag.getAttribute('label')
- value_dict['summary'] = _JoinChildNodes(int_tag)
- enum_dict['values'][int_value] = value_dict
-
- summary_nodes = enum.getElementsByTagName("summary")
- if len(summary_nodes) > 0:
- enum_dict['summary'] = _NormalizeString(_JoinChildNodes(summary_nodes[0]))
-
- enums[name] = enum_dict
-
- return enums, have_errors
-
-
-def _ExtractHistogramsFromXmlTree(tree, enums):
- """Extract all <histogram> nodes in the tree into a dictionary."""
-
- # Process the histograms. The descriptions can include HTML tags.
- histograms = {}
- have_errors = False
- last_name = None
- for histogram in tree.getElementsByTagName("histogram"):
- name = histogram.getAttribute('name')
- if last_name is not None and name.lower() < last_name.lower():
- logging.error('Histograms %s and %s are not in alphabetical order'
- % (last_name, name))
- have_errors = True
- last_name = name
- if name in histograms:
- logging.error('Duplicate histogram definition %s' % name)
- have_errors = True
- continue
- histograms[name] = histogram_entry = {}
-
- # Find <summary> tag.
- summary_nodes = histogram.getElementsByTagName("summary")
- if len(summary_nodes) > 0:
- histogram_entry['summary'] = _NormalizeString(
- _JoinChildNodes(summary_nodes[0]))
- else:
- histogram_entry['summary'] = 'TBD'
-
- # Find <obsolete> tag.
- obsolete_nodes = histogram.getElementsByTagName("obsolete")
- if len(obsolete_nodes) > 0:
- reason = _JoinChildNodes(obsolete_nodes[0])
- histogram_entry['obsolete'] = reason
-
- # Handle units.
- if histogram.hasAttribute('units'):
- histogram_entry['units'] = histogram.getAttribute('units')
-
- # Find <details> tag.
- details_nodes = histogram.getElementsByTagName("details")
- if len(details_nodes) > 0:
- histogram_entry['details'] = _NormalizeString(
- _JoinChildNodes(details_nodes[0]))
-
- # Handle enum types.
- if histogram.hasAttribute('enum'):
- enum_name = histogram.getAttribute('enum')
- if not enum_name in enums:
- logging.error('Unknown enum %s in histogram %s' % (enum_name, name))
- have_errors = True
- else:
- histogram_entry['enum'] = enums[enum_name]
-
- return histograms, have_errors
-
-
-def _UpdateHistogramsWithFieldTrialInformation(tree, histograms):
- """Process field trials' tags and combine with affected histograms.
-
- The histograms dictionary will be updated in-place by adding new histograms
- created by combining histograms themselves with field trials targetting these
- histograms.
-
- Args:
- tree: XML dom tree.
- histograms: a dictinary of histograms previously extracted from the tree;
-
- Returns:
- True if any errors were found.
- """
- have_errors = False
-
- # Verify order of fieldtrial fields first.
- last_name = None
- for fieldtrial in tree.getElementsByTagName("fieldtrial"):
- name = fieldtrial.getAttribute('name')
- if last_name is not None and name.lower() < last_name.lower():
- logging.error('Field trials %s and %s are not in alphabetical order'
- % (last_name, name))
- have_errors = True
- last_name = name
-
- # Field trials can depend on other field trials, so we need to be careful.
- # Make a temporary copy of the list of field trials to use as a queue.
- # Field trials whose dependencies have not yet been processed will get
- # relegated to the back of the queue to be processed later.
- reprocess_queue = []
- def GenerateFieldTrials():
- for f in tree.getElementsByTagName("fieldtrial"): yield 0, f
- for r, f in reprocess_queue: yield r, f
-
- for reprocess_count, fieldtrial in GenerateFieldTrials():
- # Check dependencies first
- dependencies_valid = True
- affected_histograms = fieldtrial.getElementsByTagName('affected-histogram')
- for affected_histogram in affected_histograms:
- histogram_name = affected_histogram.getAttribute('name')
- if not histogram_name in histograms:
- # Base histogram is missing
- dependencies_valid = False
- missing_dependency = histogram_name
- break
- if not dependencies_valid:
- if reprocess_count < MAX_FIELDTRIAL_DEPENDENCY_DEPTH:
- reprocess_queue.append( (reprocess_count + 1, fieldtrial) )
- continue
- else:
- logging.error('Field trial %s is missing its dependency %s'
- % (fieldtrial.getAttribute('name'),
- missing_dependency))
- have_errors = True
- continue
-
- name = fieldtrial.getAttribute('name')
- groups = fieldtrial.getElementsByTagName('group')
- group_labels = {}
- for group in groups:
- group_labels[group.getAttribute('name')] = group.getAttribute('label')
-
- last_histogram_name = None
- for affected_histogram in affected_histograms:
- histogram_name = affected_histogram.getAttribute('name')
- if (last_histogram_name is not None
- and histogram_name.lower() < last_histogram_name.lower()):
- logging.error('Affected histograms %s and %s of field trial %s are not '
- 'in alphabetical order'
- % (last_histogram_name, histogram_name, name))
- have_errors = True
- last_histogram_name = histogram_name
- base_description = histograms[histogram_name]
- with_groups = affected_histogram.getElementsByTagName('with-group')
- if len(with_groups) > 0:
- histogram_groups = with_groups
- else:
- histogram_groups = groups
- for group in histogram_groups:
- group_name = group.getAttribute('name')
- try:
- new_histogram_name = _ExpandHistogramNameWithFieldTrial(
- group_name, histogram_name, fieldtrial)
- if new_histogram_name != histogram_name:
- histograms[new_histogram_name] = copy.deepcopy(
- histograms[histogram_name])
-
- group_label = group_labels.get(group_name, '')
-
- if not 'fieldtrial_groups' in histograms[new_histogram_name]:
- histograms[new_histogram_name]['fieldtrial_groups'] = []
- histograms[new_histogram_name]['fieldtrial_groups'].append(group_name)
-
- if not 'fieldtrial_names' in histograms[new_histogram_name]:
- histograms[new_histogram_name]['fieldtrial_names'] = []
- histograms[new_histogram_name]['fieldtrial_names'].append(name)
-
- if not 'fieldtrial_labels' in histograms[new_histogram_name]:
- histograms[new_histogram_name]['fieldtrial_labels'] = []
- histograms[new_histogram_name]['fieldtrial_labels'].append(
- group_label)
-
- except Error:
- have_errors = True
-
- return have_errors
-
-
-def ExtractHistogramsFromFile(file_handle):
- """Compute the histogram names and descriptions from the XML representation.
-
- Args:
- file_handle: A file or file-like with XML content.
-
- Returns:
- a tuple of (histograms, status) where histograms is a dictionary mapping
- histogram names to dictionaries containing histogram descriptions and status
- is a boolean indicating if errros were encoutered in processing.
- """
- tree = xml.dom.minidom.parse(file_handle)
- _NormalizeAllAttributeValues(tree)
-
- enums, enum_errors = _ExtractEnumsFromXmlTree(tree)
- histograms, histogram_errors = _ExtractHistogramsFromXmlTree(tree, enums)
- update_errors = _UpdateHistogramsWithFieldTrialInformation(tree, histograms)
-
- return histograms, enum_errors or histogram_errors or update_errors
-
-
-def ExtractHistograms(filename):
- """Load histogram definitions from a disk file.
- Args:
- filename: a file path to load data from.
-
- Raises:
- Error if the file is not well-formatted.
- """
- with open(filename, 'r') as f:
- histograms, had_errors = ExtractHistogramsFromFile(f)
- if had_errors:
- logging.error('Error parsing %s' % filename)
- raise Error()
- return histograms
-
-
-def ExtractNames(histograms):
- return sorted(histograms.keys())
diff --git a/chromium/tools/metrics/histograms/find_unmapped_histograms.py b/chromium/tools/metrics/histograms/find_unmapped_histograms.py
deleted file mode 100644
index a72eac447ee..00000000000
--- a/chromium/tools/metrics/histograms/find_unmapped_histograms.py
+++ /dev/null
@@ -1,227 +0,0 @@
-# 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.
-
-"""Scans the Chromium source for histograms that are absent from histograms.xml.
-
-This is a heuristic scan, so a clean run of this script does not guarantee that
-all histograms in the Chromium source are properly mapped. Notably, field
-trials are entirely ignored by this script.
-
-"""
-
-import commands
-import extract_histograms
-import logging
-import optparse
-import os
-import re
-import sys
-
-
-ADJACENT_C_STRING_REGEX = re.compile(r"""
- (" # Opening quotation mark
- [^"]*) # Literal string contents
- " # Closing quotation mark
- \s* # Any number of spaces
- " # Another opening quotation mark
- """, re.VERBOSE)
-CONSTANT_REGEX = re.compile(r"""
- (\w*::)? # Optional namespace
- k[A-Z] # Match a constant identifier: 'k' followed by an uppercase letter
- \w* # Match the rest of the constant identifier
- $ # Make sure there's only the identifier, nothing else
- """, re.VERBOSE)
-HISTOGRAM_REGEX = re.compile(r"""
- UMA_HISTOGRAM # Match the shared prefix for standard UMA histogram macros
- \w* # Match the rest of the macro name, e.g. '_ENUMERATION'
- \( # Match the opening parenthesis for the macro
- \s* # Match any whitespace -- especially, any newlines
- ([^,]*) # Capture the first parameter to the macro
- , # Match the comma that delineates the first parameter
- """, re.VERBOSE)
-
-
-class DirectoryNotFoundException(Exception):
- """Base class to distinguish locally defined exceptions from standard ones."""
- def __init__(self, msg):
- self.msg = msg
-
- def __str__(self):
- return self.msg
-
-
-def changeWorkingDirectory(target_directory):
- """Changes the working directory to the given |target_directory|, which
- defaults to the root of the Chromium checkout.
-
- Returns:
- None
-
- Raises:
- DirectoryNotFoundException if the target directory cannot be found.
- """
- working_directory = os.getcwd()
- pos = working_directory.find(target_directory)
- if pos < 0:
- raise DirectoryNotFoundException('Could not find root directory "' +
- target_directory + '". ' +
- 'Please run this script within your ' +
- 'Chromium checkout.')
-
- os.chdir(working_directory[:pos + len(target_directory)])
-
-
-def collapseAdjacentCStrings(string):
- """Collapses any adjacent C strings into a single string.
-
- Useful to re-combine strings that were split across multiple lines to satisfy
- the 80-col restriction.
-
- Args:
- string: The string to recombine, e.g. '"Foo"\n "bar"'
-
- Returns:
- The collapsed string, e.g. "Foobar" for an input of '"Foo"\n "bar"'
- """
- while True:
- collapsed = ADJACENT_C_STRING_REGEX.sub(r'\1', string, count=1)
- if collapsed == string:
- return collapsed
-
- string = collapsed
-
-
-def logNonLiteralHistogram(filename, histogram):
- """Logs a statement warning about a non-literal histogram name found in the
- Chromium source.
-
- Filters out known acceptable exceptions.
-
- Args:
- filename: The filename for the file containing the histogram, e.g.
- 'chrome/browser/memory_details.cc'
- histogram: The expression that evaluates to the name of the histogram, e.g.
- '"FakeHistogram" + variant'
-
- Returns:
- None
- """
- # Ignore histogram macros, which typically contain backslashes so that they
- # can be formatted across lines.
- if '\\' in histogram:
- return
-
- # Field trials are unique within a session, so are effectively constants.
- if histogram.startswith('base::FieldTrial::MakeName'):
- return
-
- # Ignore histogram names that have been pulled out into C++ constants.
- if CONSTANT_REGEX.match(histogram):
- return
-
- # TODO(isherman): This is still a little noisy... needs further filtering to
- # reduce the noise.
- logging.warning('%s contains non-literal histogram name <%s>', filename,
- histogram)
-
-
-def readChromiumHistograms():
- """Searches the Chromium source for all histogram names.
-
- Also prints warnings for any invocations of the UMA_HISTOGRAM_* macros with
- names that might vary during a single run of the app.
-
- Returns:
- A set cotaining any found literal histogram names.
- """
- logging.info('Scanning Chromium source for histograms...')
-
- # Use git grep to find all invocations of the UMA_HISTOGRAM_* macros.
- # Examples:
- # 'path/to/foo.cc:420: UMA_HISTOGRAM_COUNTS_100("FooGroup.FooName",'
- # 'path/to/bar.cc:632: UMA_HISTOGRAM_ENUMERATION('
- locations = commands.getoutput('git gs UMA_HISTOGRAM').split('\n')
- filenames = set([location.split(':')[0] for location in locations])
-
- histograms = set()
- for filename in filenames:
- contents = ''
- with open(filename, 'r') as f:
- contents = f.read()
-
- matches = set(HISTOGRAM_REGEX.findall(contents))
- for histogram in matches:
- histogram = collapseAdjacentCStrings(histogram)
-
- # Must begin and end with a quotation mark.
- if histogram[0] != '"' or histogram[-1] != '"':
- logNonLiteralHistogram(filename, histogram)
- continue
-
- # Must not include any quotation marks other than at the beginning or end.
- histogram_stripped = histogram.strip('"')
- if '"' in histogram_stripped:
- logNonLiteralHistogram(filename, histogram)
- continue
-
- histograms.add(histogram_stripped)
-
- return histograms
-
-
-def readXmlHistograms(histograms_file_location):
- """Parses all histogram names from histograms.xml.
-
- Returns:
- A set cotaining the parsed histogram names.
- """
- logging.info('Reading histograms from %s...' % histograms_file_location)
- histograms = extract_histograms.ExtractHistograms(histograms_file_location)
- return set(extract_histograms.ExtractNames(histograms))
-
-
-def main():
- # Parse command line options
- parser = optparse.OptionParser()
- parser.add_option(
- '--root-directory', dest='root_directory', default='src',
- help='scan within DIRECTORY for histograms [optional, defaults to "src/"]',
- metavar='DIRECTORY')
- parser.add_option(
- '--histograms-file', dest='histograms_file_location',
- default='tools/metrics/histograms/histograms.xml',
- help='read histogram definitions from FILE (relative to --root-directory) '
- '[optional, defaults to "tools/histograms/histograms.xml"]',
- metavar='FILE')
-
- (options, args) = parser.parse_args()
- if args:
- parser.print_help()
- sys.exit(1)
-
- logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.INFO)
-
- try:
- changeWorkingDirectory(options.root_directory)
- except DirectoryNotFoundException as e:
- logging.error(e)
- sys.exit(1)
- chromium_histograms = readChromiumHistograms()
- xml_histograms = readXmlHistograms(options.histograms_file_location)
-
- unmapped_histograms = sorted(chromium_histograms - xml_histograms)
- if len(unmapped_histograms):
- logging.info('')
- logging.info('')
- logging.info('Histograms in Chromium but not in %s:' %
- options.histograms_file_location)
- logging.info('-------------------------------------------------')
- for histogram in unmapped_histograms:
- logging.info(' %s', histogram)
- else:
- logging.info('Success! No unmapped histograms found.')
-
-
-if __name__ == '__main__':
- main()
diff --git a/chromium/tools/metrics/histograms/histograms.xml b/chromium/tools/metrics/histograms/histograms.xml
deleted file mode 100644
index d4fc0cab5d8..00000000000
--- a/chromium/tools/metrics/histograms/histograms.xml
+++ /dev/null
@@ -1,33764 +0,0 @@
-<!--
-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.
--->
-
-<!--
-This file is used to generate a comprehensive list of Chrome histograms along
-with a detailed description for each histogram.
-
-Please pretty-print and validate your edits by running the pretty_print.py
-and validate_format.py scripts in the same directory as this file before
-uploading your change for review.
-
-Take a moment to page through the contents of this file. You will find
-three sections:
-
-* The histograms section describes base histograms, giving their name,
- and optionally their units or enum type, a short one-line summary,
- and optionally a more detailed description.
-* The enums section defines and documents the enumerated types referred to by
- the histograms.
-* The fieldtrials section defines active field trials and their groups, along
- with their descriptions.
-
-Each field trial lists the histograms that it affects. The complete list of
-histograms is computed by appending the field trial group names to each of
-the affected histograms. For example, define the following:
-
- <histogram name="FileLoadLatency"/>
-
- <fieldtrial name="SuperHttpExperiment">
- <group name="SuperHttpEnabled"/>
- <group name="SuperHttpDisabled"/>
- <affected-histogram name="FileLoadLatency"/>
- </fieldtrial>
-
-The complete list of histograms will be:
-
- FileLoadLatency
- FileLoadLatency_SuperHttpEnabled
- FileLoadLatency_SuperHttpDisabled
-
-Field trial definitions can currently be used in any situation where multiple
-suffixes need to be appended to a histogram name; they do not have to
-correspond to actual field trials in the Chrome source code.
-
-TODO(mlloyd): Refactor the XML so that field trials can be distinguished from
-other types of suffix sets.
--->
-
-<histogram-configuration>
-
-<!-- Histogram definitions -->
-
-<histograms>
-
-<histogram name="Accessibility.CrosAlwaysShowA11yMenu" enum="BooleanEnabled">
- <summary>
- Whether the Chrome OS Accessibility Menu is set to be shown regardless of
- the state of a11y features.(checked once 45 secs after startup).
- </summary>
-</histogram>
-
-<histogram name="Accessibility.CrosAutoclick" enum="BooleanEnabled">
- <summary>
- Whether the Chrome OS Autoclick feature is on (checked once 45 secs after
- startup).
- </summary>
-</histogram>
-
-<histogram name="Accessibility.CrosAutoclickDelay" units="milliseconds">
- <summary>
- If the user has enabled Autoclick, this is the delay set by the user for
- autoclicks to occur, in milliseconds.
- </summary>
-</histogram>
-
-<histogram name="Accessibility.CrosHighContrast" enum="BooleanEnabled">
- <summary>
- Whether the Chrome OS High Contrast mode feature is on (checked once 45 secs
- after startup).
- </summary>
-</histogram>
-
-<histogram name="Accessibility.CrosLargeCursor" enum="BooleanEnabled">
- <summary>
- Whether the Chrome OS Large Cursor feature is on (checked once 45 secs after
- startup).
- </summary>
-</histogram>
-
-<histogram name="Accessibility.CrosScreenMagnifier" enum="BooleanEnabled">
- <summary>
- Whether the Chrome OS Screen Magnifier feature is on (checked once 45 secs
- after startup).
- </summary>
-</histogram>
-
-<histogram name="Accessibility.CrosSpokenFeedback" enum="BooleanEnabled">
- <summary>
- Whether the Chrome OS Spoken Feedback feature is on (checked once 45 secs
- after startup).
- </summary>
-</histogram>
-
-<histogram name="Accessibility.CrosVirtualKeyboard" enum="BooleanEnabled">
- <summary>
- Whether the Chrome OS Virtual Keyboard feature is on (checked once 45 secs
- after startup).
- </summary>
-</histogram>
-
-<histogram name="Accessibility.InvertedColors" enum="BooleanEnabled">
- <summary>
- Whether Windows system settings show that high-contrast mode is enabled and
- the user has selected a light-on-dark color scheme (checked once 45 secs
- after startup). This causes Chrome to prompt the user with a bubble to
- optionally install a High Contrast extension and theme.
- </summary>
-</histogram>
-
-<histogram name="Accessibility.ManuallyEnabled" enum="BooleanEnabled">
- <summary>
- Whether Chrome has enabled accessibility support because the user passed the
- --force-renderer-accessibility flag on the command-line (checked once 45
- secs after startup).
- </summary>
-</histogram>
-
-<histogram name="Accessibility.State" enum="BooleanEnabled">
- <summary>
- Whether Chrome has enabled accessibility support because it detects
- supported assistive technology running, or due to being manually enabled via
- a command-line flag (checked once 45 secs after startup).
- </summary>
-</histogram>
-
-<histogram name="Accessibility.WinAudioDescription" enum="BooleanEnabled">
- <summary>
- Whether Windows system settings show that audio descriptions are enabled
- (checked once 45 secs after startup).
- </summary>
-</histogram>
-
-<histogram name="Accessibility.WinJAWS" enum="BooleanEnabled">
- <summary>
- Whether the third-party JAWS screen reader is running (checked once 45 secs
- after startup).
- </summary>
-</histogram>
-
-<histogram name="Accessibility.WinNVDA" enum="BooleanEnabled">
- <summary>
- Whether the third-party NVDA screen reader is running (checked once 45 secs
- after startup).
- </summary>
-</histogram>
-
-<histogram name="Accessibility.WinSAToGo" enum="BooleanEnabled">
- <summary>
- Whether the third-party System Access To Go screen reader is running
- (checked once 45 secs after startup).
- </summary>
-</histogram>
-
-<histogram name="Accessibility.WinScreenReader" enum="BooleanEnabled">
- <summary>
- Whether Windows system settings show that a screen reader is running
- (checked once 45 secs after startup). Note that this does not necessarily
- mean that Chrome has detected a supported screen reader and has enabled its
- accessibility mode.
- </summary>
-</histogram>
-
-<histogram name="Accessibility.WinStickyKeys" enum="BooleanEnabled">
- <summary>
- Whether Windows system settings show that Sticky Keys are enabled.
- </summary>
-</histogram>
-
-<histogram name="Accessibility.WinZoomText" enum="BooleanEnabled">
- <summary>
- Whether the third-party ZoomText screen magnifier is running.
- </summary>
-</histogram>
-
-<histogram name="Apps.AppLaunch" enum="AppLaunch">
- <summary>
- The number of times v2 packaged apps are launched grouped by
- extension_misc::AppLaunchBuckets. See also Extensions.AppLaunch.
- </summary>
-</histogram>
-
-<histogram name="Apps.AppLauncherPromo" enum="AppLauncherPromo">
- <summary>Interactions with the App Launcher promo dialog.</summary>
-</histogram>
-
-<histogram name="Apps.AppListSearchCommenced" units="searches">
- <summary>
- The number of searches that are started in the app list. This is gathered
- each time the app list search box transitions from empty to non-empty.
- </summary>
-</histogram>
-
-<histogram name="Apps.AppListSearchResultOpenType" enum="AppListSearchResult">
- <summary>
- The type of app list search result that was opened by the user. This is
- gathered per click of a search result.
- </summary>
-</histogram>
-
-<histogram name="Ash.ActiveTouchPoints">
- <summary>
- Number of active touch-points when a new touch-point is added.
- </summary>
-</histogram>
-
-<histogram name="Ash.ActiveWindowShowTypeOverTime" enum="ActiveWindowShowType">
- <summary>
- The show type of the active window tracked over time by logging on a regular
- basis (30 minutes).
- </summary>
-</histogram>
-
-<histogram name="Ash.Dock.Action" enum="DockedAction">
- <summary>
- User-initiated action taken that affects docked windows such as docking,
- undocking, minimizing, restoring, closing or just dragging a docked window.
- </summary>
-</histogram>
-
-<histogram name="Ash.Dock.ActionSource" enum="DockedActionSource">
- <summary>
- Source (mouse, touch or unknown) of the user-initiated action for docked
- windows.
- </summary>
-</histogram>
-
-<histogram name="Ash.Dock.ItemsAll">
- <summary>
- Number of all docked windows or panels including hidden or minimized.
- Recorded on every user action that interacts with docked windows.
- </summary>
-</histogram>
-
-<histogram name="Ash.Dock.ItemsLarge">
- <summary>
- Number of large (wider than dock maximum width) windows that had to be
- shrunk to get docked among the visible docked windows. Recorded on every
- user action that interacts with docked windows.
- </summary>
-</histogram>
-
-<histogram name="Ash.Dock.ItemsPanels">
- <summary>
- Number of docked visible panels. Recorded on every user action that
- interacts with docked windows.
- </summary>
-</histogram>
-
-<histogram name="Ash.Dock.ItemsVisible">
- <summary>
- Number of visible docked windows or panels. Recorded on every user action
- that interacts with docked windows.
- </summary>
-</histogram>
-
-<histogram name="Ash.Dock.TimeBetweenUse" units="seconds">
- <summary>
- Time elapsed between instances of docking, undocking or any other action
- affecting docked state of a window.
- </summary>
-</histogram>
-
-<histogram name="Ash.Dock.Width" units="pixels">
- <summary>
- Width of the docked area in pixels. Recorded every time it changes after a
- user window resize operation is completed.
- </summary>
-</histogram>
-
-<histogram name="Ash.GestureCreated" enum="UIEventType">
- <summary>
- The gesture-events recognized and dispatched by the browser gesture
- recognizer.
- </summary>
-</histogram>
-
-<histogram name="Ash.GestureTarget" enum="GestureActionType">
- <summary>
- The gesture-events recognized and dispatched by the browser gesture
- recognizer for various UI components.
- </summary>
-</histogram>
-
-<histogram name="Ash.ImmersiveFullscreen.WindowType" enum="WindowType">
- <summary>
- The type of the window which is put into immersive fullscreen. Immersive
- fullscreen is entered via the F4 key.
- </summary>
-</histogram>
-
-<histogram name="Ash.ShelfAlignmentOverTime" enum="ShelfAlignmentValue">
- <summary>
- The current state of the shelf (alignment) tracked over time by logging on a
- regular basis (30 minutes), this is used instead of log in or shelf usage to
- track users that do not lock/unlock or log in frequently and use a small
- number of browser instances or otherwise infrequently interact with the
- shelf launcher.
- </summary>
-</histogram>
-
-<histogram name="Ash.ShelfAlignmentUsage" enum="ShelfAlignmentValue">
- <summary>
- The current state of the shelf (alignment) when the shelf launcher is used
- to launch an app/window/etc, this is used instead of log in to give data on
- users that do not lock/unlock or log in frequently.
- </summary>
-</histogram>
-
-<histogram name="Ash.TouchDuration" units="milliseconds">
- <obsolete>
- Deprecated 12/2013 in r239809, and replaced by Ash.TouchDuration2.
- </obsolete>
- <summary>The duration of a touch-sequence.</summary>
-</histogram>
-
-<histogram name="Ash.TouchDuration2" units="milliseconds">
- <summary>The duration of a touch-sequence.</summary>
-</histogram>
-
-<histogram name="Ash.TouchMoveInterval" units="milliseconds">
- <summary>The interval between touch-move events.</summary>
-</histogram>
-
-<histogram name="Ash.TouchMoveSteps" units="pixels">
- <summary>The distance between touch-move events.</summary>
-</histogram>
-
-<histogram name="Ash.TouchPositionX" units="pixels">
- <summary>The position of the touch-events along the X axis.</summary>
-</histogram>
-
-<histogram name="Ash.TouchPositionY" units="pixels">
- <summary>The position of the touch-events along the Y axis.</summary>
-</histogram>
-
-<histogram name="Ash.TouchRadius" units="pixels">
- <summary>The radius of a touch event.</summary>
-</histogram>
-
-<histogram name="Ash.TouchStartAfterEnd" units="milliseconds">
- <summary>
- The interval between the end of a touch-sequence and the start of the next
- touch-sequence.
- </summary>
-</histogram>
-
-<histogram name="Ash.TouchStartBurst">
- <summary>
- The number of rapid touch-starts that happened within a short interval.
- Logged once for each such burst group.
- </summary>
-</histogram>
-
-<histogram name="Ash.WindowSelector.CycleTime" units="milliseconds">
- <summary>
- The amount of time the Alt key is held after pressing Alt+Tab to begin
- cycling through windows.
- </summary>
-</histogram>
-
-<histogram name="Ash.WindowSelector.Items">
- <summary>
- The number of items (single windows or groups of windows such as panels) in
- the window selection. Window selection occurs when a user begins alt-tabbing
- or presses the overview button (F5 key).
- </summary>
-</histogram>
-
-<histogram name="Ash.WindowSelector.TimeBetweenUse" units="milliseconds">
- <summary>
- The amount of time between uses of window selection to switch between
- windows. Window selection is entered by alt-tabbing or by pressing the
- overview button (F5 key).
- </summary>
-</histogram>
-
-<histogram name="Ash.WindowSelector.TimeInOverview" units="milliseconds">
- <summary>
- The amount of time spent in overview mode. Overview mode is engaged when
- lingering on a window while alt-tabbing or by pressing the overview button.
- The time is measured from the moment the windows begin animating to a
- thumbnail size preview to when a window is selected or selection is
- canceled.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.AttemptCountFail">
- <summary>
- Count of DnsAttempts before DnsTransaction completes with failure.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.AttemptCountSuccess">
- <summary>
- Count of DnsAttempts before DnsTransaction completes successfully.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ConfigChange" enum="BooleanSuccess">
- <summary>
- Whether DnsConfigService::OnConfigChange actually corresponded to a change
- in DnsConfig.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ConfigNotifyInterval" units="milliseconds">
- <summary>
- Duration of time between calls to DnsConfigService::InvalidateConfig.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ConfigParseDuration" units="milliseconds">
- <summary>Duration of time spent parsing DnsConfig.</summary>
-</histogram>
-
-<histogram name="AsyncDNS.ConfigParsePosix" enum="AsyncDNSConfigParsePosix">
- <summary>
- Counts of results of parsing DnsConfig in DnsConfigServicePosix.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ConfigParseResult" enum="BooleanSuccess">
- <summary>Whether DnsConfig was parsed successfully.</summary>
-</histogram>
-
-<histogram name="AsyncDNS.ConfigParseWin" enum="AsyncDNSConfigParseWin">
- <summary>
- Counts of results of parsing DnsConfig in DnsConfigServiceWin.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.DNSChangerDetected" enum="BooleanSuccess">
- <summary>
- Whether the first valid DnsConfig included a rogue nameserver.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.DnsClientDisabledReason" enum="NetErrorCodes">
- <summary>
- Counts of specific error codes returned by DnsTask if a subsequent ProcTask
- succeeded, at the end of a streak of failures after which the DnsClient was
- disabled.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.DnsClientEnabled" enum="BooleanSuccess">
- <summary>
- TRUE counts the events when a valid DnsConfig is received and used to enable
- DnsClient, while FALSE counts the events when DnsClient is disabled after a
- series of successful fallbacks from DnsTask to ProcTask.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.FallbackFail" units="milliseconds">
- <summary>
- Duration of time spent by ProcTask in failing fallback resolutions.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.FallbackSuccess" units="milliseconds">
- <summary>
- Duration of time spent by ProcTask in successful fallback resolutions.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.HaveDnsConfig" enum="BooleanSuccess">
- <summary>
- Whether there was a valid DNS configuration at the start of a job which
- eventually completed successfully.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.HostParseResult" enum="BooleanSuccess">
- <summary>Whether DnsHosts were parsed successfully.</summary>
-</histogram>
-
-<histogram name="AsyncDNS.HostsChange" enum="BooleanSuccess">
- <summary>
- Whether DnsConfigService::OnHostsChange actually corresponded to a change in
- DnsHosts.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.HostsNotifyInterval" units="milliseconds">
- <summary>
- Duration of time between calls to DnsConfigService::InvalidateHosts.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.HostsParseDuration" units="milliseconds">
- <summary>Duration of time spent parsing DnsHosts.</summary>
-</histogram>
-
-<histogram name="AsyncDNS.HostsParseWin" enum="AsyncDNSHostsParseWin">
- <summary>
- Counts of results of parsing DnsHosts in DnsConfigServiceWin.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.HostsSize" units="bytes">
- <summary>
- The size of the HOSTS file observed before each attempt to parse it.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.JobQueueTime" units="milliseconds">
- <summary>
- Time elapsed between the time the HostResolverImpl::Job was created and the
- time the Job was started (using DnsClient).
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.JobQueueTime_HIGHEST" units="milliseconds">
- <summary>
- Time elapsed between the time the HostResolverImpl::Job was created and the
- time the Job was started (using DnsClient). Includes only Jobs which had
- priority HIGHEST when started.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.JobQueueTime_IDLE" units="milliseconds">
- <summary>
- Time elapsed between the time the HostResolverImpl::Job was created and the
- time the Job was started (using DnsClient). Includes only Jobs which had
- priority IDLE when started.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.JobQueueTime_LOW" units="milliseconds">
- <summary>
- Time elapsed between the time the HostResolverImpl::Job was created and the
- time the Job was started (using DnsClient). Includes only Jobs which had
- priority LOW when started.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.JobQueueTime_LOWEST" units="milliseconds">
- <summary>
- Time elapsed between the time the HostResolverImpl::Job was created and the
- time the Job was started (using DnsClient). Includes only Jobs which had
- priority LOWEST when started.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.JobQueueTime_MEDIUM" units="milliseconds">
- <summary>
- Time elapsed between the time the HostResolverImpl::Job was created and the
- time the Job was started (using DnsClient). Includes only Jobs which had
- priority MEDIUM when started.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.JobQueueTimeAfterChange" units="milliseconds">
- <summary>
- Time elapsed between the last time the priority of a HostResolverImpl::Job
- changed (when a Request was attached or detached) and the time the Job was
- started (using DnsClient).
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.JobQueueTimeAfterChange_HIGHEST" units="milliseconds">
- <summary>
- Time elapsed between the last time the priority of a HostResolverImpl::Job
- changed (when a Request was attached or detached) and the time the Job was
- started (using DnsClient). Includes only Jobs which had priority HIGHEST
- when started.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.JobQueueTimeAfterChange_IDLE" units="milliseconds">
- <summary>
- Time elapsed between the last time the priority of a HostResolverImpl::Job
- changed (when a Request was attached or detached) and the time the Job was
- started (using DnsClient). Includes only Jobs which had priority IDLE when
- started.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.JobQueueTimeAfterChange_LOW" units="milliseconds">
- <summary>
- Time elapsed between the last time the priority of a HostResolverImpl::Job
- changed (when a Request was attached or detached) and the time the Job was
- started (using DnsClient). Includes only Jobs which had priority LOW when
- started.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.JobQueueTimeAfterChange_LOWEST" units="milliseconds">
- <summary>
- Time elapsed between the last time the priority of a HostResolverImpl::Job
- changed (when a Request was attached or detached) and the time the Job was
- started (using DnsClient). Includes only Jobs which had priority LOWEST when
- started.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.JobQueueTimeAfterChange_MEDIUM" units="milliseconds">
- <summary>
- Time elapsed between the last time the priority of a HostResolverImpl::Job
- changed (when a Request was attached or detached) and the time the Job was
- started (using DnsClient). Includes only Jobs which had priority MEDIUM when
- started.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ParseToAddressList" enum="AsyncDNSParseResult">
- <summary>
- Counts of results of parsing addresses out of DNS responses in successful
- DnsTransactions.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ResolveError" enum="NetErrorCodes">
- <summary>
- Counts of specific error codes returned by DnsTask if a subsequent ProcTask
- succeeded.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ResolveFail" units="milliseconds">
- <summary>
- Duration of time taken by DnsTask in resolutions that failed. Excludes time
- spent in the subsequent fallback.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ResolveStatus" enum="AsyncDNSResolveStatus">
- <summary>
- Counts of the overall results of using asynchronous DNS in HostResolverImpl.
- This only includes jobs started with valid DNS configuration and excludes
- synchronous resolutions (as IP literals, from cache, and from HOSTS).
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ResolveSuccess" units="milliseconds">
- <summary>
- Duration of time taken by DnsTask in resolutions that succeeded.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ResolveSuccess_FAMILY_IPV4" units="milliseconds">
- <summary>
- Same as AsyncDNS.ResolveSuccess, but limited to pure IPv4 lookups.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ResolveSuccess_FAMILY_IPV6" units="milliseconds">
- <summary>
- Same as AsyncDNS.ResolveSuccess, but limited to pure IPv6 lookups.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ResolveSuccess_FAMILY_UNSPEC" units="milliseconds">
- <summary>
- Same as AsyncDNS.ResolveSuccess, but limited to IPv4/IPv6 lookups.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ServerCount">
- <summary>
- Count of servers in DnsConfig. Recorded on every new DnsSession, which is
- created on DNS change.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ServerFailureIndex">
- <summary>
- Index in DnsConfig of the failing server, recorded at the time of failure.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ServerFailuresAfterNetworkChange">
- <summary>
- Count of server failures after network change before first success in the
- DnsSession. Recorded at the time of first success.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ServerFailuresAfterSuccess">
- <summary>
- Count of server failures after success until the end of the session. Server
- has reported success at some point during the session. Recorded at the end
- of the DnsSession.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ServerFailuresBeforeSuccess">
- <summary>
- Count of server failures before success. This is NOT the first success in
- the DnsSession. Recorded at the time of success.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ServerFailuresWithoutSuccess">
- <summary>
- Count of server failures without success until the end of the session.
- Server has never reported success during the DnsSession. Recorded at the end
- of the DnsSession.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.ServerIsGood" units="BooleanSuccess">
- <summary>
- The current server is &quot;good&quot; and does not have to be skipped.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.SortFailure" units="milliseconds">
- <summary>
- Duration of time taken in failing calls to AddressSorter in dual-stack
- resolutions using DnsTask.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.SortSuccess" units="milliseconds">
- <summary>
- Duration of time taken in successful calls to AddressSorter in dual-stack
- resolutions using DnsTask.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.SuffixSearchDone">
- <summary>
- The number of names from the search name list consumed during a successful
- transaction (QTYPE A only).
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.SuffixSearchRemain">
- <summary>
- The number of names left on the search name list at the end of a successful
- transaction (QTYPE A only).
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.SuffixSearchStart">
- <summary>
- The number of names on the search name list at the start of a transaction
- (QTYPE A only).
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TCPAttemptFail" units="milliseconds">
- <summary>
- Duration of time taken by DnsTCPAttempt in failed attempts. Excludes
- timeouts.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TCPAttemptSuccess" units="milliseconds">
- <summary>
- Duration of time taken by DnsTCPAttempt in successful attempts.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TimeoutErrorHistogram" units="milliseconds">
- <summary>
- Difference between RTT and timeout calculated using Histogram algorithm.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TimeoutErrorHistogramUnder" units="milliseconds">
- <summary>
- Difference between timeout calculated using Histogram algorithm and RTT.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TimeoutErrorJacobson" units="milliseconds">
- <summary>
- Difference between RTT and timeout calculated using Jacobson algorithm.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TimeoutErrorJacobsonUnder" units="milliseconds">
- <summary>
- Difference between timeout calculated using Jacobson algorithm and RTT.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TimeoutSpentHistogram" units="milliseconds">
- <summary>
- Duration of time that would be spent waiting for lost request using
- Histogram algorithm.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TimeoutSpentJacobson" units="milliseconds">
- <summary>
- Duration of time that would be spent waiting for lost request using Jacobson
- algorithm.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TotalTime" units="milliseconds">
- <summary>
- Duration of time since a HostResolverImpl::Resolve request to the time a
- result is posted. Excludes canceled, evicted, and aborted requests. Includes
- cache hits (recorded as 0). Excludes speculative requests.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TotalTime_speculative" units="milliseconds">
- <summary>
- Duration of time since a HostResolverImpl::Resolve request to the time a
- result is posted. Excludes canceled, evicted, and aborted requests. Includes
- cache hits (recorded as 0). Speculative requests only.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TransactionFailure" units="milliseconds">
- <summary>
- Duration of time taken in failing DnsTransactions. This includes server
- failures, timeouts and NXDOMAIN results.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TransactionSuccess" units="milliseconds">
- <summary>
- Duration of time taken in successful DnsTransactions. This includes all
- NOERROR answers, even if they indicate the name has no addresses or they
- cannot be parsed.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TransactionSuccess_A" units="milliseconds">
- <summary>
- Same as AsyncDNS.TransactionSuccess but limited to A query type.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TransactionSuccess_AAAA" units="milliseconds">
- <summary>
- Same as AsyncDNS.TransactionSuccess but limited to AAAA query type.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.TTL" units="milliseconds">
- <summary>
- TTL of the resolved addresses, as in the response received from the server.
- For results served from local cache, the TTL is from the original response.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.UDPAttemptFail" units="milliseconds">
- <summary>
- Duration of time taken by DnsUDPAttempt in failed attempts. Excludes
- timeouts.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.UDPAttemptSuccess" units="milliseconds">
- <summary>
- Duration of time taken by DnsUDPAttempt in successful attempts. Includes
- responses arriving after timeout, if multiple attempts are allowed.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.UnchangedConfigInterval" units="milliseconds">
- <summary>
- Duration of time since the last empty config result to the time a non-change
- OnConfigChange is received.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.UnchangedHostsInterval" units="milliseconds">
- <summary>
- Duration of time since the last empty config result to the time a non-change
- OnHostsChange is received.
- </summary>
-</histogram>
-
-<histogram name="AsyncDNS.WatchStatus" enum="AsyncDNSWatchStatus">
- <summary>
- The result of DnsConfigService watch. Counts STARTED on every initialization
- and FAILED_* on any failure.
- </summary>
-</histogram>
-
-<histogram name="Aura.CreatedGpuBrowserCompositor" enum="CompositorType">
- <summary>
- Whether the browser compositor uses GPU or the software renderer.
- </summary>
-</histogram>
-
-<histogram name="Autocheckout.Bubble" enum="AutocheckoutBubble">
- <obsolete>
- Deprecated as of 8/2013.
- </obsolete>
- <summary>
- Measures the frequency of user interactions with the Autocheckout bubble,
- which prompts users to invoke Autocheckout on supported websites.
- </summary>
-</histogram>
-
-<histogram name="Autocheckout.BuyFlow" enum="AutocheckoutBuyFlow">
- <obsolete>
- Deprecated as of 8/2013.
- </obsolete>
- <summary>
- Measures the frequency of final states reached in Autocheckout buy flow.
- </summary>
-</histogram>
-
-<histogram name="Autocheckout.DismissalState"
- enum="AutofillDialogDismissalState">
- <obsolete>
- Deprecated as of 8/2013.
- </obsolete>
- <summary>The state of the Autocheckout dialog when it was dismissed.</summary>
-</histogram>
-
-<histogram name="Autocheckout.FlowDuration" units="ms">
- <obsolete>
- Deprecated as of 8/2013.
- </obsolete>
- <summary>
- Measures the time elapsed between when the user submitted the Autocheckout
- dialog and when the Autocheckout flow, or filling process, concluded.
- </summary>
-</histogram>
-
-<histogram name="Autocheckout.FlowDuration.Failed" units="ms">
- <obsolete>
- Deprecated as of 8/2013.
- </obsolete>
- <summary>
- Measures the time elapsed between when the user submitted the Autocheckout
- dialog and when the Autocheckout flow concluded, in cases where the flow
- failed.
- </summary>
-</histogram>
-
-<histogram name="Autocheckout.FlowDuration.Succeeded" units="ms">
- <obsolete>
- Deprecated as of 8/2013.
- </obsolete>
- <summary>
- Measures the time elapsed between when the user submitted the Autocheckout
- dialog and when the Autocheckout flow concluded, in cases where the flow
- succeeded.
- </summary>
-</histogram>
-
-<histogram name="Autocheckout.InitialUserState"
- enum="AutofillDialogInitialUserState">
- <obsolete>
- Deprecated as of 8/2013.
- </obsolete>
- <summary>
- The initial state of a user that's interacting with a freshly shown
- Autocheckout dialog.
- </summary>
-</histogram>
-
-<histogram name="Autocheckout.PopupInDialog" enum="AutofillDialogPopupEvent">
- <obsolete>
- Deprecated as of 8/2013.
- </obsolete>
- <summary>
- User interactions with the Autofill popup shown while filling an
- Autocheckout dialog.
- </summary>
-</histogram>
-
-<histogram name="Autocheckout.Security" enum="AutofillDialogSecurity">
- <obsolete>
- Deprecated as of 8/2013.
- </obsolete>
- <summary>
- Measures the frequency of security warnings and errors in the Autocheckout
- dialog.
- </summary>
-</histogram>
-
-<histogram name="Autocheckout.UiDuration" units="ms">
- <obsolete>
- Deprecated as of 8/2013.
- </obsolete>
- <summary>
- Measures the duration for which an Autocheckout dialog was shown.
- </summary>
-</histogram>
-
-<histogram name="Autocheckout.UiDuration.Cancel" units="ms">
- <obsolete>
- Deprecated as of 8/2013.
- </obsolete>
- <summary>
- Measures the duration for which an Autocheckout dialog was shown, in cases
- where the user ended up canceling out of the dialog.
- </summary>
-</histogram>
-
-<histogram name="Autocheckout.UiDuration.Submit" units="ms">
- <obsolete>
- Deprecated as of 8/2013.
- </obsolete>
- <summary>
- Measures the duration for which an Autocheckout dialog was shown, in cases
- where the user ended up accepting the dialog.
- </summary>
-</histogram>
-
-<histogram name="Autocheckout.UiEvents" enum="AutofillDialogUiEvents">
- <obsolete>
- Deprecated as of 8/2013.
- </obsolete>
- <summary>
- Measures how users are interacting with the Autocheckout dialog UI.
- </summary>
-</histogram>
-
-<histogram name="Autocheckout.UiLatencyToShow" units="ms">
- <obsolete>
- Deprecated as of 8/2013.
- </obsolete>
- <summary>
- Measures the duration of time it takes for the Autocheckout UI to be
- actionable by the user after it is shown.
- </summary>
-</histogram>
-
-<histogram name="Autocheckout.WalletErrors" enum="WalletErrors">
- <obsolete>
- Deprecated as of 8/2013.
- </obsolete>
- <summary>
- Measures the frequency of errors in communicating with the Google Online
- Wallet server.
- </summary>
-</histogram>
-
-<histogram name="Autocheckout.WalletRequiredActions"
- enum="WalletRequiredActions">
- <obsolete>
- Deprecated as of 8/2013.
- </obsolete>
- <summary>
- Measures the frequency of required user actions returned by the Google
- Online Wallet server.
- </summary>
-</histogram>
-
-<histogram name="Autocheckout.WhitelistDownloadDuration" units="ms">
- <obsolete>
- Deprecated as of 8/2013.
- </obsolete>
- <summary>
- Measures time taken to download the Autocheckout whitelist file.
- </summary>
-</histogram>
-
-<histogram name="Autocheckout.WhitelistDownloadDuration.Failed" units="ms">
- <obsolete>
- Deprecated as of 8/2013.
- </obsolete>
- <summary>
- Measures time taken to download the Autocheckout whitelist file in case the
- download was failed.
- </summary>
-</histogram>
-
-<histogram name="Autocheckout.WhitelistDownloadDuration.Succeeded" units="ms">
- <obsolete>
- Deprecated as of 8/2013.
- </obsolete>
- <summary>
- Measures time taken to download the Autocheckout whitelist file in case the
- download was succeeded.
- </summary>
-</histogram>
-
-<histogram name="Autofill.AddressSuggestionsCount">
- <summary>
- The number of address suggestions shown in the Autofill popup.
- </summary>
-</histogram>
-
-<histogram name="AutoFill.CCInfoBarAccepted">
- <obsolete>
- Deprecated as of 3/2011, replaced by Autofill.CreditCardInfoBar.
- </obsolete>
- <summary>The Autofill credit card info bar was accepted.</summary>
-</histogram>
-
-<histogram name="AutoFill.CCInfoBarDenied">
- <obsolete>
- Deprecated as of 3/2011, replaced by Autofill.CreditCardInfoBar.
- </obsolete>
- <summary>The Autofill credit card info bar was denied.</summary>
-</histogram>
-
-<histogram name="Autofill.CreditCardInfoBar" enum="AutofillCreditCardInfoBar">
- <summary>
- The relative frequency with which users accept, deny, or ignore the Autofill
- credit card info bar prompt.
- </summary>
-</histogram>
-
-<histogram name="Autofill.DeveloperEngagement"
- enum="AutofillDeveloperEngagement">
- <summary>
- Measures the adoption of the HTML autocomplete type hint specification (see
- http://is.gd/whatwg_autocomplete for more details). For each fillable form
- detected, logs whether that form includes author-specified type hints.
- </summary>
-</histogram>
-
-<histogram name="Autofill.FillDuration.FromInteraction.WithAutofill">
- <summary>
- Time elapsed between the user's first interaction with a form and the form's
- submission, for an autofilled form.
- </summary>
-</histogram>
-
-<histogram name="Autofill.FillDuration.FromInteraction.WithoutAutofill">
- <summary>
- Time elapsed between the user's first interaction with a form and the form's
- submission, for a non-autofilled form.
- </summary>
-</histogram>
-
-<histogram name="Autofill.FillDuration.FromLoad.WithAutofill">
- <summary>
- Time elapsed between form load and form submission, for an autofilled form.
- </summary>
-</histogram>
-
-<histogram name="Autofill.FillDuration.FromLoad.WithoutAutofill">
- <summary>
- Time elapsed between form load and form submission, for a non-autofilled
- form.
- </summary>
-</histogram>
-
-<histogram name="Autofill.IsEnabled.PageLoad" enum="BooleanEnabled">
- <summary>
- Tracks whether Autofill is enabled on page load for a page containing forms.
- </summary>
-</histogram>
-
-<histogram name="Autofill.IsEnabled.Startup" enum="BooleanEnabled">
- <summary>Tracks whether Autofill is enabled when Chrome launches.</summary>
-</histogram>
-
-<histogram name="AutoFill.ProfileCount">
- <obsolete>
- Deprecated as of 3/2011, replaced by Autofill.StoredProfileCount.
- </obsolete>
- <summary>The number of Autofill address profiles a user has.</summary>
-</histogram>
-
-<histogram name="AutoFill.Quality" enum="AutofillQuality">
- <obsolete>
- Deprecated as of 3/2011, replaced by Autofill.Quality.
- </obsolete>
- <summary>The quality of the AutoFill implementation.</summary>
-</histogram>
-
-<histogram name="Autofill.Quality" enum="AutofillQuality">
- <summary>The quality of the Autofill implementation.</summary>
-</histogram>
-
-<histogram name="Autofill.Quality.HeuristicType" enum="AutofillTypeQuality">
- <summary>The quality of Autofill's heuristic field type detection.</summary>
-</histogram>
-
-<histogram name="Autofill.Quality.HeuristicType.ByFieldType"
- enum="AutofillTypeQualityByFieldType">
- <summary>
- The quality of Autofill's heuristic field type detection, broken down by the
- specific field type. Fields with multiple possible types (based on the
- stored Autofill data) are logged as having ambiguous type.
- </summary>
-</histogram>
-
-<histogram name="Autofill.Quality.PredictedType" enum="AutofillTypeQuality">
- <summary>The overall quality of the Autofill field type predictions.</summary>
-</histogram>
-
-<histogram name="Autofill.Quality.PredictedType.ByFieldType"
- enum="AutofillTypeQualityByFieldType">
- <summary>
- The overall quality of the Autofill field type predictions, broken down by
- the specific field type. Fields with multiple possible types (based on the
- stored Autofill data) are logged as having ambiguous type.
- </summary>
-</histogram>
-
-<histogram name="Autofill.Quality.ServerType" enum="AutofillTypeQuality">
- <summary>The quality of the Autofill server's field type detection.</summary>
-</histogram>
-
-<histogram name="Autofill.Quality.ServerType.ByFieldType"
- enum="AutofillTypeQualityByFieldType">
- <summary>
- The quality of the Autofill server's field type detection, broken down by
- the specific field type. Fields with multiple possible types (based on the
- stored Autofill data) are logged as having ambiguous type.
- </summary>
-</histogram>
-
-<histogram name="AutoFill.RequestErrorimcklfaapmppdhilegjoahjbahdgfhcn">
- <summary>TBD.</summary>
-</histogram>
-
-<histogram name="AutoFill.RequestSuccessimcklfaapmppdhilegjoahjbahdgfhcn">
- <summary>TBD.</summary>
-</histogram>
-
-<histogram name="Autofill.ServerExperimentId" enum="AutofillExperimentId">
- <obsolete>
- Deprecated as of 6/2011, replaced by Autofill.ServerExperimentId.Query.
- </obsolete>
- <summary>
- The experiment ID received in response to an Autofill server query.
- </summary>
-</histogram>
-
-<histogram name="Autofill.ServerExperimentId.Query" enum="AutofillExperimentId">
- <summary>
- The experiment ID received in response to an Autofill server query.
- </summary>
-</histogram>
-
-<histogram name="Autofill.ServerExperimentId.Upload"
- enum="AutofillExperimentId">
- <summary>
- The experiment ID received at the time of an Autofill upload.
- </summary>
-</histogram>
-
-<histogram name="AutoFill.ServerQueryResponse" enum="AutofillQueryResult">
- <obsolete>
- Deprecated as of 3/2011, replaced by Autofill.ServerQueryResponse.
- </obsolete>
- <summary>The usefulness of AutoFill server information.</summary>
-</histogram>
-
-<histogram name="Autofill.ServerQueryResponse" enum="AutofillQueryResult">
- <summary>The usefulness of Autofill server information.</summary>
-</histogram>
-
-<histogram name="Autofill.StoredProfileCount">
- <summary>
- The number of Autofill addresses a user has stored, measured at launch time.
- </summary>
-</histogram>
-
-<histogram name="Autofill.UserHappiness" enum="AutofillUserHappiness">
- <summary>
- Measures the frequency of various events in the Autofill user interaction
- flow. By comparing frequencies, we can compute several interesting
- &quot;user happiness&quot; metrics.
- </summary>
-</histogram>
-
-<histogram name="Bluetooth.ConnectedDeviceCount" units="devices">
- <summary>
- Counts the number of simulataneously connected Bluetooth devices. Used to
- direct testing efforts, and by our UI team to determine appropriate UI
- sizes.
- </summary>
-</histogram>
-
-<histogram name="Bluetooth.PairingMethod" enum="BluetoothPairingMethod">
- <summary>
- Records the method used to pair each Bluetooth Device. Used to direct our
- testing efforts.
- </summary>
-</histogram>
-
-<histogram name="Bluetooth.PairingResult" enum="BluetoothPairingResult">
- <summary>
- Records the result of pairing each Bluetooth Device. Used to understand
- whether we are having significant problems with Bluetooth pairing and seeing
- errors more commonly than we should.
- </summary>
-</histogram>
-
-<histogram name="Bookmarks.LaunchDepth">
- <summary>
- Logs the depth of the bookmark in the bookmark tree hiearchy every time a
- bookmark is launched. Depth indicates how many levels below a permanent
- bookmark folder the bookmark was found in (e.g. a bookmark immediately in
- the bookmark bar has depth 1).
- </summary>
-</histogram>
-
-<histogram name="Canvas.ContextType" enum="CanvasContextType">
- <summary>
- Records the context type names used to create canvas rendering contexts.
- </summary>
-</histogram>
-
-<histogram name="Cast.Sender.CastButtonShown" enum="BooleanEnabled">
- <summary>
- Records the number of times the cast button was shown to the user. The value
- will be true if the button is enabled, and false if the button is disabled.
- Note that depending on the current UX, it's possible that we hide the button
- entirely if it's disabled, so it's possible for the false values to be 0.
- </summary>
-</histogram>
-
-<histogram name="Cast.Sender.CastButtonShownInitialFullscreen"
- enum="BooleanEnabled">
- <summary>
- Records the number of times the cast button was shown to the user when the
- video is fullscreened. The value will only be recorded on entering
- fullscreen. The value will be true if the button is enabled, and false if
- the button is disabled. Note that depending on the current UX,it's possible
- that we hide the button entirely if it's disabled, so it's possible for the
- false values to be 0.
- </summary>
-</histogram>
-
-<histogram name="Cast.Sender.CastPlaySuccess" enum="BooleanSuccess">
- <summary>
- Records the result of a request to play remotely. The value will be true if
- the playback succeeded, and false if there was an error.
- </summary>
-</histogram>
-
-<histogram name="Cast.Sender.CastTimeRemainingPercentage"
- units="percent remaining">
- <summary>
- Records the percentage of the video left at the time the remote playback is
- stopped. This will be recorded when the playback is stopped by the user, or
- when it's stopped by the cast device.
- </summary>
-</histogram>
-
-<histogram name="Cellular.ActivationFailure">
- <summary>
- The count of cellular device activation failures (Chrome OS).
- </summary>
-</histogram>
-
-<histogram name="Cellular.ActivationTry">
- <summary>The count of cellular device activation tries (Chrome OS).</summary>
-</histogram>
-
-<histogram name="Cellular.ConnectionFailed">
- <summary>
- The count of cellular reconnect failures during activation (Chrome OS).
- </summary>
-</histogram>
-
-<histogram name="Cellular.ConnectionRetry">
- <summary>
- The count of cellular device reconnect tries during activation (Chrome OS).
- </summary>
-</histogram>
-
-<histogram name="Cellular.MobileSetupFailed">
- <summary>
- The count of successful cellular plan established (Chrome OS).
- </summary>
-</histogram>
-
-<histogram name="Cellular.MobileSetupStart">
- <summary>
- The count of initiated cellular device setup starts (Chrome OS).
- </summary>
-</histogram>
-
-<histogram name="Cellular.MobileSetupSucceeded">
- <summary>The count of failed cellular plan setup tries (Chrome OS).</summary>
-</histogram>
-
-<histogram name="Cellular.PaymentFailed">
- <summary>The count of failed cellular plan purchases (Chrome OS).</summary>
-</histogram>
-
-<histogram name="Cellular.PaymentReceived">
- <summary>
- The count of successfully completed cellular plan purchases (Chrome OS).
- </summary>
-</histogram>
-
-<histogram name="CertificateType">
- <obsolete>
- Deprecated as of 8/2013. This histogram only considered the leaf certificate
- expiry date as a proxy for whether a certificate was in-scope for the BRs,
- but did not consider the issuance date. As some CAs have issued long-lived
- certs prior to the BRs, this disproportionately reported those certs as
- being subject to the BRs, but non-compliant, when in reality they're not
- subject.
- </obsolete>
- <summary>
- Information about the certificate algorithms and sizes in use on the web, to
- examine compliance with the CA/Browser Forum requirements and security best
- practice.
- </summary>
-</histogram>
-
-<histogram name="CertificateType2">
- <summary>
- Information about the certificate algorithms and sizes in use on the web, to
- examine compliance with the CA/Browser Forum requirements and security best
- practice. This histogram considers the notBefore as the issuance date, for
- purposes of what requirements apply.
- </summary>
-</histogram>
-
-<histogram name="Chrome.Browser.CrashedExecutionPhase" enum="ExecutionPhase">
- <summary>
- Indicates the execution phase the browser was in when the browser crashed.
- </summary>
-</histogram>
-
-<histogram name="Chrome.Browser.ExecutionPhase" enum="ExecutionPhase">
- <obsolete>
- Deprecated as of 11/2013.
- </obsolete>
- <summary>
- Indicates the execution phase the browser was in when browser didn't exit
- cleanly.
- </summary>
-</histogram>
-
-<histogram name="Chrome.BrowserCrashDumpAttempts">
- <summary>
- The total number of times the browser process has attempted to generate a
- crash dump. This should be the sum of Chrome.BrowserDumpsWithCrash and
- Chrome.BrowserDumpsWithNoCrash.
- </summary>
-</histogram>
-
-<histogram name="Chrome.BrowserDumpsWithCrash">
- <summary>
- The number of times the browser process has attempted to generate a crash
- dump because of an actual browser crash.
- </summary>
-</histogram>
-
-<histogram name="Chrome.BrowserDumpsWithNoCrash">
- <summary>
- The number of times the browser process has attempted to generate a crash
- dump in a non-crashing (i.e., reporting only) context.
- </summary>
-</histogram>
-
-<histogram name="Chrome.SearchSelectExempt" enum="SearchEngine">
- <obsolete>
- Deprecated 8/2013. No longer tracked.
- </obsolete>
- <summary>
- The default search engine selected by a user not in the search engine dialog
- experiment.
- </summary>
-</histogram>
-
-<histogram name="Chrome.SearchSelectExperiment" enum="SearchEngine">
- <obsolete>
- Deprecated 8/2013. No longer tracked.
- </obsolete>
- <summary>
- The default search engine selected by a user in the search engine dialog
- experiment.
- </summary>
-</histogram>
-
-<histogram name="Chrome.SearchSelectExperimentSlot1" enum="SearchEngine">
- <obsolete>
- Deprecated 8/2013. No longer tracked.
- </obsolete>
- <summary>
- The default search engine selected by a user in slot 1 of a randomized
- search engine dialog.
- </summary>
-</histogram>
-
-<histogram name="Chrome.SearchSelectExperimentSlot2" enum="SearchEngine">
- <obsolete>
- Deprecated 8/2013. No longer tracked.
- </obsolete>
- <summary>
- The default search engine selected by a user in slot 2 of a randomized
- search engine dialog.
- </summary>
-</histogram>
-
-<histogram name="Chrome.SearchSelectExperimentSlot3" enum="SearchEngine">
- <obsolete>
- Deprecated 8/2013. No longer tracked.
- </obsolete>
- <summary>
- The default search engine selected by a user in slot 3 of a randomized
- search engine dialog.
- </summary>
-</histogram>
-
-<histogram name="Chrome.SearchSelectExperimentSlot4" enum="SearchEngine">
- <obsolete>
- Deprecated 8/2013. No longer tracked.
- </obsolete>
- <summary>
- The default search engine selected by a user in slot 4 of a randomized
- search engine dialog.
- </summary>
-</histogram>
-
-<histogram name="ChromeNotifierService.Actions"
- enum="ChromeNotifierServiceActionType">
- <summary>
- The actions to enable or disable services sending synced notifications.
- Synced Notification Sending services can be individually disabled by the
- user in the Chrome Notification center settings dialog.
- </summary>
-</histogram>
-
-<histogram name="clickjacking.discard_download" units="ms">
- <summary>
- The length of time between a dangerous download appearing on the downloads
- shelf, and the &quot;Discard&quot; button being clicked.
- </summary>
-</histogram>
-
-<histogram name="clickjacking.dismiss_download" units="ms">
- <summary>
- The length of time between a dangerous download appearing on the downloads
- shelf, and the &quot;Dismiss&quot; button being clicked.
- </summary>
-</histogram>
-
-<histogram name="clickjacking.launch_url" units="ms">
- <summary>
- The length of time between the external protocol dialog being shown and the
- &quot;Launch Application&quot; button being clicked.
- </summary>
-</histogram>
-
-<histogram name="clickjacking.open_download" units="ms">
- <summary>
- The length of time between a download appearing on the download shelf, and
- the user opening it by clicking the item or pressing return.
- </summary>
-</histogram>
-
-<histogram name="clickjacking.report_and_discard_download" units="ms">
- <summary>
- Time between &quot;Report and Discard&quot; button being shown and it being
- clicked.
- </summary>
-</histogram>
-
-<histogram name="clickjacking.save_download" units="ms">
- <summary>
- The length of time between a dangerous download appearing on the download
- shelf, and the &quot;Keep&quot; button being clicked.
- </summary>
-</histogram>
-
-<histogram name="Clipboard.IncognitoUseCase" enum="ClipboardAction">
- <obsolete>
- Deprecated as of 4/2013, experiment confirmed correctness of our patch.
- </obsolete>
- <summary>
- Counts how often the user writes or reads from the clipboard and whether the
- write was from an incognito window or not.
- </summary>
-</histogram>
-
-<histogram name="ConnectivityDiagnostics.ChromeOsSignalStrength"
- units="percent">
- <summary>
- Connectivity Diagnostics App: WiFi signal strength recorded during
- NIC_SIGNAL_STRENGTH test.
- </summary>
- <details>
- The &quot;Strength&quot; property of a WiFi signal is a partially-reversible
- function that linearly maps the RSSI range -120dBm to -20dBm to Strength
- values from 0 to 100.
- </details>
-</histogram>
-
-<histogram name="ConnectivityDiagnostics.HTTP_LATENCY" units="milliseconds">
- <summary>HTTP latency seen by the Connectivity Diagnostics.</summary>
- <details>
- HTTP latency is computed using the chrome.socket API to make an HTTP GET
- request to the /generate_204 page of three randomly generated Google
- hostnames (*-ccd-testing-v4.metric.gstatic.com). The time taken from issuing
- the HTTP request to receiving a response is clocked in JavaScript and the
- arithmetic mean of the three times is used as the HTTP latency.
- </details>
-</histogram>
-
-<histogram name="ConnectivityDiagnostics.RESOLVER_LATENCY" units="milliseconds">
- <summary>Resolution latency seen by the Connectivity Diagnostics.</summary>
- <details>
- Resolver latency is computed by using the chrome.dns API to query three
- randomly generated Google hostnames (*-ccd-testing-v4.metric.gstatic.com).
- The random hostnames guarantees that there will be no caching of DNS
- hostnames. The time taken from issuing the DNS request to receiving a
- response is clocked in JavaScript and the arithmetic mean of the three times
- is used as the resolver latency.
- </details>
-</histogram>
-
-<histogram name="ConnectivityDiagnostics.TestVerdict"
- enum="ConnectivityDiagnosticsTestVerdict">
- <summary>
- Connectivity Diagnostics App: Outcome of the connectivity tests.
- </summary>
-</histogram>
-
-<histogram name="ConnectivityDiagnostics.TimeTaken" units="milliseconds">
- <summary>
- Connectivity Diagnostics App: Amount of time taken to run each of the
- connectivity tests.
- </summary>
-</histogram>
-
-<histogram name="Cookie.ParsedCookieStatus" enum="ParsedCookieStatus">
- <obsolete>
- Deprecated as of 9/2013. Experiment to measure control characters in cookies
- is finished.
- </obsolete>
- <summary>
- When parsing a cookie, indicates if control characters were present in any
- of the cookie values and if any of the cookie values were invalid.
- Specifically, checks that all of the parsed values are valid according to
- the valid token definition in Section 2.2 of RFC2616 which specifies a token
- must have no separators (i.e. no characters from the following string,
- ignoring the starting and ending single quote: '()&lt;&gt;@,;:\&quot;/[]?={}
- \t') and no control characters.
- </summary>
-</histogram>
-
-<histogram name="Cookie.ReinstatedCookies" units="seconds">
- <summary>
- The duration in seconds between a cookie getting evicted (due to the number
- of cookies exceeding a domain limit), and subsequently reinstated.
- </summary>
-</histogram>
-
-<histogram name="Cookie.SetAttributePairCharsValidity" enum="BooleanValid">
- <obsolete>
- Deprecated as of 9/2013. Experiment to measure control characters in cookies
- is finished.
- </obsolete>
- <summary>
- Indicates whether a cookie attribute pair was set with both a valid key and
- a valid attribute value or not. For the key, this implies that it was a
- valid token as defined in Section 2.2 of RFC2616 which specifies a token
- must have no separators (i.e. no characters from the following string,
- ignoring the starting and ending single quote: '()&lt;&gt;@,;:\&quot;/[]?={}
- \t') and no control characters. For the value, this implies that it
- contained no control characters and no semicolon.
- </summary>
-</histogram>
-
-<histogram name="Cookie.SetNameValidity" enum="BooleanValid">
- <obsolete>
- Deprecated as of 9/2013. Experiment to measure control characters in cookies
- is finished.
- </obsolete>
- <summary>
- Indicates whether a cookie name was set with a valid token. A valid token is
- defined in Section 2.2 of RFC2616 which specifies a token must have no
- separators (i.e. no characters from the following string, ignoring the
- starting and ending single quote: '()&lt;&gt;@,;:\&quot;/[]?={} \t') and no
- control characters.
- </summary>
-</histogram>
-
-<histogram name="Cookie.SetValueCookieValueValidity" enum="BooleanValid">
- <obsolete>
- Deprecated as of 9/2013. Experiment to measure control characters in cookies
- is finished.
- </obsolete>
- <summary>
- Indicates whether a cookie value was valid or invalid when there was an
- attempt to set it, where a valid value is defined in RFC 6265 as ASCII
- characters excluding controls, whitspace, comma, semicolon, and backslash.
- </summary>
-</histogram>
-
-<histogram name="Cros.ClickOnShelf" enum="CrosShelfClickTarget">
- <obsolete>
- Deprecated as of 12/2013. Default pinned apps trial is finished.
- </obsolete>
- <summary>Chrome OS shelf clicks.</summary>
-</histogram>
-
-<histogram name="CrosDisks.ArchiveType" enum="CrosDisksArchiveType">
- <summary>
- The type of archive file that Chrome OS cros-disks daemon is requested to
- mount.
- </summary>
-</histogram>
-
-<histogram name="CrosDisks.DeviceMediaType" enum="CrosDisksDeviceMediaType">
- <summary>
- The media type of removable device that Chrome OS cros-disks daemon is
- requested to mount.
- </summary>
-</histogram>
-
-<histogram name="CrosDisks.FilesystemType" enum="CrosDisksFilesystemType">
- <summary>
- The type of file system that Chrome OS cros-disks daemon is requested to
- mount.
- </summary>
-</histogram>
-
-<histogram name="CrosFirstRun.DialogShown">
- <summary>
- Records the number of times when first-run dialog was shown.
- </summary>
-</histogram>
-
-<histogram name="CrosFirstRun.FurthestStep">
- <summary>
- Index of furthest step that was reached during tutorial. Since order of
- steps could change eventially and new steps could apear we use index here
- instead of step name.
- </summary>
-</histogram>
-
-<histogram name="CrosFirstRun.TimeSpent" units="ms">
- <summary>The total time that user spent on first-run tutorial.</summary>
-</histogram>
-
-<histogram name="CrosFirstRun.TimeSpentOnStep" units="ms">
- <summary>The time that user spent on some step of tutorial.</summary>
-</histogram>
-
-<histogram name="CrosFirstRun.TutorialCompletion"
- enum="CrosFirstRunTutorialCompletionType">
- <summary>Tracks the way how user left tutorial.</summary>
-</histogram>
-
-<histogram name="CrosFirstRun.TutorialLaunched">
- <summary>
- Records the number of times when first-run tutorial has been launched.
- </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.BypassInfoFallback"
- enum="DataReductionProxyBypassEventType">
- <summary>
- Counts various events that trigger Chrome to bypass the fallback
- configuration of the data reduction proxy.
- </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.BypassInfoPrimary"
- enum="DataReductionProxyBypassEventType">
- <summary>
- Counts various events that trigger Chrome to bypass the primary
- configuration of the data reduction proxy.
- </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.ProbeURL"
- enum="DataReductionProxyProbeURLFetchResult">
- <summary>
- Counts various outcomes of requesting the data reduction proxy's probe URL.
- </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.PromoAction"
- enum="DataReductionProxyPromoAction">
- <summary>
- Samples which method was used by the user to dismiss the proxy promo. This
- is sampled when the promo leaves view, with the sampled value depending on
- which of four possible controls the user used.
- </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.SettingsConversion"
- enum="DataReductionProxySettingsConversion">
- <summary>
- Samples of user interactions with the ON/OFF switch in the settings menu for
- reducing data usage. Only the setting changes between entering the reducing
- data usage setting menu and leaving the menu will be sampled. So if a user
- enters the menu with OFF and leaves it with OFF, it is counted as one OFF to
- OFF conversion regardless of how many times he or she toggles the ON/OFF
- switch.
- </summary>
-</histogram>
-
-<histogram name="DataReductionProxy.StartupState"
- enum="DataReductionProxyStartupState">
- <summary>
- Samples of the state of the data reduction proxy on Chrome startup. The
- proxy will either be unavailable (the feature hasn't been rolled out to this
- user yet), not enabled (the feature is available but the user doesn't have
- it turned on), or enabled (the feature is enabled and turned on).
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.ConflictingDlls" enum="DiagnosticsResult">
- <summary>
- TBD - Not run automatically yet, so this is just a placeholder for future
- metrics collection. Any samples collected here represent users running
- diagnostics manually.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.DiskSpace" enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the DiskSpace recovery step that runs
- on recovery startups. The recovery step attempts to guarantee the DiskSpace
- test, which checks that the disk space in the volume where the user data
- directory normally lives is not dangerously low, would pass on the next
- startup.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.InstallType" enum="DiagnosticsResult">
- <summary>
- TBD - Not run automatically yet, so this is just a placeholder for future
- metrics collection. Any samples collected here represent users running
- diagnostics manually.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.JSONBookmarks" enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the JSONBookmarks recovery step that
- runs on recovery startups. The recovery step attempts to guarantee the
- JSONBookmarks test, which makes sure that the JSON-encoded Bookmarks file is
- properly formed, would pass on the next startup.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.JSONLocalState" enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the JSONLocalState recovery step that
- runs on recovery startups. The recovery step attempts to guarantee the
- JSONLocalState test, which makes sure that the JSON-encoded Local State file
- is properly formed, would pass on the next startup.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.JSONPreferences" enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the JSONPreferences recovery step
- that runs on recovery startups. The recovery step attempts to guarantee the
- JSONPreferences test, which makes sure that the JSON-encoded Preferences
- file is properly formed, would pass on the next startup.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.OperatingSystem" enum="DiagnosticsResult">
- <summary>
- TBD - Not run automatically yet, so this is just a placeholder for future
- metrics collection. Any samples collected here represent users running
- diagnostics manually.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.PathDictionaries"
- enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the PathDictionaries recovery step
- that runs on recovery startups. The recovery step attempts to guarantee the
- PathDictionaries test, which makes sure that the path to the Dictionaries
- directory exists and has the right permissions, would pass on the next
- startup.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.PathLocalState" enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the PathLocalState recovery step that
- runs on recovery startups. The recovery step attempts to guarantee the
- PathLocalState test, which makes sure that the path to the Local State file
- exists and has the right permissions, would pass on the next startup.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.PathResources" enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the PathResources recovery step that
- runs on recovery startups. The recovery step attempts to guarantee the
- PathResources test, which makes sure that the path to the Resources
- directory exists and has the right permissions, would pass on the next
- startup.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.PathUserData" enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the PathUserData recovery step that
- runs on recovery startups. The recovery step attempts to guarantee the
- PathUserData test, which makes sure that the path to the User Data directory
- exists and has the right permissions, would pass on the next startup.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.SQLiteIntegrityAppCache"
- enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the SQLiteIntegrityAppCache recovery
- step that runs on recovery startups. The recovery step attempts to
- guarantee the SQLiteIntegrityAppCache test, which checks the integrity of
- the App Cache database, would pass on the next startup.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.SQLiteIntegrityArchivedHistory"
- enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the SQLiteIntegrityArchivedHistory
- recovery step that runs on recovery startups. The recovery step attempts to
- guarantee the SQLiteIntegrityArchivedHistory test, which checks the
- integrity of the Archived History database, would pass on the next startup.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.SQLiteIntegrityCookie"
- enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the SQLiteIntegrityCookie recovery
- step that runs on recovery startups. The recovery step attempts to
- guarantee the SQLiteIntegrityCookie test, which checks the integrity of the
- Cookie database, would pass on the next startup.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.SQLiteIntegrityDatabaseTracker"
- enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the SQLiteIntegrityDatabaseTracker
- recovery step that runs on recovery startups. The recovery step attempts to
- guarantee the SQLiteIntegrityDatabaseTracker test, which checks the
- integrity of the Database Tracker database, would pass on the next startup.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.SQLiteIntegrityHistory"
- enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the SQLiteIntegrityHistory recovery
- step that runs on recovery startups. The recovery step attempts to
- guarantee the SQLiteIntegrityHistory test, which checks the integrity of the
- History database, would pass on the next startup.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.SQLiteIntegrityNSSCert"
- enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the SQLiteIntegrityNSSCert recovery
- step that runs on recovery startups. The recovery step attempts to
- guarantee the SQLiteIntegrityNSSCert test, which checks the integrity of the
- NSS Certificate database, would pass on the next startup.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.SQLiteIntegrityNSSKey"
- enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the SQLiteIntegrityNSSKey recovery
- step that runs on recovery startups. The recovery step attempts to
- guarantee the SQLiteIntegrityNSSKey test, which checks the integrity of the
- NSS Key database, would pass on the next startup.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.SQLiteIntegrityThumbnails"
- enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the SQLiteIntegrityThumbnails
- recovery step that runs on recovery startups. The recovery step attempts to
- guarantee the SQLiteIntegrityThumbnails test, which checks the integrity of
- the Thumbnails database, would pass on the next startup.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.SQLiteIntegrityWebData"
- enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the SQLiteIntegrityWebData recovery
- step that runs on recovery startups. The recovery step attempts to
- guarantee the SQLiteIntegrityWebData test, which checks the integrity of the
- Web Data database, would pass on the next startup.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Recovery.Version" enum="DiagnosticsResult">
- <summary>
- TBD - Not run automatically yet, so this is just a placeholder for future
- metrics collection. Any samples collected here represent users running
- diagnostics manually.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.RecoveryRun" enum="DiagnosticsRecoveryRun">
- <summary>
- Count of the number of times diagnostics recovery is invoked or not, and how
- it was invoked. A sample is added to this histogram once for each startup
- of Chrome.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.ConflictingDlls" enum="DiagnosticsResult">
- <summary>
- TBD - Not run automatically yet, so this is just a placeholder for future
- metrics collection. Any samples collected here represent users running
- diagnostics manually.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.DiskSpace" enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of diagnostics for the DiskSpace test
- that runs on recovery startups. The DiskSpace test checks that the disk
- space in the volume where the user data directory normally lives is not
- dangerously low.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.InstallType" enum="DiagnosticsResult">
- <summary>
- TBD - Not run automatically yet, so this is just a placeholder for future
- metrics collection. Any samples collected here represent users running
- diagnostics manually.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.JSONBookmarks" enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of diagnostics for the JSONBookmarks
- test that runs on recovery startups. The JSONBookmarks test checks to make
- sure that the JSON encoded bookmarks file is properly formed.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.JSONLocalState" enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of diagnostics for the JSONLocalState
- test that runs on recovery startups. The JSONLocalState test checks to make
- sure that the JSON encoded Local State file is properly formed.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.JSONPreferences" enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of diagnostics for the JSONPreferences
- test that runs on recovery startups. The JSONPreferences test checks to
- make sure that the Preferences file is properly formed.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.OperatingSystem" enum="DiagnosticsResult">
- <summary>
- TBD - Not run automatically yet, so this is just a placeholder for future
- metrics collection. Any samples collected here represent users running
- diagnostics manually.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.PathDictionaries" enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of diagnostics for the PathDictionaries
- test that runs on recovery startups. The PathDictionaries test checks makes
- sure that the path to the Dictionaries folder exists and has the right
- permissions.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.PathLocalState" enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of diagnostics for the PathLocalState
- test that runs on recovery startups. The PathLocalState test checks makes
- sure that the path to the Local State folder exists and has the right
- permissions.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.PathResources" enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of diagnostics for the PathResources
- test that runs on recovery startups. The PathResources test checks makes
- sure that the path to the Resources folder exists and has the right
- permissions.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.PathUserData" enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of diagnostics for the PathUserData test
- that runs on recovery startups. The PathUserData test checks makes sure that
- the path to the User Data folder exists and has the right permissions.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.SQLiteIntegrityAppCache"
- enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the SQLiteIntegrityAppCache test that
- runs on recovery startups. The test checks the integrity of the App Cache
- database.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.SQLiteIntegrityArchivedHistory"
- enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the SQLiteIntegrityArchivedHistory
- test that runs on recovery startups. The test checks the integrity of the
- Archived History database.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.SQLiteIntegrityCookie"
- enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the SQLiteIntegrityCookie test that
- runs on recovery startups. The test checks the integrity of the Cookie
- database.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.SQLiteIntegrityDatabaseTracker"
- enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the SQLiteIntegrityDatabaseTracker
- test that runs on recovery startups. The test checks the integrity of the
- Database Tracker database.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.SQLiteIntegrityHistory"
- enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the SQLiteIntegrityHistory test that
- runs on recovery startups. The test checks the integrity of the History
- database.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.SQLiteIntegrityNSSCert"
- enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the SQLiteIntegrityNSSCert test that
- runs on recovery startups. The test checks the integrity of the NSS
- Certificate database.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.SQLiteIntegrityNSSKey"
- enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the SQLiteIntegrityNSSKey test that
- runs on recovery startups. The test checks the integrity of the NSS Key
- database.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.SQLiteIntegrityThumbnails"
- enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the SQLiteIntegrityThumbnails test
- that runs on recovery startups. The test checks the integrity of the
- Thumbnails database.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.SQLiteIntegrityWebData"
- enum="DiagnosticsResult">
- <summary>
- Shows the success and failure rates of the SQLiteIntegrityWebData test that
- runs on recovery startups. The test checks the integrity of the Web Data
- database.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.Test.Version" enum="DiagnosticsResult">
- <summary>
- TBD - Not run automatically yet, so this is just a placeholder for future
- metrics collection. Any samples collected here represent users running
- diagnostics manually.
- </summary>
-</histogram>
-
-<histogram name="Diagnostics.TestFailures" enum="DiagnosticsTestName">
- <summary>
- Histogram comparing the various types of diagnostic test failures when
- diagnostic tests are run. Note that some types of test failures cause the
- rest of the tests to be skipped.
- </summary>
-</histogram>
-
-<histogram name="DisabledExtension.ExtensionWipedStatus" enum="BooleanWiped">
- <summary>Whether an extension has been wiped out.</summary>
-</histogram>
-
-<histogram name="DisabledExtension.SideloadWipeoutCount">
- <summary>
- How many external extensions get wiped out as a result of the Sideload
- Wipeout one-time initiative.
- </summary>
-</histogram>
-
-<histogram name="DisabledExtension.SideloadWipeoutNeeded" enum="BooleanSuccess">
- <summary>
- Whether any extension got wiped out as a result of the Sideload Wipeout
- one-time initiative.
- </summary>
-</histogram>
-
-<histogram name="DisabledExtension.UserSelection" enum="SideloadWipeoutBubble">
- <summary>
- The user selection in the Sideload Wipeout bubble, grouped by the
- UmaWipeoutHistogramOptions enum.
- </summary>
-</histogram>
-
-<histogram name="DiskCache.0.FilesAge" units="hours">
- <summary>The age of the cache's files (wall time).</summary>
-</histogram>
-
-<histogram name="DiskCache.2.FilesAge" units="hours">
- <summary>
- The age of the cache's files (wall time). Media-specific cache.
- </summary>
-</histogram>
-
-<histogram name="DiskCache.3.FilesAge" units="hours">
- <summary>The age of the cache's files (wall time). AppCache.</summary>
-</histogram>
-
-<histogram name="DiskCache.4.FilesAge" units="hours">
- <summary>The age of the cache's files (wall time). ShaderCache.</summary>
-</histogram>
-
-<histogram name="DiskCache.TotalIOTime" units="milliseconds">
- <obsolete>
- Deprecated.
- </obsolete>
- <summary>
- The total time it takes to perform a payload IO operation, for the regular
- disk cache.
- </summary>
-</histogram>
-
-<histogram name="DNS.AttemptCancelled">
- <summary>
- The attempt which completed after the job was already cancelled.
- </summary>
-</histogram>
-
-<histogram name="DNS.AttemptDiscarded">
- <summary>
- The attempt which completed after the job was already cancelled OR the
- attempt that has finished after host resolution was already completed by an
- earlier attempt.
- </summary>
-</histogram>
-
-<histogram name="DNS.AttemptFailDuration" units="milliseconds">
- <summary>
- Duration of time taken in OS resolutions for actual navigations. These
- attempts which completed after the job was already canceled OR after the job
- was already completed by an earlier attempt. Note that cached resolutions
- may provide low (0ms?) resolution times.
- </summary>
-</histogram>
-
-<histogram name="DNS.AttemptFailure">
- <summary>The attempt that has not resolved the host successfully.</summary>
-</histogram>
-
-<histogram name="DNS.AttemptFirstFailure">
- <summary>
- The attempt that resolved the host first and the resolution was not
- successful.
- </summary>
-</histogram>
-
-<histogram name="DNS.AttemptFirstSuccess">
- <summary>
- The attempt that resolved the host first and the resolution was successful.
- </summary>
-</histogram>
-
-<histogram name="DNS.AttemptSuccess">
- <summary>The attempt that has resolved the host successfully.</summary>
-</histogram>
-
-<histogram name="DNS.AttemptSuccessDuration" units="milliseconds">
- <summary>
- Duration of time taken in OS resolutions that succeeded and were requested
- for actual navigations. These attempts which completed after the job was
- already canceled OR after the job was already completed by an earlier
- attempt. Note that cached resolutions may provide low (0ms?) resolution
- times.
- </summary>
-</histogram>
-
-<histogram name="DNS.AttemptTimeSavedByRetry" units="milliseconds">
- <summary>
- This histogram shows the time saved by having spawned an extra attempt, when
- the first attempt didn't finish before retry attempt.
- </summary>
-</histogram>
-
-<histogram name="DNS.CacheEvicted" units="milliseconds">
- <summary>
- The time left to expiration of an entry when it is removed while compacting
- the HostCache.
- </summary>
-</histogram>
-
-<histogram name="DNS.CacheExpired" units="milliseconds">
- <summary>
- The time since expiration of an entry when it is removed while compacting
- the HostCache.
- </summary>
-</histogram>
-
-<histogram name="DNS.CacheExpiredOnGet" units="milliseconds">
- <summary>
- The time since expiration of an entry when it is removed on lookup.
- </summary>
-</histogram>
-
-<histogram name="DNS.EmptyAddressListAndNoError"
- enum="DNSEmptyAddressListAndNoError">
- <summary>
- Error status when an empty address list was found in OnLookupComplete().
- </summary>
-</histogram>
-
-<histogram name="DNS.IndependentFailedNavigation" units="milliseconds">
- <summary>
- When either a pre-resolution was not done recently enough to provide
- benefit, or the the corresponding pre-resolution is still pending, this
- histogram shows the duration of time used to resolve a hostname as not
- existing during a failed attempt to navigate to (GET) a URL. In newer
- versions, if the hostname has never been found as a link during a page scan,
- and it has a referring URL, then it is added to referrer list data structure
- (hoping we'll do better next time).
- </summary>
-</histogram>
-
-<histogram name="DNS.IndependentNavigation" units="milliseconds">
- <summary>
- When either a pre-resolution was not done recently enough to provide
- benefit, or the the corresponding pre-resolution is still pending, this
- histogram shows the duration of the duration of time used to resolve a
- hostname to navigate to (GET) a URL. In newer versions, if the hostname has
- never been found as a link during a page scan, and it has a referring URL,
- then it is added to referrer list data structure (hoping we'll do better
- next time).
- </summary>
-</histogram>
-
-<histogram name="DNS.JobQueueTime" units="milliseconds">
- <summary>
- Time elapsed between the time the HostResolverImpl::Job was created and the
- time the Job was started (a getaddrinfo call was dispatched to the thread
- pool).
- </summary>
-</histogram>
-
-<histogram name="DNS.JobQueueTime_HIGHEST" units="milliseconds">
- <summary>
- Time elapsed between the time the HostResolverImpl::Job was created and the
- time the Job was started (a getaddrinfo call was dispatched to the thread
- pool). Includes only Jobs which had priority HIGHEST when started.
- </summary>
-</histogram>
-
-<histogram name="DNS.JobQueueTime_IDLE" units="milliseconds">
- <summary>
- Time elapsed between the time the HostResolverImpl::Job was created and the
- time the Job was started (a getaddrinfo call was dispatched to the thread
- pool). Includes only Jobs which had priority IDLE when started.
- </summary>
-</histogram>
-
-<histogram name="DNS.JobQueueTime_LOW" units="milliseconds">
- <summary>
- Time elapsed between the time the HostResolverImpl::Job was created and the
- time the Job was started (a getaddrinfo call was dispatched to the thread
- pool). Includes only Jobs which had priority LOW when started.
- </summary>
-</histogram>
-
-<histogram name="DNS.JobQueueTime_LOWEST" units="milliseconds">
- <summary>
- Time elapsed between the time the HostResolverImpl::Job was created and the
- time the Job was started (a getaddrinfo call was dispatched to the thread
- pool). Includes only Jobs which had priority LOWEST when started.
- </summary>
-</histogram>
-
-<histogram name="DNS.JobQueueTime_MEDIUM" units="milliseconds">
- <summary>
- Time elapsed between the time the HostResolverImpl::Job was created and the
- time the Job was started (a getaddrinfo call was dispatched to the thread
- pool). Includes only Jobs which had priority MEDIUM when started.
- </summary>
-</histogram>
-
-<histogram name="DNS.JobQueueTimeAfterChange" units="milliseconds">
- <summary>
- Time elapsed between the last time the priority of a HostResolverImpl::Job
- changed (when a Request was attached or detached) and the time the Job was
- started (a getaddrinfo call was dispatched to the thread pool).
- </summary>
-</histogram>
-
-<histogram name="DNS.JobQueueTimeAfterChange_HIGHEST" units="milliseconds">
- <summary>
- Time elapsed between the last time the priority of a HostResolverImpl::Job
- changed (when a Request was attached or detached) and the time the Job was
- started (a getaddrinfo call was dispatched to the thread pool). Includes
- only Jobs which had priority HIGHEST when started.
- </summary>
-</histogram>
-
-<histogram name="DNS.JobQueueTimeAfterChange_IDLE" units="milliseconds">
- <summary>
- Time elapsed between the last time the priority of a HostResolverImpl::Job
- changed (when a Request was attached or detached) and the time the Job was
- started (a getaddrinfo call was dispatched to the thread pool). Includes
- only Jobs which had priority IDLE when started.
- </summary>
-</histogram>
-
-<histogram name="DNS.JobQueueTimeAfterChange_LOW" units="milliseconds">
- <summary>
- Time elapsed between the last time the priority of a HostResolverImpl::Job
- changed (when a Request was attached or detached) and the time the Job was
- started (a getaddrinfo call was dispatched to the thread pool). Includes
- only Jobs which had priority LOW when started.
- </summary>
-</histogram>
-
-<histogram name="DNS.JobQueueTimeAfterChange_LOWEST" units="milliseconds">
- <summary>
- Time elapsed between the last time the priority of a HostResolverImpl::Job
- changed (when a Request was attached or detached) and the time the Job was
- started (a getaddrinfo call was dispatched to the thread pool). Includes
- only Jobs which had priority LOWEST when started.
- </summary>
-</histogram>
-
-<histogram name="DNS.JobQueueTimeAfterChange_MEDIUM" units="milliseconds">
- <summary>
- Time elapsed between the last time the priority of a HostResolverImpl::Job
- changed (when a Request was attached or detached) and the time the Job was
- started (a getaddrinfo call was dispatched to the thread pool). Includes
- only Jobs which had priority MEDIUM when started.
- </summary>
-</histogram>
-
-<histogram name="DNS.PrefetchCacheEviction" units="milliseconds">
- <summary>
- The duration of time used (most recently) to pre-resolve a hostname, when
- the prefetched resolution was apparently evicted from the cache. The
- included samples only list pre-resolution times when the later
- navigations/fetches took in excess of 15ms.
- </summary>
-</histogram>
-
-<histogram name="DNS.PrefetchCacheEvictionL" units="milliseconds">
- <summary>
- The duration of time used (most recently) to pre-resolve a hostname, when
- the prefetched resolution was apparently evicted from the cache. The
- included samples only list pre-resolution times when the later
- navigations/fetches took in excess of 15ms.
- </summary>
-</histogram>
-
-<histogram name="DNS.PrefetchFoundName">
- <summary>Replaced by DNS.PrefetchFoundNameL.</summary>
-</histogram>
-
-<histogram name="DNS.PrefetchFoundNameL" units="milliseconds">
- <obsolete>
- Deprecated 2/2010, and replaced by DNS.PrefetchResolution
- </obsolete>
- <summary>
- The duration of time used by the DNS pre-resolving threads to resolve a host
- name via the network. Any resolutions that are faster than 15ms are
- considered to be local cache hits, not requiring network access, and are not
- included in this histogram. This histogram is most useful for estimating the
- typical cost of a name resolution, but it also estimates the total number of
- network-based resolutions induced by this feature. Not all these
- resolutions prove helpful (i.e., the user does not always actually visit the
- resolved hostnames).
- </summary>
-</histogram>
-
-<histogram name="DNS.PrefetchNegativeHit">
- <summary>Replaced by DNS.PrefetchNegativeHitL.</summary>
-</histogram>
-
-<histogram name="DNS.PrefetchNegativeHitL" units="milliseconds">
- <summary>
- The duration of time saved due to DNS pre-resolving in the &quot;name not
- found&quot; case. Time &quot;savings&quot; shown in the histogram are
- defined to be the difference between the DNS pre-resolution duration, and
- the DNS resolution duration seen during a navigation. These cache hits only
- list events where the DNS pre-resolve duration for a host was in excess of
- 15ms (i.e., the network was consulted), and the actual DNS resolution (when
- a user attempted to navigate to a link with the same host name) took less
- than 15ms (i.e., the network was not consulted), which means the gain was a
- result of a &quot;cache hit&quot; in the OS cache. For some users with
- LANs, all negative results (even when the DNS cache might otherwise help)
- take about 2.5 seconds (due to timeouts for netbios broadcasts), and hence
- no savings are possible (or shown) for such users in this category.
- </summary>
-</histogram>
-
-<histogram name="DNS.PrefetchPositiveHit">
- <summary>Replaced by DNS.PrefetchPositiveHitL.</summary>
-</histogram>
-
-<histogram name="DNS.PrefetchPositiveHitL" units="milliseconds">
- <summary>
- The duration of time saved due to DNS pre-resolving in the &quot;name was
- found&quot; case, and induced by either a page scan for a link or an omnibox
- entry by the user. Time &quot;savings&quot; shown in the histogram are
- defined to be the difference between the DNS pre-resolution duration, and
- the DNS resolution duration seen during a navigation. These cache hits only
- list events where the DNS pre-resolve duration for a host was in excess of
- 15ms (i.e., the network was consulted), and the actual DNS resolution (when
- a user attempted to navigate to a link with the same host name) took less
- than 15ms (i.e., the network was not consulted), which means the gain was a
- result of a &quot;cache hit&quot; in the OS cache.
- </summary>
-</histogram>
-
-<histogram name="DNS.PrefetchQueue" units="milliseconds">
- <summary>
- The duration of time spent by a proposed resolution waiting in the queue to
- be resolved. This number is in addition to any DNS resolution time that may
- come later.
- </summary>
-</histogram>
-
-<histogram name="DNS.PrefetchReferredPositiveHit" units="milliseconds">
- <summary>
- The duration of time saved due to DNS pre-resolving in the &quot;name was
- found&quot; case, and induced by predicting (using referrer lists) that a
- resolution was needed. Time &quot;savings&quot; shown in the histogram are
- defined to be the difference between the DNS pre-resolution duration, and
- the DNS resolution duration seen during a navigation. These cache hits only
- list events where the DNS pre-resolve duration for a host was in excess of
- 15ms (i.e., the network was consulted), and the actual DNS resolution (when
- a user attempted to navigate to a link with the same host name) took less
- than 15ms (i.e., the network was not consulted), which means the gain was a
- result of a &quot;cache hit&quot; in the OS cache.
- </summary>
-</histogram>
-
-<histogram name="DNS.PrefetchResolution" units="milliseconds">
- <summary>
- The duration of time used by the DNS pre-resolving threads to resolve a host
- name via the network. Any resolutions that are faster than 15ms are
- considered to be local cache hits, not requiring network access, and are not
- included in this histogram. This histogram is most useful for estimating the
- typical cost of a name resolution, but it also estimates the total number of
- network-based resolutions induced by this feature. Not all these
- resolutions prove helpful (i.e., the user does not always actually visit the
- resolved hostnames).
- </summary>
-</histogram>
-
-<histogram name="DNS.QueueRecycledDeltaOver2">
- <summary>
- When, due to congestion avoidance, a queued pre-resolution is abandoned
- (recycled) without actually being resolved, this histograms records the age
- in the queue of that entry. Only times over 2 seconds are recorded in this
- histogram.
- </summary>
-</histogram>
-
-<histogram name="DNS.QueueRecycledUnder2">
- <summary>
- When, due to congestion avoidance, a queued pre-resolution is abandoned
- (recycled) without actually being resolved, this histograms records the age
- in the queue of that entry. Only times less than or equal to 2 seconds are
- recorded in this histogram.
- </summary>
-</histogram>
-
-<histogram name="DNS.ResolveCategory" enum="ResolutionCategory">
- <summary>
- Counts of successes and failures of OS resolutions in various categories.
- </summary>
-</histogram>
-
-<histogram name="DNS.ResolveFail" units="milliseconds">
- <summary>
- Duration of time taken in OS resolutions for actual navigations. Note that
- cached OS resolutions may provide low (0ms?) resolution times.
- </summary>
-</histogram>
-
-<histogram name="DNS.ResolveFail_FAMILY_IPV4" units="milliseconds">
- <summary>Same as DNS.ResolveFail, but limited to pure IPv4 lookups.</summary>
-</histogram>
-
-<histogram name="DNS.ResolveFail_FAMILY_IPV6" units="milliseconds">
- <summary>Same as DNS.ResolveFail, but limited to pure IPv6 lookups.</summary>
-</histogram>
-
-<histogram name="DNS.ResolveFail_FAMILY_UNSPEC" units="milliseconds">
- <summary>Same as DNS.ResolveFail, but limited to IPv4/IPv6 lookups.</summary>
-</histogram>
-
-<histogram name="DNS.ResolveSpeculativeFail" units="milliseconds">
- <summary>
- Duration of time taken in speculative OS resolutions. Note that cached OS
- resolutions may provide low (0ms?) resolution times.
- </summary>
-</histogram>
-
-<histogram name="DNS.ResolveSpeculativeSuccess" units="milliseconds">
- <summary>
- Duration of time taken in speculative OS resolution that succeeded. Note
- that cached resolutions may provide low (0ms?) resolution times.
- </summary>
-</histogram>
-
-<histogram name="DNS.ResolveSuccess" units="milliseconds">
- <summary>
- Duration of time taken in OS resolutions that succeeded and were requested
- for actual navigations. Note that cached resolutions may provide low (0ms?)
- resolution times.
- </summary>
-</histogram>
-
-<histogram name="DNS.ResolveSuccess_FAMILY_IPV4" units="milliseconds">
- <summary>
- Same as DNS.ResolveSuccess, but limited to pure IPv4 lookups.
- </summary>
-</histogram>
-
-<histogram name="DNS.ResolveSuccess_FAMILY_IPV6" units="milliseconds">
- <summary>
- Same as DNS.ResolveSuccess, but limited to pure IPv6 lookups.
- </summary>
-</histogram>
-
-<histogram name="DNS.ResolveSuccess_FAMILY_UNSPEC" units="milliseconds">
- <summary>
- Same as DNS.ResolveSuccess, but limited to IPv4/IPv6 lookups.
- </summary>
-</histogram>
-
-<histogram name="DNS.ResolveUnspecWaste" enum="ResolutionUnspecWasteCategory">
- <obsolete>
- Deprecated as of 5/2013.
- </obsolete>
- <summary>
- Counts of hits and misses in the DNS cache and DNS jobs pool of wasted
- HostResolverImpl::Jobs that could be avoided by always resolving using
- AF_UNSPEC.
- </summary>
-</histogram>
-
-<histogram name="DNS.TotalTime" units="milliseconds">
- <summary>
- Duration of time since a HostResolverImpl::Resolve request to the time a
- result is posted. Excludes canceled, evicted, and aborted requests. Includes
- cache hits (recorded as 0). Excludes speculative requests.
- </summary>
-</histogram>
-
-<histogram name="DNS.TotalTime_speculative" units="milliseconds">
- <summary>
- Duration of time since a HostResolverImpl::Resolve request to the time a
- result is posted. Excludes canceled, evicted, and aborted requests. Includes
- cache hits (recorded as 0). Speculative requests only.
- </summary>
-</histogram>
-
-<histogram name="DNS.UnexpectedResolution">
- <summary>
- In some cases, such as when content arrives with embedded references to
- other servers, the prefetch system can't (or doesn't) attempt to pre-resolve
- the hostnames. As an example, a visit to www.cnn.com will fetch content
- with references to about 12 additional hostnames, none of which are
- currently anticipated. Such resolutions are termed &quot;Unexpected
- Resolutions,&quot; and the durations associated with those DNS resolutions
- are shown below. Future features may attempt to learn (from prior
- experience locally, or from server provided hints), what secondary hostname
- resolutions should be done when a primary resolution (or navigation) takes
- place. This histogram shows what the potential savings are that
- &quot;remain on the table&quot; until we employ some of these more advanced
- features.
- </summary>
-</histogram>
-
-<histogram name="DNS.UnexpectedResolutionL">
- <summary>
- In some cases, such as when content arrives with embedded references to
- other servers, or when a page (such as one in SSL) preclude scanning and
- prefetching, the prefetch system can't (or doesn't) attempt to pre-resolve
- the hostnames. As an example, a visit to www.cnn.com will fetch content
- with references to about 12 additional hostnames, none of which might be
- anticipated. Similarly, clicking on a link in an SSL page won't be
- anticipated (since scanning in not allowed by default). Such resolutions are
- termed &quot;Unexpected Resolutions,&quot; and the durations associated with
- those navigation induced DNS resolutions are shown below. If a referring
- URL is available for the navigation, the relationship to the referring URL
- was recorded, and future navigations to the referring hostname would have
- induced a pre-resolution of hostname that caused an entry below. Such any
- entry may facilitate future listing in the ReferredPositiveHit histogram.
- </summary>
-</histogram>
-
-<histogram name="DnsProbe.ErrorPageUpdateStatus" enum="DnsProbe.ProbeStatus">
- <summary>Status of DNS probe updates sent to a DNS error page.</summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.Elapsed" units="ms">
- <obsolete>
- Renamed 7/2013 to DnsProbe.ProbeDuration.
- </obsolete>
- <summary>Time between starting and finishing DNS probe.</summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.NcnOffline.Elapsed" units="ms">
- <obsolete>
- Removed 7/2013.
- </obsolete>
- <summary>
- Time between starting and finishing DNS probe when NCN says we're offline.
- </summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.NcnOffline.Result"
- enum="DnsProbe.ObsoleteProbeResult">
- <obsolete>
- Removed 7/2013.
- </obsolete>
- <summary>
- Result of DNS probes sent by the probe service when NCN says we're offline.
- </summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.NcnOnline.Elapsed" units="ms">
- <obsolete>
- Removed 7/2013.
- </obsolete>
- <summary>
- Time between starting and finishing DNS probe when NCN says we're online.
- </summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.NcnOnline.Result"
- enum="DnsProbe.ObsoleteProbeResult">
- <obsolete>
- Removed 7/2013.
- </obsolete>
- <summary>
- Result of DNS probes sent by the probe service when NCN says we're online.
- </summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.Result" enum="DnsProbe.ObsoleteProbeResult">
- <obsolete>
- Renamed 7/2013 to DnsProbe.ProbeResult. (Also switched to the full
- DnsProbe.ProbeStatus enum.)
- </obsolete>
- <summary>Result of DNS probes sent by the probe service.</summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.ResultBadConfig.Elapsed" units="ms">
- <obsolete>
- Removed 7/2013.
- </obsolete>
- <summary>Elapsed time of DNS probes that return PROBE_BAD_CONFIG.</summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.ResultBadConfig.SystemIsLocalhost"
- enum="DnsProbe.SystemIsLocalhost">
- <obsolete>
- Removed 7/2013.
- </obsolete>
- <summary>
- Whether the only nameserver in the system DNS config was 127.0.0.1 when the
- probe result was BAD_CONFIG.
- </summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.ResultBadConfig.SystemJobResult"
- enum="DnsProbe.JobResult">
- <obsolete>
- Removed 7/2013.
- </obsolete>
- <summary>
- The result of the system probe job when the overall probe result was
- BAD_CONFIG.
- </summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.ResultBadConfig.SystemNameserverCount">
- <obsolete>
- Removed 7/2013.
- </obsolete>
- <summary>
- The number of nameservers in the system DNS config when the probe result was
- BAD_CONFIG.
- </summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.ResultNoInternet.Elapsed" units="ms">
- <obsolete>
- Removed 7/2013.
- </obsolete>
- <summary>Elapsed time of DNS probes that return PROBE_NO_INTERNET.</summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.ResultNxdomain.Elapsed" units="ms">
- <obsolete>
- Removed 7/2013.
- </obsolete>
- <summary>Elapsed time of DNS probes that return PROBE_NXDOMAIN.</summary>
-</histogram>
-
-<histogram name="DnsProbe.Probe.ResultUnknown.Elapsed" units="ms">
- <obsolete>
- Removed 7/2013.
- </obsolete>
- <summary>Elapsed time of DNS probes that return PROBE_UNKNOWN.</summary>
-</histogram>
-
-<histogram name="DnsProbe.ProbeDuration" units="ms">
- <summary>Time between starting and finishing DNS probe.</summary>
-</histogram>
-
-<histogram name="DnsProbe.ProbeResult" enum="DnsProbe.ProbeStatus">
- <summary>Result of DNS probes sent by the probe service.</summary>
-</histogram>
-
-<histogram name="DomainBoundCerts.DBLoadedCount">
- <summary>Number of certs loaded from domain bound cert database.</summary>
-</histogram>
-
-<histogram name="DomainBoundCerts.DBLoadTime" units="ms">
- <summary>Time spent loading domain bound cert database.</summary>
-</histogram>
-
-<histogram name="DomainBoundCerts.DBSizeInKB" units="KB">
- <summary>
- The size, on disk, of the domain bound cert database as it is being loaded.
- </summary>
-</histogram>
-
-<histogram name="DomainBoundCerts.GenerateCertTime" units="ms">
- <summary>Time spent generating a domain bound cert.</summary>
-</histogram>
-
-<histogram name="DomainBoundCerts.GetCertTime" units="ms">
- <summary>
- Combined time for GetDomainBoundCert retrieval (both synchronous and
- asynchronous).
- </summary>
-</histogram>
-
-<histogram name="DomainBoundCerts.GetCertTimeAsync" units="ms">
- <summary>
- Time for asynchronous retrieval (from the GetDomainBoundCert call until
- completion callback is called).
- </summary>
-</histogram>
-
-<histogram name="DomainBoundCerts.GetCertTimeSync" units="ms">
- <summary>Time for synchronous GetDomainBoundCert cert retrieval.</summary>
-</histogram>
-
-<histogram name="DomainBoundCerts.GetDomainBoundCertResult"
- enum="DomainBoundCerts.GetCertResult">
- <summary>Result of GetDomainBoundCert function.</summary>
-</histogram>
-
-<histogram name="DomainBoundCerts.KillDatabaseResult" enum="BooleanSuccess">
- <summary>
- Whether the domain-bound certs sqlite database was killed succesfully when
- an unrecoverable error was detected.
- </summary>
-</histogram>
-
-<histogram name="DomainBoundCerts.Support" enum="DomainBoundCerts.Support">
- <summary>
- Counts of SSL client sockets broken down by support for Domain Bound
- Certificates TLS extension. Counts only connections with full handshakes,
- resumed sessions are not counted.
- </summary>
-</histogram>
-
-<histogram name="DomainBoundCerts.TaskMaxWaitTime" units="ms">
- <summary>
- Longest time spent by requests waiting for load of domain bound cert
- database.
- </summary>
-</histogram>
-
-<histogram name="DomainBoundCerts.TaskWaitCount">
- <summary>
- Number of requests that waited for load of domain bound cert database.
- </summary>
-</histogram>
-
-<histogram name="Download.AcceptRangesBytes.KBytes" units="KB">
- <summary>The length of downloads for serves that accept byte ranges.</summary>
-</histogram>
-
-<histogram name="Download.AcceptRangesMissingOrInvalid.KBytes" units="KB">
- <summary>
- The length of downloads for serves that do not specify whether the accept
- ranges, or have invalid ranges specified.
- </summary>
-</histogram>
-
-<histogram name="Download.AcceptRangesNone.KBytes" units="KB">
- <summary>
- The length of downloads for serves that do not accept ranges.
- </summary>
-</histogram>
-
-<histogram name="Download.ActualBandwidth" units="Bytes/second">
- <summary>The actual bandwidth (per read) of a download.</summary>
-</histogram>
-
-<histogram name="Download.ApiFunctions" enum="DownloadFunctions">
- <summary>Downloads extension API function calls.</summary>
-</histogram>
-
-<histogram name="Download.BandwidthDiskBytesPerSecond">
- <summary>
- Disk bandwidth (defined as total bytes divided by the amount of time blocked
- on write or close on the file descriptor) seen for a single download.
- </summary>
-</histogram>
-
-<histogram name="Download.BandwidthOverallBytesPerSecond">
- <summary>
- Overall bandwidth seen for the download. Note that this is measured at the
- point at which the file is written, and so will not take into account the
- time costs of activities that occur after file write is completed (e.g. safe
- browsing scanning).
- </summary>
-</histogram>
-
-<histogram name="Download.BandwidthUsed" units="%">
- <summary>
- The percentage of the potential bandwidth actually used (per read) of a
- download. An entry of 100% implies that Chrome was the limiting factor in
- download speed.
- </summary>
-</histogram>
-
-<histogram name="Download.ClearAllSize">
- <summary>
- The number of downloads in history at the time it is cleared.
- </summary>
-</histogram>
-
-<histogram name="Download.ContentDisposition" enum="DownloadContentDisposition">
- <summary>
- Content-Disposition header features. The presence of a Content-Disposition
- header, use of 'name', 'filename' and 'filename*' parameters, and string
- encoding schemes are counted for each unthrottled download. The total number
- downloads is Download.Counts[5] (Initiated and Unthrottled).
- </summary>
-</histogram>
-
-<histogram name="Download.ContentImageType" enum="DownloadImageType">
- <summary>Types of images that are downloaded.</summary>
-</histogram>
-
-<histogram name="Download.ContentType" enum="DownloadContentType">
- <summary>Content types that are downloaded.</summary>
-</histogram>
-
-<histogram name="Download.Counts" enum="DownloadCountType">
- <summary>
- Various individual counts in the download system; see DownloadCountType for
- details.
- </summary>
-</histogram>
-
-<histogram name="Download.CountsChrome" enum="ChromeDownloadCountType">
- <summary>
- Various individual counts in the download system, for example the number of
- downloads blocked by throttling from the DownloadRequestLimiter.
- </summary>
-</histogram>
-
-<histogram name="Download.DangerousDownloadValidated"
- enum="DownloadItem.DangerType">
- <summary>
- User chose to save a download which was marked dangerous. Grouped by the
- type of danger.
- </summary>
-</histogram>
-
-<histogram name="Download.DangerousFile.DangerousDownloadValidated"
- enum="DownloadItem.DangerousFileType">
- <summary>
- User chose to save a download which was marked DANGEROUS_FILE. Grouped by
- the type of file.
- </summary>
-</histogram>
-
-<histogram name="Download.DangerousFile.Discard"
- enum="DownloadItem.DangerousFileType">
- <summary>
- A download which was marked DANGEROUS_FILE was discarded without the user
- directly choosing, because the browser was closed. Grouped by the file
- extension.
- </summary>
-</histogram>
-
-<histogram name="Download.DangerousFile.UserDiscard"
- enum="DownloadItem.DangerousFileType">
- <summary>
- User chose to discard a download which was marked DANGEROUS_FILE. Grouped by
- the file extension.
- </summary>
-</histogram>
-
-<histogram name="Download.DatabaseRecordDropped"
- enum="DownloadDatabaseRecordDroppedType">
- <summary>Reason for dropping a record read in from the DB.</summary>
-</histogram>
-
-<histogram name="Download.DatabaseRemoveDownloadsCount">
- <summary>Number of downloads removed from the history at once.</summary>
-</histogram>
-
-<histogram name="Download.DatabaseRemoveDownloadsTime" units="microseconds">
- <summary>How long it took to delete some downloads from history.</summary>
-</histogram>
-
-<histogram name="Download.DatabaseRemoveDownloadsTimePerRecord"
- units="nanoseconds/record">
- <summary>
- How long it took to delete some downloads from history, per download.
- </summary>
-</histogram>
-
-<histogram name="Download.Discard" enum="DownloadItem.DangerType">
- <summary>
- A download which was marked dangerous was discarded without the user
- directly choosing, because the browser was closed. Grouped by the type of
- danger.
- </summary>
-</histogram>
-
-<histogram name="Download.DiskBandwidthUsedPercentage" units="Percent">
- <summary>
- The percentage of the available disk bandwidth that was used by the
- download. 100% indicates that the disk bandwidth was the limiting factor
- for the download.
- </summary>
-</histogram>
-
-<histogram name="Download.DOMEvent" enum="DownloadDOMEvent">
- <summary>User actions in chrome://downloads</summary>
-</histogram>
-
-<histogram name="Download.DownloadSize" units="KB">
- <summary>The size of successfully completed downloads.</summary>
-</histogram>
-
-<histogram name="Download.DownloadWarningShownOnShelf"
- enum="DownloadItem.DangerType">
- <summary>
- A download warning was shown in the shelf. Note that some downloads may not
- be shown on the shelf, e.g., if chrome://downloads is already open when the
- download completes, or if an extension is using the downloads API. Grouped
- by the type of danger.
- </summary>
-</histogram>
-
-<histogram name="Download.FilePickerResult" enum="DownloadFilePickerResult">
- <summary>
- How the user interacts with the file chooser when doing a &quot;Save
- As&quot; for non-full-page saves.
- </summary>
-</histogram>
-
-<histogram name="Download.FileThreadBlockedTime">
- <summary>
- The amount of time in milliseconds the file thread blocks for each set of
- buffers drained from the incoming pipe (ms).
- </summary>
-</histogram>
-
-<histogram name="Download.FileThreadReceiveBuffers">
- <summary>
- The number of buffers in a call to DownloadManager::UpdateDownload.
- </summary>
-</histogram>
-
-<histogram name="Download.FirstOpenTime" units="milliseconds">
- <summary>
- The time between a download completing and the file being opened for the
- first time.
- </summary>
-</histogram>
-
-<histogram name="Download.HistorySize">
- <summary>
- The number of items in the History database, at the time a new download is
- recorded.
- </summary>
-</histogram>
-
-<histogram name="Download.HistorySize2">
- <summary>
- The number of items in the History database, at the time a new download is
- recorded. Higher maximum, more buckets than Download.HistorySize.
- </summary>
-</histogram>
-
-<histogram name="Download.InterruptedAtEndError" enum="NetErrorCodes">
- <summary>
- Positive net error code that caused a download to be interrupted at the
- *end* of a download (when the number of bytes is known). This is only
- triggered when the total content size is known before any bytes are
- transferred, such as when a Content-Length header is supplied.
- </summary>
-</histogram>
-
-<histogram name="Download.InterruptedAtEndReason" enum="InterruptReason">
- <summary>
- The reason that a download was interrupted at the *end* of a download (when
- the number of bytes is known). This is only triggered when the total content
- size is known before any bytes are transferred, such as when a
- Content-Length header is supplied.
- </summary>
-</histogram>
-
-<histogram name="Download.InterruptedError" enum="NetErrorCodes">
- <summary>
- Positive net error code that caused a download to be interrupted.
- </summary>
-</histogram>
-
-<histogram name="Download.InterruptedOverrunBytes">
- <summary>
- The excessive number of bytes which have been received at the time that a
- download is interrupted. This is only triggered when the total content size
- is known before any bytes are transferred, such as when a Content-Length
- header is supplied.
- </summary>
-</histogram>
-
-<histogram name="Download.InterruptedReason" enum="InterruptReason">
- <summary>The reason that a download was interrupted.</summary>
-</histogram>
-
-<histogram name="Download.InterruptedReceivedSizeK" units="KB">
- <summary>
- The number of kilobytes received for a download at the time it is
- interrupted.
- </summary>
-</histogram>
-
-<histogram name="Download.InterruptedTotalSizeK" units="KB">
- <summary>
- The reported total size in kilobytes for a download at the time it is
- interrupted. This is essentially the size reported by the Content-Length
- header. If no size is specified up-front, it is not recorded in the
- histogram. For example, a download transferred with chunked encoding will
- not be recorded.
- </summary>
-</histogram>
-
-<histogram name="Download.InterruptedUnderrunBytes">
- <summary>
- The total number of bytes minus the received number of bytes at the time
- that a download is interrupted. This is only triggered when the total
- content size is known before any bytes are transferred, such as when a
- Content-Length header is supplied.
- </summary>
-</histogram>
-
-<histogram name="Download.InterruptedUnknownSize"
- enum="DownloadInterruptedUnknownSizeType">
- <summary>
- True if the size of an interrupted download is unknown, false if it is
- known.
- </summary>
-</histogram>
-
-<histogram name="Download.MaliciousDownloadClassified"
- enum="DownloadItem.DangerType">
- <summary>
- A download has been marked as malicious. Grouped by the type of danger. Each
- download can only be recorded once; it will be labeled with the first type
- of danger spotted.
- </summary>
-</histogram>
-
-<histogram name="Download.MapErrorNetworkFailed" enum="NetErrorCodes">
- <summary>
- Network error that produced a DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED
- result in DownloadResourceHandler::OnResponseCompleted().
- </summary>
-</histogram>
-
-<histogram name="Download.MapWinShErrorAccessDenied"
- enum="SpecialShFileOperationCodes">
- <summary>
- Windows error that produced a DOWNLOAD_INTERRUPT_REASON_ACCESS_DENIED result
- in MapShFileOperationCodes().
- </summary>
-</histogram>
-
-<histogram name="Download.MapWinShErrorFileFailed"
- enum="SpecialShFileOperationCodes">
- <summary>
- Windows error that produced a DOWNLOAD_INTERRUPT_REASON_FILE_FAILED result
- in MapShFileOperationCodes().
- </summary>
-</histogram>
-
-<histogram name="Download.OnChanged">
- <summary>
- Percentage of DownloadItem::Observer::OnDownloadUpdated events that
- signified a change in the extension API representation of the download.
- </summary>
-</histogram>
-
-<histogram name="Download.OpenMethod" enum="DownloadOpenMethod">
- <summary>
- Invocation count for methods of opening a download. For some file types,
- Chrome defaults to opening the file in the browser instead of invoking the
- system handler. The user has the option of overriding this behavior.
- </summary>
-</histogram>
-
-<histogram name="Download.OpensOutstanding">
- <summary>The number of unopened downloads, when one is opened.</summary>
-</histogram>
-
-<histogram name="Download.OpenTime" units="milliseconds">
- <summary>
- The time between a download completing and the file being opened.
- </summary>
-</histogram>
-
-<histogram name="Download.OriginStateOnFullResumption"
- enum="DownloadOriginStateOnResumption">
- <summary>
- Changes observed when a response is received for a full download resumption
- request.
- </summary>
-</histogram>
-
-<histogram name="Download.OriginStateOnPartialResumption"
- enum="DownloadOriginStateOnResumption">
- <summary>
- Changes observed when a response is received for a partial (byte-range)
- download resumption request.
- </summary>
-</histogram>
-
-<histogram name="Download.PotentialBandwidth" units="Bytes/second">
- <summary>
- The maximum bandwidth (per read) that Chrome could have provided for the
- download. If the actual bandwidth equals the potential bandwidth, that
- means that Chrome was the limiting factor for download bandwidth.
- </summary>
-</histogram>
-
-<histogram name="Download.ResourceHandlerBlockedPercentage" units="Percent">
- <summary>
- The percentage of the lifetime of the DownloadResourceHandler for which it
- was blocked by downstream flow control. 0% indicates that the network
- bandwidth was the limiting factor for the download.
- </summary>
-</histogram>
-
-<histogram name="Download.SavePackage" enum="DownloadSavePackageEvent">
- <summary>
- Events (e.g. Started, Cancelled, Finished, Write to Completed file, Write to
- Failed file) occuring within the state machine of a SavePackage operation.
- </summary>
-</histogram>
-
-<histogram name="Download.ShelfInProgressSizeOnAutoClose">
- <summary>
- The number of download items in progress on the shelf when it closes
- automatically.
- </summary>
-</histogram>
-
-<histogram name="Download.ShelfInProgressSizeOnUserClose">
- <summary>
- The number of download items in progress on the shelf when the user closes
- it.
- </summary>
-</histogram>
-
-<histogram name="Download.ShelfSizeOnAutoClose">
- <summary>
- The number of download items on the shelf when it closes automatically.
- </summary>
-</histogram>
-
-<histogram name="Download.ShelfSizeOnUserClose">
- <summary>
- The number of download items on the shelf when the user closes it.
- </summary>
-</histogram>
-
-<histogram name="Download.ShowDangerousDownloadConfirmationPrompt"
- enum="DownloadItem.DangerType">
- <summary>
- User saw the confirm prompt to save a download which was marked dangerous.
- Grouped by the type of danger.
- </summary>
-</histogram>
-
-<histogram name="Download.Sources" enum="DownloadSource">
- <summary>
- The initiation source (if initiated within the content layer of chrome) for
- a download.
- </summary>
-</histogram>
-
-<histogram name="Download.SourcesChrome" enum="ChromeDownloadSource">
- <summary>
- The initiation source (if initiated within the above-content layer of
- chrome) for a download.
- </summary>
-</histogram>
-
-<histogram name="Download.Time" units="milliseconds">
- <summary>Time between the start of a download and its completion.</summary>
-</histogram>
-
-<histogram name="Download.UserDiscard" enum="DownloadItem.DangerType">
- <summary>
- User chose to discard a download which was marked dangerous. Grouped by the
- type of danger.
- </summary>
-</histogram>
-
-<histogram name="Download.WriteLoopCount">
- <summary>
- The number of iterations for the write loop in BaseFile::AppendDataTofile().
- </summary>
-</histogram>
-
-<histogram name="Download.WriteSize" units="Bytes">
- <summary>The write size for calls to BaseFile::AppendDataTofile().</summary>
-</histogram>
-
-<histogram name="Drive.CacheDBOpenStatus" enum="DriveCacheDBOpenStatus">
- <obsolete>
- Deperecated 8/2013.
- </obsolete>
- <summary>Status of drive cache metadata database open.</summary>
-</histogram>
-
-<histogram name="Drive.DirectoryFeedLoadTime" units="milliseconds">
- <summary>
- Time spent to load the list of files in a single directory from Google Drive
- server.
- </summary>
-</histogram>
-
-<histogram name="Drive.EntireFeedLoadTime" units="microseconds">
- <obsolete>
- Deprecated 12/2013 due to the UMA stat bucket layout change. We'll use
- Drive.FullFeedLoadTime instead.
- </obsolete>
- <summary>
- Time spent to load the entire file system information from the server
- </summary>
-</histogram>
-
-<histogram name="Drive.EntryKind" enum="DriveEntryKind">
- <obsolete>
- Deprecated 10/2012.
- </obsolete>
- <summary>
- Provides breakdown of specific formats for hosted documents. Recorded when
- feed is loaded from the server.
- </summary>
-</histogram>
-
-<histogram name="Drive.FileFormat" enum="DriveFileFormat">
- <obsolete>
- Deprecated 10/2012.
- </obsolete>
- <summary>
- Provides breakdown of specific file formats for regular files. Recorded when
- feed is loaded from the server.
- </summary>
-</histogram>
-
-<histogram name="Drive.FullFeedLoadTime" units="milliseconds">
- <summary>
- Time spent to load the entire file system information from the server
- </summary>
-</histogram>
-
-<histogram name="Drive.InitialFeedLoadTime" units="microseconds">
- <obsolete>
- Deperecated 12/2013 since it did not record meaningful information.
- Drive.DirectoryFeedLoadTime should be checked for measuring the time until
- the user sees the first response of file lists.
- </obsolete>
- <summary>
- Time spent to load the initial part of the file system information from the
- server
- </summary>
-</histogram>
-
-<histogram name="Drive.MetadataDBInitResult" enum="DriveMetadataDBInitStatus">
- <summary>Result of drive resource metadata database initialization.</summary>
-</histogram>
-
-<histogram name="Drive.MetadataDBOpenExistingResult"
- enum="DriveMetadataDBInitStatus">
- <summary>
- Result of attempt to open existing drive resource metadata database.
- </summary>
-</histogram>
-
-<histogram name="Drive.MetadataDBVersionBeforeUpgradeCheck">
- <summary>
- Version number of drive resource metadata DB found on the disk before
- checking whether it should be upgraded. Recorded during Drive metadata
- initialization triggered by profile initialization.
- </summary>
-</histogram>
-
-<histogram name="Drive.NumberOfCacheFilesRecoveredAfterDBCorruption">
- <summary>
- Number of files recovered from Drive cache directory. Recorded when file
- recovery takes place after metadata DB corruption is found during metadata
- DB initialization.
- </summary>
-</histogram>
-
-<histogram name="Drive.NumberOfHostedDocuments">
- <summary>
- Number of hosted documents (spreadsheets etc.) on Drive. Logged when Drive
- is first accessed.
- </summary>
-</histogram>
-
-<histogram name="Drive.NumberOfRegularFiles">
- <summary>
- Number of regualr files on Drive. Logged when Drive is first accessed.
- </summary>
-</histogram>
-
-<histogram name="Drive.NumberOfTotalFiles">
- <summary>
- Number of total files (regualr files + hosted documents) on Drive. Logged
- when Drive is first accessed.
- </summary>
-</histogram>
-
-<histogram name="Drive.PushNotificationInitiallyEnabled" enum="BooleanEnabled">
- <summary>
- Tracks whether the push notification is initially enabled for Drive.
- Recorded when the first notification is processed. Notification is emulated
- by polling if the push notication is disabled.
- </summary>
-</histogram>
-
-<histogram name="Drive.PushNotificationRegistered" enum="BooleanRegistered">
- <summary>
- Tracks whether the push notification request is registered correctly for
- Drive. Recorded when the push notification manager is initialized.
- </summary>
-</histogram>
-
-<histogram name="Drive.SearchMetadataTime" units="microseconds">
- <summary>
- Time spent to perform an incremental search for auto completion of files on
- Drive. This time is collected for every partial query the user types for
- auto completion. For instance, if the user types &quot;faq&quot;,
- incremental searches are performed for &quot;f&quot;, &quot;fa&quot;, and
- &quot;faq&quot; respectively.
- </summary>
-</histogram>
-
-<histogram name="Enterprise.AutoEnrollmentExtraTime" units="milliseconds">
- <summary>
- Time since the user logged in until the auto-enrollment protocol completed.
- 0 is sampled when the protocol is done by the time the user logs in.
- </summary>
-</histogram>
-
-<histogram name="Enterprise.AutoEnrollmentProtocolTime" units="milliseconds">
- <summary>Total duration time of the auto-enrollment protocol.</summary>
-</histogram>
-
-<histogram name="Enterprise.AutoEnrollmentRequestNetworkErrorCode"
- enum="NetErrorCodes">
- <summary>
- Network error code (if applicable) for auto-enrollment requests.
- </summary>
-</histogram>
-
-<histogram name="Enterprise.AutoEnrollmentRequestStatus"
- enum="EnterpriseDeviceManagementStatus">
- <summary>URL fetcher status for auto-enrollment requests.</summary>
-</histogram>
-
-<histogram name="Enterprise.DMToken" enum="EnterpriseDMTokenType">
- <summary>
- Events related to fetching, saving and loading DM server tokens. These are
- used to retrieve cloud policies.
- </summary>
-</histogram>
-
-<histogram name="Enterprise.Enrollment" enum="EnterpriseEnrollmentType">
- <summary>
- Events related to device enrollment on new installs of ChromeOS devices.
- </summary>
-</histogram>
-
-<histogram name="Enterprise.ONC.PolicyValidation" enum="BooleanSuccess">
- <summary>Result of the OpenNetworkConfiguration policy validation.</summary>
-</histogram>
-
-<histogram name="Enterprise.Policies" enum="EnterprisePolicies">
- <summary>
- A set of enterprise policy rules that are in use. This is recorded every 24
- hours and at startup, if the last recording was earlier than a day before.
- </summary>
-</histogram>
-
-<histogram name="Enterprise.Policy" enum="EnterprisePolicyType">
- <summary>
- Events related to fetching, saving and loading user policies, and also
- device policies on ChromeOS.
- </summary>
-</histogram>
-
-<histogram name="Enterprise.PolicyInvalidations"
- enum="EnterprisePolicyInvalidations">
- <summary>
- Events for counting policy invalidations received with and without payloads.
- Invalidations indicate that a policy has been updated and should be
- refreshed. Payloads provide context about the policy update, but may be
- absent if dropped by the invalidation service.
- </summary>
-</histogram>
-
-<histogram name="Enterprise.PolicyInvalidationsStartupTime"
- units="milliseconds">
- <summary>
- Time since startup of the cloud policy code until the policy invalidation
- service first reported its online status.
- </summary>
-</histogram>
-
-<histogram name="Enterprise.PolicyLoadStatus" enum="EnterprisePolicyLoadStatus">
- <summary>
- Load status from the policy loaders which pull policy settings from the
- underlying platform, such as Windows Group Policy.
- </summary>
-</histogram>
-
-<histogram name="Enterprise.PolicyRefresh" enum="EnterprisePolicyRefresh">
- <summary>
- Events measuring effectiveness of refreshing policy when invalidations are
- received from a service. For each refresh, indicates whether the policy
- changed, and whether the policy was invalidated at the time of the refresh.
- </summary>
-</histogram>
-
-<histogram name="Enterprise.UserPolicyChromeOS.DelayInitialization"
- units="milliseconds">
- <summary>Initialization delay due to loading the user policy cache.</summary>
-</histogram>
-
-<histogram name="Enterprise.UserPolicyChromeOS.InitialFetch.ClientError"
- enum="EnterpriseDeviceManagementStatus">
- <summary>Policy client error during initial policy fetch.</summary>
-</histogram>
-
-<histogram
- name="Enterprise.UserPolicyChromeOS.InitialFetch.DelayClientRegister"
- units="milliseconds">
- <summary>Delay for registering the client with the policy server.</summary>
-</histogram>
-
-<histogram name="Enterprise.UserPolicyChromeOS.InitialFetch.DelayOAuth2Token"
- units="milliseconds">
- <summary>Delay for minting an OAuth2 acccess token.</summary>
-</histogram>
-
-<histogram name="Enterprise.UserPolicyChromeOS.InitialFetch.DelayPolicyFetch"
- units="milliseconds">
- <summary>Delay for fetching policy from the policy server.</summary>
-</histogram>
-
-<histogram name="Enterprise.UserPolicyChromeOS.InitialFetch.DelayTotal"
- units="milliseconds">
- <summary>Total delay for the initial policy fetch.</summary>
-</histogram>
-
-<histogram name="Enterprise.UserPolicyChromeOS.InitialFetch.OAuth2Error"
- enum="GoogleServiceAuthError">
- <summary>Service error during OAuth2 access token fetch.</summary>
-</histogram>
-
-<histogram name="Enterprise.UserPolicyChromeOS.InitialFetch.OAuth2NetworkError"
- enum="NetErrorCodes">
- <summary>Network error during OAuth2 access token fetch.</summary>
-</histogram>
-
-<histogram name="Event.CoalescedCount.Mouse">
- <summary>Number of Mouse events coalesced.</summary>
-</histogram>
-
-<histogram name="Event.CoalescedCount.Touch">
- <summary>Number of Touch events coalesced.</summary>
-</histogram>
-
-<histogram name="Event.CoalescedLatency.Mouse" units="milliseconds">
- <summary>
- Time between the first and last events in a coalesced mouse events group.
- </summary>
-</histogram>
-
-<histogram name="Event.CoalescedLatency.Touch" units="milliseconds">
- <summary>
- Time between the first and last events in a coalesced touch events group.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser" units="microseconds">
- <summary>
- Time between initiation of all input events and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_DROP_TARGET_EVENT"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_BEGIN" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_DOUBLE_TAP"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_END" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_LONG_PRESS"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_LONG_TAP"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_MULTIFINGER_SWIPE"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_PINCH_BEGIN"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_PINCH_END"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_PINCH_UPDATE"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_SCROLL_BEGIN"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_SCROLL_END"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_SCROLL_UPDATE"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_TAP" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_TAP_CANCEL"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_TAP_DOWN"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_GESTURE_TWO_FINGER_TAP"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_KEY_PRESSED" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_KEY_RELEASED" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_MOUSE_CAPTURE_CHANGED"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_MOUSE_DRAGGED" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_MOUSE_ENTERED" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_MOUSE_EXITED" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_MOUSE_MOVED" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_MOUSE_RELEASED" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_MOUSEWHEEL" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_SCROLL" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_SCROLL_FLING_CANCEL"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_SCROLL_FLING_START"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_TOUCH_CANCELLED" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_TOUCH_MOVED" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_TOUCH_PRESSED" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_TOUCH_RELEASED" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_TOUCH_STATIONARY"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_TRANSLATED_KEY_PRESS"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_TRANSLATED_KEY_RELEASE"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.ET_UNKNOWN" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.TouchAcked" units="microseconds">
- <summary>
- Time between touch events sent from RWH to renderer and acked by renderer.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Browser.TouchUI" units="microseconds">
- <summary>
- Time between touch events received by Chrome and sent from RWH to renderer.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer" units="microseconds">
- <summary>
- Time between initiation of all input events and renderer processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.Char" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.ContextMenu" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.GestureDoubleTap" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.GestureFlingCancel"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.GestureFlingStart" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.GestureLongPress" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.GestureLongTap" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.GesturePinchBegin" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.GesturePinchEnd" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.GesturePinchUpdate"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.GestureScrollBegin"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.GestureScrollEnd" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.GestureScrollUpdate"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.GestureTap" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.GestureTapCancel" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.GestureTapDown" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.GestureTwoFingerTap"
- units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.KeyDown" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.KeyUp" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.MouseDown" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.MouseEnter" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.MouseLeave" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.MouseMove" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.MouseUp" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.MouseWheel" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.RawKeyDown" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.TouchCancel" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.TouchEnd" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.TouchMove" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.TouchStart" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.Renderer.Undefined" units="microseconds">
- <summary>
- Time between initiation of input event and browser processing.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.RendererImpl.GestureScroll" units="microseconds">
- <obsolete>
- Deprecated 12/2013 and replaced by Event.Latency.RendererImpl.GestureScroll2
- </obsolete>
- <summary>
- Time between initial creation of touch event and when the resulting
- ScrollGesture reaches Impl thread. Maximum is 200ms.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.RendererImpl.GestureScroll2"
- units="microseconds">
- <summary>
- Time between initial creation of touch event and when the resulting
- ScrollGesture reaches Impl thread. Maximum is 1000ms. This supersedes the
- Event.Latency.RendererImpl.GestureScroll metric.
- </summary>
-</histogram>
-
-<histogram name="Event.Latency.TouchToScrollUpdateSwap" units="microseconds">
- <summary>
- Time between initial creation of touch event and the resulting frame from
- ScrollUpdate is swapped.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.ContentScript">
- <summary>
- For each pageload, the number of extensions that inject a content script.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.CreatedDiv">
- <summary>
- For each pageload, the number of extensions that create divs to add to the
- page.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.CreatedEmbed">
- <summary>
- For each pageload, the number of extensions that create 'embed' elements to
- add to the page.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.CreatedIframe">
- <summary>
- For each pageload, the number of extensions that create iframes to add to
- the page.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.CreatedInput">
- <summary>
- For each pageload, the number of extensions that create inputs to add to the
- page.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.CreatedLink">
- <summary>
- For each pageload, the number of extensions that create links to add to the
- page.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.CreatedObject">
- <summary>
- For each pageload, the number of extensions that create 'object' elements to
- add to the page.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.CreatedScript">
- <summary>
- For each pageload, the number of extensions that create script tags to add
- to the page.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.DocumentWrite">
- <summary>
- For each pageload, the number of extensions that use document.write.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.ContentScript">
- <summary>
- For each www.google.com pageload, the number of extensions that inject a
- content script.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.CreatedDiv">
- <summary>
- For each www.google.com pageload, the number of extensions that create divs
- to add to the page.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.CreatedEmbed">
- <summary>
- For each www.google.com pageload, the number of extensions that create
- 'embed' elements to add to the page.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.CreatedIframe">
- <summary>
- For each www.google.com pageload, the number of extensions that create
- iframes to add to the page.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.CreatedInput">
- <summary>
- For each www.google.com pageload, the number of extensions that create
- inputs to add to the page.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.CreatedLink">
- <summary>
- For each www.google.com pageload, the number of extensions that create links
- to add to the page.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.CreatedObject">
- <summary>
- For each www.google.com pageload, the number of extensions that create
- 'object' elements to add to the page.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.CreatedScript">
- <summary>
- For each www.google.com pageload, the number of extensions that create
- script tags to add to the page.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.DocumentWrite">
- <summary>
- For each www.google.com pageload, the number of extensions that use
- document.write.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.InnerHtml">
- <summary>
- For each www.google.com pageload, the number of extensions that set
- innerHTML.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.InvokedDomMethod">
- <summary>
- For each www.google.com pageload, the number of extensions that invoke DOM
- methods.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.ModifiedDom">
- <summary>
- For each www.google.com pageload, the number of extensions that set the
- value of DOM properties via assignments.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.Google.ReadDom">
- <summary>
- For each www.google.com pageload, the number of extensions that read from
- the DOM.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.InnerHtml">
- <summary>
- For each pageload, the number of extensions that set innerHTML.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.InvokedDomMethod">
- <summary>
- For each pageload, the number of extensions that invoke DOM methods.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.ModifiedDom">
- <summary>
- For each pageload, the number of extensions that set the value of DOM
- properties via assignments.
- </summary>
-</histogram>
-
-<histogram name="ExtensionActivity.ReadDom">
- <summary>
- For each pageload, the number of extensions that read from the DOM.
- </summary>
-</histogram>
-
-<histogram name="ExtensionBlacklist.BlacklistInstalled"
- enum="ExtensionLocation">
- <summary>
- The number of extensions that were blacklisted when already installed,
- grouped by Extension::Location. Logged when ExtensionService blackists and
- unloads an installed extension.
- </summary>
-</histogram>
-
-<histogram name="ExtensionBlacklist.BlockCRX" enum="ExtensionLocation">
- <summary>
- The number of extensions that have been blocked from installing grouped by
- Extension::Location. Logged when ExtensionService refuses to install a
- blacklisted extension.
- </summary>
-</histogram>
-
-<histogram name="ExtensionBlacklist.SilentInstall" enum="ExtensionLocation">
- <summary>
- The number of extensions that have been silently installed in a blacklisted
- state, grouped by Extension::Location. Logged when ExtensionService installs
- a blacklisted extension without blocking it (ExtensionBlacklist.BlockCRX
- would be logged otherwise). Typically this will be when a user has a
- blacklisted extension synced.
- </summary>
-</histogram>
-
-<histogram name="ExtensionBlacklist.UnblacklistInstalled"
- enum="ExtensionLocation">
- <summary>
- The number of extensions that were unblacklisted when installed, grouped by
- Extension::Location. Logged when ExtensionService unblacklists and loads a
- blacklisted extension.
- </summary>
-</histogram>
-
-<histogram name="ExtensionInstalledLoader.ForceDisabled"
- enum="BooleanForceDisabled">
- <summary>
- Counts whether we force-disabled an installed extension at startup because a
- policy provider indicated it must remain disabled.
- </summary>
-</histogram>
-
-<histogram name="ExtensionInstallSigner.ResultWasValid">
- <summary>
- Whether the server result received by the extensions install signer was
- valid or invalid.
- </summary>
-</histogram>
-
-<histogram name="ExtensionInstallVerifier.GetSignatureResult"
- enum="ExtensionInstallVerifierGetSignatureResult">
- <summary>The result of the verifier trying to get a new signature.</summary>
-</histogram>
-
-<histogram name="ExtensionInstallVerifier.InitResult"
- enum="ExtensionInstallVerifierInitResult">
- <summary>
- The result of initialization for the extension install verifier.
- </summary>
-</histogram>
-
-<histogram name="ExtensionInstallVerifier.MustRemainDisabled"
- enum="ExtensionInstallVerifierMustRemainDisabled">
- <summary>
- The outcome for each call to InstallVerifier::MustRemainDisabled.
- </summary>
-</histogram>
-
-<histogram name="Extensions.AllocatePortIdPairOverflow">
- <summary>
- Records when the allocation of IDs for chrome.runtime.Port overflows.
- </summary>
-</histogram>
-
-<histogram name="Extensions.APIUse_RelativeURL" enum="UrlResolutionResult">
- <summary>
- Captures the results of URL resolution when relative urls are used in the
- tabs/windows api.
- </summary>
-</histogram>
-
-<histogram name="Extensions.AppLaunch" enum="AppLaunch">
- <summary>
- The number of times v1 apps are launched grouped by
- extension_misc::AppLaunchBuckets. See also Apps.AppLaunch for v2 apps.
- </summary>
-</histogram>
-
-<histogram name="Extensions.AppLaunchContainer" enum="AppLaunchContainer">
- <summary>
- The number of times apps are launched grouped by
- extensions::LaunchContainer.
- </summary>
-</histogram>
-
-<histogram name="Extensions.AppLocation" enum="ExtensionLocation">
- <summary>
- The number of apps loaded at startup time grouped by Extension::Location.
- </summary>
-</histogram>
-
-<histogram name="Extensions.AppsPromo" enum="AppPromoAction">
- <summary>
- The actions taken in the NTP apps promo grouped by
- extension_misc::AppsPromoBuckets.
- </summary>
-</histogram>
-
-<histogram name="Extensions.AppTabLaunchType" enum="ExtensionLaunchType">
- <summary>
- The number of apps launched grouped by extensions::LaunchType.
- </summary>
-</histogram>
-
-<histogram name="Extensions.BackgroundPageLoadTime" units="milliseconds">
- <summary>The time for an extension's background page to load.</summary>
-</histogram>
-
-<histogram name="Extensions.BackgroundPageType"
- units="ExtensionBackgroundPageType">
- <summary>
- The type (if any) of background page the extension has. Recorded for
- installed extensions on startup.
- </summary>
-</histogram>
-
-<histogram name="Extensions.CrxFetchError" enum="NetErrorCodes">
- <summary>Net error results from URLFetcher.</summary>
-</histogram>
-
-<histogram name="Extensions.CrxFetchFailureRetryCountGoogleUrl">
- <summary>
- Number of times chrome retried to download an extension with a url on a
- google.com domain, before eventually giving up.
- </summary>
-</histogram>
-
-<histogram name="Extensions.CrxFetchFailureRetryCountOtherUrl">
- <summary>
- Number of times chrome retried to download an extension with a url on a non
- google.com domain, before eventually giving up.
- </summary>
-</histogram>
-
-<histogram name="Extensions.CrxFetchSuccessRetryCountGoogleUrl">
- <summary>
- Number of times chrome retried to download an extension with a url on a
- google.com domain, before eventually succeeding.
- </summary>
-</histogram>
-
-<histogram name="Extensions.CrxFetchSuccessRetryCountOtherUrl">
- <summary>
- Number of times chrome retried to download an extension with a url on a non
- google.com domain, before eventually succeeding.
- </summary>
-</histogram>
-
-<histogram name="Extensions.CrxInstallDirPathLength">
- <summary>
- Length of the path to the directory under which an extension is installed.
- This directory is in the user's profile.
- </summary>
-</histogram>
-
-<histogram name="Extensions.DeclarativeRulesStorageInitialization"
- units="milliseconds">
- <summary>Time spent until rules storage delegate gets ready.</summary>
-</histogram>
-
-<histogram name="Extensions.DepricatedExternalJsonCount">
- <summary>
- Number of extensions referenced in the depricated external extensions source
- at path chrome::DIR_DEPRICATED_EXTERNAL_EXTENSIONS.
- </summary>
-</histogram>
-
-<histogram name="Extensions.DialogLoadTime" units="milliseconds">
- <summary>The time for a dialog-hosted extension to load.</summary>
-</histogram>
-
-<histogram name="Extensions.Disabled">
- <summary>
- The number of extensions that are disabled at browser startup.
- </summary>
-</histogram>
-
-<histogram name="Extensions.DisabledForPermissions">
- <summary>
- The number of extensions that are disabled at browser startup due to
- permissions increases.
- </summary>
-</histogram>
-
-<histogram name="Extensions.DisabledUIUserResponse"
- enum="ExtensionDisabledUIUserResponse">
- <summary>
- User response to the dialog shown when an extension is disabled due to an
- update requiring more permissions.
- </summary>
-</histogram>
-
-<histogram name="Extensions.ErrorCodeFromCrxOpen">
- <summary>
- If opening the CRX file for unpacking fails, this integer is the error code
- given by the OS.
- </summary>
-</histogram>
-
-<histogram name="Extensions.EventPageActiveTime" units="milliseconds">
- <summary>The time an extension's event page has spent loaded.</summary>
-</histogram>
-
-<histogram name="Extensions.EventPageIdleTime" units="milliseconds">
- <summary>The time an extension's event page has spent unloaded.</summary>
-</histogram>
-
-<histogram name="Extensions.EventPageLoadTime" units="milliseconds">
- <summary>The time for an extension's event page to load.</summary>
-</histogram>
-
-<histogram name="Extensions.ExtensionInstalled">
- <summary>An extension has been installed.</summary>
-</histogram>
-
-<histogram name="Extensions.ExtensionLocation" enum="ExtensionLocation">
- <summary>
- The number of extensions loaded at startup time grouped by
- Extension::Location.
- </summary>
-</histogram>
-
-<histogram name="Extensions.ExtensionRootPathLength">
- <summary>
- Length of the Extensions dir path inside the profile directory.
- </summary>
-</histogram>
-
-<histogram name="Extensions.ExtensionServiceInitTime">
- <summary>
- Time taken for the ExtensionService to initialize, including the time it
- takes to load the extensions for the service's profile and parse their
- manifests. This happens during startup and also any time a new profile is
- loaded.
- </summary>
-</histogram>
-
-<histogram name="Extensions.ExtensionUninstalled">
- <summary>An extension has been uninstalled.</summary>
-</histogram>
-
-<histogram name="Extensions.ExternalExtensionEvent" enum="SideloadUIEvents">
- <summary>
- Records what happens to extensions that are sideloaded, grouped by the
- ExternalExtensionEvent enum.
- </summary>
-</histogram>
-
-<histogram name="Extensions.ExternalItemState" enum="ExternalItemState">
- <summary>
- The number of sideloaded apps/extensions loaded on startup grouped by
- enabled/disabled state.
- </summary>
-</histogram>
-
-<histogram name="Extensions.ExternalJsonCount">
- <summary>
- Number of extensions referenced in the external extensions source at path
- chrome::DIR_EXTERNAL_EXTENSIONS.
- </summary>
-</histogram>
-
-<histogram name="Extensions.FromWebstoreInconsistency"
- enum="ExtensionFromWebstoreInconcistencyEnum">
- <summary>
- Number of apps/extensions loaded on startup with an inconsistent &quot;from
- webstore&quot; state. This means an item that is flagged as from_webstore,
- but with either a non-webstore update_url or an external install location.
- </summary>
-</histogram>
-
-<histogram name="Extensions.FunctionCalls" enum="ExtensionFunctions">
- <summary>Number of calls to extension functions.</summary>
-</histogram>
-
-<histogram name="Extensions.GetUserDataTempDir" enum="GetUserDataTempDirResult">
- <summary>
- What happens when the extensions system tries to get a temp dir to unpack
- in?
- </summary>
-</histogram>
-
-<histogram name="Extensions.InjectCssTime" units="milliseconds">
- <summary>
- The amount of time for a CSS file to be injected into a page.
- </summary>
-</histogram>
-
-<histogram name="Extensions.InjectEnd_ScriptCount">
- <summary>Number of scripts injected at document end by extensions.</summary>
-</histogram>
-
-<histogram name="Extensions.InjectEnd_Time" units="milliseconds">
- <summary>
- Time taken to inject all scripts at document end by extensions.
- </summary>
-</histogram>
-
-<histogram name="Extensions.InjectIdle_ScriptCount">
- <summary>Number of scripts injected at document idle by extensions.</summary>
-</histogram>
-
-<histogram name="Extensions.InjectIdle_Time" units="milliseconds">
- <summary>
- Time taken to inject all scripts at document idle by extensions.
- </summary>
-</histogram>
-
-<histogram name="Extensions.InjectScriptTime" units="milliseconds">
- <summary>Time taken to inject all scripts by extensions.</summary>
-</histogram>
-
-<histogram name="Extensions.InjectStart_CssCount">
- <summary>Number of css files injected by extensions.</summary>
-</histogram>
-
-<histogram name="Extensions.InjectStart_ScriptCount">
- <summary>Number of scripts injected at document start by extensions.</summary>
-</histogram>
-
-<histogram name="Extensions.InjectStart_Time" units="milliseconds">
- <summary>
- Time taken to inject css/scripts at document start by extensions.
- </summary>
-</histogram>
-
-<histogram name="Extensions.InstallSource" enum="ExtensionLocation">
- <summary>Installs grouped by the location property in prefs.</summary>
-</histogram>
-
-<histogram name="Extensions.InstallType" enum="ExtensionType">
- <summary>Installs grouped by Extension::HistogramType.</summary>
-</histogram>
-
-<histogram name="Extensions.LoadAll">
- <summary>
- The number of extensions and themes loaded at browser startup.
- </summary>
-</histogram>
-
-<histogram name="Extensions.LoadAllTime" units="milliseconds">
- <summary>Time taken to load all extensions at browser startup.</summary>
-</histogram>
-
-<histogram name="Extensions.LoadApp">
- <summary>The number of apps loaded by each user at startup time.</summary>
-</histogram>
-
-<histogram name="Extensions.LoadAppExternal">
- <summary>
- The number of externally managed apps loaded by each user at startup time.
- </summary>
-</histogram>
-
-<histogram name="Extensions.LoadAppUser">
- <summary>
- The number of user-installed apps loaded by each user at startup time.
- </summary>
-</histogram>
-
-<histogram name="Extensions.LoadBrowserAction">
- <summary>
- The number of browser action extensions loaded at browser startup.
- </summary>
-</histogram>
-
-<histogram name="Extensions.LoadContentPack">
- <summary>
- The number of content-pack extensions loaded at browser startup.
- </summary>
-</histogram>
-
-<histogram name="Extensions.LoadExtension">
- <summary>The number of extensions loaded at browser startup.</summary>
-</histogram>
-
-<histogram name="Extensions.LoadExtensionExternal">
- <summary>
- The number of externally managed extensions loaded at browser startup.
- </summary>
-</histogram>
-
-<histogram name="Extensions.LoadExtensionUser">
- <summary>
- The number of user-installed extensions loaded at browser startup.
- </summary>
-</histogram>
-
-<histogram name="Extensions.LoadExternal">
- <summary>
- The number of externally managed extensions and apps loaded at browser
- startup.
- </summary>
-</histogram>
-
-<histogram name="Extensions.LoadHostedApp">
- <summary>
- The number of hosted apps loaded by each user at startup time.
- </summary>
-</histogram>
-
-<histogram name="Extensions.LoadPackagedApp">
- <summary>
- The number of legacy packaged apps loaded by each user at startup time.
- </summary>
-</histogram>
-
-<histogram name="Extensions.LoadPageAction">
- <summary>
- The number of page action extensions loaded at browser startup.
- </summary>
-</histogram>
-
-<histogram name="Extensions.LoadPlatformApp">
- <summary>The number of platform apps loaded at browser startup.</summary>
-</histogram>
-
-<histogram name="Extensions.LoadTheme">
- <summary>The number of themes loaded at browser startup.</summary>
-</histogram>
-
-<histogram name="Extensions.LoadType" enum="ExtensionType">
- <summary>
- The number of extensions loaded at startup time grouped by
- Extension::HistogramType.
- </summary>
-</histogram>
-
-<histogram name="Extensions.LoadUserScript">
- <summary>
- The number of converted user scripts loaded at browser startup.
- </summary>
-</histogram>
-
-<histogram name="Extensions.ManifestFetchFailureRetryCountGoogleUrl">
- <summary>
- Number of times chrome retried to download an extension update manifest with
- a url on a google.com domain, before eventually giving up.
- </summary>
-</histogram>
-
-<histogram name="Extensions.ManifestFetchFailureRetryCountOtherUrl">
- <summary>
- Number of times chrome retried to download an extension update manifest with
- a url on a non google.com domain, before eventually giving up.
- </summary>
-</histogram>
-
-<histogram name="Extensions.ManifestFetchSuccessRetryCountGoogleUrl">
- <summary>
- Number of times chrome retried to download an extension update manifest with
- a url on a google.com domain, before eventually succeeding.
- </summary>
-</histogram>
-
-<histogram name="Extensions.ManifestFetchSuccessRetryCountOtherUrl">
- <summary>
- Number of times chrome retried to download an extension update manifest with
- a url on a non google.com domain, before eventually succeeding.
- </summary>
-</histogram>
-
-<histogram name="Extensions.ManifestReloadNeedsRelocalization">
- <summary>
- Number of extension loads on startup where it is necessary to reload the
- mainfest because the locale has changed.
- </summary>
-</histogram>
-
-<histogram name="Extensions.ManifestReloadNotNeeded">
- <summary>
- Number of extension loads on startup where it is not necessary to reload the
- extension's manifest.
- </summary>
-</histogram>
-
-<histogram name="Extensions.ManifestReloadUnpackedDir">
- <summary>
- Number of extension loads on startup where it is necessary to reload the
- manifest because the extension is unpacked.
- </summary>
-</histogram>
-
-<histogram name="Extensions.NetworkDelay" units="milliseconds">
- <summary>Time that network requests were blocked due to extensions.</summary>
-</histogram>
-
-<histogram name="Extensions.NetworkDelayPercentage" units="%">
- <summary>
- Percentage of total lifetime a network request was blocked due to an
- extension.
- </summary>
-</histogram>
-
-<histogram name="Extensions.NetworkDelayRegistryLoad" units="milliseconds">
- <summary>
- Time that network requests were blocked due to relevant rule registries
- loading.
- </summary>
-</histogram>
-
-<histogram name="Extensions.NonWebstoreLocation" enum="ExtensionLocation">
- <summary>
- The number of apps/extensions with a non-webstore update_url loaded at
- startup time grouped by Extension::Location.
- </summary>
-</histogram>
-
-<histogram name="Extensions.NonWebStoreNewTabPageOverrides">
- <summary>
- Number of non-WebStore extensions on startup that override the new tab page.
- </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_AutoDisable" enum="ExtensionPermission">
- <summary>
- The permissions present in an extension when it is automatically disabled
- due to a permission increase (e.g., after an extension upgrade).
- </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_Install" enum="ExtensionPermission">
- <summary>
- The permissions present in an extension when it was installed.
- </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_InstallAbort"
- enum="ExtensionPermission">
- <summary>
- The permissions present in an extension when installation was aborted, not
- including installation errors and user cancels.
- </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_InstallCancel"
- enum="ExtensionPermission">
- <summary>
- The permissions present in an extension when installation was canceled.
- </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_Load" enum="ExtensionPermission">
- <summary>The permissions present in an extension when it was loaded.</summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_ReEnable" enum="ExtensionPermission">
- <summary>
- The permissions present in an extension when it was re-enabled from a
- confirmation prompt.
- </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_ReEnableAbort"
- enum="ExtensionPermission">
- <summary>
- The permissions present in an extension when the re-enable prompt was
- aborted, not including installation errors and manual user cancels.
- </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_ReEnableCancel"
- enum="ExtensionPermission">
- <summary>
- The permissions present in an extension when the re-enable was canceled from
- the confirmation prompt.
- </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_Uninstall" enum="ExtensionPermission">
- <summary>
- The permissions present in an extension when it was uninstalled.
- </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_WebStoreInstall"
- enum="ExtensionPermission">
- <summary>
- The permissions present in an extension when it was installed through the
- web store.
- </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_WebStoreInstallAbort"
- enum="ExtensionPermission">
- <summary>
- The permissions present in an extension when installation from the web store
- was aborted, not including installation errors and user cancels.
- </summary>
-</histogram>
-
-<histogram name="Extensions.Permissions_WebStoreInstallCancel"
- enum="ExtensionPermission">
- <summary>
- The permissions present in an extension when installation from the web store
- was canceled.
- </summary>
-</histogram>
-
-<histogram name="Extensions.ResourceDirectoryTimestampQueryLatency"
- units="milliseconds">
- <summary>
- The initialization latency (in milliseconds) introduced to each extension
- resource request by querying the directory timestamp.
- </summary>
-</histogram>
-
-<histogram name="Extensions.ResourceLastModifiedDelta" units="seconds">
- <summary>
- The difference in seconds between an extension resource's last modification
- time and its extension base directory's creation time. Recorded on each
- extension resource request if the difference is non-negative (i.e., the
- resource's last modification time is more recent than the directory's
- creation time.) For cases where the directory creation date is more recent,
- see Extensions.ResourceLastModifiedNegativeDelta instead.
- </summary>
-</histogram>
-
-<histogram name="Extensions.ResourceLastModifiedNegativeDelta" units="seconds">
- <summary>
- The absolute difference in seconds between an extension resource's last
- modification time and extension base directory's creation time. Recorded on
- each extension resource request if the difference is negative (i.e., the
- directory's creation time is more recent than the resource's last
- modification time.) For cases where the resource modification time is more
- recent, see Extensions.ResourceLastModifiedDelta instead.
- </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackFailure">
- <summary>
- Count the number of times a sandboxed extension unpack fails.
- </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackFailureReason"
- enum="ExtensionUnpackFailureReason">
- <summary>What caused a sandboxed extension unpack to fail?</summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackFailureTime">
- <summary>Time taken to unpack an extension, when the unpack fails.</summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackInitialCrxPathLength">
- <summary>Length of the initial path to the CRX to be unpacked.</summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackLinkFreeCrxPathLength">
- <summary>
- Length of the normalized (link/junction free) path to the temporary copy of
- a CRX made during unpacking.
- </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackRate">
- <summary>
- Rate at which a CRX file is unpacked in Kilobytes per second.
- </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackRate1To2mB">
- <summary>
- Rate at which CRX files 1MB to 2MB are unpacked in Kilobytes per second.
- </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackRate2To5mB">
- <summary>
- Rate at which CRX files 2MB to 5MB are unpacked in Kilobytes per second.
- </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackRate50kBTo1mB">
- <summary>
- Rate at which CRX files 50kB to 1MB are unpacked in Kilobytes per second.
- </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackRate5To10mB">
- <summary>
- Rate at which CRX files 5MB to 10 MB are unpacked in Kilobytes per second.
- </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackRateOver10mB">
- <summary>
- Rate at which CRX files larger than 10MB are unpacked in Kilobytes per
- second.
- </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackRateUnder50kB">
- <summary>
- Rate at which CRX files under 50 KB are unpacked in Kilobytes per second.
- </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackSuccess">
- <summary>Count the number of times a sandboxed CRX unpack succeeds.</summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackSuccessCantGetCrxSize">
- <summary>
- Count the number of times a sandboxed CRX unpack succeeds, but we can't get
- the file size.
- </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackSuccessTime">
- <summary>
- Time taken to unpack an extension, when the unpack succeeds.
- </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackTempCrxPathLength">
- <summary>
- Length of the path of the temporary copy of a CRX made during unpacking.
- </summary>
-</histogram>
-
-<histogram name="Extensions.SandboxUnpackUnpackedCrxPathLength">
- <summary>Length of the path under which a CRX is unpacked.</summary>
-</histogram>
-
-<histogram name="Extensions.StartupDelay" units="milliseconds">
- <summary>The time one extension delays network requests at startup.</summary>
-</histogram>
-
-<histogram name="Extensions.StartupDelay_Total" units="milliseconds">
- <summary>
- The total time extensions delay network requests at startup.
- </summary>
-</histogram>
-
-<histogram name="Extensions.ToolstripLoadTime" units="milliseconds">
- <summary>Time taken to load a toolstrip.</summary>
-</histogram>
-
-<histogram name="Extensions.UninstallType" enum="ExtensionType">
- <summary>Uninstalls grouped by Extension::HistogramType.</summary>
-</histogram>
-
-<histogram name="Extensions.UnpackFailureInstallCause"
- enum="ExtensionInstallCause">
- <summary>
- Count failing CRX installs, grouped by the way an extension can be
- installed.
- </summary>
-</histogram>
-
-<histogram name="Extensions.UnpackFailureInstallSource"
- enum="ExtensionLocation">
- <summary>
- Count successful CRX installs, grouped by the location property in prefs.
- installed.
- </summary>
-</histogram>
-
-<histogram name="Extensions.UnpackSuccessInstallCause"
- enum="ExtensionInstallCause">
- <summary>
- Count successful CRX installs, grouped by the cause of the install.
- </summary>
-</histogram>
-
-<histogram name="Extensions.UnpackSuccessInstallSource"
- enum="ExtensionLocation">
- <summary>
- Count successful CRX installs, grouped by the location property in prefs.
- </summary>
-</histogram>
-
-<histogram name="Extensions.UpdateCheckApp">
- <summary>
- The number of legacy packaged apps and hosted apps that were checked during
- an update check.
- </summary>
-</histogram>
-
-<histogram name="Extensions.UpdateCheckExtension">
- <summary>
- The number of extensions that were checked during an update check.
- </summary>
-</histogram>
-
-<histogram name="Extensions.UpdateCheckGap" units="minutes">
- <summary>Time in minutes between update checks.</summary>
-</histogram>
-
-<histogram name="Extensions.UpdateCheckGoogleUrl">
- <summary>
- The number of crx's with a Google-hosted update URL that were checked during
- an update check.
- </summary>
-</histogram>
-
-<histogram name="Extensions.UpdateCheckNoUrl">
- <summary>
- The number of crx's with no update URL checked during an update check.
- </summary>
-</histogram>
-
-<histogram name="Extensions.UpdateCheckOtherUrl">
- <summary>
- The number of crx's with a non-Google update URL that were checked during an
- update check.
- </summary>
-</histogram>
-
-<histogram name="Extensions.UpdateCheckPackagedApp">
- <summary>
- The number of packaged apps that were checked during an update check.
- </summary>
-</histogram>
-
-<histogram name="Extensions.UpdateCheckTheme">
- <summary>
- The number of themes that were checked during an update check.
- </summary>
-</histogram>
-
-<histogram name="Extensions.UpdateOnLoad">
- <summary>
- The number of extensions that were updated at browser startup.
- </summary>
-</histogram>
-
-<histogram name="Extensions.UpdaterWriteCrx" enum="ExtensionFileWriteResult">
- <obsolete>
- Deprecated 10/2013.
- </obsolete>
- <summary>
- What happened when the extension updater tried to write a file?
- </summary>
-</histogram>
-
-<histogram name="Extensions.UpdateSource" enum="ExtensionLocation">
- <summary>Updates grouped by the location property in prefs.</summary>
-</histogram>
-
-<histogram name="Extensions.UpdateType" enum="ExtensionType">
- <summary>Updates grouped by Extension::HistogramType.</summary>
-</histogram>
-
-<histogram name="Extensions.WebstoreDownload.InterruptReason"
- enum="InterruptReason">
- <summary>The reason a webstore download was interrupted.</summary>
-</histogram>
-
-<histogram name="Extensions.WebstoreDownload.InterruptReceivedKBytes"
- units="KB">
- <summary>
- The number of KBytes received for a webstore download before it was
- interrupted.
- </summary>
-</histogram>
-
-<histogram name="Extensions.WebstoreDownload.InterruptTotalKBytes" units="KB">
- <summary>
- The total expected size in KBytes of an interrupted webstore download.
- </summary>
-</histogram>
-
-<histogram name="Extensions.WebstoreDownload.InterruptTotalSizeUnknown"
- enum="Boolean">
- <summary>
- Tracks whether the total size of an interrupted webstore download was known.
- </summary>
-</histogram>
-
-<histogram name="FileBrowser.Create" enum="FileDialogType">
- <summary>Chrome OS File Browser opening mode.</summary>
-</histogram>
-
-<histogram name="FileBrowser.DirectoryScan" units="milliseconds">
- <summary>
- Chrome OS File Browser: time to scan a directory. Measured on every File
- Browser directory change.
- </summary>
-</histogram>
-
-<histogram name="FileBrowser.DownloadDestination.IsGoogleDrive.Changed"
- enum="BooleanEnabled">
- <summary>
- Tracks whether download destination is set to a Google Drive folder when the
- download destination is changed by the user in the settings page.
- </summary>
-</histogram>
-
-<histogram name="FileBrowser.DownloadDestination.IsGoogleDrive.Started"
- enum="BooleanEnabled">
- <summary>
- Tracks whether download destination is set to a Google Drive folder on
- startup.
- </summary>
-</histogram>
-
-<histogram name="FileBrowser.DownloadsCount">
- <summary>
- Chrome OS File Browser: number of files and directories in the Downloads
- directory (not including the contents of nested directories). Computed every
- time the File Browser current directory changes to Downloads.
- </summary>
-</histogram>
-
-<histogram name="FileBrowser.FolderShortcut.Add">
- <summary>
- Chrome OS File Browser: this is recorded when the user adds a folder
- shortcut.
- </summary>
-</histogram>
-
-<histogram name="FileBrowser.FolderShortcut.Count">
- <summary>
- Chrome OS File Browser: number of saved folder shorcuts. This is recorded
- when Files.app is launched.
- </summary>
-</histogram>
-
-<histogram name="FileBrowser.FolderShortcut.Navigate">
- <summary>
- Chrome OS File Browser: this is recorded when the user clicks or selects a
- folder shortcut and is navigated to the target folder.
- </summary>
-</histogram>
-
-<histogram name="FileBrowser.FolderShortcut.Remove">
- <summary>
- Chrome OS File Browser: this is recorded when the user removes a folder
- shortcut.
- </summary>
-</histogram>
-
-<histogram name="FileBrowser.Load" units="milliseconds">
- <summary>
- Chrome OS File Browser is an built-in extension without a background page.
- Its main.html file is loaded every time the user opens a File Browser tab or
- a file chooser dialog. The file is fairly large and the initialization is
- pretty expensive.
- </summary>
-</histogram>
-
-<histogram name="FileBrowser.OpeningFileType" enum="FileType">
- <obsolete>
- Deprecated 4/2013, and replaced by FileBrowser.ViewingFileType.
- </obsolete>
- <summary>File types that were tried to be opened through browser.</summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoEditor.DisplayTime" units="milliseconds">
- <summary>
- Chrome OS Photo Editor: time to display an image. Measured from the moment
- the user selected the image till the moment it is displayed (not counting
- the low resolution preview).
- </summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoEditor.FileType" enum="PhotoEditorFileType">
- <summary>Chrome OS Photo Editor: the type of the file opened.</summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoEditor.LoadMode" enum="PhotoEditorLoadMode">
- <summary>Chrome OS Photo Editor: the way the image has been loaded.</summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoEditor.LoadTime" units="milliseconds">
- <summary>Chrome OS Photo Editor: time to load an image from a file.</summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoEditor.SaveResult"
- enum="PhotoEditorSaveResult">
- <summary>
- Chrome OS Photo Editor: the result of a file save operation.
- </summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoEditor.SaveTime" units="milliseconds">
- <summary>Chrome OS Photo Editor: time to save an image to a file.</summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoEditor.Size.MB" units="MBytes">
- <summary>
- Chrome OS Photo Editor: size of an image file in megabytes. Measured on
- every image load.
- </summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoEditor.Size.MPix" units="MPixels">
- <summary>
- Chrome OS Photo Editor: size of an image in megapixels. Measured on every
- image load.
- </summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoEditor.Tool" enum="PhotoEditorToolType">
- <summary>Chrome OS Photo Editor: the button which the user clicked.</summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoImport.Action" enum="ExternalDeviceAction">
- <summary>
- Chrome OS Photo Import flow: action chosen in the Action Choice dialog for
- the external device.
- </summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoImport.ImportCount">
- <summary>
- Chrome OS Photo Import flow: the number of photos imported. Measured on
- every successfull import operation.
- </summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoImport.ImportPercentage">
- <summary>
- Chrome OS Photo Import flow: the percent of photos imported among all the
- photos on the device. Measured on every successfull import operation.
- </summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoImport.Load" units="milliseconds">
- <summary>
- Chrome OS Photo Import flow: time to load the action dialog. Measured
- between the moment window appears and the moment user see all available
- actions for the device.
- </summary>
-</histogram>
-
-<histogram name="FileBrowser.PhotoImport.Scan" units="milliseconds">
- <summary>
- Chrome OS Photo Import flow: time to scan the external device.
- </summary>
-</histogram>
-
-<histogram name="FileBrowser.SuggestApps.Close"
- enum="SuggestAppsDialogCloseReason">
- <summary>
- Chrome OS File Browser: the reason why the suggest apps dialog was closed.
- </summary>
-</histogram>
-
-<histogram name="FileBrowser.SuggestApps.Install"
- enum="SuggestAppsDialogInstall">
- <summary>
- Chrome OS File Browser: whether the Webstore item user selected was
- successfully installed or not.
- </summary>
-</histogram>
-
-<histogram name="FileBrowser.SuggestApps.Load" enum="SuggestAppsDialogLoad">
- <summary>
- Chrome OS File Browser: whether the initialization of the dialog succeeded
- or not.
- </summary>
-</histogram>
-
-<histogram name="FileBrowser.SuggestApps.LoadTime" units="milliseconds">
- <summary>
- Chrome OS File Browser: time to load the suggest apps dialog. Measured
- between the moment window appears and the moment all the contants in the
- dialog including the Chrome Webstore widget are ready.
- </summary>
-</histogram>
-
-<histogram name="FileBrowser.ViewingFileType" enum="ViewFileType">
- <summary>
- File types that were tried to be viewed through browser. This is recorded
- when the user tries to view a file from Files.app.
- </summary>
-</histogram>
-
-<histogram name="GData.AuthSuccess" enum="GDataAuthResult">
- <summary>Result of the authentication for Drive.</summary>
-</histogram>
-
-<histogram name="GData.EntireFeedLoadTime" units="microseconds">
- <obsolete>
- Deprecated 9/2012, and replaced by Drive.EntireFeedLoadTime
- </obsolete>
- <summary>
- Time spent to load the entire file system information from the server
- </summary>
-</histogram>
-
-<histogram name="GData.EntryKind" enum="GDataEntryKind">
- <obsolete>
- Deprecated 9/2012, and replaced by Drive.EntryKind
- </obsolete>
- <summary>
- Provides breakdown of specific formats for hosted documents. Recorded when
- feed is loaded from the server.
- </summary>
-</histogram>
-
-<histogram name="GData.InitialFeedLoadTime" units="microseconds">
- <obsolete>
- Deprecated 9/2012, and replaced by Drive.InitialFeedLoadTime
- </obsolete>
- <summary>
- Time spent to load the initial part of the file system information from the
- server
- </summary>
-</histogram>
-
-<histogram name="GData.NumberOfHostedDocuments">
- <obsolete>
- Deprecated 9/2012, and replaced by Drive.NumberOfHostedDocuments
- </obsolete>
- <summary>
- Number of hosted documents (spreadsheets etc.) on Drive. Logged when Drive
- is first accessed.
- </summary>
-</histogram>
-
-<histogram name="GData.NumberOfRegularFiles">
- <obsolete>
- Deprecated 9/2012, and replaced by Drive.NumberOfRegularFiles
- </obsolete>
- <summary>
- Number of regualr files on Drive. Logged when Drive is first accessed.
- </summary>
-</histogram>
-
-<histogram name="GData.NumberOfTotalFiles">
- <obsolete>
- Deprecated 9/2012, and replaced by Drive.NumberOfTotalFiles
- </obsolete>
- <summary>
- Number of total files (regualr files + hosted documents) on Drive. Logged
- when Drive is first accessed.
- </summary>
-</histogram>
-
-<histogram name="Geolocation.GeolocationDispatcherHostImpl.EnableHighAccuracy"
- enum="BooleanEnabled">
- <summary>
- Whether high accuracy geolocation information was requested.
- </summary>
-</histogram>
-
-<histogram name="Geolocation.InfoBarDelegate.Event"
- enum="GeolocationInfoBarDelegateEvent">
- <summary>Events in GeolocationInfoBarDelegate.</summary>
-</histogram>
-
-<histogram name="Geolocation.InfoBarDelegateAndroid.Event"
- enum="GeolocationInfoBarDelegateAndroidEvent">
- <summary>Events in GeolocationInfoBarDelegateAndroid.</summary>
-</histogram>
-
-<histogram name="Geolocation.NetworkLocationRequest.AccessPoints">
- <summary>
- The number of wifi access points used to determine geolocation.
- </summary>
-</histogram>
-
-<histogram name="Geolocation.NetworkLocationRequest.Event"
- enum="NetworkLocationRequestEvent">
- <summary>Events in NetworkLocationRequest.</summary>
-</histogram>
-
-<histogram name="Geolocation.NetworkLocationRequest.ResponseCode"
- units="HTTP response code">
- <summary>Http response codes in NetworkLocationRequest.</summary>
-</histogram>
-
-<histogram name="GoogleNow.Event" enum="GoogleNowEvent">
- <summary>Events in Google Now component extension.</summary>
-</histogram>
-
-<histogram name="GoogleUpdate.EffectivePolicy" enum="UpdatePolicy">
- <summary>
- The effective update policy for Chrome on Windows. Recorded once per startup
- (following a 45 seconds delay).
- </summary>
-</histogram>
-
-<histogram name="GoogleUpdate.UpdatePolicyIsOverridden" enum="Boolean">
- <summary>
- True if the effective update policy for Chrome on Windows is the result of
- an app-specific override; false if it is the default for all apps. Recorded
- once per startup (following a 45 seconds delay).
- </summary>
-</histogram>
-
-<histogram name="GPU.AcceleratedSurfaceRefreshRate" units="hz">
- <summary>
- Refresh rate of the display in Hz. This is recorded every time we present a
- frame.
- </summary>
-</histogram>
-
-<histogram name="GPU.CollectContextGraphicsInfo" units="microseconds">
- <summary>
- The time that the GPU process spends collecting driver information during
- startup.
- </summary>
-</histogram>
-
-<histogram name="GPU.CreateBrowserCompositor" units="microseconds">
- <summary>
- The time that the browser process takes to create the compositor from its
- point of view. One of these is created for each top-level window (browser
- frame, menus, etc.).
- </summary>
-</histogram>
-
-<histogram name="GPU.InitializeOneOffTime" units="microseconds">
- <summary>
- The time that the GPU process spends in initializing the GL surface, and
- collecting graphics information.
- </summary>
-</histogram>
-
-<histogram name="History.DeleteFTSIndexDatabases">
- <summary>
- Count of &quot;History Index *&quot; databases deleted. These databases
- stored the full-text-search data for history, which was removed at r213442,
- this histogram tracks cleanup.
- </summary>
-</histogram>
-
-<histogram name="History.FaviconsRecoveredPercentage" units="%">
- <summary>
- Size of the recovered Favicons database relative to the original corrupt
- database. Recovery is VACUUM-like, so the resulting database should always
- be smaller. Substantial 100% results would indicate empty databases being
- recovered, substantial low% results would indicate very little data being
- recovered.
- </summary>
-</histogram>
-
-<histogram name="History.FaviconsRecoveredRowsFaviconBitmaps">
- <summary>
- Rows recovered from [favicon_bitmaps] table in Favicons recovery.
- </summary>
-</histogram>
-
-<histogram name="History.FaviconsRecoveredRowsFavicons">
- <summary>Rows recovered from [favicons] table in Favicons recovery.</summary>
-</histogram>
-
-<histogram name="History.FaviconsRecoveredRowsIconMapping">
- <summary>
- Rows recovered from [icon_mapping] table in Favicons recovery.
- </summary>
-</histogram>
-
-<histogram name="History.FaviconsRecovery" enum="HistoryFaviconsRecoveryEnum">
- <summary>
- Track results of SQLite database recovery code in thumbnail_database.cc.
- </summary>
-</histogram>
-
-<histogram name="History.TopSitesRecoveredPercentage" units="%">
- <summary>
- Size of the recovered TopSites database relative to the original corrupt
- database. Recovery is VACUUM-like, so the resulting database should always
- be smaller. Substantial 100% results would indicate empty databases being
- recovered, substantial low% results would indicate very little data being
- recovered.
- </summary>
-</histogram>
-
-<histogram name="History.TopSitesRecoveredRowsThumbnails">
- <summary>
- Rows recovered from [thumbnails] table in TopSites recovery.
- </summary>
-</histogram>
-
-<histogram name="History.TopSitesRecovery" enum="HistoryTopSitesRecoveryEnum">
- <summary>
- The TopSites recovery code is written conservatively, with successful
- recovery committed and any failure leading to rollback. This tracks the
- outcomes to determine which cases are high-frequency enough to warrant
- adding additional code to handle them (versus simply deleting the data).
- </summary>
-</histogram>
-
-<histogram name="History.TopSitesVisitsByRank" units="rank">
- <summary>
- Page visits to each of a user's top 50 sites. Visits to all other sites go
- into the 51st bucket. Only count the page visit if it came from user
- browsing and only count it once when cycling through a redirect chain.
- </summary>
-</histogram>
-
-<histogram name="HistoryPage.ClickPosition">
- <summary>
- Number of entries that the clicked entry is older than in History page. Last
- bucket is any entry of that value or higher.
- </summary>
-</histogram>
-
-<histogram name="HistoryPage.ClickPositionSubset">
- <summary>
- Subset of the Click Position histogram. Contains only the first smaller
- subset of entries on the page. Number of entries that the clicked entry is
- older than in History page. Last bucket is entries of that value or higher.
- </summary>
-</histogram>
-
-<histogram name="HistoryPage.OtherDevicesMenu" enum="NtpOtherSessionsType">
- <summary>
- Histogram for usage of the section in the history page that allows the user
- to access tabs from other devices.
- </summary>
-</histogram>
-
-<histogram name="HistoryPage.RemoveEntryPosition">
- <summary>
- Number of entries that the deleted entry is older than in History page. Last
- bucket is any entry of that value or higher. Confirmed removal is not
- guaranteed, just an initiation of 'Remove selected items'.
- </summary>
-</histogram>
-
-<histogram name="HistoryPage.RemoveEntryPositionSubset">
- <summary>
- Subset of Remove Entry Position histogram. Contains only the first smaller
- subset of entries on the page. Number of entries that the deleted entry is
- older than in History page. Last bucket is any entry of that value or
- higher. Confirmed removal is not guaranteed, just an initiation of 'Remove
- selected items'.
- </summary>
-</histogram>
-
-<histogram name="HttpCache.EntryLockWait" units="milliseconds">
- <summary>
- The time spent waiting for write lock on a disk cache entry.
- </summary>
-</histogram>
-
-<histogram name="HttpCache.OfflineStatus" enum="OfflineStatus">
- <summary>
- Result of a main page HttpCacheTransaction if offline mode had been enabled.
- </summary>
-</histogram>
-
-<histogram name="HttpCache.ReadErrorNonRestartable" enum="NetErrorCodes">
- <summary>Net error results from non-restartable cache read errors.</summary>
-</histogram>
-
-<histogram name="HttpCache.ReadErrorRestartable" enum="NetErrorCodes">
- <summary>Net error results from restartable cache read errors.</summary>
-</histogram>
-
-<histogram name="HttpCache.Vary" enum="VaryType">
- <summary>The type of Vary header for a given GET response.</summary>
-</histogram>
-
-<histogram name="Import.ImporterType.AutoImport" enum="ImporterType">
- <summary>The importer used on first run Auto Import.</summary>
-</histogram>
-
-<histogram name="Import.ImporterType.BookmarksAPI" enum="ImporterType">
- <summary>The importer used on import from the bookmarks file API.</summary>
-</histogram>
-
-<histogram name="Import.ImporterType.ImportDataHandler" enum="ImporterType">
- <summary>
- The importer used on import from the chrome://settings/importData UI.
- </summary>
-</histogram>
-
-<histogram name="Import.ShowDialog.FromBookmarkBarView" units="seconds">
- <summary>
- The amount of time from install time to time that user opens import dialog
- from BookmarkBarView.
- </summary>
-</histogram>
-
-<histogram name="Import.ShowDialog.FromFloatingBookmarkBarView" units="seconds">
- <summary>
- The amount of time from install time to time that user opens import dialog
- from NTP floating BookmarkBarView.
- </summary>
-</histogram>
-
-<histogram name="Import_ShowDlg.FromBookmarkBarView" units="seconds">
- <obsolete>
- Deprecated and replaced by Import.ShowDialog.FromBookmarkBarView
- </obsolete>
- <summary>
- The amount of time from install time to time that user opens import dialog
- from BookmarkBarView.
- </summary>
-</histogram>
-
-<histogram name="Import_ShowDlg.FromFloatingBookmarkBarView" units="seconds">
- <obsolete>
- Deprecated and replaced by Import.ShowDialog.FromFloatingBookmarkBarView
- </obsolete>
- <summary>
- The amount of time from install time to time that user opens import dialog
- from NTP floating BookmarkBarView.
- </summary>
-</histogram>
-
-<histogram name="InertialSensor.AccelerometerAndroidAvailable"
- enum="BooleanAvailable">
- <summary>
- Whether the Sensor.TYPE_LINEAR_ACCELERATION was available at the start of
- Device Motion.
- </summary>
-</histogram>
-
-<histogram name="InertialSensor.AccelerometerIncGravityAndroidAvailable"
- enum="BooleanAvailable">
- <summary>
- Whether the Sensor.TYPE_ACCELEROMETER was available at the start of Device
- Motion.
- </summary>
-</histogram>
-
-<histogram name="InertialSensor.AccelerometerWindowsAvailable"
- enum="BooleanAvailable">
- <summary>
- Whether the SENSOR_TYPE_ACCELEROMETER_3D was available at the start of
- Device Motion on the Windows platform.
- </summary>
-</histogram>
-
-<histogram name="InertialSensor.GyrometerWindowsAvailable"
- enum="BooleanAvailable">
- <summary>
- Whether the SENSOR_TYPE_GYROMETER_3D was available at the start of Device
- Motion on the Windows platform.
- </summary>
-</histogram>
-
-<histogram name="InertialSensor.GyroscopeAndroidAvailable"
- enum="BooleanAvailable">
- <summary>
- Whether the Sensor.TYPE_GYROSCOPE was available at the start of Device
- Motion.
- </summary>
-</histogram>
-
-<histogram name="InertialSensor.InclinometerWindowsAvailable"
- enum="BooleanAvailable">
- <summary>
- Whether the SENSOR_TYPE_INCLINOMETER_3D was available at the start of Device
- Orientation on the Windows platform.
- </summary>
-</histogram>
-
-<histogram name="InertialSensor.MotionDefaultAvailable" enum="BooleanAvailable">
- <summary>
- This histogram counts the number of Device Motion API invocations in the
- default implementation (Linux and CrOS). The default implementation does not
- provide any sensors so the result is always false.
- </summary>
-</histogram>
-
-<histogram name="InertialSensor.MotionMacAvailable" enum="BooleanAvailable">
- <summary>
- Whether the sudden motion sensor was available at the start of Device Motion
- on the MacOS platform.
- </summary>
-</histogram>
-
-<histogram name="InertialSensor.OrientationDefaultAvailable"
- enum="BooleanAvailable">
- <summary>
- This histogram counts the number of Device Orientation API invocations in
- the default implementation (Linux and CrOS). The default implementation does
- not provide any sensors so the result is always false.
- </summary>
-</histogram>
-
-<histogram name="InertialSensor.OrientationMacAvailable"
- enum="BooleanAvailable">
- <summary>
- Whether the sudden motion sensor was available at the start of Device
- Orientation on the MacOS platform.
- </summary>
-</histogram>
-
-<histogram name="InertialSensor.RotationVectorAndroidAvailable"
- enum="BooleanAvailable">
- <summary>
- Whether the Sensor.TYPE_ROTATION_VECTOR was available at the start of Device
- Orientation.
- </summary>
-</histogram>
-
-<histogram name="Installer.AttemptsCount.Total" units="count">
- <summary>
- The number of update attempts until the update has been applied. This is
- reported every time the device has completed an update.
- </summary>
-</histogram>
-
-<histogram name="Installer.DevModeErrorCodes" enum="UpdateEngineErrorCode">
- <summary>Errors from update_engine process when running in dev mode.</summary>
-</histogram>
-
-<histogram name="Installer.DownloadOverheadPercentage" units="%">
- <summary>
- The overhead in downloading extra bytes due to errors/interruptions.
- Expressed as a percentage of the bytes that are actually needed to be
- downloaded for the update to be successful.
- </summary>
-</histogram>
-
-<histogram name="Installer.DownloadSourcesUsed"
- enum="UpdateEngineDownloadSources">
- <summary>
- The combinations of protocol and source server that were used to complete a
- successful update.
- </summary>
-</histogram>
-
-<histogram name="Installer.FullPayloadAttemptNumber" units="count">
- <summary>
- The number of update attempts with a full update payload until the update
- has been applied. This is reported on every update attempt.
- </summary>
-</histogram>
-
-<histogram name="Installer.NormalErrorCodes" enum="UpdateEngineErrorCode">
- <summary>
- Errors from update_engine process when running in normal mode.
- </summary>
-</histogram>
-
-<histogram name="Installer.OSAgeDays" units="days">
- <summary>
- The age of the OS, defined as the age of the /etc/lsb-release file. This is
- reported on every update check but at most once a day.
- </summary>
-</histogram>
-
-<histogram name="Installer.PayloadAttemptNumber" units="count">
- <summary>
- The number of update attempts until the update has been applied. This is
- reported on every update attempt.
- </summary>
-</histogram>
-
-<histogram name="Installer.PayloadFormat" enum="UpdateEnginePayloadFormat">
- <summary>
- The type of update payload used to update the device. The difference between
- &quot;Full&quot; and &quot;Forced Full&quot; is that in the latter, the
- request sent to Omaha included a directive saying that a delta payload
- wasn't accepted. A &quot;Full&quot; payload is one where a delta payload was
- accepted but Omaha provided a full payload. This is reported every time the
- device has completed an update.
- </summary>
-</histogram>
-
-<histogram name="Installer.RebootToNewPartitionAttempt" units="count">
- <summary>
- The number of consecutive times a device has failed to boot an update that
- successfully applied. This metric is reported every time the firmware fails
- to boot the slot with the update and fell back to the slot it originally
- updated from.
- </summary>
-</histogram>
-
-<histogram name="Installer.SuccessfulMBsDownloadedFrom" units="MB">
- <summary>
- Number of MBs downloaded from during an update that completed successfully.
- </summary>
-</histogram>
-
-<histogram name="Installer.TimeToRebootMinutes" units="Minutes">
- <summary>
- Wall-clock duration between when an update has successfully completed (and
- the user is presented with the &quot;reboot arrow&quot;) and when the system
- has booted into the new update. This is reported every time the device is
- rebooted after an update has been applied.
- </summary>
-</histogram>
-
-<histogram name="Installer.TotalMBsDownloadedFrom" units="MB">
- <summary>
- Total number of MBs downloaded since the last successful update. This also
- includes all the bytes downloaded during any prior failed attempts.
- </summary>
-</histogram>
-
-<histogram name="Installer.UpdateDurationMinutes" units="Minutes">
- <summary>
- Absolute wall-clock time duration it took for the update to complete from
- the time an update first began. It includes not just the time the device
- was up, but also includes the time the device spent sleeping.
- </summary>
-</histogram>
-
-<histogram name="Installer.UpdateDurationUptimeMinutes" units="Minutes">
- <summary>
- Uptime duration it took for the update to complete from the time an update
- first began. It does not include the time the device spent sleeping, but it
- does include the uptime spent in waiting for the hourly update checks to
- happen.
- </summary>
-</histogram>
-
-<histogram name="Installer.UpdateNumReboots" units="count">
- <summary>
- Number of times the device was rebooted by the user since an update began
- and until it completed successfully.
- </summary>
-</histogram>
-
-<histogram name="Installer.UpdatesAbandonedCount" units="count">
- <summary>
- The number of update attempts that didn't complete because a newer update
- was detected during the update operation. This is reported every time the
- device has completed an update.
- </summary>
-</histogram>
-
-<histogram name="Installer.UpdatesAbandonedEventCount" units="count">
- <summary>
- The number of consecutive different abandoned update payloads since the last
- successful update. This is reported every time an update payload is
- abandoned because a newer update payload is available.
- </summary>
-</histogram>
-
-<histogram name="Installer.UpdateURLSwitches" units="count">
- <summary>
- Number of times the download URLs were switched due to failures.
- </summary>
-</histogram>
-
-<histogram name="Instant.InstantControllerEvent" enum="InstantControllerEvent">
- <summary>
- Records various events of interest in the InstantController. E.g. When URLs
- are blacklisted.
- </summary>
-</histogram>
-
-<histogram name="Instant.SessionsStorageNamespace"
- enum="InstantSessionStorageNamespace">
- <summary>
- How often an Instant preview is committed onto a different tab than it was
- created from.
- </summary>
-</histogram>
-
-<histogram name="Instant.TimeToFirstShow" units="milliseconds">
- <summary>
- The time between the first Omnibox interaction and when the Instant preview
- shows. If the instant preview was already showing when the user interacted
- with the omnibox, this histogram is not recorded.
- </summary>
-</histogram>
-
-<histogram name="InstantExtended.CacheableNTPLoad"
- enum="InstantExtended_CacheableNTPLoad">
- <summary>
- Records a histogram for how often the Cacheable NTP fails to load.
- </summary>
-</histogram>
-
-<histogram name="InstantExtended.FallbackToLocalOverlay"
- enum="InstantExtended_FallbackCause">
- <summary>
- Records the cause for falling back to a local overlay at the time of
- fallback.
- </summary>
-</histogram>
-
-<histogram name="InstantExtended.InstantNavigation"
- enum="InstantExtended_InstantNavigation">
- <obsolete>
- Deprecated as of 10/2013. This histogram is no longer relevant since the
- HTML overlay went away.
- </obsolete>
- <summary>
- Records a histogram for instant extended (Local NTP and Online NTP) and
- non-extended navigations.
- </summary>
-</histogram>
-
-<histogram name="InstantExtended.NewOptInState"
- enum="InstantExtended_NewOptInState">
- <obsolete>
- Deprecated as of 11/2013.
- </obsolete>
- <summary>
- Records, on startup, whether the user has chosen to opt-in to or opt-out of
- InstantExtended via chrome://flags.
- </summary>
-</histogram>
-
-<histogram name="InstantExtended.OptInState" enum="InstantExtended_OptInState">
- <obsolete>
- Deprecated 2013-06. As of m30 use InstantExtended.NewOptInState.
- </obsolete>
- <summary>
- Records, on startup, whether the user has chosen to opt-in to or opt-out of
- InstantExtended via chrome://flags.
- </summary>
-</histogram>
-
-<histogram name="InstantExtended.PercentageMatchQuerytoQuery" units="%">
- <obsolete>
- Deprecated 2013-07. Please see
- InstantExtended.PercentageMatchV2_QuerytoQuery instead.
- </obsolete>
- <summary>
- Records the number of matching characters at the start of the user's text as
- a percentage of average length between the old and new text when the user
- navigates from a search query to another search query.
- </summary>
-</histogram>
-
-<histogram name="InstantExtended.PercentageMatchQuerytoURL" units="%">
- <obsolete>
- Deprecated 2013-07. Please see InstantExtended.PercentageMatchV2_QuerytoURL
- instead.
- </obsolete>
- <summary>
- Records the number of matching characters at the start of the user's text as
- a percentage of average length between the old and new text when the user
- navigates from a search query to a url. Example: Accidental search for
- google.con, then navigation to google.com.
- </summary>
-</histogram>
-
-<histogram name="InstantExtended.PercentageMatchURLtoQuery" units="%">
- <obsolete>
- Deprecated 2013-07. Please see InstantExtended.PercentageMatchV2_URLtoQuery
- instead.
- </obsolete>
- <summary>
- Records the number of matching characters at the start of the user's text as
- a percentage of average length between the old and new text when the user
- navigates from a url to a search query.
- </summary>
-</histogram>
-
-<histogram name="InstantExtended.PercentageMatchURLtoURL" units="%">
- <obsolete>
- Deprecated 2013-07. Please see InstantExtended.PercentageMatchV2_URLtoURL
- instead.
- </obsolete>
- <summary>
- Records the number of matching characters at the start of the user's text as
- a percentage of average length between the old and new text when the user
- navigates from a url to another url.
- </summary>
-</histogram>
-
-<histogram name="InstantExtended.PercentageMatchV2_QuerytoQuery" units="%">
- <summary>
- Records the number of matching characters at the start of the user's text as
- a percentage of average length between the old and new text when the user
- navigates from a search query to another search query.
- </summary>
-</histogram>
-
-<histogram name="InstantExtended.PercentageMatchV2_QuerytoURL" units="%">
- <summary>
- Records the number of matching characters at the start of the user's text as
- a percentage of average length between the old and new text when the user
- navigates from a search query to a url. Example: Accidental search for
- google.con, then navigation to google.com.
- </summary>
-</histogram>
-
-<histogram name="InstantExtended.PercentageMatchV2_URLtoQuery" units="%">
- <summary>
- Records the number of matching characters at the start of the user's text as
- a percentage of average length between the old and new text when the user
- navigates from a url to a search query.
- </summary>
-</histogram>
-
-<histogram name="InstantExtended.PercentageMatchV2_URLtoURL" units="%">
- <summary>
- Records the number of matching characters at the start of the user's text as
- a percentage of average length between the old and new text when the user
- navigates from a url to another url.
- </summary>
-</histogram>
-
-<histogram name="InstantExtended.PrefValue" enum="BooleanEnabled">
- <obsolete>
- Deprecated 2013-06. This preference has not been exposed or used for months,
- and we do not plan to use it in the future.
- </obsolete>
- <summary>
- Records, on startup, the value of the &quot;Allow your search engine to
- provide Instant result&quot; preference setting for the first profile
- loaded.
- </summary>
-</histogram>
-
-<histogram name="interstitial.authority_invalid_time" units="milliseconds">
- <obsolete>
- Removed on 8/1/13.
- </obsolete>
- <summary>
- The time between the SSL interstitial display and the user decision, which
- may be either accept or deny. This is only recorded for overridable SSL
- warnings with a CERT_AUTHORITY_INVALID warning. Timing begins when user
- first focuses on the page.
- </summary>
-</histogram>
-
-<histogram name="interstitial.common_name_invalid_time" units="milliseconds">
- <obsolete>
- Removed on 8/1/13.
- </obsolete>
- <summary>
- The time between the SSL interstitial display and the user decision, which
- may be either accept or deny. This is only recorded for overridable SSL
- warnings with a CERT_COMMON_NAME_INVALID warning. Timing begins when user
- first focuses on the page.
- </summary>
-</histogram>
-
-<histogram name="interstitial.date_invalid_time" units="milliseconds">
- <obsolete>
- Removed on 8/1/13.
- </obsolete>
- <summary>
- The time between the SSL interstitial display and the user decision, which
- may be either accept or deny. This is only recorded for overridable SSL
- warnings with a CERT_DATE_INVALID warning. Timing begins when user first
- focuses on the page.
- </summary>
-</histogram>
-
-<histogram name="interstitial.ssl" enum="SSLResponseTypesV2">
- <summary>
- User action when the user is shown a SSL interstitial. SHOW_ALL and MORE
- refer to the total number of SSL errors; all of the other numbers pertain to
- the number of actions related to SSL errors that are overridable. The
- counts do not sum to 100%; SHOW_ALL is a superset of SHOW_OVERRIDABLE, which
- in turn will be a supserset of the PROCEED/DONT_PROCEED variables.
- SHOW_UNDERSTAND is only being used by an experimental field trial.
- </summary>
-</histogram>
-
-<histogram name="interstitial.ssl_accept_time" units="milliseconds">
- <obsolete>
- Removed on 8/1/13.
- </obsolete>
- <summary>
- The time between the SSL interstitial display and the user decision, when
- the user accepts the SSL warning. This is only recorded for overridable SSL
- warnings. Timing begins when user first focuses on the page.
- </summary>
-</histogram>
-
-<histogram name="interstitial.ssl_error_type" enum="SSLErrorTypes">
- <summary>
- The type of SSL error that the user encounters. This is recorded for all
- SSL warnings, regardless of whether they are overridable.
- </summary>
-</histogram>
-
-<histogram name="interstitial.ssl_reject_time" units="milliseconds">
- <obsolete>
- Removed on 8/1/13.
- </obsolete>
- <summary>
- The time between the SSL interstitial display and the user decision, when
- the user rejects the SSL warning. This is only recorded for overridable SSL
- warnings. Timing begins when user first focuses on the page.
- </summary>
-</histogram>
-
-<histogram name="Keyboard.KeystrokeDeltas" units="milliseconds">
- <summary>
- The time between keystrokes in Aura text fields. The only keystrokes that
- are measured are ones that produce a printable character and are not over 5
- seconds apart.
- </summary>
-</histogram>
-
-<histogram name="LanguageUsage.AcceptLanguage" enum="LanguageCode">
- <summary>Accept languages.</summary>
-</histogram>
-
-<histogram name="LanguageUsage.ApplicationLanguage" enum="LanguageCode">
- <summary>Application languages used for UI.</summary>
-</histogram>
-
-<histogram name="LevelDBEnv.All.SafeThreadAccess" units="accesses">
- <obsolete>
- Deprecated 2013-10. No thread-unsafety was found.
- </obsolete>
- <summary>
- Linux and CrOS use unlocked_stdio(3). If it is used unsafely, record it
- here. If there is no record of unsafety after chrome 29 has been in the
- stable channel for a few weeks then revert this change.
- </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IDB.IOError" enum="LevelDBIOErrorMethods">
- <summary>
- Methods where leveldb's Chromium environment has IO errors when being used
- by IndexedDB.
- </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IDB.IOError." enum="PlatformFileError">
- <summary>
- PlatformFileErrors encountered by a single leveldb env method.
- </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IDB.IOError.NewLogger" enum="OSAgnosticErrno">
- <summary>Errno of errors encountered in NewLogger.</summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IDB.IOError.NewSequentialFile"
- enum="OSAgnosticErrno">
- <summary>Errno of errors encountered in NewSequentialFile.</summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IDB.IOError.RandomAccessFile"
- enum="PlatformFileError">
- <obsolete>
- Deprecated 2013-04. As of m28 use
- LevelDBEnv.IDB.IOError.NewRandomAccessFile.
- </obsolete>
- <summary>File errors in leveldb IDBEnv's NewRandomAccessFile method.</summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IDB.IOError.WritableFileAppend"
- enum="OSAgnosticErrno">
- <summary>Errno of errors encountered in WritableFileAppend.</summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IDB.IOError.WritableFileFlush"
- enum="OSAgnosticErrno">
- <summary>Errno of errors encountered in WritableFileFlush.</summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IDB.LockFileAncestorsNotFound" units="directories">
- <summary>
- Number of directories missing when IDB LevelDBEnv tries to create a Lock
- file.
- </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IDB.MaxFDs" units="files">
- <summary>
- File descriptor limit recorded every time LevelDB calls NewRandomAccessFile
- for IndexedDB.
- </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IDB.MissingFiles" units="files">
- <summary>
- Number of backup files found without corresponding ldb files. As measured by
- GetChildren when used in IndexedDB.
- </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IDB.RetryRecoveredFromErrorIn"
- enum="PlatformFileError">
- <summary>
- When IDB LevelDBEnv successfully retries an operation that had failed,
- record the error from the most recent failed attempt.
- </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IDB.Table" enum="BooleanSuccess">
- <summary>
- Success indicates a successful backup or restore operation for .ldb table
- files when used in IndexedDB.
- </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IDB.TimeTo" units="milliseconds">
- <obsolete>
- Deprecated 2013-04. As of m28 use LevelDBEnv.IDB.TimeUntilSuccessFor.
- </obsolete>
- <summary>
- Time IDB LevelDBEnv slept before successfully completing this operation. 0
- means success on the first try.
- </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IDB.TimeUntilSuccessFor" units="milliseconds">
- <summary>
- Time IDB LevelDBEnv slept before successfully completing this operation. 0
- means success on the first try.
- </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IOError" enum="LevelDBIOErrorMethods">
- <summary>Methods where leveldb's Chromium environment has IO errors.</summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IOError." enum="PlatformFileError">
- <summary>PlatformFileErrors encountered by a single leveldb method.</summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IOError.NewLogger" enum="OSAgnosticErrno">
- <summary>Errno of errors encountered in NewLogger.</summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IOError.NewSequentialFile" enum="OSAgnosticErrno">
- <summary>Errno of errors encountered in NewSequentialFile.</summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IOError.RandomAccessFile" enum="PlatformFileError">
- <obsolete>
- Deprecated 2013-04. As of m28 use LevelDBEnv.IOError.NewRandomAccessFile.
- </obsolete>
- <summary>
- File errors in leveldb ChromiumEnv's NewRandomAccessFile method.
- </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IOError.WritableFileAppend" enum="OSAgnosticErrno">
- <summary>Errno of errors encountered in WritableFileAppend.</summary>
-</histogram>
-
-<histogram name="LevelDBEnv.IOError.WritableFileFlush" enum="OSAgnosticErrno">
- <summary>Errno of errors encountered in WritableFileFlush.</summary>
-</histogram>
-
-<histogram name="LevelDBEnv.LockFileAncestorsNotFound" units="directories">
- <summary>
- Number of directories missing when Non-IDB LevelDBEnv tries to create a Lock
- file.
- </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.MaxFDs" units="files">
- <summary>
- File descriptor limit recorded every time LevelDB calls NewRandomAccessFile
- for clients other than IndexedDB.
- </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.MissingFiles" units="files">
- <summary>
- Number of backup files found without corresponding ldb files. As measured by
- GetChildren when used in LevelDB clients other than IndexedDB.
- </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.RetryRecoveredFromErrorIn" enum="PlatformFileError">
- <summary>
- When Non-IDB LevelDBEnv successfully retries an operation that had failed,
- record the error from the most recent failed attempt.
- </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.Table" enum="BooleanSuccess">
- <summary>
- Success indicates a successful backup or restore operation for .ldb table
- files when used by LevelDB clients other than IndexedDB.
- </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.TimeTo" units="milliseconds">
- <obsolete>
- Deprecated 2013-04. As of m28 use LevelDBEnv.TimeUntilSuccessFor.
- </obsolete>
- <summary>
- Time Non-IDB LevelDBEnv slept before successfully completing this operation.
- 0 means success on the first try.
- </summary>
-</histogram>
-
-<histogram name="LevelDBEnv.TimeUntilSuccessFor" units="milliseconds">
- <summary>
- Time Non-IDB LevelDBEnv slept before successfully completing this operation.
- 0 means success on the first try.
- </summary>
-</histogram>
-
-<histogram name="Linux.GlibcVersion" enum="LinuxGlibcVersion">
- <summary>The version of glibc used. (Linux only)</summary>
-</histogram>
-
-<histogram name="Login.FailureReason" enum="LoginFailureReason">
- <summary>Chrome OS login failure reason.</summary>
-</histogram>
-
-<histogram name="Login.LeastUsedAccountDays" units="days">
- <summary>
- Chrome OS histogram that keeps track of the days since the least frequently
- used account signed in. Reported on every boot and once a day after that.
- </summary>
-</histogram>
-
-<histogram name="Login.PolicyFilesStatePerBoot" enum="LoginPolicyFilesState">
- <summary>The state of Chrome OS owner key and device policy files.</summary>
-</histogram>
-
-<histogram name="Login.PromptToCompleteLoginTime" units="milliseconds">
- <summary>
- Time from first display of the login prompt until the user completes signing
- in.
- </summary>
-</histogram>
-
-<histogram name="Login.SuccessReason" enum="LoginSuccessReason">
- <summary>Chrome OS login success reason.</summary>
-</histogram>
-
-<histogram name="Login.UserType" enum="LoginUserType">
- <summary>
- Chrome OS histogram that keeps track of the way a user logs in and whether
- Chrome OS is running normal or developer mode.
- </summary>
-</histogram>
-
-<histogram name="Media.AcceleratedCompositingActive" enum="BooleanSuccess">
- <summary>
- Whether accelerated compositing was used for HTML5 media rendering.
- </summary>
-</histogram>
-
-<histogram name="Media.AudioBitsPerChannel">
- <summary>Bits per channel of HTML5 audio sample data.</summary>
-</histogram>
-
-<histogram name="Media.AudioChannelLayout" enum="ChannelLayout">
- <summary>Audio channel layout in HTML5 media.</summary>
-</histogram>
-
-<histogram name="Media.AudioCodec" enum="AudioCodec">
- <summary>Audio codec used in HTML5 media.</summary>
-</histogram>
-
-<histogram name="Media.AudioInputController" units="ms">
- <summary>Measures the time taken for AudioInputController::</summary>
-</histogram>
-
-<histogram name="Media.AudioInputDeviceManager" units="ms">
- <summary>Measures the time taken for AudioInputDeviceManager::</summary>
-</histogram>
-
-<histogram name="Media.AudioOutputController" units="ms">
- <summary>Measures the time taken for AudioOutputController::</summary>
-</histogram>
-
-<histogram name="Media.AudioOutputControllerDataNotReady" units="ms">
- <summary>
- Time spent waiting in AudioOutputController::WaitTillDataReady() if the data
- was not initially available.
- </summary>
-</histogram>
-
-<histogram name="Media.AudioOutputControllerPlaybackStartupSuccess"
- enum="BooleanSuccess">
- <summary>
- Whether playback started successfully after stream startup was requested.
- </summary>
-</histogram>
-
-<histogram name="Media.AudioRendererEvents" enum="AudioRendererEvents">
- <summary>Captures statistics for various AudioRendererImpl events.</summary>
-</histogram>
-
-<histogram name="Media.AudioRendererMissedDeadline" units="%">
- <summary>
- Percentage of AudioSyncReader::Read() calls where the renderer missed its
- realtime deadline.
- </summary>
-</histogram>
-
-<histogram name="Media.AudioSampleFormat" enum="AudioSampleFormat">
- <summary>
- Audio sample format in HTML5 media. Logged when Audio Decoder initializes.
- </summary>
-</histogram>
-
-<histogram name="Media.AudioSamplesPerSecond" enum="AudioSampleRate">
- <summary>Audio samples per second in HTML5 media.</summary>
-</histogram>
-
-<histogram name="Media.AudioSamplesPerSecondUnexpected" units="Hz">
- <summary>
- Audio samples per second in HTML5 media (atypical values, in Hz).
- </summary>
-</histogram>
-
-<histogram name="Media.CacheUseful" enum="BooleanSuccess">
- <summary>
- Whether a media response might be used to satisfy a future request.
- </summary>
-</histogram>
-
-<histogram name="Media.ChromeCast.DelayedAndDroppedFramesPer5Sec"
- units="frames/5s">
- <summary>
- The average number of delayed and dropped frames for the ChromeCast
- application. Reported every 5 seconds.
- </summary>
-</histogram>
-
-<histogram name="Media.ChromeCast.DisplayedFramesPerSecond" units="frames/s">
- <summary>
- The average number of displayed frames for the ChromeCast application.
- Reported every 5 seconds.
- </summary>
-</histogram>
-
-<histogram name="Media.ChromeCast.TimeToBufferAv" units="ms">
- <summary>
- Time needed to pre-buffer A/V data before the actual playback for the
- ChromeCast application.
- </summary>
-</histogram>
-
-<histogram name="Media.ChromeCast.TimeToBufferAvAfterAbort" units="ms">
- <summary>
- Time needed to buffer A/V data after an abort for the ChromeCast
- application.
- </summary>
-</histogram>
-
-<histogram name="Media.ChromeCast.TimeToBufferAvAfterUnderrun" units="ms">
- <summary>
- Time needed to buffer A/V data after an underrun for the ChromeCast
- application.
- </summary>
-</histogram>
-
-<histogram name="Media.DetectedAudioCodec" enum="FFmpegCodecs">
- <summary>Audio codec used in HTML5 media.</summary>
-</histogram>
-
-<histogram name="Media.DetectedContainer" enum="MediaContainers">
- <summary>Container used for HTML5 media.</summary>
-</histogram>
-
-<histogram name="Media.DetectedVideoCodec" enum="FFmpegCodecs">
- <summary>Video codec used in HTML5 media.</summary>
-</histogram>
-
-<histogram name="Media.DevicePermissionActions" enum="DevicePermissionActions">
- <summary>
- Measures the actions taken in the media infobar, which prompts the users for
- device permission.
- </summary>
-</histogram>
-
-<histogram name="Media.Duration" units="ms">
- <summary>Duration in milliseconds of HTML5 media (when known).</summary>
-</histogram>
-
-<histogram name="Media.EME.ClearKey.addKey" enum="MediaKeyException">
- <summary>addKey result using the Clear Key key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.ClearKey.cancelKeyRequest" enum="MediaKeyException">
- <summary>cancelKeyRequest result using the Clear Key key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.ClearKey.DecryptError">
- <summary>
- Decryption error event count using the Clear Key key system.
- </summary>
-</histogram>
-
-<histogram name="Media.EME.ClearKey.generateKeyRequest"
- enum="MediaKeyException">
- <summary>generateKeyRequest result using the Clear Key key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.ClearKey.KeyAdded">
- <summary>KeyAdded event count using the Clear Key key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.ClearKey.KeyError" enum="MediaKeyError">
- <summary>KeyError event count using the Clear Key key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.NeedKey">
- <summary>EME NeedKey event count.</summary>
-</histogram>
-
-<histogram name="Media.EME.Unknown.addKey" enum="MediaKeyException">
- <summary>addKey result using an unknown key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.Unknown.cancelKeyRequest" enum="MediaKeyException">
- <summary>cancelKeyRequest result using an unknown key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.Unknown.DecryptError">
- <summary>Decryption error event count using an unknown key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.Unknown.generateKeyRequest" enum="MediaKeyException">
- <summary>generateKeyRequest result using an unknown key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.Unknown.KeyAdded">
- <summary>KeyAdded event count using an unknown key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.Unknown.KeyError" enum="MediaKeyError">
- <summary>KeyError event count using an unknown key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.Widevine.addKey" enum="MediaKeyException">
- <summary>addKey result using the Widevine key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.Widevine.cancelKeyRequest" enum="MediaKeyException">
- <summary>cancelKeyRequest result using the Widevine key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.Widevine.DecryptError">
- <summary>Decryption error event count using the Widevine key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.Widevine.generateKeyRequest"
- enum="MediaKeyException">
- <summary>generateKeyRequest result using the Widevine key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.Widevine.KeyAdded">
- <summary>KeyAdded event count using the Widevine key system.</summary>
-</histogram>
-
-<histogram name="Media.EME.Widevine.KeyError" enum="MediaKeyError">
- <summary>KeyError event count using the Widevine key system.</summary>
-</histogram>
-
-<histogram name="Media.FallbackHardwareAudioBitsPerChannel">
- <summary>
- Bits per channel of the hardware audio device which failed to open in low
- latency mode and required high latency fallback.
- </summary>
-</histogram>
-
-<histogram name="Media.FallbackHardwareAudioChannelCount">
- <summary>
- Channel count of the hardware audio device which failed to open in low
- latency mode and required high latency fallback.
- </summary>
-</histogram>
-
-<histogram name="Media.FallbackHardwareAudioChannelLayout" enum="ChannelLayout">
- <summary>
- Channel layout of the hardware audio device which failed to open in low
- latency mode and required high latency fallback.
- </summary>
-</histogram>
-
-<histogram name="Media.FallbackHardwareAudioSamplesPerSecond"
- enum="AudioSampleRate">
- <summary>
- Samples per second of the hardware audio device which failed to open in low
- latency mode and required high latency fallback.
- </summary>
-</histogram>
-
-<histogram name="Media.FallbackHardwareAudioSamplesPerSecondUnexpected"
- units="Hz">
- <summary>
- Samples per second of the hardware audio device (atypical values, in Hz)
- which failed to open in low latency mode and required high latency fallback.
- </summary>
-</histogram>
-
-<histogram name="Media.FallbackToHighLatencyAudioPath" enum="BooleanSuccess">
- <summary>
- Whether Chrome had to fallback to the high latency audio path or not.
- </summary>
-</histogram>
-
-<histogram name="Media.Fling.DelayedAndDroppedFramesPer5Sec" units="frames/5s">
- <summary>
- The average number of delayed and dropped frames for the Fling application.
- Reported every 5 seconds.
- </summary>
-</histogram>
-
-<histogram name="Media.Fling.DisplayedFramesPerSecond" units="frames/s">
- <summary>
- The average number of displayed frames for the Fling application. Reported
- every 5 seconds.
- </summary>
-</histogram>
-
-<histogram name="Media.Fling.TimeToBufferAv" units="ms">
- <summary>
- Time needed to pre-buffer A/V data before the actual playback for the Fling
- application.
- </summary>
-</histogram>
-
-<histogram name="Media.Fling.TimeToBufferAvAfterAbort" units="ms">
- <summary>
- Time needed to buffer A/V data after an abort for the Fling application.
- </summary>
-</histogram>
-
-<histogram name="Media.Fling.TimeToBufferAvAfterUnderrun" units="ms">
- <summary>
- Time needed to buffer A/V data after an underrun for the Fling application.
- </summary>
-</histogram>
-
-<histogram name="Media.GpuVideoDecoderInitializeStatus" enum="PipelineStatus">
- <summary>Results of attempts to GpuVideoDecoder::Initialize().</summary>
-</histogram>
-
-<histogram name="Media.HardwareAudioBitsPerChannel">
- <summary>Bits per channel of the hardware audio device.</summary>
-</histogram>
-
-<histogram name="Media.HardwareAudioChannelCount">
- <summary>Channel count of the hardware audio device.</summary>
-</histogram>
-
-<histogram name="Media.HardwareAudioChannelLayout" enum="ChannelLayout">
- <summary>Channel layout of the hardware audio device.</summary>
-</histogram>
-
-<histogram name="Media.HardwareAudioSamplesPerSecond" enum="AudioSampleRate">
- <summary>Samples per second of the hardware audio device.</summary>
-</histogram>
-
-<histogram name="Media.HardwareAudioSamplesPerSecondUnexpected" units="Hz">
- <summary>
- Samples per second of the hardware audio device (atypical values, in Hz).
- </summary>
-</histogram>
-
-<histogram name="Media.InfoLoadDelay" units="milliseconds">
- <summary>
- The time it takes to perform redirect tracking and a CORS access check while
- preparing to play a media file.
- </summary>
-</histogram>
-
-<histogram name="Media.LinuxAudioIO" enum="LinuxAudioIO">
- <summary>
- Audio IO layer used by the Linux OS, sampled once at startup of the browser.
- </summary>
-</histogram>
-
-<histogram name="Media.LocalRendererSinkStates" enum="LocalRendererSinkStates">
- <summary>
- State of the WebRtc local renderer, sampled once during the lifetime of a
- local renderer.
- </summary>
-</histogram>
-
-<histogram name="Media.MSE.AudioCodec" enum="MSECodec">
- <summary>
- Audio codec used in Media Source Extensions playback. Set when AddId() is
- called during playback.
- </summary>
-</histogram>
-
-<histogram name="Media.MSE.NumberOfTracks">
- <summary>
- Number of tracks specified to AddId() for Media Source Extensions playback.
- May be called multiple times per element if playback is dynamically altered.
- </summary>
-</histogram>
-
-<histogram name="Media.MSE.Playback" enum="BooleanSuccess">
- <summary>
- Whether Media Source Extensions is specified for playback of Media elements.
- Sampled when media pipeline starts.
- </summary>
-</histogram>
-
-<histogram name="Media.MSE.VideoCodec" enum="MSECodec">
- <summary>
- Video codec used in Media Source Extensions playback. Set when AddId() is
- called during playback.
- </summary>
-</histogram>
-
-<histogram name="Media.Netflix.AudioBitrate" units="kbps">
- <summary>
- The audio bit rate as reported by the Netflix application. May be reported
- multiple times as network conditions change during playback.
- </summary>
-</histogram>
-
-<histogram name="Media.Netflix.AudioNumChannels" units="channels">
- <summary>
- The number of audio channels as reported by the Netflix application. May be
- reported multiple times as network conditions change during playback.
- </summary>
-</histogram>
-
-<histogram name="Media.Netflix.DelayedAndDroppedFramesPer5Sec"
- units="frames/5s">
- <summary>
- The average number of delayed and dropped frames for the Netflix
- application. Reported every 5 seconds.
- </summary>
-</histogram>
-
-<histogram name="Media.Netflix.DisplayedFramesPerSecond" units="frames/s">
- <summary>
- The average number of displayed frames for the Netflix application. Reported
- every 5 seconds.
- </summary>
-</histogram>
-
-<histogram name="Media.Netflix.VideoBitrate" units="kbps">
- <summary>
- Video bit rate as reported by the Netflix application. May be reported
- multiple times as network conditions change during playback.
- </summary>
-</histogram>
-
-<histogram name="Media.Netflix.VideoHeight" units="pixels">
- <summary>
- Video height as reported by the Netflix application. May be reported
- multiple times as network conditions change during playback.
- </summary>
-</histogram>
-
-<histogram name="Media.PepperVideoDecoderError" enum="PepperVideoDecodeError">
- <summary>Counts of video decode errors reported to plugin.</summary>
-</histogram>
-
-<histogram name="Media.PepperVideoDecoderPictureCount">
- <summary>
- Number of PictureBuffers/textures requested per hardware decoder creation.
- This value varies by platform and video. A user visible video may trigger
- multiple decoder creations (sometimes every 5 seconds) but would normally
- not hold more than 2 sets of buffers at any given time in memory.
- </summary>
-</histogram>
-
-<histogram name="Media.PepperVideoDecoderPictureHeight">
- <summary>
- Vertical video resolution rounded to the nearest bucket. (Corresponds
- roughly to the number in 720p.)
- </summary>
-</histogram>
-
-<histogram name="Media.PlayMovies.DelayedAndDroppedFramesPer5Sec"
- units="frames/5s">
- <summary>
- The average number of delayed and dropped frames for the PlayMovies
- application. Reported every 5 seconds.
- </summary>
-</histogram>
-
-<histogram name="Media.PlayMovies.DisplayedFramesPerSecond" units="frames/s">
- <summary>
- The average number of displayed frames for the PlayMovies application.
- Reported every 5 seconds.
- </summary>
-</histogram>
-
-<histogram name="Media.RTCVideoDecoderError" enum="PepperVideoDecodeError">
- <summary>Counts of video decode errors reported to RTCVideoDecoder.</summary>
-</histogram>
-
-<histogram name="Media.RTCVideoDecoderInitDecodeStatus" enum="BooleanSuccess">
- <obsolete>
- Renamed to Media.RTCVideoDecoderInitDecodeSuccess.
- </obsolete>
- <summary>Results of attempts to RTCVideoDecoder::InitDecode().</summary>
-</histogram>
-
-<histogram name="Media.RTCVideoDecoderInitDecodeSuccess" enum="BooleanSuccess">
- <summary>
- Indicates whether we were successful in initializing hardware video decoder
- for use in the RTC pipeline.
- </summary>
-</histogram>
-
-<histogram name="Media.RTCVideoEncoderInitEncodeSuccess" enum="BooleanSuccess">
- <summary>
- Indicates whether we were successful in initializing hardware video encoder
- for use in the RTC pipeline.
- </summary>
-</histogram>
-
-<histogram name="Media.RTCVideoEncoderProfile" enum="VideoCodecProfile">
- <summary>Video codec profile used in RTC video encoder.</summary>
-</histogram>
-
-<histogram name="Media.TimeToPipelineStarted" units="ms">
- <summary>
- Time in milliseconds from HTML5 media pipeline creation to playing event.
- </summary>
-</histogram>
-
-<histogram name="Media.TotalMBytes" units="MB">
- <summary>Size of HTML5 media (when known), in MB.</summary>
-</histogram>
-
-<histogram name="Media.UncacheableReason" enum="UncacheableReason">
- <summary>
- Reasons a media response won't be used to satisfy a future request.
- </summary>
-</histogram>
-
-<histogram name="Media.URLScheme" enum="URLSchemeForHistogram">
- <summary>
- URL scheme used with HTML5 media. (each URL provides one sample)
- </summary>
-</histogram>
-
-<histogram name="Media.VAVDAH264.DecoderFailure" enum="VAVDAH264DecoderFailure">
- <summary>
- Error codes reported by video decode using VA-API hardware video decoder.
- </summary>
-</histogram>
-
-<histogram name="Media.VideoCaptureManager" units="ms">
- <summary>Measures the time taken for VideoCaptureManager::</summary>
-</histogram>
-
-<histogram name="Media.VideoCodec" enum="VideoCodec">
- <summary>Video codec used in HTML5 media.</summary>
-</histogram>
-
-<histogram name="Media.VideoCodecProfile" enum="VideoCodecProfile">
- <summary>Video codec profile used in HTML5 media.</summary>
-</histogram>
-
-<histogram name="Media.VideoCodedAspectRatio">
- <summary>Coded aspect ratio of HTML5 video.</summary>
-</histogram>
-
-<histogram name="Media.VideoCodedWidth">
- <summary>Coded width of HTML5 video.</summary>
-</histogram>
-
-<histogram name="Media.VideoColorRange" enum="FFmpegColorRanges">
- <summary>
- Pixel format color range of HTML5 video. Emitted on video load.
- </summary>
-</histogram>
-
-<histogram name="Media.VideoPixelFormat" enum="VideoPixelFormat">
- <summary>Pixel format used in HTML5 video. Emitted on video load.</summary>
-</histogram>
-
-<histogram name="Media.VideoVisibleAspectRatio">
- <summary>Visible aspect ratio of HTML5 video.</summary>
-</histogram>
-
-<histogram name="Media.VideoVisibleWidth">
- <summary>Visible width of HTML5 video.</summary>
-</histogram>
-
-<histogram name="Media.YouTube.DelayedAndDroppedFramesPer5Sec"
- units="frames/5s">
- <summary>
- The average number of delayed and dropped frames for the YouTube
- application. Reported every 5 seconds.
- </summary>
-</histogram>
-
-<histogram name="Media.YouTube.DisplayedFramesPerSecond" units="frames/s">
- <summary>
- The average number of displayed frames for the YouTube application. Reported
- every 5 seconds.
- </summary>
-</histogram>
-
-<histogram name="Media.YouTube.TimeToBufferAv" units="ms">
- <summary>
- Time needed to pre-buffer A/V data before the actual playback for the
- YouTube application.
- </summary>
-</histogram>
-
-<histogram name="Media.YouTube.TimeToBufferAvAfterAbort" units="ms">
- <summary>
- Time needed to buffer A/V data after an abort for the YouTube application.
- </summary>
-</histogram>
-
-<histogram name="Media.YouTube.TimeToBufferAvAfterUnderrun" units="ms">
- <summary>
- Time needed to buffer A/V data after an underrun for the YouTube
- application.
- </summary>
-</histogram>
-
-<histogram name="MediaGalleries.Usage" enum="MediaGalleriesUsageType">
- <summary>Various usage counts for media galleries.</summary>
-</histogram>
-
-<histogram name="Memory.BackingStore">
- <summary>TBD.</summary>
-</histogram>
-
-<histogram name="Memory.Browser" units="KB">
- <summary>
- The private working set used by the browser process. Recorded once per UMA
- ping.
- </summary>
-</histogram>
-
-<histogram name="Memory.CachedFontAndDC">
- <summary>TBD.</summary>
-</histogram>
-
-<histogram name="Memory.Chrome" units="KB">
- <summary>
- The private working set used by each chrome:// renderer process. Each
- process provides one sample. Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="Memory.ChromeProcessCount">
- <summary>
- The count of active chrome:// processes. Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="Memory.Extension" units="KB">
- <summary>
- The private working set used by each extension process. Each process
- provides one sample. Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="Memory.GlyphPagesPerLoad">
- <summary>
- The number of glyph pages present in the renderer when it commits a load.
- Since this is per-sub-process, you can get the average number of glyph pages
- in the system by multiplying this number with the average number of
- renderers. Note that this typically won't count the glyph pages added as a
- result of the load that just committed, since layout will happen after the
- commit. There are 512 bytes per glyph page, but this number also very
- closely approximates the number of glyph width map pages in the same
- renderer. The only difference is that if you have font fallback, it will
- make a new glyph page and no width page, but in most common cases there is
- no fallback). Width pages are 1K each (256 floats), so you could think of
- this value as being the number of &quot;1.5K units related to glyphs per
- renderer per page load&quot;.
- </summary>
-</histogram>
-
-<histogram name="Memory.Gpu" units="KB">
- <summary>
- The private working set used by the GPU process. Recorded once per UMA
- ping.
- </summary>
-</histogram>
-
-<histogram name="Memory.Graphics" units="MB">
- <summary>
- System-wide graphics driver memory consumption. Recorded on Chrome OS for
- platforms where it is exposed by the kernel (for example, Intel i915 and
- Exynos Mali). Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="Memory.NativeClient" units="KB">
- <summary>
- The private working set used by each Native Client loader process. Each
- process provides one sample. Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="Memory.NativeClientBroker" units="KB">
- <summary>
- The private working set used by each Native Client broker process. Each
- process provides one sample. Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="Memory.OtherProcessCount">
- <summary>
- The count of other various utility processes (nacl, gpu, sandbox, zygote,
- utility). Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="Memory.PepperPlugin" units="KB">
- <summary>
- The private working set used by each Pepper plugin process. Each plugin
- process provides one sample. Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="Memory.PepperPluginBroker" units="KB">
- <summary>
- The private working set used by each Pepper plugin broker process. Each
- process provides one sample. Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="Memory.PepperPluginBrokerProcessCount">
- <summary>
- The count of Pepper plugin broker processes, recorded once per metrics
- services (UMA) update. See MetricsReportingScheduler for details.
- </summary>
-</histogram>
-
-<histogram name="Memory.PepperPluginProcessCount">
- <summary>
- The count of active Pepper plugin processes. Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="Memory.Plugin" units="KB">
- <summary>
- The private working set used by each plugin process. Each plugin process
- provides one sample. Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="Memory.PluginProcessCount">
- <summary>
- The count of active plugin processes. Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="Memory.ProcessCount">
- <summary>
- The count of all active processes. Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="Memory.ProcessLimit">
- <summary>The current process limit. Recorded once per UMA ping.</summary>
-</histogram>
-
-<histogram name="Memory.Renderer" units="KB">
- <summary>
- The private working set used by each renderer process. Each renderer
- process provides one sample. Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="Memory.RendererProcessCount">
- <summary>
- The count of active renderer processes. Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="Memory.SandboxHelper" units="KB">
- <summary>
- The private working set used by each sandbox helper process. Each sandbox
- helper process provides one sample. Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="Memory.Swap.Browser" units="KB">
- <summary>
- The swap used by the browser process. Recorded once per UMA ping if the
- system has swapped.
- </summary>
-</histogram>
-
-<histogram name="Memory.Swap.Chrome" units="KB">
- <summary>
- The swap used by each chrome:// renderer process. Each process provides one
- sample. Recorded once per UMA ping if the system has swapped.
- </summary>
-</histogram>
-
-<histogram name="Memory.Swap.CompressedDataSize" units="MB">
- <summary>
- The amount of memory that swap was compressed into. Recorded once per UMA
- ping if the system has swapped.
- </summary>
-</histogram>
-
-<histogram name="Memory.Swap.CompressionRatio">
- <summary>
- The ratio of swapped data original size to compressed size. Recorded once
- per UMA ping if the system has swapped.
- </summary>
-</histogram>
-
-<histogram name="Memory.Swap.Extension" units="KB">
- <summary>
- The swap used by each extension process. Each process provides one sample.
- Recorded once per UMA ping if the system has swapped.
- </summary>
-</histogram>
-
-<histogram name="Memory.Swap.Gpu" units="KB">
- <summary>
- The swap used by the GPU process. Recorded once per UMA ping if the system
- has swapped.
- </summary>
-</histogram>
-
-<histogram name="Memory.Swap.HaveSwapped" units="BooleanSuccess">
- <summary>
- Indicates that the system has swapped memory out at least once since boot.
- Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="Memory.Swap.MemUsedTotal" units="MB">
- <summary>
- The amount of memory that is used by swap, including bookkeeping. Recorded
- once per UMA ping if the system has swapped.
- </summary>
-</histogram>
-
-<histogram name="Memory.Swap.NativeClient" units="KB">
- <summary>
- The swap used by each Native Client loader process. Each process provides
- one sample. Recorded once per UMA ping if the system has swapped.
- </summary>
-</histogram>
-
-<histogram name="Memory.Swap.NativeClientBroker" units="KB">
- <summary>
- The swap used by each Native Client broker process. Each process provides
- one sample. Recorded once per UMA ping if the system has swapped.
- </summary>
-</histogram>
-
-<histogram name="Memory.Swap.NumReads">
- <summary>
- The number of reads from swap. Recorded once per UMA ping if the system
- has swapped.
- </summary>
-</histogram>
-
-<histogram name="Memory.Swap.NumWrites">
- <summary>
- The number of writes to swap. Recorded once per UMA ping if the system has
- swapped.
- </summary>
-</histogram>
-
-<histogram name="Memory.Swap.OriginalDataSize" units="MB">
- <summary>
- The amount of memory that was swapped out. Recorded once per UMA ping if
- the system has swapped.
- </summary>
-</histogram>
-
-<histogram name="Memory.Swap.PepperPlugin" units="KB">
- <summary>
- The swap used by each Pepper plugin process. Each plugin process provides
- one sample. Recorded once per UMA ping if the system has swapped.
- </summary>
-</histogram>
-
-<histogram name="Memory.Swap.PepperPluginBroker" units="KB">
- <summary>
- The swap used by each Pepper plugin broker process. Each process provides
- one sample. Recorded once per UMA ping if the system has swapped.
- </summary>
-</histogram>
-
-<histogram name="Memory.Swap.Plugin" units="KB">
- <summary>
- The swap used by each plugin process. Each plugin process provides one
- sample. Recorded once per UMA ping if the system has swapped.
- </summary>
-</histogram>
-
-<histogram name="Memory.Swap.Renderer" units="KB">
- <summary>
- The swap used by each renderer process. Each renderer process provides one
- sample. Recorded once per UMA ping if the system has swapped.
- </summary>
-</histogram>
-
-<histogram name="Memory.Swap.SandboxHelper" units="KB">
- <summary>
- The swap used by each sandbox helper process. Each sandbox helper process
- provides one sample. Recorded once per UMA ping if the system has swapped.
- </summary>
-</histogram>
-
-<histogram name="Memory.Swap.Total" units="MB">
- <summary>
- The sum of all processes' swap. Recorded once per UMA ping if the system
- has swapped.
- </summary>
-</histogram>
-
-<histogram name="Memory.Swap.Utility" units="KB">
- <summary>
- The swap used by each utility process. Each utility process provides one
- sample. Recorded once per UMA ping if the system has swapped.
- </summary>
-</histogram>
-
-<histogram name="Memory.Swap.Worker" units="KB">
- <summary>
- The swap used by each worker process. Each worker process provides one
- sample. Recorded once per UMA ping if the system has swapped.
- </summary>
-</histogram>
-
-<histogram name="Memory.Total" units="MB">
- <summary>The sum of all processes. Recorded once per UMA ping.</summary>
-</histogram>
-
-<histogram name="Memory.Utility" units="KB">
- <summary>
- The private working set used by each utility process. Each utility process
- provides one sample. Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="Memory.Worker" units="KB">
- <summary>
- The private working set used by each worker process. Each worker process
- provides one sample. Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="Memory.WorkerProcessCount">
- <summary>TBD.</summary>
-</histogram>
-
-<histogram name="MemoryAndroid.DeviceMemoryClass">
- <summary>
- Value of getMemoryClass() recorded once upon startup. This is an integer,
- device-specific constant correlated with the amount of memory available on
- Android device.
- </summary>
-</histogram>
-
-<histogram name="MemoryAndroid.EvictionReason" enum="AndroidEvictionReason">
- <summary>
- Reasons behind evictions of individual tabs, recorded upon each tab
- eviction.
- </summary>
-</histogram>
-
-<histogram name="MemoryAndroid.LowMemoryLoadedTabCount">
- <summary>
- Number of loaded (memory-resident) tabs when LowMemory notification is
- delivered.
- </summary>
-</histogram>
-
-<histogram name="MemoryAndroid.LowMemoryTimeBetween" units="milliseconds">
- <summary>
- Time between two consecutive LowMemory notification in one foreground
- session.
- </summary>
-</histogram>
-
-<histogram name="MemoryAndroid.NotificationBackground"
- enum="AndroidMemoryNotificationBackground">
- <summary>
- Memory notifications delivered through system callbacks to Chrome while in
- the background.
- </summary>
-</histogram>
-
-<histogram name="MemoryAndroid.NotificationForeground"
- enum="AndroidMemoryNotificationForeground">
- <summary>
- Memory notifications delivered through system callbacks to Chrome while in
- the foreground - we count LowMemory notification vs particular levels of
- TrimMemory foreground notification.
- </summary>
-</histogram>
-
-<histogram name="Mist.SwitchResult" enum="MistSwitchResult">
- <summary>
- The result (e.g. success or the type of failure) of a modem interface switch
- operation performed by mist on Chrome OS.
- </summary>
-</histogram>
-
-<histogram name="Mouse.PointerSensitivity.Changed" enum="PointerSensitivity">
- <summary>
- Tracks mouse sensitivity setting changes by the user. This replaces the old
- Mouse.Sensitivity.Changed metric.
- </summary>
-</histogram>
-
-<histogram name="Mouse.PointerSensitivity.Started" enum="PointerSensitivity">
- <summary>
- Tracks mouse sensitivity setting on startup. This replaces the old
- Mouse.Sensitivity.Started metric.
- </summary>
-</histogram>
-
-<histogram name="Mouse.Sensitivity.Changed" enum="PointerSensitivity">
- <obsolete>
- Deprecated as of 6/2013, replaced by Mouse.PointerSensitivity.Changed.
- </obsolete>
- <summary>Tracks mouse sensitivity setting.</summary>
-</histogram>
-
-<histogram name="Mouse.Sensitivity.Started" enum="PointerSensitivity">
- <obsolete>
- Deprecated as of 6/2013, replaced by Mouse.PointerSensitivity.Started.
- </obsolete>
- <summary>Tracks mouse sensitivity setting on startup.</summary>
-</histogram>
-
-<histogram name="MouseEventPrefetch.MouseDownDuration_Click" units="ms">
- <summary>
- Measures the time elapsed between when the user mousedown-ed a link and when
- the user clicked a link.
- </summary>
-</histogram>
-
-<histogram name="MouseEventPrefetch.MouseDownFollowedByClick"
- enum="MouseEventFollowedByClick">
- <summary>
- For each click handled by an HTML anchor tag link, whether Blink saw a
- mousedown event preceding it. This is only measured for clicks handled by
- the anchor tag's default click event handler.
- </summary>
-</histogram>
-
-<histogram name="MouseEventPrefetch.MouseDowns">
- <summary>
- The number of mousedown events detected at HTML anchor-tag links' default
- event handler.
- </summary>
-</histogram>
-
-<histogram name="MouseEventPrefetch.MouseOverDuration_Click" units="ms">
- <summary>
- Measures the time elapsed between when the user mouseover-ed a link and when
- the user clicked a link.
- </summary>
-</histogram>
-
-<histogram name="MouseEventPrefetch.MouseOverDuration_NoClick" units="ms">
- <summary>
- Measures the time elapsed between when the user mouseover-ed a link and when
- the user mouseout-ed a link without click.
- </summary>
-</histogram>
-
-<histogram name="MouseEventPrefetch.MouseOvers">
- <summary>
- The number of mouseover events detected at HTML anchor-tag links' default
- event handler.
- </summary>
-</histogram>
-
-<histogram name="MouseEventPrefetch.PreTapEventsFollowedByClick"
- enum="PreTapEvents">
- <summary>
- The tap gesture events detected before click at HTML anchor-tag links'
- default event handler.
- </summary>
-</histogram>
-
-<histogram name="MouseEventPrefetch.TapDownDuration_Click" units="ms">
- <summary>
- Measures the time elapsed between when the user tapdown-ed a link and when
- the user clicked a link.
- </summary>
-</histogram>
-
-<histogram name="MouseEventPrefetch.TapDowns">
- <summary>
- The number of gesturetapdown events detected at HTML anchor-tag links'
- default event handler.
- </summary>
-</histogram>
-
-<histogram name="MouseEventPrefetch.TapUnconfirmeds">
- <summary>
- The number of gesturetapunconfirmed events detected at HTML anchor-tag
- links' default event handler.
- </summary>
-</histogram>
-
-<histogram name="MultiProfile.DiscardedTabsPerUser">
- <summary>
- The relation of discarded tabs vs. the amount of simultaneous users. The
- counts are the number of discards and the buckets are the number of users.
- Since the count values are absolute numbers, they need to be normalized
- before use - so divide the counts by the percentage of users found under
- 'MultiProfile.UsersPerSession'.
- </summary>
-</histogram>
-
-<histogram name="MultiProfile.SessionMode" enum="MultiProfileSessionMode">
- <summary>
- The session counter for different multi profile modes which gets stored once
- per session at the beginning of the session.
- </summary>
-</histogram>
-
-<histogram name="MultiProfile.SigninUserUIPath"
- enum="MultiProfileSigninUserAction">
- <summary>
- Count the number of times each UI path is taken for signing into a new
- account in a ChromeOS multiprofile session. UI paths include the system tray
- and the user account switcher on the browser frame.
- </summary>
-</histogram>
-
-<histogram name="MultiProfile.SwitchActiveUserUIPath"
- enum="MultiProfileSwitchActiveUserAction">
- <summary>
- Count the number of times each UI path is taken for switching the active
- account in a ChromeOS multiprofile session. UI paths include the system tray
- and the keyboard shortcut.
- </summary>
-</histogram>
-
-<histogram name="MultiProfile.TeleportWindow"
- enum="MultiProfileTeleportWindowAction">
- <summary>
- Counts the number of window teleportations when using separated desktop
- mode.
- </summary>
-</histogram>
-
-<histogram name="MultiProfile.TeleportWindowType"
- enum="MultiProfileTeleportWindowType">
- <summary>
- Counts the number of teleported windows by types in separated desktop mode.
- </summary>
-</histogram>
-
-<histogram name="MultiProfile.UsersPerSession">
- <summary>
- The number of users simultaneously signed into a multiprofile session on
- ChromeOS. This is recorded whenever a new user logs in.
- </summary>
-</histogram>
-
-<histogram name="Navigation.MainFrameScheme" enum="NavigationScheme">
- <summary>The scheme of the URL for each main-frame navigation.</summary>
-</histogram>
-
-<histogram name="Net.AsyncResourceHandler_PendingDataCount">
- <summary>
- The count of unacknowledged ResourceMsg_DataReceived messages. This message
- is sent once per chunk of data read from the network.
- </summary>
-</histogram>
-
-<histogram name="Net.AsyncResourceHandler_PendingDataCount_WhenFull">
- <summary>
- The count of unacknowledged ResourceMsg_DataReceived messages at the point
- where we pause network loading.
- </summary>
-</histogram>
-
-<histogram name="Net.AsyncResourceHandler_SharedIOBuffer_Alloc" units="bytes">
- <summary>The size of a SharedIOBuffer allocation.</summary>
-</histogram>
-
-<histogram name="Net.AsyncResourceHandler_SharedIOBuffer_Used" units="bytes">
- <summary>The number of bytes copied into a SharedIOBuffer.</summary>
-</histogram>
-
-<histogram name="Net.AsyncResourceHandler_SharedIOBuffer_UsedPercentage"
- units="percentage">
- <summary>
- The percentage of a SharedIOBuffer allocation that is actually used.
- </summary>
-</histogram>
-
-<histogram name="Net.AuthGenerateToken_basic" units="milliseconds">
- <summary>The time to generate a Basic HTTP authentication token.</summary>
-</histogram>
-
-<histogram name="Net.AuthGenerateToken_digest" units="milliseconds">
- <summary>The time to generate a Digest HTTP authentication token.</summary>
-</histogram>
-
-<histogram name="Net.AuthGenerateToken_negotiate" units="milliseconds">
- <summary>
- The time to generate a Negotiate (or SPNEGO) HTTP authentication token.
- </summary>
-</histogram>
-
-<histogram name="Net.AuthGenerateToken_ntlm" units="milliseconds">
- <summary>The time to generate an NTLM HTTP authentication token.</summary>
-</histogram>
-
-<histogram name="Net.CertCommonNameFallback" enum="BooleanCommonNameMatch">
- <summary>
- Whether the certificate common name was used for matching the hostname,
- instead of the subjectAlternativeName.
-
- Measures results for all CAs (internal and publicly-trusted).
- </summary>
-</histogram>
-
-<histogram name="Net.CertCommonNameFallbackPrivateCA"
- enum="BooleanCommonNameMatch">
- <summary>
- Whether the certificate common name was used for matching the hostname,
- instead of the subjectAlternativeName.
-
- Measures results ony for internal (non-publicly-trusted) CAs.
- </summary>
-</histogram>
-
-<histogram name="Net.CertificatePinSuccess" enum="BooleanSuccess">
- <obsolete>
- Renamed to Net.PublicKeyPinSuccess 28 Oct 2011.
- </obsolete>
- <summary>
- A validated certificate chain may be subject to additional
- &quot;pinning&quot; requirements on a per-domain basis. This records the
- fraction of successful matches between a certificate chain and a pin list.
- </summary>
-</histogram>
-
-<histogram name="Net.CertVerifier_Job_Latency" units="milliseconds">
- <summary>
- The actual amount of time spent verifying a certificate using the underlying
- cryptographic APIs. Because parallel verifications for the same certificate
- may be coalesced, histograms such as Net.SSLCertVerificationTime may be
- skewed, due to later verifications taking less overall time. This records
- the overall time spent verifying a single request, regardless of how many
- parallel requests are being served by the verification.
- </summary>
-</histogram>
-
-<histogram name="Net.CoalescePotential" enum="CoalescePotentialPackets">
- <summary>
- The number of times we sent N packets, but could have sent N-1 packets.
- </summary>
-</histogram>
-
-<histogram name="Net.ComodoDNSExperimentFailureTime" units="milliseconds">
- <summary>
- The amount of time taken before we failed to resolve the Comodo test DNS
- record. This is an experiment, run in conjuction with Comodo, to test the
- viability of a DNS based certificate revocation mechanism.
- </summary>
-</histogram>
-
-<histogram name="Net.ComodoDNSExperimentSuccessTime" units="milliseconds">
- <summary>
- The amount of time taken to successfully resolve the Comodo test DNS record.
- This is an experiment, run in conjuction with Comodo, to test the viability
- of a DNS based certificate revocation mechanism.
- </summary>
-</histogram>
-
-<histogram name="Net.Compress.NoProxy.BytesAfterCompression" units="bytes">
- <summary>
- The uncompressed number of bytes received per request that was compressed.
- Only includes requests which did not go through an explicit proxy and did
- not go over SSL.
- </summary>
-</histogram>
-
-<histogram name="Net.Compress.NoProxy.BytesBeforeCompression" units="bytes">
- <summary>
- The compressed number of bytes received per request that was compressed.
- Only includes requests which did not go through an explicit proxy and did
- not go over SSL.
- </summary>
-</histogram>
-
-<histogram name="Net.Compress.NoProxy.ShouldHaveBeenCompressed" units="bytes">
- <summary>
- The uncompressed number of bytes received per request that was not
- compressed but appears to have been compressible. Only includes requests
- which did not go through an explicit proxy and did not go over SSL.
- </summary>
-</histogram>
-
-<histogram name="Net.Compress.Proxy.BytesAfterCompression" units="bytes">
- <summary>
- The uncompressed number of bytes received per request that was compressed.
- Only includes requests sent through a proxy without SSL.
- </summary>
-</histogram>
-
-<histogram name="Net.Compress.Proxy.BytesBeforeCompression" units="bytes">
- <summary>
- The compressed number of bytes received per request that was compressed.
- Only includes requests sent through a proxy without SSL.
- </summary>
-</histogram>
-
-<histogram name="Net.Compress.Proxy.ShouldHaveBeenCompressed" units="bytes">
- <summary>
- The uncompressed number of bytes received per request that was not
- compressed but appears to have been compressible. Only includes requests
- sent through a proxy without SSL.
- </summary>
-</histogram>
-
-<histogram name="Net.Compress.SSL.BytesAfterCompression" units="bytes">
- <summary>
- The uncompressed number of bytes received per request that was compressed.
- Only includes requests sent over SSL.
- </summary>
-</histogram>
-
-<histogram name="Net.Compress.SSL.BytesBeforeCompression" units="bytes">
- <summary>
- The compressed number of bytes received per request that was compressed.
- Only includes requests sent over SSL.
- </summary>
-</histogram>
-
-<histogram name="Net.Compress.SSL.ShouldHaveBeenCompressed" units="bytes">
- <summary>
- The uncompressed number of bytes received per request that was not
- compressed but appears to have been compressible. Only includes requests
- sent over SSL.
- </summary>
-</histogram>
-
-<histogram name="Net.ConnectionTypeCount" enum="ConnectionType">
- <obsolete>
- The count was inaccurate (it counted transactions rather than connections)
- </obsolete>
- <summary>
- Each bucket is the number of connections of a particular type that the user
- has had during the session.
- </summary>
-</histogram>
-
-<histogram name="Net.ConnectionTypeCount2" enum="ConnectionType">
- <obsolete>
- Renamed to match HadConnectionType.
- </obsolete>
- <summary>
- Each bucket is the number of successful connections of a particular type
- that the user has had during the session.
- </summary>
-</histogram>
-
-<histogram name="Net.ConnectionTypeCount3" enum="ConnectionType">
- <summary>
- Each bucket is the number of successful connections of a particular type
- that the user has had during the session.
- </summary>
-</histogram>
-
-<histogram name="Net.ConnectionTypeFailCount2" enum="ConnectionType">
- <obsolete>
- No longer collected.
- </obsolete>
- <summary>
- Each bucket is the number of failed connections of a particular type that
- the user has had during the session.
- </summary>
-</histogram>
-
-<histogram name="Net.ConnectionUsedSSLv3Fallback">
- <obsolete>
- Replaced by Net.ConnectionUsedSSLVersionFallback in Chrome 21.
- </obsolete>
- <summary>
- True if the HTTP request was to a server which requires SSLv3 fallback
- </summary>
-</histogram>
-
-<histogram name="Net.ConnectionUsedSSLVersionFallback"
- enum="FallbackSSLVersion">
- <summary>
- Nonzero if the HTTP request was to a server which requires SSL version
- fallback. The value indicates the SSL version the request fell back on.
- </summary>
-</histogram>
-
-<histogram name="net.CookieBackingStoreUpdateResults"
- enum="BackingStoreResults">
- <obsolete>
- Initial typo; only here to get results from builds before r59117. See
- &quot;Cookie.&quot; group.
- </obsolete>
- <summary>
- Whether or not updates to the backing store succeeded or failed, recorded
- every update.
- </summary>
-</histogram>
-
-<histogram name="net.CookieBetweenAccessIntervalMinutes" units="minutes">
- <obsolete>
- Initial typo; only here to get results from builds before r59117. See
- &quot;Cookie.&quot; group.
- </obsolete>
- <summary>Intervals between access time updates for each cookie.</summary>
-</histogram>
-
-<histogram name="net.CookieCount">
- <obsolete>
- Initial typo; only here to get results from builds before r59117. See
- &quot;Cookie.&quot; group.
- </obsolete>
- <summary>
- Number of cookies in the store (recorded every 10 minutes of active browsing
- time)
- </summary>
-</histogram>
-
-<histogram name="net.CookieDeletionCause" enum="CookieDeletionCause">
- <obsolete>
- Initial typo; only here to get results from builds before r59117. See
- &quot;Cookie.&quot; group.
- </obsolete>
- <summary>
- For each cookie removed from the store, the reason it was removed.
- </summary>
-</histogram>
-
-<histogram name="net.CookieDomainCount">
- <obsolete>
- Initial typo; only here to get results from builds before r59117. See
- &quot;Cookie.&quot; group.
- </obsolete>
- <summary>
- For each domain, number of cookies in that domain (recorded every 10 minutes
- of active browsing time).
- </summary>
-</histogram>
-
-<histogram name="net.CookieDomainPerEtldp1Count">
- <summary>
- For every top level domain, number of subdomains in that top level domain
- (recorded every 10 minutes of active browsing time).
- </summary>
-</histogram>
-
-<histogram name="net.CookieEtldp1Count">
- <obsolete>
- Initial typo; only here to get results from builds before r59117. See
- &quot;Cookie.&quot; group.
- </obsolete>
- <summary>
- For every top level domain, number of cookies in that domain (recorded every
- 10 minutes of active browsing time).
- </summary>
-</histogram>
-
-<histogram name="net.CookieEvictedLastAccessMinutes" units="minutes">
- <obsolete>
- Initial typo; only here to get results from builds before r59117. See
- &quot;Cookie.&quot; group.
- </obsolete>
- <summary>
- For each evicted (not expired) cookie, the amount of time since it was last
- used
- </summary>
-</histogram>
-
-<histogram name="net.CookieExpirationDurationMinutes" units="minutes">
- <obsolete>
- Initial typo; only here to get results from builds before r59117. See
- &quot;Cookie.&quot; group.
- </obsolete>
- <summary>Number of minutes until cookie expires when set.</summary>
-</histogram>
-
-<histogram name="net.CookieTimeGet">
- <obsolete>
- Initial typo; only here to get results from builds before r59117. See
- &quot;Cookie.&quot; group.
- </obsolete>
- <summary>
- The amount of time (ms) to get cookies for each URL request.
- </summary>
-</histogram>
-
-<histogram name="net.CookieTimeLoad">
- <obsolete>
- Initial typo; only here to get results from builds before r59117. See
- &quot;Cookie.&quot; group.
- </obsolete>
- <summary>
- The amount of time (ms) to load the persistent cookie store at browser
- start.
- </summary>
-</histogram>
-
-<histogram name="Net.CountOfAlternateProtocolServers">
- <summary>
- The total number of severs to which alternative protocol was used. This
- counts the number of servers persisted to prefs file.
- </summary>
-</histogram>
-
-<histogram name="Net.CountOfPipelineCapableServers">
- <summary>
- The total number of severs that support HTTP pipelining. This counts the
- number of servers persisted to prefs file.
- </summary>
-</histogram>
-
-<histogram name="Net.CountOfSpdyServers">
- <summary>
- The total number of SPDY server names persisted to prefs file.
- </summary>
-</histogram>
-
-<histogram name="Net.CountOfSpdySettings">
- <summary>
- The total number of SPDY Settings properties persisted to prefs file.
- </summary>
-</histogram>
-
-<histogram name="Net.CRLRequestFailedTimeMs" units="milliseconds">
- <summary>
- When validating an HTTPS certificate we may have to block to fetch one or
- more revocation lists. This measures the amount of time that failures to get
- CRL information take.
- </summary>
-</histogram>
-
-<histogram name="Net.CRLRequestSuccess" enum="BooleanSuccess">
- <summary>
- When validating an HTTPS certificate we may have to block to fetch one or
- more revocation lists. This records the fraction of successful requests.
- </summary>
-</histogram>
-
-<histogram name="Net.CRLRequestTimeMs" units="milliseconds">
- <summary>
- When validating an HTTPS certificate we may have to block to fetch one or
- more revocation lists. This measures the amount of time that each fetch
- takes.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyContentLength" units="KB">
- <summary>
- The total content size in KB of all HTTP/HTTPS response bodies in the
- previous calendar day. The metric is reported when the first response in the
- current day is received.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyContentLength_DataReductionProxyEnabled" units="KB">
- <summary>
- The total content size in KB of all HTTP/HTTPS response bodies in the
- previous calendar day while the data reduction proxy setting was enabled.
- The metric is reported when the first response in the current day is
- received.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyContentLength_DataReductionProxyEnabled_Https"
- units="KB">
- <summary>
- The total content size in KB of all HTTPS response bodies in the previous
- calendar day while the data reduction proxy setting was enabled. The metric
- is reported when the first response in the current day is received.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyContentLength_DataReductionProxyEnabled_LongBypass"
- units="KB">
- <summary>
- The total content size in KB of all long-bypassed HTTP response bodies in
- the previous calendar day while the data reduction proxy setting was
- enabled. The metric is reported when the first response in the current day
- is received.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyContentLength_DataReductionProxyEnabled_ShortBypass"
- units="KB">
- <summary>
- The total content size in KB of all short-bypassed HTTP response bodies in
- the previous calendar day while the data reduction proxy setting was
- enabled. The metric is reported when the first response in the current day
- is received.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyContentLength_DataReductionProxyEnabled_Unknown"
- units="KB">
- <summary>
- The total content size in KB of all HTTP response bodies for requests that
- were not served by the enabled data reduction proxy for unknown reasons in
- the previous calendar day while the data reduction proxy setting was
- enabled. The metric is reported when the first response in the current day
- is received.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyContentLength_ViaDataReductionProxy" units="KB">
- <summary>
- The total content size in KB of all HTTP/HTTPS response bodies in the
- previous calendar day via the data reduction proxy. The metric is reported
- when the first response in the current day is received.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyContentPercent_DataReductionProxyEnabled"
- units="Percent">
- <summary>
- The percentage of total HTTP/HTTPS response body size while the data
- reduction proxy is enabled to total HTTP/HTTPS response body size in the
- previous calendar day. The metric is reported when the first response in the
- current day is received.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyContentPercent_DataReductionProxyEnabled_Https"
- units="Percent">
- <summary>
- The percentage of total HTTPS response body size while the data reduction
- proxy is enabled to total HTTP/HTTPS response body size in the previous
- calendar day. The metric is reported when the first response in the current
- day is received.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyContentPercent_DataReductionProxyEnabled_LongBypass"
- units="Percent">
- <summary>
- The percentage of total long-bypassed response body size while the data
- reduction proxy is enabled to total HTTP/HTTPS response body size in the
- previous calendar day. The metric is reported when the first response in the
- current day is received.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyContentPercent_DataReductionProxyEnabled_ShortBypass"
- units="Percent">
- <summary>
- The percentage of total short-bypassed response body size while the data
- reduction proxy is enabled to total HTTP/HTTPS response body size in the
- previous calendar day. The metric is reported when the first response in the
- current day is received.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyContentPercent_DataReductionProxyEnabled_Unknown"
- units="Percent">
- <summary>
- The percentage of total body size of responses that were not served by the
- data reduction proxy for unknown reason while the data reduction proxy is
- enabled to total HTTP/HTTPS response body size in the previous calendar day.
- The metric is reported when the first response in the current day is
- received.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyContentPercent_ViaDataReductionProxy" units="Percent">
- <summary>
- The percentage of total HTTP/HTTPS response body size via the data reduction
- proxy to total HTTP/HTTPS response body size in the previous calendar day.
- The metric is reported when the first response in the current day is
- received.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyContentSavingPercent" units="Percent">
- <summary>
- The percentage of data saving in the previous calendar day. A negative
- saving will be shown as zero. The metric is reported when the first response
- in the current day is received.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyContentSavingPercent_DataReductionProxyEnabled"
- units="Percent">
- <summary>
- The percentage of data saving in the previous calendar day while the data
- reduction proxy was enabled. A negative saving will be shown as zero. This
- only counts responses while the data reduction proxy is enabled. The metric
- is reported when the first response in the current day is received.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyContentSavingPercent_ViaDataReductionProxy"
- units="Percent">
- <summary>
- The percentage of data saving in the previous calendar day via the data
- reduction proxy. A negative saving will be shown as zero. This only counts
- responses via the data reduction proxy. The metric is reported when the
- first response in the current day is received.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyHttpContentLengthViaDataReductionProxy" units="KB">
- <obsolete>
- Deprecated- see Net.DailyContentLength_ViaDataReductionProxy.
- </obsolete>
- <summary>
- Total size in KB of all response bodies in the previous calendar day that
- were received through the data reduction proxy.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyHttpContentLengthWithDataReductionProxyEnabled"
- units="KB">
- <obsolete>
- Deprecated- see Net.DailyContentLength_DataReductionProxyEnabled
- </obsolete>
- <summary>
- Total size in KB of all response bodies in the previous calendar day that
- were received when the data reduction proxy was enabled.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyHttpContentSavings" units="Percent">
- <obsolete>
- Deprecated- see Net.DailyContentSavingPercent.
- </obsolete>
- <summary>
- The percentage of data saving in the previous calendar day. A negative
- saving will be shown as zero.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyHttpContentSavings_DataReductionProxy"
- units="Percent">
- <obsolete>
- Deprecated- see Net.DailyContentSavingPercent_DataReductionProxyEnabled.
- </obsolete>
- <summary>
- The percentage of data saving in the previous calendar day when the data
- reduction proxy was enabled for at least some responses during the day. A
- negative saving will be shown as zero.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyHttpOriginalContentLength" units="KB">
- <obsolete>
- Deprecated- see Net.DailyOriginalContentLength.
- </obsolete>
- <summary>
- Total size in KB specified in the X-Original-Content-Length headers of all
- responses in the previous calendar day. If the header is not present in a
- response, the size of the response body is used.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyHttpReceivedContentLength" units="KB">
- <obsolete>
- Deprecated- see Net.DailyContentLength.
- </obsolete>
- <summary>
- Total size in KB of all response bodies in the previous calendar day.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyOriginalContentLength" units="KB">
- <summary>
- The total size in KB specified in the X-Original-Content-Length headers of
- all HTTP/HTTPS response bodies in the previous calendar day. If the header
- is not present in a response, the size of the response body is used. The
- metric is reported when the first response in the current day is received.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyOriginalContentLength_DataReductionProxyEnabled"
- units="KB">
- <summary>
- The total size in KB specified in the X-Original-Content-Length headers of
- all HTTP/HTTPS response bodies in the previous calendar day while the data
- reduction proxy is enabled. If the header is not present in a response, the
- size of the response body is used. The metric is reported when the first
- response in the current day is received.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyOriginalContentLength_ViaDataReductionProxy"
- units="KB">
- <summary>
- The total size in KB specified in the X-Original-Content-Length headers of
- all HTTP/HTTPS response bodies in the previous calendar day via the data
- reduction proxy. If the header is not present in a response, the size of the
- response body is used. The metric is reported when the first response in the
- current day is received.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyReceivedContentViaDataReductionProxy" units="Percent">
- <obsolete>
- Deprecated- see Net.DailyContentPercent_ViaDataReductionProxy.
- </obsolete>
- <summary>
- The percentage of Net.DailyHttpContentLengthViaDataReductionProxy in
- Net.DailyHttpReceivedContentLength.
- </summary>
-</histogram>
-
-<histogram name="Net.DailyReceivedContentWithDataReductionProxyEnabled"
- units="Percent">
- <obsolete>
- Deprecated- see Net.DailyContentPercent_DataReductionProxyEnabled.
- </obsolete>
- <summary>
- The percentage of Net.DailyHttpContentLengthWithDataReductionProxyEnabled in
- Net.DailyHttpReceivedContentLength.
- </summary>
-</histogram>
-
-<histogram name="Net.DhcpWpadCancelTime" units="milliseconds">
- <summary>
- Measures time from initiating a fetch of a PAC file from DHCP WPAD to
- cancellation of the fetch. For a given fetch, only one of the cancellation
- or completion histograms will be added to.
- </summary>
-</histogram>
-
-<histogram name="Net.DhcpWpadCompletionTime" units="milliseconds">
- <summary>
- Measures time from initiating a fetch of a PAC file from DHCP WPAD to
- completion of the fetch. For a given fetch, only one of the cancellation or
- completion histograms will be added to.
- </summary>
-</histogram>
-
-<histogram name="Net.DhcpWpadFetchError" enum="NetErrorCodes">
- <summary>
- Tracks the net error codes received when the DHCP WPAD fetch fails to
- retrieve a PAC file (including PAC_NOT_IN_DHCP, which is not really an error
- but an indication that a PAC URL was not configured in DHCP).
- </summary>
-</histogram>
-
-<histogram name="Net.DhcpWpadGetAdaptersAddressesError"
- enum="ErrorCodesGetAdaptersAddresses">
- <summary>
- Tracks the frequency of each of the different known error codes of calling
- the GetAdaptersAddresses Win32 API.
- </summary>
-</histogram>
-
-<histogram name="Net.DhcpWpadGetAdaptersAddressesTime" units="milliseconds">
- <summary>
- Measures the time taken to call the GetAdaptersAddresses Win32 API, to
- validate our understanding that it should complete quickly enough to call
- synchronously from the network thread.
- </summary>
-</histogram>
-
-<histogram name="Net.DhcpWpadNumAdaptersAtWaitTimer">
- <summary>
- Total number of adapters enabled for DHCP as seen when the wait timer in the
- DHCP WPAD code hits. This timer fires after a timeout from when we get some
- information from the first adapter to finish.
- </summary>
-</histogram>
-
-<histogram name="Net.DhcpWpadNumPendingAdaptersAtWaitTimer">
- <summary>
- Number of adapters enabled for DHCP that we have not completed retrieving
- information for, as seen when the wait timer in the DHCP WPAD code hits.
- This timer fires after a timeout from when we get some information from the
- first adapter to finish.
- </summary>
-</histogram>
-
-<histogram name="Net.DhcpWpadUnhandledDhcpError">
- <summary>
- Counts the number of errors from the DhcpRequestParams API that we do not
- have specific handling for, so that we can see if there is an abnormally
- high rate.
- </summary>
-</histogram>
-
-<histogram name="Net.DNS_Resolution_And_TCP_Connection_Latency">
- <obsolete>
- Deprecated- see Net.DNS_Resolution_And_TCP_Connection_Latency2
- </obsolete>
-</histogram>
-
-<histogram name="Net.Dns_Resolution_And_TCP_Connection_Latency">
- <obsolete>
- Deprecated- see Net.DNS_Resolution_And_TCP_Connection_Latency2
- </obsolete>
-</histogram>
-
-<histogram name="Net.DNS_Resolution_And_TCP_Connection_Latency2"
- units="milliseconds">
- <summary>
- The time measured before starting DNS lookup until after the connection is
- complete.
- </summary>
-</histogram>
-
-<histogram name="Net.Dns_Resolution_And_TCP_Connection_Latency2">
- <obsolete>
- Deprecated- see Net.DNS_Resolution_And_TCP_Connection_Latency2
- </obsolete>
-</histogram>
-
-<histogram name="Net.DoubleGetExperiment_InitialResponseMethod"
- enum="DoubleGetExperimentMethods">
- <summary>
- The number of HTTP request responses with MS Office Docs MIME types. The
- responses are classified based on their method type and cacheability (POST,
- cacheable GET and non-cacheable GET). The histogram is used in Double GET
- Experiment, where successful non-cacheable GET requests are intercepted
- after initial response and repeated in order to determine how much reissuing
- non-cacheable GET requests influences their error rate. The histogram tracks
- only initial requests (not the repeated ones).
- </summary>
-</histogram>
-
-<histogram name="Net.DoubleGetExperiment_ResponseCode">
- <summary>
- The response codes encountered for GET request repeated in Double GET
- Experiment. In the experiment successful non-cacheable GET requests are
- intercepted after initial response and repeated. The goal of the experiment
- is to measure how much reissuing non-cacheable GET requests influences their
- error rate.
- </summary>
-</histogram>
-
-<histogram name="Net.DownloadBandwidth">
- <summary>
- Kbps on download streams exceeding 25KB. Measures from the beginning of the
- first byte received until the end of flowing data.
- </summary>
-</histogram>
-
-<histogram name="Net.ErrorCodesForImages" enum="NetErrorCodes">
- <summary>
- Net error codes that requests for images end with, including net::OK and
- net:ERR_ABORTED.
- </summary>
-</histogram>
-
-<histogram name="Net.ErrorCodesForMainFrame" enum="NetErrorCodes">
- <obsolete>
- Deprecated as of 2011/5/24, replaced by Net.ErrorCodesForMainFrame2, which
- measures the same data but uses a different bucket structure (adds guard
- buckets).
- </obsolete>
- <summary>
- Positive net error code that a page failed with. Note that this only counts
- the errors in &quot;main frames&quot;, so it is a measure of the error pages
- that users actually see (it does not for example count the error codes for
- subresoures on a page).
- </summary>
-</histogram>
-
-<histogram name="Net.ErrorCodesForMainFrame2" enum="NetErrorCodes">
- <obsolete>
- Deprecated as of 2012/5/16, replaced by Net.ErrorCodesForMainFrame3, which
- measures the same data but includes ERR_ABORTED and OK.
- </obsolete>
- <summary>
- Positive net error code that a page failed with. Note that this only counts
- the errors in &quot;main frames&quot;, so it is a measure of the error pages
- that users actually see (it does not for example count the error codes for
- subresoures on a page).
- </summary>
-</histogram>
-
-<histogram name="Net.ErrorCodesForMainFrame3" enum="NetErrorCodes">
- <summary>
- Positive net error codes that requests for pages end with, including net::OK
- and net::ERR_ABORTED. This only counts loads in &quot;main frames&quot; (it
- does not for example count the error codes for subresoures on a page).
- </summary>
-</histogram>
-
-<histogram name="Net.ErrorCodesForSubresources" enum="NetErrorCodes">
- <obsolete>
- Deprecated as of 2012/5/16, replaced by Net.ErrorCodesForSubresources2,
- which measures the same data but includes ERR_ABORT and OK.
- </obsolete>
- <summary>
- Positive net error code that a page failed with. Note that this only counts
- the errors in &quot;subresources&quot;.
- </summary>
-</histogram>
-
-<histogram name="Net.ErrorCodesForSubresources2" enum="NetErrorCodes">
- <summary>
- Net error codes that requests for &quot;subresources&quot; end with,
- including net::OK and net::ERR_ABORTED.
- </summary>
-</histogram>
-
-<histogram name="Net.FileError_Flush">
- <summary>
- System error code that a file Flush failed with. The code is OS dependent,
- so when looking at the histogram don't mix OSes.
- </summary>
-</histogram>
-
-<histogram name="Net.FileError_GetSize">
- <summary>
- System error code that a file GetSize failed with. The code is OS
- dependent, so when looking at the histogram don't mix OSes.
- </summary>
-</histogram>
-
-<histogram name="Net.FileError_Open">
- <summary>
- System error code that a file Open failed with. The code is OS dependent,
- so when looking at the histogram don't mix OSes.
- </summary>
-</histogram>
-
-<histogram name="Net.FileError_Read">
- <summary>
- System error code that a file Read failed with. The code is OS dependent,
- so when looking at the histogram don't mix OSes.
- </summary>
-</histogram>
-
-<histogram name="Net.FileError_Seek">
- <summary>
- System error code that a file Seek failed with. The code is OS dependent,
- so when looking at the histogram don't mix OSes.
- </summary>
-</histogram>
-
-<histogram name="Net.FileError_SetEof">
- <summary>
- System error code that a file SetEof failed with. The code is OS dependent,
- so when looking at the histogram don't mix OSes.
- </summary>
-</histogram>
-
-<histogram name="Net.FileError_Write">
- <summary>
- System error code that a file Write failed with. The code is OS dependent,
- so when looking at the histogram don't mix OSes.
- </summary>
-</histogram>
-
-<histogram name="Net.FileErrorRange_Flush">
- <summary>
- System error code range that a file Flush failed with. Any value other than
- 0 indicates that we have received errors in a range outside of the one in
- which we recorded the specific errors in Net.FileError_Flush. The code is
- OS dependent, so when looking at the histogram don't mix OSes.
- </summary>
-</histogram>
-
-<histogram name="Net.FileErrorRange_GetSize">
- <summary>
- System error code range that a file GetSize failed with. Any value other
- than 0 indicates that we have received errors in a range outside of the one
- in which we recorded the specific errors in Net.FileError_GetSize. The code
- is OS dependent, so when looking at the histogram don't mix OSes.
- </summary>
-</histogram>
-
-<histogram name="Net.FileErrorRange_Open">
- <summary>
- System error code range that a file Open failed with. Any value other than
- 0 indicates that we have received errors in a range outside of the one in
- which we recorded the specific errors in Net.FileError_Open. The code is OS
- dependent, so when looking at the histogram don't mix OSes.
- </summary>
-</histogram>
-
-<histogram name="Net.FileErrorRange_Read">
- <summary>
- System error code range that a file Read failed with. Any value other than
- 0 indicates that we have received errors in a range outside of the one in
- which we recorded the specific errors in Net.FileError_Read. The code is OS
- dependent, so when looking at the histogram don't mix OSes.
- </summary>
-</histogram>
-
-<histogram name="Net.FileErrorRange_Seek">
- <summary>
- System error code range that a file Seek failed with. Any value other than
- 0 indicates that we have received errors in a range outside of the one in
- which we recorded the specific errors in Net.FileError_Seek. The code is OS
- dependent, so when looking at the histogram don't mix OSes.
- </summary>
-</histogram>
-
-<histogram name="Net.FileErrorRange_SetEof">
- <summary>
- System error code range that a file SetEof failed with. Any value other
- than 0 indicates that we have received errors in a range outside of the one
- in which we recorded the specific errors in Net.FileError_SetEof. The code
- is OS dependent, so when looking at the histogram don't mix OSes.
- </summary>
-</histogram>
-
-<histogram name="Net.FileErrorRange_Write">
- <summary>
- System error code range that a file Write failed with. Any value other than
- 0 indicates that we have received errors in a range outside of the one in
- which we recorded the specific errors in Net.FileError_Write. The code is
- OS dependent, so when looking at the histogram don't mix OSes.
- </summary>
-</histogram>
-
-<histogram name="Net.FtpDataConnectionErrorCount" enum="FtpDataConnectionError">
- <summary>The number of times each FTP Error was observed.</summary>
-</histogram>
-
-<histogram name="Net.FtpDataConnectionErrorHappened"
- enum="FtpDataConnectionError">
- <summary>
- The number of Chrome sessions which encountered the indicates FTP Error.
- This prevents allowing a user that retried a connection many times (getting
- an error each time) from biasing the tallies.
- </summary>
-</histogram>
-
-<histogram name="Net.FtpServerTypeCount" enum="FtpServerType">
- <summary>
- Each bucket is the number of FTP server types the user has encountered
- during the session.
- </summary>
-</histogram>
-
-<histogram name="Net.GetProxyForUrl_FAIL" units="milliseconds">
- <summary>
- The time spent waiting for WinHttpGetProxyForUrl to return with error.
- </summary>
-</histogram>
-
-<histogram name="Net.GetProxyForUrl_OK" units="milliseconds">
- <summary>
- The time spent waiting for WinHttpGetProxyForUrl to return with success.
- </summary>
-</histogram>
-
-<histogram name="Net.GoogleConnectionUsedSSLVersionFallback"
- enum="FallbackSSLVersion">
- <summary>
- Nonzero if the HTTP request was to a Google server which required SSL
- version fallback. The value indicates the SSL version the request fell back
- on. Since Google servers support TLS 1.2, any fallback is an indication of
- network middleware problems.
- </summary>
-</histogram>
-
-<histogram name="Net.HadConnectionType" enum="ConnectionType">
- <obsolete>
- The count was inaccurate (it counted transactions rather than connections).
- </obsolete>
- <summary>
- Each bucket is a boolean (0 or 1) indicating whether the user has had a
- connection of that type during the session.
- </summary>
-</histogram>
-
-<histogram name="Net.HadConnectionType2" enum="ConnectionType">
- <obsolete>
- This statistic measures successful and failed connections, the new one only
- measures successful ones.
- </obsolete>
- <summary>
- Each bucket is a boolean (0 or 1) indicating whether the user has had a
- connection of that type during the session.
- </summary>
-</histogram>
-
-<histogram name="Net.HadConnectionType3" enum="ConnectionType">
- <summary>
- Each bucket is a boolean (0 or 1) indicating whether the user has had a
- successful connection of that type during the session.
- </summary>
-</histogram>
-
-<histogram name="Net.HadFtpServerType" enum="FtpServerType">
- <summary>
- Each bucket is a boolean (0 or 1) indicating whether the user has had a
- connection with an FTP server of that type during the session.
- </summary>
-</histogram>
-
-<histogram name="Net.HttpAuthCount" enum="HttpAuthCount">
- <summary>
- Per-authentication-scheme counts of authentication attempts and rejections.
- </summary>
-</histogram>
-
-<histogram name="Net.HttpAuthResource" enum="HttpAuthResource">
- <summary>
- Count of authentication requests for top level pages vs. sub-resources, such
- as images or iframes.
- </summary>
-</histogram>
-
-<histogram name="Net.HttpAuthTarget" enum="HttpAuthTarget">
- <summary>
- Per-authentication-scheme counts of authentication targets, such as secure
- servers or proxies.
- </summary>
-</histogram>
-
-<histogram name="Net.HttpConnectionLatency" units="milliseconds">
- <summary>
- Time between the HttpNetworkTransaction requesting a connection and the time
- it connected.
- </summary>
-</histogram>
-
-<histogram name="Net.HttpContentFreshnessLifetime" units="seconds">
- <summary>Length of time that a received resource will be cacheable.</summary>
-</histogram>
-
-<histogram name="Net.HttpContentLength" units="bytes">
- <summary>
- Size of the response body. This is the actual number of bytes received,
- which usually agrees with but is not necessarily the same as the size
- specified by the Content-Length header.
- </summary>
-</histogram>
-
-<histogram name="Net.HttpContentLengthCacheable" units="bytes">
- <summary>
- Size of the response body if it is cacheable. This is the actual number of
- bytes received, which usually agrees with but is not necessarily the same as
- the size specified by the Content-Length header.
- </summary>
-</histogram>
-
-<histogram name="Net.HttpContentLengthCacheable24Hours" units="bytes">
- <summary>
- Size of the response body if it is cacheable for at least 24 hours. This is
- the actual number of bytes received, which usually agrees with but is not
- necessarily the same as the size specified by the Content-Length header.
- </summary>
-</histogram>
-
-<histogram name="Net.HttpContentLengthCacheable4Hours" units="bytes">
- <summary>
- Size of the response body if it is cacheable for at least 4 hours. This is
- the actual number of bytes received, which usually agrees with but is not
- necessarily the same as the size specified by the Content-Length header.
- </summary>
-</histogram>
-
-<histogram name="Net.HttpContentLengthDifference" units="bytes">
- <summary>
- The difference between the size specified in the X-Original-Content-Length
- header and the size of teh response body. This is zero if the
- X-Original-Content-Length header is not present in the response.
- </summary>
-</histogram>
-
-<histogram name="Net.HttpContentLengthDifferenceWithValidOCL" units="bytes">
- <summary>
- The difference between the size specified in the X-Original-Content-Length
- header and the size of the response body. Only includes resources that have
- the X-Original-Content-Length header.
- </summary>
-</histogram>
-
-<histogram name="Net.HttpContentLengthWithValidOCL" units="bytes">
- <summary>
- Size of the response body. Only includes resources that have the
- X-Original-Content-Length header.
- </summary>
-</histogram>
-
-<histogram name="Net.HttpJob.TotalTime" units="milliseconds">
- <summary>
- Time it takes to complete an HttpJob, from starting the transaction until we
- are done reading.
- </summary>
-</histogram>
-
-<histogram name="Net.HttpJob.TotalTimeCached" units="milliseconds">
- <summary>
- Time it takes to complete an HttpJob, from starting the transaction until we
- are done reading, for jobs served from the cache.
- </summary>
-</histogram>
-
-<histogram name="Net.HttpJob.TotalTimeCancel" units="milliseconds">
- <summary>
- Time it takes to complete an HttpJob, from starting the transaction until
- the job is killed. Note that we didn't detect the end of the data for this
- job.
- </summary>
-</histogram>
-
-<histogram name="Net.HttpJob.TotalTimeNotCached" units="milliseconds">
- <summary>
- Time it takes to complete an HttpJob, from starting the transaction until we
- are done reading, for jobs not served from the cache.
- </summary>
-</histogram>
-
-<histogram name="Net.HttpJob.TotalTimeSuccess" units="milliseconds">
- <summary>
- Time it takes to complete an HttpJob, from starting the transaction until we
- are done reading, for jobs when we read until no more data is available.
- </summary>
-</histogram>
-
-<histogram name="Net.HttpOriginalContentLength" units="bytes">
- <summary>
- Size specified in the X-Original-Content-Length header. If this header is
- not present in the response, the size of the response body is used.
- </summary>
-</histogram>
-
-<histogram name="Net.HttpOriginalContentLengthWithValidOCL" units="bytes">
- <summary>
- Size specified in the X-Original-Content-Length header. Only includes
- resources that have the X-Original-Content-Length header.
- </summary>
-</histogram>
-
-<histogram name="Net.HttpProxySocketRequestTime" units="milliseconds">
- <summary>Time it takes to request a new (unused) HTTP proxy socket.</summary>
-</histogram>
-
-<histogram name="Net.HttpResponseCode">
- <summary>The count of HTTP Response codes encountered.</summary>
-</histogram>
-
-<histogram name="Net.HttpResponseCode_Nxx_MainFrame">
- <summary>
- The count of HTTP Response codes encountered, in response to MAIN_FRAME
- requests only; saving only the hundreds digit, e.g. 100-&gt;1, 300-&gt;3.
- </summary>
-</histogram>
-
-<histogram name="Net.HttpSocketType" enum="HttpSocketType">
- <summary>
- The counts of the type of sockets (all HTTP sockets, regardless of any proxy
- used) used for HTTP[s].
- </summary>
-</histogram>
-
-<histogram name="Net.HttpTimeToFirstByte" units="milliseconds">
- <summary>
- Time from when an HTTP request is issued to when the first byte is
- processed.
- </summary>
-</histogram>
-
-<histogram name="Net.IOError_SocketReuseType" enum="HttpSocketType">
- <summary>
- The count of handleable socket errors (connection abort/close/reset) per
- socket reuse type.
- </summary>
-</histogram>
-
-<histogram name="Net.IOError_SocketReuseType_disable_late_binding"
- enum="HttpSocketType">
- <obsolete>
- Late bindings are on by default now.
- </obsolete>
- <summary>
- The count of handleable socket errors (connection abort/close/reset) per
- socket reuse type. Socket late binding is disabled.
- </summary>
-</histogram>
-
-<histogram name="Net.IOError_SocketReuseType_enable_late_binding"
- enum="HttpSocketType">
- <obsolete>
- Late bindings are on by default now.
- </obsolete>
- <summary>
- The count of handleable socket errors (connection abort/close/reset) per
- socket reuse type. Socket late binding is enabled.
- </summary>
-</histogram>
-
-<histogram name="Net.IPv6ConnectDuration" units="milliseconds">
- <summary>Duration of time spent during the UDP-connect IPv6 probe.</summary>
-</histogram>
-
-<histogram name="Net.IPv6ConnectFailureMatch" enum="BooleanSuccess">
- <summary>
- Whether the the interface-enumeration IPv6 probe method failed given that
- the UDP-connect IPV6 probe failed.
- </summary>
-</histogram>
-
-<histogram name="Net.IPv6ConnectSuccessMatch" enum="BooleanSuccess">
- <summary>
- Whether the the interface-enumeration IPv6 probe method was successful given
- that the UDP-connect IPV6 probe was successful.
- </summary>
-</histogram>
-
-<histogram name="Net.IPv6Status" enum="IPV6ProbeResult">
- <summary>The probe results when a test for IPv6 support is done.</summary>
-</histogram>
-
-<histogram name="Net.IPv6Status_retest" enum="IPV6ProbeResult">
- <summary>
- The probe results when a test for IPv6 support is done, after a network
- change event.
- </summary>
-</histogram>
-
-<histogram name="Net.MTPR_GetProxyForUrl_Thread_Wait_Time" units="milliseconds">
- <summary>
- The time that a (non-cancelled) proxy resolution request was stalled waiting
- for an execution thread, for MultiThreadedProxyResolver.
- </summary>
-</histogram>
-
-<histogram name="Net.MTPR_GetProxyForUrl_Time" units="milliseconds">
- <summary>
- The total time that it took for a (non-cancelled) proxy resolution request
- to complete, for MultiThreadedProxyResolver.
- </summary>
-</histogram>
-
-<histogram name="Net.NetworkErrorsRecovered.MainFrame" enum="NetErrorCodes">
- <summary>
- How often automatically retrying to download the main frame of a page in
- response to specific HTTP network errors succeeds.
- </summary>
-</histogram>
-
-<histogram name="Net.NetworkErrorsRecovered.Subresource" enum="NetErrorCodes">
- <summary>
- How often automatically retrying to download a subresource in response to
- specific HTTP network errors succeeds.
- </summary>
-</histogram>
-
-<histogram name="Net.NetworkErrorsUnrecovered.MainFrame" enum="NetErrorCodes">
- <summary>
- How often automatically retrying to download the main frame of a page in
- response to specific HTTP network errors returns another network error.
- Histogram includes only the error code that triggered the retry.
- </summary>
-</histogram>
-
-<histogram name="Net.NetworkErrorsUnrecovered.Subresource" enum="NetErrorCodes">
- <summary>
- How often automatically retrying to download a subresource in response to
- specific HTTP network errors returns another network error. Histogram
- includes only the error code that triggered the retry.
- </summary>
-</histogram>
-
-<histogram name="Net.NotifyAddrChangeFailures">
- <summary>
- On Windows, NetworkChangeNotifierWin calls NotifyAddrChange, which can fail
- for unknown reasons. This records the number of times it fails in a row
- before a successful call. If it never succeeds, or takes over 100 tries, a
- value of 100 is recorded. See http://crbug.com/69198
- </summary>
-</histogram>
-
-<histogram name="Net.NumDuplicateCookiesInDb">
- <summary>
- The number of duplicate cookies that were present in the cookie store during
- startup.
- </summary>
-</histogram>
-
-<histogram name="Net.OCSPRequestFailedTimeMs" units="milliseconds">
- <summary>
- When validating an HTTPS certificate we may have to make one or more HTTP
- fetches to OCSP responders in order to get revocation information. This
- measures the amount of time that failures to get OCSP information take.
- </summary>
-</histogram>
-
-<histogram name="Net.OCSPRequestSuccess" enum="BooleanSuccess">
- <summary>
- When validating an HTTPS certificate we may have to make one or more HTTP
- fetches to OCSP responders in order to get revocation information. This
- records the fraction of successful requests.
- </summary>
-</histogram>
-
-<histogram name="Net.OCSPRequestTimeMs" units="milliseconds">
- <summary>
- When validating an HTTPS certificate we may have to make one or more HTTP
- fetches to OCSP responders in order to get revocation information. This
- measures the amount of time that each of those requests takes.
- </summary>
-</histogram>
-
-<histogram name="Net.OSErrorsForGetAddrinfo" enum="ErrorCodesGetaddrinfo_All">
- <summary>
- Positive error code that was returned by the system library
- &quot;getaddrinfo()&quot;. This error code is platform specific, so when
- there is a Windows/Linux conflict, both decodings are shown.
- </summary>
-</histogram>
-
-<histogram name="Net.OSErrorsForGetAddrinfo_Linux"
- enum="ErrorCodesGetaddrinfo_Linux">
- <summary>
- Positive error code that was returned by the system library
- &quot;getaddrinfo()&quot;.
- </summary>
-</histogram>
-
-<histogram name="Net.OSErrorsForGetAddrinfo_Mac"
- enum="ErrorCodesGetaddrinfo_Mac">
- <summary>
- Positive error code that was returned by the system library
- &quot;getaddrinfo()&quot;.
- </summary>
-</histogram>
-
-<histogram name="Net.OSErrorsForGetAddrinfo_Win"
- enum="ErrorCodesGetaddrinfo_Win">
- <summary>
- Positive error code that was returned by the system library
- &quot;getaddrinfo()&quot;.
- </summary>
-</histogram>
-
-<histogram name="Net.PreconnectedLinkNavigations" enum="PreconnectedNavigation">
- <summary>
- Indicate whether a link navigation was preceded by a recent pre-connect
- trigger (within 10 seconds). There is a high chance that loading the page
- used a preconnected TCP session.
- </summary>
-</histogram>
-
-<histogram name="Net.PreconnectedNavigation" enum="PreconnectedNavigation">
- <summary>
- Indicate whether a URLRequest was preceded by a recent pre-connect trigger
- (within 10 seconds). There is a high chance that loading the resource used a
- preconnected TCP session.
- </summary>
-</histogram>
-
-<histogram name="Net.PreconnectMotivation" enum="PreconnectMotivation">
- <summary>
- When a preconnection is made, indicate what the motivation was.
- </summary>
- <details>
- Currently, the most common (only?) motivations are SELF_REFERAL,
- LEARNED_REFERAL and OMNIBOX. The SELF_REFERAL indicates that we made sure a
- second connection was available for a resource that either was never before
- seen, or has historically had no subresources. The LEARNED_REFERAL
- indicates that we &quot;learned&quot; that a subresource was commonly
- needed, and that motivated the TCP/IP preconnect. The OMNIBOX motivation
- happens when a search is being suggested, and we preconnect to the search
- provider. (WARNING: Prior to version 7.517.*, enums 7, 8, and 9 may be
- confused, as EARLY_LOAD_MOTIVATED was inserted new 6 value.)
- </details>
-</histogram>
-
-<histogram name="Net.PreconnectProxyStatus" enum="ProxyStatus">
- <summary>
- Indicate whether there was a proxy to preclude preconnection.
- </summary>
-</histogram>
-
-<histogram name="Net.PreconnectSubresourceEval"
- enum="PreconnectSubresourceEval">
- <summary>
- What did we decide to do about a predicted resource, based on the historical
- expected number of connection that this subresource will require.
- </summary>
- <details>
- This is basically the current thresholding of the SubresourceExpectation,
- relative to current static thresholds, and taking into account whether
- preconnection is enabled (i.e., if preconnection is disabled, we'll never
- decide to preconnect).
- </details>
-</histogram>
-
-<histogram name="Net.PreconnectSubresourceExpectation">
- <summary>
- The expected number of connections, times 100, that we'll make to a given
- subresource, based on learned history.
- </summary>
- <details>
- By comparing this to thresholds, we decide if we will preconnect,
- preresolve, or do nothing. This histogram can be used to select those static
- thresholds.
- </details>
-</histogram>
-
-<histogram name="Net.PreconnectTriggerUsed" enum="PreconnectTriggerUsed">
- <summary>
- Indicate whether if a preconnect trigger is followed by a resource request
- (from link navigations) to the host or not. This is to measure precision of
- link-based preconnect triggers.
- </summary>
-</histogram>
-
-<histogram name="Net.PreconnectUtilization" enum="NetPreconnectUtilization">
- <obsolete>
- Sourced data corrected, and replaced by NetPreconnectUtilization2
- </obsolete>
- <summary>
- Indicate final utilization for each attempted socket connection.
- </summary>
- <details>
- We also include stats for non-speculative sockets. Some socket connections
- may never connect, and others may never be used (as the user may abort
- before then).
- </details>
-</histogram>
-
-<histogram name="Net.PreconnectUtilization2" enum="NetPreconnectUtilization">
- <summary>
- Indicate final utilization for each attempted socket connection.
- </summary>
- <details>
- We also include stats for non-speculative sockets. Some socket connections
- may never connect, and others may never be used (as the user may abort
- before then).
- </details>
-</histogram>
-
-<histogram name="Net.Prefetch.Pattern" enum="PrefetchStatus">
- <summary>
- The completion status of prefetches that have finished loading.
- </summary>
- <details>
- Measurement occurs at ResourceLoader::ResponseCompleted so requests canceled
- before that point are not registered.
-
- Note that &quot;success from cache&quot; means that the
- UrlRequest::was_cached() was true, and &quot;success from network&quot;
- means that was_cached() was false. Validated results are considered cached,
- even though a conditional network request is made.
- </details>
-</histogram>
-
-<histogram name="Net.Prefetch.PrefilterBytesReadFromNetwork" units="bytes">
- <summary>
- Number of bytes read from the network on behalf of prefetch requests. This
- is prefilter, so before any decompression.
- </summary>
-</histogram>
-
-<histogram name="Net.Prefetch.TimeBeforeCancel" units="milliseconds">
- <summary>
- Time spent on prefetch requests before the request was canceled.
- </summary>
-</histogram>
-
-<histogram name="Net.Prefetch.TimeSpentPrefetchingFromCache"
- units="milliseconds">
- <summary>Time spent on prefetch requests when fetched from cache.</summary>
-</histogram>
-
-<histogram name="Net.Prefetch.TimeSpentPrefetchingFromNetwork"
- units="milliseconds">
- <summary>
- Time spent on prefetch requests when fetched from the network, including
- validation time.
- </summary>
-</histogram>
-
-<histogram name="Net.Priority_High_Latency" units="milliseconds">
- <obsolete>
- Replaced by Net.Priority_High_Latency_b.
- </obsolete>
- <summary>
- Time from the start of the http transaction until the first byte of the
- response for high priority (currently frame and subframe) requests. Only
- times under 10 minutes are recorded.
- </summary>
-</histogram>
-
-<histogram name="Net.Priority_High_Latency_b" units="milliseconds">
- <summary>
- Time from the start of the http transaction until the first byte of the
- response for high priority (currently frame and subframe) requests.
- </summary>
-</histogram>
-
-<histogram name="Net.Priority_Low_Latency" units="milliseconds">
- <obsolete>
- Replaced by Net.Priority_Low_Latency_b.
- </obsolete>
- <summary>
- Time from the start of the http transaction until the first byte of the
- response for low priority (non-frame/subframe) requests. Only times under
- 10 minutes are recorded.
- </summary>
-</histogram>
-
-<histogram name="Net.Priority_Low_Latency_b" units="milliseconds">
- <summary>
- Time from the start of the http transaction until the first byte of the
- response for low priority (non-frame/subframe) requests.
- </summary>
-</histogram>
-
-<histogram name="Net.ProxyPollConfigurationTime">
- <summary>
- The time in milliseconds spent fetch the system proxy configuration, when
- polling it for changes.
- </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.AbandonedExecutionTotalTime"
- units="milliseconds">
- <summary>
- The total amount of time that was spent executing the proxy script during
- &quot;tracing&quot; runs (executions of the script which discovered a new
- DNS dependency and were subsequently abandoned).
- </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.BlockingDNSMode.AbandonedExecutionTotalTime"
- units="milliseconds">
- <summary>
- The total amount of time that was spent executing the proxy script during
- &quot;tracing&quot; runs (executions of the script which discovered a new
- DNS dependency and were subsequently abandoned).
- </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.BlockingDNSMode.DnsWaitTotalTime"
- units="milliseconds">
- <summary>
- The total amount of time that was spent in the non-blocking DNS bindings
- while executing PAC scripts. This includes the times for abandoned
- executions.
- </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.BlockingDNSMode.ExecutionTime"
- units="milliseconds">
- <summary>
- The amount of time inside of V8 that the proxy script spent executing for
- the final pass. This includes the time spent in the javascript bindings.
- This does not include the time spent in abandoned execution passes.
- </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.BlockingDNSMode.NumAlerts">
- <summary>
- The number of times that alert() was called in the final execution of the
- script.
- </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.BlockingDNSMode.NumErrors">
- <summary>
- The number of errors that were seen in the final execution of the script.
- </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.BlockingDNSMode.NumRestarts">
- <summary>
- The number of times that the PAC script execution was restarted.
- </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.BlockingDNSMode.TotalTime"
- units="milliseconds">
- <summary>
- The total time that the proxy resolution took. This includes all the time
- spent waiting for DNS, PAC script execution, and restarts.
- </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.BlockingDNSMode.TotalTimeDNS"
- units="milliseconds">
- <summary>
- The total time that proxy resolution spent waiting for DNS. This also
- includes any queuing delays on the origin thread waiting for the DNS result
- to be processed.
- </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.BlockingDNSMode.UniqueDNS">
- <summary>
- The number of unique DNS hostnames that the PAC script tried to resolve. The
- *Ex() versions of the bindings count separately.
- </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.DnsWaitTotalTime" units="milliseconds">
- <summary>
- The total amount of time that was spent in the non-blocking DNS bindings
- while executing PAC scripts. This includes the times for abandoned
- executions.
- </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.ExecutionTime" units="milliseconds">
- <summary>
- The amount of time inside of V8 that the proxy script spent executing for
- the final pass. This includes the time spent in the javascript bindings
- (which is probably dominated by Net.ProxyResolver.DnsWaitTotalTime). This
- does not include the time spent in abandoned execution passes.
- </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.NumAlerts">
- <summary>
- The number of times that alert() was called in the final execution of the
- script.
- </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.NumErrors">
- <summary>
- The number of errors that were seen in the final execution of the script.
- </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.NumRestarts">
- <summary>
- The number of times that the PAC script execution was restarted.
- </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.OriginThreadLatency" units="milliseconds">
- <summary>
- The amount of time it took upon completion to run the final task posted back
- to the IO thread.
- </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.TotalTime" units="milliseconds">
- <summary>
- The total time that the proxy resolution took. This includes all the time
- spent waiting for DNS, PAC script execution, and restarts.
- </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.TotalTimeDNS" units="milliseconds">
- <summary>
- The total time that proxy resolution spent waiting for DNS. This also
- includes any queuing delays on the origin thread waiting for the DNS result
- to be processed.
- </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.TotalTimeWorkerThread" units="milliseconds">
- <summary>
- The total time that the proxy resolution took, not including the post back
- to the origin thread. This includes all the time spent waiting for DNS, PAC
- script execution, and restarts.
- </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.UniqueDNS">
- <summary>
- The number of unique DNS hostnames that the PAC script tried to resolve. The
- *Ex() versions of the bindings count separately.
- </summary>
-</histogram>
-
-<histogram name="Net.ProxyResolver.URLSize">
- <summary>The length of the URL that was passed into the PAC script.</summary>
-</histogram>
-
-<histogram name="Net.PublicKeyPinFailureDomain" enum="PublicKeyPinFailedDomain">
- <summary>
- Second-level domains for which we have observed public key pinning failures.
- </summary>
-</histogram>
-
-<histogram name="Net.PublicKeyPinSuccess" enum="BooleanSuccess">
- <summary>
- A validated certificate chain may be subject to additional
- &quot;pinning&quot; requirements on a per-domain basis. This records the
- fraction of successful matches between a certificate chain and a pin list.
- </summary>
-</histogram>
-
-<histogram name="Net.QuicCryptoHandshakeState" enum="QuicHandshakeState">
- <summary>
- The state of a QUIC connection's crypto hanshake as it progresses from
- starting to confirmation or failure.
- </summary>
-</histogram>
-
-<histogram name="Net.QuicEphemeralPortsSuggested">
- <summary>The number of ports suggested per server.</summary>
-</histogram>
-
-<histogram name="Net.QuicNumSentClientHellos">
- <summary>The number of client hello messages sent.</summary>
-</histogram>
-
-<histogram name="Net.QuicNumSentClientHellosCryptoHandshakeConfirmed">
- <summary>
- The number of client hello messages sent when the crypto handshake was
- confirmed.
- </summary>
-</histogram>
-
-<histogram name="Net.QuicNumStreamFramesInPacket">
- <summary>
- The number of stream frames bundled within a received packet.
- </summary>
-</histogram>
-
-<histogram name="Net.QuicNumStreamFramesPerStreamInPacket">
- <summary>
- The number of stream frames per stream ID within a received packet.
- </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.CloseSessionOnError" enum="NetErrorCodes">
- <summary>
- The network error code which resulted in the session being closed.
- </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.ConnectionClose.NumOpenStreams.TimedOut">
- <summary>The number of streams open when a QUIC session timed out.</summary>
-</histogram>
-
-<histogram
- name="Net.QuicSession.ConnectionClose.NumTotalStreams.HandshakeTimedOut">
- <summary>
- The number of total streams created when a QUIC session crypto handshake
- timed out.
- </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.ConnectionCloseErrorCode"
- enum="QuicErrorCodes">
- <summary>
- The QUIC error code which resulted in the connection being closed.
- </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.ConnectionCloseErrorCodeClient"
- enum="QuicErrorCodes">
- <summary>
- The QUIC error code which resulted in the connection being closed by the
- client.
- </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.ConnectionCloseErrorCodeServer"
- enum="QuicErrorCodes">
- <summary>
- The QUIC error code which resulted in the connection being closed by the
- server.
- </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.FinalTcpCwnd">
- <summary>
- The value of the TCP cubic sender's CWND when the session is closed.
- </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.NumOpenStreams">
- <summary>
- The number of QUIC streams opened when a new QUIC stream is created.
- </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.NumTotalStreams">
- <summary>
- The total number of streams created by the client when the session is
- closed.
- </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.OutOfOrderGapReceived">
- <summary>
- The number of missing packets between the current received packet and the
- previously largest received packet sequence number, when the current
- received packet had a lower sequence number than the previously received
- packet sequence number.
- </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.OutOfOrderPacketsReceived">
- <summary>
- The number of times the current received packet had a lower sequence number
- than the previously received packet sequence number.
- </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.PacketGapReceived">
- <summary>
- The number of missing packets between the current received packet and the
- previously largest received packet sequence number.
- </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.PacketGapSent">
- <summary>
- The number of missing packets between the current received packet and the
- previously largest received packet sequence number, as reported by the
- remote end of the connection.
- </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.QuicVersion">
- <summary>Version of the QUIC protocol used for this connection.</summary>
-</histogram>
-
-<histogram name="Net.QuicSession.ReadError" enum="NetErrorCodes">
- <summary>
- The network error code returned when attempting to read to a QUIC
- connection.
- </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.RstStreamErrorCodeClient"
- enum="QuicRstStreamErrorCodes">
- <summary>
- The QUIC error code which resulted in a stream being reset by the client.
- </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.RstStreamErrorCodeServer"
- enum="QuicRstStreamErrorCodes">
- <summary>
- The QUIC error code which resulted in a stream being reset by the server.
- </summary>
-</histogram>
-
-<histogram name="Net.QuicSession.WriteError" enum="NetErrorCodes">
- <summary>
- The network error code returned when attempting to write to a QUIC
- connection.
- </summary>
-</histogram>
-
-<histogram name="Net.RenegotiationExtensionSupported">
- <summary>
- True if the HTTP request was sent to a server which supports the TLS
- renegotiation extension.
- </summary>
-</histogram>
-
-<histogram name="Net.ResourceLoader.ReadDeferral" units="milliseconds">
- <summary>
- When starting a cross-site navigation, the time between reading the headers
- and body of the response.
- </summary>
-</histogram>
-
-<histogram name="Net.SocketIdleTimeBeforeNextUse_ReusedSocket">
- <summary>The time an already used socket sat idle before being used.</summary>
-</histogram>
-
-<histogram name="Net.SocketIdleTimeBeforeNextUse_UnusedSocket">
- <summary>
- The time an unused socket (all HTTP sockets, regardless of any proxy used)
- sat idle before being used.
- </summary>
-</histogram>
-
-<histogram name="Net.SocketIdleTimeOnIOError2_ReusedSocket">
- <summary>
- The time a previously used socket sat idle before encountering a recoverable
- socket IO error (connection abort/reset/close).
- </summary>
-</histogram>
-
-<histogram name="Net.SocketIdleTimeOnIOError2_UnusedSocket">
- <summary>
- The time an unused socket sat idle before encountering a recoverable socket
- IO error (connection abort/reset/close).
- </summary>
-</histogram>
-
-<histogram name="Net.SocketInitErrorCodes" enum="NetErrorCodes">
- <summary>
- Net error codes that socket initializations end with, including net::OK and
- net::ERR_ABORTED.
- </summary>
-</histogram>
-
-<histogram name="Net.SocketRequestTime">
- <summary>
- Time in milliseconds from initial RequestSocket() call until successfully
- acquiring a connected socket.
- </summary>
-</histogram>
-
-<histogram name="Net.SocketStream.ConnectionEstablish" units="milliseconds">
- <summary>The time from the connection start to connection establish.</summary>
-</histogram>
-
-<histogram name="Net.SocketStream.ConnectionLatency" units="milliseconds">
- <summary>The time waiting to be ready to start connecting.</summary>
-</histogram>
-
-<histogram name="Net.SocketStream.ConnectionType"
- enum="SocketStreamConnectionType">
- <summary>
- Each bucket is the number of connection type of socket stream.
- </summary>
-</histogram>
-
-<histogram name="Net.SocketStream.Duration" units="milliseconds">
- <summary>The time a socket stream was open.</summary>
-</histogram>
-
-<histogram name="Net.SocketStream.ProtocolType" enum="SocketStreamProtocolType">
- <summary>
- Each bucket is the number of protocol type on socket stream.
- </summary>
-</histogram>
-
-<histogram name="Net.SocketStream.ReceivedBytes" units="bytes">
- <summary>Number of bytes on a socket stream.</summary>
-</histogram>
-
-<histogram name="Net.SocketStream.ReceivedCounts">
- <summary>Number of reads on a socket stream.</summary>
-</histogram>
-
-<histogram name="Net.SocketStream.SentBytes" units="bytes">
- <summary>Number of bytes on a socket stream.</summary>
-</histogram>
-
-<histogram name="Net.SocketStream.SentCounts">
- <summary>Number of Write on a socket stream.</summary>
-</histogram>
-
-<histogram name="Net.SocketType" enum="HttpSocketType">
- <summary>
- The counts of the type of sockets returned by the socket pools.
- </summary>
-</histogram>
-
-<histogram name="Net.SOCKSSocketIdleTimeBeforeNextUse_ReusedSocket">
- <obsolete>
- see SocketIdleTimeBeforeNextUse_ReusedSocket_SOCK
- </obsolete>
- <summary>
- The time an already used SOCKS socket sat idle before being used.
- </summary>
-</histogram>
-
-<histogram name="Net.SOCKSSocketIdleTimeBeforeNextUse_UnusedSocket">
- <obsolete>
- see SocketIdleTimeBeforeNextUse_UnusedSocket_SOCK
- </obsolete>
- <summary>The time an unused SOCKS socket sat idle before being used.</summary>
-</histogram>
-
-<histogram name="Net.SOCKSSocketRequestTime" units="milliseconds">
- <obsolete>
- see SocketRequestTime_SOCK
- </obsolete>
- <summary>
- Time from initial SOCKSClientSocketPool::RequestSocket() call until
- successfully acquiring a connected SOCKS socket.
- </summary>
-</histogram>
-
-<histogram name="Net.SocksSocketRequestTime">
- <summary>Time it takes to request a new (unused) SOCKS proxy socket.</summary>
-</histogram>
-
-<histogram name="Net.SOCKSSocketType" enum="HttpSocketType">
- <obsolete>
- see SocketType_SOCK
- </obsolete>
- <summary>
- The counts of the type of sockets returned by the SOCKS pool.
- </summary>
-</histogram>
-
-<histogram name="Net.SpdyConnectionLatency" units="milliseconds">
- <summary>Time from when the Connect() starts until it completes.</summary>
-</histogram>
-
-<histogram name="Net.SpdyFrameStreamAndSessionFlowControlState"
- enum="SpdyFrameFlowControlState">
- <summary>
- The counts of the flow control state of each frame (with stream and session
- flow control on).
- </summary>
-</histogram>
-
-<histogram name="Net.SpdyFrameStreamFlowControlState"
- enum="SpdyFrameFlowControlState">
- <summary>
- The counts of the flow control state of each frame (with stream flow control
- on).
- </summary>
-</histogram>
-
-<histogram name="Net.SpdyIPPoolDomainMatch" enum="SpdyIPPoolDomainMatch"
- units="count">
- <summary>
- Status of checking if a SPDY domain can handle a IP match. If a match is
- found, we successfully used the IP Pooling. If a match is not found, we
- could have used IP Pooling, except the TLS Cert didn't match the IP-pooled
- domain.
- </summary>
-</histogram>
-
-<histogram name="Net.SpdyPing.RTT" units="milliseconds">
- <summary>The RTT for SPDY's PING.</summary>
-</histogram>
-
-<histogram name="Net.SpdyPriorityCount">
- <summary>The count of streams at each priority over Spdy sessions.</summary>
-</histogram>
-
-<histogram name="Net.SpdyRecvBytes" units="bytes">
- <summary>The number of bytes recevied per stream.</summary>
-</histogram>
-
-<histogram name="Net.SpdySendBytes" units="bytes">
- <summary>The number of bytes sent per stream.</summary>
-</histogram>
-
-<histogram name="Net.SpdySession.BytesRead.EOF" units="bytes">
- <summary>
- Total number of bytes recevied per session before closing session due to
- EOF.
- </summary>
-</histogram>
-
-<histogram name="Net.SpdySession.BytesRead.OtherErrors" units="bytes">
- <summary>
- Total number of bytes recevied per session before closing session due to an
- error during read.
- </summary>
-</histogram>
-
-<histogram name="Net.SpdySession.ClosedOnError" enum="NetErrorCodes">
- <summary>
- Net error codes when SpdySession was closed, doesn't inlcuding net::OK.
- </summary>
-</histogram>
-
-<histogram name="Net.SpdySession.CreateStreamWithSocketConnected"
- enum="BooleanSuccess">
- <summary>Socket connected status in SpdySession::CreateStream.</summary>
-</histogram>
-
-<histogram name="Net.SpdySessionErrorDetails" enum="SpdyProtocolErrorDetails"
- units="count">
- <obsolete>
- Replaced by SpdySessionErrorDetails2 on 2013-04-19.
- </obsolete>
- <summary>
- WARNING: r181910 added an enum value in the middle, so don't trust the
- counts for values 9 and above for Chrome builds after that revision.
-
- The type of SPDY Protocol error encountered.
- </summary>
-</histogram>
-
-<histogram name="Net.SpdySessionErrorDetails2" enum="SpdyProtocolErrorDetails2"
- units="count">
- <summary>The type of SPDY Protocol error encountered.</summary>
-</histogram>
-
-<histogram name="Net.SpdySessionErrorDetails_Google"
- enum="SpdyProtocolErrorDetails" units="count">
- <obsolete>
- Replaced by SpdySessionErrorDetails_Google2 on 2013-04-19.
- </obsolete>
- <summary>
- The type of SPDY Protocol error encountered when talking to a google.com
- server.
- </summary>
-</histogram>
-
-<histogram name="Net.SpdySessionErrorDetails_Google2"
- enum="SpdyProtocolErrorDetails2" units="count">
- <summary>
- WARNING: r181910 added an enum value in the middle, so don't trust the
- counts for values 9 and above for Chrome builds after that revision.
-
- The type of SPDY Protocol error encountered when talking to a google.com
- server.
- </summary>
-</histogram>
-
-<histogram name="Net.SpdySessionGet" enum="SpdySessionGet" units="count">
- <summary>The type of SPDY Session used when looking up a session.</summary>
-</histogram>
-
-<histogram name="Net.SpdySessionGetPeerAddressNotConnected"
- enum="BooleanSuccess">
- <summary>
- Whether SpdySession::Get{Peer,Local}Address was called when the connection
- had no socket.
- </summary>
-</histogram>
-
-<histogram name="Net.SpdySessions_DataReductionProxy"
- enum="BooleanDataReductionProxy">
- <summary>
- The count of SPDY sessions using the data reduction proxy and the count of
- other SPDY sessions.
- </summary>
-</histogram>
-
-<histogram name="Net.SpdySessionSocketNotConnectedGetLocalAddress"
- enum="BooleanSuccess">
- <summary>
- SpdySession::GetLocalAddress returned ERR_SOCKET_NOT_CONNECTED.
- </summary>
-</histogram>
-
-<histogram name="Net.SpdySessionSocketNotConnectedGetPeerAddress"
- enum="BooleanSuccess">
- <summary>
- SpdySession::GetPeerAddress returned ERR_SOCKET_NOT_CONNECTED.
- </summary>
-</histogram>
-
-<histogram name="Net.SpdySessionsWithStalls">
- <summary>The count of SPDY Sessions with or without stalls.</summary>
-</histogram>
-
-<histogram name="Net.SpdySettingsCwnd" units="packets">
- <summary>
- The congestion window (in pkts) received at the end of a SpdySession.
- </summary>
-</histogram>
-
-<histogram name="Net.SpdySettingsCwndSent" units="packets">
- <summary>
- The congestion window (in pkts) sent at the beginning of a SpdySession.
- </summary>
-</histogram>
-
-<histogram name="Net.SpdySettingsReceived" enum="SpdySettingsReceived"
- units="%">
- <summary>
- Percentage of sessions which received settings from the server.
- </summary>
-</histogram>
-
-<histogram name="Net.SpdySettingsRetransRate" units="%">
- <summary>
- The Download Retransmission Rate (%) received at the end of a SpdySession.
- </summary>
-</histogram>
-
-<histogram name="Net.SpdySettingsRTT" units="milliseconds">
- <summary>The RTT received at the end of a SpdySession.</summary>
-</histogram>
-
-<histogram name="Net.SpdySettingsSent" enum="SpdySettingsSent" units="%">
- <summary>Percentage of sessions which sent settings to the server.</summary>
-</histogram>
-
-<histogram name="Net.SpdyStreamDownloadTime" units="milliseconds">
- <summary>
- The time between receiving the the first chunk and the last chunk of data on
- a Spdy stream.
- </summary>
-</histogram>
-
-<histogram name="Net.SpdyStreamsAbandonedPerSession">
- <summary>
- The number of pushed, but abandoned streams over a single session.
- </summary>
-</histogram>
-
-<histogram name="Net.SpdyStreamsPerSession">
- <summary>The number of streams issued over a single session.</summary>
-</histogram>
-
-<histogram name="Net.SpdyStreamsPushedAndClaimedPerSession">
- <summary>
- The number of pushed, and used streams over a single session.
- </summary>
-</histogram>
-
-<histogram name="Net.SpdyStreamsPushedPerSession">
- <summary>The number of push streams received over a single session.</summary>
-</histogram>
-
-<histogram name="Net.SpdyStreamStallsPerSession">
- <summary>The number of stream stalls per session.</summary>
-</histogram>
-
-<histogram name="Net.SpdyStreamTime" units="milliseconds">
- <summary>
- The time of a Spdy stream. Measured from sending the first chunk to
- receiving the last chunk of data.
- </summary>
-</histogram>
-
-<histogram name="Net.SpdyStreamTimeToFirstByte" units="milliseconds">
- <summary>
- The time between sending the request and receiving the first chunk of data
- on a Spdy stream.
- </summary>
-</histogram>
-
-<histogram name="Net.SpdySynStreamCompressionPercentage">
- <summary>
- The percent compression achieved when compression SYN_STREAM frames.
- </summary>
-</histogram>
-
-<histogram name="Net.SpdyVersion" enum="ProtocolVersion">
- <summary>
- The SPDY protocol version that is used to talk to SPDY servers.
- </summary>
-</histogram>
-
-<histogram name="Net.SSL_CipherSuite" enum="SSLCipherSuite">
- <summary>The SSL/TLS cipher suite that was negotiated.</summary>
-</histogram>
-
-<histogram name="Net.SSL_Connection_Latency" units="milliseconds">
- <summary>Time from when the Connect() starts until it completes.</summary>
-</histogram>
-
-<histogram name="Net.SSL_Connection_Latency_DataReductionProxy"
- units="milliseconds">
- <summary>
- Time from when the Connect() starts until it completes when using the data
- reduction proxy. This includes certificate retrieval and verification.
- </summary>
-</histogram>
-
-<histogram name="Net.SSL_Connection_Latency_Google" units="milliseconds">
- <summary>
- Time from when the Connect() starts until it completes for google.com and
- any subdomain of it.
- </summary>
-</histogram>
-
-<histogram name="Net.SSL_Connection_Latency_Google_No_Revocation_Checking"
- units="milliseconds">
- <summary>
- Time from when the Connect() starts until it completes for google.com and
- any subdomain of it. This only includes users in a 50% field trial that
- disables revocation checking for certificate pinned sites.
- </summary>
-</histogram>
-
-<histogram name="Net.SSL_Connection_Latency_Google_Revocation_Checking"
- units="milliseconds">
- <summary>
- Time from when the Connect() starts until it completes for google.com and
- any subdomain of it. This only includes users not in a 50% field trail that
- disables revocation for certificate pinned sites.
- </summary>
-</histogram>
-
-<histogram name="Net.SSLCertBlacklisted">
- <summary>
- Counts the number of times that users have hit blacklisted certificates. The
- indexes match up to the indexes in
- net/base/x509_certificate.cc:IsBlacklisted. The details of the certificates
- in question is confidential.
- </summary>
-</histogram>
-
-<histogram name="Net.SSLCertVerificationTime" units="milliseconds">
- <summary>Time to complete a certificate verification (success case).</summary>
-</histogram>
-
-<histogram name="Net.SSLCertVerificationTimeError" units="milliseconds">
- <summary>Time to complete a certificate verification (error case).</summary>
-</histogram>
-
-<histogram name="Net.SSLHostInfoDNSLookup" units="milliseconds">
- <summary>Time to complete a DNS lookup for a DNS CAA record.</summary>
-</histogram>
-
-<histogram name="Net.SSLHostInfoDNSLookupDelayMs" units="milliseconds">
- <summary>
- Time that we would have wasted had we waited for a CAA lookup in order to
- validate a certificate.
- </summary>
-</histogram>
-
-<histogram name="Net.SSLHostInfoVerificationTimeMs" units="milliseconds">
- <summary>Time to complete a speculative certificate verification.</summary>
-</histogram>
-
-<histogram name="Net.SSLv3FallbackToRenegoPatchedServer"
- enum="TLSRenegotiationPatched">
- <summary>
- The number of times that we have performed SSLv3 fallback and found a TLS
- renegotiation patched server.
- </summary>
-</histogram>
-
-<histogram name="Net.SSLVerificationMerged">
- <summary>Was a speculative certificate verification used?</summary>
-</histogram>
-
-<histogram name="Net.SSLVerificationMergedMsSaved" units="milliseconds">
- <summary>Time saved by a speculative certificate vertification.</summary>
-</histogram>
-
-<histogram name="Net.TCP_Connection_Idle_Sockets">
- <summary>Number of idle sockets when the Connect() succeeded.</summary>
-</histogram>
-
-<histogram name="Net.TCP_Connection_Latency" units="milliseconds">
- <summary>
- Time from when the Connect() starts until it completes. Only times under 10
- minutes are logged.
- </summary>
-</histogram>
-
-<histogram name="Net.TCP_Connection_Latency_IPv4_No_Race" units="milliseconds">
- <summary>
- Time from when the Connect() starts until it completes when the network
- address only contains IPv4 addresses. Only times under 10 minutes are
- logged.
- </summary>
-</histogram>
-
-<histogram name="Net.TCP_Connection_Latency_IPv4_Wins_Race"
- units="milliseconds">
- <summary>
- Time from when the Connect() starts until it completes when the IPv4
- fallback connection won the race against IPv6. Only times under 10 minutes
- are logged.
- </summary>
-</histogram>
-
-<histogram name="Net.TCP_Connection_Latency_IPv6_Raceable" units="milliseconds">
- <summary>
- Time from when the Connect() starts until it completes when we race an IPv6
- connection against an IPv4 connection with a 300ms delay. Only times under
- 10 minutes are logged.
- </summary>
-</histogram>
-
-<histogram name="Net.TCP_Connection_Latency_IPv6_Solo" units="milliseconds">
- <summary>
- Time from when the Connect() starts until it completes when the network
- address only contains IPv6 addresses. Only times under 10 minutes are
- logged.
- </summary>
-</histogram>
-
-<histogram name="Net.TcpFastOpenSocketConnection" enum="TcpSocketStatus">
- <summary>
- For sockets for which a TCP Fast Open protocol might be used, the result of
- trying to use it.
- </summary>
-</histogram>
-
-<histogram name="Net.TCPForSOCKSSocketIdleTimeBeforeNextUse_ReusedSocket">
- <obsolete>
- see SocketIdleTimeBeforeNextUse_ReusedSocket_TCPforSOCKS
- </obsolete>
- <summary>
- The time an already used TCP socket sat idle before being used for a SOCKS
- request.
- </summary>
-</histogram>
-
-<histogram name="Net.TCPForSOCKSSocketIdleTimeBeforeNextUse_UnusedSocket">
- <obsolete>
- see SocketIdleTimeBeforeNextUse_UnusedSocket_TCPforSOCKS
- </obsolete>
- <summary>
- The time an unused TCP socket sat idle before being used for a SOCKS
- request.
- </summary>
-</histogram>
-
-<histogram name="Net.TCPForSOCKSSocketRequestTime" units="milliseconds">
- <obsolete>
- see SocketRequestTime_TCPforSOCKS
- </obsolete>
- <summary>
- Time from initial SOCKSClientSocketPool::RequestSocket() call until
- successfully acquiring a connected TCP socket.
- </summary>
-</histogram>
-
-<histogram name="Net.TCPForSOCKSSocketType" enum="HttpSocketType">
- <obsolete>
- see SocketType_TCPforSOCKS
- </obsolete>
- <summary>
- The counts of the type of sockets returned by the TCP pool used by the SOCKS
- pool.
- </summary>
-</histogram>
-
-<histogram name="Net.TCPSocketType" enum="HttpSocketType">
- <obsolete>
- Was only used for HTTP[S] connections, renamed to Net.HTTPSocketType.
- </obsolete>
- <summary>The counts of the type of TCP socket returned.</summary>
-</histogram>
-
-<histogram name="Net.Transaction_Bandwidth" units="KB/s">
- <summary>
- (discontinued as of 4/12/09) Effective bandwidth in KByte/Second of
- transactions logged to Transaction_Latency histogram. Note that only
- samples durations greater than zero ms, and less than 1 hour are tallied
- into this ratio.
- </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Connected" units="milliseconds">
- <summary>
- Time from the when the network transaction is requested, until the first
- byte of the header is received.
- </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Connected_New" units="milliseconds">
- <obsolete>
- Replaced by Net.Transaction_Connected_New_b.
- </obsolete>
- <summary>
- When a new connection is established, the time from the when the network
- transaction is requested, until the first byte of the header is received.
- Only items under 10 minutes are logged.
- </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Connected_New_b" units="milliseconds">
- <summary>
- When a new connection is established, the time from the when the network
- transaction is requested, until the first byte of the header is received.
- </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Connected_Under_10" units="milliseconds">
- <obsolete>
- Replaced by Net.Transaction_Connected.
- </obsolete>
- <summary>
- Time from the when the network transaction is requested, until the first
- byte of the header is received. Only items under 10 minutes are logged.
- </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Latency" units="milliseconds">
- <obsolete>
- Replaced by Net.Transaction_Latency_b.
- </obsolete>
- <summary>
- Time from first byte sent until last byte received by the new network stack.
- Only items under 1 hour are logged.
- </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Latency_b" units="milliseconds">
- <summary>
- Time from first byte sent until last byte received by the new network stack.
- </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Latency_Total" units="milliseconds">
- <summary>
- Time from when a network transaction is requested until last byte received
- by the new network stack.
- </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Latency_Total_New_Connection"
- units="milliseconds">
- <summary>
- When an existing TCP/IP connection is NOT reused, the time from when a
- network transaction is requested until last byte received by the new network
- stack.
- </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Latency_Total_New_Connection_Under_10"
- units="milliseconds">
- <obsolete>
- Replaced by Net.Transaction_Latency_Total_New_Connection.
- </obsolete>
- <summary>
- When an existing TCP/IP connection is NOT reused, the time from when a
- network transaction is requested until last byte received by the new network
- stack. Only items under 10 minutes are logged.
- </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Latency_Total_Under_10" units="milliseconds">
- <obsolete>
- Replaced by Net.Transaction_Latency_Total.
- </obsolete>
- <summary>
- Time from when a network transaction is requested until last byte received
- by the new network stack. Only items under 10 minutes are logged.
- </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Latency_Under_10" units="milliseconds">
- <obsolete>
- Replaced by Net.Transaction_Latency.
- </obsolete>
- <summary>
- Time from first byte sent until last byte received by the new network stack.
- Only items under 10 minutes are logged.
- </summary>
-</histogram>
-
-<histogram name="Net.Transaction_Latency_WinHTTP" units="milliseconds">
- <summary>
- Time from first byte sent until last byte received with old WinHTTP network
- stack. Only items under 1 hour are logged.
- </summary>
-</histogram>
-
-<histogram name="Net.TransportSocketIdleTimeBeforeNextUse_ReusedSocket">
- <obsolete/>
- <summary>
- The time an already used TCP socket sat idle before being used (either for
- direct or non-socks use).
- </summary>
-</histogram>
-
-<histogram name="Net.TransportSocketIdleTimeBeforeNextUse_UnusedSocket">
- <obsolete/>
- <summary>
- The time an unused TCP socket sat idle before being used (either for direct
- or non-socks use).
- </summary>
-</histogram>
-
-<histogram name="Net.TransportSocketRequestTime" units="milliseconds">
- <obsolete/>
- <summary>
- Time from initial ClientSocketPool::RequestSocket() call until successfully
- acquiring a connected socket (either for direct or non-socks use).
- </summary>
-</histogram>
-
-<histogram name="Net.TransportSocketType" enum="HttpSocketType">
- <obsolete/>
- <summary>
- The counts of the type of sockets returned by the TCP pool (either for
- direct or non-socks use).
- </summary>
-</histogram>
-
-<histogram name="Net.UdpSocketBindErrorFromPosix" units="PosixError">
- <summary>Posix error code from call to bind() UDP socket.</summary>
-</histogram>
-
-<histogram name="Net.UdpSocketBindErrorFromWinOS" units="WinError">
- <summary>Windows error code from call to bind() UDP socket.</summary>
-</histogram>
-
-<histogram name="Net.UdpSocketRandomBindErrorCode" enum="NetErrorCodes">
- <summary>Chromium error code from call to RandomBind() UDP socket.</summary>
-</histogram>
-
-<histogram name="Net.UDPSocketWinClose" units="milliseconds">
- <summary>The time spent in closesocket call in UDPSocketWin::Close.</summary>
-</histogram>
-
-<histogram name="Net.Wifi.InterfaceCount">
- <summary>
- The number of Wi-fi adapters on the computer. Because the histogram is
- logged each time Chrome performs a Wi-fi scan, it's better to see results in
- the &quot;user count&quot; view.
- </summary>
-</histogram>
-
-<histogram name="Net.Wifi.LbsLatency" units="milliseconds">
- <summary>The time that a request to Location Based Services takes.</summary>
-</histogram>
-
-<histogram name="Net.Wifi.ScanLatency" units="milliseconds">
- <summary>The time that a Wi-fi scan takes.</summary>
-</histogram>
-
-<histogram name="Net.WpadQuickCheckFailure" units="milliseconds">
- <summary>
- Duration of time that a failing WPAD QuickCheck takes. WPAD QuickCheck does
- a name lookup for &quot;wpad&quot; and times out quickly to fail fast when
- there's no WPAD server on the network.
- </summary>
-</histogram>
-
-<histogram name="Net.WpadQuickCheckSuccess" units="milliseconds">
- <summary>
- Duration of time that a successful WPAD QuickCheck takes. WPAD QuickCheck
- does a name lookup for &quot;wpad&quot; and times out quickly to fail fast
- when there's no WPAD server on the network.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.0.NetworkError" enum="NetErrorCodes">
- <summary>
- The network error, if any, of the first pipeline connectivity request.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.0.ResponseCode">
- <summary>
- The HTTP response code, if any, of the first pipeline connectivity response.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.0.Status" enum="HttpPipelineStatus">
- <summary>The result of the first pipeline connectivity request.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.1.NetworkError" enum="NetErrorCodes">
- <summary>
- The network error, if any, of the second pipeline connectivity request.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.1.ResponseCode">
- <summary>
- The HTTP response code, if any, of the second pipeline connectivity
- response.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.1.Status" enum="HttpPipelineStatus">
- <summary>The result of the second pipeline connectivity request.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.2.NetworkError" enum="NetErrorCodes">
- <summary>
- The network error, if any, of the third pipeline connectivity request.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.2.ResponseCode">
- <summary>
- The HTTP response code, if any, of the third pipeline connectivity response.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.2.Status" enum="HttpPipelineStatus">
- <summary>The result of the third pipeline connectivity request.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.3.NetworkError" enum="NetErrorCodes">
- <summary>
- The network error, if any, of the fourth pipeline connectivity request.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.3.ResponseCode">
- <summary>
- The HTTP response code, if any, of the fourth pipeline connectivity
- response.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.3.Status" enum="HttpPipelineStatus">
- <summary>The result of the fourth pipeline connectivity request.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.4.NetworkError" enum="NetErrorCodes">
- <summary>
- The network error, if any, of the fifth pipeline connectivity request.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.4.ResponseCode">
- <summary>
- The HTTP response code, if any, of the fifth pipeline connectivity response.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.4.Status" enum="HttpPipelineStatus">
- <summary>The result of the fifth pipeline connectivity request.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.5.NetworkError" enum="NetErrorCodes">
- <summary>
- The network error, if any, of the stats pipeline connectivity request.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.5.ResponseCode">
- <summary>
- The HTTP response code, if any, of the stats pipeline connectivity response.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.5.Status" enum="HttpPipelineStatus">
- <summary>The result of the stats pipeline connectivity request.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.AllHTTP11" enum="BooleanSuccess">
- <summary>
- True if all requests received by the pipelining test server were HTTP/1.1.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.CanarySuccess" enum="BooleanSuccess">
- <summary>
- True if the non-pipelined canary request sent immediately before the
- pipelining test requests succeeded. Note that if this fails, the rest of the
- NetConnectivity.Pipeline.* stats are not collected.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.Depth">
- <summary>
- The maximum depth of pipelined requests received by the test server.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Pipeline.Success" enum="BooleanSuccess">
- <summary>True if the entire pipeline connectivity trial passed.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.Sent21">
- <obsolete>
- Deprecated 6/25/2012. No longer tracked.
- </obsolete>
- <summary>
- In this experiment, 21 packets were sent to Google via UDP at port 6121 as
- rapidly as possible, just after successfully sending an UMA upload. Each
- packet was numbered, as was its ACK sent back by Google. If no packets (of
- the 21) were ever ACKed, then the port is assumed to be blocked, and no data
- is recorded in this histogram. If the port is not blocked, then this
- histogram shows the number of echo responses received from the first
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Sent21.AckReceivedForNthPacket">
- <obsolete>
- Deprecated 6/25/2012. No longer tracked.
- </obsolete>
- <summary>
- In this experiment, 21 packets were sent to Google via UDP at port 6121 as
- rapidly as possible, just after successfully sending an UMA upload. Each
- packet was numbered, as was its ACK sent back by Google. This histogram
- records, for each packet number, how often we received an ACK for that
- packet.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity.Sent21.GotAnAck" enum="BooleanSuccess">
- <obsolete>
- Deprecated 6/25/2012. No longer tracked.
- </obsolete>
- <summary>
- In this experiment, 21 packets were sent to Google via UDP at port 6121 as
- rapidly as possible, just after successfully sending an UMA upload. If no
- packets (of the 21) were ever ACKed, then the port is assumed to be blocked.
- The histogram shows if we ever got an ACK for a packet in our series of 21.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity.TCP.Fail.100B.RTT" units="ms">
- <obsolete>
- Deprecated 4/2012. No longer tracked.
- </obsolete>
- <summary>The RTT for echoing 100 bytes of TCP data unsuccessfully.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.TCP.Fail.1k.RTT" units="ms">
- <obsolete>
- Deprecated 4/2012. No longer tracked.
- </obsolete>
- <summary>The RTT for echoing 1K bytes of TCP data successfully.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.TCP.Status"
- enum="NetConnectivityProtocolStatus">
- <summary>Status for TCP protocol for echoing</summary>
-</histogram>
-
-<histogram name="NetConnectivity.TCP.Status.100B" enum="NetConnectivityStatus">
- <obsolete>
- Deprecated 4/2012. No longer tracked.
- </obsolete>
- <summary>Status for echoing 100 bytes of TCP data.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.TCP.Status.1K" enum="NetConnectivityStatus">
- <obsolete>
- Deprecated 4/2012. No longer tracked.
- </obsolete>
- <summary>Status for echoing 1K bytes of TCP data.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.TCP.Success" units="ms">
- <summary>The RTT for TCP protocol for echoing</summary>
-</histogram>
-
-<histogram name="NetConnectivity.TCP.Success.100B.RTT" units="ms">
- <obsolete>
- Deprecated 4/2012. No longer tracked.
- </obsolete>
- <summary>The RTT for echoing 100 bytes of TCP data successfully.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.TCP.Success.1K.RTT" units="ms">
- <obsolete>
- Deprecated 4/2012. No longer tracked.
- </obsolete>
- <summary>The RTT for echoing 1K bytes of TCP data successfully.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.UDP.Fail.100B.RTT" units="ms">
- <obsolete>
- Deprecated 4/2012. No longer tracked.
- </obsolete>
- <summary>The RTT for echoing 100 bytes of UDP data unsuccessfully.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.UDP.Fail.1k.RTT" units="ms">
- <obsolete>
- Deprecated 4/2012. No longer tracked.
- </obsolete>
- <summary>The RTT for echoing 1K bytes of UDP data successfully.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.UDP.PacketLoss">
- <obsolete>
- Deprecated 6/25/2012. No longer tracked.
- </obsolete>
- <summary>
- Chrome sends 4 UDP packets in a row to test to see if there is a
- probabalistic dependency in packet loss for consecutive packets. We record
- a bit vector of packets received, where the least significant bit is a 1 if
- the first packet was received, etc. For example, if packets 1 and 3 are
- received, but packets 2 and 4 are lost, then we'd record a sample of binary
- 0101B, or 5.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity.UDP.PacketLoss6">
- <obsolete>
- Deprecated 6/25/2012. No longer tracked.
- </obsolete>
- <summary>
- Chrome sends 6 UDP packets in a row to test to see if there is a
- probabalistic dependency in packet loss for consecutive packets. We record
- a bit vector of packets received, where the least significant bit is a 1 if
- the first packet was received, etc. For example, if all packets other than
- packet 2 and 4 are responded to, then we'd have a sample (in binary) of
- 110101B, or 53.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity.UDP.Status"
- enum="NetConnectivityProtocolStatus">
- <summary>Status for UDP protocol for echoing</summary>
-</histogram>
-
-<histogram name="NetConnectivity.UDP.Status.100B" enum="NetConnectivityStatus">
- <obsolete>
- Deprecated 4/2012. No longer tracked.
- </obsolete>
- <summary>Status for echoing 100 bytes of UDP data.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.UDP.Status.1K" enum="NetConnectivityStatus">
- <obsolete>
- Deprecated 4/2012. No longer tracked.
- </obsolete>
- <summary>Status for echoing 1K bytes of UDP data.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.UDP.Success" units="ms">
- <summary>The RTT for UDP protocol for echoing</summary>
-</histogram>
-
-<histogram name="NetConnectivity.UDP.Success.100B.RTT" units="ms">
- <obsolete>
- Deprecated 4/2012. No longer tracked.
- </obsolete>
- <summary>The RTT for echoing 100 bytes of UDP data successfully.</summary>
-</histogram>
-
-<histogram name="NetConnectivity.UDP.Success.1K.RTT" units="ms">
- <obsolete>
- Deprecated 4/2012. No longer tracked.
- </obsolete>
- <summary>The RTT for echoing 1k bytes of UDP data successfully.</summary>
-</histogram>
-
-<histogram name="NetConnectivity2.Send6.PacketsSent">
- <summary>
- This histogram records how many packets (out of 6 attempted) were sent via
- UDP as rapidly as possible, just after successfully sending an UMA upload.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity2.Send6.SeriesAcked">
- <summary>
- Chrome sends 6 UDP packets in a row to test to see if there is a
- probabalistic dependency in packet loss for consecutive packets. We record
- a bit vector of packets received, where the least significant bit is a 1 if
- the first packet was received, etc. For example, if all packets other than
- packet 2 and 4 are responded to, then we'd have a sample (in binary) of
- 110101B, or 53.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity2.Sent21">
- <summary>
- In this experiment, 21 packets were sent to Google via UDP as rapidly as
- possible, just after successfully sending an UMA upload. Each packet was
- numbered, as was its ACK sent back by Google. If no packets (of the 21) were
- ever ACKed, then the port is assumed to be blocked, and no data is recorded
- in this histogram. If the port is not blocked, then this histogram shows the
- number of echo responses received from the first
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity2.Sent21.AckReceivedForNthPacket">
- <summary>
- In this experiment, 21 packets were sent to Google via UDP as rapidly as
- possible, just after successfully sending an UMA upload. Each packet was
- numbered, as was its ACK sent back by Google. This histogram records, for
- each packet number, how often we received an ACK for that packet.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity2.Sent21.GotAnAck" enum="BooleanSuccess">
- <summary>
- In this experiment, 21 packets were sent to Google via UDP as rapidly as
- possible, just after successfully sending an UMA upload. If no packets (of
- the 21) were ever ACKed, then the port is assumed to be blocked. The
- histogram shows if we ever got an ACK for a packet in our series of 21.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity2.Sent21.PacketsSent">
- <summary>
- This histogram records how many packets (out of 21 attempted) were sent via
- UDP as rapidly as possible, just after successfully sending an UMA upload.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity3">
- <summary>
- In this experiment, 21 packets were sent to Google via UDP on port 443 or
- 6121.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity3.NonPacedPacket.Sent21.443.100B.PacketDelay"
- units="ms">
- <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.NonPacedPacket.Sent21.443.1200B.PacketDelay"
- units="ms">
- <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.NonPacedPacket.Sent21.443.500B.PacketDelay"
- units="ms">
- <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.NonPacedPacket.Sent21.6121.100B.PacketDelay"
- units="ms">
- <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.NonPacedPacket.Sent21.6121.1200B.PacketDelay"
- units="ms">
- <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.NonPacedPacket.Sent21.6121.500B.PacketDelay"
- units="ms">
- <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.NonPacedPacket.Sent21.GotAnAck"
- enum="BooleanSuccess">
- <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT" units="ms">
- <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.PacedPacket.Sent21.443.100B.PacketDelay"
- units="ms">
- <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.PacedPacket.Sent21.443.1200B.PacketDelay"
- units="ms">
- <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.PacedPacket.Sent21.443.500B.PacketDelay"
- units="ms">
- <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.PacedPacket.Sent21.6121.100B.PacketDelay"
- units="ms">
- <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.PacedPacket.Sent21.6121.1200B.PacketDelay"
- units="ms">
- <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.PacedPacket.Sent21.6121.500B.PacketDelay"
- units="ms">
- <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.PacedPacket.Sent21.GotAnAck"
- enum="BooleanSuccess">
- <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.PacedPacket.Sent21.Success.RTT" units="ms">
- <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.StartPacket.Send6.PacketsSent">
- <obsolete>
- Deprecated 9/2012. No longer tracked.
- </obsolete>
- <summary>
- This histogram records how many packets (out of 6 attempted) were sent via
- UDP as rapidly as possible, just after successfully sending an UMA upload.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity3.StartPacket.Sent21.443.100B.PacketDelay"
- units="ms">
- <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.StartPacket.Sent21.443.1200B.PacketDelay"
- units="ms">
- <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.StartPacket.Sent21.443.500B.PacketDelay"
- units="ms">
- <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.StartPacket.Sent21.6121.100B.PacketDelay"
- units="ms">
- <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.StartPacket.Sent21.6121.1200B.PacketDelay"
- units="ms">
- <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.StartPacket.Sent21.6121.500B.PacketDelay"
- units="ms">
- <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.StartPacket.Sent21.GotAnAck"
- enum="BooleanSuccess">
- <summary/>
-</histogram>
-
-<histogram name="NetConnectivity3.StartPacket.Sent21.Success.RTT" units="ms">
- <summary/>
-</histogram>
-
-<histogram name="NetConnectivity4">
- <summary>
- In this experiment, a few packets were sent from Google to clients via UDP
- on port 443 or 80 to perform net connectivity test.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity5">
- <summary>
- In this experiment, a few packets were sent from Google to clients via UDP
- on port 443 or 80 to perform net connectivity test.
- </summary>
-</histogram>
-
-<histogram name="NetConnectivity5.TestFailed.WritePending"
- enum="BooleanSuccess">
- <summary>
- Next NetConnectivity5 experiment weren't started because there is an
- outstading pending write.
- </summary>
-</histogram>
-
-<histogram name="Network.3G.Gobi.Activation" units="milliseconds">
- <summary>The time the Gobi modem takes to complete activation.</summary>
-</histogram>
-
-<histogram name="Network.3G.Gobi.Connect" units="milliseconds">
- <summary>
- The time the Gobi modem takes to connect to the cellular network.
- </summary>
-</histogram>
-
-<histogram name="Network.3G.Gobi.Disconnect" units="milliseconds">
- <summary>
- The time the Gobi modem takes to disconnect from the cellular network.
- </summary>
-</histogram>
-
-<histogram name="Network.3G.Gobi.FirmwareDownload.Attempts">
- <summary>Number of attempts taken to install Gobi firmware.</summary>
-</histogram>
-
-<histogram name="Network.3G.Gobi.FirmwareDownload.Time" units="milliseconds">
- <summary>The time it takes to install Gobi firmware.</summary>
-</histogram>
-
-<histogram name="Network.3G.Gobi.Registration" units="milliseconds">
- <summary>
- The time the Gobi modem takes to register on the cellular network.
- </summary>
-</histogram>
-
-<histogram name="Network.3G.Gobi.SetPower" enum="Network3GGobiError">
- <summary>Errors experienced during Gobi device powerup.</summary>
-</histogram>
-
-<histogram name="Network.Cellular.TimeOnline" units="seconds">
- <summary>
- Chrome OS network metric sampling the time spent using Cellular to transport
- data. These data are mostly useful when summed and compared to TimeOnline
- for other network technologies (e.g. WiFi vs Cellular).
- </summary>
-</histogram>
-
-<histogram name="Network.Cellular.TimeToConfig" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to join a 3G/Cellular
- network and configure Layer 3 state.
- </summary>
-</histogram>
-
-<histogram name="Network.Cellular.TimeToOnline" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to determine that a
- 3G/Cellular network is online after configuring Layer 3 state.
- </summary>
-</histogram>
-
-<histogram name="Network.Cellular.TimeToPortal" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to determine that a
- 3G/Cellular network is in a captive portal after configuring Layer 3 state.
- </summary>
-</histogram>
-
-<histogram name="Network.Cellular.UsageRequestStatus"
- enum="NetworkCellularUsageRequestStatus">
- <summary>Chrome OS cellular usage API request status codes.</summary>
-</histogram>
-
-<histogram name="Network.Ethernet.TimeOnline" units="seconds">
- <summary>
- Chrome OS network metric sampling the time spent using Ethernet to transport
- data. These data are mostly useful when summed and compared to TimeOnline
- for other network technologies (e.g. WiFi vs Cellular).
- </summary>
-</histogram>
-
-<histogram name="Network.Ethernet.TimeToConfig" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to join a wired
- Ethernet network and configure Layer 3 state (typically acquire a DHCP
- lease).
- </summary>
-</histogram>
-
-<histogram name="Network.Ethernet.TimeToOnline" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to determine that an
- Ethernet network is online after configuring Layer 3 state.
- </summary>
-</histogram>
-
-<histogram name="Network.Ethernet.TimeToPortal" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to determine that an
- Ethernet network is in a captive portal after configuring Layer 3 state.
- </summary>
-</histogram>
-
-<histogram name="Network.MigrationNssToPem"
- enum="MigrationNssToPemNetworkTypes">
- <summary>
- Chrome OS metric counting the number of network configurations that
- contained a NSS nickname identifying a CA certificate, which triggered the
- migration to PEM encoding. This metric doesn't consider whether the
- migration was successful but once a migration was successful the nickname is
- removed.
- </summary>
-</histogram>
-
-<histogram name="Network.ServiceErrors" enum="NetworkServiceError">
- <summary>Chrome OS connection manager service errors seen.</summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.3GPPRegistrationDelayedDrop"
- enum="NetworkCellular3GPPRegistrationDelayedDrop">
- <summary>
- Chrome OS network diagnostic metric sampling the number of cellular network
- flakes. A network flake occurs when the signal strength goes below detection
- level for a short duration.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.AutoConnectTotalTime"
- units="milliseconds">
- <summary>
- Chrome OS network diagnostic metric sampling the total amount of time spent
- from the start of the first auto-connect request until when the cellular
- modem successfully connects to the network.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.AutoConnectTries">
- <summary>
- Chrome OS network diagnostic metric sampling the number of auto-connect
- tries that were attempted before the cellular modem successfully connected
- to the network.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.DHCPOptionFailureDetected"
- enum="NetworkDHCPOptionFailure">
- <summary>
- Chrome OS network metric that tracks the number of DHCP option failures
- encountered by Shill. This indicates that Shill is using minimal DHCP
- options due to suspected MTU issues on the return path from the DHCP server
- back to the client.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.Disconnect"
- enum="NetworkDisconnectType">
- <summary>
- Chrome OS network usage metric that tracks whether the cellular network was
- disconnected due to an error or was explicitly disconnected by the user.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.Drop" enum="NetworkCellularTechnology">
- <summary>
- Chrome OS cellular network metric that tracks the number of drops based on
- the network technology.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.OutOfCreditsReason"
- enum="NetworkCellularOutOfCreditsReason">
- <summary>
- Chrome OS cellular network metric that tracks the number of out-of-credits
- detected based on the cause that triggered the out-of-credits.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.PortalAttempts">
- <summary>
- Chrome OS network diagnostic metric sampling the number of portal detection
- attempts per pass for a cellular network. This includes failure, timeout and
- successful attempts.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.PortalAttemptsToOnline">
- <summary>
- Chrome OS network diagnostic metric sampling the total number of portal
- detection attempts performed for a cellular network between the Connected
- and Online state. This includes failure, timeout and successful attempts.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.PortalResult"
- enum="NetworkPortalResult">
- <summary>
- Chrome OS network diagnostic metric sampling the result of portal detections
- for a cellular network.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.SignalStrengthBeforeDrop">
- <summary>
- Chrome OS network metric sampling the signal strength (0-100) of the
- cellular modem before it dropped from the network.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.TimeOnline" units="seconds">
- <summary>
- Chrome OS network metric sampling the time spent using cellular to transport
- data. These data are mostly useful when summed and compared to TimeOnline
- for other network technologies (e.g. WiFi vs Cellular).
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.TimeToConfig" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to join a cellular
- network and configure Layer 3 state.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.TimeToConnect" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to connect a cellular
- modem.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.TimeToDisable" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to disable a cellular
- modem.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.TimeToEnable" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to enable a cellular
- modem.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.TimeToInitialize" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to initialize a
- cellular modem.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.TimeToOnline" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to determine that a
- cellular network is online after configuring Layer 3 state.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.TimeToPortal" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to determine that a
- cellular network is in a captive portal after configuring Layer 3 state.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Cellular.TimeToScan" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to scan a cellular
- network and register a modem.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.CorruptedProfile" enum="NetworkCorruptedProfile">
- <summary>
- Chrome OS cellular network metric that tracks the number of corrupted
- profiles encountered by Shill.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.DHCPOptionFailureDetected"
- enum="NetworkDHCPOptionFailure">
- <summary>
- Chrome OS network metric that tracks the number of DHCP option failures
- encountered by Shill. This indicates that Shill is using minimal DHCP
- options due to suspected MTU issues on the return path from the DHCP server
- back to the client.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.Disconnect"
- enum="NetworkDisconnectType">
- <summary>
- Chrome OS network usage metric that tracks whether the Ethernet network was
- disconnected due to an error or was explicitly disconnected by the user.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.LinkMonitorBroadcastErrorsAtFailure">
- <summary>
- Chrome OS network performance metric that tracks the number of LinkMonitor
- broadcast errors that were accrued on an Ethernet network at the time that
- the link was declaired to be failed.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.LinkMonitorFailure"
- enum="LinkMonitorFailureType">
- <summary>
- Chrome OS metric that signals the type of failure the LinkMonitor
- encountered which caused it to stop monitoring an Ethernet network.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.LinkMonitorResponseTimeSample"
- units="milliseconds">
- <summary>
- Chrome OS network performance metric that tracks the number of milliseconds
- between an ARP request and a received reply on an Ethernet network.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.LinkMonitorSecondsToFailure"
- units="seconds">
- <summary>
- Chrome OS network performance metric that tracks the number of seconds from
- the start of the LinkMonitor until failure on an Ethernet network.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.LinkMonitorUnicastErrorsAtFailure">
- <summary>
- Chrome OS network performance metric that tracks the number of LinkMonitor
- unicast errors that were accrued on an Ethernet network at the time that the
- link was declaired to be failed.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.PortalAttempts">
- <summary>
- Chrome OS network diagnostic metric sampling the number of portal detection
- attempts per pass for an Ethernet network. This includes failure, timeout
- and successful attempts.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.PortalAttemptsToOnline">
- <summary>
- Chrome OS network diagnostic metric sampling the total number of portal
- detection attempts performed for an Ethernet network between the Connected
- and Online state. This includes failure, timeout and successful attempts.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.PortalResult"
- enum="NetworkPortalResult">
- <summary>
- Chrome OS network diagnostic metric sampling the result of portal detections
- for an Ethernet network.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.TimeOnline" units="seconds">
- <summary>
- Chrome OS network metric sampling the time spent using Ethernet to transport
- data. These data are mostly useful when summed and compared to TimeOnline
- for other network technologies (e.g. WiFi vs Cellular).
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.TimeToConfig" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to join a wired
- Ethernet network and configure Layer 3 state (typically acquire a DHCP
- lease).
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.TimeToInitialize" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to initialize an
- Ethernet device.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.TimeToOnline" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to determine that an
- Ethernet network is online after configuring Layer 3 state.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Ethernet.TimeToPortal" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to determine that an
- Ethernet network is in a captive portal after configuring Layer 3 state.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.ServiceErrors" enum="NetworkServiceError">
- <summary>Chrome OS connection manager service errors seen.</summary>
-</histogram>
-
-<histogram name="Network.Shill.TerminationActionResult"
- enum="ShillTerminationActionResult">
- <obsolete>
- Deprecated 10/2012. No longer tracked.
- </obsolete>
- <summary>
- Chrome OS network diagnostic metric sampling the number of termination
- actions that successfully complete or fail when shill terminates.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.TerminationActionResult.OnSuspend"
- enum="ShillTerminationActionResult">
- <summary>
- Chrome OS network diagnostic metric sampling the number of termination
- actions that successfully complete or fail when shill suspends.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.TerminationActionResult.OnTerminate"
- enum="ShillTerminationActionResult">
- <summary>
- Chrome OS network diagnostic metric sampling the number of termination
- actions that successfully complete or fail when shill terminates.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.TerminationActionTime.OnSuspend"
- units="milliseconds">
- <summary>
- Chrome OS network diagnostic metric sampling the time in milliseconds it
- takes termination actions to complete when shill suspends.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.TerminationActionTime.OnTerminate"
- units="milliseconds">
- <summary>
- Chrome OS network diagnostic metric sampling the time in milliseconds it
- takes termination actions to complete when shill terminates.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.TimeToDrop" units="seconds">
- <summary>
- Chrome OS network stability metric sampling the time in seconds between the
- networking going online to going offline. Offline events due to device
- shutdown or suspend are ignored (along with the online time before that
- offline event).
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Vpn.Driver" enum="VPNDriver">
- <summary>
- Chrome OS network usage metric sampled on each successful VPN connection
- that tracks the VPN connection type.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Vpn.RemoteAuthenticationType"
- enum="VPNRemoteAuthenticationType">
- <summary>
- Chrome OS network usage metric sampled on each successful VPN connection
- that tracks the remote authentication method.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.VPN.TimeToConfig" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to configure Layer 3
- state on a VPN network (typically acquire a DHCP lease).
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.VPN.TimeToOnline" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to determine that a
- WiMax network is online after configuring Layer 3 state.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Vpn.UserAuthenticationType"
- enum="VPNUserAuthenticationType">
- <summary>
- Chrome OS network usage metric sampled on each successful VPN connection
- that tracks the user authentication method.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.ApDisconnectReason" enum="WiFiReasonCode">
- <summary>
- Chrome OS network usage metric. Reason code reported when the AP
- disconnects a wifi connection.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.ApDisconnectType" enum="WiFiStatusType">
- <summary>
- Chrome OS network usage metric. Broad category of reason AP disconnected a
- WiFi connection.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.ApMode" enum="WiFiApMode">
- <summary>
- Chrome OS network usage metric. The AP mode setting for each successful
- WiFi connection.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.Channel" enum="NetworkChannelType">
- <summary>
- Chrome OS network usage metric. The channel used for each successful WiFi
- connection.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.ClientDisconnectReason"
- enum="WiFiReasonCode">
- <summary>
- Chrome OS network usage metric. Reason code reported when the client
- disconnects a wifi connection.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.ClientDisconnectType" enum="WiFiStatusType">
- <summary>
- Chrome OS network usage metric. Broad category of reason client
- disconnected a WiFi connection.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.DHCPOptionFailureDetected"
- enum="NetworkDHCPOptionFailure">
- <summary>
- Chrome OS network metric that tracks the number of DHCP option failures
- encountered by Shill. This indicates that Shill is using minimal DHCP
- options due to suspected MTU issues on the return path from the DHCP server
- back to the client.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.Disconnect" enum="NetworkDisconnectType">
- <summary>
- Chrome OS network usage metric that tracks whether an 802.11 wireless
- network was disconnected due to an error or was explicitly disconnected by
- the user.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.EapInnerProtocol" enum="EAPInnerProtocol">
- <summary>
- Chrome OS network usage metric sampled on each successful 802.1x wireless
- connection that tracks the configured inner authentication method.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.EapOuterProtocol" enum="EAPOuterProtocol">
- <summary>
- Chrome OS network usage metric sampled on each successful 802.1x wireless
- connection that tracks the configured outer authentication method.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.FrequenciesConnectedEver">
- <summary>
- Chrome OS metric sampling the number of different frequencies (i.e.
- channels) on which a device has connected to a WiFi network. This value is
- sampled every time a WiFi connection is established
- (WPASupplicant::kInterfaceStateCompleted). Note that the word
- &quot;Ever&quot; in the metric name is misleading. ChromeOS actually ages
- out historical information, currently after 3 weeks.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.LinkMonitorBroadcastErrorsAtFailure">
- <summary>
- Chrome OS network performance metric that tracks the number of LinkMonitor
- broadcast errors that were accrued on an 802.11 wireiless network at the
- time that the link was declaired to be failed.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.LinkMonitorFailure"
- enum="LinkMonitorFailureType">
- <summary>
- Chrome OS metric that signals the type of failure the LinkMonitor
- encountered which caused it to stop monitoring an 802.11 wireless network.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.LinkMonitorResponseTimeSample"
- units="milliseconds">
- <summary>
- Chrome OS network performance metric that tracks the number of milliseconds
- between an ARP request and a received reply on an 802.11 wireless network.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.LinkMonitorSecondsToFailure"
- units="seconds">
- <summary>
- Chrome OS network performance metric that tracks the number of seconds from
- the start of the LinkMonitor until failure on an 802.11 wireless network.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.LinkMonitorUnicastErrorsAtFailure">
- <summary>
- Chrome OS network performance metric that tracks the number of LinkMonitor
- unicast errors that were accrued on an 802.11 wireless network at the time
- that the link was declaired to be failed.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.PhyMode" enum="NetworkPhyModeType">
- <summary>
- Chrome OS network usage metric. The channel type used for each successful
- WiFi connection.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.PortalAttempts">
- <summary>
- Chrome OS network diagnostic metric sampling the number of portal detection
- attempts per pass for an 802.11 wireless network. This includes failure,
- timeout and successful attempts.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.PortalAttemptsToOnline">
- <summary>
- Chrome OS network diagnostic metric sampling the total number of portal
- detection attempts performed for an 802.11 wireless network between the
- Connected and Online state. This includes failure, timeout and successful
- attempts.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.PortalResult" enum="NetworkPortalResult">
- <summary>
- Chrome OS network diagnostic metric sampling the result of portal detections
- for an 802.11 wireless network.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.ScanResult" enum="WiFiScanResult">
- <summary>
- Chrome OS network usage metric describing, for a wifi scan attempt, what
- scan method is used and whether it ends in a connection.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiFi.ScanTimeInEbusy" units="milliseconds">
- <summary>
- Chrome OS network usage metric describing, for a wifi scan attempt, how many
- milliseconds were spent waiting to talk to the kernel/drivers.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.Security" enum="NetworkSecurityType">
- <summary>
- Chrome OS network usage metric. The security setting for each successful
- WiFi connection.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.SignalStrength" units="negative dBm">
- <summary>
- Chrome OS network metric indicating the negative of the dBm received signal
- strength recorded at the time a successful WiFi connection started.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.TimeOnline" units="seconds">
- <summary>
- Chrome OS network metric sampling the time spent using WiFi to transport
- data. These data are mostly useful when summed and compared to TimeOnline
- for other network technologies (e.g. WiFi vs Cellular).
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.TimeResumeToReady" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time from the resume event
- to the time when an 802.11 wireless network has configured its Layer 3
- state.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.TimeToConfig" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to configure Layer 3
- state on an 802.11 wireless network (typically acquire a DHCP lease).
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.TimeToConnect" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to connect to a WiFi
- Basic Service Set (which consists of the access point and associated
- stations on a particular WiFi channel for a specific network).
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.TimeToInitialize" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to initialize an
- 802.11 wireless device.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.TimeToJoin" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to join (associate
- plus authenticate) an 802.11 wireless network.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.TimeToOnline" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to determine that an
- 802.11 wireless network is online after configuring Layer 3 state.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.TimeToPortal" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to determine that an
- 802.11 wireless network is in a captive portal after configuring Layer 3
- state.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.TimeToScan" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to scan WiFi until a
- connection is found.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.Wifi.TimeToScanAndConnect" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time between the beginning
- of a WiFi scan (if the scan includes both a progressive scan and a full
- scan, the TimeToScanAndConnect starts with the first scan of the series) and
- the completion of a successful connection.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiMax.DHCPOptionFailureDetected"
- enum="NetworkDHCPOptionFailure">
- <summary>
- Chrome OS network metric that tracks the number of DHCP option failures
- encountered by Shill. This indicates that Shill is using minimal DHCP
- options due to suspected MTU issues on the return path from the DHCP server
- back to the client.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiMax.TimeToConfig" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to configure Layer 3
- state on a WiMax network (typically acquire a DHCP lease).
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiMax.TimeToInitialize" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to initialize a WiMax
- device.
- </summary>
-</histogram>
-
-<histogram name="Network.Shill.WiMax.TimeToOnline" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to determine that a
- WiMax network is online after configuring Layer 3 state.
- </summary>
-</histogram>
-
-<histogram name="Network.TimeToConfig.Cellular" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to join a 3G/Cellular
- network and configure Layer 3 state. Note this metric is deprecated; see
- Network.Cellular.TimeToConfig.
- </summary>
-</histogram>
-
-<histogram name="Network.TimeToConfig.Ethernet" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to join a wired
- Ethernet network and configure Layer 3 state (typically acquire a DHCP
- lease). Note this metric is deprecated; see Network.Ethernet.TimeToConfig.
- </summary>
-</histogram>
-
-<histogram name="Network.TimeToConfig.Wifi" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to configure Layer 3
- state on an 802.11 wireless network (typically acquire a DHCP lease). Note
- this metric is deprecated; see Network.Wifi.TimeToConfig.
- </summary>
-</histogram>
-
-<histogram name="Network.TimeToDrop" units="seconds">
- <summary>
- Chrome OS network stability metric sampling the time in seconds between the
- networking going online to going offline. Offline events due to device
- shutdown or suspend are ignored (along with the online time before that
- offline event).
- </summary>
-</histogram>
-
-<histogram name="Network.TimeToJoin.Wifi" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to join (associate
- plus authenticate) an 802.11 wireless network. Note this metric is
- deprecated; see Network.Wifi.TimeToJoin.
- </summary>
-</histogram>
-
-<histogram name="Network.Wifi.AuthMode" enum="NetworkAuthModeType">
- <summary>
- Chrome OS network performance metric sampling the time to configure Layer 3
- state on an 802.11 wireless network (typically acquire a DHCP lease).
- </summary>
-</histogram>
-
-<histogram name="Network.Wifi.BitRate" units="bps">
- <summary>
- Network metric reporting the download speed test results run at setup time.
- Recorded at least once per day.
- </summary>
-</histogram>
-
-<histogram name="Network.Wifi.Channel" enum="NetworkChannelType">
- <summary>
- Chrome OS network usage metric. The channel used for each successful WiFi
- connection.
- </summary>
-</histogram>
-
-<histogram name="Network.Wifi.Idle.NoiseLevel" units="negative dBm">
- <summary>
- Network metric indicating the negative of the dBm noise level recorded at
- the time the metric is collected. Reported at least once per day and only
- when the device is idle.
- </summary>
-</histogram>
-
-<histogram name="Network.Wifi.Idle.SignalLevel" units="negative dBm">
- <summary>
- Network metric indicating the negative of the dBm received signal level
- recorded at the time the metric is collected. Reported at least once per
- day and only when the device is idle.
- </summary>
-</histogram>
-
-<histogram name="Network.Wifi.Idle.SignalToNoiseRatio" units="negative dBm">
- <summary>
- Network metric indicating signal minus noise in dBm recorded at the time the
- metrics is collected. Reported at least once per day and only when the
- device is idle.
- </summary>
-</histogram>
-
-<histogram name="Network.Wifi.NoiseLevel" units="negative dBm">
- <summary>
- Network metric indicating the negative of the dBm noise level recorded at
- the time the metric is collected. Reported at least once per day.
- </summary>
-</histogram>
-
-<histogram name="Network.Wifi.PhyMode" enum="NetworkPhyModeType">
- <summary>
- Chrome OS network usage metric. The channel type used for each successful
- WiFi connection.
- </summary>
-</histogram>
-
-<histogram name="Network.Wifi.RoundTripTime" units="ms">
- <summary>
- Network metric reporting the average round trip time to the wifi gateway.
- Recorded at least once per day.
- </summary>
-</histogram>
-
-<histogram name="Network.Wifi.Security" enum="NetworkSecurityType">
- <summary>
- Chrome OS network usage metric. The security setting for each successful
- WiFi connection.
- </summary>
-</histogram>
-
-<histogram name="Network.Wifi.SignalLevel" units="negative dBm">
- <summary>
- Network metric indicating the negative of the dBm received signal level
- recorded at the time the metric is collected. Reported at least once per
- day.
- </summary>
-</histogram>
-
-<histogram name="Network.Wifi.SignalToNoiseRatio" units="negative dBm">
- <summary>
- Network metric indicating signal minus noise in dBm recorded at the time the
- metrics is collected. Reported at least once per day.
- </summary>
-</histogram>
-
-<histogram name="Network.Wifi.TimeOnline" units="seconds">
- <summary>
- Chrome OS network metric sampling the time spent using WiFi to transport
- data. These data are mostly useful when summed and compared to TimeOnline
- for other network technologies (e.g. WiFi vs Cellular).
- </summary>
-</histogram>
-
-<histogram name="Network.Wifi.TimeResumeToReady" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time from the resume event
- to the time when an 802.11 wireless network has configured its Layer 3
- state.
- </summary>
-</histogram>
-
-<histogram name="Network.Wifi.TimeToConfig" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to configure Layer 3
- state on an 802.11 wireless network (typically acquire a DHCP lease).
- </summary>
-</histogram>
-
-<histogram name="Network.Wifi.TimeToJoin" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to join (associate
- plus authenticate) an 802.11 wireless network.
- </summary>
-</histogram>
-
-<histogram name="Network.Wifi.TimeToOnline" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to determine that an
- 802.11 wireless network is online after configuring Layer 3 state.
- </summary>
-</histogram>
-
-<histogram name="Network.Wifi.TimeToPortal" units="milliseconds">
- <summary>
- Chrome OS network performance metric sampling the time to determine that an
- 802.11 wireless network is in a captive portal after configuring Layer 3
- state.
- </summary>
-</histogram>
-
-<histogram name="NewTabPage.ActionAndroid" enum="NewTabPageActionAndroid">
- <summary>
- Actions taken by users from the new tab page on Android. These actions may
- navigate away from the NTP (e.g. searching in the omnibox or opening a
- bookmark), but can also happen without navigating away from the NTP (e.g.
- opening a bookmark in a new tab).
- </summary>
-</histogram>
-
-<histogram name="NewTabPage.AppsPageDragSource" enum="AppsPageDragSource">
- <summary>
- Histogram for the source of app page drags. For any succesful drop onto an
- apps pane of the NTP, this logs where the drag originated.
- </summary>
-</histogram>
-
-<histogram name="NewTabPage.BookmarkActionAndroid"
- enum="NewTabPageBookmarkActionAndroid">
- <summary>
- Actions taken by users on partner bookmarks (editing / renaming) on the NTP
- on Android.
- </summary>
-</histogram>
-
-<histogram name="NewTabPage.DefaultPageType" enum="NtpPaneType">
- <summary>The default pane when the NTP is first opened.</summary>
-</histogram>
-
-<histogram name="NewTabPage.HoverTimeClicked">
- <summary>
- Histogram of the time, in milliseconds, users have the cursor over a most
- visited thumbnail before clicking.
- </summary>
-</histogram>
-
-<histogram name="NewTabPage.HoverTimeNotClicked">
- <summary>
- Histogram of the time, in milliseconds, users have the cursor over a most
- visited thumbnail before moving it away from the thumbnail without clicking.
- </summary>
-</histogram>
-
-<histogram name="NewTabPage.MobilePromo" enum="NewTabPageMobilePromo">
- <summary>
- Android: Tallies counts for how the user interacted with the NTP promo page.
- </summary>
-</histogram>
-
-<histogram name="NewTabPage.MostVisited">
- <summary>
- Histogram for user clicks of the most visited thumbnails. The value is equal
- to the index of the thumbnail.
- </summary>
-</histogram>
-
-<histogram name="NewTabPage.MostVisitedAction" enum="NtpFollowAction">
- <summary>
- Action taken by the user on the Most Visited NTP pane. If the user switches
- panes during this use of the NTP, this action is sometimes not recorded. Ask
- mpearson@ for details.
- </summary>
-</histogram>
-
-<histogram name="NewTabPage.MostVisitedTilePlacementExperiment"
- enum="NtpTileExperimentActions">
- <summary>
- Records anomalous events for the Most Visited Tile Placement experiment,
- where it is unable to operate as expected. These are recorded during New Tab
- Page load time, once for every NTP.
- </summary>
-</histogram>
-
-<histogram name="NewTabPage.NonVisibleScreenshots">
- <summary>
- The number of screenshots that were cached for the non-visible but ranked
- suggestions on the Suggested NTP pane.
- </summary>
-</histogram>
-
-<histogram name="NewTabPage.NonVisibleSuggestedSiteRank">
- <summary>
- Given that the user has typed a URL, and given that that specific URL was
- ranked but not visible on the Suggested pane of the NTP, this is the rank
- that the Suggested pane had for that URL.
- </summary>
-</histogram>
-
-<histogram name="NewTabPage.NumberOfExternalTiles">
- <summary>
- The number of external tiles that are displayed on the NTP. External tiles
- are those for which the visuals are handled by the page itself, not by the
- iframe. Recorded before changing focus away from the NTP, be it by
- navigating to a URL, switching tabs, changing the active window or closing
- the tab/shutting down Chrome.
- </summary>
-</histogram>
-
-<histogram name="NewTabPage.NumberOfMouseOvers">
- <summary>
- The total number of times the user hovered the mouse over Most Visited tile
- or title elements before changing focus away from the NTP, be it by
- navigating to a URL, switching tabs, changing the active window or closing
- the tab/shutting down Chrome.
- </summary>
-</histogram>
-
-<histogram name="NewTabPage.OtherSessionsMenu" enum="NtpOtherSessionsType">
- <summary>
- Histogram for usage of the menu on the NTP that allows the user to access
- tabs from other devices.
- </summary>
-</histogram>
-
-<histogram name="NewTabPage.PreviousSelectedPageType" enum="NtpPaneType">
- <summary>
- The pane that had been previously selected when the user switches panes in
- the NTP.
- </summary>
-</histogram>
-
-<histogram name="NewTabPage.Promo.Bubble" enum="NtpPromoAction">
- <summary>Histogram for NTP bubble promo activity.</summary>
-</histogram>
-
-<histogram name="NewTabPage.Promo.Notification" enum="NtpPromoAction">
- <summary>Histogram for NTP notification promo activity.</summary>
-</histogram>
-
-<histogram name="NewTabPage.SearchURLs.Total">
- <summary>TBD.</summary>
-</histogram>
-
-<histogram name="NewTabPage.SelectedPageType" enum="NtpPaneType">
- <summary>The pane selected when the user switches panes in the NTP.</summary>
-</histogram>
-
-<histogram name="NewTabPage.SessionRestore">
- <summary>
- Histogram for user clicks of the Recently Closed items. The value is the
- recency of the entry being restored (0 is most recent).
- </summary>
-</histogram>
-
-<histogram name="NewTabPage.SingleSessionPageSwitches">
- <summary>
- Histogram to track how many times a user switched pages in a single NTP
- session.
- </summary>
-</histogram>
-
-<histogram name="NewTabPage.SuggestedSite">
- <summary>
- Histogram for user clicks of the suggested site thumbnails. The value is
- equal to the index of the thumbnail.
- </summary>
-</histogram>
-
-<histogram name="NewTabPage.SuggestedSitesAction" enum="NtpFollowAction">
- <summary>Action taken by the user on the Suggested Sites NTP pane.</summary>
-</histogram>
-
-<histogram name="NewTabPage.SuggestedSitesLoadTime">
- <summary>Time to load the Suggested Sites NTP pane, in milliseconds.</summary>
-</histogram>
-
-<histogram name="NewTabPage.SuggestedSitesViewTime">
- <summary>Time spent on the Suggested Sites NTP pane, in seconds.</summary>
-</histogram>
-
-<histogram name="NewTabPage.SuggestionsImpression">
- <summary>
- Histogram for impressions on the various most visited tiles. The value is
- equal to the index of the thumbnail.
- </summary>
-</histogram>
-
-<histogram name="NewTabPage.SuggestionsType" enum="NtpSuggestionsType">
- <summary>
- Indicate, for each impression of the New Tab Page, whether the suggestions
- were obtained from the client or server. Recorded before changing focus away
- from the NTP, be it by navigating to a URL, switching tabs, changing the
- active window or closing the tab/shutting down Chrome.
- </summary>
-</histogram>
-
-<histogram name="NewTabPage.ThumbnailErrorRate">
- <summary>
- The percentage of errors per attempts to load image thumbnails on the New
- Tab Page. When an error occurs, a grey tile is shown instead of a thumbnail
- image. We measure the rate instead of the number of errors because multiple
- attempts are made to load images at different times during the NTP's
- lifetime. Each NTP session's error rate is logged after the user navigates
- to a new URL from that NTP.
- </summary>
-</histogram>
-
-<histogram name="NewTabPage.ThumbnailFallbackRate" units="%">
- <summary>
- The percentage of times most visited tiles use the fallback thumbnail. Only
- requests that actually specify a fallback thumbnail are considered here. We
- measure the rate instead of the number of errors because multiple attempts
- are made to load thumbnails at different times during the NTP's lifetime.
- Each NTP session's error rate is logged after the user navigates to a new
- URL from that NTP.
- </summary>
-</histogram>
-
-<histogram name="NewTabPage.VisibleScreenshots">
- <summary>
- The number of screenshots that were cached for the visible suggestions on
- the Suggested NTP pane.
- </summary>
-</histogram>
-
-<histogram name="NewTabPage.VisibleSuggestedSiteRank">
- <summary>
- Given that the user has typed a URL, and given that that specific URL was
- visible on the Suggested pane of the NTP, this is the rank that the
- Suggested pane had for that URL.
- </summary>
-</histogram>
-
-<histogram name="Notifications.Actions" enum="NotificationActionType">
- <summary>
- The actions taken on notifications, recorded every time they happen. This
- histogram will record every single event that happens separately.
- </summary>
-</histogram>
-
-<histogram name="Notifications.PerNotificationActions"
- enum="NotificationActionType">
- <summary>
- The actions taken on notifications, recorded once per notification, when it
- is closed. This differs from the Notifications.Actions histogram in that
- multiple events of the same type on a single notification will only record a
- single UMA event.
- </summary>
-</histogram>
-
-<histogram name="ntp.searchurls.total">
- <summary>TBD</summary>
-</histogram>
-
-<histogram name="NtpHandler.AttachShownPageType" enum="NtpPaneType">
- <obsolete>
- Deprecated 10/2011. No longer tracked, replaced with
- NewTabPage.DefaultPageType
- </obsolete>
- <summary>The default pane when the NTP is first opened.</summary>
-</histogram>
-
-<histogram name="NtpHandler.SelectedShownPageType" enum="NtpPaneType">
- <obsolete>
- Deprecated 10/2011. No longer tracked, replaced with
- NewTabPage.SelectedPageType
- </obsolete>
- <summary>The pane selected when the user switches panes in the NTP.</summary>
-</histogram>
-
-<histogram name="OAuth2Login.GetOAuth2AccessTokenFailure"
- enum="GoogleServiceAuthError">
- <summary>
- Failure reason of final OAuth2 access token retreival call during ChromeOS
- login.
- </summary>
-</histogram>
-
-<histogram name="OAuth2Login.GetOAuth2AccessTokenRetry"
- enum="GoogleServiceAuthError">
- <summary>
- Retry reason of failed OAuth2 access token retreival call call during
- ChromeOS login.
- </summary>
-</histogram>
-
-<histogram name="OAuth2Login.ListAccountsFailure" enum="GoogleServiceAuthError">
- <summary>
- Failure reason of final ListAccounts call failure during ChromeOS login.
- </summary>
-</histogram>
-
-<histogram name="OAuth2Login.ListAccountsRetry" enum="GoogleServiceAuthError">
- <summary>
- Retry reason of failed ListAccounts call during ChromeOS login.
- </summary>
-</histogram>
-
-<histogram name="OAuth2Login.MergeSessionFailure" enum="GoogleServiceAuthError">
- <summary>
- Failure reason of final MergeSession call during ChromeOS login.
- </summary>
-</histogram>
-
-<histogram name="OAuth2Login.MergeSessionRetry" enum="GoogleServiceAuthError">
- <summary>
- Retry reason of failed MergeSession call during ChromeOS login.
- </summary>
-</histogram>
-
-<histogram name="OAuth2Login.OAuthLoginGaiaCredFailure"
- enum="GoogleServiceAuthError">
- <summary>
- Failure reason of final OAuthLogin (with SID+LSID) call during ChromeOS
- login.
- </summary>
-</histogram>
-
-<histogram name="OAuth2Login.OAuthLoginGaiaCredRetry"
- enum="GoogleServiceAuthError">
- <summary>
- Retry reason of failed OAuthLogin (with SID+LSID) call during ChromeOS
- login.
- </summary>
-</histogram>
-
-<histogram name="OAuth2Login.OAuthLoginUberTokenFailure"
- enum="GoogleServiceAuthError">
- <summary>
- Failure reason of final OAuthLogin (with uber token) call during ChromeOS
- login.
- </summary>
-</histogram>
-
-<histogram name="OAuth2Login.OAuthLoginUberTokenRetry"
- enum="GoogleServiceAuthError">
- <summary>
- Retry reason of failed OAuthLogin (with uber token) call during ChromeOS
- login.
- </summary>
-</histogram>
-
-<histogram name="OAuth2Login.PostMergeVerification"
- enum="PostMergeVerificationOutcome">
- <summary>
- Outcome of ChromeOS GAIA cookie post merge session verification process. It
- measures how often /MergeSession request collided with browser session
- restore process resulting in partially authenticated primary GAIA session.
- </summary>
-</histogram>
-
-<histogram name="OAuth2Login.SessionRestore" enum="GaiaSessionRestoreOutcome">
- <summary>Outcome of ChromeOS GAIA cookie session restore process.</summary>
-</histogram>
-
-<histogram name="OAuth2Login.SessionRestoreTimeToFailure" units="milliseconds">
- <summary>How long it takes for the session restore to fail.</summary>
-</histogram>
-
-<histogram name="OAuth2Login.SessionRestoreTimeToSuccess" units="milliseconds">
- <summary>
- How long it takes for the session restore to finish succeessfully.
- </summary>
-</histogram>
-
-<histogram name="OfflinePolicy.SuccessfulResourceLoadPercentage" units="%">
- <summary>
- When a page is loaded in offline mode, the percentage of resources on that
- page that were successfully loaded.
- </summary>
-</histogram>
-
-<histogram name="Omnibox.AggressiveHistoryURLProviderFieldTrialBeacon"
- enum="OmniboxAggressiveHistoryURLProviderFieldTrialBeacon">
- <obsolete>
- Aggressive HistoryURL provider field trial deleted in spring 2012.
- </obsolete>
- <summary>
- A number that indicates what omnibox ranking behavior the user is seeing as
- part of the OmniboxAggressiveHistoryURLProvider field trial
- (OmniboxAggressiveHistoryURLProvider).
- </summary>
-</histogram>
-
-<histogram name="Omnibox.CutOrCopyAllText" units="count">
- <summary>
- The number of cut or copy commands on all selected text in the omnibox.
- Gathered on desktop platforms (Win, Mac, Linux, ChromeOS).
- </summary>
-</histogram>
-
-<histogram name="Omnibox.EnteredKeywordMode" enum="OmniboxEnteredKeywordMode">
- <summary>
- The number of times users enter keyword hint mode &quot;Search ___
- for:&quot; and how.
- </summary>
-</histogram>
-
-<histogram name="Omnibox.FocusToEditTime" units="ms">
- <summary>
- The length of time between when a user focused on the omnibox and first
- modifies the omnibox.
- </summary>
-</histogram>
-
-<histogram name="Omnibox.FocusToOpenTime" units="ms">
- <summary>
- The length of time between when a user focused on the omnibox and opened an
- omnibox match (which could be what they typed or a suggestion).
- </summary>
-</histogram>
-
-<histogram name="Omnibox.Paste" units="count">
- <summary>
- The number of paste commands on the text in the omnibox. Reported every time
- a paste command is done.
- </summary>
-</histogram>
-
-<histogram name="Omnibox.PasteAndGo" units="count">
- <summary>
- The number of paste-and-go commands on the text in the omnibox. Reported
- every time a paste-and-go command is done.
- </summary>
-</histogram>
-
-<histogram name="Omnibox.ProviderTime" units="ms">
- <summary>
- The length of time taken by the named provider&quot;s synchronous pass.
- </summary>
-</histogram>
-
-<histogram name="Omnibox.QueryBookmarksTime">
- <obsolete>
- Deprecated 2012-11-14. Replaced by Autocomplete.BookmarkProviderMatchTime.
- </obsolete>
- <summary>
- Time the HistoryContentProvider takes to perform a bookmark search.
- </summary>
-</histogram>
-
-<histogram name="Omnibox.QueryTime" units="milliseconds">
- <summary>
- Time it takes for the omnibox to become responsive to user input after the
- user has typed N characters. This measures the time it takes to start all
- the asynchronous autocomplete providers (but not wait for them to finish).
- </summary>
-</histogram>
-
-<histogram name="Omnibox.SearchEngine" enum="OmniboxSearchEngine">
- <summary>
- The id of search engine that was used for search in omnibox. See
- src/chrome/browser/search_engines/template_url_prepopulate_data.cc for more
- info.
- </summary>
-</histogram>
-
-<histogram name="Omnibox.SearchEngineType" enum="OmniboxSearchEngineType">
- <summary>
- The type of search engine associated with a match opened from the omnibox.
- </summary>
-</histogram>
-
-<histogram name="Omnibox.SuggestRequest.Failure.GoogleResponseTime"
- units="milliseconds">
- <summary>
- The time elapsed between the sending of a suggest request to Google until
- the time the request was returned with status==failed. Ignores requests that
- were canceled before being returned.
- </summary>
-</histogram>
-
-<histogram name="Omnibox.SuggestRequest.Success.GoogleResponseTime"
- units="milliseconds">
- <summary>
- The time elapsed between the sending of a suggest request to Google until
- the time the request was returned with status==success. Ignores requests
- that were canceled before being returned.
- </summary>
-</histogram>
-
-<histogram name="Omnibox.SuggestRequests" enum="OmniboxSuggestRequests">
- <summary>
- Counts about the number of suggest requests the omnibox sent, invalidated,
- and replies received.
- </summary>
-</histogram>
-
-<histogram name="Omnibox.ZeroSuggest.MostVisitedResultsCounterfactual">
- <summary>
- The number of most visited suggestions returned when ZeroSuggest would have
- triggered. The suggestions appear when the user has focused but not
- modified the omnibox.
- </summary>
-</histogram>
-
-<histogram name="Omnibox.ZeroSuggestRequests" enum="OmniboxZeroSuggestRequests">
- <summary>
- Counts about the number of zero suggest requests (requests for suggestions
- when the user has focused but not modified the omnibox) the omnibox sent,
- invalidated, and replies received.
- </summary>
-</histogram>
-
-<histogram name="OSX.CatSixtyFour" enum="CatSixtyFour">
- <summary>The cat's flavor and how many bits there are in it.</summary>
-</histogram>
-
-<histogram name="OSX.ExceptionHandlerEvents" enum="OSXExceptionHandlerEvents">
- <summary>Events seen by the OSX NSException swizzle.</summary>
-</histogram>
-
-<histogram name="OutdatedUpgradeBubble.NumLaterPerReinstall">
- <summary>
- Counts the number of times the user clicked on the later button of the
- outdated upgrade bubble, before clicking on the reinstall button in the same
- Chrome session.
- </summary>
-</histogram>
-
-<histogram name="Overscroll.Completed" enum="OverscrollMode">
- <summary>Completed overscroll gestures.</summary>
- <details>
- An overscroll gesture starts when user scrolls past the edge of the web page
- and continues scrolling in the same direction. An overscroll gesture is
- completed when user stops scrolling (e.g. by lifting the fingers from the
- touchscreen or touchpad).
- </details>
-</histogram>
-
-<histogram name="Overscroll.Navigated" enum="OverscrollMode">
- <summary>
- Navigations that were triggered due to completed overscroll gesture. Note
- that not all completed overscroll gestures trigger a navigation.
- </summary>
-</histogram>
-
-<histogram name="Overscroll.Started" enum="OverscrollMode">
- <summary>
- Overscroll gestures initiated by the user. Note that not all overcroll
- gestures started are completed (e.g. the overscroll gesture is aborted if
- user clicks or presses a key during the gesture).
- </summary>
-</histogram>
-
-<histogram name="P2P.Client.Canceled.WaitingTimeSeconds" units="seconds">
- <summary>
- The wall-clock time spent until a lookup was canceled. This is reported
- every time p2p is used to find a candidate but the request was canceled.
- </summary>
-</histogram>
-
-<histogram name="P2P.Client.Found.CandidateCount" units="count">
- <summary>
- The number of candidates on the LAN, i.e. the number of peers on the LAN
- offering at least N bytes of the requested file X. This is reported after
- examining responses from all peers on the LAN and picking a candidate.
- </summary>
-</histogram>
-
-<histogram name="P2P.Client.Found.ConnectionCount" units="count">
- <summary>
- The number of p2p downloads of the peer that the returned URL points to.
- This is reported after examining responses from all peers on the LAN and
- picking a candidate.
- </summary>
-</histogram>
-
-<histogram name="P2P.Client.Found.WaitingTimeSeconds" units="seconds">
- <summary>
- The wall-clock time spent waiting for the LAN-wide number of p2p downloads
- (i.e. the sum of p2p downloads from each peer on the LAN) to drop below the
- threshold. This is reported after examining responses from all peers on the
- LAN and picking a candidate.
- </summary>
-</histogram>
-
-<histogram name="P2P.Client.LookupResult" enum="P2PLookupResult">
- <summary>
- The result of the lookup. Possible values include &quot;Found&quot; (if a
- candidate - i.e. a peer offering at least N bytes of file X - was chosen),
- &quot;Not Found&quot; (if no candidate could be found), &quot;Vanished&quot;
- (if a candidate was found but vanished while waiting in line),
- &quot;Canceled&quot; (if a candidate was found but the request was canceled
- while waiting in line), and &quot;Filtered&quot; (if it was detected that
- mDNS was filtered). This is reported after examining responses from all
- peers on the LAN when p2p is used to find a candidate.
- </summary>
-</histogram>
-
-<histogram name="P2P.Client.NumPeers" units="count">
- <summary>
- The number of peers implementing p2p file sharing on the network. This is
- reported every time p2p is used to look up a resource on a network where
- mDNS is not filtered.
- </summary>
-</histogram>
-
-<histogram name="P2P.Client.Vanished.WaitingTimeSeconds" units="seconds">
- <summary>
- The wall-clock time spent waiting for one or more candidates (i.e. peers
- offering at least N bytes of file X) that all vanished before the LAN-wide
- number of p2p downloads dropped below the threshold. This is reported every
- time candidates were found using p2p but then vanished.
- </summary>
-</histogram>
-
-<histogram name="P2P.Server.ClientCount" units="count">
- <summary>
- The number of currently connected HTTP clients. This is reported every time
- a HTTP client connects.
- </summary>
-</histogram>
-
-<histogram name="P2P.Server.ContentServedInterruptedMB" units="MB">
- <summary>
- Number of megabytes (1,000,000 bytes) served from the device (via HTTP)
- where the client disconnects prematurely. This is reported every time a file
- is served and the client disconnects before receiving all data.
- </summary>
-</histogram>
-
-<histogram name="P2P.Server.ContentServedSuccessfullyMB" units="MB">
- <summary>
- Number of megabytes (1,000,000 bytes) served from the device (via HTTP).
- This is reported every time a file have been served successfully.
- </summary>
-</histogram>
-
-<histogram name="P2P.Server.DownloadSpeedKBps" units="kB/s">
- <summary>
- The average speed at which the download was served at, in kB/s. This is
- reported every time a file have been served successfully.
- </summary>
-</histogram>
-
-<histogram name="P2P.Server.FileCount" units="count">
- <summary>
- The number of files available via p2p. This is reported every time a file is
- added or removed to the /var/cache/p2p directory.
- </summary>
-</histogram>
-
-<histogram name="P2P.Server.RangeBeginPercentage" units="%">
- <summary>
- When a client resumes a download, the HTTP request includes range specifier
- to skip the bytes it already has. This metric conveys this as a percentage
- of the the file size. This is reported every time a file is served, even if
- the request does not include a range specifier (in which case 0 is
- reported).
- </summary>
-</histogram>
-
-<histogram name="P2P.Server.RequestResult" enum="P2PServerResult">
- <summary>
- The result of the HTTP request. Possible values include &quot;Response
- Sent&quot; (the resource was found and the response was successfully sent),
- &quot;Response Interrupted&quot; (the resource was found but the client
- disconnected), &quot;Malformed&quot; (the request was malformed), &quot;Not
- Found&quot; (the request was for a resource that was not found), and
- &quot;Index&quot; (the request was for the '/' or '/index.html' resource).
- This is reported for every HTTP request handled.
- </summary>
-</histogram>
-
-<histogram name="PasswordGeneration.UploadStarted" enum="Boolean">
- <summary>
- The number of times that we try to upload a form that we believe should
- trigger password generation. False means that something about the form would
- not allow us to try upload (not an Autofillable field, uploading disabled,
- Autofill servers in backoff, etc.). True does not mean that the upload
- actually completed successfully, just that it was started.
- </summary>
-</histogram>
-
-<histogram name="PasswordManager.AccountsPerSite">
- <summary>
- The number of accounts stored per site in the the password manager (one
- event per site)
- </summary>
-</histogram>
-
-<histogram name="PasswordManager.ActionsTaken"
- enum="PasswordManagerActionsTaken">
- <obsolete>
- Deprecated as of Chrome 32. See PasswordManagerActionsTakenWithPsl
- </obsolete>
- <summary>
- Stats documenting how we handle every form containing a password, bucketed
- by the actions taken.
- </summary>
-</histogram>
-
-<histogram name="PasswordManager.ActionsTakenWithPsl"
- enum="PasswordManagerActionsTakenWithPsl">
- <summary>
- Stats documenting how we handle every form containing a password, bucketed
- by the actions taken.
- </summary>
-</histogram>
-
-<histogram name="PasswordManager.BlacklistedSites">
- <summary>
- The total number of sites that the user has blacklisted. Recorded by
- iterating over stored passwords once per run of Chrome.
- </summary>
-</histogram>
-
-<histogram name="PasswordManager.Enabled" enum="BooleanEnabled">
- <summary>
- Indicates whether the password manager is enabled when a tab is opened. This
- includes prerendered tabs.
- </summary>
-</histogram>
-
-<histogram name="PasswordManager.InfoBarResponse" enum="InfoBarResponse">
- <summary>
- The distribution of responses to the &quot;Do you want Chrome to remember
- this password&quot;? info bar prompt.
- </summary>
-</histogram>
-
-<histogram name="PasswordManager.NumPasswordsDeletedByBulkDelete">
- <summary>
- Number of passwords deleted when the user chooses to clear passwords via the
- clear browsing data UI.
- </summary>
-</histogram>
-
-<histogram name="PasswordManager.NumPasswordsDeletedWhenBlacklisting">
- <summary>
- When the user chooses to never remember passwords for a form, we remove all
- previously saved credentials for that form. This is the count of those
- credentials.
- </summary>
-</histogram>
-
-<histogram name="PasswordManager.NumPasswordsNotShown">
- <summary>
- The password manager only shows those credentials that are considered the
- best match for a particular form. This stat keep track of the credentials
- that were not as good of a match and were suppressed.
- </summary>
-</histogram>
-
-<histogram name="PasswordManager.OsPasswordStatus"
- enum="PasswordManagerOsPasswordStatus">
- <summary>
- Indicates whether the user's OS password is blank or not at browser startup.
- </summary>
-</histogram>
-
-<histogram name="PasswordManager.OtherPossibleUsernamesUsage"
- enum="OtherPossibleUsernamesUsage">
- <summary>
- Breakdown of how other possible usernames are displayed. Recorded every time
- we autofill a password form.
- </summary>
-</histogram>
-
-<histogram name="PasswordManager.ProvisionalSaveFailure"
- enum="ProvisionalSaveFailure">
- <summary>
- Breakdown of cases where a password is submitted, but we don't even try and
- save it. Recorded for every password form submit.
- </summary>
-</histogram>
-
-<histogram name="PasswordManager.PslDomainMatchTriggering"
- enum="PasswordManagerPslDomainMatchTriggering">
- <summary>
- Breakdown on trigger rate of providing a password form autofill entry based
- on matching stored information using the public suffix list for possible
- matches.
- </summary>
-</histogram>
-
-<histogram name="PasswordManager.SavePasswordPromptDisappearedQuickly"
- enum="Boolean">
- <summary>
- Indicates whether the save password prompt disappeared in less than one
- second. This most likely indicates that the prompt was dismissed
- automatically, e.g. due to a page navigation, before the user was able to
- respond to the infobar.
- </summary>
-</histogram>
-
-<histogram name="PasswordManager.SavePasswordPromptDisplayed" enum="Boolean">
- <summary>Indicates whether the save password prompt was displayed.</summary>
-</histogram>
-
-<histogram name="PasswordManager.SavePasswordPromptResponse"
- enum="SavePasswordPromptResponseType">
- <summary>
- Breakdown of which response the user selected from the save password prompt.
- </summary>
-</histogram>
-
-<histogram name="PasswordManager.TimesGeneratedPasswordUsed">
- <summary>
- The number of times each generated password has been used to log in.
- Recorded by iterating over stored passwords once per run. This information
- is persisted and synced.
- </summary>
-</histogram>
-
-<histogram name="PasswordManager.TimesPasswordUsed">
- <summary>
- The number of times each saved password has been used to log in. Does not
- include generated passwords. Recorded by iterating over stored passwords
- once per run. This information is persisted and synced.
- </summary>
-</histogram>
-
-<histogram name="PasswordManager.TotalAccounts">
- <summary>
- The number of accounts stored in the password manager (across all sites)
- </summary>
-</histogram>
-
-<histogram name="PerformanceMonitor.AverageCPU.BrowserProcess"
- units="PercentCPUUsage">
- <summary>
- Average CPU utilization of the browser process, read out at each two-minute
- interval. The utilization is in the 0-100% range per CPU, which is then
- summed up. I.e. a quadcore system fully loaded would read as 400%.
- </summary>
-</histogram>
-
-<histogram name="PerformanceMonitor.HighCPU.BrowserProcess" enum="BooleanHit">
- <summary>
- The number of times a browser process has continuously stayed above a
- certain threshold of CPU utilization over a certain time period (currently
- set to two minutes).
- </summary>
-</histogram>
-
-<histogram name="Platform.AsvGroup">
- <summary>
- Chrome OS (ARM Chromebooks using Exynos 5250 only) Adaptive Support Voltage
- Group, recorded once per bootup. Indicates which &quot;bin&quot; the SoC is
- part of, which sets the voltage that different rails on the system will run
- at. The values 0-11 are valid. A value of 12 indicates an error parsing
- dmesg and should be investigated. See also Platform.LotIdEnum.
- </summary>
-</histogram>
-
-<histogram name="Platform.BootSectorsRead">
- <summary>
- Chrome OS number of disk sectors read at boot from kernel start to
- login-prompt-ready.
- </summary>
-</histogram>
-
-<histogram name="Platform.BootSectorsWritten">
- <summary>
- Chrome OS number of disk sectors written at boot from kernel start to
- login-prompt-ready.
- </summary>
-</histogram>
-
-<histogram name="Platform.CompressedSwapSize" units="MB">
- <summary>
- Chrome OS size of allocated swap area in megabytes (before compression)
- </summary>
-</histogram>
-
-<histogram name="Platform.CpuFrequencyThermalScaling" units="percent">
- <summary>
- CPU frequency as percent of the baseline frequency, sampled every 30s. This
- may be throttled down from 100% due to power dissipation issues (too high
- temperature). It may also be throttled up (turbo), but the kernel does not
- report the actual turbo frequency, so we put such samples in the 101%
- bucket.
- </summary>
-</histogram>
-
-<histogram name="Platform.CpuUsage" units="%">
- <summary>
- Peak total (single core) CPU usage for the last sample interval. The sample
- interval may vary from seconds to several minutes.
- </summary>
-</histogram>
-
-<histogram name="Platform.CrOSEvent" enum="CrosEventEnum">
- <summary>
- Generic event of interest from Chrome OS. Intended mainly to help assess
- the frequency of rare error conditions.
- </summary>
-</histogram>
-
-<histogram name="Platform.DiskUsage.Cache_Avg" units="KB">
- <summary>
- Average size of user's Cache directory. Logged once a day, if disk usage is
- high.
- </summary>
-</histogram>
-
-<histogram name="Platform.DiskUsage.Cache_Max" units="KB">
- <summary>
- Maximum size of user's Cache directory. Logged once a day, if disk usage is
- high.
- </summary>
-</histogram>
-
-<histogram name="Platform.DiskUsage.Downloads_Avg" units="KB">
- <summary>
- Average size of user's Cache directory. Logged once a day, if disk usage is
- high.
- </summary>
-</histogram>
-
-<histogram name="Platform.DiskUsage.Downloads_Max" units="KB">
- <summary>
- Maximum size of user's Cache directory. Logged once a day, if disk usage is
- high.
- </summary>
-</histogram>
-
-<histogram name="Platform.DiskUsage.GCache_Avg" units="KB">
- <summary>
- Average size of user's GCache directory. Logged once a day, if disk usage is
- high.
- </summary>
-</histogram>
-
-<histogram name="Platform.DiskUsage.GCache_Max" units="KB">
- <summary>
- Maximum size of user's GCache directory. Logged once a day, if disk usage is
- high.
- </summary>
-</histogram>
-
-<histogram name="Platform.DiskUsage.LeastUsedAccountDays" units="days">
- <summary>
- Days since the least frequently used account signed in. Logged once a day,
- if disk usage is high.
- </summary>
-</histogram>
-
-<histogram name="Platform.DiskUsage.NumUserHomeDirectories"
- units="home directories">
- <summary>
- Number of users home directories on the device. Logged once a day.
- </summary>
-</histogram>
-
-<histogram name="Platform.DiskUsage.OldestUserOnDevice">
- <summary>
- Days since last login of the least recently user on device. Logged once a
- day, if disk usage is high.
- </summary>
-</histogram>
-
-<histogram name="Platform.DiskUsage.UsersOnDevice">
- <summary>
- Number of user home dirs on device. Logged once a day, if disk usage is
- high.
- </summary>
-</histogram>
-
-<histogram name="Platform.DiskUsageCache" units="KB">
- <summary>KB in use in the /cache filesystem tree. Logged once a day.</summary>
-</histogram>
-
-<histogram name="Platform.DiskUsageChronos" units="KB">
- <summary>
- Chrome OS KB in use in the /home/chronos filesystem tree. Logged once a day
- during log file cleanup.
- </summary>
-</histogram>
-
-<histogram name="Platform.DiskUsageData" units="KB">
- <summary>KB in use in the /data filesystem tree. Logged once a day.</summary>
-</histogram>
-
-<histogram name="Platform.DiskUsageVar" units="KB">
- <summary>
- Chrome OS KB in use in the /var filesystem tree. Logged once a day during
- log file cleanup.
- </summary>
-</histogram>
-
-<histogram name="Platform.IntelMaxMicroArchitecture"
- enum="IntelMaxMicroArchitecture">
- <summary>
- The maximum supported micro-architecture on an Intel platform. This value
- is logged at program start time.
- </summary>
-</histogram>
-
-<histogram name="Platform.KernelWarningHashes">
- <summary>
- The 32-bit hash of a kernel warning. This is the hash of the
- &quot;file:line&quot; string corresponding to the location of the warning,
- for instance: &quot;/mnt/host/source/src/third_party/kernel/files/drivers
- /gpu/drm/i915/intel_dp.c:351&quot; (ignore spurious spaces). The hash is
- produced by this code: while (*string) hash = (hash &lt;&lt; 5) + hash +
- *string++; Separately each warning is also collected (with its hash) via
- the crash reporter, but only its first occurrence in each boot session.
- Contact semenzato@ for further info.
- </summary>
-</histogram>
-
-<histogram name="Platform.LogicalCpuCount">
- <summary>
- Number of logical processors. This includes Hyperthreaded cores.
- </summary>
-</histogram>
-
-<histogram name="Platform.LotIdEnum" enum="Exynos5250LotIdEnum">
- <summary>
- Chrome OS (ARM Chromebooks using Exynos 5250 only) indication about whether
- we're part of a special lot ID. Special lot IDs are groups of chips that
- have special case handling in the kernel for the Adaptive Support Voltage
- code (the normal logic doesn't work). See also Platform.AsvGroup. Note
- that fused devices are never part of a special lot (currently) and only some
- unfused lots are &quot;special&quot;.
- </summary>
-</histogram>
-
-<histogram name="Platform.MeminfoActive">
- <summary>Chrome OS size of active memory as % of total memory.</summary>
-</histogram>
-
-<histogram name="Platform.MeminfoActiveAnon">
- <summary>
- Chrome OS active anonymous memory (data segments) as % of total memory.
- </summary>
-</histogram>
-
-<histogram name="Platform.MeminfoActiveFile">
- <summary>
- Chrome OS active file-backed memory (executables, ...) as % of total memory.
- </summary>
-</histogram>
-
-<histogram name="Platform.MeminfoAnonPages">
- <summary>Chrome OS size of anonymous memory as % of total memory.</summary>
-</histogram>
-
-<histogram name="Platform.MeminfoBuffers">
- <summary>Chrome OS size of buffer cache as % of total memory.</summary>
-</histogram>
-
-<histogram name="Platform.MeminfoCached">
- <summary>
- Chrome OS: size of file-backed memory minus swap and buffer cache, as % of
- total memory.
- </summary>
-</histogram>
-
-<histogram name="Platform.MeminfoInactive">
- <summary>Chrome OS size of inactive memory as % of total memory.</summary>
-</histogram>
-
-<histogram name="Platform.MeminfoInactiveAnon">
- <summary>
- Chrome OS inactive anonymous memory (data segments) as % of total memory.
- </summary>
-</histogram>
-
-<histogram name="Platform.MeminfoInactiveFile">
- <summary>Chrome OS inactive file-backed memory as % of total memory.</summary>
-</histogram>
-
-<histogram name="Platform.MeminfoMapped">
- <summary>Chrome OS size of mapped memory as % of total memory.</summary>
-</histogram>
-
-<histogram name="Platform.MeminfoMemFree">
- <summary>Chrome OS size of free memory as % of total memory.</summary>
-</histogram>
-
-<histogram name="Platform.MeminfoShmem">
- <summary>Chrome OS size of shared memory in Kbytes.</summary>
-</histogram>
-
-<histogram name="Platform.MeminfoSlab">
- <summary>Chrome OS size of slab memory in Kbytes.</summary>
-</histogram>
-
-<histogram name="Platform.MeminfoSwapUsed" units="kB">
- <summary>
- Chrome OS amount of swapped-out memory in Kbytes. These, and all other
- MEMINFO stats, are snapshotted every 30s.
- </summary>
-</histogram>
-
-<histogram name="Platform.MeminfoSwapUsedPercent" units="percent">
- <summary>
- Chrome OS amount of swapped-out memory as % of total RAM. These, and all
- other MEMINFO stats, are snapshotted every 30s.
- </summary>
-</histogram>
-
-<histogram name="Platform.MeminfoUnevictable">
- <summary>
- Chrome OS unevictable memory (ramfs, SHM_LOCKED, mlocked) in Kbytes.
- </summary>
-</histogram>
-
-<histogram name="Platform.MemoryBandwidth.ReadWrite" units="MB/s">
- <summary>
- Peak memory bandwith (read and write) usage during the last sample interval.
- The sample interval may vary from seconds to several minutes.
- </summary>
-</histogram>
-
-<histogram name="Platform.MemuseAnon0">
- <summary>
- Chrome OS total anonymous memory (active + inactive) as % of total memory 1
- minute after boot.
- </summary>
-</histogram>
-
-<histogram name="Platform.MemuseAnon1">
- <summary>
- Chrome OS total anonymous memory (active + inactive) as % of total memory 5
- minutes after boot.
- </summary>
-</histogram>
-
-<histogram name="Platform.MemuseAnon2">
- <summary>
- Chrome OS total anonymous memory (active + inactive) as % of total memory 30
- minutes after boot.
- </summary>
-</histogram>
-
-<histogram name="Platform.MemuseAnon3">
- <summary>
- Chrome OS total anonymous memory (active + inactive) as % of total memory
- 150 minutes after boot.
- </summary>
-</histogram>
-
-<histogram name="Platform.MemuseAnon4">
- <summary>
- Chrome OS total anonymous memory (active + inactive) as % of total memory
- 750 minutes after boot.
- </summary>
-</histogram>
-
-<histogram name="Platform.PageFaultsLong" units="page faults/second">
- <summary>
- Page faults per second averaged over 30s interval, sampled continuously.
- </summary>
-</histogram>
-
-<histogram name="Platform.PageFaultsShort" units="page faults/second">
- <summary>
- Page faults per second averaged over 1s interval, sampled every 30s.
- </summary>
-</histogram>
-
-<histogram name="Platform.ReadSectorsLong">
- <summary>
- Number of disk sectors per second read by Chrome OS in a long interval
- (currently 30s)
- </summary>
-</histogram>
-
-<histogram name="Platform.ReadSectorsShort">
- <summary>
- Number of disk sectors per second read by Chrome OS in a short interval
- (currently 1s, sampled every 30s)
- </summary>
-</histogram>
-
-<histogram name="Platform.SmartTransferErrors">
- <summary>Disk communication errors (SMART 199), sent at boot.</summary>
-</histogram>
-
-<histogram name="Platform.SmartUncorrectableErrors">
- <summary>Uncorrectable disk errors (SMART 187), sent at boot.</summary>
-</histogram>
-
-<histogram name="Platform.SpringChargerType">
- <summary>
- USB device ID of the charger plugged into a Spring device (if any), sent
- once a minute. The Device ID is composed from the following 4 8-bit
- registers of the TSU6721 chip: ADC (07h), Device Type 3 (15h), Device Type 2
- (0Bh), Device Type 1 (0Ah). Device Type 1/2/3 is a bitmap and most of bits
- are mutually exclusive (excepted VBUS debounce). ADC is the 5-bit value of
- the ID pin, but for most types (as in Device Type), there are only one or
- two possible ID pin connections/values. The datasheet can be found here:
- http://www.ti.com/lit/ds/symlink/tsu6721.pdf.
-
- Note that different brand/models of the charger can have the same ID.
- </summary>
-</histogram>
-
-<histogram name="Platform.StatefulUsage" units="%">
- <summary>Chrome OS stateful partition usage level.</summary>
-</histogram>
-
-<histogram name="Platform.SwapInLong" units="pages/second">
- <summary>
- Average pages/second swapped IN over a 30s interval, sampled every 30s.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapInShort" units="pages/second">
- <summary>
- Average pages/second swapped IN over a 1s interval, sampled every 30s.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap0.Time1" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap0.Time2" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap0.Time3" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap0.Time4" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap1.Time1" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap1.Time2" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap1.Time3" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap1.Time4" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap2.Time1" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap2.Time2" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap2.Time3" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap2.Time4" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap3.Time1" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap3.Time2" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap3.Time3" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Cpu.Swap3.Time4" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap0.Time1"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap0.Time2"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap0.Time3"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap0.Time4"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap1.Time1"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap1.Time2"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap1.Time3"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap1.Time4"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap2.Time1"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap2.Time2"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap2.Time3"
- units="page faults/second">
- <summary>
- Page faults/second for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap2.Time4"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap3.Time1"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap3.Time2"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap3.Time3"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.Scroll.Faults.Swap3.Time4"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- scroll event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap0.Time1" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a tab
- switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap0.Time2" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a tab
- switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap0.Time3" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a tab
- switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap0.Time4" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a tab
- switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap1.Time1" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a tab
- switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap1.Time2" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a tab
- switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap1.Time3" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a tab
- switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap1.Time4" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a tab
- switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap2.Time1" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a tab
- switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap2.Time2" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a tab
- switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap2.Time3" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a tab
- switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap2.Time4" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a tab
- switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap3.Time1" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a tab
- switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap3.Time2" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a tab
- switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap3.Time3" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a tab
- switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap3.Time4" units="%">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- CPU utilization for the specified swap group and time interval after a tab
- switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap0.Time1"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- tab switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap0.Time2"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- tab switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap0.Time3"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- tab switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap0.Time4"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- tab switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap1.Time1"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- tab switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap1.Time2"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- tab switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap1.Time3"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- tab switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap1.Time4"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- tab switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap2.Time1"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- tab switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap2.Time2"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- tab switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap2.Time3"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- tab switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap2.Time4"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- tab switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap3.Time1"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- tab switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap3.Time2"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- tab switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap3.Time3"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- tab switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap3.Time4"
- units="page faults/second">
- <obsolete>
- Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
- </obsolete>
- <summary>
- Page faults/second for the specified swap group and time interval after a
- tab switch event. See src/chrome/browser/chromeos/swap_metrics.cc.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapOutLong" units="pages/second">
- <summary>
- Average pages/second swapped OUT over a 30s interval, sampled every 30s.
- </summary>
-</histogram>
-
-<histogram name="Platform.SwapOutShort" units="pages/second">
- <summary>
- Average pages/second swapped OUT over a 1s interval, sampled every 30s.
- </summary>
-</histogram>
-
-<histogram name="Platform.Temperature.Junction" units="Celsius">
- <summary>
- Peak junction temperature for the last sample interval, read from TSEN on
- the SoC. The sample interval may vary from seconds to several minutes.
- </summary>
-</histogram>
-
-<histogram name="Platform.Temperature.Sensor00" units="Celsius">
- <summary>
- Temperature reading at sensor 0 (I2C_CPU-Die) taken every 30s.
- </summary>
-</histogram>
-
-<histogram name="Platform.Temperature.Sensor01" units="Celsius">
- <summary>
- Temperature reading at sensor 1 (I2C_CPU-Object) taken every 30s.
- </summary>
-</histogram>
-
-<histogram name="Platform.Temperature.Sensor02" units="Celsius">
- <summary>
- Temperature reading at sensor 2 (I2C_PCH-Die) taken every 30s.
- </summary>
-</histogram>
-
-<histogram name="Platform.Temperature.Sensor03" units="Celsius">
- <summary>
- Temperature reading at sensor 3 (I2C_PCH-Object) taken every 30s.
- </summary>
-</histogram>
-
-<histogram name="Platform.Temperature.Sensor04" units="Celsius">
- <summary>
- Temperature reading at sensor 4 (I2C_DDR-Die) taken every 30s.
- </summary>
-</histogram>
-
-<histogram name="Platform.Temperature.Sensor05" units="Celsius">
- <summary>
- Temperature reading at sensor 5 (I2C_DDR-Object) taken every 30s.
- </summary>
-</histogram>
-
-<histogram name="Platform.Temperature.Sensor06" units="Celsius">
- <summary>
- Temperature reading at sensor 6 (Charger-Die), taken every 30s.
- </summary>
-</histogram>
-
-<histogram name="Platform.Temperature.Sensor07" units="Celsius">
- <summary>
- Temperature reading at sensor 7 (Charger-Object) taken every 30s.
- </summary>
-</histogram>
-
-<histogram name="Platform.Temperature.Sensor08" units="Celsius">
- <summary>
- Temperature reading at sensor 8 (ECInternal) taken every 30s.
- </summary>
-</histogram>
-
-<histogram name="Platform.Temperature.Sensor09" units="Celsius">
- <summary>Temperature reading at sensor 9 (PECI) taken every 30s.</summary>
-</histogram>
-
-<histogram name="Platform.TPMForcedReboot" units="reboots">
- <summary>
- Each sample is the number of consecutive reboots performed while attempting
- to clear a TPM (Trusted Platform Module) error.
- </summary>
-</histogram>
-
-<histogram name="Platform.WriteSectorsLong">
- <summary>
- Number of disk sectors per second written by Chrome OS in a long interval
- (currently 30s)
- </summary>
-</histogram>
-
-<histogram name="Platform.WriteSectorsShort">
- <summary>
- Number of disk sectors per second written by Chrome OS in a short interval
- (currently 1s, sampled every 30s)
- </summary>
-</histogram>
-
-<histogram name="PlatformFile.UnknownCreateFileErrors" units="code">
- <obsolete>
- Deprecated as of 2013-05, replaced by
- PlatformFile.UnknownCreateFileErrorsWin in chrome 29.
- </obsolete>
- <summary>
- Errors returned by CreateFile on windows that PlatformFileError doesn't yet
- support.
- </summary>
-</histogram>
-
-<histogram name="PlatformFile.UnknownErrors.Posix" units="errno">
- <summary>
- Errors returned by CreateFile on POSIX that PlatformFileError doesn't yet
- support.
- </summary>
-</histogram>
-
-<histogram name="PlatformFile.UnknownErrors.Windows" units="GetLastError">
- <summary>
- Errors returned by CreateFile on Windows that PlatformFileError doesn't yet
- support.
- </summary>
-</histogram>
-
-<histogram name="PLT.Abandoned" enum="Abandoned">
- <summary>
- Distribution of actual finished pages, vs abandoned pages, where we needed
- to declare a finish time prematurely since the page was being closed
- (exited).
- </summary>
-</histogram>
-
-<histogram name="PLT.BeginToFinish" units="milliseconds">
- <summary>TBD</summary>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_AfterPreconnectRequest" units="milliseconds">
- <summary>
- PLT.BeginToFinish, but for pages requested just after a new preconnect
- request.
- </summary>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_ContentPrefetcher" units="milliseconds">
- <summary>
- PLT.BeginToFinish, but for pages which contained prefetch links.
- </summary>
-</histogram>
-
-<histogram name="PLT.BeginToFinish_ContentPrefetcherReferrer"
- units="milliseconds">
- <summary>
- PLT.BeginToFinish, but for pages which were referred to by pages which
- contained prefetch links.
- </summary>
-</histogram>
-
-<histogram name="PLT.BeginToFinishDoc">
- <summary>TBD</summary>
-</histogram>
-
-<histogram name="PLT.BeginToFinishDoc_AfterPreconnectRequest"
- units="milliseconds">
- <summary>
- PLT.BeginToFinishDoc, but for pages requested just after a new preconnect
- request.
- </summary>
-</histogram>
-
-<histogram name="PLT.BeginToFinishDoc_ContentPrefetcher" units="milliseconds">
- <summary>
- PLT.BeginToFinishDoc, but for pages which contained prefetch links.
- </summary>
-</histogram>
-
-<histogram name="PLT.BeginToFinishDoc_ContentPrefetcherReferrer"
- units="milliseconds">
- <summary>
- PLT.BeginToFinishDoc, but for pages which were referred to by pages which
- contained prefetch links.
- </summary>
-</histogram>
-
-<histogram name="PLT.BeginToFirstPaint" units="milliseconds">
- <summary>
- Time from &quot;begin&quot; to &quot;first paint.&quot; &quot;Begin&quot;==
- &quot;request&quot; if user requested, and &quot;start&quot; otherwise.
- &quot;Request&quot;== time when user requested document. &quot;Start&quot;==
- time when renderer requested load of document, after any unload of last
- document. &quot;First paint&quot;== time when first paint operation was
- performed.
- </summary>
-</histogram>
-
-<histogram name="PLT.CommitToFirstPaint" units="milliseconds">
- <summary>
- Time from &quot;commit&quot; to &quot;first paint.&quot;
- &quot;Commit&quot;== time when renderer got first byte of document.
- &quot;First paint&quot;== time when first paint operation was performed.
- </summary>
-</histogram>
-
-<histogram name="PLT.LoadType" enum="LoadType">
- <summary>
- Probability distribution for enumerated varieties of page loads.
- </summary>
-</histogram>
-
-<histogram name="PLT.NT_Connect" units="milliseconds">
- <summary>
- Time from connectStart to connectEnd based on Navigation Timing.
- </summary>
-</histogram>
-
-<histogram name="PLT.NT_DelayBeforeConnect" units="milliseconds">
- <summary>
- Time from domanLookupEnd to connectStart based on Navigation Timing.
- </summary>
-</histogram>
-
-<histogram name="PLT.NT_DelayBeforeDomainLookup" units="milliseconds">
- <summary>
- Time from fetchStart to domainLookupStart based on Navigation Timing.
- </summary>
-</histogram>
-
-<histogram name="PLT.NT_DelayBeforeDomLoading" units="milliseconds">
- <summary>
- Time from responseStart to domLoading based on Navigation Timing.
- </summary>
-</histogram>
-
-<histogram name="PLT.NT_DelayBeforeFetch" units="milliseconds">
- <summary>
- Time from navigationStart to fetchStart based on Navigation Timing when no
- redirect.
- </summary>
-</histogram>
-
-<histogram name="PLT.NT_DelayBeforeFetchRedirect" units="milliseconds">
- <summary>
- Time from navigationStart to fetchStart excluding time spent on redirects
- based on Navigation Timing. Only page loads with redirects are considered.
- </summary>
-</histogram>
-
-<histogram name="PLT.NT_DelayBeforeLoadEvent" units="milliseconds">
- <summary>
- Time from domContentLoadedEventEnd to loadEventStart based on Navigation
- Timing.
- </summary>
-</histogram>
-
-<histogram name="PLT.NT_DelayBeforeRequest" units="milliseconds">
- <summary>
- Time from connectEnd to requestStart based on Navigation Timing.
- </summary>
-</histogram>
-
-<histogram name="PLT.NT_DomainLookup" units="milliseconds">
- <summary>
- Time from domainLookupStart to domainLookupEnd based on Navigation Timing.
- </summary>
-</histogram>
-
-<histogram name="PLT.NT_DomContentLoaded" units="milliseconds">
- <summary>
- Time from domContentLoadedEventStart to domContentLoadedEventEnd based on
- Navigation Timing.
- </summary>
-</histogram>
-
-<histogram name="PLT.NT_DomInteractive" units="milliseconds">
- <summary>
- Time from domInteractive to domContentLoadEventStart based on Navigation
- Timing.
- </summary>
-</histogram>
-
-<histogram name="PLT.NT_DomLoading" units="milliseconds">
- <summary>
- Time from domLoading to domInteractive based on Navigation Timing.
- </summary>
-</histogram>
-
-<histogram name="PLT.NT_LoadEvent" units="milliseconds">
- <summary>
- Time from loadEventStart to loadEventEnd based on Navigation Timing.
- </summary>
-</histogram>
-
-<histogram name="PLT.NT_Redirect" units="milliseconds">
- <summary>
- Time from redirectStart to redirectEnd based on Navigation Timing when
- redirects exist.
- </summary>
-</histogram>
-
-<histogram name="PLT.NT_Request" units="milliseconds">
- <summary>
- Time from requestStart to responseStart based on Navigation Timing.
- </summary>
-</histogram>
-
-<histogram name="PLT.NT_Response" units="milliseconds">
- <summary>
- Time from responseStart to responseEnd based on Navigation Timing.
- </summary>
-</histogram>
-
-<histogram name="PLT.PerceivedLoadTime" units="milliseconds">
- <obsolete>
- Deprecated as of 5/02/2011, replaced by Prerender.RendererPLT.
- </obsolete>
- <summary>
- Perceived load time of a page. For non-prerendered pages, this is just
- BeginToFinish. For displayed prerendered pages, this is the time from when
- the prerendered page is moved into a TabContents until finish.
- &quot;Finish&quot; == after onload() and all resources are loaded. Note that
- this is 0 if the loading finishes before the page is moved into a
- TabContents.
- </summary>
-</histogram>
-
-<histogram name="PLT.PerceivedLoadTime_PrerenderLoad" units="milliseconds">
- <obsolete>
- Deprecated as of 5/02/2011, replaced by
- Prerender.RendererPerceivedPLTMatched.
- </obsolete>
- <summary>
- Perceived load time of a prerendered page that is displayed. This is the
- time from when the prerendered page is moved into a TabContents until
- finish. &quot;Finish&quot; == after onload() and all resources are loaded.
- Note that this is 0 if the loading finishes before the the page is moved
- into a TabContents.
- </summary>
-</histogram>
-
-<histogram name="PLT.PT_BeginToCommit" units="milliseconds">
- <summary>
- This time is based on the NavigationTiming spec and is a more accurate
- version of PLT.BeginToCommit. Commit: responseStart. Begin: requestStart or
- navigationStart if user-initiated request.
- </summary>
-</histogram>
-
-<histogram name="PLT.PT_BeginToFinish" units="milliseconds">
- <summary>
- This time is based on the NavigationTiming spec and is a more accurate
- version of PLT.BeginToFinish. Finish: loadEventEnd. Begin: requestStart or
- navigationStart if user-initiated request.
- </summary>
-</histogram>
-
-<histogram name="PLT.PT_BeginToFinishDoc" units="milliseconds">
- <summary>
- This time is based on the NavigationTiming spec and is a more accurate
- version of PLT.BeginToFinishDoc. FinishDoc: loadEventStart. Begin:
- requestStart or navigationStart if user-initiated request.
- </summary>
-</histogram>
-
-<histogram name="PLT.PT_CommitToFinish" units="milliseconds">
- <summary>
- This time is based on the NavigationTiming spec and is a more accurate
- version of PLT.CommitToFinish. Commit: responseStart. Finish: loadEventEnd.
- </summary>
-</histogram>
-
-<histogram name="PLT.PT_CommitToFinishDoc" units="milliseconds">
- <summary>
- This time is based on the NavigationTiming spec and is a more accurate
- version of PLT.CommitToFinishDoc. Commit: responseStart. FinishDoc:
- loadEventStart.
- </summary>
-</histogram>
-
-<histogram name="PLT.PT_FinishDocToFinish" units="milliseconds">
- <summary>
- This time is based on the NavigationTiming spec and is a more accurate
- version of PLT.FinishDocToFinish. Finish: loadEventEnd. FinishDoc:
- loadEventStart.
- </summary>
-</histogram>
-
-<histogram name="PLT.PT_RequestToCommit" units="milliseconds">
- <summary>
- This time is based on the NavigationTiming spec and measures the time until
- the renderer got first byte of document. Commit: time when renderer got
- first byte of document. Request: navigationStart.
- </summary>
-</histogram>
-
-<histogram name="PLT.PT_RequestToDomContentLoaded" units="milliseconds">
- <summary>
- This time is based on the NavigationTiming spec and measures the time until
- the beginning of the DOMContentLoaded event. DOMContentLoaded:
- domContentLoadedEventStart. Request: navigationStart.
- </summary>
-</histogram>
-
-<histogram name="PLT.PT_RequestToFinish" units="milliseconds">
- <summary>
- This time is based on the NavigationTiming spec and is a more accurate
- version of PLT.RequestToFinish. Finish: loadEventEnd. Request:
- navigationStart.
- </summary>
-</histogram>
-
-<histogram name="PLT.PT_RequestToFinishDoc" units="milliseconds">
- <summary>
- This time is based on the NavigationTiming spec and measures the page load
- time until the beginning of the load event. Finish: loadEventStart. Request:
- navigationStart.
- </summary>
-</histogram>
-
-<histogram name="PLT.PT_RequestToStart" units="milliseconds">
- <summary>
- This time is based on the NavigationTiming spec and is a more accurate
- version of PLT.RequestToStart. Start: requestStart. Request:
- navigationStart.
- </summary>
-</histogram>
-
-<histogram name="PLT.PT_StartToCommit" units="milliseconds">
- <summary>
- This time is based on the NavigationTiming spec and is a more accurate
- version of PLT.StartToCommit. Start: requestStart. Commit: responseStart.
- </summary>
-</histogram>
-
-<histogram name="PLT.PT_StartToFinish" units="milliseconds">
- <summary>
- This time is based on the NavigationTiming spec and is a more accurate
- version of PLT.StartToFinish. Start: requestStart. Finish: loadEventEnd.
- </summary>
-</histogram>
-
-<histogram name="PLT.RequestToFinish" units="milliseconds">
- <summary>
- Time from &quot;request&quot; to &quot;finish.&quot; &quot;Request&quot; ==
- time when user requested document. &quot;Finish&quot; == after onload() and
- all resources are loaded.
- </summary>
-</histogram>
-
-<histogram name="PLT.StartToCommit" units="milliseconds">
- <summary>
- Time from &quot;start&quot; to &quot;commit.&quot; &quot;Start&quot;== time
- when renderer requested load of document, after any unload of last document.
- &quot;Commit&quot;== time when renderer got first byte of document.
- </summary>
-</histogram>
-
-<histogram name="PLT.StartToFinish" units="milliseconds">
- <summary>
- Time from &quot;start&quot; to &quot;finish.&quot; &quot;Start&quot;== time
- when renderer requested load of document, after any unload of last document.
- &quot;Finish&quot;==after onload() and all resources are loaded.
- </summary>
-</histogram>
-
-<histogram name="PLT.UserTiming_Mark" units="milliseconds">
- <summary>
- This time is based on the User Timing spec and measures the time from
- Navigation Timing navigationStart until the point where the page called
- performance.mark().
- </summary>
-</histogram>
-
-<histogram name="PLT.UserTiming_MeasureDuration" units="milliseconds">
- <summary>
- This time is based on the User Timing spec and reports the time between two
- arbitrary points defined by the page being loaded and directly matches the
- measurement exposed by performance.measure().
- </summary>
-</histogram>
-
-<histogram name="Plugin.FlashNavigateUsage" enum="FlashNavigateUsageType">
- <summary>Record usage of PPB_Flash.Navigate() Pepper API.</summary>
-</histogram>
-
-<histogram name="Plugin.PpapiBrokerLoadResult" enum="PluginLoadResult">
- <summary>The result from an attempt to load a PPAPI broker.</summary>
-</histogram>
-
-<histogram name="Plugin.PpapiPluginLoadResult" enum="PluginLoadResult">
- <summary>The result from an attempt to load a PPAPI plugin.</summary>
-</histogram>
-
-<histogram name="Power.BacklightLevelOnAC" units="%">
- <summary>
- The level of the backlight as a percentage when the user is on AC. Sampled
- every 30 seconds.
- </summary>
-</histogram>
-
-<histogram name="Power.BacklightLevelOnBattery" units="%">
- <summary>
- The level of the backlight as a percentage when the user is on battery.
- Sampled every 30 seconds.
- </summary>
-</histogram>
-
-<histogram name="Power.BatteryChargeHealth" units="%">
- <summary>
- Chrome OS battery charge health percentage. Sampled once when device starts
- charging.
- </summary>
-</histogram>
-
-<histogram name="Power.BatteryDischargeRate" units="mW">
- <summary>
- Chrome OS battery discharge rate in mW sampled every 30 seconds while the
- device runs on battery.
- </summary>
-</histogram>
-
-<histogram name="Power.BatteryDischargeRateWhileSuspended" units="mW">
- <summary>
- Chrome OS battery discharge rate in mW while the system was suspended,
- sampled at resume. Only reported if the system was on battery power both
- before suspending and after resuming, if the energy level didn't increase
- while suspended (which would indicate that an AC adapter was connected), and
- if the system was suspended for at least a minute.
- </summary>
-</histogram>
-
-<histogram name="Power.BatteryInfoSample" enum="BatteryInfoSampleResult">
- <summary>
- Counts the number of times we have read the battery status from sysfs and if
- it gave us sensible values.
- </summary>
-</histogram>
-
-<histogram name="Power.BatteryRemainingAtEndOfSessionOnAC" units="%">
- <summary>
- Chrome OS remaining battery charge as percent of the maximum battery charge,
- sampled at the end of a user session when the device is on AC.
- </summary>
-</histogram>
-
-<histogram name="Power.BatteryRemainingAtEndOfSessionOnBattery" units="%">
- <summary>
- Chrome OS remaining battery charge as percent of the maximum battery charge,
- sampled at the end of a user session when the device is on battery.
- </summary>
-</histogram>
-
-<histogram name="Power.BatteryRemainingAtStartOfSessionOnAC" units="%">
- <summary>
- Chrome OS remaining battery charge as percent of the maximum battery charge,
- sampled at the start of a user session when the device is on AC.
- </summary>
-</histogram>
-
-<histogram name="Power.BatteryRemainingAtStartOfSessionOnBattery" units="%">
- <summary>
- Chrome OS remaining battery charge as percent of the maximum battery charge,
- sampled at the start of a user session when the device is on battery.
- </summary>
-</histogram>
-
-<histogram name="Power.BatteryRemainingCharge" units="%">
- <obsolete>
- Deprecated as of 03/2012, no longer being generated by powerd.
- </obsolete>
- <summary>
- Chrome OS remaining battery charge as percent of the maximum battery charge
- sampled when the device runs on battery.
- </summary>
-</histogram>
-
-<histogram name="Power.BatteryRemainingWhenChargeStarts" units="%">
- <summary>
- Chrome OS remaining battery charge as percent of the maximum battery charge,
- sampled when charging starts.
- </summary>
-</histogram>
-
-<histogram name="Power.BatteryTimeToEmpty" units="minutes">
- <obsolete>
- Deprecated as of 03/2012, no longer being generated by powerd.
- </obsolete>
- <summary>
- Chrome OS remaining time to empty battery in minutes sampled when the device
- runs on battery.
- </summary>
-</histogram>
-
-<histogram name="Power.BitfixChunks">
- <summary>
- Chrome OS (Snow RO firmware 2695.90.0 only) number of 8K chunks that were
- fixed (memory corruption corrected) for each suspend/resume cycle. Expect 0
- around 97% of the time and a non-zero value around 3% of the time.
- </summary>
-</histogram>
-
-<histogram name="Power.BitfixFixes">
- <summary>
- Chrome OS (Snow RO firmware 2695.90.0 only) number of 4-byte words that were
- fixed (memory corruption corrected) for each suspend/resume cycle. Expect 0
- around 97% of the time and a non-zero value around 3% of the time. Would be
- exactly equal to Power.BitfixChunks if there were only one corrupted word in
- each chunk but is sometimes several times higher.
- </summary>
-</histogram>
-
-<histogram name="Power.BrightnessAdjustOnAC" enum="PowerBrightnessAdjust">
- <obsolete>
- Deprecated as of 5/2013. See Accel_BrightnessDown_F6 and
- Accel_BrightnessUp_F7 user actions instead.
- </obsolete>
- <summary>
- Number of times the user has adjusted brightness up and down while running
- on battery power.
- </summary>
-</histogram>
-
-<histogram name="Power.BrightnessAdjustOnBattery" enum="PowerBrightnessAdjust">
- <obsolete>
- Deprecated as of 5/2013. See Accel_BrightnessDown_F6 and
- Accel_BrightnessUp_F7 user actions instead.
- </obsolete>
- <summary>
- Number of times the user has adjusted brightness up and down while running
- on AC power.
- </summary>
-</histogram>
-
-<histogram name="Power.ChargerType" enum="PowerChargerType">
- <summary>
- External power supply type such as MAINS_CHARGER, USB_CHARGER,
- UNCONFIRMED_SPRING_CHARGER, SAFE_SPRING_CHARGER. A sample is reported each
- time a charger is connected to the device.
- </summary>
-</histogram>
-
-<histogram name="Power.FirmwareResumeTimeOnAC" units="milliseconds">
- <summary>
- The time that the firmware took to resume the Chrome OS device from
- suspend-to-RAM state when running on AC at pre-suspend time.
- </summary>
-</histogram>
-
-<histogram name="Power.FirmwareResumeTimeOnBattery" units="milliseconds">
- <summary>
- The time that the firmware took to resume the Chrome OS device from
- suspend-to-RAM state when running on battery at pre-suspend time.
- </summary>
-</histogram>
-
-<histogram name="Power.IdleTimeAfterDimOnAC" units="milliseconds">
- <summary>
- Chrome OS user idle time since the screen dimmed sampled when the user
- becomes active again if the device runs on AC.
- </summary>
-</histogram>
-
-<histogram name="Power.IdleTimeAfterDimOnBattery" units="milliseconds">
- <summary>
- Chrome OS user idle time since the screen dimmed sampled when the user
- becomes active again if the device runs on battery.
- </summary>
-</histogram>
-
-<histogram name="Power.IdleTimeAfterScreenOffOnAC" units="milliseconds">
- <summary>
- Chrome OS user idle time since the screen turned off sampled when the user
- becomes active again if the device runs on AC.
- </summary>
-</histogram>
-
-<histogram name="Power.IdleTimeAfterScreenOffOnBattery" units="milliseconds">
- <summary>
- Chrome OS user idle time since the screen turned off sampled when the user
- becomes active again if the device runs on battery.
- </summary>
-</histogram>
-
-<histogram name="Power.IdleTimeOnAC" units="milliseconds">
- <summary>
- Chrome OS user idle time sampled when the user becomes active again if the
- device runs on AC.
- </summary>
-</histogram>
-
-<histogram name="Power.IdleTimeOnBattery" units="milliseconds">
- <summary>
- Chrome OS user idle time sampled when the user becomes active again if the
- device runs on battery.
- </summary>
-</histogram>
-
-<histogram name="Power.KernelResumeTimeOnAC" units="milliseconds">
- <summary>
- The time that the kernel took to resume the Chrome OS device from
- suspend-to-RAM state when running on AC at pre-suspend time.
- </summary>
-</histogram>
-
-<histogram name="Power.KernelResumeTimeOnBattery" units="milliseconds">
- <summary>
- The time that the kernel took to resume the Chrome OS device from
- suspend-to-RAM state when running on battery at pre-suspend time.
- </summary>
-</histogram>
-
-<histogram name="Power.KernelSuspendTimeOnAC" units="milliseconds">
- <summary>
- The time that the kernel took to suspend-to-RAM the Chrome OS device when
- running on AC.
- </summary>
-</histogram>
-
-<histogram name="Power.KernelSuspendTimeOnBattery" units="milliseconds">
- <summary>
- The time that the kernel took to suspend-to-RAM the Chrome OS device when
- running on battery.
- </summary>
-</histogram>
-
-<histogram name="Power.KeyboardBacklightLevel" units="%">
- <summary>
- The level of the keyboard backlight as a percentage. Sampled every 30
- seconds.
- </summary>
-</histogram>
-
-<histogram name="Power.LengthOfSession" units="seconds">
- <summary>
- The length of time, in seconds, that a user spent in a single session.
- Values for this metric are clamped to 12 hours, so the last bucket should be
- considered to be including all metrics above 12 hours.
- </summary>
-</histogram>
-
-<histogram name="Power.MilliConsumptionPerHourIosOnActive">
- <summary>
- The average power consumption, measured in milli-units per hour, when sync
- invalidator listens to on_application_active events. Values for this metric
- are per session, i.e. from battery level at application entering foreground
- to returning to background, and normalized to an hourly average consumption.
- This is an iOS only measurement. Due to how iOS reports battery levels, it
- is likely to see many readings of 0.
- </summary>
-</histogram>
-
-<histogram name="Power.MilliConsumptionPerHourOthers">
- <summary>
- The average power consumption, measured in milli-units per hour, for other
- sync invalidator methods. Values for this metric are per session, i.e. from
- battery level at application entering foreground to returning to background,
- and normalized to an hourly average consumption. This is an iOS only
- measurement. Due to how iOS reports battery levels, it is likely to see many
- readings of 0.
- </summary>
-</histogram>
-
-<histogram name="Power.MilliConsumptionPerHourP2P">
- <summary>
- The average power consumption, measured in milli-units per hour, when sync
- invalidator uses peer-to-peer notifications. Values for this metric are per
- session, i.e. from battery level at application entering foreground to
- returning to background, and normalized to an hourly average consumption.
- This is an iOS only measurement. Due to how iOS reports battery levels, it
- is likely to see many readings of 0.
- </summary>
-</histogram>
-
-<histogram name="Power.MilliConsumptionPerHourServer">
- <summary>
- The average power consumption, measured in milli-units per hour, when sync
- invalidator uses server-based non-blocking invalidator. Values for this
- metric are per session, i.e. from battery level at application entering
- foreground to returning to background, and normalized to an hourly average
- consumption. This is an iOS only measurement. Due to how iOS reports battery
- levels, it is likely to see many readings of 0.
- </summary>
-</histogram>
-
-<histogram name="Power.NumberOfAlsAdjustmentsPerSession">
- <summary>
- The number of times that the Automatic Light Sensor (ALS) adjusted the
- brightness during a session. Values for this metric are clamped to 10k
- count, so the last bucket should be considered to be including all metrics
- above 10k.
- </summary>
-</histogram>
-
-<histogram name="Power.NumberOfSessionsPerCharge">
- <summary>
- The number of user sessions that occured since the last time that the device
- was charged. Values for this metric are clamped at 10k, so the last bucket
- should be considered to include all metrics about 10k.
- </summary>
-</histogram>
-
-<histogram name="Power.RetrySuspendCount">
- <summary>
- The number of times Chrome OS retried suspend due to previous failure.
- </summary>
-</histogram>
-
-<histogram name="Power.SuspendStatus" enum="SuspendStatus">
- <summary>
- ChromeOS suspend status - either success, failure, or cancelled.
- </summary>
-</histogram>
-
-<histogram name="Power.ThermalAbortedFanTurnOn" units="%">
- <summary>
- The percentage of aborted fan attempts out of total fan attempts per
- session, where an abort is due to hysteresis. This value is computed from
- boot and sent when powerd starts and then every 15 minutes afterwards.
- </summary>
-</histogram>
-
-<histogram name="Power.ThermalMultipleFanTurnOn" units="%">
- <summary>
- The percentage of fan trip point passes that are more than one trip point.
- This value is computed from boot and sent when powerd starts and then every
- 15 minutes afterwards.
- </summary>
-</histogram>
-
-<histogram name="Power.TimeInSuspendAtBoot" units="minutes">
- <summary>
- Chrome OS time in minutes spent in suspend-to-RAM mode sampled at boot
- (i.e., the device most likely ran out of battery while in suspend).
- </summary>
-</histogram>
-
-<histogram name="Power.TimeInSuspendAtResume" units="minutes">
- <summary>
- Chrome OS time in minutes spent in suspend-to-RAM mode sampled at resume.
- </summary>
-</histogram>
-
-<histogram name="Power.UserBrightnessAdjustmentsPerSessionOnAC">
- <summary>
- The number of times that the user adjusted the brightness during a session
- when on AC. Values for this metric are clamped to 10k count, so the last
- bucket should be considered to be including all metrics above 10k.
- </summary>
-</histogram>
-
-<histogram name="Power.UserBrightnessAdjustmentsPerSessionOnBattery">
- <summary>
- The number of times that the user adjusted the brightness during a session
- when on battery. Values for this metric are clamped to 10k count, so the
- last bucket should be considered to be including all metrics above 10k.
- </summary>
-</histogram>
-
-<histogram name="Precache.DownloadedNonPrecache" units="bytes">
- <summary>
- The number of bytes that were downloaded over the network for HTTP/HTTPS
- fetches that were not motivated by precaching. Logged per-request.
- </summary>
-</histogram>
-
-<histogram name="Precache.DownloadedPrecacheMotivated" units="bytes">
- <summary>
- The number of bytes that were downloaded because of precaching. Logged
- per-request.
- </summary>
-</histogram>
-
-<histogram name="Precache.Saved" units="bytes">
- <summary>
- The number of bytes during user browsing that were served from the cache,
- but would have been downloaded over a network if precaching was disabled.
- Logged per-request.
- </summary>
-</histogram>
-
-<histogram name="Prerender.Event" enum="PrerenderEvent">
- <summary>
- Enumeration of what events related to prerendering have occurred.
- </summary>
-</histogram>
-
-<histogram name="Prerender.Events" enum="PrerenderHoverEvent">
- <obsolete>
- deprecated May 10 2012
- </obsolete>
- <summary>Hover Event counts for prerendering.</summary>
-</histogram>
-
-<histogram name="Prerender.FinalStatus" enum="PrerenderFinalStatus">
- <summary>
- Final status for prerender pages - either success, or why it was canceled.
- </summary>
-</histogram>
-
-<histogram name="Prerender.FinalStatusMatchComplete"
- enum="PrerenderFinalStatus">
- <summary>
- Final status for prerender pages - either success, or why it was canceled.
- This is for the MatchComplete set of pages (including some pages that were
- not actually prerendered), to match the control group.
- </summary>
-</histogram>
-
-<histogram name="Prerender.FractionPixelsFinalAtSwapin">
- <summary>
- For prerenders that are swapped in, the percentage of pixels that is already
- final at swap-in time compared to when the spinner stops.
- </summary>
-</histogram>
-
-<histogram name="Prerender.HoverStats_TimeUntilClicked" units="milliseconds">
- <obsolete>
- deprecated May 10 2012
- </obsolete>
- <summary>
- Duration that a user hovers a link before clicking on it.
-
- This is recorded for all pages loaded in a session.
- </summary>
-</histogram>
-
-<histogram name="Prerender.HoverStats_TimeUntilDiscarded" units="milliseconds">
- <obsolete>
- deprecated May 10 2012
- </obsolete>
- <summary>
- Duration that the mouse pointer hovers on a link before the mouse pointer
- moves off of it.
-
- This is recorded for all pages loaded in a session.
- </summary>
-</histogram>
-
-<histogram name="Prerender.LocalPredictorEvent"
- enum="PrerenderLocalPredictorEvents">
- <summary>
- Enumeration of what events related to the local predictor have occurred
- </summary>
-</histogram>
-
-<histogram name="Prerender.LocalPredictorLoggedInLookupTime"
- units="milliseconds">
- <summary>
- Time to perform the LoggedIn Lookup for the local predictor. This operation
- checks whether a user his likely logged into a page that we would like to
- prerender.
- </summary>
-</histogram>
-
-<histogram name="Prerender.LocalPredictorServiceLookupTime"
- units="milliseconds">
- <summary>
- Time to perform the Service Lookup for the local predictor. This operation
- queries a Google service to obtain pages to prerender, as well as whether
- prerender candidate pages are likely safe for prerendering.
- </summary>
-</histogram>
-
-<histogram name="Prerender.LocalPredictorTimeUntilUsed" units="milliseconds">
- <summary>
- Time from when a prerendered page is started to when it is first used due to
- user navigation. If the page is never used, it is not included in this
- histogram. This only refers to prerenders based on the local predictor.
- </summary>
-</histogram>
-
-<histogram name="Prerender.LocalPredictorURLLookupTime" units="milliseconds">
- <summary>
- Time to perform the URL Lookup for the local predictor. This operation
- retrieves from the user's local browsing history the URLs corresponding to
- URLIDs.
- </summary>
-</histogram>
-
-<histogram name="Prerender.LocalVisitCoreTransition"
- enum="PrerenderLocalVisitCoreTransition">
- <obsolete>
- deprecated Nov 16 2012
- </obsolete>
- <summary>
- The transition type for each new visit as recorded in the local visits
- database.
- </summary>
-</histogram>
-
-<histogram name="Prerender.LocalVisitDatabaseSize">
- <obsolete>
- deprecated Nov 16 2012
- </obsolete>
- <summary>Size of the local visits database (number of entries).</summary>
-</histogram>
-
-<histogram name="Prerender.LocalVisitEvents" enum="PrerenderLocalVisitEvents">
- <obsolete>
- deprecated Nov 16 2012
- </obsolete>
- <summary>
- Enumeration of what events related to local visits have occurred
- </summary>
-</histogram>
-
-<histogram name="Prerender.ModPagespeedHeader">
- <obsolete>
- Deprecated as of 10/2013.
- </obsolete>
- <summary>
- Previous version of the Prerender.PagespeedHeader.* histograms.
- </summary>
-</histogram>
-
-<histogram name="Prerender.OmniboxNavigationsCouldPrerender">
- <summary>
- A boolean that indicates whether the Omnibox navigation being committed
- could have been prerendered by the Omnibox Prerender system. This provides
- an upper bound for Prerender.OmniboxNavigationsUsedPrerenderCount and allows
- the potential for Omnibox Prerendering coverage to be understood. If Omnibox
- Prerendering is disabled, this histogram will register a 'false' entry. The
- total count is the equivalent of the deprecated
- NetworkActionPredictor.NavigationCount histogram.
- </summary>
-</histogram>
-
-<histogram name="Prerender.OmniboxNavigationsUsedPrerenderCount">
- <summary>
- The number of navigations that use a prerender initiated from the Omnibox.
- The count is incremented when the Prerendered tab is swapped in if the
- Prerender was initiated by the Omnibox, which obviously requires
- Prerendering from the Omnibox to be enabled.
- </summary>
-</histogram>
-
-<histogram name="Prerender.OmniboxPrerenderCount">
- <summary>
- The number of prerenders initiated from the Omnibox. This is incremented
- when the NetworkActionPredictor suggests Prerendering as an optimal strategy
- given the text the user has entered and the Autocomplete suggestion
- currently selected. It is only incremented if Prerendering from the Omnibox
- is enabled.
- </summary>
-</histogram>
-
-<histogram name="Prerender.PagespeedHeader.ServerCounts"
- enum="PagespeedHeaderServerType">
- <summary>
- The number of responses received bucketed into the range [0,4]: bucket 0 is
- the total number of responses received; bucket 1 is the number of responses
- received with an X-Mod-Pagespeed header [indicating a mod_pagespeed server];
- bucket 2 is the number of responses received with an X-Page-Speed header and
- a header value in the X-Mod-Pagespeed format (a.b.c.d-e) [indicating an
- ngx_pagespeed server]; bucket 3 is the number of responses received with an
- X-Page-Speed header and a header value in the PageSpeed Service format
- (a_b_c) [indicating a PSS server]; and bucket 4 is the number of responses
- received with an X-Page-Speed header and a header value in neither of the
- preceding formats [indicating some other server; IISpeed is the only known
- one at this stage].
- </summary>
-</histogram>
-
-<histogram name="Prerender.PagespeedHeader.VersionCounts"
- enum="PagespeedVersion">
- <summary>
- The number of responses received that either have an X-Mod-Pagespeed header
- or have an X-Page-Speed header with a value in the X-Mod-Pagespeed format
- (a.b.c.d-e), bucketed into the range [1,99]: bucket 1 is for header values
- that aren't in the a.b.c.d-e format, the remaining buckets are an encoding
- of the value: 2 + 2 * (max(c, 10) - 10) + (d &gt; 1 ? 1 : 0). The rationale
- is that 'c' is incremented with each new release and 'd' is initially 0 but
- is incremented for each patch to a release.
- </summary>
-</histogram>
-
-<histogram name="Prerender.PageviewEvents" enum="PrerenderPageviewEvents">
- <obsolete>
- deprecated Nov 16 2012
- </obsolete>
- <summary>Types of pages rendered.</summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPageLoadTime_Control" units="milliseconds">
- <obsolete>
- Deprecated 03/24/11. Replaced by
- Prerender.PerceivedPLT_ContentPrefetchPrerenderControl.
- </obsolete>
- <summary>
- Time from when a user navigates to a page to when it loads. Since the pages
- may start loading before the user navigates to it, this does not include any
- portion of load prior to navigation.
-
- This particular histogram is for all page loads for users who do not have
- prerendering enabled.
- </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPageLoadTime_PrerenderMatchControl"
- units="milliseconds">
- <obsolete>
- Deprecated 03/24/11. Replaced by
- Prerender.PerceivedPLTMatched_ContentPrefetchPrerenderControl.
- </obsolete>
- <summary>
- Time from when a user navigates to a page to when it loads. Since the pages
- may start loading before the user navigates to it, this does not include any
- portion of load prior to navigation.
-
- This particular histogram is only for pages that would have been prerendered
- if the user had prerender enabled.
- </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPageLoadTime_PrerenderMatchTreatment"
- units="milliseconds">
- <obsolete>
- Deprecated 03/24/11. Replaced by
- Prerender.PerceivedPLTMatched_ContentPrefetchPrerender.
- </obsolete>
- <summary>
- Time from when a user navigates to a page to when it loads. Since the pages
- may start loading before the user navigates to it, this does not include any
- portion of load prior to navigation.
-
- This particular histogram is for all prerendered page loads for users who
- have prerender enabled.
- </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPageLoadTime_Treatment"
- units="milliseconds">
- <obsolete>
- Deprecated 03/24/11. Replaced by
- Prerender.PerceivedPLT_ContentPrefetchPrerender.
- </obsolete>
- <summary>
- Time from when a user navigates to a page to when it loads. Since the pages
- may start loading before the user navigates to it, this does not include any
- portion of load prior to navigation.
-
- This particular histogram is for all page loads for users who have
- prerendering enabled.
- </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPageLoadTime_WindowControl"
- units="milliseconds">
- <obsolete>
- Deprecated 03/24/11. Replaced by
- Prerender.PerceivedPLTWindowed_ContentPrefetchPrerenderControl.
- </obsolete>
- <summary>
- Time from when a user navigates to a page to when it loads. Since the pages
- may start loading before the user navigates to it, this does not include any
- portion of load prior to navigation.
-
- This particular histogram is for all page loads within 30 seconds after a
- prefetch tag is seen for users who do not have prerendering enabled.
- </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPageLoadTime_WindowTreatment"
- units="milliseconds">
- <obsolete>
- Deprecated 03/24/11. Replaced by
- Prerender.PerceivedPLTWindowed_ContentPrefetchPrerender.
- </obsolete>
- <summary>
- Time from when a user navigates to a page to when it loads. Since the pages
- may start loading before the user navigates to it, this does not include any
- portion of load pre navigation.
-
- This particular histogram is for all page loads within 30 seconds after a
- prefetch tag is seen for users who have prerendering enabled.
- </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPLT" units="milliseconds">
- <summary>
- Time from when a user navigates to a page to when it loads. Since the pages
- may start loading before the user navigates to it, this does not include any
- portion of load prior to navigation.
-
- This is recorded for all pages loaded in a session.
- </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPLTFirstAfterMiss" units="milliseconds">
- <summary>
- Time from when a user navigates to a page to when it loads. Since the pages
- may start loading before the user navigates to it, this does not include any
- portion of load prior to navigation.
-
- This is recorded for the first page load completing immediately after a
- prerender.
- </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPLTFirstAfterMissAnyOnly"
- units="milliseconds">
- <summary>
- Time from when a user navigates to a page to when it loads. Since the pages
- may start loading before the user navigates to it, this does not include any
- portion of load prior to navigation.
-
- &quot;FirstAfterMiss&quot; means the first pageload after a prerender miss.
- There are two types: Any, and Non-overlapping. The latter only applies to
- page loads initiated after the prerender. This variable records cases where
- only Any triggered.
- </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPLTFirstAfterMissBoth" units="milliseconds">
- <summary>
- Time from when a user navigates to a page to when it loads. Since the pages
- may start loading before the user navigates to it, this does not include any
- portion of load prior to navigation.
-
- &quot;FirstAfterMiss&quot; means the first pageload after a prerender miss.
- There are two types: Any, and Non-overlapping. The latter only applies to
- page loads initiated after the prerender. This variable records cases where
- both triggered.
- </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping"
- units="milliseconds">
- <summary>
- Time from when a user navigates to a page to when it loads. Since the pages
- may start loading before the user navigates to it, this does not include any
- portion of load prior to navigation.
-
- This is recorded for the first page load completing immediately after a
- prerender, but which has also started after the prerender has been
- initiated.
- </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly"
- units="milliseconds">
- <summary>
- Time from when a user navigates to a page to when it loads. Since the pages
- may start loading before the user navigates to it, this does not include any
- portion of load prior to navigation.
-
- &quot;FirstAfterMiss&quot; means the first pageload after a prerender miss.
- There are two types: Any, and Non-overlapping. The latter only applies to
- page loads initiated after the prerender. This variable records cases where
- only Non-overlapping triggered.
- </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPLTMatched" units="milliseconds">
- <summary>
- Time from when a user navigates to a page to when it loads. Since the pages
- may start loading before the user navigates to it, this does not include any
- portion of load prior to navigation.
-
- This is recorded only for prerendered pages, or for pages which would have
- been prerendered in the control case.
- </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPLTMatchedComplete" units="milliseconds">
- <summary>
- Time from when a user navigates to a page to when it loads. Since the pages
- may start loading before the user navigates to it, this does not include any
- portion of load prior to navigation.
-
- This is recorded only for prerendered pages, or for pages which would have
- been prerendered in the control case.
-
- In MatchedComplete, the prerender group also contains cancelled prerenders,
- so as to produce a perfect match of page views attributed this group in the
- prerender group with those attributed to this group in the control group.
- </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPLTWindowed" units="milliseconds">
- <summary>
- Time from when a user navigates to a page to when it loads. Since the pages
- may start loading before the user navigates to it, this does not include any
- portion of load prior to navigation.
-
- This is recorded for all page loads which happen within 30 seconds after a
- prefetch tag is observed.
- </summary>
-</histogram>
-
-<histogram name="Prerender.PerceivedPLTWindowNotMatched" units="milliseconds">
- <summary>
- Time from when a user navigates to a page to when it loads. Since the pages
- may start loading before the user navigates to it, this does not include any
- portion of load prior to navigation.
-
- This is recorded for all page loads which happen within 30 seconds after a
- prefetch tag is observed and which do not correspond to a prerender tag.
- </summary>
-</histogram>
-
-<histogram name="Prerender.PercentLoadDoneAtSwapin">
- <summary>
- For prerenders that are swapped in, the percentage of the time from load
- start until the onload event fires that has elapsed at the time of the
- swapin.
- </summary>
-</histogram>
-
-<histogram name="Prerender.PeriodicCleanupDeleteContentsTime"
- units="milliseconds">
- <summary>
- How long the cleanup portion of PrerenderManager::PeriodicCleanup takes, to
- measure jank.
- </summary>
-</histogram>
-
-<histogram name="Prerender.PeriodicCleanupResourceCheckTime"
- units="milliseconds">
- <summary>
- How long the resource check portion of PrerenderManager::PeriodicCleanup
- takes, to measure jank.
- </summary>
-</histogram>
-
-<histogram name="Prerender.PrerenderCountOf3Max">
- <summary>
- After launching a prerender, how many simultanious prerenders are recorded
- as running, out of a maximum of three.
- </summary>
-</histogram>
-
-<histogram name="Prerender.PrerenderNotSwappedInPLT" units="milliseconds">
- <summary>
- For prerenders that finish loading before they are ever swapped in, their
- page load time until the onload event fires.
- </summary>
-</histogram>
-
-<histogram name="Prerender.PrerendersPerSessionCount">
- <summary>
- The number of sessions that have at least X successful prerenders.
- </summary>
-</histogram>
-
-<histogram name="Prerender.RendererIdleTime" units="milliseconds">
- <obsolete>
- deprecated Nov 16 2012
- </obsolete>
- <summary>
- This is the time from when a prerendered page finishes loading to when it is
- displayed, as measured by the renderer process. When a page is displayed
- before it finishes loading, no value is recorded in this histogram.
- </summary>
-</histogram>
-
-<histogram name="Prerender.RendererPerceivedPLT" units="milliseconds">
- <obsolete>
- deprecated Nov 16 2012
- </obsolete>
- <summary>
- Perceived load time of a page, as measured by the renderer process. For
- non-prerendered pages, this is just BeginToFinish. For displayed prerendered
- pages, this is the time from when the prerendered page is moved into a
- TabContents until finish. &quot;Finish&quot; == after onload() and all
- resources are loaded. Note that this is 0 if the loading finishes before the
- page is moved into a TabContents.
- </summary>
-</histogram>
-
-<histogram name="Prerender.RendererPerceivedPLTMatched" units="milliseconds">
- <obsolete>
- deprecated Nov 16 2012
- </obsolete>
- <summary>
- Perceived load time of a prerendered page that is displayed, as measured by
- the renderer process. This is the time from when the prerendered page is
- moved into a TabContents until finish. &quot;Finish&quot; == after onload()
- and all resources are loaded. Note that this is 0 if the loading finishes
- before the the page is moved into a TabContents.
- </summary>
-</histogram>
-
-<histogram name="Prerender.RendererTimeUntilDisplay" units="milliseconds">
- <obsolete>
- deprecated Nov 16 2012
- </obsolete>
- <summary>
- The time elapsed between when the prerendering of a page starts and when the
- page is displayed, as measured by the renderer process. Prerendered pages
- discarded without being displayed are excluded from this count.
- </summary>
-</histogram>
-
-<histogram name="Prerender.SchemeCancelReason"
- enum="PrerenderSchemeCancelReason">
- <summary>
- The detailed reason why a prerender is canceled with
- FINAL_STATUS_UNSUPPORTED_SCHEME
- </summary>
-</histogram>
-
-<histogram name="Prerender.Sessions" enum="PrerenderMode">
- <obsolete>
- deprecated Nov 16 2012
- </obsolete>
- <summary>Enumeration of how prerender was used per session.</summary>
-</histogram>
-
-<histogram name="Prerender.SessionStorageNamespaceMergeTime"
- units="milliseconds">
- <summary>Time to perform the session storage namespace merge.</summary>
-</histogram>
-
-<histogram name="Prerender.SimulatedLocalBrowsingBaselinePLT"
- units="milliseconds">
- <summary>
- For simulated local browsing prerendering, the baseline PLT of pages without
- any prerendering for pages that would be prerendered.
- </summary>
-</histogram>
-
-<histogram name="Prerender.SimulatedLocalBrowsingPLT" units="milliseconds">
- <summary>
- For simulated local browsing prerendering, the estimated PLT of pages with
- prerendering enabled for pages that would be prerendered.
- </summary>
-</histogram>
-
-<histogram name="Prerender.TabContentsDeleterSuppressedDialog"
- enum="BooleanSuppressed">
- <summary>
- A boolean that indicates how often we suppress a dialog from a tab when
- swapping it with a prerender.
- </summary>
-</histogram>
-
-<histogram name="Prerender.TabContentsDeleterTimeout"
- enum="BooleanCloseTimeout">
- <summary>
- A boolean that indicates how often we fail to delete an old prerendered tab
- before the timeout.
- </summary>
-</histogram>
-
-<histogram name="Prerender.TabHelperEvent" enum="PrerenderTabHelperEvents">
- <summary>
- Enumeration of what events related to the TabHelper class have occurred.
- </summary>
-</histogram>
-
-<histogram name="Prerender.TimeBetweenPrerenderRequests" units="milliseconds">
- <summary>Time between subsequent prerender requests.</summary>
-</histogram>
-
-<histogram name="Prerender.TimeSinceLastRecentVisit" units="milliseconds">
- <summary>
- The time elapsed between the most recent visit to a URL and when an
- attempted prerender of the same URL is cancelled with
- FINAL_STATUS_RECENTLY_VISITED.
- </summary>
-</histogram>
-
-<histogram name="Prerender.TimeToClick" units="milliseconds">
- <obsolete>
- deprecated Nov 16 2012
- </obsolete>
- <summary>Duration that a user hovers a link before clicking on it.</summary>
-</histogram>
-
-<histogram name="Prerender.TimeUntilUsed" units="milliseconds">
- <obsolete>
- deprecated Nov 16 2012. See Prerender.TimeUntilUsed2, which has a larger
- range.
- </obsolete>
- <summary>
- Time from when a prerendered page is started to when it is first used due to
- user navigation. If the page is never used, it is not included in this
- histogram.
- </summary>
-</histogram>
-
-<histogram name="Prerender.TimeUntilUsed2" units="milliseconds">
- <summary>
- Time from when a prerendered page is started to when it is first used due to
- user navigation. If the page is never used, it is not included in this
- histogram.
- </summary>
-</histogram>
-
-<histogram name="Profile.AppCount">
- <summary>The number of installed apps when a profile is opened.</summary>
-</histogram>
-
-<histogram name="Profile.CreateResult" enum="ProfileCreateResult">
- <summary>Result (final status) when creating a new profile.</summary>
-</histogram>
-
-<histogram name="Profile.CreateTime" units="milliseconds">
- <obsolete>
- Deprecated as of 8/2013.
- </obsolete>
- <summary>
- Back-end time elapsed while creating a new profile. The max is 30 seconds,
- when an external timeout was applied.
- </summary>
-</histogram>
-
-<histogram name="Profile.CreateTimeCanceled" units="milliseconds">
- <obsolete>
- Deprecated as of 8/2013.
- </obsolete>
- <summary>
- Time elapsed before the user decided to cancel creation of a new profile.
- Since only managed-user profile creation can be canceled, this time comes
- from managed-user registration. The max is 30 seconds, when an external
- timeout was applied.
- </summary>
-</histogram>
-
-<histogram name="Profile.CreateTimeCanceledNoTimeout" units="milliseconds">
- <summary>
- Time elapsed from when the handler received the message that a user clicked
- 'Create' until the user decided to cancel creation of a new profile. Since
- only managed-user profile creation can be canceled, this time comes from
- managed-user registration.
- </summary>
-</histogram>
-
-<histogram name="Profile.CreateTimeNoTimeout" units="milliseconds">
- <summary>
- Time elapsed from when the handler received the message that a user clicked
- 'Create' until the creation either failed with a local error (see
- Profile.CreateResult), was canceled (also recorded in
- Profile.CreateTimeCanceledNoTimeout), or completed successfully.
- </summary>
-</histogram>
-
-<histogram name="Profile.ProfileError" enum="ProfileErrorType">
- <summary>
- The error with the current user profile that caused an error dialog to be
- shown. This dialog is shown usually when there is some sort of corruption in
- the user's profile data.
- </summary>
-</histogram>
-
-<histogram name="Profile.SupervisedProfileCreateError"
- enum="GoogleServiceAuthError">
- <summary>
- The error code generated in the final step (registration step) of creating a
- new supervised profile.
- </summary>
-</histogram>
-
-<histogram name="Profile.SupervisedProfileImportError"
- enum="GoogleServiceAuthError">
- <summary>
- The error code generated in the final step (registration step) of importing
- a supervised profile.
- </summary>
-</histogram>
-
-<histogram name="Profile.SupervisedProfileTotalCreateTime" units="milliseconds">
- <summary>
- Time elapsed from when the handler received the message that a user clicked
- 'Create' to create a new supervised user profile until the registration ends
- either successfully or with a failure (both recorded in
- Profile.SupervisedProfileCreateResult).
- </summary>
-</histogram>
-
-<histogram name="Profile.SupervisedProfileTotalImportTime" units="milliseconds">
- <summary>
- Time elapsed from when the handler received the message that a user clicked
- 'Import supervised user' until the registration ends either successfully or
- with a failure (both recorded in Profile.SupervisedProfileImportResult).
- </summary>
-</histogram>
-
-<histogram name="ProfileReset.SendFeedback" enum="Boolean">
- <summary>
- Signifies if the user selected &quot;Send feedback&quot; checkbox in the
- Reset Profile dialog.
- </summary>
-</histogram>
-
-<histogram name="Protector.DefaultSearchProvider" enum="ProtectorError">
- <obsolete>
- Deprecated 8/2013. No longer tracked.
- </obsolete>
- <summary>
- Errors that Protector detects about default search provider in Web Data.
- Reported once when Web Data is loaded.
- </summary>
-</histogram>
-
-<histogram name="Protector.Preferences" enum="ProtectorError">
- <obsolete>
- Deprecated 8/2013. No longer tracked.
- </obsolete>
- <summary>
- Errors that Protector detects about protected settings in Preferences.
- Reported once when profile is loaded.
- </summary>
-</histogram>
-
-<histogram name="Protector.SearchProvider" enum="SearchEngine">
- <obsolete>
- Deprecated 8/2013. No longer tracked.
- </obsolete>
- <summary>
- When the default search provider setting is changed outside of Chrome, which
- is detected by the Protector, this histogram reports the new setting.
- </summary>
-</histogram>
-
-<histogram name="Protector.StartupSettings" enum="SessionStartupType">
- <obsolete>
- Deprecated 8/2013. No longer tracked.
- </obsolete>
- <summary>
- When the startup settings are changed outside of Chrome, which is detected
- by the Protector, this histogram reports the new setting.
- </summary>
-</histogram>
-
-<histogram name="Quickoffice.docPageCount">
- <summary>
- Records the page count when a compound binary format document is opened.
- </summary>
-</histogram>
-
-<histogram name="Quickoffice.docParagraphCount">
- <summary>
- Records the paragraph count when a compound binary format document is
- opened.
- </summary>
-</histogram>
-
-<histogram name="Quickoffice.docSectionCount">
- <summary>
- Records the section count when a compound binary format document is opened.
- </summary>
-</histogram>
-
-<histogram name="Quickoffice.docxPageCount">
- <summary>
- Records the page count when an OOXML format document is opened.
- </summary>
-</histogram>
-
-<histogram name="Quickoffice.docxParagraphCount">
- <summary>
- Records the paragraph count when an OOXML format document is opened.
- </summary>
-</histogram>
-
-<histogram name="Quickoffice.docxSectionCount">
- <summary>
- Records the section count when an OOXML format document is opened.
- </summary>
-</histogram>
-
-<histogram name="Quickoffice.ErrorTypes" enum="QuickofficeErrorTypes">
- <summary>
- Records the various different error types encountered when opening and
- reading MS Office file formats in the Quickoffice viewer. These range from
- Nacl crashes and uncaught javascript exceptions to document errors inside
- Quickoffice Web Toolkit (eg QOWT). The errors are recorded against the file
- format in which they occurred.
- </summary>
-</histogram>
-
-<histogram name="Quickoffice.FileFormat" enum="QuickofficeFileFormat">
- <summary>
- Records the various different file types supported by Quickoffice (like MS
- Word, Excel, Powerpoint files) when they opened in the browser to measure
- which file formats are most popular.
- </summary>
-</histogram>
-
-<histogram name="Quickoffice.pptMasterCount">
- <summary>
- Records the number of slide masters when a compound binary format
- presentation is opened.
- </summary>
-</histogram>
-
-<histogram name="Quickoffice.pptSlideCount">
- <summary>
- Records the slide count when a compound binary format presentation is
- opened.
- </summary>
-</histogram>
-
-<histogram name="Quickoffice.pptxMasterCount">
- <summary>
- Records the number of slide masters when an OOXML format presentation is
- opened.
- </summary>
-</histogram>
-
-<histogram name="Quickoffice.pptxSlideCount">
- <summary>
- Records the slide count when an OOXML format presentation is opened.
- </summary>
-</histogram>
-
-<histogram name="Quickoffice.xlsFormattedCellCount">
- <summary>
- Records the number of cells that contain formatting data in the default
- worksheet when a compound binary format spreadsheet is opened.
- </summary>
-</histogram>
-
-<histogram name="Quickoffice.xlsNonEmptyCellCount">
- <summary>
- Records the number of non-empty cells in the default worksheet when a
- compound binary format spreadsheet is opened.
- </summary>
-</histogram>
-
-<histogram name="Quickoffice.xlsSheetCount">
- <summary>
- Records the number of worksheets when a compound binary format spreadsheet
- is opened.
- </summary>
-</histogram>
-
-<histogram name="Quickoffice.xlsxFormattedCellCount">
- <summary>
- Records the number of cells that contain formatting data in the default
- worksheet when an OOXML format spreadsheet is opened.
- </summary>
-</histogram>
-
-<histogram name="Quickoffice.xlsxNonEmptyCellCount">
- <summary>
- Records the number of non-empty cells when an OOXML format spreadsheet is
- opened.
- </summary>
-</histogram>
-
-<histogram name="Quickoffice.xlsxSheetCount">
- <summary>
- Records the number of worksheets when an OOXML format spreadsheet is opened.
- </summary>
-</histogram>
-
-<histogram name="Renderer.AcceleratedFixedRootBackground"
- enum="AcceleratedFixedRootBackground">
- <summary>
- Keeps track of the number of main frame scrolls with an accelerated fixed
- root background, the number of main frame scrolls with an unaccelerated
- fixed root background, and the total number of main frame scrolls.
- </summary>
-</histogram>
-
-<histogram name="Renderer.CompositedScrolling" enum="CompositedScrolling">
- <summary>
- Total count of the number of RenderLayers which are scrollable areas, need
- to be promoted to stacking containers, and will use composited scrolling.
- Each bucket is sampled at most once per RenderLayer, when the RenderLayer
- first becomes scrollable, first needs to become a stacking container, and
- first uses composited scrolling, respectively.
- </summary>
-</histogram>
-
-<histogram name="Renderer.DrawDuration" units="milliseconds">
- <summary>The time it takes for the compositor to draw a frame.</summary>
-</histogram>
-
-<histogram name="Renderer.DrawDurationOverestimate" units="milliseconds">
- <summary>
- The amount by which the compositor's draw duration was overestimated in a
- particular frame (0 if the duration was perfectly predicted or
- underestimated).
- </summary>
-</histogram>
-
-<histogram name="Renderer.DrawDurationUnderestimate" units="milliseconds">
- <summary>
- The amount by which the compositor's draw duration was underestimated in a
- particular frame (0 if the duration was perfectly predicted or
- overestimated).
- </summary>
-</histogram>
-
-<histogram name="Renderer.GpuLatency" units="milliseconds">
- <summary>
- The delay between the compositor submitting a command to the GPU and that
- command executing on the GPU. This delay is measured once per frame.
- </summary>
-</histogram>
-
-<histogram name="Renderer.GpuLatencyOverestimate" units="milliseconds">
- <summary>
- The amount by which GPU latency was overestimated in a particular frame (0
- if the latency was perfectly predicted or underestimated).
- </summary>
-</histogram>
-
-<histogram name="Renderer.GpuLatencyUnderestimate" units="milliseconds">
- <summary>
- The amount by which GPU latency was underestimated in a particular frame (0
- if the latency was perfectly predicted or overestimated).
- </summary>
-</histogram>
-
-<histogram name="Renderer.PixelIncreaseFromTransitions">
- <summary>
- A lower-bound on the percentage increase in memory that would result from
- promoting all layers that have a webkit-transition on opacity or transform.
- </summary>
-</histogram>
-
-<histogram name="Renderer.unloadEventsDurationMS" units="milliseconds">
- <obsolete>
- Deprecated as of 10/2013.
- </obsolete>
- <summary>
- This measures how long all unload event handlers required to run whenever an
- unload event is processed.
- </summary>
-</histogram>
-
-<histogram name="Renderer2.FinishDocToFinish">
- <summary>
- The time from when a document finished loading to when all it's resources
- are also loaded.
- </summary>
-</histogram>
-
-<histogram name="Renderer2.RequestToFinish">
- <obsolete>
- Deprecated 6/15/09. Replaced by Renderer2.RequestToFinish_L
- </obsolete>
- <summary>
- The time from when a page was requested by a user to when it is fully
- loaded.
- </summary>
-</histogram>
-
-<histogram name="Renderer2.RequestToFinish_L">
- <summary>
- The time from when a page was requested by a user to when it is fully
- loaded.
- </summary>
-</histogram>
-
-<histogram name="Renderer2.RequestToFirstLayout">
- <summary>
- The time from when a page was requested by a user to its first layout.
- </summary>
-</histogram>
-
-<histogram name="Renderer2.RequestToStart">
- <summary>
- The time from when a page was requested by a user to when it starts loading.
- </summary>
-</histogram>
-
-<histogram name="Renderer2.StartToFinish">
- <summary>
- The time from when a page started loading to when it is fully loaded.
- </summary>
-</histogram>
-
-<histogram name="Renderer2.StartToFinishDoc">
- <summary>
- The time from when a page starts loading to when the main document is
- finished loading.
- </summary>
-</histogram>
-
-<histogram name="Renderer2.StartToFirstLayout">
- <summary>
- The time from when a page starts loading to its first layout.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.Abandoned" enum="Abandoned">
- <summary>
- Distribution of actual finished pages, vs abandoned pages, where we needed
- to declare a finish time prematurely since the page was being closed
- (exited).
- </summary>
-</histogram>
-
-<histogram name="Renderer4.AccelContentPaintDurationMS">
- <summary>
- Time spent by WebKit painting the page, in milliseconds, when the GPU
- acceleration is active, for paints that affect non-root layers.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.AccelContentPaintMegapixPerSecond">
- <summary>
- WebKit paint throughput, measured in megapixels per second, when GPU
- acceleration is active, for paints that affect non-root layers.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.AccelDoDeferredUpdateDelay">
- <summary>Time between frames when GPU acceleration is active.</summary>
-</histogram>
-
-<histogram name="Renderer4.AccelRootPaintDurationMS">
- <summary>
- Time spent by WebKit painting the page, in milliseconds, when the GPU
- acceleration is active, for paints that affect the root layer.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.AccelRootPaintMegapixPerSecond">
- <summary>
- WebKit paint throughput, measured in megapixels per second, when GPU
- acceleration is active, for paints that affect the root layer.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.AnimationCallbackDelayTime" units="milliseconds">
- <summary>
- Time from when the animation callback was posted to when it ran.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.BeginToCommit" units="milliseconds">
- <summary>
- Time from &quot;begin&quot; to &quot;commit.&quot; &quot;Begin&quot;==
- &quot;request&quot; if user requested, and &quot;start&quot; otherwise.
- &quot;Request&quot;== time when user requested document. &quot;Start&quot;==
- time when renderer requested load of document, after any unload of last
- document. &quot;Commit&quot;== time when renderer got first byte of
- document.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.BeginToFinish">
- <summary>TBD</summary>
-</histogram>
-
-<histogram name="Renderer4.BeginToFinishDoc">
- <summary>TBD</summary>
-</histogram>
-
-<histogram name="Renderer4.BeginToFirstPaint" units="milliseconds">
- <summary>
- Time from &quot;begin&quot; to &quot;first paint.&quot; &quot;Begin&quot;==
- &quot;request&quot; if user requested, and &quot;start&quot; otherwise.
- &quot;Request&quot;== time when user requested document. &quot;Start&quot;==
- time when renderer requested load of document, after any unload of last
- document. &quot;First paint&quot;== time when first paint operation was
- performed.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.BeginToFirstPaintAfterLoad" units="milliseconds">
- <summary>
- Time from &quot;big&quot; to &quot;first paint after load.&quot;
- &quot;Begin&quot;== &quot;request&quot; if user requested, and
- &quot;start&quot; otherwise. &quot;Request&quot;== time when user requested
- document. &quot;Start&quot;== time when renderer requested load of document,
- after any unload of last document. &quot;First paint after load&quot;== time
- after onload() when first paint operation is performed.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.CommitToFinish" units="milliseconds">
- <summary>
- Time from &quot;commit&quot; to &quot;finish.&quot; &quot;Commit&quot;==
- time when renderer got first byte of document. &quot;Finish&quot;==after
- onload() and all resources are loaded.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.CommitToFinishDoc" units="milliseconds">
- <summary>
- Time from &quot;commit&quot; to &quot;finish doc.&quot; &quot;Commit&quot;==
- time when renderer got first byte of document. &quot;Finish doc&quot; ==
- main document loaded, before onload(). &quot;Finish&quot;==after onload()
- and all resources are loaded.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.CommitToFirstPaint" units="milliseconds">
- <summary>
- Time from &quot;commit&quot; to &quot;first paint.&quot;
- &quot;Commit&quot;== time when renderer got first byte of document.
- &quot;First paint&quot;== time when first paint operation was performed.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.CommitToFirstPaintAfterLoad" units="milliseconds">
- <summary>
- Time from &quot;commit&quot; to &quot;first paint after load.&quot;
- &quot;Commit&quot;== time when renderer got first byte of document.
- &quot;First paint after load&quot;== time after onload() when first paint
- operation is performed.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.CompositorThreadImplDrawDelay" units="milliseconds">
- <summary>
- Time between frames, as measured on the compositor thread. This is collected
- once per frame while it is being drawn to the screen in the compositor.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.drawPixelCountCulled" units="NormalizedPixels">
- <obsolete>
- Renamed to Renderer4.pixelCountCulled_Draw.
- </obsolete>
- <summary>
- Number of pixels that culling prevented being drawn to the screen,
- normalized to the viewport size. This is collected once per frame while it
- is being drawn to the screen in the compositor.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.drawPixelCountOpaque" units="NormalizedPixels">
- <obsolete>
- Renamed to Renderer4.pixelCountOpaque_Draw.
- </obsolete>
- <summary>
- Number of pixels drawn to the screen and known opaque, normalized to the
- viewport size. This is collected once per frame while it is being drawn to
- the screen in the compositor.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.drawPixelCountTranslucent" units="NormalizedPixels">
- <obsolete>
- Renamed to Renderer4.pixelCountTranslucent_Draw.
- </obsolete>
- <summary>
- Number of pixels drawn to the screen and not known opaque, normalized to the
- viewport size. This is collected once per frame while it is being drawn to
- the screen in the compositor.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.FinishDocToFinish" units="milliseconds">
- <summary>
- Time from &quot;finish doc&quot; to &quot;finish.&quot; &quot;Finish
- doc&quot;== main document loaded, before onload(). &quot;Finish&quot;==after
- onload() and all resources are loaded.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.FinishToFirstPaintAfterLoad" units="milliseconds">
- <summary>
- Time from &quot;finish &quot; to &quot;first paint after load.&quot;
- &quot;Finish&quot;==after onload() and all resources are loaded. &quot;First
- paint after load&quot;== time after onload() when first paint operation is
- performed.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.InvalidationRegionApproximateRectCount"
- units="rects">
- <summary>
- Number of rects inside of a PictureLayer's invalidation region per commit.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.LanguageDetection" units="milliseconds">
- <summary>
- Time to determine the page language. This is done after the page has been
- loaded.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.LCDText.PercentageOfAALayers" units="%">
- <summary>
- The ratio of LCDText CC Layers / candidate LCDText layers. Recorded in
- LayerTreeHost, after LayerTreeHostCommon::CalculateDrawProperties() has
- computed the properties we need. Only recorded for the first 50 frames of
- every page.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.LCDText.PercentageOfCandidateLayers" units="%">
- <summary>
- The ratio of CC Layers which are candidates for LCDText AA / total picture
- or content Layers. Recorded in LayerTreeHost, after
- LayerTreeHostCommon::CalculateDrawProperties() has computed the properties
- we need. Only recorded for the first 50 frames of every page.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.LoadType" enum="LoadType">
- <summary>
- Probability distribution for enumerated varieties of page loads.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.pixelCountCulled_Draw" units="NormalizedPixels">
- <summary>
- Number of pixels that culling prevented being drawn to the screen, recorded
- as 10 times the percentage of the viewport that these pixels cover. This is
- collected once per frame while it is being drawn to the screen in the
- compositor.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.pixelCountOpaque" units="NormalizedPixels">
- <summary>
- Number of pixels known to be opaque, recorded as 10 times the percentage of
- the viewport that these pixels cover.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.pixelCountPainted" units="NormalizedPixels">
- <summary>
- Number of pixels painted by WebKit into main memory, recorded as 10 times
- the percentage of the viewport that these pixels cover. This is collected
- once per commit from WebKit to the compositor.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.pixelCountTranslucent" units="NormalizedPixels">
- <summary>
- Number of pixels not known to be opaque opaque, recorded as 10 times the
- percentage of the viewport that these pixels cover.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.renderPassCount">
- <summary>
- The number of render passes (or render targets) in the renderer's frame. If
- the value is more than one, then an intermediate rendering target must be
- used during the rendering of the frame for each render pass greater than
- one.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.RequestToFinish" units="milliseconds">
- <summary>
- Time from &quot;request&quot; to &quot;finish.&quot; &quot;Request&quot;==
- time when user requested document. &quot;Finish&quot;==after onload() and
- all resources are loaded.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.RequestToStart" units="milliseconds">
- <summary>
- Time from &quot;request&quot; to &quot;start.&quot; &quot;Request&quot;==
- time when user requested document. &quot;Start&quot;== time when renderer
- requested load of document, after any unload of last document.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.Snapshot">
- <summary>Time to capture a renderer snapshot.</summary>
-</histogram>
-
-<histogram name="Renderer4.SoftwareCompositorThreadImplDrawDelay"
- units="milliseconds">
- <summary>
- Time between frames when the software renderer is being used, as measured on
- the compositor thread. This is collected once per frame while it is being
- drawn to the screen in the compositor.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.SoftwareDoDeferredUpdateDelay">
- <summary>Time between frames when the page is not GPU accelerated.</summary>
-</histogram>
-
-<histogram name="Renderer4.SoftwarePaintDurationMS">
- <summary>
- Time spent by WebKit painting the page, in milliseconds, when the page is
- not GPU accelerated.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.SoftwarePaintMegapixPerSecond">
- <summary>
- WebKit paint throughput, measured in megapixels per second, when the page is
- not GPU accelerated.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.StartToCommit" units="milliseconds">
- <summary>
- Time from &quot;start&quot; to &quot;commit.&quot; &quot;Start&quot;== time
- when renderer requested load of document, after any unload of last document.
- &quot;Commit&quot;== time when renderer got first byte of document.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.StartToFinish" units="milliseconds">
- <summary>
- Time from &quot;start&quot; to &quot;finish.&quot; &quot;Start&quot;== time
- when renderer requested load of document, after any unload of last document.
- &quot;Finish&quot;==after onload() and all resources are loaded.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.TextureGpuUploadTimeUS">
- <summary>
- The number of microseconds it took to upload a tile's full texture as
- measured on the GPU process.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.Thumbnail">
- <summary>Time to capture a renderer thumbnail.</summary>
-</histogram>
-
-<histogram name="Renderer4.tileCountCulled_Upload" units="NormalizedTiles">
- <summary>
- Number of tiles that culling prevented being uploaded to texture memory.
- This is an approximation and is recorded as a 100 times the percentage of
- the number of tiles, of default size, needed to cover the viewport. This is
- collected once per commit from WebKit to the compositor.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.uploadPixelCountCulled" units="NormalizedPixels">
- <obsolete>
- Deprecated as of 04/2012, replaced with Renderer4.tileCountCulled_Upload.
- </obsolete>
- <summary>
- Number of pixels that culling prevented being uploaded to texture memory,
- normalized to the viewport size. This is collected once per commit from
- WebKit to the compositor.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.uploadPixelCountOpaque" units="NormalizedPixels">
- <obsolete>
- Renamed to Renderer4.pixelCountOpaque_Upload.
- </obsolete>
- <summary>
- Number of pixels uploaded to texture memory and known to be opaque,
- normalized to the viewport size. This is collected once per commit from
- WebKit to the compositor.
- </summary>
-</histogram>
-
-<histogram name="Renderer4.uploadPixelCountTranslucent"
- units="NormalizedPixels">
- <obsolete>
- Renamed to Renderer4.pixelCountTranslucent_Upload.
- </obsolete>
- <summary>
- Number of pixels uploaded to texture memory and not known opaque, normalized
- to the viewport size. This is collected once per commit from WebKit to the
- compositor.
- </summary>
-</histogram>
-
-<histogram name="RequestAutocomplete.DismissalState"
- enum="AutofillDialogDismissalState">
- <summary>
- The state of the requestAutocomplete() dialog when it was dismissed.
- </summary>
-</histogram>
-
-<histogram name="RequestAutocomplete.InitialUserState"
- enum="AutofillDialogInitialUserState">
- <summary>
- The initial state of a user that's interacting with a freshly shown
- requestAutocomplete() dialog.
- </summary>
-</histogram>
-
-<histogram name="RequestAutocomplete.PopupInDialog"
- enum="AutofillDialogPopupEvent">
- <summary>
- User interactions with the Autofill popup shown while filling an
- requestAutocomplete() dialog.
- </summary>
-</histogram>
-
-<histogram name="RequestAutocomplete.Security" enum="AutofillDialogSecurity">
- <summary>
- Measures the frequency of security warnings and errors in the
- RequestAutocomplete dialog.
- </summary>
-</histogram>
-
-<histogram name="RequestAutocomplete.UiDuration" units="ms">
- <summary>
- Measures the duration for which an requestAutocomplete() dialog was shown.
- </summary>
-</histogram>
-
-<histogram name="RequestAutocomplete.UiDuration.Cancel" units="ms">
- <summary>
- Measures the duration for which an requestAutocomplete() dialog was shown,
- in cases where the user ended up canceling out of the dialog.
- </summary>
-</histogram>
-
-<histogram name="RequestAutocomplete.UiDuration.Submit" units="ms">
- <summary>
- Measures the duration for which an requestAutocomplete() dialog was shown,
- in cases where the user ended up accepting the dialog.
- </summary>
-</histogram>
-
-<histogram name="RequestAutocomplete.UiEvents" enum="AutofillDialogUiEvents">
- <summary>
- Measures how users are interacting with the requestAutocomplete() dialog UI.
- </summary>
-</histogram>
-
-<histogram name="RequestAutocomplete.UiLatencyToShow" units="ms">
- <summary>
- Measures the duration of time it takes for the requestAutocomplete() UI to
- be actionable by the user after it is shown.
- </summary>
-</histogram>
-
-<histogram name="RequestAutocomplete.WalletErrors" enum="WalletErrors">
- <summary>
- Measures the frequency of errors in communicating with the Google Online
- Wallet server.
- </summary>
-</histogram>
-
-<histogram name="RequestAutocomplete.WalletRequiredActions"
- enum="WalletRequiredActions">
- <summary>
- Measures the frequency of required user actions returned by the Google
- Online Wallet server.
- </summary>
-</histogram>
-
-<histogram name="SB.BloomFilter" units="milliseconds">
- <summary>
- The first stage check that measures the time that Chrome took to check if a
- URL is present in our in-memory bloom filter.
- </summary>
-</histogram>
-
-<histogram name="SB.BuildBloom">
- <obsolete>
- Deprecated 9/2012. No longer generated.
- </obsolete>
- <summary>TBD.</summary>
-</histogram>
-
-<histogram name="SB.Database" units="milliseconds">
- <summary>
- The second stage check that measures the time that Chrome took to check if a
- URL is present in our SQLite database.
- </summary>
-</histogram>
-
-<histogram name="SB.DBCheck" units="milliseconds">
- <summary>
- The second stage check that mesures the time that Chrome took to check if a
- URL is present in our SQLite database. This time includes the filter check
- time.
- </summary>
-</histogram>
-
-<histogram name="SB.Delay" units="milliseconds">
- <summary>
- This measures the time that SafeBrowsing actually delayed the browsing
- experience. It records the difference between the time when Chrome would
- have started reading the response for a URL and when the SafeBrowsing system
- completed its check of that URL.
- </summary>
-</histogram>
-
-<histogram name="SB.FilterCheck" units="milliseconds">
- <summary>
- The first stage check that measures the time that Chrome took to check if a
- URL is present in our in-memory hash table.
- </summary>
-</histogram>
-
-<histogram name="SB.Network" units="milliseconds">
- <summary>
- The third and final stage check that mesures the time that Chrome took to
- get a response from the Google SafeBrowsing servers for a particular URL.
- </summary>
-</histogram>
-
-<histogram name="SB.NetworkCheck" units="milliseconds">
- <summary>
- The third and final stage check that mesures the time that Chrome took to
- get a response from the Google SafeBrowsing servers for a particular URL.
- This time includes the filter and database check time.
- </summary>
-</histogram>
-
-<histogram name="SB.PauseSafe" units="milliseconds">
- <summary>
- This measures the time that SafeBrowsing actually delayed the browsing
- experience. It records the difference between the time when Chrome would
- have started reading the response for a URL and when the SafeBrowsing system
- completed its check of that URL.
- </summary>
-</histogram>
-
-<histogram name="SB.Update">
- <summary>TBD.</summary>
-</histogram>
-
-<histogram name="SB2.AddPrefixes">
- <summary>
- The number of add prefixes stored in the database after the last update.
- </summary>
-</histogram>
-
-<histogram name="SB2.BloomFailure" enum="SB2BloomFailure">
- <summary>
- Track failures when in processing the safe-browsing database bloom filter.
- </summary>
-</histogram>
-
-<histogram name="SB2.BloomFilterFalsePositives"
- enum="SB2BloomFilterFalsePositives">
- <obsolete>
- This became misleading around M-22 (September 2012), deleted in M-32
- (November 2013).
- </obsolete>
- <summary>
- All prefix misses (server returned no full hashes) and prefix misses due to
- false positives in the bloom filter.
- </summary>
-</histogram>
-
-<histogram name="SB2.BloomFilterLoad" units="ms">
- <summary>Time to load the BloomFilter file.</summary>
-</histogram>
-
-<histogram name="SB2.BrowseDatabaseKilobytes" units="KB">
- <summary>
- The size of the browsing SafeBrowsing database file on disk in kilobytes,
- after an update has occurred.
- </summary>
-</histogram>
-
-<histogram name="SB2.BuildFilter" units="milliseconds">
- <summary>
- The time that it took to regenerate the filter after we have received all
- the update chunks.
- </summary>
-</histogram>
-
-<histogram name="SB2.BuildReadBytes" units="bytes">
- <obsolete>
- Deprecated because it was exceeding the range. Replaced by
- SB2.BuildReadKilobytes.
- </obsolete>
- <summary>
- The number of bytes read by the browser process during the bloom filter
- generation phase.
- </summary>
-</histogram>
-
-<histogram name="SB2.BuildReadKilobytes" units="KB">
- <summary>
- The number of kilobytes read by the browser process during the filter
- generation phase.
- </summary>
-</histogram>
-
-<histogram name="SB2.BuildReadOperations">
- <summary>
- The number of read operations issued by the browser process during the
- filter generation phase.
- </summary>
-</histogram>
-
-<histogram name="SB2.BuildWriteBytes" units="bytes">
- <obsolete>
- Deprecated because it was exceeding the range. Replaced by
- SB2.BuildWriteKilobytes.
- </obsolete>
- <summary>
- The number of bytes written by the browser process during the bloom filter
- generation phase.
- </summary>
-</histogram>
-
-<histogram name="SB2.BuildWriteKilobytes" units="KB">
- <summary>
- The number of kilobytes written by the browser process during the filter
- generation phase.
- </summary>
-</histogram>
-
-<histogram name="SB2.BuildWriteOperations">
- <summary>
- The number of write operations issued by the browser process during the
- filter generation phase.
- </summary>
-</histogram>
-
-<histogram name="SB2.ChunkInsert" units="milliseconds">
- <summary>
- The time that it takes to write one redirect URL (which can contain multiple
- chunks) to the database.
- </summary>
-</histogram>
-
-<histogram name="SB2.ChunkRequest" units="milliseconds">
- <summary>
- The network time between the request and response for a chunk.
- </summary>
-</histogram>
-
-<histogram name="SB2.ChunkSize" units="bytes">
- <summary>The size of one chunk URL.</summary>
-</histogram>
-
-<histogram name="SB2.DatabaseBytes" units="bytes">
- <obsolete>
- Deprecated because it was exceeding the range. Replaced by
- SB2.DatabaseKilobytes.
- </obsolete>
- <summary>The size of the SafeBrowsing database file on disk.</summary>
-</histogram>
-
-<histogram name="SB2.DatabaseFailure" enum="SB2DatabaseFailure">
- <summary>Track failures when updating the safe-browsing database.</summary>
-</histogram>
-
-<histogram name="SB2.DatabaseKilobytes" units="KB">
- <obsolete>
- Replaced by SB2.BrowseDatabaseKilobytes.
- </obsolete>
- <summary>
- The size of the SafeBrowsing database file on disk in kilobytes.
- </summary>
-</histogram>
-
-<histogram name="SB2.DatabaseOpen" units="milliseconds">
- <summary>
- The time it takes to initialize the SafeBrowsing storage backend, in
- milliseconds.
- </summary>
-</histogram>
-
-<histogram name="SB2.DatabaseUpdateKilobytes" units="KB">
- <summary>
- The size of the update file before merging with the database file, in
- kilobytes.
- </summary>
-</histogram>
-
-<histogram name="SB2.Delay" units="milliseconds">
- <summary>
- The time that SafeBrowsing actually delayed the browsing experience. It
- records the difference between the time when Chrome would have started
- reading the response for a URL and when the SafeBrowsing system completed
- its check of that URL.
- </summary>
-</histogram>
-
-<histogram name="SB2.DownloadChecks" enum="SB2DownloadChecks">
- <summary>
- Records results of SafeBrowsing download check, including both url check and
- downloaded file hash check.
- </summary>
-</histogram>
-
-<histogram name="SB2.DownloadDatabaseKilobytes" units="KB">
- <summary>
- The size of the downloads SafeBrowsing database file on disk in kilobytes,
- after an update has occurred.
- </summary>
-</histogram>
-
-<histogram name="SB2.DownloadDuration" units="milliseconds">
- <summary>The time it takes for a download to finish.</summary>
-</histogram>
-
-<histogram name="SB2.DownloadHashCheckDuration" units="milliseconds">
- <summary>
- The time it takes for SafeBrowsing to check hash of a download file.
- </summary>
-</histogram>
-
-<histogram name="SB2.DownloadUrlCheckDuration" units="milliseconds">
- <summary>The time it takes for SafeBrowsing to check a download url.</summary>
-</histogram>
-
-<histogram name="SB2.DownloadUrlChecks" enum="SB2DownloadChecks">
- <obsolete>
- Deprecated 3/11/11, and replaced by SB2.DownloadChecks.
- </obsolete>
- <summary>Records results of SafeBrowsing download url check.</summary>
-</histogram>
-
-<histogram name="SB2.FailedUpdate">
- <obsolete>
- Deprecated, replaced by SB2.DatabaseFailure BROWSE_DB_UPDATE_FINISH.
- </obsolete>
- <summary>
- The count of the number of times an update failed when being committed to
- the database.
- </summary>
-</histogram>
-
-<histogram name="SB2.FilterCheck" units="milliseconds">
- <summary>
- The time that it took to check a URL against our in-memory filter.
- </summary>
-</histogram>
-
-<histogram name="SB2.FilterKilobytes" units="KB">
- <obsolete>
- Deprecated 9/2012. No longer generated.
- </obsolete>
- <summary>The size of the current bloom filter in kilobytes.</summary>
-</histogram>
-
-<histogram name="SB2.FilterLoad" enum="SB2FilterLoad">
- <summary>Which filter file the database loaded from disk.</summary>
-</histogram>
-
-<histogram name="SB2.FilterMissing">
- <obsolete>
- Deprecated, replaced by SB2.DatabaseFailure FILTER_MISSING.
- </obsolete>
- <summary>
- The count of the number of times we attempted to load the bloom filter file
- but it was missing.
- </summary>
-</histogram>
-
-<histogram name="SB2.FilterReadFail">
- <obsolete>
- Deprecated, replaced by SB2.DatabaseFailure FILTER_READ.
- </obsolete>
- <summary>
- The count of the number of times we attempted to load the bloom filter file
- but failed while reading the file on disk.
- </summary>
-</histogram>
-
-<histogram name="SB2.FilterSize" units="bytes">
- <obsolete>
- Deprecated because it was exceeding the range. Replaced by
- SB2.FilterKilobytes.
- </obsolete>
- <summary>The size of the current bloom filter.</summary>
-</histogram>
-
-<histogram name="SB2.FilterWriteFail">
- <obsolete>
- Deprecated, replaced by SB2.DatabaseFailure FILTER_WRITE.
- </obsolete>
- <summary>
- The count of the number of times we attempted to save the bloom filter file
- but failed while writing the file to disk.
- </summary>
-</histogram>
-
-<histogram name="SB2.FormatEvent" enum="SB2FormatEvent">
- <summary>
- Tracks events involved in upgrading safe-browsing data from SQLite format to
- new file format.
- </summary>
-</histogram>
-
-<histogram name="SB2.GetHash200">
- <obsolete>
- Deprecated in favor of SB2.GetHashResult STATUS_200.
- </obsolete>
- <summary>
- The number of GetHash requests that returned data (valid requests).
- </summary>
-</histogram>
-
-<histogram name="SB2.GetHash204">
- <obsolete>
- Deprecated in favor of SB2.GetHashResult STATUS_204.
- </obsolete>
- <summary>
- The number of GetHash requests that returned empty data (false positives).
- </summary>
-</histogram>
-
-<histogram name="SB2.GetHashResult" enum="SB2GetHashResult">
- <summary>
- Track return status from GetHash requests to server (STATUS_200 and
- STATUS_204), and dispensation of returned values (EMPTY, HIT, MISS). EMPTY
- means the response had no full hashes, and should contain all of the 204
- responses plus those 200 responses corrosponding to items deleted on the
- server but not yet deleted on the client. HIT means that one of the full
- hashes matched. MISS means that none of the hashes matched (there was a
- prefix collision).
- </summary>
-</histogram>
-
-<histogram name="SB2.GetHashResultDownload" enum="SB2GetHashResult">
- <summary>
- Track return status from GetHash requests to server (STATUS_200 and
- STATUS_204), and dispensation of returned values (EMPTY, HIT, MISS). EMPTY
- means the response had no full hashes, and should contain all of the 204
- responses plus those 200 responses corrosponding to items deleted on the
- server but not yet deleted on the client. HIT means that one of the full
- hashes matched. MISS means that none of the hashes matched (there was a
- prefix collision).
- </summary>
-</histogram>
-
-<histogram name="SB2.GetHashServerMiss">
- <obsolete>
- Deprecated in favor of SB2.GetHashResult FULL_HASH_* and
- SB2.BloomFilterFalsePositives. It is unclear if this histogram ever
- reported useful data.
- </obsolete>
- <summary>
- The number of GetHash requests returning full hashes that didn't match the
- URL that initiated the request.
- </summary>
-</histogram>
-
-<histogram name="SB2.HandleCorrupt">
- <obsolete>
- Deprecated, replaced by SB2.DatabaseFailure CORRUPT.
- </obsolete>
- <summary>
- The count of the number of times a database was found corrupt and reset.
- </summary>
-</histogram>
-
-<histogram name="SB2.InterstitialAction" enum="SB2InterstitialAction">
- <summary>
- Track number of times Safe Browsing interstitials have been shown, and how
- many times they have been clicked through or not.
- </summary>
-</histogram>
-
-<histogram name="SB2.InterstitialActionDetails"
- enum="SB2InterstitialActionDetails">
- <summary>
- Tracks the click-through rate for specific cases of the interstitial.
- </summary>
-</histogram>
-
-<histogram name="SB2.MalwareInterstitialTimeClosed" units="milliseconds">
- <summary>
- The time between when we show the SafeBrowsing malware interstitial and the
- user navigating away by for example, closing the tab, clicking the browser
- back button or typing another URL in the address bar.
- </summary>
-</histogram>
-
-<histogram name="SB2.MalwareInterstitialTimeDiagnostic" units="milliseconds">
- <summary>
- The time between when we show the SafeBrowsing malware interstitial and the
- user clicking on diagnostic page link.
- </summary>
-</histogram>
-
-<histogram name="SB2.MalwareInterstitialTimeExpandedSeeMore"
- units="milliseconds">
- <summary>
- The time between when we show the SafeBrowsing malware interstitial and the
- user expanding the &quot;see more info&quot; section of the page. (Only
- applies to field trial version 2 of the interstitial.)
- </summary>
-</histogram>
-
-<histogram name="SB2.MalwareInterstitialTimeLearnMore" units="milliseconds">
- <summary>
- The time between when we show the SafeBrowsing malware interstitial and the
- user clicking on the learn more about malware link.
- </summary>
-</histogram>
-
-<histogram name="SB2.MalwareInterstitialTimePrivacyPolicy" units="milliseconds">
- <summary>
- The time between when we show the SafeBrowsing malware interstitial and the
- user clicking on the privacy policy link.
- </summary>
-</histogram>
-
-<histogram name="SB2.MalwareInterstitialTimeProceed" units="milliseconds">
- <summary>
- The time between when we show the SafeBrowsing malware interstitial and the
- user clicking on the proceed link.
- </summary>
-</histogram>
-
-<histogram name="SB2.MalwareInterstitialTimeTakeMeBack" units="milliseconds">
- <summary>
- The time between when we show the SafeBrowsing malware interstitial and the
- user clicking on the big green back button.
- </summary>
-</histogram>
-
-<histogram name="SB2.Network" units="milliseconds">
- <summary>
- The time that it took to receive a response from the Google SafeBrowsing
- servers for a GetHash request.
- </summary>
-</histogram>
-
-<histogram name="SB2.OldDatabaseKilobytes" units="KB">
- <summary>Size of v1 database deleted from client profile.</summary>
-</histogram>
-
-<histogram name="SB2.PhishingInterstitialTimeClosed" units="milliseconds">
- <summary>
- The time between when we show the SafeBrowsing phishing interstitial and the
- user navigating away by for example, closing the tab, clicking the browser
- back button or typing another URL in the address bar.
- </summary>
-</histogram>
-
-<histogram name="SB2.PhishingInterstitialTimeExpandedSeeMore"
- units="milliseconds">
- <summary>
- The time between when we show the SafeBrowsing phishing interstitial and the
- user expanding the &quot;see more info&quot; section of the page. (Only
- applies to field trial version 2 of the interstitial.)
- </summary>
-</histogram>
-
-<histogram name="SB2.PhishingInterstitialTimeLearnMore" units="milliseconds">
- <summary>
- The time between when we show the SafeBrowsing phishing interstitial and the
- user clicking on the learn more link.
- </summary>
-</histogram>
-
-<histogram name="SB2.PhishingInterstitialTimeProceed" units="milliseconds">
- <summary>
- The time between when we show the SafeBrowsing phishing interstitial and the
- user clicking on the proceed link.
- </summary>
-</histogram>
-
-<histogram name="SB2.PhishingInterstitialTimeReportError" units="milliseconds">
- <summary>
- The time between when we show the SafeBrowsing phishing interstitial and the
- user clicking on the report error link.
- </summary>
-</histogram>
-
-<histogram name="SB2.PhishingInterstitialTimeTakeMeBack" units="milliseconds">
- <summary>
- The time between when we show the SafeBrowsing phishing interstitial and the
- user clicking on the big green back button.
- </summary>
-</histogram>
-
-<histogram name="SB2.PrefixSetBitsPerPrefix" units="bits">
- <summary>
- The size of the PrefixSet storage in bits, divided by the number of prefixes
- represented. Should almost always be 16.
- </summary>
-</histogram>
-
-<histogram name="SB2.PrefixSetEvent" enum="SB2PrefixSetEvent">
- <obsolete>
- Deprecated 9/2012. No longer generated, BloomFilter being removed.
- </obsolete>
- <summary>
- Records how well the PrefixSet implementation matches the BloomFilter
- implementation.
- </summary>
-</histogram>
-
-<histogram name="SB2.PrefixSetKilobytes" units="KB">
- <summary>The size of the PrefixSet file in kilobytes.</summary>
-</histogram>
-
-<histogram name="SB2.PrefixSetLoad" units="ms">
- <summary>Time to load the PrefixSet file.</summary>
-</histogram>
-
-<histogram name="SB2.PrefixSetRestoredExcess">
- <obsolete>
- Deprecated 9/2012. No longer generated.
- </obsolete>
- <summary>
- For debugging PrefixSet. How many extra results GetPrefixes returns.
- </summary>
-</histogram>
-
-<histogram name="SB2.PrefixSetRestoredShortfall">
- <obsolete>
- Deprecated 9/2012. No longer generated.
- </obsolete>
- <summary>
- For debugging PrefixSet. How many fewer results GetPrefixes returns.
- </summary>
-</histogram>
-
-<histogram name="SB2.PrefixSetUnsortedDelta">
- <obsolete>
- Deprecated 9/2012. No longer generated.
- </obsolete>
- <summary>
- For debugging PrefixSet. How far unsorted deltas are from expected value.
- </summary>
-</histogram>
-
-<histogram name="SB2.PrefixSetUnsortedDifference">
- <obsolete>
- Deprecated 9/2012. No longer generated.
- </obsolete>
- <summary>
- For debugging PrefixSet. Distance of unsorted elements from expected
- location.
- </summary>
-</histogram>
-
-<histogram name="SB2.PrefixSetUnsortedPercent">
- <obsolete>
- Deprecated 9/2012. No longer generated.
- </obsolete>
- <summary>
- For debugging PrefixSet. How far into the results unsorted elements were
- found. Interesting values would be 0%, 50%, or 100%.
- </summary>
-</histogram>
-
-<histogram name="SB2.PrefixSetUnsortedSize">
- <obsolete>
- Deprecated 9/2012. No longer generated.
- </obsolete>
- <summary>
- For debugging PrefixSet. Size of unsorted sets. To see if there is a
- problem with a particular size of dataset.
- </summary>
-</histogram>
-
-<histogram name="SB2.PrefixSetWrite" units="ms">
- <summary>Time to store the PrefixSet file.</summary>
-</histogram>
-
-<histogram name="SB2.SideEffectFreeWhitelistDatabaseKilobytes" units="KB">
- <summary>
- The size of the Side Effect Free Whitelist SaafeBrowsing database file on
- disk in kilobytes, after an update has occurred.
- </summary>
-</histogram>
-
-<histogram name="SB2.SideEffectFreeWhitelistPrefixSetKilobytes" units="KB">
- <summary>
- The size of the Side Effect Free Whitelist PrefixSet file in kilobytes,
- after an udpate has occurred.
- </summary>
-</histogram>
-
-<histogram name="SB2.SideEffectFreeWhitelistPrefixSetLoad" units="ms">
- <summary>Time to load the Side Effect Free Whitelist PrefixSet file.</summary>
-</histogram>
-
-<histogram name="SB2.SideEffectFreeWhitelistPrefixSetWrite" units="ms">
- <summary>
- Time to store the Side Effect Free Whitelist PrefixSet file.
- </summary>
-</histogram>
-
-<histogram name="SB2.SideEffectFreeWhitelistStatus"
- enum="SB2SideEffectFreeWhitelistStatus">
- <summary>The instantiation status of the SideEffectFreeWhitelist.</summary>
-</histogram>
-
-<histogram name="SB2.SubPrefixes">
- <summary>
- The number of sub prefixes stored in the database after the last update.
- </summary>
-</histogram>
-
-<histogram name="SB2.Update" units="milliseconds">
- <summary>
- The time from the receipt of the update request to the receipt of the final
- update chunk.
- </summary>
-</histogram>
-
-<histogram name="SB2.UpdateRequestSize" units="bytes">
- <summary>The payload size of update requests to the server.</summary>
-</histogram>
-
-<histogram name="SB2.UpdateResult" enum="SB2UpdateResult">
- <summary>Result from trying to update the SafeBrowsing data.</summary>
-</histogram>
-
-<histogram name="SB2.UpdateSize" units="bytes">
- <summary>The size of all the chunk URLs in an update response.</summary>
-</histogram>
-
-<histogram name="SB2.UpdateUrls">
- <summary>The number of chunk URLs in an update response.</summary>
-</histogram>
-
-<histogram name="SBClientDownload.CheckDownloadStats"
- enum="SBClientDownloadCheckDownloadStats">
- <summary>
- Records a histogram of the reason why downloads are marked as being
- malicious or clean by the improved SafeBrowsing binary download protection.
- </summary>
-</histogram>
-
-<histogram name="SBClientDownload.DownloadExtensions"
- enum="SBClientDownloadExtensions">
- <summary>
- Records a histogram of how often users download a file with a file extension
- that is possibly dangerous (e.g., exe, class).
- </summary>
-</histogram>
-
-<histogram name="SBClientDownload.DownloadRequestDuration" units="milliseconds">
- <summary>
- Records the total time it takes for the SafeBrowsing download service to
- check whether the content of a download is malicious or not. This histogram
- only includes requests that are sent to the SafeBrowsing server.
- </summary>
-</histogram>
-
-<histogram name="SBClientDownload.DownloadRequestNetError" enum="NetErrorCodes">
- <summary>
- The net error code for all CheckClientDownloadRequest URLFetchers.
- </summary>
-</histogram>
-
-<histogram name="SBClientDownload.DownloadRequestPayloadSize" units="bytes">
- <summary>
- The size of the upload data for CheckClientDownloadRequest URLFetchers.
- </summary>
-</histogram>
-
-<histogram name="SBClientDownload.DownloadRequestResponseCode">
- <summary>
- For CheckClientDownloadRequest URLFetchers with successful status, the HTTP
- response code that was received.
- </summary>
-</histogram>
-
-<histogram name="SBClientDownload.SignedBinaryDownload"
- enum="SBClientDownloadIsSignedBinary">
- <summary>
- Records the number of signed vs. unsigned executables that are downloaded.
- </summary>
-</histogram>
-
-<histogram name="SBClientDownload.SignedOrWhitelistedDownload">
- <summary>
- Counter which is incremented whenever an executable is downloaded which is
- either signed or whose URL matches the download whitelist.
- </summary>
-</histogram>
-
-<histogram name="SBClientMalware.IPBlacklistRequestNetError"
- enum="NetErrorCodes">
- <summary>
- The net error code for all ClientMalwareRequest URLFetchers.
- </summary>
-</histogram>
-
-<histogram name="SBClientMalware.IPBlacklistRequestPayloadSize" units="bytes">
- <summary>
- The size of the upload data for ClientMalwareRequest URLFetchers.
- </summary>
-</histogram>
-
-<histogram name="SBClientMalware.IPBlacklistRequestResponseCode">
- <summary>
- For ClientMalwareRequest URLFetchers with successful status, the HTTP
- response code that was received.
- </summary>
-</histogram>
-
-<histogram name="SBClientMalware.SentReports" enum="SBClientMalwareSentReports">
- <summary>
- Measures the success rate of sending malware reports. Sending a report can
- fail due to a client reaching the limit on the number of reports it can send
- per day or due to the report failing to be serialized.
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.CancelClassificationReason"
- enum="SBClientPhishingCancelClassificationReason">
- <summary>
- The counts for various reasons why an in-progress phishing classification
- was canceled.
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.CheckNoPendingClassificationFailed">
- <summary>
- The number of times client-side phishing classifier expected to have no
- pending classifications running but that check failed.
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.ClassificationStart">
- <summary>
- The number of pages that we could have possibly classified (essentially the
- number of top page navigations by users with SBClientPhishing enabled). The
- name is slightly misleading as it is recorded before
- &quot;Preclassification&quot; happens.
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.ClientModelStatus"
- enum="SBClientPhishingClientModelStatus">
- <summary>
- The counts for various model status codes that we get after loading a new
- client-side phishing model.
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.DOMFeatureChunkTime" units="milliseconds">
- <summary>
- The time that an individual chunk of DOM feature extraction work took.
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.DOMFeatureFrameRemoved">
- <summary>
- The number of times that DOM feature extraction finished early because the
- active WebDocument's frame was removed during traversal.
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.DOMFeatureIterations">
- <summary>
- The number of iterations that the DOM feature extractor took to finish.
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.DOMFeatureResumeTime" units="milliseconds">
- <summary>
- The time that it took to resume DOM feature extraction for the phishing
- classifier. Longer times may indicate that the page DOM changed between
- chunks of work and the extractor had to re-traverse up to the saved
- position.
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.DOMFeatureTimeout">
- <summary>
- The number of phishing classifications that were aborted because DOM feature
- extraction took too long.
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.DOMFeatureTotalTime" units="milliseconds">
- <summary>
- The time that the DOM feature extarctor took to finish, summed across all
- chunks of work.
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.GrabPhishingThumbnail" units="ms">
- <summary>Time spent generating the thumbnail.</summary>
-</histogram>
-
-<histogram name="SBClientPhishing.IllegalFeatureValue">
- <summary>
- The number of features which were omitted from phishing classification
- because they were added with an illegal value. This would indicate a bug.
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.InitPrivateNetworksFailed">
- <summary>
- The number of times that the phishing detection service could not be
- initialized due to an error parsing the private IP networks. This would
- indicate a bug.
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.InvalidWhitelistExpression">
- <obsolete>
- Deprecated 12/2011. Whitelist entries are no longer part of
- ClientPhishingResponse.
- </obsolete>
- <summary>
- The number of whitelist_expression entries in a ClientPhishingResponse that
- could not be canonicalized.
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.PreClassificationCheckFail"
- enum="SBClientPhishingPreClassificationCheckFail">
- <summary>
- Records the number of phishing classifications that were skipped because a
- pre-classification check failed.
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.ReportLimitSkipped">
- <summary>
- The number of phishing classifications that were previously cached as being
- phishing but that will get re-classified (to possibly fix false positives).
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.RequestNotSerialized">
- <summary>
- The number of phishing classifier pingbacks that were skipped because
- serializing the request protocol buffer to string failed.
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.RequestSatisfiedFromCache">
- <summary>
- The number of times that a cached phishing classification result was used,
- rather than pinging the server.
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.ScorerCreationStatus"
- enum="SBClientPhishingScorerCreationStatus">
- <summary>
- Records the status when we create a scorer object for the client-side
- phishing detection classifier.
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.TermFeatureBreakIterError">
- <summary>
- The number of phishing classifications that were aborted because the term
- feature extractor failed to initialize an ICU break iterator.
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.TermFeatureChunkTime" units="milliseconds">
- <summary>
- The time that an individual chunk of term feature extraction work took.
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.TermFeatureIterations">
- <summary>
- The number of iterations that the term feature extractor took to finish.
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.TermFeatureTimeout">
- <summary>
- The number of phishing classification that were aborted because term feature
- extraction took too long.
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.TermFeatureTotalTime" units="milliseconds">
- <summary>
- The time that the term feature extarctor took to finish, summed across all
- chunks of work.
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.TooManyFeatures">
- <summary>
- The number of times that the limit on the number of phishing classifier
- features for a page was reached. This may indicate a bug, or that
- kMaxFeatureSize is too small.
- </summary>
-</histogram>
-
-<histogram name="SBClientPhishing.URLFeatureTime" units="milliseconds">
- <summary>
- The time taken to extract URL features for the phishing classifier.
- </summary>
-</histogram>
-
-<histogram name="SBDownloadFeedback.Activations" enum="DownloadItem.DangerType">
- <summary>
- Count of times download feedback has been started, broken down by danger
- type.
- </summary>
-</histogram>
-
-<histogram name="SBDownloadFeedback.ActiveFeedbacks">
- <summary>
- When a new download feedback request is added, records the number of
- download requests currently active and/or pending.
- </summary>
-</histogram>
-
-<histogram name="SBDownloadFeedback.Eligible" enum="DownloadItem.DangerType">
- <summary>
- Count of times eligible download notifications are shown. Broken down by
- danger type.
- </summary>
-</histogram>
-
-<histogram name="SBDownloadFeedback.Shown" enum="DownloadItem.DangerType">
- <obsolete>
- Starting with M32, replaced by SBDownloadFeedback.Eligible.
- </obsolete>
- <summary>
- Count of times download feedback button has been shown, broken down by
- danger type.
- </summary>
-</histogram>
-
-<histogram name="SBDownloadFeedback.SizeEligibleKB" units="KB">
- <summary>
- Size of downloads that were of the correct danger type, regardless if they
- meet the max file size check or if they are actually uploaded or not.
- </summary>
-</histogram>
-
-<histogram name="SBDownloadFeedback.SizeFailure" units="bytes">
- <summary>
- Size of downloads that failed to be uploaded to the feedback service.
- </summary>
-</histogram>
-
-<histogram name="SBDownloadFeedback.SizeSuccess" units="bytes">
- <summary>
- Size of downloads that were successfully uploaded to the feedback service.
- </summary>
-</histogram>
-
-<histogram name="SBDownloadFeedback.UploadResult"
- enum="SBDownloadFeedbackUploadResult">
- <summary>
- Final result of attempt to upload binary to download feedback service.
- </summary>
-</histogram>
-
-<histogram name="Search.DefaultSearchProvider" enum="OmniboxSearchEngine">
- <summary>
- The id of the default search engine that is loaded after Chrome startup. See
- src/chrome/browser/search_engines/prepopulate_engines.json for more info.
- </summary>
-</histogram>
-
-<histogram name="Search.DefaultSearchProviderType"
- enum="OmniboxSearchEngineType">
- <summary>
- The type of the default search engine that is loaded when a profile is
- opened or after a profile reset. Note that at least one profile is opened
- on startup.
- </summary>
-</histogram>
-
-<histogram name="Settings.DefaultSearchProvider" enum="OmniboxSearchEngine">
- <obsolete>
- Deprecated in Chrome 30. Use Search.DefaultSearchProviderType instead.
- </obsolete>
- <summary>
- The id of the default search engine domain that is specified in user
- preferences when a profile is loaded.
- </summary>
-</histogram>
-
-<histogram name="Settings.GivenShowHomeButton_HomePageIsNewTabPage"
- enum="Boolean">
- <summary>
- Whether or not the home page user preference is set to the default NTP value
- when a profile is loaded. This is only logged if the home button is shown.
- </summary>
-</histogram>
-
-<histogram name="Settings.HomePageDomain" enum="OmniboxSearchEngine">
- <obsolete>
- Deprecated in Chrome 30. Replaced by Settings.HomePageEngineType.
- </obsolete>
- <summary>
- The id of the home page domain that is specified in user preferences when a
- profile is loaded.
- </summary>
-</histogram>
-
-<histogram name="Settings.HomePageEngineType" enum="OmniboxSearchEngineType">
- <summary>
- Tries to pretend the home page URL is a search URL, and records the search
- engine type of that URL by comparing the TLD+1 of the home page URL with
- those of the different known search engines. Recorded when a profile is
- opened, if a home page URL has been set. Note that at least one profile is
- opened on startup.
- </summary>
-</histogram>
-
-<histogram name="Settings.HomePageIsNewTabPage" enum="Boolean">
- <obsolete>
- Deprecated 08/05/2013. Replaced by
- Settings.GivenShowHomeButton_HomePageIsNewTabPage.
- </obsolete>
- <summary>
- Whether or not the home page user preference is set to the default NTP value
- when a profile is loaded.
- </summary>
-</histogram>
-
-<histogram name="Settings.HomePageIsNewTabPage.PulledFromSync" enum="Boolean">
- <summary>
- The value of the home-page-is-new-tab-page pref when pulled down from sync
- to update an out-of-sync local pref store.
- </summary>
-</histogram>
-
-<histogram name="Settings.HomePageIsNewTabPage.PushedToSync" enum="Boolean">
- <summary>
- The value of the home-page-is-new-tab-page pref when pushed up to sync from
- a change made locally.
- </summary>
-</histogram>
-
-<histogram name="Settings.PinnedTabEngineTypes" enum="OmniboxSearchEngineType">
- <summary>
- Tries to pretend pinned tab URLs are search URLs, and records the search
- engine types of those URLs by comparing the TLD+1s of the URLs with those of
- the different known search engines. Recorded when a profile is opened, if
- there are pinned tabs. Note that at least one profile is opened on startup.
- </summary>
-</histogram>
-
-<histogram name="Settings.PinnedTabs">
- <summary>The number of pinned tabs opened when a profile is loaded.</summary>
-</histogram>
-
-<histogram name="Settings.ShowHomeButton" enum="BooleanEnabled">
- <summary>
- Whether or not the home button is enabled in user preferences when a profile
- is loaded.
- </summary>
-</histogram>
-
-<histogram name="Settings.ShowHomeButton.PulledFromSync" enum="BooleanEnabled">
- <summary>
- The enabled state of the Home button pref when pulled down from sync to
- update an out-of-sync local pref store.
- </summary>
-</histogram>
-
-<histogram name="Settings.ShowHomeButton.PushedToSync" enum="BooleanEnabled">
- <summary>
- The enabled state of the Home button pref when pushed up to sync from a
- change made locally.
- </summary>
-</histogram>
-
-<histogram name="Settings.StartupPageDomains" enum="OmniboxSearchEngine">
- <obsolete>
- Deprecated in Chrome 30. Replaced by Settings.StartupPageEngineTypes.
- </obsolete>
- <summary>
- The ids of startup page domains that are specified in user preferences when
- a profile is loaded.
- </summary>
-</histogram>
-
-<histogram name="Settings.StartupPageEngineTypes"
- enum="OmniboxSearchEngineType">
- <summary>
- Tries to pretend the startup page URLs are search URLs, and records the
- search engine types of those URLs by comparing the TLD+1s of the URLs with
- those of the different known search engines. Recorded when a profile is
- opened, if startup page URLs have been set. Note that at least one profile
- is opened on startup.
- </summary>
-</histogram>
-
-<histogram name="Settings.StartupPageLoadSettings" enum="SessionStartupPref">
- <summary>The startup page settings when a profile is loaded.</summary>
-</histogram>
-
-<histogram name="Settings.StartupPageLoadSettings.PulledFromSync"
- enum="SessionStartupPref">
- <summary>
- The startup page setting when pulled down from sync to update an out-of-sync
- local pref store.
- </summary>
-</histogram>
-
-<histogram name="Settings.StartupPageLoadSettings.PushedToSync"
- enum="SessionStartupPref">
- <summary>
- The startup page setting when pushed up to sync from a change made locally.
- </summary>
-</histogram>
-
-<histogram name="Settings.StartupPageLoadURLs">
- <summary>
- The number of URLs to be loaded on startup when a profile is loaded, if the
- startup page setting is set to load URLs.
- </summary>
-</histogram>
-
-<histogram name="Settings.StartupURLsMigration" enum="StartupURLsMigration">
- <summary>The startup URLs pref migration steps.</summary>
-</histogram>
-
-<histogram name="Settings.StartupURLsResetTime" units="milliseconds">
- <summary>
- The time elapsed in milliseconds in between startup URLs pref migration. A
- value of 0 indicates that the last migration time was in the future due to
- e.g. an incorrect system time.
- </summary>
-</histogram>
-
-<histogram name="Settings.TrackedPreferenceChanged" enum="TrackedPreference">
- <summary>
- The id of a tracked preference whose value has been changed since the last
- time Chrome set it.
- </summary>
-</histogram>
-
-<histogram name="Settings.TrackedPreferenceCleared" enum="TrackedPreference">
- <summary>
- The id of a tracked preference whose value has been cleared since the last
- time Chrome set it.
- </summary>
-</histogram>
-
-<histogram name="Settings.TrackedPreferenceInitialized"
- enum="TrackedPreference">
- <summary>
- The id of a tracked preference whose last value isn't known. We may be just
- starting to track the preference, or local state may have been changed
- outside of Chrome. This should only happen once per pref per profile.
- </summary>
-</histogram>
-
-<histogram name="Settings.TrackedPreferenceMigrated" enum="TrackedPreference">
- <summary>
- Logs the tracked preference id when it is migrated to the new MAC algorithm.
- This should only happen once per pref per profile.
- </summary>
-</histogram>
-
-<histogram name="Settings.TrackedPreferenceUnchanged" enum="TrackedPreference">
- <summary>
- The id of a tracked preference whose value has not changed since the last
- time Chrome set it.
- </summary>
-</histogram>
-
-<histogram name="SettingsResetBubble.NumNoThanksPerReset">
- <summary>
- Counts the number of times the user clicked on the No Thanks button of the
- settings reset bubble before clicking on the Reset button in the same Chrome
- session.
- </summary>
-</histogram>
-
-<histogram name="Signin.OneClickConfirmation" enum="SigninFlowConfirmations">
- <summary>
- Count of the ways users interact with the confirmation dialogs of the new
- web based sign in to Chrome flow (accessed via the one click signin).
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.CheckCRCResult" enum="CheckCRCResult">
- <summary>
- Whether or not the CRC was checked at the moment when the last reference to
- a read-only entry stream is closed.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.CreationToIndex" units="milliseconds">
- <summary>
- The time from the creation of the simple cache backend until the index has
- been loaded from disk.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.CreationToIndexFail" units="milliseconds">
- <summary>
- The time from the creation of the simple cache backend until the index fails
- to load.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.EntryCreatedAndStream2Omitted"
- enum="SimpleCache.EntryCreatedAndStream2Omitted">
- <summary>
- Whether, upon creation of a new cache entry, the file for stream 2 was
- omitted since that stream was empty.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.EntryCreationResult" enum="BooleanSuccess">
- <summary>
- For entry creation operations that were sent to the disk, the result of
- creation.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.EntryCreationTime" units="milliseconds">
- <summary>The time, in ms, spent creating a new entry on disk.</summary>
-</histogram>
-
-<histogram name="SimpleCache.App.EntryOpenedAndStream2Removed"
- enum="SimpleCache.EntryOpenedAndStream2Removed">
- <summary>
- Whether, upon opening of an existing cache entry, stream 2 was empty and the
- file for that stream was therefore removed.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.EntryOperationsPending">
- <summary>
- At the time that operations are run, the number of pending operations on a
- particular entry.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.Eviction.CacheSizeOnStart" units="bytes">
- <summary>The size of the cache at the beginning of an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.App.Eviction.CacheSizeOnStart2" units="KB">
- <summary>The size of the cache at the beginning of an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.App.Eviction.EntryCount">
- <summary>The number of entries to be erased in an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.App.Eviction.MaxCacheSizeOnStart" units="bytes">
- <summary>
- The maximum allowed size of the cache at the beginning of an eviction.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.Eviction.MaxCacheSizeOnStart2" units="KB">
- <summary>
- The maximum allowed size of the cache at the beginning of an eviction.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.Eviction.Result" enum="BooleanSuccess">
- <summary>The result of an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.App.Eviction.SizeOfEvicted" units="bytes">
- <summary>The number of bytes to be erased in an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.App.Eviction.SizeOfEvicted2" units="KB">
- <summary>The amount of memory freed in an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.App.Eviction.SizeWhenDone" units="bytes">
- <summary>The size of the cache after running an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.App.Eviction.SizeWhenDone2" units="KB">
- <summary>The size of the cache after running an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.App.Eviction.TimeToDone" units="milliseconds">
- <summary>Time spent completing an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.App.Eviction.TimeToSelectEntries"
- units="milliseconds">
- <summary>Time spent selecting entries for eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.App.FileDescriptorLimitHard">
- <summary>
- The maximum limit of how many file descriptors a process can open. Emitted
- each time the browser is launched, if the limit could be retrieved. (This
- is the highest value we could raise the current limit to if we liked.)
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.FileDescriptorLimitSoft">
- <summary>
- The current limit of how many file descriptors a process can open. Emitted
- each time the browser is launched, if the limit could be retrieved. (We can
- raise this to the maximum limit if we like, without root access.)
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.FileDescriptorLimitStatus"
- enum="SimpleCache.FileDescriptorLimitStatus">
- <summary>
- The result of trying to get the file descriptor limit. Emitted each time
- the browser is launched.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.GlobalOpenEntryCount">
- <summary>
- The number of open entries across all caches backed by the Simple Cache. An
- entry is opened whenever a caller asks to open it to read or write cache
- data, and remains open until the last caller asks to close it. Logged
- whenever an entry is opened or closed.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.HeaderSize" units="bytes">
- <summary>
- The size of the header stream of a Simple Cache entry, emitted every time
- the headers are written or rewritten.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.HeaderSizeChange"
- enum="SimpleCacheHeaderSizeChange">
- <summary>
- How the header size has changed in a Simple Cache entry, emitted every time
- a write operation occurs on the header stream. (This includes the initial
- write, rewrites, and other writes that we couldn't classify.)
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.HeaderSizeDecreaseAbsolute" units="bytes">
- <summary>
- The absolute size decrease of the header stream of a Simple Cache entry,
- emitted every time the headers are rewritten with a smaller size.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.HeaderSizeDecreasePercentage" units="percent">
- <summary>
- The relative size decrease of the header stream of a Simple Cache entry,
- emitted every time the headers are rewritten with a smaller size.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.HeaderSizeIncreaseAbsolute" units="bytes">
- <summary>
- The absolute size increase of the header stream of a Simple Cache entry,
- emitted every time the headers are rewritten with a larger size.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.HeaderSizeIncreasePercentage" units="percent">
- <summary>
- The relative size increase of the header stream of a Simple Cache entry,
- emitted every time the headers are rewritten with a larger size.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.IndexCorrupt" enum="BooleanCorrupt">
- <summary>For each index load, whether the index file was corrupt.</summary>
-</histogram>
-
-<histogram name="SimpleCache.App.IndexCreatedEntryCount">
- <summary>The number of entries in a newly created index file.</summary>
-</histogram>
-
-<histogram name="SimpleCache.App.IndexEntriesLoaded">
- <summary>Number of entries loaded from the index file on start.</summary>
-</histogram>
-
-<histogram name="SimpleCache.App.IndexEntriesRestored">
- <summary>
- Number of entries restored from disk when there was no index or the index
- was corrupted.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.IndexFileStateOnLoad" enum="SimpleIndexState">
- <summary>
- The state the index file is at when an attempt is made to load from it.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.IndexInitializationWaiters">
- <summary>
- At the time of index initialization, the number of enqueued jobs awaiting
- index initialization.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.IndexInitializeMethod"
- enum="SimpleCacheIndexInitializeMethod">
- <summary>The method used to initialize the simple cache index.</summary>
-</histogram>
-
-<histogram name="SimpleCache.App.IndexLoadTime" units="milliseconds">
- <summary>
- Time (as measured on the worker pool) spent loading the index file.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.IndexNumEntriesOnWrite">
- <summary>The number of entries written to the index on a flush.</summary>
-</histogram>
-
-<histogram name="SimpleCache.App.IndexRestoreTime" units="milliseconds">
- <summary>
- Time (as measured on the worker pool) spent restoring the index file by
- iterating directory entries.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.IndexWriteInterval.Background"
- units="milliseconds">
- <summary>
- The interval between index saves, for apps in the background.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.IndexWriteInterval.Foreground"
- units="milliseconds">
- <summary>
- The interval between index saves, for apps in the foreground.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.IndexWriteToDiskTime.Background"
- units="milliseconds">
- <summary>
- The amount of time spend writing the index file to disk, for apps in the
- background, measured starting at the beginning of the write on the callback
- thread, and calculated using the completion time on the worker pool.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.IndexWriteToDiskTime.Foreground"
- units="milliseconds">
- <summary>
- The amount of time spend writing the index file to disk, for apps in the
- foreground, measured starting at the beginning of the write on the callback
- thread, and calculated using the completion time on the worker pool.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.KeyMatchedOnOpen" enum="BooleanMatched">
- <summary>
- For each call to OpenEntry, whether the key on disk matched the request key.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.LastClusterLossPercent" units="percent">
- <summary>
- For each file in the Simple Cache, the percentage of disk space used by the
- cluster loss, the unused disk space in the last 4096 byte cluster of the
- file.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.LastClusterSize" units="bytes">
- <summary>
- For each file in the Simple Cache, the number of bytes in the last 4096 byte
- cluster when the entry is saved to disk.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.OpenEntryIndexState"
- enum="SimpleCacheOpenEntryIndexState">
- <summary>
- At the time that an entry is opened, the state of that entry in the index.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.ReadIsParallelizable"
- enum="SimpleCacheReadParallelizable">
- <summary>
- For each Read operation, whether it could have been issued in parallel of a
- previous Read operation.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.ReadResult" enum="SimpleCacheReadResult">
- <summary>The outcome of Entry::ReadData in the simple cache.</summary>
-</histogram>
-
-<histogram name="SimpleCache.App.SyncCheckEOFHasCrc" enum="BooleanHasCrc">
- <summary>
- For each EOFRecord found with a valid magic number, indicates if the record
- also contains a CRC.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.SyncCheckEOFResult"
- enum="SimpleCacheSyncCheckEOFResult">
- <summary>
- The result, at the synchronous layer, of checking the EOF record of a cache
- entry.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.SyncCloseResult"
- enum="SimpleCacheSyncCloseResult">
- <summary>
- The result, at the synchronous layer, of closing a cache entry.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.SyncCreatePlatformFileError"
- enum="PlatformFileError">
- <summary>
- The platform error reported when attempting to create a new cache entry at
- the synchronous layer.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.SyncCreatePlatformFileError_WithIndex"
- enum="PlatformFileError">
- <summary>
- The platform error reported when attempting to create a new cache entry at
- the synchronous layer when the index has already initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.SyncCreatePlatformFileError_WithoutIndex"
- enum="PlatformFileError">
- <summary>
- The platform error reported when attempting to create a new cache entry at
- the synchronous layer when the index has not yet initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.SyncCreateResult"
- enum="SimpleCacheSyncCreateResult">
- <summary>
- The result, at the synchronous layer, reported when attempting to create a
- new cache entry.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.SyncCreateResult_WithIndex"
- enum="SimpleCacheSyncCreateResult">
- <summary>
- The result, at the synchronous layer, reported when attempting to create a
- new cache entry when the index has already initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.SyncCreateResult_WithoutIndex"
- enum="SimpleCacheSyncCreateResult">
- <summary>
- The result, at the synchronous layer, reported when attempting to create a
- new cache entry when the index has not yet initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.SyncOpenEntryAge" units="hours">
- <summary>
- The age of the entry (time since last modified), when opened at the
- synchronous layer.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.SyncOpenPlatformFileError"
- enum="PlatformFileError">
- <summary>
- The platform error reported when attempting to create a new cache entry at
- the synchronous layer.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.SyncOpenPlatformFileError_WithIndex"
- enum="PlatformFileError">
- <summary>
- The platform error reported when attempting to create a new cache entry at
- the synchronous layer when the index has already initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.SyncOpenPlatformFileError_WithoutIndex"
- enum="PlatformFileError">
- <summary>
- The platform error reported when attempting to create a new cache entry at
- the synchronous layer when the index has not initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.SyncOpenResult"
- enum="SimpleCacheSyncOpenResult">
- <summary>
- The result, at the synchronous layer, reported when attempting to open a new
- cache entry.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.SyncOpenResult_WithIndex"
- enum="SimpleCacheSyncOpenResult">
- <summary>
- The result, at the synchronous layer, reported when attempting to open a new
- cache entry when the index has already initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.SyncOpenResult_WithoutIndex"
- enum="SimpleCacheSyncOpenResult">
- <summary>
- The result, at the synchronous layer, reported when attempting to open a new
- cache entry when the index has not yet initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.SyncWriteResult"
- enum="SimpleCacheSyncWriteResult">
- <summary>
- The result, at the synchronous layer, of writing to a cache entry.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.WriteDependencyType"
- enum="SimpleCacheWriteDependencyType">
- <summary>
- Shows whether a write operation depends on the previous operation in queue
- particularly in the aspect of its possibility to run in parallel.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.App.WriteResult" enum="SimpleCacheWriteResult">
- <obsolete>
- Replaced 2013/09/03 by WriteResult2, which adds &quot;fast empty
- return&quot;, which previously showed up as &quot;success&quot;.
- </obsolete>
- <summary>The outcome of Entry::WriteData in the simple cache.</summary>
-</histogram>
-
-<histogram name="SimpleCache.App.WriteResult2" enum="SimpleCacheWriteResult">
- <summary>The outcome of Entry::WriteData in the simple cache.</summary>
-</histogram>
-
-<histogram name="SimpleCache.CheckCRCResult" enum="CheckCRCResult">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- Whether or not the CRC was checked at the moment when the last reference to
- a read-only entry stream is closed.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.CreationToIndex" units="milliseconds">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The time from the creation of the simple cache backend until the index has
- been loaded from disk.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.CreationToIndexFail" units="milliseconds">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The time from the creation of the simple cache backend until the index fails
- to load.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.EntryCreationResult" enum="BooleanSuccess">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- For entry creation operations that were sent to the disk, the result of
- creation.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.EntryCreationTime" units="milliseconds">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>The time, in ms, spent creating a new entry on disk.</summary>
-</histogram>
-
-<histogram name="SimpleCache.EntryOperationsPending">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- At the time that operations are run, the number of pending operations on a
- particular entry.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Eviction.CacheSizeOnStart" units="bytes">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>The size of the cache at the beginning of an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Eviction.CacheSizeOnStart2" units="KB">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>The size of the cache at the beginning of an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Eviction.EntryCount">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>The number of entries to be erased in an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Eviction.MaxCacheSizeOnStart" units="bytes">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The maximum allowed size of the cache at the beginning of an eviction.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Eviction.MaxCacheSizeOnStart2" units="KB">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The maximum allowed size of the cache at the beginning of an eviction.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Eviction.Result" enum="BooleanSuccess">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>The result of an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Eviction.SizeOfEvicted" units="bytes">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>The number of bytes to be erased in an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Eviction.SizeOfEvicted2" units="KB">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>The amount of memory freed in an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Eviction.SizeWhenDone" units="bytes">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>The size of the cache after running an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Eviction.SizeWhenDone2" units="KB">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>The size of the cache after running an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Eviction.TimeToDone" units="milliseconds">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>Time spent completing an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Eviction.TimeToSelectEntries" units="milliseconds">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>Time spent selecting entries for eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.FileDescriptorLimitHard">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The maximum limit of how many file descriptors a process can open. Emitted
- each time the browser is launched, if the limit could be retrieved. (This
- is the highest value we could raise the current limit to if we liked.)
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.FileDescriptorLimitSoft">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The current limit of how many file descriptors a process can open. Emitted
- each time the browser is launched, if the limit could be retrieved. (We can
- raise this to the maximum limit if we like, without root access.)
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.FileDescriptorLimitStatus"
- enum="SimpleCache.FileDescriptorLimitStatus">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The result of trying to get the file descriptor limit. Emitted each time
- the browser is launched.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.GlobalOpenEntryCount">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The number of open entries across all caches backed by the Simple Cache. An
- entry is opened whenever a caller asks to open it to read or write cache
- data, and remains open until the last caller asks to close it. Logged
- whenever an entry is opened or closed.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.HeaderSize" units="bytes">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The size of the header stream of a Simple Cache entry, emitted every time
- the headers are written or rewritten.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.HeaderSizeChange"
- enum="SimpleCacheHeaderSizeChange">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- How the header size has changed in a Simple Cache entry, emitted every time
- a write operation occurs on the header stream. (This includes the initial
- write, rewrites, and other writes that we couldn't classify.)
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.HeaderSizeDecreaseAbsolute" units="bytes">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The absolute size decrease of the header stream of a Simple Cache entry,
- emitted every time the headers are rewritten with a smaller size.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.HeaderSizeDecreasePercentage" units="percent">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The relative size decrease of the header stream of a Simple Cache entry,
- emitted every time the headers are rewritten with a smaller size.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.HeaderSizeIncreaseAbsolute" units="bytes">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The absolute size increase of the header stream of a Simple Cache entry,
- emitted every time the headers are rewritten with a larger size.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.HeaderSizeIncreasePercentage" units="percent">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The relative size increase of the header stream of a Simple Cache entry,
- emitted every time the headers are rewritten with a larger size.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.CheckCRCResult" enum="CheckCRCResult">
- <summary>
- Whether or not the CRC was checked at the moment when the last reference to
- a read-only entry stream is closed.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.CreationToIndex" units="milliseconds">
- <summary>
- The time from the creation of the simple cache backend until the index has
- been loaded from disk.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.CreationToIndexFail" units="milliseconds">
- <summary>
- The time from the creation of the simple cache backend until the index fails
- to load.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.EntryCreatedAndStream2Omitted"
- enum="SimpleCache.EntryCreatedAndStream2Omitted">
- <summary>
- Whether, upon creation of a new cache entry, the file for stream 2 was
- omitted since that stream was empty.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.EntryCreationResult" enum="BooleanSuccess">
- <summary>
- For entry creation operations that were sent to the disk, the result of
- creation.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.EntryCreationTime" units="milliseconds">
- <summary>The time, in ms, spent creating a new entry on disk.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.EntryOpenedAndStream2Removed"
- enum="SimpleCache.EntryOpenedAndStream2Removed">
- <summary>
- Whether, upon opening of an existing cache entry, stream 2 was empty and the
- file for that stream was therefore removed.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.EntryOperationsPending">
- <summary>
- At the time that operations are run, the number of pending operations on a
- particular entry.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.Eviction.CacheSizeOnStart" units="bytes">
- <summary>The size of the cache at the beginning of an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.Eviction.CacheSizeOnStart2" units="KB">
- <summary>The size of the cache at the beginning of an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.Eviction.EntryCount">
- <summary>The number of entries to be erased in an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.Eviction.MaxCacheSizeOnStart" units="bytes">
- <summary>
- The maximum allowed size of the cache at the beginning of an eviction.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.Eviction.MaxCacheSizeOnStart2" units="KB">
- <summary>
- The maximum allowed size of the cache at the beginning of an eviction.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.Eviction.Result" enum="BooleanSuccess">
- <summary>The result of an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.Eviction.SizeOfEvicted" units="bytes">
- <summary>The number of bytes to be erased in an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.Eviction.SizeOfEvicted2" units="KB">
- <summary>The amount of memory freed in an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.Eviction.SizeWhenDone" units="bytes">
- <summary>The size of the cache after running an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.Eviction.SizeWhenDone2" units="KB">
- <summary>The size of the cache after running an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.Eviction.TimeToDone" units="milliseconds">
- <summary>Time spent completing an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.Eviction.TimeToSelectEntries"
- units="milliseconds">
- <summary>Time spent selecting entries for eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.FileDescriptorLimitHard">
- <summary>
- The maximum limit of how many file descriptors a process can open. Emitted
- each time the browser is launched, if the limit could be retrieved. (This
- is the highest value we could raise the current limit to if we liked.)
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.FileDescriptorLimitSoft">
- <summary>
- The current limit of how many file descriptors a process can open. Emitted
- each time the browser is launched, if the limit could be retrieved. (We can
- raise this to the maximum limit if we like, without root access.)
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.FileDescriptorLimitStatus"
- enum="SimpleCache.FileDescriptorLimitStatus">
- <summary>
- The result of trying to get the file descriptor limit. Emitted each time
- the browser is launched.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.GlobalOpenEntryCount">
- <summary>
- The number of open entries across all caches backed by the Simple Cache. An
- entry is opened whenever a caller asks to open it to read or write cache
- data, and remains open until the last caller asks to close it. Logged
- whenever an entry is opened or closed.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.HeaderSize" units="bytes">
- <summary>
- The size of the header stream of a Simple Cache entry, emitted every time
- the headers are written or rewritten.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.HeaderSizeChange"
- enum="SimpleCacheHeaderSizeChange">
- <summary>
- How the header size has changed in a Simple Cache entry, emitted every time
- a write operation occurs on the header stream. (This includes the initial
- write, rewrites, and other writes that we couldn't classify.)
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.HeaderSizeDecreaseAbsolute" units="bytes">
- <summary>
- The absolute size decrease of the header stream of a Simple Cache entry,
- emitted every time the headers are rewritten with a smaller size.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.HeaderSizeDecreasePercentage" units="percent">
- <summary>
- The relative size decrease of the header stream of a Simple Cache entry,
- emitted every time the headers are rewritten with a smaller size.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.HeaderSizeIncreaseAbsolute" units="bytes">
- <summary>
- The absolute size increase of the header stream of a Simple Cache entry,
- emitted every time the headers are rewritten with a larger size.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.HeaderSizeIncreasePercentage" units="percent">
- <summary>
- The relative size increase of the header stream of a Simple Cache entry,
- emitted every time the headers are rewritten with a larger size.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.IndexCorrupt" enum="BooleanCorrupt">
- <summary>For each index load, whether the index file was corrupt.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.IndexCreatedEntryCount">
- <summary>The number of entries in a newly created index file.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.IndexEntriesLoaded">
- <summary>Number of entries loaded from the index file on start.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.IndexEntriesRestored">
- <summary>
- Number of entries restored from disk when there was no index or the index
- was corrupted.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.IndexFileStateOnLoad" enum="SimpleIndexState">
- <summary>
- The state the index file is at when an attempt is made to load from it.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.IndexInitializationWaiters">
- <summary>
- At the time of index initialization, the number of enqueued jobs awaiting
- index initialization.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.IndexInitializeMethod"
- enum="SimpleCacheIndexInitializeMethod">
- <summary>The method used to initialize the simple cache index.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.IndexLoadTime" units="milliseconds">
- <summary>
- Time (as measured on the worker pool) spent loading the index file.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.IndexNumEntriesOnWrite">
- <summary>The number of entries written to the index on a flush.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.IndexRestoreTime" units="milliseconds">
- <summary>
- Time (as measured on the worker pool) spent restoring the index file by
- iterating directory entries.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.IndexWriteInterval.Background"
- units="milliseconds">
- <summary>
- The interval between index saves, for apps in the background.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.IndexWriteInterval.Foreground"
- units="milliseconds">
- <summary>
- The interval between index saves, for apps in the foreground.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.IndexWriteToDiskTime.Background"
- units="milliseconds">
- <summary>
- The amount of time spend writing the index file to disk, for apps in the
- background, measured starting at the beginning of the write on the callback
- thread, and calculated using the completion time on the worker pool.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.IndexWriteToDiskTime.Foreground"
- units="milliseconds">
- <summary>
- The amount of time spend writing the index file to disk, for apps in the
- foreground, measured starting at the beginning of the write on the callback
- thread, and calculated using the completion time on the worker pool.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.KeyMatchedOnOpen" enum="BooleanMatched">
- <summary>
- For each call to OpenEntry, whether the key on disk matched the request key.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.LastClusterLossPercent" units="percent">
- <summary>
- For each file in the Simple Cache, the percentage of disk space used by the
- cluster loss, the unused disk space in the last 4096 byte cluster of the
- file.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.LastClusterSize" units="bytes">
- <summary>
- For each file in the Simple Cache, the number of bytes in the last 4096 byte
- cluster when the entry is saved to disk.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.OpenEntryIndexState"
- enum="SimpleCacheOpenEntryIndexState">
- <summary>
- At the time that an entry is opened, the state of that entry in the index.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.ReadIsParallelizable"
- enum="SimpleCacheReadParallelizable">
- <summary>
- For each Read operation, whether it could have been issued in parallel of a
- previous Read operation.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.ReadResult" enum="SimpleCacheReadResult">
- <summary>The outcome of Entry::ReadData in the simple cache.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.SyncCheckEOFHasCrc" enum="BooleanHasCrc">
- <summary>
- For each EOFRecord found with a valid magic number, indicates if the record
- also contains a CRC.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.SyncCheckEOFResult"
- enum="SimpleCacheSyncCheckEOFResult">
- <summary>
- The result, at the synchronous layer, of checking the EOF record of a cache
- entry.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.SyncCloseResult"
- enum="SimpleCacheSyncCloseResult">
- <summary>
- The result, at the synchronous layer, of closing a cache entry.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.SyncCreatePlatformFileError"
- enum="PlatformFileError">
- <summary>
- The platform error reported when attempting to create a new cache entry at
- the synchronous layer.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.SyncCreatePlatformFileError_WithIndex"
- enum="PlatformFileError">
- <summary>
- The platform error reported when attempting to create a new cache entry at
- the synchronous layer when the index has already initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.SyncCreatePlatformFileError_WithoutIndex"
- enum="PlatformFileError">
- <summary>
- The platform error reported when attempting to create a new cache entry at
- the synchronous layer when the index has not yet initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.SyncCreateResult"
- enum="SimpleCacheSyncCreateResult">
- <summary>
- The result, at the synchronous layer, reported when attempting to create a
- new cache entry.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.SyncCreateResult_WithIndex"
- enum="SimpleCacheSyncCreateResult">
- <summary>
- The result, at the synchronous layer, reported when attempting to create a
- new cache entry when the index has already initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.SyncCreateResult_WithoutIndex"
- enum="SimpleCacheSyncCreateResult">
- <summary>
- The result, at the synchronous layer, reported when attempting to create a
- new cache entry when the index has not yet initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.SyncOpenEntryAge" units="hours">
- <summary>
- The age of the entry (time since last modified), when opened at the
- synchronous layer.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.SyncOpenPlatformFileError"
- enum="PlatformFileError">
- <summary>
- The platform error reported when attempting to create a new cache entry at
- the synchronous layer.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.SyncOpenPlatformFileError_WithIndex"
- enum="PlatformFileError">
- <summary>
- The platform error reported when attempting to create a new cache entry at
- the synchronous layer when the index has already initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.SyncOpenPlatformFileError_WithoutIndex"
- enum="PlatformFileError">
- <summary>
- The platform error reported when attempting to create a new cache entry at
- the synchronous layer when the index has not initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.SyncOpenResult"
- enum="SimpleCacheSyncOpenResult">
- <summary>
- The result, at the synchronous layer, reported when attempting to open a new
- cache entry.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.SyncOpenResult_WithIndex"
- enum="SimpleCacheSyncOpenResult">
- <summary>
- The result, at the synchronous layer, reported when attempting to open a new
- cache entry when the index has already initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.SyncOpenResult_WithoutIndex"
- enum="SimpleCacheSyncOpenResult">
- <summary>
- The result, at the synchronous layer, reported when attempting to open a new
- cache entry when the index has not yet initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.SyncWriteResult"
- enum="SimpleCacheSyncWriteResult">
- <summary>
- The result, at the synchronous layer, of writing to a cache entry.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.WriteDependencyType"
- enum="SimpleCacheWriteDependencyType">
- <summary>
- Shows whether a write operation depends on the previous operation in queue
- particularly in the aspect of its possibility to run in parallel.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.WriteResult" enum="SimpleCacheWriteResult">
- <obsolete>
- Replaced 2013/09/03 by WriteResult2, which adds &quot;fast empty
- return&quot;, which previously showed up as &quot;success&quot;.
- </obsolete>
- <summary>The outcome of Entry::WriteData in the simple cache.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Http.WriteResult2" enum="SimpleCacheWriteResult">
- <summary>The outcome of Entry::WriteData in the simple cache.</summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexCorrupt" enum="BooleanCorrupt">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>For each index load, whether the index file was corrupt.</summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexCreatedEntryCount">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>The number of entries in a newly created index file.</summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexEntriesLoaded">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>Number of entries loaded from the index file on start.</summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexEntriesRestored">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- Number of entries restored from disk when there was no index or the index
- was corrupted.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexFileStateOnLoad" enum="SimpleIndexState">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The state the index file is at when an attempt is made to load from it.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexInitializationWaiters">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- At the time of index initialization, the number of enqueued jobs awaiting
- index initialization.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexInitializeMethod"
- enum="SimpleCacheIndexInitializeMethod">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>The method used to initialize the simple cache index.</summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexLoadTime" units="milliseconds">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- Time (as measured on the worker pool) spent loading the index file.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexNumEntriesOnWrite">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>The number of entries written to the index on a flush.</summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexRestoreTime" units="milliseconds">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- Time (as measured on the worker pool) spent restoring the index file by
- iterating directory entries.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexStale" enum="BooleanStale">
- <obsolete>
- Deprecated 07/2013, and replaced by IndexFileStateOnLoad.
- </obsolete>
- <summary>For each index load, whether the index file was stale.</summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexWriteInterval.Background"
- units="milliseconds">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The interval between index saves, for apps in the background.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexWriteInterval.Foreground"
- units="milliseconds">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The interval between index saves, for apps in the foreground.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexWriteToDiskTime" units="milliseconds">
- <obsolete>
- Deprecated 2013-05 in favour of
- SimpleCache.SimpleIndexWriteToDiskTime.Background and
- SimpleCache.SimpleIndexWriteToDiskTime.Foreground.
- </obsolete>
- <summary>
- The amount of time spend writing the index file to disk, measured starting
- at the beginning of the write on the callback thread, and calculated using
- the completion time on the worker pool.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexWriteToDiskTime.Background"
- units="milliseconds">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The amount of time spend writing the index file to disk, for apps in the
- background, measured starting at the beginning of the write on the callback
- thread, and calculated using the completion time on the worker pool.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.IndexWriteToDiskTime.Foreground"
- units="milliseconds">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The amount of time spend writing the index file to disk, for apps in the
- foreground, measured starting at the beginning of the write on the callback
- thread, and calculated using the completion time on the worker pool.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.KeyMatchedOnOpen" enum="BooleanMatched">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- For each call to OpenEntry, whether the key on disk matched the request key.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.LastClusterLossPercent" units="percent">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- For each file in the Simple Cache, the percentage of disk space used by the
- cluster loss, the unused disk space in the last 4096 byte cluster of the
- file.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.LastClusterSize" units="bytes">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- For each file in the Simple Cache, the number of bytes in the last 4096 byte
- cluster when the entry is saved to disk.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.CheckCRCResult" enum="CheckCRCResult">
- <summary>
- Whether or not the CRC was checked at the moment when the last reference to
- a read-only entry stream is closed.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.CreationToIndex" units="milliseconds">
- <summary>
- The time from the creation of the simple cache backend until the index has
- been loaded from disk.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.CreationToIndexFail" units="milliseconds">
- <summary>
- The time from the creation of the simple cache backend until the index fails
- to load.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.EntryCreatedAndStream2Omitted"
- enum="SimpleCache.EntryCreatedAndStream2Omitted">
- <summary>
- Whether, upon creation of a new cache entry, the file for stream 2 was
- omitted since that stream was empty.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.EntryCreationResult" enum="BooleanSuccess">
- <summary>
- For entry creation operations that were sent to the disk, the result of
- creation.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.EntryCreationTime" units="milliseconds">
- <summary>The time, in ms, spent creating a new entry on disk.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.EntryOpenedAndStream2Removed"
- enum="SimpleCache.EntryOpenedAndStream2Removed">
- <summary>
- Whether, upon opening of an existing cache entry, stream 2 was empty and the
- file for that stream was therefore removed.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.EntryOperationsPending">
- <summary>
- At the time that operations are run, the number of pending operations on a
- particular entry.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.Eviction.CacheSizeOnStart" units="bytes">
- <summary>The size of the cache at the beginning of an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.Eviction.CacheSizeOnStart2" units="KB">
- <summary>The size of the cache at the beginning of an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.Eviction.EntryCount">
- <summary>The number of entries to be erased in an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.Eviction.MaxCacheSizeOnStart" units="bytes">
- <summary>
- The maximum allowed size of the cache at the beginning of an eviction.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.Eviction.MaxCacheSizeOnStart2" units="KB">
- <summary>
- The maximum allowed size of the cache at the beginning of an eviction.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.Eviction.Result" enum="BooleanSuccess">
- <summary>The result of an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.Eviction.SizeOfEvicted" units="bytes">
- <summary>The number of bytes to be erased in an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.Eviction.SizeOfEvicted2" units="KB">
- <summary>The amount of memory freed in an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.Eviction.SizeWhenDone" units="bytes">
- <summary>The size of the cache after running an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.Eviction.SizeWhenDone2" units="KB">
- <summary>The size of the cache after running an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.Eviction.TimeToDone" units="milliseconds">
- <summary>Time spent completing an eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.Eviction.TimeToSelectEntries"
- units="milliseconds">
- <summary>Time spent selecting entries for eviction.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.FileDescriptorLimitHard">
- <summary>
- The maximum limit of how many file descriptors a process can open. Emitted
- each time the browser is launched, if the limit could be retrieved. (This
- is the highest value we could raise the current limit to if we liked.)
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.FileDescriptorLimitSoft">
- <summary>
- The current limit of how many file descriptors a process can open. Emitted
- each time the browser is launched, if the limit could be retrieved. (We can
- raise this to the maximum limit if we like, without root access.)
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.FileDescriptorLimitStatus"
- enum="SimpleCache.FileDescriptorLimitStatus">
- <summary>
- The result of trying to get the file descriptor limit. Emitted each time
- the browser is launched.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.GlobalOpenEntryCount">
- <summary>
- The number of open entries across all caches backed by the Simple Cache. An
- entry is opened whenever a caller asks to open it to read or write cache
- data, and remains open until the last caller asks to close it. Logged
- whenever an entry is opened or closed.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.HeaderSize" units="bytes">
- <summary>
- The size of the header stream of a Simple Cache entry, emitted every time
- the headers are written or rewritten.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.HeaderSizeChange"
- enum="SimpleCacheHeaderSizeChange">
- <summary>
- How the header size has changed in a Simple Cache entry, emitted every time
- a write operation occurs on the header stream. (This includes the initial
- write, rewrites, and other writes that we couldn't classify.)
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.HeaderSizeDecreaseAbsolute" units="bytes">
- <summary>
- The absolute size decrease of the header stream of a Simple Cache entry,
- emitted every time the headers are rewritten with a smaller size.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.HeaderSizeDecreasePercentage"
- units="percent">
- <summary>
- The relative size decrease of the header stream of a Simple Cache entry,
- emitted every time the headers are rewritten with a smaller size.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.HeaderSizeIncreaseAbsolute" units="bytes">
- <summary>
- The absolute size increase of the header stream of a Simple Cache entry,
- emitted every time the headers are rewritten with a larger size.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.HeaderSizeIncreasePercentage"
- units="percent">
- <summary>
- The relative size increase of the header stream of a Simple Cache entry,
- emitted every time the headers are rewritten with a larger size.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.IndexCorrupt" enum="BooleanCorrupt">
- <summary>For each index load, whether the index file was corrupt.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.IndexCreatedEntryCount">
- <summary>The number of entries in a newly created index file.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.IndexEntriesLoaded">
- <summary>Number of entries loaded from the index file on start.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.IndexEntriesRestored">
- <summary>
- Number of entries restored from disk when there was no index or the index
- was corrupted.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.IndexFileStateOnLoad"
- enum="SimpleIndexState">
- <summary>
- The state the index file is at when an attempt is made to load from it.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.IndexInitializationWaiters">
- <summary>
- At the time of index initialization, the number of enqueued jobs awaiting
- index initialization.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.IndexInitializeMethod"
- enum="SimpleCacheIndexInitializeMethod">
- <summary>The method used to initialize the simple cache index.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.IndexLoadTime" units="milliseconds">
- <summary>
- Time (as measured on the worker pool) spent loading the index file.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.IndexNumEntriesOnWrite">
- <summary>The number of entries written to the index on a flush.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.IndexRestoreTime" units="milliseconds">
- <summary>
- Time (as measured on the worker pool) spent restoring the index file by
- iterating directory entries.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.IndexWriteInterval.Background"
- units="milliseconds">
- <summary>
- The interval between index saves, for apps in the background.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.IndexWriteInterval.Foreground"
- units="milliseconds">
- <summary>
- The interval between index saves, for apps in the foreground.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.IndexWriteToDiskTime.Background"
- units="milliseconds">
- <summary>
- The amount of time spend writing the index file to disk, for apps in the
- background, measured starting at the beginning of the write on the callback
- thread, and calculated using the completion time on the worker pool.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.IndexWriteToDiskTime.Foreground"
- units="milliseconds">
- <summary>
- The amount of time spend writing the index file to disk, for apps in the
- foreground, measured starting at the beginning of the write on the callback
- thread, and calculated using the completion time on the worker pool.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.KeyMatchedOnOpen" enum="BooleanMatched">
- <summary>
- For each call to OpenEntry, whether the key on disk matched the request key.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.LastClusterLossPercent" units="percent">
- <summary>
- For each file in the Simple Cache, the percentage of disk space used by the
- cluster loss, the unused disk space in the last 4096 byte cluster of the
- file.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.LastClusterSize" units="bytes">
- <summary>
- For each file in the Simple Cache, the number of bytes in the last 4096 byte
- cluster when the entry is saved to disk.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.OpenEntryIndexState"
- enum="SimpleCacheOpenEntryIndexState">
- <summary>
- At the time that an entry is opened, the state of that entry in the index.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.ReadIsParallelizable"
- enum="SimpleCacheReadParallelizable">
- <summary>
- For each Read operation, whether it could have been issued in parallel of a
- previous Read operation.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.ReadResult" enum="SimpleCacheReadResult">
- <summary>The outcome of Entry::ReadData in the simple cache.</summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.SyncCheckEOFHasCrc" enum="BooleanHasCrc">
- <summary>
- For each EOFRecord found with a valid magic number, indicates if the record
- also contains a CRC.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.SyncCheckEOFResult"
- enum="SimpleCacheSyncCheckEOFResult">
- <summary>
- The result, at the synchronous layer, of checking the EOF record of a cache
- entry.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.SyncCloseResult"
- enum="SimpleCacheSyncCloseResult">
- <summary>
- The result, at the synchronous layer, of closing a cache entry.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.SyncCreatePlatformFileError"
- enum="PlatformFileError">
- <summary>
- The platform error reported when attempting to create a new cache entry at
- the synchronous layer.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.SyncCreatePlatformFileError_WithIndex"
- enum="PlatformFileError">
- <summary>
- The platform error reported when attempting to create a new cache entry at
- the synchronous layer when the index has already initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.SyncCreatePlatformFileError_WithoutIndex"
- enum="PlatformFileError">
- <summary>
- The platform error reported when attempting to create a new cache entry at
- the synchronous layer when the index has not yet initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.SyncCreateResult"
- enum="SimpleCacheSyncCreateResult">
- <summary>
- The result, at the synchronous layer, reported when attempting to create a
- new cache entry.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.SyncCreateResult_WithIndex"
- enum="SimpleCacheSyncCreateResult">
- <summary>
- The result, at the synchronous layer, reported when attempting to create a
- new cache entry when the index has already initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.SyncCreateResult_WithoutIndex"
- enum="SimpleCacheSyncCreateResult">
- <summary>
- The result, at the synchronous layer, reported when attempting to create a
- new cache entry when the index has not yet initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.SyncOpenEntryAge" units="hours">
- <summary>
- The age of the entry (time since last modified), when opened at the
- synchronous layer.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.SyncOpenPlatformFileError"
- enum="PlatformFileError">
- <summary>
- The platform error reported when attempting to create a new cache entry at
- the synchronous layer.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.SyncOpenPlatformFileError_WithIndex"
- enum="PlatformFileError">
- <summary>
- The platform error reported when attempting to create a new cache entry at
- the synchronous layer when the index has already initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.SyncOpenPlatformFileError_WithoutIndex"
- enum="PlatformFileError">
- <summary>
- The platform error reported when attempting to create a new cache entry at
- the synchronous layer when the index has not initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.SyncOpenResult"
- enum="SimpleCacheSyncOpenResult">
- <summary>
- The result, at the synchronous layer, reported when attempting to open a new
- cache entry.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.SyncOpenResult_WithIndex"
- enum="SimpleCacheSyncOpenResult">
- <summary>
- The result, at the synchronous layer, reported when attempting to open a new
- cache entry when the index has already initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.SyncOpenResult_WithoutIndex"
- enum="SimpleCacheSyncOpenResult">
- <summary>
- The result, at the synchronous layer, reported when attempting to open a new
- cache entry when the index has not yet initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.SyncWriteResult"
- enum="SimpleCacheSyncWriteResult">
- <summary>
- The result, at the synchronous layer, of writing to a cache entry.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.WriteDependencyType"
- enum="SimpleCacheWriteDependencyType">
- <summary>
- Shows whether a write operation depends on the previous operation in queue
- particularly in the aspect of its possibility to run in parallel.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.Media.WriteResult2" enum="SimpleCacheWriteResult">
- <summary>The outcome of Entry::WriteData in the simple cache.</summary>
-</histogram>
-
-<histogram name="SimpleCache.OpenEntryIndexState"
- enum="SimpleCacheOpenEntryIndexState">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- At the time that an entry is opened, the state of that entry in the index.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.ReadIsParallelizable"
- enum="SimpleCacheReadParallelizable">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- For each Read operation, whether it could have been issued in parallel of a
- previous Read operation.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.ReadResult" enum="SimpleCacheReadResult">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>The outcome of Entry::ReadData in the simple cache.</summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncCheckEOFHasCrc" enum="BooleanHasCrc">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- For each EOFRecord found with a valid magic number, indicates if the record
- also contains a CRC.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncCheckEOFResult"
- enum="SimpleCacheSyncCheckEOFResult">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The result, at the synchronous layer, of checking the EOF record of a cache
- entry.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncCloseResult" enum="SimpleCacheSyncCloseResult">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The result, at the synchronous layer, of closing a cache entry.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncCreatePlatformFileError"
- enum="PlatformFileError">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The platform error reported when attempting to create a new cache entry at
- the synchronous layer.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncCreatePlatformFileError_WithIndex"
- enum="PlatformFileError">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The platform error reported when attempting to create a new cache entry at
- the synchronous layer when the index has already initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncCreatePlatformFileError_WithoutIndex"
- enum="PlatformFileError">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The platform error reported when attempting to create a new cache entry at
- the synchronous layer when the index has not yet initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncCreateResult"
- enum="SimpleCacheSyncCreateResult">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The result, at the synchronous layer, reported when attempting to create a
- new cache entry.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncCreateResult_WithIndex"
- enum="SimpleCacheSyncCreateResult">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The result, at the synchronous layer, reported when attempting to create a
- new cache entry when the index has already initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncCreateResult_WithoutIndex"
- enum="SimpleCacheSyncCreateResult">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The result, at the synchronous layer, reported when attempting to create a
- new cache entry when the index has not yet initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncOpenEntryAge" units="hours">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The age of the entry (time since last modified), when opened at the
- synchronous layer.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncOpenPlatformFileError"
- enum="PlatformFileError">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The platform error reported when attempting to create a new cache entry at
- the synchronous layer.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncOpenPlatformFileError_WithIndex"
- enum="PlatformFileError">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The platform error reported when attempting to create a new cache entry at
- the synchronous layer when the index has already initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncOpenPlatformFileError_WithoutIndex"
- enum="PlatformFileError">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The platform error reported when attempting to create a new cache entry at
- the synchronous layer when the index has not initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncOpenResult" enum="SimpleCacheSyncOpenResult">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The result, at the synchronous layer, reported when attempting to open a new
- cache entry.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncOpenResult_WithIndex"
- enum="SimpleCacheSyncOpenResult">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The result, at the synchronous layer, reported when attempting to open a new
- cache entry when the index has already initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncOpenResult_WithoutIndex"
- enum="SimpleCacheSyncOpenResult">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The result, at the synchronous layer, reported when attempting to open a new
- cache entry when the index has not yet initialized.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.SyncWriteResult" enum="SimpleCacheSyncWriteResult">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- The result, at the synchronous layer, of writing to a cache entry.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.WriteDependencyType"
- enum="SimpleCacheWriteDependencyType">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>
- Shows whether a write operation depends on the previous operation in queue
- particularly in the aspect of its possibility to run in parallel.
- </summary>
-</histogram>
-
-<histogram name="SimpleCache.WriteResult" enum="SimpleCacheWriteResult">
- <obsolete>
- Deprecated 2013-08 in favor of cache type specific version (App or Http).
- </obsolete>
- <summary>The outcome of Entry::WriteData in the simple cache.</summary>
-</histogram>
-
-<histogram name="SiteIsolation.AllResponses">
- <summary>
- The count of all network responses received by a renderer. Each response is
- corresponding to one URL requested by a renderer. Incremented when the first
- network packet of a response of this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.BrowsingInstanceCount">
- <summary>
- The count of all current BrowsingInstances. Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.CurrentRendererProcessCount">
- <summary>
- The count of all renderer processes, including WebUI and extensions.
- Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.IsolateAllSitesProcessCountEstimate">
- <summary>
- The upper bound of the predicted renderer process count if we isolated all
- sites, subject to the process limit. Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.IsolateAllSitesProcessCountLowerBound">
- <summary>
- The lower bound of the predicted renderer process count if we isolated all
- sites, subject to the process limit. Happens to be the number of unique
- sites. Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.IsolateAllSitesProcessCountNoLimit">
- <summary>
- The predicted renderer process count if we isolated all sites and if there
- were no process limit. Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.IsolateAllSitesTotalProcessCountEstimate">
- <summary>
- The predicted total process count if we isolated all sites, subject to the
- process limit. Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.IsolateHttpsSitesProcessCountEstimate">
- <summary>
- The upper bound of the predicted renderer process count if we isolated only
- HTTPS (not HTTP) sites, subject to the process limit. Recorded once per UMA
- ping.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.IsolateHttpsSitesProcessCountLowerBound">
- <summary>
- The lower bound of the predicted renderer process count if we isolated only
- HTTPS (not HTTP) sites, subject to the process limit. Happens to be the
- number of isolated sites. Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.IsolateHttpsSitesProcessCountNoLimit">
- <summary>
- The predicted renderer process count if we isolated only HTTPS (not HTTP)
- sites and if there were no process limit. Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.IsolateHttpsSitesTotalProcessCountEstimate">
- <summary>
- The predicted total process count if we isolated only HTTPS (not HTTP)
- sites, subject to the process limit. Recorded once per UMA ping.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.DataLength" units="byte">
- <summary>
- The number of bytes in the first network packet for a response with headers
- that imply potential illegal cross-site access. Recorded when the first
- network packet of a response of this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.HTML.Blocked">
- <summary>
- The count of blocked cross-site document responses due to having HTML
- content type header and contents sniffed as HTML. Sampled with value of 1
- when the first network packet of a response of this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.HTML.Blocked.NonRenderableStatusCode">
- <summary>
- The count of responses with a nonrenderable HTTP status code among blocked
- cross-site document responses due to their HTML contents. Sampled with value
- 1 when the first network packet of a response of this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.HTML.Blocked.RenderableStatusCode"
- enum="SiteIsolationResourceType">
- <summary>
- The count of responses with a renderable HTTP status code sub-categorized by
- their requesting context type (e.g., image, script, etc.) among blocked
- cross-site document responses due to their HTML contents. Sampled with a
- resource type (0-14) when the first network packet of a response of this
- type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.HTML.NoSniffBlocked.NonRenderableStatusCode">
- <summary>
- The count of responses with a nonrenderable HTTP status code among blocked
- cross-site document responses due to having HTML content type and nosniff
- headers. Sampled with value 1 when the first network packet of a response of
- this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.HTML.NoSniffBlocked.RenderableStatusCode"
- enum="SiteIsolationResourceType">
- <summary>
- The count of responses with a renderable HTTP status code sub-categorized by
- their requesting context type (e.g., image, script, etc.), among blocked
- cross-site document responses due to having HTML content type and nosniff
- headers. Sampled with a resource type (0-14) when the first network packet
- of a response of this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.HTML.NotBlocked">
- <summary>
- The count of not blocked responses despite having an HTML content type
- header due to the failure of content sniffing. Sampled with value 1 when the
- first network packet of a response of this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.HTML.NotBlocked.MaybeJS">
- <summary>
- The count of responses that may be parsed as JavaScript among not blocked
- responses. Sampled with value 1 when the first network packet of a response
- of this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.JSON.Blocked">
- <summary>
- The count of blocked cross-site document responses due to having JSON
- content type header and contents sniffed as JSON. Sampled with value 1 when
- the first network packet of a response of this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.JSON.Blocked.NonRenderableStatusCode">
- <summary>
- The count of responses with a nonrenderable HTTP status code among blocked
- cross-site document responses due to their JSON contents. Sampled with value
- 1 when the first network packet of a response of this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.JSON.Blocked.RenderableStatusCode"
- enum="SiteIsolationResourceType">
- <summary>
- The count of responses with a renderable HTTP status code sub-categorized by
- their requesting context type (e.g., image, script, etc.), among blocked
- cross-site document responses due to their JSON contents. Sampled with a
- resource type (0-14) when the first network packet of a response of this
- type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.JSON.NoSniffBlocked.NonRenderableStatusCode">
- <summary>
- The count of responses with a nonrenderable HTTP status code among blocked
- cross-site document responses due to having JSON content type and nosniff
- headers. Sampled with value 1 when the first network packet of a response of
- this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.JSON.NoSniffBlocked.RenderableStatusCode"
- enum="SiteIsolationResourceType">
- <summary>
- The count of responses with a renderable HTTP status code sub-categorized by
- their requesting context type (e.g., image, script, etc.), among blocked
- cross-site document responses due to having JSON content type and nosniff
- headers. Sampled with a resource type (0-14) when the first network packet
- of a response of this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.JSON.NotBlocked">
- <summary>
- The count of not blocked responses despite having an JSON content type
- header due to the failure of content sniffing. Sampled with value 1 when the
- first network packet of a response of this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.JSON.NotBlocked.MaybeJS">
- <summary>
- The count of responses that may be parsed as JavaScript among not blocked
- responses with a JSON content type header. Sampled with value 1 when the
- first network packet of a response of this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.MimeType" enum="SiteIsolationMimeType">
- <summary>
- MIME type codes for content type header values of potentially cross-site
- document responses, excluding same-site or not http(s) urls. Sampled with a
- MIME type code (0-4) when the first network packet of a response of this
- type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.HTML.Blocked">
- <summary>
- The count of blocked cross-site document responses due to having Plain
- content type header and contents sniffed as HTML. Sampled with value 1 when
- the first network packet of a response of this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.HTML.Blocked.NonRenderableStatusCode">
- <summary>
- The count of responses with a nonrenderable HTTP status code among blocked
- responses due to their Plain.HTML contents. Sampled with value 1 when the
- first network packet of a response of this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.HTML.Blocked.RenderableStatusCode"
- enum="SiteIsolationResourceType">
- <summary>
- The count of responses with a renderable HTTP status code sub-categorized by
- their requesting context type (e.g., image, script, etc.), among blocked
- cross-site document responses due to their Plain.HTML contents. Sampled with
- a resource type (0-14) when the first network packet of a response of this
- type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.JSON.Blocked">
- <summary>
- The count of blocked cross-site document responses due to having Plain
- content type header and contents sniffed as JSON. Sampled with value 1 when
- the first network packet of a response of this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.JSON.Blocked.NonRenderableStatusCode">
- <summary>
- The count of responses with a nonrenderable HTTP status code among blocked
- cross-site document responses due to their Plain.JSON contents. Sampled with
- value 1 when the first network packet of a response of this type is
- received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.JSON.Blocked.RenderableStatusCode"
- enum="SiteIsolationResourceType">
- <summary>
- The count of responses with a renderable HTTP status code sub-categorized by
- their requesting context type (e.g., image, script, etc.), among blocked
- cross-site document responses due to their Plain.JSON contents. Sampled with
- a resource type (0-14) when the first network packet of a response of this
- type is received.
- </summary>
-</histogram>
-
-<histogram
- name="SiteIsolation.XSD.Plain.NoSniffBlocked.NonRenderableStatusCode">
- <summary>
- The count of responses with a nonrenderable HTTP status code among blocked
- cross-site document responses due to having Plain content type and nosniff
- headers. Sampled with value 1 when the first network packet of a response of
- this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.NoSniffBlocked.RenderableStatusCode"
- enum="SiteIsolationResourceType">
- <summary>
- The count of responses with a renderable HTTP status code sub-categorized by
- their requesting context type (e.g., image, script, etc.), among blocked
- cross-site document responses due to having Plain content type and nosniff
- header. Sampled with a resource type (0-14) when the first network packet of
- a response of this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.NotBlocked">
- <summary>
- The count of not blocked responses despite having an Plain content type
- header due to the failure of content sniffing. Sampled with value 1 when the
- first network packet of a response of this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.NotBlocked.MaybeJS">
- <summary>
- The count of responses that may be parsed as JavaScript among not blocked
- responses with a Plain content type header. Sampled with value 1 when the
- first network packet of a response of this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.XML.Blocked">
- <summary>
- The count of blocked cross-site document responses due to having Plain
- content type header and contents sniffed as XML. Sampled with value 1 when
- the first network packet of a response of this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.XML.Blocked.NonRenderableStatusCode">
- <summary>
- The count of responses with a nonrenderable HTTP status code among blocked
- cross-site document responses due to their Plain.XML contents. Sampled with
- value 1 when the first network packet of a response of this type is
- received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.Plain.XML.Blocked.RenderableStatusCode"
- enum="SiteIsolationResourceType">
- <summary>
- The count of responses with renderable HTTP status codes sub-categorized by
- their requesting context type (e.g., image, script, etc.), among blocked
- cross-site document responses due to their Plain.XML contents. Sampled with
- a resource type (0-14) when the first network packet of a response of this
- type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.XML.Blocked">
- <summary>
- The count of blocked cross-site document responses due to having XML content
- type header and contents sniffed as XML. Sampled with value 1 when the first
- network packet of a response of this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.XML.Blocked.NonRenderableStatusCode">
- <summary>
- The count of responses with nonrenderable HTTP status codes among blocked
- cross-site document responses due to their XML contents. Sampled with value
- 1 when the first network packet of a response of this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.XML.Blocked.RenderableStatusCode"
- enum="SiteIsolationResourceType">
- <summary>
- The count of responses with renderable HTTP status codes sub-categorized by
- their requesting context type (e.g., image, script, etc.), among blocked
- cross-site document responses due to their XML contents. Sampled with a
- resource type (0-14) when the first network packet of a response of this
- type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.XML.NoSniffBlocked.NonRenderableStatusCode">
- <summary>
- The count of responses with a nonrenderable HTTP status code among blocked
- cross-site document responses due to having XML content type and nosniff
- headers. Sampled with value 1 when the first network packet of a response of
- this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.XML.NoSniffBlocked.RenderableStatusCode"
- enum="SiteIsolationResourceType">
- <summary>
- The count of responses with a renderable HTTP status code sub-categorized by
- their requesting context type (e.g., image, script, etc.), among blocked
- cross-site document responses due to having XML content type and nosniff
- headers. Sampled with a resource type (0-14) when the first network packet
- of a response of this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.XML.NotBlocked">
- <summary>
- The count of not blocked responses despite having an XML content type header
- due to the failure of content sniffing. Sampled with value 1 when the first
- network packet of a response of this type is received.
- </summary>
-</histogram>
-
-<histogram name="SiteIsolation.XSD.XML.NotBlocked.MaybeJS">
- <summary>
- The count of responses that may be parsed as JavaScript among not blocked
- responses with an XML content type. Sampled with value 1 when the first
- network packet of a response of this type is received.
- </summary>
-</histogram>
-
-<histogram name="SpellCheck.SpellingService.Enabled" enum="BooleanEnabled">
- <summary>
- Whether the user has opted in to asking Google for spelling suggestions.
- Recorded both when spelling is initialized and when the preference is
- changed.
- </summary>
-</histogram>
-
-<histogram name="Sqlite.AppCache.Error" enum="SqliteErrorCode">
- <obsolete>
- Moved to Sqlite.Error.AppCache in M-27.
- </obsolete>
- <summary>Error codes returned by sqlite for the appcache db.</summary>
-</histogram>
-
-<histogram name="Sqlite.CloseFailure" enum="SqliteErrorCode">
- <summary>Error which prevented database close.</summary>
-</histogram>
-
-<histogram name="Sqlite.Cookie.Error" enum="SqliteErrorCode">
- <obsolete>
- Moved to Sqlite.Error.Cookie in M-27.
- </obsolete>
- <summary>Error codes returned by sqlite the cookie db.</summary>
-</histogram>
-
-<histogram name="Sqlite.DatabaseTracker.Error" enum="SqliteErrorCode">
- <obsolete>
- Moved to Sqlite.Error.DatabaseTracker in M-27.
- </obsolete>
- <summary>Error codes returned by sqlite the websqldb tracker db.</summary>
-</histogram>
-
-<histogram name="Sqlite.DeprecationVersionResult"
- enum="SqliteVersionDeprecation">
- <summary>
- Annotations for which bits of sql::MetaTable::CheckDeprecated() fire.
- </summary>
-</histogram>
-
-<histogram name="Sqlite.DomainBoundCerts.Error" enum="SqliteErrorCode">
- <obsolete>
- Moved to Sqlite.Error.DomainBoundCerts in M-27.
- </obsolete>
- <summary>
- Error codes returned by sqlite for the domain-bound certs db.
- </summary>
-</histogram>
-
-<histogram name="Sqlite.DomStorageDatabase.Error" enum="SqliteErrorCode">
- <obsolete>
- Moved to Sqlite.Error.DomStorageDatabase in M-27.
- </obsolete>
- <summary>Error codes returned by sqlite for the domstorage db.</summary>
-</histogram>
-
-<histogram name="Sqlite.Error" enum="SqliteErrorCode">
- <summary>SQLite extended error codes.</summary>
-</histogram>
-
-<histogram name="Sqlite.Error.IOERR" enum="SqliteIOERRCode">
- <obsolete>
- Replaced 5/14/2013 by expanded Sqlite.Error histogram.
- </obsolete>
- <summary>SQLite extended SQLITE_IOERR codes for all databases.</summary>
-</histogram>
-
-<histogram name="Sqlite.History.Error" enum="SqliteErrorCode">
- <obsolete>
- Moved to Sqlite.Error.History in M-27.
- </obsolete>
- <summary>Error codes returned by sqlite for the history db.</summary>
-</histogram>
-
-<histogram name="Sqlite.OpenFailure" enum="SqliteErrorCode">
- <summary>Error which prevented database open.</summary>
-</histogram>
-
-<histogram name="Sqlite.OpenProbeFailure" enum="SqliteErrorCode">
- <summary>Error from first read of the database.</summary>
-</histogram>
-
-<histogram name="Sqlite.Quota.Error" enum="SqliteErrorCode">
- <obsolete>
- Moved to Sqlite.Error.Quota in M-27.
- </obsolete>
- <summary>Error codes returned by sqlite for the quota db.</summary>
-</histogram>
-
-<histogram name="Sqlite.RazeDatabase" enum="SqliteErrorCode">
- <summary>Errors attempting to Raze() database.</summary>
-</histogram>
-
-<histogram name="Sqlite.RazeDatabase2" enum="SqliteErrorCode">
- <summary>Errors on second attempt to Raze() database.</summary>
-</histogram>
-
-<histogram name="Sqlite.RazeDatabaseTruncate" enum="SqliteErrorCode">
- <summary>Errors truncating database for Raze().</summary>
-</histogram>
-
-<histogram name="Sqlite.RecoveryEvents" enum="SqliteRecoveryEventEnum">
- <summary>
- Records specific failure and success cases in sql::Recovery implementation,
- to determine which cases (if any) might be worth writing additional
- automated recovery code for, versus which should lead to clearing databases.
- </summary>
-</histogram>
-
-<histogram name="Sqlite.RecoveryHandle" enum="SqliteErrorCode">
- <summary>Error from sqlite3_backup_init() in sql::Recovery.</summary>
-</histogram>
-
-<histogram name="Sqlite.RecoveryStep" enum="SqliteErrorCode">
- <summary>Error from sqlite3_backup_step() in sql::Recovery.</summary>
-</histogram>
-
-<histogram name="Sqlite.SizeKB" units="Kb">
- <summary>Size in kilobytes of pre-existing database at startup.</summary>
-</histogram>
-
-<histogram name="Sqlite.Text.Error" enum="SqliteErrorCode">
- <obsolete>
- Moved to Sqlite.Error.Text in M-27.
- </obsolete>
- <summary>Error codes returned by sqlite the full text db.</summary>
-</histogram>
-
-<histogram name="Sqlite.Thumbnail.Error" enum="SqliteErrorCode">
- <obsolete>
- Moved to Sqlite.Error.Thumbnail in M-27.
- </obsolete>
- <summary>Error codes returned by sqlite for the thumbnail db.</summary>
-</histogram>
-
-<histogram name="Sqlite.Version">
- <summary>Version of pre-existing database at startup.</summary>
-</histogram>
-
-<histogram name="Sqlite.Web.Error" enum="SqliteErrorCode">
- <obsolete>
- Moved to Sqlite.Error.Web in M-27.
- </obsolete>
- <summary>Error codes returned by sqlite the web db.</summary>
-</histogram>
-
-<histogram name="Startup.BrowserMessageLoopStartTime">
- <summary>
- Time from browser startup to the start of the main thread's message loop.
- </summary>
-</histogram>
-
-<histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry"
- units="milliseconds">
- <summary>
- Time from main entry to the start of the main thread's message loop. This
- stat is only recorded after 7 minutes of OS uptime to try to mitigate the
- variance resulting from Chrome being autostarted.
- </summary>
-</histogram>
-
-<histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry.FirstRun"
- units="milliseconds">
- <summary>
- Time from main entry to the start of the main thread's message loop on first
- run. This stat is only recorded after 7 minutes of OS uptime to try to
- mitigate the variance resulting from Chrome being autostarted.
- </summary>
-</histogram>
-
-<histogram name="Startup.BrowserOpenTabs">
- <summary>
- Time taken to open the initial tab or to restore tabs from previous session.
- </summary>
-</histogram>
-
-<histogram name="Startup.BrowserWindowDisplay" units="milliseconds">
- <summary>
- Time from browser startup to the time the browser window initially becomes
- visible.
- </summary>
-</histogram>
-
-<histogram name="Startup.ChromeCast.TimeToDisplayVideo" units="milliseconds">
- <summary>
- The elapsed time from the ChromeCast application launch to the first video
- frame displayed.
- </summary>
-</histogram>
-
-<histogram name="Startup.CreateFirstProfile" units="milliseconds">
- <summary>
- How long it takes to load the original profile synchronously on the UI
- thread.
- </summary>
-</histogram>
-
-<histogram name="Startup.Fling.TimeToDisplayVideo" units="milliseconds">
- <summary>
- The elapsed time from the Fling application launch to the first video frame
- displayed.
- </summary>
-</histogram>
-
-<histogram name="Startup.IsResume">
- <obsolete>
- Deprecated 12/2011. Merged into MobileSessionStartType.
- </obsolete>
- <summary>Whether a startup is a resume (vs a cold start).</summary>
-</histogram>
-
-<histogram name="Startup.LoadTime.ExeMainToDllMain">
- <summary>
- Time from the main() function in chrome.exe to chrome.dll's main().
- </summary>
-</histogram>
-
-<histogram name="Startup.LoadTime.ProcessCreateToDllMain">
- <summary>Time from the process creation to chrome.dll's main().</summary>
-</histogram>
-
-<histogram name="Startup.LoadTime.ProcessCreateToExeMain">
- <summary>
- Time from the process creation to executing the main() function in
- chrome.exe.
- </summary>
-</histogram>
-
-<histogram name="Startup.MobileSessionStartAction"
- enum="MobileSessionStartAction">
- <summary>
- The action requested on the application startup when called from another app
- or the OS.
- </summary>
-</histogram>
-
-<histogram name="Startup.MobileSessionStartFromApps"
- enum="MobileSessionCallerApp">
- <summary>The calling application (if any).</summary>
-</histogram>
-
-<histogram name="Startup.ShowAppListColdStart" units="milliseconds">
- <summary>
- Time for a newly created browser process to reach the code that starts
- showing the app launcher, when started with the --show-app-list flag and
- with no currently running Chrome processes.
- </summary>
-</histogram>
-
-<histogram name="Startup.ShowAppListWarmStart" units="milliseconds">
- <summary>
- Time for a running browser process to reach the code that starts showing the
- app launcher. Measured from the time a second Chrome process started, which
- sent its --show-app-list command line argument to the already-running
- process and will soon exit.
- </summary>
-</histogram>
-
-<histogram name="Startup.SlowStartupBookmarksLoad" units="milliseconds">
- <summary>
- Time it takes to load bookmarks from disk. This measurement is only sent for
- startups that take &gt;10 seconds after an uptime of 7 minutes.
- </summary>
-</histogram>
-
-<histogram name="Startup.SlowStartupExtensionServiceInitAfterImport"
- units="milliseconds">
- <summary>
- Time it takes to finish initialization of the extension service including
- loading built-in extensions. This measurement is only sent for startups that
- take &gt;10 seconds after an uptime of 7 minutes.
- </summary>
-</histogram>
-
-<histogram name="Startup.SlowStartupFinalProfileInit" units="milliseconds">
- <summary>
- Time the final stages of profile initialization taking including
- initialization of profile keyed services. This measurement is only sent for
- startups that take &gt;10 seconds after an uptime of 7 minutes.
- </summary>
-</histogram>
-
-<histogram name="Startup.SlowStartupNSSInit" units="milliseconds">
- <summary>
- Time it takes to load the NSS libraries and initialize it. This measurement
- is only sent for startups that take &gt;10 seconds after an uptime of 7
- minutes.
- </summary>
-</histogram>
-
-<histogram name="Startup.SlowStartupPreferenceLoading" units="milliseconds">
- <summary>
- Time it takes to load preferences from disk. This measurement is only sent
- for startups that take &gt;10 seconds after an uptime of 7 minutes.
- </summary>
-</histogram>
-
-<histogram name="Startup.SlowStartupProfileIODataInit" units="milliseconds">
- <summary>
- Time it takes to initialize the ProfileIOData object - this includes
- initialization of the cookie store. This measurement is only sent for
- startups that take &gt;10 seconds after an uptime of 7 minutes.
- </summary>
-</histogram>
-
-<histogram name="Startup.SlowStartupSafeBrowsingGetDatabase"
- units="milliseconds">
- <summary>
- Time it takes to load the safe browsing database from disk. This measurement
- is only sent for startups that take &gt;10 seconds after an uptime of 7
- minutes.
- </summary>
-</histogram>
-
-<histogram name="Startup.SlowStartupSafeBrowsingServiceInitialize"
- units="milliseconds">
- <summary>
- Time it takes to initialize the safe browsing service. This measurement is
- only sent for startups that take &gt;10 seconds after an uptime of 7
- minutes.
- </summary>
-</histogram>
-
-<histogram name="Startup.SlowStartupSessionServiceCreateTabsAndWindows"
- units="milliseconds">
- <summary>
- Time it takes for session restore to finish initiating creation of restored
- tabs and windows. This measurement is only sent for startups that take
- &gt;10 seconds after an uptime of 7 minutes.
- </summary>
-</histogram>
-
-<histogram name="Startup.WarmStartTimeFromRemoteProcessStart"
- units="milliseconds">
- <summary>
- Time for a running browser process to start processing the command line
- passed in by a second Chrome process, which just sent its command line
- arguments to the already-running process and will soon exit. Measured from
- the time the second Chrome process started.
- </summary>
-</histogram>
-
-<histogram name="Sync.AuthInvalidationRejectedTokenAgeLong" units="days">
- <summary>
- Age of all auth tokens rejected by the invalidation server. Measured from
- the time they were created.
- </summary>
-</histogram>
-
-<histogram name="Sync.AuthInvalidationRejectedTokenAgeShort"
- units="milliseconds">
- <summary>
- Age of auth tokens younger than one hour that were rejected by the
- invalidation server. Measured from the time they were created.
- </summary>
-</histogram>
-
-<histogram name="Sync.AuthServerRejectedTokenAgeLong" units="days">
- <summary>
- Age of all auth tokens rejected by the sync server. Measured from the time
- they were created.
- </summary>
-</histogram>
-
-<histogram name="Sync.AuthServerRejectedTokenAgeShort" units="milliseconds">
- <summary>
- Age of auth tokens younger than one hour that were rejected by the sync
- server. Measured from the time they were created.
- </summary>
-</histogram>
-
-<histogram name="Sync.BackendInitializeRestoreState"
- enum="SyncBackendInitializeRestoreState">
- <summary>
- Compares sync's has_setup_completed pref against the set of types actually
- restored from the sync DB. Mismatches should be rare.
- </summary>
-</histogram>
-
-<histogram name="Sync.RefreshTokenAvailable" enum="BooleanSuccess">
- <summary>
- Whether OAuth2 refresh token was available at the time when
- ProfileSyncService was starting backend.
- </summary>
-</histogram>
-
-<histogram name="Sync.SyncAuthError" enum="SyncAuthError">
- <summary>
- Counts the number of times sync clients have encountered an auth error and
- number of times auth errors are fixed.
- </summary>
-</histogram>
-
-<histogram name="SyncedNotification.Actions"
- enum="SyncedNotificationActionType">
- <summary>
- The actions taken on synced notifications, recorded every time they happen.
- This histogram will record every single event that happens separately.
- </summary>
-</histogram>
-
-<histogram name="Tab.AgeUponRestoreFromColdStart" units="minutes">
- <summary>
- Age (time since the last display in previous sessions) of a tab being
- restored due to the first tab switch after the browser cold start, recorded
- upon such restore. When the browser is started from cold, this metric is not
- recorded for the foreground, automatically restored tab, so that the metric
- tracks only the restores triggered by direct user decision to switch tabs.
- </summary>
-</histogram>
-
-<histogram name="Tab.PerceivedRestoreTime" units="ms">
- <summary>
- User-perceived load time for a successful tab restore, measured from the
- first time the user sees the tab being restored until the load completes.
- </summary>
-</histogram>
-
-<histogram name="Tab.RestoreResult" enum="TabRestoreResult">
- <summary>
- When the browser restores a tab, whether the load was successful. Loads can
- fail for instance when there is no connectivity.
- </summary>
-</histogram>
-
-<histogram name="Tab.RestoreTime" units="ms">
- <summary>Load time for a successful tab restore.</summary>
-</histogram>
-
-<histogram name="Tab.RestoreUserPersistence" enum="TabRestoreUserAction">
- <summary>
- When the browser restores a tab, whether the user waits for completion of
- the load or if the user gives up by switching to another tab or leaving
- Chrome.
- </summary>
-</histogram>
-
-<histogram name="Tab.StatusWhenDisplayed" enum="TabStatus">
- <summary>
- The status of a tab collected each time the tab is displayed on Android,
- including user switching to the tab and displays of newly created tabs, such
- as NTP or tabs opened to handle intents.
- </summary>
-</histogram>
-
-<histogram name="Tab.StatusWhenSwitchedBackToForeground" enum="TabStatus">
- <summary>
- The status of a tab collected each time the user switches to it on mobile.
- That does not include tabs being created at the time the user switches to
- them, such as NTP or tabs opened to handle intents.
- </summary>
-</histogram>
-
-<histogram name="Tab.StatusWhenSwitchedBackToForegroundDataProxyEnabled"
- enum="TabStatus">
- <summary>
- The status of a tab collected each time the user switches to it on mobile
- with the data reduction proxy enabled. This is populated identically, and in
- addition to Tab.StatusWhenSwitchedBackToForeground for any given tab
- switching event if the proxy is enabled.
- </summary>
-</histogram>
-
-<histogram name="Tab.SwitchedToForegroundAge" units="ms">
- <summary>Age (in ms) when the tab was switched to foreground.</summary>
-</histogram>
-
-<histogram name="Tab.SwitchedToForegroundLaunchedWithURL"
- enum="TabSwitchedToForegroundLaunchedWithURL">
- <summary>
- Each time a tab is brought to the foreground, this histogram indicates if
- chrome was launched without an URL (i.e., from the launcher), or with an URL
- (i.e., from another app).
- </summary>
-</histogram>
-
-<histogram name="Tab.SwitchedToForegroundMRURank">
- <summary>
- Rank in MRU order (0 being first) when the tab was switched to foreground.
- </summary>
-</histogram>
-
-<histogram name="Tab.SwitchedToForegroundNumTabs">
- <summary>Count of all tabs when a tab is switched.</summary>
-</histogram>
-
-<histogram name="Tab.SwitchedToForegroundRevisit"
- enum="TabSwitchedToForegroundRevisit">
- <summary>
- Each time a tab is brought to the foreground, this histogram indicates if
- this is the first viewing of the tab since Chrome was put into foreground,
- or if it was a return to a tab that has already been shown in this session.
- </summary>
-</histogram>
-
-<histogram name="Tabs.ForegroundTabAgeAtStartup" units="minutes">
- <summary>
- Age (time since the last display in previous sessions) of the foreground tab
- being restored on the browser cold start.
- </summary>
-</histogram>
-
-<histogram name="Tabs.SpeculativeRestoreApplicability"
- enum="SpeculativeRestoreApplicability">
- <summary>
- Applicability of speculative tab restore, recorded every time a tab is
- switched. This allows to estimate the fraction of tab restores experienced
- on mobile that can be mitigated using speculative restore. Options higher in
- the enum take precedence over the lower ones (i.e. low-memory tablet will be
- accounted as tablet).
- </summary>
-</histogram>
-
-<histogram name="Tabs.SpeculativeRestorePredictionAccuracy.SideSwipe"
- enum="SpeculativeRestorePredictionAccuracy">
- <summary>
- Accuracy of the tab switch predictions made when the user begins the side
- swipe gesture.
- </summary>
-</histogram>
-
-<histogram name="Tabs.SpeculativeRestorePredictionAccuracy.TabSwitcher"
- enum="SpeculativeRestorePredictionAccuracy">
- <summary>
- Accuracy of the tab switch predictions made when the user enters the tab
- switcher.
- </summary>
-</histogram>
-
-<histogram name="Tabs.SpeculativeRestoreTargetStatus"
- enum="SpeculativeRestoreTabStatus">
- <summary>
- Status of a tab recorded when the tab is targeted with speculative restore.
- </summary>
-</histogram>
-
-<histogram name="Tabs.SpeculativeRestoreTimeAhead.SideSwipe" units="ms">
- <summary>
- Time between starting the speculative load and actual tab switch for correct
- speculative load predictions made when the user begins the side swipe
- gesture.
- </summary>
-</histogram>
-
-<histogram name="Tabs.SpeculativeRestoreTimeAhead.TabSwitcher" units="ms">
- <summary>
- Time between starting the speculative load and actual tab switch for correct
- speculative load predictions made when the user enters the tab switcher.
- </summary>
-</histogram>
-
-<histogram name="TopSites.NumberOfApplyBlacklist">
- <summary>The number of times TopSitesImpl::ApplyBlacklist is called.</summary>
-</histogram>
-
-<histogram name="TopSites.NumberOfBlacklistedItems">
- <summary>
- The number of items in the user Most Visited blacklist every time
- TopSitesImpl::ApplyBlacklist is called.
- </summary>
-</histogram>
-
-<histogram name="Touchpad.Device" enum="TouchpadDeviceState">
- <summary>Tracks touchpad device state.</summary>
-</histogram>
-
-<histogram name="Touchpad.Metrics" enum="TouchpadProblemType">
- <summary>
- Tracks unusual CrOS touchpad operational states (e.g. running into the noisy
- ground issue). This is sampled at every touchpad event.
- </summary>
-</histogram>
-
-<histogram name="Touchpad.NaturalScroll.Changed" enum="BooleanEnabled">
- <summary>Tracks touchpad natural scroll setting changes by the user.</summary>
-</histogram>
-
-<histogram name="Touchpad.NaturalScroll.Started" enum="BooleanEnabled">
- <summary>Tracks touchpad natural scroll setting on startup.</summary>
-</histogram>
-
-<histogram name="Touchpad.PointerSensitivity.Changed" enum="PointerSensitivity">
- <summary>
- Tracks touchpad sensitivity setting changes by the user. This replaces the
- old Touchpad.Sensitivity.Changed metric.
- </summary>
-</histogram>
-
-<histogram name="Touchpad.PointerSensitivity.Started" enum="PointerSensitivity">
- <summary>
- Tracks touchpad sensitivity setting on startup. This replaces the old
- Touchpad.Sensitivity.Started metric.
- </summary>
-</histogram>
-
-<histogram name="Touchpad.Sensitivity.Changed" enum="PointerSensitivity">
- <obsolete>
- Deprecated as of 6/2013, replaced by Touchpad.PointerSensitivity.Changed.
- </obsolete>
- <summary>Tracks touchpad sensitivity setting changes by the user.</summary>
-</histogram>
-
-<histogram name="Touchpad.Sensitivity.Started" enum="PointerSensitivity">
- <obsolete>
- Deprecated as of 6/2013, replaced by Touchpad.PointerSensitivity.Started.
- </obsolete>
- <summary>Tracks touchpad sensitivity setting on startup.</summary>
-</histogram>
-
-<histogram name="Touchpad.TapDragging.Changed" enum="BooleanEnabled">
- <summary>Tracks touchpad TapDragging setting changes by the user.</summary>
-</histogram>
-
-<histogram name="Touchpad.TapDragging.Started" enum="BooleanEnabled">
- <summary>Tracks touchpad TapDragging setting on startup.</summary>
-</histogram>
-
-<histogram name="Touchpad.TapToClick.Changed" enum="BooleanEnabled">
- <summary>Tracks touchpad TapToClick setting changes by the user.</summary>
-</histogram>
-
-<histogram name="Touchpad.TapToClick.Started" enum="BooleanEnabled">
- <summary>Tracks touchpad TapToClick setting on startup.</summary>
-</histogram>
-
-<histogram name="Touchpad.ThreeFingerSwipe.Changed" enum="BooleanEnabled">
- <obsolete>
- Deprecated as of 7/2013.
- </obsolete>
-</histogram>
-
-<histogram name="Touchpad.ThreeFingerSwipe.Started" enum="BooleanEnabled">
- <obsolete>
- Deprecated as of 7/2013.
- </obsolete>
-</histogram>
-
-<histogram name="Touchscreen.ActionAfterDoubleTapNoDelay"
- enum="ActionAfterDoubleTap">
- <summary>
- On non-mobile sites, gesture taps are delayed to prevent double taps from
- sending a click event. This stat tracks the user's first action within 5
- seconds after a double tap gesture when the gesture tap delay is disabled.
- </summary>
-</histogram>
-
-<histogram name="Touchscreen.ActionAfterDoubleTapWithDelay"
- enum="ActionAfterDoubleTap">
- <summary>
- On non-mobile sites, gesture taps are delayed to prevent double taps from
- sending a click event. This stat tracks the user's first action within 5
- seconds after a double tap gesture when gesture tap events are delayed.
- </summary>
-</histogram>
-
-<histogram name="Touchscreen.SingleTapType" enum="TapDelayType">
- <summary>
- On non-mobile sites, gesture taps are delayed to prevent double taps from
- sending a click event. This stat counts the number of taps that are delayed
- by the double-tap delay versus those that are sent immediately on mobile
- sites.
- </summary>
-</histogram>
-
-<histogram name="Translate.AlwaysTranslateLang">
- <summary>
- The number of times the always translate option was selected in the
- translate infobar.
- </summary>
-</histogram>
-
-<histogram name="Translate.CaptureText" units="milliseconds">
- <summary>
- The time spent capturing plain text from the DOM. This is reported by
- ChromeRenderViewObserver when a page is loaded completely.
- </summary>
-</histogram>
-
-<histogram name="Translate.ContentLanguage" enum="TranslateLanguage">
- <summary>
- A page may provide a Content-Language HTTP header or a META tag. For each
- page load, measures whether the Content-Language header exists and is valid.
- </summary>
-</histogram>
-
-<histogram name="Translate.DeclineTranslate">
- <summary>
- The number of times the &quot;Nope&quot; (don't translate) or the infobar's
- X button was clicked in the translate infobar.
- </summary>
-</histogram>
-
-<histogram name="Translate.DeclineTranslateCloseInfobar">
- <summary>
- The number of times the translate infobar was closed by clicking the X
- button without the user translating the page.
- </summary>
-</histogram>
-
-<histogram name="Translate.DeclineTranslateDismissUI">
- <summary>
- The number of times the translate UI was closed without translating in the
- way that the user doesn't deny translating explicityly, like pressing 'Nope'
- button. This is counted on both the infobar and the bubble UI. We are
- comparing this on infobar to that on bubble by A/B testing and expecting
- that the user will click 'Nope' button on bubble less times than infobar. We
- won't delete this histogram after the experiment.
- </summary>
-</histogram>
-
-<histogram name="Translate.HtmlLang" enum="TranslateLanguage">
- <summary>
- A page may provide a lang attribute in html tag. For each page load,
- measures whether the lang attribute exists and is valid.
- </summary>
-</histogram>
-
-<histogram name="Translate.InitiationStatus" enum="TranslateInitiationStatus">
- <obsolete>
- Deprecated as of 11/2013, and replaced by Translate.InitiationStatus.v2.
- </obsolete>
- <summary>
- The reason why Chrome decided to perform the next action (e.g., to show
- infobar, to translate a page without any prompting, and so on) when Chrome
- Translate is ready to translate a page.
- </summary>
-</histogram>
-
-<histogram name="Translate.InitiationStatus.v2"
- enum="TranslateInitiationStatus">
- <summary>
- The reason why Chrome decided to perform the next action (e.g., to show
- infobar, to translate a page without any prompting, and so on) when Chrome
- Translate is ready to translate a page.
- </summary>
-</histogram>
-
-<histogram name="Translate.LanguageVerification"
- enum="TranslateLanguageVerification">
- <summary>
- For each page load, measures whether the provided Content-Language header
- matches the language determined by CLD. Beyond directly matching or
- mismatching the Content-Language header, CLD can complement the
- Content-Language. For example, suppose the Content-Language header
- specifies 'zh' (general Chinese), a language code that the Translate server
- does not support. In this case, CLD can detect a subcode like '-TW' or
- '-CN', resulting in language codes 'zh-TW' and 'zh-CN', which the Translate
- server supports. This is referred to as &quot;complementing a language
- subcode&quot;.
- </summary>
-</histogram>
-
-<histogram name="Translate.LocalesOnDisabledByPrefs" enum="LanguageCode">
- <summary>
- Logs the user locale when the Translate feature is disabled by the user.
- This is recorded each time a webpage is loaded and prefs for translation is
- checked. This allows us to investigate the correlation between the user
- locale and the usage rates of the Translate.
- </summary>
-</histogram>
-
-<histogram name="Translate.ModifyOriginalLang">
- <summary>
- The number of times the original language in the translate infobar has been
- changed.
- </summary>
-</histogram>
-
-<histogram name="Translate.ModifyTargetLang">
- <summary>
- The number of times the target language in the translate infobar has been
- changed.
- </summary>
-</histogram>
-
-<histogram name="Translate.NeverTranslateLang">
- <summary>
- The number of times the never translate option was selected in the translate
- infobar.
- </summary>
-</histogram>
-
-<histogram name="Translate.NeverTranslateSite">
- <summary>
- The number of times the never translate site was selected in the translate
- infobar.
- </summary>
-</histogram>
-
-<histogram name="Translate.PageScheme" enum="TranslateScheme">
- <summary>Counts translation target page schemes.</summary>
-</histogram>
-
-<histogram name="Translate.ReportLanguageDetectionError">
- <summary>
- The number of times the &quot;report this error&quot; of options menu is
- selected in the translate infobar.
- </summary>
-</histogram>
-
-<histogram name="Translate.RevertTranslation">
- <summary>
- The number of times the show original button was clicked in the translate
- infobar.
- </summary>
-</histogram>
-
-<histogram name="Translate.ServerReportedUnsupportedLanguage">
- <obsolete>
- Deprecated 5/2013 by Translate.UndisplayableLanguage
- </obsolete>
- <summary>
- The number of times the detected language is not supported by Translate
- Element.
- </summary>
-</histogram>
-
-<histogram name="Translate.ShowBeforeTranslateInfobar">
- <obsolete>
- Deprecated 7/2010. No longer tracked.
- </obsolete>
- <summary>
- The number of times an infobar proposing to translate a page has been shown.
- </summary>
-</histogram>
-
-<histogram name="Translate.ShowErrorInfobar" enum="TranslateError">
- <summary>
- Chrome Translate shows an error infobar when an error happens on translation
- and the infobar message depends on what kind of error happens. This metric
- counts how often each error message is shown.
- </summary>
-</histogram>
-
-<histogram name="Translate.ShowErrorUI" enum="TranslateError">
- <summary>
- Chrome Translate shows an error UI (infobar or bubble) when an error happens
- on translation and the UI message depends on what kind of error happens.
- This metric counts how often each error message is shown.
- </summary>
-</histogram>
-
-<histogram name="Translate.SimilarLanguageMatch" enum="BooleanMatched">
- <summary>
- This metrics is logged whenever a page is loaded. The logged value is
- &quot;Mathced&quot; when the CLD-detected language differs from the page
- language code , and the two languages are such similar languages. In that
- case, Chrome ignore the CLD-determined language and instead uses the page
- language code. The page language code is decided by Content-Language and
- HTML lang attribute.
- </summary>
-</histogram>
-
-<histogram name="Translate.TimeToBeReady" units="milliseconds">
- <summary>
- The time from injecting scripts for Chrome Translate to being ready to
- perform translation.
- </summary>
-</histogram>
-
-<histogram name="Translate.TimeToLoad" units="milliseconds">
- <summary>
- The time from injecting scripts for Chrome Translate to the finishing loads
- of all depending libraries.
- </summary>
-</histogram>
-
-<histogram name="Translate.TimeToTranslate" units="milliseconds">
- <summary>The time from starting translation to the completion.</summary>
-</histogram>
-
-<histogram name="Translate.Translate">
- <summary>
- The number of times the translate button was clicked in the translate
- infobar.
- </summary>
-</histogram>
-
-<histogram name="Translate.UndisplayableLanguage" enum="LanguageCode">
- <summary>
- Logs an undisplayable language included in the language list sent by the
- Translate server. The Translate server sends the list each time the user
- runs Chrome. This metrics tells us that there is a language which UI should
- support but doesn't.
- </summary>
-</histogram>
-
-<histogram name="Translate.UnsupportedLanguageAtInitiation" enum="LanguageCode">
- <summary>
- Logs an unsupported source language detected during initiation of the
- Translate feature. This is reported when the language detector successfully
- detects the language of the webpage, but the language is not supported by
- the translation server because it is too minor. This metric allows us to
- assess how important the unsupported language is for Google translate.
- </summary>
-</histogram>
-
-<histogram name="Translate.UserActionDuration" units="milliseconds">
- <summary>
- The time from a page content language being determined to user requesting
- Chrome Translate.
- </summary>
-</histogram>
-
-<histogram name="TryScroll.SlowScroll" enum="ScrollThread">
- <summary>Whether the scroll is executed on main thread.</summary>
-</histogram>
-
-<histogram name="UMA.CollectExternalEventsTime" units="milliseconds">
- <summary>
- The time to run the external metrics collection task (Chrome OS).
- </summary>
-</histogram>
-
-<histogram name="UMA.Discarded Log Events">
- <summary>
- The number of events discarded at log transmission time because the event
- count was already too large.
- </summary>
-</histogram>
-
-<histogram name="UMA.FieldTrialsEnabledBenchmarking" enum="BooleanUsage">
- <summary>
- Log whether the --enable-benchmarking flag was set, which causes field
- trials to only use the default group.
- </summary>
-</histogram>
-
-<histogram name="UMA.GeneratedLowEntropySource" enum="BooleanSuccess">
- <summary>
- For each attempt to generate the low entropy source, log whether or not the
- load required generating a new low entropy source.
- </summary>
-</histogram>
-
-<histogram name="UMA.InitSequence" enum="UmaInitSequence">
- <summary>
- Logged during MetricsService initialization whether the init task or the
- initial log timer completed first. The expectation is the vast majority of
- the time, the init task should complete first. If metrics show otherwise,
- then it may indicate there's a bug in the MetricsService init sequence and
- that it should be investigated.
- </summary>
-</histogram>
-
-<histogram name="UMA.Large Accumulated Log Not Persisted" units="bytes">
- <summary>
- Number of bytes in an excessively large log that was discarded at shutdown
- instead of being saved to disk to retry during next chrome run.
- </summary>
-</histogram>
-
-<histogram name="UMA.Large Rejected Log was Discarded" units="bytes">
- <summary>
- Number of bytes in a log was was rejected by server, and then discarded.
- </summary>
-</histogram>
-
-<histogram name="UMA.LoadLogsTime" units="milliseconds">
- <summary>
- The time spent to load (de-serialize) unsent logs from local state, recorded
- during the MetricsService startup sequence.
- </summary>
-</histogram>
-
-<histogram name="UMA.LogLoadComplete called">
- <summary>
- Simple counter of the number of times LogLoadComplete was called (bug
- demonstration, as we're called more often than once per page load :-/ )
- </summary>
-</histogram>
-
-<histogram name="UMA.LowEntropySourceValue">
- <summary>
- Distribution of the low entropy source value used for field trial
- randomization, recorded on startup.
- </summary>
-</histogram>
-
-<histogram name="UMA.Perf.GetData" enum="GetPerfDataOutcome">
- <summary>
- A count of successes and various failure modes related to collecting and
- processing performance data obtained through &quot;perf&quot; on ChromeOS.
- </summary>
-</histogram>
-
-<histogram name="UMA.ProtoCompressionRatio" units="%">
- <summary>
- Compression ratio of the serialized protobuf that will be uploaded to the
- UMA server. This serialized protobuf is compressed using gzip.
- </summary>
-</histogram>
-
-<histogram name="UMA.ProtoGzipped" enum="Boolean">
- <obsolete>
- Deprecated as of Sep, 2013. Gzipping protobufs is now the default.
- </obsolete>
- <summary>Was the UMA protobuf uploaded earlier compressed or not.</summary>
-</histogram>
-
-<histogram name="UMA.ProtoGzippedKBSaved" units="KB">
- <summary>
- Kilobytes saved from gzipping the protobufs before uploading them.
- </summary>
-</histogram>
-
-<histogram name="UMA.StoreLogsTime" units="milliseconds">
- <summary>
- The time spent to store unsent logs to local state, which is done
- periodically and also during start up if there was an initial stability log.
- </summary>
-</histogram>
-
-<histogram name="UMA.Unacceptable_Log_Discarded">
- <obsolete>
- Deprecated as of May, 2012 (i.e. Chrome 21+). Replaced by the
- UMA.UploadResponseStatus.XML and UMA.UploadResponseStatus.Protobuf
- histograms.
- </obsolete>
- <summary>The server returned a 400 code, and we discarded a log.</summary>
- <details>
- This tends to indicate that a syntax error is present in a log, such as
- would appear when a bogus XML tag is included, or the XML is not balanced
- and well structured.
- </details>
-</histogram>
-
-<histogram name="UMA.UploadCreation" enum="BooleanSuccess">
- <summary>
- For each attempted UMA upload, log whether the upload was successfully
- constructed. An upload might fail to be constructed, for example, if we try
- to upload before the system is fully initialized; or if serialization of the
- data fails.
- </summary>
-</histogram>
-
-<histogram name="UMA.UploadResponseStatus.Protobuf"
- enum="UmaUploadResponseStatus">
- <summary>
- For each upload to the protocol buffer (v2) UMA server, log whether the
- upload was successful, or whether there was an error.
- </summary>
-</histogram>
-
-<histogram name="UMA.UploadResponseStatus.XML" enum="UmaUploadResponseStatus">
- <summary>
- For each upload to the XML (v1) UMA server, log whether the upload was
- successful, or whether there was an error.
- </summary>
-</histogram>
-
-<histogram name="UMA.UsedResetVariationsFlag" enum="BooleanUsage">
- <summary>
- Log whether the --reset-variation-state flag was set before the low entropy
- source was requested.
- </summary>
-</histogram>
-
-<histogram name="UMA.XMLNodeDumpTime" units="milliseconds">
- <summary>
- The time spent in converting the XML tree into a character buffer when
- closing a metrics log (Chrome OS).
- </summary>
-</histogram>
-
-<histogram name="UMA.XMLWriterDestructionTime" units="milliseconds">
- <summary>
- The time spent in freeing the XML writer and tree when closing a metrics log
- (Chrome OS).
- </summary>
-</histogram>
-
-<histogram name="Uptime.ChromeExecToLoginPromptVisibleAfterLogout" units="ms">
- <summary>
- Measures the time elapsed on Chrome OS between when Chrome is started, and
- when the login prompt is again visible after a logout. This statistic is
- only collected when preceeded by a logout.
- </summary>
-</histogram>
-
-<histogram name="Uptime.LoginPromptSetupTimeAfterLogout" units="ms">
- <summary>
- Measures the time elapsed on Chrome OS for setting up for a login after a
- logout. More specifically, it is the time between when the Cryptohome is
- unmounted (the last step in the logout process) and when the login prompt is
- again visible after a logout.
- </summary>
-</histogram>
-
-<histogram name="Uptime.Logout" units="ms">
- <summary>
- Measures the time elapsed on Chrome OS when performing a logout. More
- specifically, it is the time between when a logout is initiated and when the
- Cryptohome is unmounted, signaling the last step in the logout process. This
- statistic is not collected when the logout is part of a restart or shutdown.
- </summary>
-</histogram>
-
-<histogram name="Uptime.LogoutToLoginPromptVisible" units="ms">
- <summary>
- Measures the time elapsed on Chrome OS between initiating a logout and the
- next time the login prompt is visible again. This statistic is not
- collected if the machine is shutdown between the logout initiation and the
- prompt becoming visible.
- </summary>
-</histogram>
-
-<histogram name="Uptime.LogoutToUIStopAfterLogout" units="ms">
- <summary>
- Measures the time elapsed on Chrome OS between when a logout is initiated
- and the UI has stopped (and Chrome has exited) during the logout process.
- This statistic is not collected if the logout is part of a restart or
- shutdown.
- </summary>
-</histogram>
-
-<histogram name="Uptime.ProcessesTerminatedToXTerminatedAfterLogout" units="ms">
- <summary>
- Measures the time elapsed on Chrome OS between when all user-associated
- processes (including the X server) have been terminated during the logout
- process. This statistic is not collected if the logout is part of a restart
- or shutdown.
- </summary>
-</histogram>
-
-<histogram name="Uptime.UIStopToProcessesTerminatedAfterLogout" units="ms">
- <summary>
- Measures the time elapsed on Chrome OS between when the UI has stopped
- (Chrome has exited), and when all other associated processes have been
- terminated during the logout process. This statistic is not collected if the
- logout is part of a restart or shutdown.
- </summary>
-</histogram>
-
-<histogram name="Uptime.XTerminatedToChromeExecAfterLogout" units="ms">
- <summary>
- Measures the time elapsed on Chrome OS between when the X server has been
- terminated from a previous logout and when Chrome is started again to show
- the login screen.
- </summary>
-</histogram>
-
-<histogram name="UserImage.ChangeChoice" enum="ChromeOSUserImageId">
- <summary>
- Distribution of the default images that users choose in Change Picture
- dialog (Chrome OS). One sample is taken each time the user changes picture.
- </summary>
-</histogram>
-
-<histogram name="UserImage.FirstTimeChoice" enum="ChromeOSUserImageId">
- <summary>
- Distribution of the default images chosen on user image screen during
- out-of-the-box experience (Chrome OS). One sample is taken each time the
- user confirms the choice by clicking OK button.
- </summary>
-</histogram>
-
-<histogram name="UserImage.LoggedIn" enum="ChromeOSUserImageId">
- <summary>
- Distribution of the default images that existing users login with (Chrome
- OS). One sample is taken each time the user logs in.
- </summary>
-</histogram>
-
-<histogram name="UserImage.ProfileDownloadResult"
- enum="ProfileImageDownloadResult">
- <summary>
- Profile image download result for UserManager (either on behalf of the
- Change Picture prefs page, OOBE or scheduled refresh after user login).
- </summary>
-</histogram>
-
-<histogram name="UserImage.ProfileDownloadTime" units="milliseconds">
- <summary>The time it took to download user's profile picture.</summary>
-</histogram>
-
-<histogram name="UserImage.ScreenIsShownTime" units="milliseconds">
- <summary>
- Time histogram of the &quot;Choose Picture&quot; OOBE screen display delay.
- </summary>
-</histogram>
-
-<histogram name="UserManager.LoginUserType" enum="UserType">
- <summary>
- The number of users of different types that log in to the system (Chrome
- OS).
- </summary>
-</histogram>
-
-<histogram name="UserManager.LogoutToLoginDelay" units="seconds">
- <summary>
- The time between one regular user logging out and a different regular user
- logging in (Chrome OS). Delays above thirty minutes or which span system
- reboots or non-regular-user logins are not reported.
- </summary>
-</histogram>
-
-<histogram name="Variations.DisabledNoEntropyProvider" enum="BooleanHit">
- <obsolete>
- Deprecated 1/2013. No longer tracked.
- </obsolete>
- <summary>
- A count of the number of times we hit the code where a field trial is
- disabled because no entropy provider was provided.
- </summary>
-</histogram>
-
-<histogram name="Variations.FailedRequestErrorCode" enum="NetErrorCodes">
- <summary>
- The counts of network error codes encountered by VariationsService when an
- attempt to fetch a variations seed from the server fails.
- </summary>
-</histogram>
-
-<histogram name="Variations.FetchNotModifiedLatency" units="milliseconds">
- <summary>
- The latency of a VariationsService seed fetch that results in a not modified
- response.
- </summary>
-</histogram>
-
-<histogram name="Variations.FetchOtherLatency" units="milliseconds">
- <summary>
- The latency of a VariationsService seed fetch that results in neither a
- success nor not modified response.
- </summary>
-</histogram>
-
-<histogram name="Variations.FetchSuccessLatency" units="milliseconds">
- <summary>
- The latency of a VariationsService seed fetch that results in a success
- response.
- </summary>
-</histogram>
-
-<histogram name="Variations.HeaderConstructionTime" units="microseconds">
- <summary>How long it took to create the X-Client-Data header.</summary>
-</histogram>
-
-<histogram name="Variations.NetworkAvailability" enum="BooleanSuccess">
- <obsolete>
- Deprecated 9/2012. No longer tracked.
- </obsolete>
- <summary>
- Whether or not the network was available when requested by the
- VariationsService.
- </summary>
-</histogram>
-
-<histogram name="Variations.ResourceRequestsAllowed"
- enum="VariationsResourceRequestsAllowedState">
- <summary>
- Counts the number of times the VariationsService is allowed or not allowed
- to make a request due to the ResourceRequestAllowedNotifier.
- </summary>
-</histogram>
-
-<histogram name="Variations.SeedEmpty" enum="VariationsSeedEmpty">
- <summary>
- Records whether the variations seed in local state is empty (does not exist)
- on startup.
- </summary>
-</histogram>
-
-<histogram name="Variations.SeedFetchResponseCode">
- <summary>
- The counts of HTTP response codes encountered by VariationsService when
- attempting to fetch a variations seed from the server.
- </summary>
-</histogram>
-
-<histogram name="Variations.SeedFreshness" units="minutes">
- <summary>
- The time interval between when the Variations seed was last downloaded and
- when it was used.
- </summary>
-</histogram>
-
-<histogram name="Variations.ServerStudyExpiredUniformity1Percent"
- enum="BooleanExpired">
- <obsolete>
- Deprecated 11/2012. No longer tracked.
- </obsolete>
- <summary>
- Whether or not the 1-Percent uniformity trial from the Variations server was
- expired when loaded.
- </summary>
-</histogram>
-
-<histogram name="Variations.TimeSinceLastFetchAttempt" units="minutes">
- <summary>
- The time since the previous attempt to fetch the variations seed within the
- same session, with 0 indicating that this is the first attempt. Recorded
- when a variations seed fetch is attempted by the VariationsService.
- </summary>
-</histogram>
-
-<histogram name="Variations.UniformityTrialExpired" enum="BooleanHit">
- <obsolete>
- Deprecated 1/2013. No longer tracked.
- </obsolete>
- <summary>
- A count of the number of times we hit the code where the
- UMA-Uniformity-Trial-1-Percent field trial is disabled as a result of the
- expiration check.
- </summary>
-</histogram>
-
-<histogram name="Variations.UniformityTrialGroupNotActive"
- enum="UniformityTrialGroupNotActive">
- <obsolete>
- Deprecated 1/2013. No longer tracked.
- </obsolete>
- <summary>
- Tracks whether the UMA-Uniformity-Trial-1-Percent field trial was not active
- and which factors contributed to it.
- </summary>
-</histogram>
-
-<histogram name="VirtualKeyboard.KeyboardControlEvent"
- enum="KeyboardControlEvent">
- <summary>
- A count of various control events that can occur on the virtual keyboard,
- such as showing and hiding.
- </summary>
-</histogram>
-
-<histogram name="VirtualKeyboard.KeystrokesBetweenBackspace">
- <summary>
- Counts the number of keys typed by the virtual keyboard between each
- backspace. This metric provides a rough approximation of an error rate for
- the virtual keyboard.
- </summary>
-</histogram>
-
-<histogram name="Wallet.ApiCallDuration.AcceptLegalDocuments" units="ms">
- <summary>
- Measures the time taken by Google Online Wallet server's accept legal
- document API call.
- </summary>
-</histogram>
-
-<histogram name="Wallet.ApiCallDuration.AuthenticateInstrument" units="ms">
- <summary>
- Measures the time taken by Google Online Wallet server's authenticate
- instrument API call.
- </summary>
-</histogram>
-
-<histogram name="Wallet.ApiCallDuration.GetFullWallet" units="ms">
- <summary>
- Measures the time taken by Google Online Wallet server's get full wallet API
- call.
- </summary>
-</histogram>
-
-<histogram name="Wallet.ApiCallDuration.GetWalletItems" units="ms">
- <summary>
- Measures the time taken by Google Online Wallet server's get wallet items
- API call.
- </summary>
-</histogram>
-
-<histogram name="Wallet.ApiCallDuration.SaveAddress" units="ms">
- <obsolete>
- Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet.
- </obsolete>
- <summary>
- Measures the time taken by Google Online Wallet server's save address API
- call.
- </summary>
-</histogram>
-
-<histogram name="Wallet.ApiCallDuration.SaveInstrument" units="ms">
- <obsolete>
- Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet.
- </obsolete>
- <summary>
- Measures the time taken by Google Online Wallet server's save instrument API
- call.
- </summary>
-</histogram>
-
-<histogram name="Wallet.ApiCallDuration.SaveInstrumentAndAddress" units="ms">
- <obsolete>
- Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet.
- </obsolete>
- <summary>
- Measures the time taken by Google Online Wallet server's save instument and
- address API call.
- </summary>
-</histogram>
-
-<histogram name="Wallet.ApiCallDuration.SaveToWallet" units="ms">
- <summary>
- Measures the time taken by Google Online Wallet server's save to wallet API
- call.
- </summary>
-</histogram>
-
-<histogram name="Wallet.ApiCallDuration.SendStatus" units="ms">
- <summary>
- Measures the time taken by Google Online Wallet server's send status API
- call.
- </summary>
-</histogram>
-
-<histogram name="Wallet.ApiCallDuration.UnknownApiCall" units="ms">
- <summary>
- Measures the time taken by Google Online Wallet server's unknown API calls.
- </summary>
-</histogram>
-
-<histogram name="Wallet.ApiCallDuration.UpdateAddress" units="ms">
- <obsolete>
- Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet.
- </obsolete>
- <summary>
- Measures the time taken by Google Online Wallet server's update address API
- call.
- </summary>
-</histogram>
-
-<histogram name="Wallet.ApiCallDuration.UpdateInstrument" units="ms">
- <obsolete>
- Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet.
- </obsolete>
- <summary>
- Measures the time taken by Google Online Wallet server's update instument
- API call.
- </summary>
-</histogram>
-
-<histogram name="Wallet.MalformedResponse" enum="WalletApiCall">
- <summary>
- Counts the number of times each Wallet API failed due to being unable to
- parse the response.
- </summary>
-</histogram>
-
-<histogram name="Wallet.ResponseCode" enum="HttpResponseCode">
- <summary>HTTP response codes seen by Wallet client.</summary>
-</histogram>
-
-<histogram name="WebCore.Animation.CSSProperties" enum="MappedCSSProperties">
- <summary>
- Counts the number of times each CSS property is animated. There is no limit
- on the number of times each property is counted per page view -- a property
- that is animated multiple times during a single page view is counted each
- time it animates.
- </summary>
-</histogram>
-
-<histogram name="WebCore.FeatureObserver" enum="FeatureObserver">
- <summary>
- Count of how many instances of WebCore::Page use various features. Each
- WebCore::Page instance has a WebCore::UseCounter instance. It records and
- reports feature usage (e.g. via UseCounter::count() method).
- </summary>
-</histogram>
-
-<histogram name="WebCore.FeatureObserver.CSSProperties"
- enum="MappedCSSProperties">
- <summary>
- Records usage of CSS properties used on a page, either statically or
- dynamically, from the time the page is initialised to when it is closed or
- navigated away from. Each property is counted at most once per page per
- view.
- </summary>
- <details>
- Every time a CSS property is parsed on a page, that property is recorded as
- having been used. The histogram is updated with this data whenever a page is
- closed, or a page navigation happens. Each histogram bucket corresponds to a
- CSS property (eg width, border-radius). The exception is the bucket numbered
- '1' - this counts the number of pages that CSS properties were counted on.
-
- These numbers give the percentage of pages that use a CSS property. For
- example, if the 'border-radius' histogram bucket has a count of 250, and the
- page count bucket (i.e. bucket number 1) has a count of 1000 - this means
- that 1000 pages were recorded, and border-radius was used on 25% of those
- pages.
-
- Internally, each WebCore::Page has a WebCore::UseCounter instance, with
- booleans recording use of each CSS property - one boolean per property. Upon
- destruction of the WebCore::Page (e.g. by the user closing the tab), or a
- page navigation happening, the histogram is updated. For each boolean that
- is set to True, the corresponding histogram bucket for that CSS property is
- incremented by 1. The page count bucket (i.e. bucket number 1) is always
- incremented by 1 on each histogram update.
- </details>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.BackingStore.ConsistencyError"
- enum="IDBLevelDBBackingStoreInternalErrorType">
- <summary>
- Methods that encountered consistency errors. Such errors probably point to a
- bug in our code.
- </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.BackingStore.InternalError"
- enum="IDBLevelDBBackingStoreInternalErrorType">
- <obsolete>
- As of chrome 26, use {Consistency, Read, Write}Error instead.
- </obsolete>
- <summary>
- Count of internal IndexedDB errors (data corruption, I/O errors, etc)
- encountered.
- </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.BackingStore.OpenStatus"
- enum="IDBLevelDBBackingStoreOpenResult">
- <summary>
- Count of the different success and failure modes when opening an IndexedDB
- backing store - clean open, successful open with recovery, failed recovery,
- etc. Includes all hosts.
- </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.BackingStore.OpenStatus.Docs"
- enum="IDBLevelDBBackingStoreOpenResult">
- <summary>
- Count of the different success and failure modes when opening an IndexedDB
- backing store - clean open, successful open with recovery, failed recovery,
- etc. Only for docs.google.com.
- </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.BackingStore.OverlyLargeOriginLength"
- units="characters">
- <summary>
- Length of leveldb directories that cause paths to not fit in the filesystem,
- either because the individual component is too long or the overall path is
- larger than MAX_PATH.
- </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.BackingStore.ReadError"
- enum="IDBLevelDBBackingStoreInternalErrorType">
- <summary>
- Methods that encountered leveldb errors while trying to read from disk.
- </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.BackingStore.WriteError"
- enum="IDBLevelDBBackingStoreInternalErrorType">
- <summary>
- Methods that encountered leveldb errors while trying to write to disk.
- </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.FrontEndAPICalls"
- enum="IndexedDatabaseMethods">
- <summary>
- Count total number of front end API calls of IndexedDB methods.
- </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDB.FreeDiskSpaceFailure"
- enum="LevelDBErrorCount">
- <summary>
- Count of how many times LevelDBDatabase got an error trying to check free
- disk space.
- </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDB.OpenFailureFreeDiskSpace" units="Kb">
- <summary>
- Amount of free disk space on the partition/volume/etc where LevelDB failed
- to open.
- </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDB.OpenSuccessFreeDiskSpace" units="Kb">
- <summary>
- Amount of free disk space on the partition/volume/etc where LevelDB was
- successfully opened.
- </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBOpenErrors" enum="LevelDBErrorTypes">
- <summary>
- Error classes returned by LevelDB when it failed to open a database.
- </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBOpenErrors.Corruption"
- enum="LevelDBCorruptionTypes">
- Types of corruption that LevelDB encounters when opening a database.
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBOpenErrors.EnvMethod"
- enum="LevelDBIOErrorMethods">
- <summary>
- LevelDBEnv methods that generated IO errors when opening a database.
- </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBOpenErrors.Errno"
- enum="OSAgnosticErrno">
- <summary>
- Errno errors encountered by a single LevelDBEnv method when opening an
- IndexedDB instance.
- </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBOpenErrors.PFE"
- enum="PlatformFileError">
- <summary>
- PlatformFileErrors encountered by a single LevelDBEnv method when opening an
- IndexedDB instance.
- </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBReadErrors" enum="LevelDBErrorTypes">
- <summary>
- Error classes returned by LevelDB when it failed to read a database.
- </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBReadErrors.Corruption"
- enum="LevelDBCorruptionTypes">
- Types of corruption that LevelDB encounters when reading a database.
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBReadErrors.EnvMethod"
- enum="LevelDBIOErrorMethods">
- <summary>
- LevelDBEnv methods that generated IO errors when reading a database.
- </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBReadErrors.Errno"
- enum="OSAgnosticErrno">
- <summary>
- Errno errors encountered by a single LevelDBEnv method when reading an
- IndexedDB instance.
- </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBReadErrors.PFE"
- enum="PlatformFileError">
- <summary>
- PlatformFileErrors encountered by a single LevelDBEnv method when opening an
- IndexedDB instance.
- </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBWriteErrors" enum="LevelDBErrorTypes">
- <summary>
- Error classes returned by LevelDB when it failed to write to a database.
- </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBWriteErrors.Corruption"
- enum="LevelDBCorruptionTypes">
- Types of corruption returned by LevelDB when it failed to write to a database.
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBWriteErrors.EnvMethod"
- enum="LevelDBIOErrorMethods">
- <summary>
- LevelDBEnv methods that generated IO errors when writing to a database.
- </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBWriteErrors.Errno"
- enum="OSAgnosticErrno">
- <summary>
- Errno errors encountered by a single LevelDBEnv method when writing to an
- IndexedDB instance.
- </summary>
-</histogram>
-
-<histogram name="WebCore.IndexedDB.LevelDBWriteErrors.PFE"
- enum="PlatformFileError">
- <summary>
- PlatformFileErrors encountered by a single LevelDBEnv method when writing to
- an IndexedDB instance.
- </summary>
-</histogram>
-
-<histogram name="WebCore.PreloadDelayMs" units="milliseconds">
- <summary>
- The delay between when the preload scanner discovers a resource on the
- parser thread and when the preload request is issued on the main thread.
- </summary>
-</histogram>
-
-<histogram name="WebCore.ResourceFetcher.ActionUponResourceRequest"
- enum="ActionUponResourceRequest">
- <summary>
- The resulting action (e.g. load resource, use resource from in-memory
- cache...) upon a resource request.
- </summary>
-</histogram>
-
-<histogram name="WebCore.ResourceFetcher.ResourceHasClientUponCacheHit"
- enum="ResourceHasClient">
- <summary>
- Whether the resource in the cache is being used by at least one client (live
- resource) or not (dead resource) upon a cache hit.
- </summary>
-</histogram>
-
-<histogram name="WebCore.ResourceFetcher.ResourceTypeUponCacheHit"
- enum="ResourceType">
- <summary>
- The type of the resource (e.g. image, script...) upon a cache hit.
- </summary>
-</histogram>
-
-<histogram name="WebCore.V8DOMWindowShell.createContext.IsolatedWorld"
- units="milliseconds">
- <summary>
- Duration of time taken to create a V8 Context for an isolated world.
- </summary>
-</histogram>
-
-<histogram name="WebCore.V8DOMWindowShell.createContext.MainWorld"
- units="milliseconds">
- <summary>
- Duration of time taken to create a V8 Context for the main world.
- </summary>
-</histogram>
-
-<histogram name="WebCore.WebSocket.HandshakeResult"
- enum="WebSocketHandshakeResult">
- <summary>
- Count the number of WebSocket handshake for each result. Use this histogram
- as a baseline for investigating feature usage counters.
- </summary>
-</histogram>
-
-<histogram name="WebCore.WebSocket.PerMessageDeflateContextTakeOverMode"
- enum="WebSocketPerMessageDeflateContextTakeOverMode">
- <summary>
- Count the number of WebSockets that accepted permessage-deflate extension
- for each context take over mode.
- </summary>
-</histogram>
-
-<histogram name="WebCore.XHR.send.ArrayBufferOrView"
- enum="XMLHttpRequestSendArrayBufferOrView">
- <summary>
- Count the number of XHR.send() calls for each argument type to see when we
- can deprecate the ArrayBuffer type support.
- </summary>
-</histogram>
-
-<histogram name="WebFont.CacheHit" enum="WebFontCacheHit">
- <summary>
- Recorded upon web fonts load. Counts the number of times web font is loaded
- from cache (disk cache or memory cache), fetched over network, or served
- from data URL.
- </summary>
-</histogram>
-
-<histogram name="WebFont.DownloadTime.0.Under10KB" units="milliseconds">
- <summary>
- The time it takes for a webfont download to finish, for webfonts of under
- 10KB.
- </summary>
-</histogram>
-
-<histogram name="WebFont.DownloadTime.1.10KBTo50KB" units="milliseconds">
- <summary>
- The time it takes for a webfont download to finish, for webfonts of
- 10KB-50KB.
- </summary>
-</histogram>
-
-<histogram name="WebFont.DownloadTime.2.50KBTo100KB" units="milliseconds">
- <summary>
- The time it takes for a webfont download to finish, for webfonts of
- 50KB-100KB.
- </summary>
-</histogram>
-
-<histogram name="WebFont.DownloadTime.3.100KBTo1MB" units="milliseconds">
- <summary>
- The time it takes for a webfont download to finish, for webfonts of
- 100KB-1MB.
- </summary>
-</histogram>
-
-<histogram name="WebFont.DownloadTime.4.Over1MB" units="milliseconds">
- <summary>
- The time it takes for a webfont download to finish, for webfonts of over
- 1MB.
- </summary>
-</histogram>
-
-<histogram name="WebFont.DownloadTime.LoadError" units="milliseconds">
- <summary>
- The time taken for a webfont download that failed. Includes aborted
- requests.
- </summary>
-</histogram>
-
-<histogram name="WebFont.LayoutLatency" units="milliseconds">
- <obsolete>
- Renamed to WebFont.StyleRecalcToDownloadLatency for clarity.
- </obsolete>
- <summary>
- The time from when the webfont was referenced by a calculated style for the
- first time to the start of the font download.
- </summary>
-</histogram>
-
-<histogram name="WebFont.LoadTime.0.Under10KB" units="milliseconds">
- <obsolete>
- Deprecated as of 8/2013, replaced by WebFont.DownloadTime.0.Under10KB.
- </obsolete>
- <summary>
- The time it takes for a webfont download to finish, for webfonts of under
- 10KB.
- </summary>
-</histogram>
-
-<histogram name="WebFont.LoadTime.1.10KBTo50KB" units="milliseconds">
- <obsolete>
- Deprecated as of 8/2013, replaced by WebFont.DownloadTime.1.10KBTo50KB.
- </obsolete>
- <summary>
- The time it takes for a webfont download to finish, for webfonts of
- 10KB-50KB.
- </summary>
-</histogram>
-
-<histogram name="WebFont.LoadTime.2.50KBTo100KB" units="milliseconds">
- <obsolete>
- Deprecated as of 8/2013, replaced by WebFont.DownloadTime.2.50KBTo100KB.
- </obsolete>
- <summary>
- The time it takes for a webfont download to finish, for webfonts of
- 50KB-100KB.
- </summary>
-</histogram>
-
-<histogram name="WebFont.LoadTime.3.100KBTo1MB" units="milliseconds">
- <obsolete>
- Deprecated as of 8/2013, replaced by WebFont.DownloadTime.3.100KBTo1MB.
- </obsolete>
- <summary>
- The time it takes for a webfont download to finish, for webfonts of
- 100KB-1MB.
- </summary>
-</histogram>
-
-<histogram name="WebFont.LoadTime.4.Over1MB" units="milliseconds">
- <obsolete>
- Deprecated as of 8/2013, replaced by WebFont.DownloadTime.4.Over1MB.
- </obsolete>
- <summary>
- The time it takes for a webfont download to finish, for webfonts of over
- 1MB.
- </summary>
-</histogram>
-
-<histogram name="WebFont.LoadTime.LoadError" units="milliseconds">
- <obsolete>
- Deprecated as of 8/2013, replaced by WebFont.DownloadTime.LoadError.
- </obsolete>
- <summary>
- The time taken for a webfont download that failed. Includes aborted
- requests.
- </summary>
-</histogram>
-
-<histogram name="WebFont.LocalFontUsed" enum="BooleanUsage">
- <summary>
- Whether a locallly installed font is actually used when @font-face had local
- sources.
- </summary>
-</histogram>
-
-<histogram name="WebFont.Resource.StyleRecalcToDownloadLatency"
- units="milliseconds">
- <summary>
- The time from when the webfont was referenced by a calculated style for the
- first time to the start of the font download. Recorded at most once for each
- FontResource object (not recorded if the font is retrieved from the memory
- cache).
- </summary>
-</histogram>
-
-<histogram name="WebFont.Resource.UsageType" enum="WebFontUsageType">
- <summary>
- For each webfont, this records (a) if the font was 'styled', i.e. referenced
- by a calculated style for a RenderText before the font data was used, and
- (b) if the font was actually used or not, i.e. the renderer requested the
- font data or not. (A Font can be used without being styled, for example when
- drawn by a Canvas 2D Context.) This is recorded upon a download request of a
- webfont, or destruction of a FontResource object. Recorded at most once for
- each FontResource object in the renderer's memory cahce.
- </summary>
-</histogram>
-
-<histogram name="WebFont.StyleRecalcToDownloadLatency" units="milliseconds">
- <obsolete>
- Deprecated as of 9/2013, replaced by
- WebFont.Resource.StyleRecalcToDownloadLatency.
- </obsolete>
- <summary>
- The time from when the webfont was referenced by a calculated style for the
- first time to the start of the font download.
- </summary>
-</histogram>
-
-<histogram name="WebFont.UsageType" enum="WebFontUsageType">
- <obsolete>
- Deprecated as of 9/2013, replaced by WebFont.Resource.UsageType.
- </obsolete>
- <summary>
- For each webfont, this records (a) if the font was 'styled', i.e. referenced
- by a calculated style for a RenderText before the font data was used, and
- (b) if the font was actually used or not, i.e. the renderer requested the
- font data or not. (A Font can be used without being styled, for example when
- drawn by a Canvas 2D Context.) This is recorded upon a download request of a
- webfont, or destruction of a CSSFontFaceSource object. Recorded at most once
- for each url() source of @font-face CSS rule.
- </summary>
-</histogram>
-
-<histogram name="WebFont.WebFontsInPage">
- <summary>
- The number of webfonts used in a page. This is recorded when the first
- layout is done, and so will not count webfonts dynamically loaded by
- scripts.
- </summary>
-</histogram>
-
-<histogram name="WebHistory.LocalResultMissingOnServer" units="%">
- <summary>
- Percentage of results that are present locally but are not returned by the
- web history API call. Recorded every time a signed-in user visits the
- chrome://history page and the results from the web history are received.
- </summary>
-</histogram>
-
-<histogram name="WebHistory.OAuthTokenCompletion" enum="BooleanSuccess">
- <summary>
- Whether getting the OAuth token was successful for a web history query. On
- visits to the chrome://history page this token is obtained and then used to
- get the user's synced web history.
- </summary>
-</histogram>
-
-<histogram name="WebHistory.OAuthTokenResponseCode" units="code">
- <summary>
- HTTP Response code returned by the server when trying to fetch the OAuth
- token for a web history query.
- </summary>
-</histogram>
-
-<histogram name="WebHistory.QueryCompletion" enum="WebHistoryStatus">
- <summary>
- Whether the web history API call was successful. Every time a signed-in user
- visits the chrome://history page this query is executed to get the user's
- synced web history. If successful, the local and remote results are merged
- and shown in the history page.
- </summary>
-</histogram>
-
-<histogram name="WebHistory.ResponseTime" units="milliseconds">
- <summary>
- Time it took for the web history to reply. Recorded when the web history API
- call triggered by visiting chrome://history receives the data, measuring how
- much time it took for the server to reply.
- </summary>
-</histogram>
-
-<histogram name="WebRTC.AudioCaptureTime" units="milliseconds">
- <summary>Duration in milliseconds of WebRTC audio capture session.</summary>
-</histogram>
-
-<histogram name="WebRTC.AudioInputChannelLayout" enum="ChannelLayout">
- <summary>Audio input channel layout in WebRTC.</summary>
-</histogram>
-
-<histogram name="WebRTC.AudioInputFramesPerBuffer" enum="AudioFramesPerBuffer">
- <summary>Size of WebRTC audio input buffers (in audio frames).</summary>
-</histogram>
-
-<histogram name="WebRTC.AudioInputFramesPerBufferUnexpected"
- units="audio frames">
- <summary>
- Size of WebRTC audio input buffers (atypical values, in audio frames).
- </summary>
-</histogram>
-
-<histogram name="WebRTC.AudioInputSampleRate" enum="AudioSampleRate">
- <summary>Audio input sample rate for WebRTC (in Hz).</summary>
-</histogram>
-
-<histogram name="WebRTC.AudioInputSampleRateUnexpected" units="Hz">
- <summary>
- Audio input sample rate for WebRTC (atypical values, in Hz).
- </summary>
-</histogram>
-
-<histogram name="WebRTC.AudioOutputChannelLayout" enum="ChannelLayout">
- <summary>Audio output channel layout in WebRTC.</summary>
-</histogram>
-
-<histogram name="WebRTC.AudioOutputFramesPerBuffer" enum="AudioFramesPerBuffer">
- <summary>Size of WebRTC audio output buffers (in audio frames).</summary>
-</histogram>
-
-<histogram name="WebRTC.AudioOutputFramesPerBufferUnexpected"
- units="audio frames">
- <summary>
- Size of WebRTC audio output buffers (atypical values, in audio frames).
- </summary>
-</histogram>
-
-<histogram name="WebRTC.AudioOutputSampleRate" enum="AudioSampleRate">
- <summary>Audio output sample rate for WebRTC (in Hz).</summary>
-</histogram>
-
-<histogram name="WebRTC.AudioOutputSampleRateUnexpected" units="Hz">
- <summary>
- Audio output sample rate for WebRTC (atypical values, in Hz).
- </summary>
-</histogram>
-
-<histogram name="WebRTC.AudioRenderTime" units="milliseconds">
- <summary>Duration in milliseconds of WebRTC audio render session.</summary>
-</histogram>
-
-<histogram name="WebRTC.webkitApiCount" enum="JavaScriptAPIName">
- <summary>Counts number of calls to WebRTC APIs from JavaScript.</summary>
-</histogram>
-
-<histogram name="Webstore.ExtensionInstallResult" enum="BooleanSuccess">
- <summary>
- The success or failure of all extension installs from the webstore. This
- includes those initiated by sync.
- </summary>
-</histogram>
-
-<histogram name="Win8.PageLoad" enum="Win8PageLoadType">
- <summary>
- Count of page loads in each of the 2 different environments (metro/desktop)
- on Windows 8.
- </summary>
-</histogram>
-
-<histogram name="WinTimeTicks.FailedToChangeCores" enum="WindowsVersion">
- <summary>
- Incremented each time the TimeTicks field trial runs on a machine with
- multiple cores, but failed to change thread affinity. Broken down by Windows
- version.
- </summary>
-</histogram>
-
-<histogram name="WinTimeTicks.MinResolutionNanoseconds" units="nanoseconds">
- <summary>
- The smallest non-zero delta reported by subsequent calls to
- QueryPerformanceCounter.
- </summary>
-</histogram>
-
-<histogram name="WinTimeTicks.NonStopTsc">
- <summary>
- True if the CPU's time stamp counter ticks at a constant rate regardless of
- CPU frequency.
- </summary>
-</histogram>
-
-<histogram name="WinTimeTicks.TickedBackwards" enum="WindowsVersion">
- <summary>
- The number of times the TimeTicks field trial failed because
- QueryPerformanceCounter ticked backwards. Broken down by Windows version.
- </summary>
-</histogram>
-
-<histogram name="WinTimeTicks.VersionSuccessful" enum="WindowsVersion">
- <summary>
- The number of times the TimeTicks field trial succeeded. Broken down by
- Windows version.
- </summary>
-</histogram>
-
-<histogram name="WinTimeTicks.VersionTotal" enum="WindowsVersion">
- <summary>
- The number of times the TimeTicks field trial ran for comparison with
- WinTimeTicks.VersionSuccess. Broken down by Windows version.
- </summary>
-</histogram>
-
-<histogram name="WrenchMenu.RecentTabsSubMenu" enum="RecentTabsAction">
- <summary>
- The number of times each tab or window restore option in the Recent Tabs
- submenu is clicked.
- </summary>
-</histogram>
-
-<histogram name="ZeroSuggest.AllResults">
- <summary>
- The number of results (either query or URL) from ZeroSuggest. This is set
- every time a successful response from ZeroSuggest is recieved, which can be
- every time the user focuses on the omnibox.
- </summary>
-</histogram>
-
-<histogram name="ZeroSuggest.QueryResults">
- <summary>
- The number of query results returned from ZeroSuggest. This is set every
- time a successful response from ZeroSuggest is recieved, which can be every
- time the user focuses on the omnibox.
- </summary>
-</histogram>
-
-<histogram name="ZeroSuggest.URLResults">
- <summary>
- The number of URL results returned from ZeroSuggest. This is set every time
- a successful response from ZeroSuggest is recieved, which can be every time
- the user focuses on the omnibox.
- </summary>
-</histogram>
-
-</histograms>
-
-<!-- Enum types -->
-
-<enums>
-
-<enum name="Abandoned" type="int">
- <int value="0" label="Finished"/>
- <int value="1" label="Abandoned"/>
-</enum>
-
-<enum name="AcceleratedFixedRootBackground" type="int">
- <int value="0" label="ScrolledMainFrame"/>
- <int value="1" label="ScrolledMainFrameWithAcceleratedFixedRootBackground"/>
- <int value="2" label="ScrolledMainFrameWithUnacceleratedFixedRootBackground"/>
-</enum>
-
-<enum name="ActionAfterDoubleTap" type="int">
- <int value="0" label="Navigated Back"/>
- <int value="1" label="Stopped Navigation"/>
- <int value="2" label="No Action"/>
-</enum>
-
-<enum name="ActionUponResourceRequest" type="int">
- <int value="0" label="Load resource"/>
- <int value="1" label="Revalidate resource"/>
- <int value="2" label="Use resource from cache"/>
-</enum>
-
-<enum name="ActiveWindowShowType" type="int">
- <int value="0" label="No Active Window"/>
- <int value="1" label="Other"/>
- <int value="2" label="Maximized"/>
- <int value="3" label="Fullscreen"/>
- <int value="4" label="Snapped"/>
-</enum>
-
-<enum name="AndroidEvictionReason" type="int">
- <int value="0" label="TabUnusedTooLong"/>
- <int value="1" label="TabUnusedInSession"/>
- <int value="2" label="LimitOfActiveTabs"/>
- <int value="3" label="EvictNTabs"/>
- <int value="4" label="EvictAll"/>
-</enum>
-
-<enum name="AndroidMemoryNotificationBackground" type="int">
- <int value="0" label="TrimMemoryUiHidden"/>
- <int value="1" label="TrimMemoryBackground"/>
- <int value="2" label="TrimMemoryModerate"/>
- <int value="3" label="TrimMemoryComplete"/>
-</enum>
-
-<enum name="AndroidMemoryNotificationForeground" type="int">
- <int value="0" label="TrimMemoryRunningModerate"/>
- <int value="1" label="TrimMemoryRunningLow"/>
- <int value="2" label="TrimMemoryRunningCritical"/>
- <int value="3" label="LowMemory"/>
-</enum>
-
-<enum name="AppLaunch" type="int">
- <int value="0" label="NTP_APPS_MAXIMIZED"/>
- <int value="1" label="NTP_APPS_COLLAPSED"/>
- <int value="2" label="NTP_APPS_MENU"/>
- <int value="3" label="NTP_MOST_VISITED"/>
- <int value="4" label="NTP_RECENTLY_CLOSED"/>
- <int value="5" label="BOOKMARK_BAR"/>
- <int value="6" label="CONTENT_NAVIGATION"/>
- <int value="7" label="SESSION_RESTORE"/>
- <int value="8" label="AUTOLAUNCH"/>
- <int value="9" label="OMNIBOX_APP"/>
- <int value="10" label="OMNIBOX_LOCATION"/>
- <int value="11" label="OMNIBOX_INSTANT"/>
- <int value="12" label="EXTENSION_API"/>
- <int value="13" label="CMD_LINE_APP"/>
- <int value="14" label="CMD_LINE_URL"/>
- <int value="15" label="NTP_WEBSTORE"/>
- <int value="16" label="NTP_APP_RE_ENABLE"/>
- <int value="17" label="CMD_LINE_APP_LEGACY"/>
- <int value="18" label="NTP_WEBSTORE_FOOTER"/>
- <int value="19" label="NTP_WEBSTORE_PLUS_ICON"/>
- <int value="20" label="APP_LIST_MAIN"/>
- <int value="21" label="APP_LIST_SEARCH"/>
- <int value="22" label="APP_LIST_MAIN_CHROME"/>
- <int value="23" label="APP_LIST_MAIN_WEBSTORE"/>
- <int value="24" label="APP_LIST_SEARCH_CHROME"/>
- <int value="25" label="APP_LIST_SEARCH_WEBSTORE"/>
-</enum>
-
-<enum name="AppLaunchContainer" type="int">
- <int value="0" label="LAUNCH_CONTAINER_WINDOW"/>
- <int value="1" label="LAUNCH_CONTAINER_PANEL"/>
- <int value="2" label="LAUNCH_CONTAINER_TAB"/>
- <int value="3" label="LAUNCH_CONTAINER_NONE (v2 packaged apps)"/>
-</enum>
-
-<enum name="AppLauncherPromo" type="int">
- <int value="0" label="Already installed"/>
- <int value="1" label="Shown"/>
- <int value="2" label="Dismissed"/>
- <int value="3" label="Learn more"/>
-</enum>
-
-<enum name="AppListSearchResult" type="int">
- <int value="0" label="OMNIBOX"/>
- <int value="1" label="APP"/>
- <int value="2" label="WEBSTORE"/>
- <int value="3" label="SEARCH_WEBSTORE"/>
-</enum>
-
-<enum name="AppPromoAction" type="int">
- <int value="0" label="PROMO_LAUNCH_APP"/>
- <int value="1" label="PROMO_LAUNCH_WEB_STORE"/>
- <int value="2" label="PROMO_CLOSE"/>
- <int value="3" label="PROMO_EXPIRE"/>
- <int value="4" label="PROMO_SEEN"/>
-</enum>
-
-<enum name="AppsPageDragSource" type="int">
- <int value="0" label="Same apps pane"/>
- <int value="1" label="Different apps pane"/>
- <int value="2" label="Most visited pane"/>
- <int value="3" label="Bookmarks pane"/>
- <int value="4" label="Outside of NTP (e.g. bookmarks bar)"/>
-</enum>
-
-<enum name="AsyncDNSConfigParsePosix" type="int">
- <int value="0" label="OK"/>
- <int value="1" label="RES_INIT_FAILED"/>
- <int value="2" label="RES_INIT_UNSET"/>
- <int value="3" label="BAD_ADDRESS"/>
- <int value="4" label="BAD_EXT_STRUCT"/>
- <int value="5" label="NULL_ADDRESS"/>
- <int value="6" label="NO_NAMESERVERS"/>
- <int value="7" label="MISSING_OPTIONS"/>
- <int value="8" label="UNHANDLED_OPTIONS"/>
-</enum>
-
-<enum name="AsyncDNSConfigParseWin" type="int">
- <int value="0" label="OK"/>
- <int value="1" label="READ_IPHELPER"/>
- <int value="2" label="READ_POLICY_SEARCHLIST"/>
- <int value="3" label="READ_TCPIP_SEARCHLIST"/>
- <int value="4" label="READ_DOMAIN"/>
- <int value="5" label="READ_POLICY_DEVOLUTION"/>
- <int value="6" label="READ_DNSCACHE_DEVOLUTION"/>
- <int value="7" label="READ_TCPIP_DEVOLUTION"/>
- <int value="8" label="READ_APPEND_MULTILABEL"/>
- <int value="9" label="READ_PRIMARY_SUFFIX"/>
- <int value="10" label="BAD_ADDRESS"/>
- <int value="11" label="NO_NAMESERVERS"/>
- <int value="12" label="UNHANDLED_OPTIONS"/>
-</enum>
-
-<enum name="AsyncDNSHostsParseWin" type="int">
- <int value="0" label="OK"/>
- <int value="1" label="UNREADABLE_HOSTS_FILE"/>
- <int value="2" label="COMPUTER_NAME_FAILED"/>
- <int value="3" label="IPHELPER_FAILED"/>
- <int value="4" label="BAD_ADDRESS"/>
-</enum>
-
-<enum name="AsyncDNSParseResult" type="int">
- <summary>Results of DnsResponse::ParseToAddressList.</summary>
- <int value="0" label="SUCCESS"/>
- <int value="1" label="MALFORMED_RESPONSE"/>
- <int value="2" label="MALFORMED_CNAME"/>
- <int value="3" label="NAME_MISMATCH"/>
- <int value="4" label="SIZE_MISMATCH"/>
- <int value="5" label="CNAME_AFTER_ADDRESS"/>
- <int value="6" label="ADDRESS_TTL_MISMATCH"/>
- <int value="7" label="NO_ADDRESSES"/>
-</enum>
-
-<enum name="AsyncDNSResolveStatus" type="int">
- <int value="0" label="DNS_SUCCESS">Succeeded with async DNS.</int>
- <int value="1" label="PROC_SUCCESS">
- Succeeded with getaddrinfo after async DNS failed.
- </int>
- <int value="2" label="FAIL">Both async DNS and getaddrinfo failed.</int>
- <int value="3" label="SUSPECT_NETBIOS">
- Same as PROC_SUCCESS except the hostname fits NetBIOS name criteria.
- </int>
-</enum>
-
-<enum name="AsyncDNSWatchStatus" type="int">
- <int value="0" label="STARTED">Started.</int>
- <int value="1" label="FAILED_TO_START_CONFIG">
- Failed to start watching config.
- </int>
- <int value="2" label="FAILED_TO_START_HOSTS">
- Failed to start watching HOSTS.
- </int>
- <int value="3" label="FAILED_CONFIG">Failed during watching config.</int>
- <int value="4" label="FAILED_HOSTS">Failed during watching HOSTS.</int>
-</enum>
-
-<enum name="AudioCodec" type="int">
- <int value="0" label="kUnknownAudioCodec"/>
- <int value="1" label="kCodecAAC"/>
- <int value="2" label="kCodecMP3"/>
- <int value="3" label="kCodecPCM"/>
- <int value="4" label="kCodecVorbis"/>
- <int value="5" label="kCodecFLAC"/>
- <int value="6" label="kCodecAMR_NB"/>
- <int value="7" label="kCodecAMR_WB"/>
- <int value="8" label="kCodecPCM_MULAW"/>
- <int value="9" label="kCodecGSM_MS"/>
- <int value="10" label="kCodecPCM_S16BE"/>
- <int value="11" label="kCodecPCM_S24BE"/>
- <int value="12" label="kCodecOpus"/>
-</enum>
-
-<enum name="AudioFramesPerBuffer" type="int">
- <int value="0" label="k160"/>
- <int value="1" label="k320"/>
- <int value="2" label="k440"/>
- <int value="3" label="k480"/>
- <int value="4" label="k640"/>
- <int value="5" label="k880"/>
- <int value="6" label="k960"/>
- <int value="7" label="k1440"/>
- <int value="8" label="k1920"/>
-</enum>
-
-<enum name="AudioRendererEvents" type="int">
- <int value="0" label="Initialized"/>
- <int value="1" label="Runtime error"/>
-</enum>
-
-<enum name="AudioSampleFormat" type="int">
- <int value="0" label="Unknown"/>
- <int value="1" label="Unsigned 8-bit"/>
- <int value="2" label="Signed 16-bit"/>
- <int value="3" label="Signed 32-bit"/>
- <int value="4" label="Float 32-bit"/>
- <int value="5" label="Signed 16-bit planar"/>
- <int value="6" label="Float 32-bit planar"/>
-</enum>
-
-<enum name="AudioSampleRate" type="int">
- <int value="0" label="k8000Hz"/>
- <int value="1" label="k16000Hz"/>
- <int value="2" label="k32000Hz"/>
- <int value="3" label="k48000Hz"/>
- <int value="4" label="k96000Hz"/>
- <int value="5" label="k11025Hz"/>
- <int value="6" label="k22050Hz"/>
- <int value="7" label="k44100Hz"/>
- <int value="8" label="k88200Hz"/>
- <int value="9" label="k176400Hz"/>
- <int value="10" label="k192000Hz"/>
-</enum>
-
-<enum name="AutocheckoutBubble" type="int">
- <obsolete>
- Deprecated as of 8/2013.
- </obsolete>
- <int value="0" label="Created"/>
- <int value="1" label="Accepted"/>
- <int value="2" label="Dismissed"/>
- <int value="3" label="Ignored"/>
- <int value="4" label="Could be displayed"/>
-</enum>
-
-<enum name="AutocheckoutBuyFlow" type="int">
- <obsolete>
- Deprecated as of 8/2013.
- </obsolete>
- <int value="0" label="Started"/>
- <int value="1" label="Success"/>
- <int value="2" label="Missing field mappings"/>
- <int value="3" label="Missing advance element"/>
- <int value="4" label="Cannot proceed"/>
-</enum>
-
-<enum name="AutofillCreditCardInfoBar" type="int">
- <int value="0" label="Shown"/>
- <int value="1" label="Accepted"/>
- <int value="2" label="Denied"/>
- <int value="3" label="Ignored"/>
-</enum>
-
-<enum name="AutofillDeveloperEngagement" type="int">
- <int value="0" label="Fillable form parsed"/>
- <int value="1" label="Includes type hints"/>
-</enum>
-
-<enum name="AutofillDialogDismissalState" type="int">
- <int value="0" label="Submitted, existing data"/>
- <int value="1" label="Submitted, saved to Wallet"/>
- <int value="2" label="Submitted, saved locally"/>
- <int value="3" label="Submitted, no save"/>
- <int value="4" label="Canceled, no edits"/>
- <int value="5" label="Canceled, no invalid fields"/>
- <int value="6" label="Canceled, 1+ invalid fields"/>
- <int value="7" label="Canceled during sign-in"/>
-</enum>
-
-<enum name="AutofillDialogInitialUserState" type="int">
- <int value="0" label="Not signed in, no Autofill"/>
- <int value="1" label="Not signed in, has Autofill"/>
- <int value="2" label="Signed in, no Wallet, no Autofill"/>
- <int value="3" label="Signed in, no Wallet, has Autofill"/>
- <int value="4" label="Signed in, has Wallet, no Autofill"/>
- <int value="5" label="Signed in, ha Wallet, has Autofill"/>
-</enum>
-
-<enum name="AutofillDialogPopupEvent" type="int">
- <int value="0" label="Popup shown"/>
- <int value="1" label="Form Autofilled"/>
-</enum>
-
-<enum name="AutofillDialogSecurity" type="int">
- <int value="0" label="Baseline: Dialog shown"/>
- <int value="1" label="Credit card over HTTP"/>
- <int value="2" label="Cross-origin frame"/>
-</enum>
-
-<enum name="AutofillDialogUiEvents" type="int">
- <int value="0" label="Dialog shown"/>
- <int value="1" label="Dialog submitted"/>
- <int value="2" label="Dialog canceled"/>
- <int value="3" label="Account switched: Wallet-&gt;Autofill"/>
- <int value="4" label="Account switched: Autofill-&gt;Wallet"/>
- <int value="5" label="Account switched: Wallet-&gt;Wallet"/>
- <int value="6" label="Sign-in UI shown"/>
- <int value="7" label="Selected different email suggestion"/>
- <int value="8" label="Selected different billing suggestion"/>
- <int value="9" label="Selected different cc+billing suggestion"/>
- <int value="10" label="Selected different shipping suggestion"/>
- <int value="11" label="Selected different cc suggestion"/>
- <int value="12" label="Showed edit UI for email"/>
- <int value="13" label="Showed edit UI for billing"/>
- <int value="14" label="Showed edit UI for cc+billing"/>
- <int value="15" label="Showed edit UI for shipping"/>
- <int value="16" label="Showed edit UI for cc"/>
- <int value="17" label="Selected 'Add email' suggestion"/>
- <int value="18" label="Selected 'Add billing' suggestion"/>
- <int value="19" label="Selected 'Add cc+billing' suggestion"/>
- <int value="20" label="Selected 'Add shipping' suggestion"/>
- <int value="21" label="Selected 'Add cc' suggestion"/>
- <int value="22" label="Account switched: Wallet account added (multilogin)"/>
-</enum>
-
-<enum name="AutofillExperimentId" type="int">
- <int value="0" label="No Experiment"/>
- <int value="1" label="Unknown"/>
- <int value="2" label="ar06"/>
- <int value="3" label="ar1"/>
- <int value="4" label="ar2"/>
- <int value="5" label="ar4"/>
- <int value="6" label="ar05wlr15"/>
- <int value="7" label="ar05wlr25"/>
- <int value="8" label="ar05wlr25fs5"/>
- <int value="9" label="tbar1"/>
- <int value="10" label="ar04wr3fs4"/>
- <int value="11" label="No Server Response"/>
- <int value="12" label="fp05"/>
- <int value="13" label="fp025"/>
- <int value="14" label="fp05cc03"/>
- <int value="15" label="fp05cco03"/>
- <int value="16" label="fp05cco03cstd"/>
- <int value="17" label="fp05cc03e1"/>
-</enum>
-
-<enum name="AutofillQuality" type="int">
- <int value="0" label="Submitted"/>
- <int value="1" label="Autofilled"/>
- <int value="2" label="Autofill failed"/>
- <int value="3" label="Heuristic Unknown"/>
- <int value="4" label="Heuristic Match"/>
- <int value="5" label="Heuristic Mismatch"/>
- <int value="6" label="Server Unknown"/>
- <int value="7" label="Server Match"/>
- <int value="8" label="Server Mismatch"/>
-</enum>
-
-<enum name="AutofillQueryResult" type="int">
- <int value="0" label="Sent"/>
- <int value="1" label="Received"/>
- <int value="2" label="Parsed"/>
- <int value="3" label="Response matches local"/>
- <int value="4" label="Response improves local (nonempty)"/>
- <int value="5" label="Response improves local (empty)"/>
-</enum>
-
-<enum name="AutofillTypeQuality" type="int">
- <int value="0" label="Unknown"/>
- <int value="1" label="Match"/>
- <int value="2" label="Mismatch"/>
-</enum>
-
-<enum name="AutofillTypeQualityByFieldType" type="int">
- <int value="0" label="Ambiguous, Unknown"/>
- <int value="1" label="Ambiguous, Match"/>
- <int value="2" label="Ambiguous, Mismatch"/>
- <int value="3" label="Name, Unknown"/>
- <int value="4" label="Name, Match"/>
- <int value="5" label="Name, Mismatch"/>
- <int value="6" label="Company, Unknown"/>
- <int value="7" label="Company, Match"/>
- <int value="8" label="Company, Mismatch"/>
- <int value="9" label="Addr. line 1, Unknown"/>
- <int value="10" label="Addr. line 1, Match"/>
- <int value="11" label="Addr. line 1, Mismatch"/>
- <int value="12" label="Addr. line 2, Unknown"/>
- <int value="13" label="Addr. line 2, Match"/>
- <int value="14" label="Addr. line 2, Mismatch"/>
- <int value="15" label="City, Unknown"/>
- <int value="16" label="City, Match"/>
- <int value="17" label="City, Mismatch"/>
- <int value="18" label="State, Unknown"/>
- <int value="19" label="State, Match"/>
- <int value="20" label="State, Mismatch"/>
- <int value="21" label="ZIP code, Unknown"/>
- <int value="22" label="ZIP code, Match"/>
- <int value="23" label="ZIP code, Mismatch"/>
- <int value="24" label="Country, Unknown"/>
- <int value="25" label="Country, Match"/>
- <int value="26" label="Country, Mismatch"/>
- <int value="27" label="Phone, Unknown"/>
- <int value="28" label="Phone, Match"/>
- <int value="29" label="Phone, Mismatch"/>
- <int value="30" label="Fax, Unknown"/>
- <int value="31" label="Fax, Match"/>
- <int value="32" label="Fax, Mismatch"/>
- <int value="33" label="Email, Unknown"/>
- <int value="34" label="Email, Match"/>
- <int value="35" label="Email, Mismatch"/>
- <int value="36" label="Credit card: name, Unknown"/>
- <int value="37" label="Credit card: name, Match"/>
- <int value="38" label="Credit card: name, Mismatch"/>
- <int value="39" label="Credit card: number, Unknown"/>
- <int value="40" label="Credit card: number, Match"/>
- <int value="41" label="Credit card: number, Mismatch"/>
- <int value="42" label="Credit card: date, Unknown"/>
- <int value="43" label="Credit card: date, Match"/>
- <int value="44" label="Credit card: date, Mismatch"/>
- <int value="45" label="Credit card: type, Unknown"/>
- <int value="46" label="Credit card: type, Match"/>
- <int value="47" label="Credit card: type, Mismatch"/>
- <int value="48" label="Password, Unknown"/>
- <int value="49" label="Password, Match"/>
- <int value="50" label="Password, Mismatch"/>
-</enum>
-
-<enum name="AutofillUserHappiness" type="int">
- <int value="0" label="Forms loaded"/>
- <int value="1" label="Submitted fillable form, autofilled all"/>
- <int value="2" label="Submitted fillable form, autofilled some"/>
- <int value="3" label="Submitted fillable form, autofilled none"/>
- <int value="4" label="Submitted non-fillable form"/>
- <int value="5" label="User did type"/>
- <int value="6" label="Suggestions shown"/>
- <int value="7" label="Suggestions shown (once)"/>
- <int value="8" label="User did autofill"/>
- <int value="9" label="User did autofill (once)"/>
- <int value="10" label="User edited autofilled field"/>
- <int value="11" label="User edited autofilled field (once)"/>
-</enum>
-
-<enum name="BackingStoreResults" type="int">
- <int value="0" label="Unused"/>
- <int value="1" label="Success"/>
- <int value="2" label="Failure"/>
-</enum>
-
-<enum name="BatteryInfoSampleResult" type="int">
- <int value="0" label="Read"/>
- <int value="1" label="Good"/>
- <int value="2" label="Bad"/>
-</enum>
-
-<enum name="BluetoothPairingMethod" type="int">
- <int value="0" label="No user interaction required"/>
- <int value="1" label="PIN Code requested from user"/>
- <int value="2" label="Passkey requested from user"/>
- <int value="3" label="PIN Code entered into device"/>
- <int value="4" label="Passkey entered into device"/>
- <int value="5" label="Passkey confirmed on both devices"/>
-</enum>
-
-<enum name="BluetoothPairingResult" type="int">
- <int value="0" label="Success"/>
- <int value="1" label="Connection already in-progress"/>
- <int value="2" label="Failed for non-specific reason"/>
- <int value="3" label="Authentication failed"/>
- <int value="4" label="Authentication canceled"/>
- <int value="5" label="Authentication rejected"/>
- <int value="6" label="Authentication timed out"/>
- <int value="7" label="Unsupported device"/>
- <int value="8" label="Unknown or unhandler error"/>
-</enum>
-
-<enum name="Boolean" type="int">
- <int value="0" label="False"/>
- <int value="1" label="True"/>
-</enum>
-
-<enum name="BooleanAttempted" type="int">
- <int value="0" label="Not Attempted"/>
- <int value="1" label="Attempted"/>
-</enum>
-
-<enum name="BooleanAvailable" type="int">
- <int value="0" label="Not Available"/>
- <int value="1" label="Available"/>
-</enum>
-
-<enum name="BooleanCloseTimeout" type="int">
- <int value="0" label="Closed normally"/>
- <int value="1" label="Timed out"/>
-</enum>
-
-<enum name="BooleanCommonNameMatch" type="int">
- <int value="0" label="subjectAltName used"/>
- <int value="1" label="Common Name used"/>
-</enum>
-
-<enum name="BooleanCorrupt" type="int">
- <int value="0" label="Not Corrupt"/>
- <int value="1" label="Corrupt"/>
-</enum>
-
-<enum name="BooleanCovered" type="int">
- <int value="0" label="Not Covered"/>
- <int value="1" label="Covered"/>
-</enum>
-
-<enum name="BooleanCredentialsLost" type="int">
- <int value="0" label="Found Credentials"/>
- <int value="1" label="Missing Credentials"/>
-</enum>
-
-<enum name="BooleanDataReductionProxy" type="int">
- <int value="0" label="Not Data Reduction Proxy"/>
- <int value="1" label="Data Reduction Proxy"/>
-</enum>
-
-<enum name="BooleanDelete" type="int">
- <int value="0" label="Ignored"/>
- <int value="1" label="Deleted"/>
-</enum>
-
-<enum name="BooleanDuplicate" type="int">
- <int value="0" label="Not Duplicate"/>
- <int value="1" label="Duplicate"/>
-</enum>
-
-<enum name="BooleanEnabled" type="int">
- <int value="0" label="Disabled"/>
- <int value="1" label="Enabled"/>
-</enum>
-
-<enum name="BooleanExpired" type="int">
- <int value="0" label="Unexpired"/>
- <int value="1" label="Expired"/>
-</enum>
-
-<enum name="BooleanForceDisabled" type="int">
- <int value="0" label="Not Force Disabled"/>
- <int value="1" label="Force Disabled"/>
-</enum>
-
-<enum name="BooleanHasCrc" type="int">
- <int value="0" label="No CRC"/>
- <int value="1" label="Has CRC"/>
-</enum>
-
-<enum name="BooleanHit" type="int">
- <int value="0" label="Not_reached"/>
- <int value="1" label="Hit"/>
-</enum>
-
-<enum name="BooleanHttps" type="int">
- <int value="0" label="HTTP"/>
- <int value="1" label="HTTPS"/>
-</enum>
-
-<enum name="BooleanMatched" type="int">
- <int value="0" label="Not matched"/>
- <int value="1" label="Matched"/>
-</enum>
-
-<enum name="BooleanOrphan" type="int">
- <int value="0" label="Non-orphan"/>
- <int value="1" label="Orphan"/>
-</enum>
-
-<enum name="BooleanRaced" type="int">
- <int value="0" label="Did Not Race"/>
- <int value="1" label="Raced"/>
-</enum>
-
-<enum name="BooleanRegistered" type="int">
- <int value="0" label="Not Registered"/>
- <int value="1" label="Registered"/>
-</enum>
-
-<enum name="BooleanSelected" type="int">
- <int value="0" label="No selection"/>
- <int value="1" label="Selected"/>
-</enum>
-
-<enum name="BooleanStale" type="int">
- <int value="0" label="Fresh"/>
- <int value="1" label="Stale"/>
-</enum>
-
-<enum name="BooleanSuccess" type="int">
- <int value="0" label="Failure"/>
- <int value="1" label="Success"/>
-</enum>
-
-<enum name="BooleanSuppressed" type="int">
- <int value="0" label="No suppressions"/>
- <int value="1" label="Suppressed"/>
-</enum>
-
-<enum name="BooleanTabDiscard" type="int">
- <int value="0" label="Memory OK, no discards"/>
- <int value="1" label="Memory low, tabs discarded"/>
-</enum>
-
-<enum name="BooleanUsage" type="int">
- <int value="0" label="Not Used"/>
- <int value="1" label="Used"/>
-</enum>
-
-<enum name="BooleanValid" type="int">
- <int value="0" label="Invalid"/>
- <int value="1" label="Valid"/>
-</enum>
-
-<enum name="BooleanWiped" type="int">
- <int value="0" label="Re-enabled"/>
- <int value="1" label="Wiped out"/>
-</enum>
-
-<enum name="CanvasContextType" type="int">
- <int value="0" label="2d"/>
- <int value="1" label="webkit-3d"/>
- <int value="2" label="experimental-webgl"/>
- <int value="3" label="webgl"/>
-</enum>
-
-<enum name="CatSixtyFour" type="int">
- <int value="0" label="Saber-Toothed Cat (&lt;10.6), 32-bit (?)"/>
- <int value="1" label="Saber-Toothed Cat (&lt;10.6), 64-bit (?)"/>
- <int value="2" label="Snow Leopard (10.6), 32-bit"/>
- <int value="3" label="Snow Leopard (10.6), 64-bit"/>
- <int value="4" label="Lion (10.7), 32-bit (?)"/>
- <int value="5" label="Lion (10.7), 64-bit"/>
- <int value="6" label="Mountain Lion (10.8), 32-bit (?)"/>
- <int value="7" label="Mountain Lion (10.8), 64-bit"/>
- <int value="8" label="Mavericks (10.9), 32-bit (?)"/>
- <int value="9" label="Mavericks (10.9), 64-bit"/>
- <int value="10" label="Saber-Toothed Cat (&lt;10.6), 8-bit (?)"/>
- <int value="11" label="Snow Leopard (10.6), 8-bit (?)"/>
- <int value="12" label="Lion (10.7), 8-bit (?)"/>
- <int value="13" label="Mountain Lion (10.8), 8-bit (?)"/>
- <int value="14" label="Mavericks (10.9), 8-bit (?)"/>
- <int value="15" label="FutureCat (&gt;10.9), 32-bit (?)"/>
- <int value="16" label="FutureCat (&gt;10.9), 64-bit"/>
- <int value="17" label="FutureCat (&gt;10.9), 8-bit (?)"/>
-</enum>
-
-<enum name="ChannelLayout" type="int">
- <int value="0" label="CHANNEL_LAYOUT_NONE"/>
- <int value="1" label="CHANNEL_LAYOUT_UNSUPPORTED"/>
- <int value="2" label="CHANNEL_LAYOUT_MONO"/>
- <int value="3" label="CHANNEL_LAYOUT_STEREO"/>
- <int value="4" label="CHANNEL_LAYOUT_2_1"/>
- <int value="5" label="CHANNEL_LAYOUT_SURROUND"/>
- <int value="6" label="CHANNEL_LAYOUT_4POINT0"/>
- <int value="7" label="CHANNEL_LAYOUT_2_2"/>
- <int value="8" label="CHANNEL_LAYOUT_QUAD"/>
- <int value="9" label="CHANNEL_LAYOUT_5POINT0"/>
- <int value="10" label="CHANNEL_LAYOUT_5POINT1"/>
- <int value="11" label="CHANNEL_LAYOUT_5POINT0_BACK"/>
- <int value="12" label="CHANNEL_LAYOUT_5POINT1_BACK"/>
- <int value="13" label="CHANNEL_LAYOUT_7POINT0"/>
- <int value="14" label="CHANNEL_LAYOUT_7POINT1"/>
- <int value="15" label="CHANNEL_LAYOUT_7POINT1_WIDE"/>
- <int value="16" label="CHANNEL_LAYOUT_STEREO_DOWNMIX"/>
- <int value="17" label="CHANNEL_LAYOUT_2POINT1"/>
- <int value="18" label="CHANNEL_LAYOUT_3_1"/>
- <int value="19" label="CHANNEL_LAYOUT_4_1"/>
- <int value="20" label="CHANNEL_LAYOUT_6_0"/>
- <int value="21" label="CHANNEL_LAYOUT_6_0_FRONT"/>
- <int value="22" label="CHANNEL_LAYOUT_HEXAGONAL"/>
- <int value="23" label="CHANNEL_LAYOUT_6_1"/>
- <int value="24" label="CHANNEL_LAYOUT_6_1_BACK"/>
- <int value="25" label="CHANNEL_LAYOUT_6_1_FRONT"/>
- <int value="26" label="CHANNEL_LAYOUT_7_0_FRONT"/>
- <int value="27" label="CHANNEL_LAYOUT_7_1_WIDE_BACK"/>
- <int value="28" label="CHANNEL_LAYOUT_OCTAGONAL"/>
- <int value="29" label="CHANNEL_LAYOUT_DISCRETE"/>
-</enum>
-
-<enum name="CheckCRCResult" type="int">
- <int value="0" label="Stream was never read to end"/>
- <int value="1" label="CRC check not done"/>
- <int value="2" label="CRC check done"/>
- <int value="3" label="Stream was never read at all"/>
-</enum>
-
-<enum name="ChromeDownloadCountType" type="int">
- <int value="0" label="Initiated by Navigation (Obsolete)"/>
- <int value="1" label="Initiated by Context Menu (Obsolete)"/>
- <int value="2" label="Initiated by WebStore Installer (Obsolete)"/>
- <int value="3" label="Initiated by ImageBurner (Obsolete)"/>
- <int value="4" label="Blocked by Throttling"/>
-</enum>
-
-<enum name="ChromeDownloadSource" type="int">
- <int value="0" label="Initiated by Navigation"/>
- <int value="1" label="Initiated by Context Menu"/>
- <int value="2" label="Initiated by WebStore Installer"/>
- <int value="3" label="Initiated by ImageBurner"/>
- <int value="4" label="Initiated by Plugin Installer"/>
-</enum>
-
-<enum name="ChromeNotifierServiceActionType" type="int">
- <int value="0" label="Unknown"/>
- <int value="1" label="First service enabled"/>
- <int value="2" label="First service disabled"/>
-</enum>
-
-<enum name="ChromeOSUserImageId" type="int">
- <summary>
- Indices of the default images as defined in
- chrome/browser/chromeos/login/default_user_images.cc. The last three values
- are for taken photo, downloaded file and the image previously used by user.
- </summary>
- <int value="0" label="Default, Beaker"/>
- <int value="1" label="Default, Bee"/>
- <int value="2" label="Default, Briefcase"/>
- <int value="3" label="Default, Circles"/>
- <int value="4" label="Default, Cloud"/>
- <int value="5" label="Default, Cupcake"/>
- <int value="6" label="Default, Day"/>
- <int value="7" label="Default, Flower"/>
- <int value="8" label="Default, Globe"/>
- <int value="9" label="Default, Hot air"/>
- <int value="10" label="Default, Ladybug"/>
- <int value="11" label="Default, Leaf"/>
- <int value="12" label="Default, Night"/>
- <int value="13" label="Default, Plane"/>
- <int value="14" label="Default, Robot body"/>
- <int value="15" label="Default, Robot head"/>
- <int value="16" label="Default, Toolbox"/>
- <int value="17" label="Default, User color"/>
- <int value="18" label="Default, User enterprise"/>
- <int value="19" label="Photo taken"/>
- <int value="20" label="Downloaded file"/>
- <int value="21" label="Old image"/>
- <int value="22" label="Profile image"/>
-</enum>
-
-<enum name="ClipboardAction" type="int">
- <int value="0" label="Write from non-Incognito"/>
- <int value="1" label="Write from Incognito"/>
- <int value="2" label="Read Text"/>
-</enum>
-
-<enum name="CoalescePotentialPackets" type="int">
- <int value="0" label="No Advantage"/>
- <int value="1" label="Header packets Only"/>
- <int value="30" label="More Than 30"/>
-</enum>
-
-<enum name="CompositedScrolling" type="int">
- <int value="0" label="Is scrollable area"/>
- <int value="1" label="Needs to be stacking container"/>
- <int value="2" label="Will use composited scrolling"/>
-</enum>
-
-<enum name="CompositorType" type="int">
- <int value="0" label="Software compositor"/>
- <int value="1" label="GPU compositor"/>
-</enum>
-
-<enum name="ConnectionType" type="int">
- <summary>
- Connection type as defined in net/base/connection_type_histograms.h
- </summary>
- <int value="0" label="Any">Any connection (SSL, HTTP, SPDY, etc.)</int>
- <int value="1" label="SSL">An SSL connection</int>
- <int value="2" label="SSL-MD5">
- An SSL connection with an MD5 certificate in the certificate chain
- (excluding root)
- </int>
- <int value="3" label="SSL-MD2">
- An SSL connection with an MD2 certificate in the certificate chain
- (excluding root)
- </int>
- <int value="4" label="SSL-MD4">
- An SSL connection with an MD4 certificate in the certificate chain
- (excluding root)
- </int>
- <int value="5" label="SSL-MD5(CA)">
- An SSL connection with an MD5 CA certificate in the certificate chain
- (excluding root)
- </int>
- <int value="6" label="SSL-MD2(CA)">
- An SSL connection with an MD2 CA certificate in the cerfificate chain
- (excluding root)
- </int>
- <int value="7" label="HTTP">An HTTP connection</int>
- <int value="8" label="SPDY">A SPDY connection</int>
- <int value="9" label="SSL-2.0">An SSL connection that uses SSL 2.0</int>
- <int value="10" label="SSL-3.0">An SSL connection that uses SSL 3.0</int>
- <int value="11" label="TLS-1.0">An SSL connection that uses TLS 1.0</int>
- <int value="12" label="TLS-1.1">An SSL connection that uses TLS 1.1</int>
- <int value="13" label="TLS-1.2">An SSL connection that uses TLS 1.2</int>
-</enum>
-
-<enum name="ConnectivityDiagnosticsTestVerdict" type="int">
- <int value="0" label="NO_PROBLEM"/>
- <int value="1" label="POTENTIAL_PROBLEM"/>
- <int value="2" label="PROBLEM"/>
- <int value="3" label="TEST_FAILURE_OCCURRED"/>
- <int value="4" label="TEST_NOT_RUN"/>
-</enum>
-
-<enum name="CookieDeletionCause" type="int">
- <summary>Reason why a cookie was removed from the cookie store</summary>
- <int value="0" label="explicit">
- The user explicitly requested that we delete a cookie
- </int>
- <int value="1" label="overwrite">
- The value of the cookie was overwritten by a new value
- </int>
- <int value="2" label="expired">The cookie expiration time passed</int>
- <int value="3" label="evicted">
- The cookie was evicted during garbage collection (replaced by
- domain_evicted/global_evicted below)
- </int>
- <int value="4" label="store_dup">
- The backing store had two copies of the cookie so one was removed (i.e.
- problems writing the backing store database)
- </int>
- <int value="5" label="dont_record">
- The cookie deletion should not be recorded because it occurred, e.g., during
- shutdown (the fact that these values showed up in the histogram is a bug,
- since fixed)
- </int>
- <int value="6" label="domain_evicted">
- The cookie was evicted during per-domain/eTLD+1 garbage collection
- </int>
- <int value="7" label="global_evicted">
- The cookie was evicted during whole store garbage collection.
- </int>
- <int value="8" label="domain_evicted_pre_safe">
- The cookie evicted during per-domain/eTLD+1 garbage collection, and would
- have been evicted by the global garbage collection process (because they
- hadn't been accessed recently enough).
- </int>
- <int value="9" label="domain_evicted_post_safe">
- The cookie evicted during per-domain/eTLD+1 garbage collection, and would
- not have been evicted by global metrics as well (because they had been
- accessed recently enough to save).
- </int>
- <int value="10" label="expired_overwrite">
- The cookie deletion occurred because the server overwrote it with an already
- expired cookie (this is a common idiom for server deletions of cookies).
- </int>
-</enum>
-
-<enum name="CrosDisksArchiveType" type="int">
- <int value="0" label="Unknown"/>
- <int value="1" label="ZIP"/>
- <int value="2" label="RAR"/>
- <int value="3" label="Tar"/>
- <int value="4" label="Bzip2-compressed Tar"/>
- <int value="5" label="Gzip-compressed Tar"/>
-</enum>
-
-<enum name="CrosDisksDeviceMediaType" type="int">
- <int value="0" label="Unknown"/>
- <int value="1" label="USB Drive"/>
- <int value="2" label="SD Card"/>
- <int value="3" label="Optical Disc"/>
- <int value="4" label="Mobile Device"/>
- <int value="5" label="DVD"/>
-</enum>
-
-<enum name="CrosDisksFilesystemType" type="int">
- <int value="0" label="Unknown"/>
- <int value="1" label="Others"/>
- <int value="2" label="FAT"/>
- <int value="3" label="exFAT"/>
- <int value="4" label="NTFS"/>
- <int value="5" label="HFS+"/>
- <int value="6" label="Ext2"/>
- <int value="7" label="Ext3"/>
- <int value="8" label="Ext4"/>
- <int value="9" label="ISO9660"/>
- <int value="10" label="UDF"/>
-</enum>
-
-<enum name="CrosEventEnum" type="int">
- <int value="0" label="ModemManagerCommandSendFailure"/>
-</enum>
-
-<enum name="CrosFirstRunTutorialCompletionType" type="int">
- <int value="0" label="Was not finished"/>
- <int value="1" label="Finished with &quot;Got It&quot; button"/>
- <int value="2" label="Finished with &quot;Keep Exploring&quot; button"/>
-</enum>
-
-<enum name="CrosShelfClickTarget" type="int">
- <obsolete>
- Deprecated as of 12/2013. Default pinned apps trial is finished.
- </obsolete>
- <int value="0" label="Chrome"/>
- <int value="1" label="AppLauncher"/>
- <int value="2" label="Gmail"/>
- <int value="3" label="Search"/>
- <int value="4" label="Youtube"/>
- <int value="5" label="Doc"/>
- <int value="6" label="Sheets"/>
- <int value="7" label="Slides"/>
- <int value="8" label="PlayMusic"/>
-</enum>
-
-<enum name="DataReductionProxyBypassEventType" type="int">
- <int value="0" label="Short bypass"/>
- <int value="1" label="Long bypass"/>
- <int value="2" label="Bypass due to internal server error"/>
- <int value="3" label="Bypass due to other error"/>
- <int value="4" label="Bypass due to missing via header"/>
-</enum>
-
-<enum name="DataReductionProxyProbeURLFetchResult" type="int">
- <int value="0" label="Internet disconnected"/>
- <int value="1" label="Probe failed, proxy disabled"/>
- <int value="2" label="Probe failed, proxy already disabled"/>
- <int value="3" label="Probe succeeded, proxy enabled"/>
- <int value="4" label="Probe succeeded, proxy already enabled"/>
-</enum>
-
-<enum name="DataReductionProxyPromoAction" type="int">
- <int value="0" label="Dismissed from first screen"/>
- <int value="1" label="Dismissed from second screen"/>
- <int value="2" label="Enabled from first screen"/>
- <int value="3" label="Enabled from second screen"/>
-</enum>
-
-<enum name="DataReductionProxySettingsConversion" type="int">
- <int value="0" label="OFF to OFF"/>
- <int value="1" label="OFF to ON"/>
- <int value="2" label="ON to OFF"/>
- <int value="3" label="ON to ON"/>
-</enum>
-
-<enum name="DataReductionProxyStartupState" type="int">
- <int value="0" label="Proxy not available"/>
- <int value="1" label="Proxy available but not enabled"/>
- <int value="2" label="Proxy available and enabled"/>
-</enum>
-
-<enum name="DevicePermissionActions" type="int">
- <int value="0" label="AllowHttps"/>
- <int value="1" label="AllowHttp"/>
- <int value="2" label="Deny"/>
- <int value="3" label="Cancel"/>
-</enum>
-
-<enum name="DiagnosticsRecoveryRun" type="int">
- <int value="0" label="Recovery not run"/>
- <int value="1" label="Recovery run because of crash"/>
- <int value="2" label="Recovery run by user"/>
-</enum>
-
-<enum name="DiagnosticsResult" type="int">
- <int value="0" label="Not run (regular startup)"/>
- <int value="1" label="Success (crash startup)"/>
- <int value="2" label="Failure (crash startup)"/>
- <int value="3" label="Skipped (crash startup)"/>
-</enum>
-
-<enum name="DiagnosticsTestName" type="int">
- <int value="0" label="Conflicting DLLs Test"/>
- <int value="1" label="Disk Space Test"/>
- <int value="2" label="Install Type Test"/>
- <int value="3" label="JSON Bookmarks Test"/>
- <int value="4" label="JSON Local State Test"/>
- <int value="5" label="JSON Preferences Test"/>
- <int value="6" label="Operating System Test"/>
- <int value="7" label="Path Dictionaries Test"/>
- <int value="8" label="Path Local State Test"/>
- <int value="9" label="Path Resources Test"/>
- <int value="10" label="Path User Data Test"/>
- <int value="11" label="Version Test"/>
- <int value="12" label="SQLite Integrity App Cache Test"/>
- <int value="13" label="SQLite Integrity Archived History Test"/>
- <int value="14" label="SQLite Integrity Cookie Test"/>
- <int value="15" label="SQLite Integrity Database Tracker Test"/>
- <int value="16" label="SQLite Integrity History Test"/>
- <int value="17" label="SQLite Integrity Nss Cert Test"/>
- <int value="18" label="SQLite Integrity Nss Key Test"/>
- <int value="19" label="SQLite Integrity Thumbnails Test"/>
- <int value="20" label="SQLite Integrity Web Data Test"/>
-</enum>
-
-<enum name="DNSEmptyAddressListAndNoError" type="int">
- <int value="0" label="Error reported or Address List is not empty"/>
- <int value="1" label="Success reported but Address List is empty"/>
-</enum>
-
-<enum name="DnsProbe.JobResult" type="int">
- <int value="0" label="SERVERS_UNKNOWN"/>
- <int value="1" label="SERVERS_CORRECT"/>
- <int value="2" label="SERVERS_INCORRECT"/>
- <int value="3" label="SERVERS_FAILING"/>
- <int value="4" label="SERVERS_UNREACHABLE"/>
-</enum>
-
-<enum name="DnsProbe.ObsoleteProbeResult" type="int">
- <int value="0" label="INCONCLUSIVE"/>
- <int value="1" label="NO_INTERNET"/>
- <int value="2" label="BAD_CONFIG"/>
- <int value="3" label="NXDOMAIN"/>
-</enum>
-
-<enum name="DnsProbe.ProbeStatus" type="int">
- <int value="0" label="POSSIBLE"/>
- <int value="1" label="NOT_RUN"/>
- <int value="2" label="STARTED"/>
- <int value="3" label="FINISHED_INCONCLUSIVE"/>
- <int value="4" label="FINISHED_NO_INTERNET"/>
- <int value="5" label="FINISHED_BAD_CONFIG"/>
- <int value="6" label="FINISHED_NXDOMAIN"/>
-</enum>
-
-<enum name="DnsProbe.SystemIsLocalhost" type="int">
- <int value="0" label="Not just 127.0.0.1">
- 127.0.0.1 was not the only nameserver in the system DNS config.
- </int>
- <int value="1" label="Just 127.0.0.1">
- 127.0.0.1 was the only nameserver in the system DNS config.
- </int>
-</enum>
-
-<enum name="DockedAction" type="int">
- <int value="0" label="None"/>
- <int value="1" label="Dock"/>
- <int value="2" label="Undock"/>
- <int value="3" label="Resize"/>
- <int value="4" label="Reorder"/>
- <int value="5" label="Evict"/>
- <int value="6" label="Maximize"/>
- <int value="7" label="Minimize"/>
- <int value="8" label="Restore"/>
- <int value="9" label="Close"/>
-</enum>
-
-<enum name="DockedActionSource" type="int">
- <int value="0" label="Unknown"/>
- <int value="1" label="Mouse"/>
- <int value="2" label="Touch"/>
-</enum>
-
-<enum name="DomainBoundCerts.GetCertResult" type="int">
- <int value="0" label="SYNC_SUCCESS"/>
- <int value="1" label="ASYNC_SUCCESS"/>
- <int value="2" label="ASYNC_CANCELLED"/>
- <int value="3" label="ASYNC_FAILURE_KEYGEN"/>
- <int value="4" label="ASYNC_FAILURE_CREATE_CERT"/>
- <int value="5" label="ASYNC_FAILURE_EXPORT_KEY"/>
- <int value="6" label="ASYNC_FAILURE_UNKNOWN"/>
- <int value="7" label="INVALID_ARGUMENT"/>
- <int value="8" label="UNSUPPORTED_TYPE"/>
- <int value="9" label="TYPE_MISMATCH"/>
- <int value="10" label="WORKER_FAILURE"/>
-</enum>
-
-<enum name="DomainBoundCerts.Support" type="int">
- <int value="0" label="DISABLED"/>
- <int value="1" label="CLIENT_ONLY"/>
- <int value="2" label="CLIENT_AND_SERVER"/>
- <int value="3" label="CLIENT_NO_ECC">
- Channel ID was enabled, but the client did not support elliptic curve key
- generation.
- </int>
- <int value="4" label="CLIENT_BAD_SYSTEM_TIME">
- Channel ID was enabled, but the client had an invalid system time which
- prevented using it.
- </int>
- <int value="5" label="CLIENT_NO_SERVER_BOUND_CERT_SERVICE">
- The SSLClientSocket was created without a ServerBoundCertService.
- </int>
-</enum>
-
-<enum name="DoubleGetExperimentMethods" type="int">
- <int value="0" label="POST"/>
- <int value="1" label="GET_CACHABLE"/>
- <int value="2" label="GET_NON_CACHABLE"/>
-</enum>
-
-<enum name="DownloadContentDisposition" type="int">
- <int value="0" label="Content-Disposition header present"/>
- <int value="1" label="Valid"/>
- <int value="2" label="Has disposition-type"/>
- <int value="3" label="Has unknown disposition-type"/>
- <int value="4" label="Has 'name' attribute"/>
- <int value="5" label="Has 'filename' attribute"/>
- <int value="6" label="Has 'filename*' attribute"/>
- <int value="7" label="Has non-ASCII strings"/>
- <int value="8" label="Has percent encoded strings"/>
- <int value="9" label="Has RFC 2047 encoded strings"/>
- <int value="10" label="Has 'name' attribute only"/>
-</enum>
-
-<enum name="DownloadContentType" type="int">
- <int value="0" label="UNRECOGNIZED"/>
- <int value="1" label="TEXT"/>
- <int value="2" label="IMAGE"/>
- <int value="3" label="AUDIO"/>
- <int value="4" label="VIDEO"/>
- <int value="5" label="OCTET_STREAM"/>
- <int value="6" label="PDF"/>
- <int value="7" label="DOC"/>
- <int value="8" label="XLS"/>
- <int value="9" label="PPT"/>
- <int value="10" label="ARCHIVE"/>
- <int value="11" label="EXE"/>
- <int value="12" label="DMG"/>
- <int value="13" label="CRX"/>
-</enum>
-
-<enum name="DownloadCountType" type="int">
- <int value="0" label="Initiated by Navigation (Obsolete)"/>
- <int value="1" label="Initiated by Context Menu (Obsolete)"/>
- <int value="2" label="Initiated by SavePackage Failure (Obsolete)"/>
- <int value="3" label="Initiated by Drag-n-drop (Obsolete)"/>
- <int value="4" label="Initiated by Renderer (Obsolete)"/>
- <int value="5" label="Initiated and Unthrottled"/>
- <int value="6" label="Completed"/>
- <int value="7" label="Cancelled"/>
- <int value="8" label="Started"/>
- <int value="9" label="Interrupted"/>
- <int value="10" label="Calls to AppendDataToFile (Size) (Obsolete 8/2013)"/>
- <int value="11" label="Calls to AppendDataToFile (Count) (Obsolete 8/2013)"/>
- <int value="12" label="Interrupted at End of Download"/>
- <int value="13" label="Attempt to Append to Detached File"/>
- <int value="14" label="File Missing After Successful Scan"/>
- <int value="15" label="Supports ranges and strong ETag (Obsolete 11/2013)"/>
- <int value="16" label="No WebContents at interruption"/>
- <int value="17" label="Supports ranges and strong validation"/>
-</enum>
-
-<enum name="DownloadDatabaseRecordDroppedType" type="int">
- <int value="0" label="Bad State"/>
- <int value="1" label="Bad Danger Type"/>
-</enum>
-
-<enum name="DownloadDOMEvent" type="int">
- <int value="0" label="GetDownloads"/>
- <int value="1" label="OpenFile"/>
- <int value="2" label="Drag"/>
- <int value="3" label="SaveDangerous"/>
- <int value="4" label="DiscardDangerous"/>
- <int value="5" label="Show"/>
- <int value="6" label="Pause"/>
- <int value="7" label="Remove"/>
- <int value="8" label="Cancel"/>
- <int value="9" label="ClearAll"/>
- <int value="10" label="OpenFolder"/>
- <int value="11" label="Resume"/>
-</enum>
-
-<enum name="DownloadFilePickerResult" type="int">
- <int value="0" label="SAME"/>
- <int value="1" label="DIFFERENT_DIR"/>
- <int value="2" label="DIFFERENT_NAME"/>
- <int value="3" label="CANCEL"/>
-</enum>
-
-<enum name="DownloadFunctions" type="int">
- <int value="0" label="download"/>
- <int value="1" label="search"/>
- <int value="2" label="pause"/>
- <int value="3" label="resume"/>
- <int value="4" label="cancel"/>
- <int value="5" label="erase"/>
- <int value="6" label="set_destination"/>
- <int value="7" label="accept_danger"/>
- <int value="8" label="show"/>
- <int value="9" label="drag"/>
-</enum>
-
-<enum name="DownloadImageType" type="int">
- <int value="0" label="Unrecognized"/>
- <int value="1" label="GIF"/>
- <int value="2" label="JPEG"/>
- <int value="3" label="PNG"/>
- <int value="4" label="TIFF"/>
- <int value="5" label="ICON"/>
- <int value="6" label="WEBP"/>
-</enum>
-
-<enum name="DownloadInterruptedUnknownSizeType" type="int">
- <int value="0" label="Size Known"/>
- <int value="1" label="Size Unknown"/>
-</enum>
-
-<enum name="DownloadItem.DangerousFileType" type="int">
- <int value="0" label="unknown"/>
- <int value="1" label="ad"/>
- <int value="2" label="ade"/>
- <int value="3" label="adp"/>
- <int value="4" label="ah"/>
- <int value="5" label="apk"/>
- <int value="6" label="app"/>
- <int value="7" label="application"/>
- <int value="8" label="asp"/>
- <int value="9" label="asx"/>
- <int value="10" label="bas"/>
- <int value="11" label="bash"/>
- <int value="12" label="bat"/>
- <int value="13" label="cfg"/>
- <int value="14" label="chi"/>
- <int value="15" label="chm"/>
- <int value="16" label="class"/>
- <int value="17" label="cmd"/>
- <int value="18" label="com"/>
- <int value="19" label="command"/>
- <int value="20" label="crt"/>
- <int value="21" label="crx"/>
- <int value="22" label="csh"/>
- <int value="23" label="deb"/>
- <int value="24" label="dex"/>
- <int value="25" label="dll"/>
- <int value="26" label="drv"/>
- <int value="27" label="exe"/>
- <int value="28" label="fxp"/>
- <int value="29" label="grp"/>
- <int value="30" label="hlp"/>
- <int value="31" label="hta"/>
- <int value="32" label="htm"/>
- <int value="33" label="html"/>
- <int value="34" label="htt"/>
- <int value="35" label="inf"/>
- <int value="36" label="ini"/>
- <int value="37" label="ins"/>
- <int value="38" label="isp"/>
- <int value="39" label="jar"/>
- <int value="40" label="jnlp"/>
- <int value="41" label="user.js"/>
- <int value="42" label="js"/>
- <int value="43" label="jse"/>
- <int value="44" label="ksh"/>
- <int value="45" label="lnk"/>
- <int value="46" label="local"/>
- <int value="47" label="mad"/>
- <int value="48" label="maf"/>
- <int value="49" label="mag"/>
- <int value="50" label="mam"/>
- <int value="51" label="manifest"/>
- <int value="52" label="maq"/>
- <int value="53" label="mar"/>
- <int value="54" label="mas"/>
- <int value="55" label="mat"/>
- <int value="56" label="mau"/>
- <int value="57" label="mav"/>
- <int value="58" label="maw"/>
- <int value="59" label="mda"/>
- <int value="60" label="mdb"/>
- <int value="61" label="mde"/>
- <int value="62" label="mdt"/>
- <int value="63" label="mdw"/>
- <int value="64" label="mdz"/>
- <int value="65" label="mht"/>
- <int value="66" label="mhtml"/>
- <int value="67" label="mmc"/>
- <int value="68" label="mof"/>
- <int value="69" label="msc"/>
- <int value="70" label="msh"/>
- <int value="71" label="mshxml"/>
- <int value="72" label="msi"/>
- <int value="73" label="msp"/>
- <int value="74" label="mst"/>
- <int value="75" label="ocx"/>
- <int value="76" label="ops"/>
- <int value="77" label="pcd"/>
- <int value="78" label="pif"/>
- <int value="79" label="pkg"/>
- <int value="80" label="pl"/>
- <int value="81" label="plg"/>
- <int value="82" label="prf"/>
- <int value="83" label="prg"/>
- <int value="84" label="pst"/>
- <int value="85" label="py"/>
- <int value="86" label="pyc"/>
- <int value="87" label="pyw"/>
- <int value="88" label="rb"/>
- <int value="89" label="reg"/>
- <int value="90" label="rpm"/>
- <int value="91" label="scf"/>
- <int value="92" label="scr"/>
- <int value="93" label="sct"/>
- <int value="94" label="sh"/>
- <int value="95" label="shar"/>
- <int value="96" label="shb"/>
- <int value="97" label="shs"/>
- <int value="98" label="shtm"/>
- <int value="99" label="shtml"/>
- <int value="100" label="spl"/>
- <int value="101" label="svg"/>
- <int value="102" label="swf"/>
- <int value="103" label="sys"/>
- <int value="104" label="tcsh"/>
- <int value="105" label="url"/>
- <int value="106" label="vb"/>
- <int value="107" label="vbe"/>
- <int value="108" label="vbs"/>
- <int value="109" label="vsd"/>
- <int value="110" label="vsmacros"/>
- <int value="111" label="vss"/>
- <int value="112" label="vst"/>
- <int value="113" label="vsw"/>
- <int value="114" label="ws"/>
- <int value="115" label="wsc"/>
- <int value="116" label="wsf"/>
- <int value="117" label="wsh"/>
- <int value="118" label="xbap"/>
- <int value="119" label="xht"/>
- <int value="120" label="xhtm"/>
- <int value="121" label="xhtml"/>
- <int value="122" label="xml"/>
- <int value="123" label="xsl"/>
- <int value="124" label="xslt"/>
-</enum>
-
-<enum name="DownloadItem.DangerType" type="int">
- <int value="0" label="NOT_DANGEROUS"/>
- <int value="1" label="DANGEROUS_FILE"/>
- <int value="2" label="DANGEROUS_URL"/>
- <int value="3" label="DANGEROUS_CONTENT"/>
- <int value="4" label="MAYBE_DANGEROUS_CONTENT"/>
- <int value="5" label="UNCOMMON_CONTENT"/>
- <int value="6" label="USER_VALIDATED"/>
- <int value="7" label="DANGEROUS_HOST"/>
- <int value="8" label="POTENTIALLY_UNWANTED"/>
-</enum>
-
-<enum name="DownloadOpenMethod" type="int">
- <int value="0" label="Opened with plaform handler by default"/>
- <int value="1" label="Opened in browser by default"/>
- <int value="2" label="Opened with plaform handler by user choice"/>
-</enum>
-
-<enum name="DownloadOriginStateOnResumption" type="int">
- <int value="0" label="No changes"/>
- <int value="1" label="New redirects"/>
- <int value="2" label="New validators"/>
- <int value="3" label="New redirects + validators"/>
- <int value="4" label="New Content-Disposition"/>
- <int value="5" label="New redirects + Content-Disposition"/>
- <int value="6" label="New validators + Content-Disposition"/>
- <int value="7" label="New redirects + validators + Content-Disposition"/>
-</enum>
-
-<enum name="DownloadSavePackageEvent" type="int">
- <int value="0" label="Started"/>
- <int value="1" label="Cancelled"/>
- <int value="2" label="Finished"/>
- <int value="3" label="Write to already completed file"/>
- <int value="4" label="Write to already failed file"/>
-</enum>
-
-<enum name="DownloadSource" type="int">
- <int value="0" label="Initiated by Save Package on Non-HTML content"/>
- <int value="1" label="Initiated by Drag-and-drop"/>
- <int value="2" label="Initiated by RPC from Renderer"/>
- <int value="3" label="Initiated by Save from Pepper"/>
- <int value="4" label="Initiated by Resumption"/>
-</enum>
-
-<enum name="DriveCacheDBOpenStatus" type="int">
- <int value="0" label="Success"/>
- <int value="1" label="Corrupt database"/>
- <int value="2" label="Unknown recoverable failure"/>
- <int value="3" label="Unrecoverable (disk full?) failure"/>
-</enum>
-
-<enum name="DriveEntryKind" type="int">
- <int value="0" label="Unknown"/>
- <int value="1" label="Item"/>
- <int value="2" label="Site"/>
- <int value="3" label="Document"/>
- <int value="4" label="Spereadsheet"/>
- <int value="5" label="Presentation"/>
- <int value="6" label="Drawing"/>
- <int value="7" label="Table"/>
- <int value="8" label="External app"/>
- <int value="9" label="Folder"/>
- <int value="10" label="File"/>
- <int value="11" label="PDF"/>
-</enum>
-
-<enum name="DriveFileFormat" type="int">
- <int value="0" label="AAC"/>
- <int value="1" label="ASF"/>
- <int value="2" label="AVI"/>
- <int value="3" label="CSV"/>
- <int value="4" label="DOC"/>
- <int value="5" label="DOCX"/>
- <int value="6" label="FLV"/>
- <int value="7" label="JPG"/>
- <int value="8" label="MJPG"/>
- <int value="9" label="MOV"/>
- <int value="10" label="MP3"/>
- <int value="11" label="MP4"/>
- <int value="12" label="MPG"/>
- <int value="13" label="OTHER"/>
- <int value="14" label="PDF"/>
- <int value="15" label="PPT"/>
- <int value="16" label="PPTX"/>
- <int value="17" label="PSD"/>
- <int value="18" label="RAR"/>
- <int value="19" label="WMA"/>
- <int value="20" label="WMV"/>
- <int value="21" label="XLS"/>
- <int value="22" label="XLSX"/>
- <int value="23" label="ZIP"/>
-</enum>
-
-<enum name="DriveMetadataDBInitStatus" type="int">
- <int value="0" label="Success"/>
- <int value="1" label="Not found"/>
- <int value="2" label="Corruption"/>
- <int value="3" label="IO error"/>
- <int value="4" label="Failed to open DB for unknown reason"/>
- <int value="5" label="Incompatible DB format"/>
- <int value="6" label="DB is broken"/>
- <int value="7" label="Opened existing DB."/>
- <int value="8" label="No existing DB was found. Created new DB."/>
- <int value="9" label="Cannot open existing DB. Created new DB."/>
-</enum>
-
-<enum name="EAPInnerProtocol" type="int">
- <int value="0" label="UNKNOWN"/>
- <int value="1" label="NONE"/>
- <int value="2" label="PEAP-MD5"/>
- <int value="3" label="PEAP-MSCHAPV2"/>
- <int value="4" label="TTLS-EAP-MD5"/>
- <int value="5" label="TTLS-EAP-MSCHAPV2"/>
- <int value="6" label="TTLS-MSCHAPV2"/>
- <int value="7" label="TTLS-MSCHAP"/>
- <int value="8" label="TTLS-PAP"/>
- <int value="9" label="TTLS-CHAP"/>
-</enum>
-
-<enum name="EAPOuterProtocol" type="int">
- <int value="0" label="UNKNOWN"/>
- <int value="1" label="LEAP"/>
- <int value="2" label="PEAP"/>
- <int value="3" label="TLS"/>
- <int value="4" label="TTLS"/>
-</enum>
-
-<enum name="EnterpriseDeviceManagementStatus" type="int">
- <summary>
- Status codes produced by DeviceManagementService for requests made to the
- device management server.
- </summary>
- <int value="0" label="SUCCESS"/>
- <int value="1" label="REQUEST_INVALID"/>
- <int value="2" label="REQUEST_FAILED"/>
- <int value="3" label="TEMPORARY_UNAVAILABLE"/>
- <int value="4" label="HTTP_STATUS_ERROR"/>
- <int value="5" label="RESPONSE_DECODING_ERROR"/>
- <int value="6" label="SERVICE_MANAGEMENT_NOT_SUPPORTED"/>
- <int value="7" label="SERVICE_DEVICE_NOT_FOUND"/>
- <int value="8" label="SERVICE_MANAGEMENT_TOKEN_INVALID"/>
- <int value="9" label="SERVICE_ACTIVATION_PENDING"/>
- <int value="10" label="SERVICE_INVALID_SERIAL_NUMBER"/>
- <int value="11" label="SERVICE_DEVICE_ID_CONFLICT"/>
- <int value="12" label="SERVICE_MISSING_LICENSES"/>
- <int value="902" label="SERVICE_POLICY_NOT_FOUND"/>
-</enum>
-
-<enum name="EnterpriseDMTokenType" type="int">
- <summary>
- Result of DMToken operations as defined in
- chrome/browser/policy/enterprise_metrics.h.
- </summary>
- <int value="0" label="Load Succeeded">
- A cached token was successfully loaded from disk.
- </int>
- <int value="1" label="Load Failed">
- Reading a cached token from disk failed.
- </int>
- <int value="2" label="Fetch Requested">
- A token fetch request was sent to the DM server.
- </int>
- <int value="3" label="Fetch Request Failed">
- The request was invalid, or the HTTP request failed.
- </int>
- <int value="4" label="Fetch Server Failed">
- Error HTTP status received, or the DM server failed in another way.
- </int>
- <int value="5" label="Fetch Response Received">
- A response to the fetch request was received.
- </int>
- <int value="6" label="Fetch Bad Response">
- The response received was invalid. This happens when some expected data was
- not present in the response.
- </int>
- <int value="7" label="Fetch Management Not Supported">
- DM server reported that management is not supported.
- </int>
- <int value="8" label="Fetch Device Not Found">
- DM server reported that the given device ID was not found.
- </int>
- <int value="9" label="Fetch OK">DM token successfully retrieved.</int>
- <int value="10" label="Store Succeeded">
- Successfully cached a token to disk.
- </int>
- <int value="11" label="Store Failed">Caching a token to disk failed.</int>
- <int value="12" label="Device ID Conflict">The Device-ID is not unique.</int>
- <int value="13" label="Invalid Serial">
- Serial number rejected by DMServer.
- </int>
- <int value="14" label="Missing Licenses">
- No more licenses available for that domain.
- </int>
-</enum>
-
-<enum name="EnterpriseEnrollmentType" type="int">
- <summary>
- Result of device enrollment as defined in
- chrome/browser/policy/enterprise_metrics.h.
- </summary>
- <int value="0" label="Cancelled">
- The enrollment screen was closed without completing the enrollment process.
- </int>
- <int value="1" label="Started">
- The user submitted credentials and started the enrollment process.
- </int>
- <int value="2" label="Network Failed">
- Enrollment failed due to a network error.
- </int>
- <int value="3" label="Login Failed">
- Enrollment failed because logging in to Gaia failed.
- </int>
- <int value="4" label="Not Supported">
- Enrollment failed because it is not supported for the account used.
- </int>
- <int value="5" label="Policy Failed">
- Enrollment failed because it failed to apply device policy.
- </int>
- <int value="6" label="Other Failed">
- Enrollment failed due to an unexpected error. This currently happens when
- the Gaia auth token is not issued for the DM service, the device cloud
- policy subsystem isn't initialized, or when fetching Gaia tokens fails for
- an unknown reason.
- </int>
- <int value="7" label="OK">Enrollment was successful.</int>
- <int value="8" label="Invalid Serial">
- Serial number doesn't belong to account domain.
- </int>
- <int value="9" label="Auto-enrollment Started">
- Auto-enrollment started automatically after sign-in.
- </int>
- <int value="10" label="Auto-enrollment Failed">Auto-enrollment failed.</int>
- <int value="11" label="Auto-enrollment Retried">
- Auto-enrollment started again after a failure.
- </int>
- <int value="12" label="Auto-enrollment Cancelled">
- User opted-out of auto-enrollment.
- </int>
- <int value="13" label="Auto-enrollment OK">Auto-enrollment OK.</int>
- <int value="14" label="Invalid enrollment mode">
- The enrollment mode has not been sent down or is unknown to the client.
- </int>
- <int value="15" label="Auto-enrollment not supported">
- The enrollment mode can not be set through auto-enrollment.
- </int>
- <int value="16" label="Install attributes timeout">
- Install attributes failed to initialize in time.
- </int>
- <int value="17" label="Wrong user name">
- Re-enrollment attempted with an account from a different domain.
- </int>
- <int value="18" label="Missing licenses">
- No licenses left for that domain.
- </int>
- <int value="19" label="Robot auth code fetch failed">
- Enrollment failed due to an error fetching the device robot authorization
- code from the DM Server.
- </int>
- <int value="20" label="Robot refresh token fetch failed">
- Enrollment failed due to an error fetching the device robot refresh token
- from Gaia.
- </int>
- <int value="21" label="Robot refresh token store failed">
- Enrollment failed due to an error persisting the device robot refresh token
- on the device.
- </int>
- <int value="22" label="Deprovisioned device">
- Enrollment failed because the administrator has deprovisioned the device.
- </int>
-</enum>
-
-<enum name="EnterprisePolicies" type="int">
-<!-- Generated from
- ../../../components/policy/resources/policy_templates.json -->
-
- <int value="1" label="Configure the home page URL"/>
- <int value="2" label="Use New Tab Page as homepage"/>
- <int value="3" label="Set Chrome as Default Browser"/>
- <int value="4" label="Application locale"/>
- <int value="5" label="Enable alternate error pages"/>
- <int value="6" label="Enable search suggestions"/>
- <int value="7" label="Enable network prediction"/>
- <int value="8" label="Disable SPDY protocol"/>
- <int value="9" label="Enable JavaScript"/>
- <int value="10" label="Enable Incognito mode"/>
- <int value="11" label="Disable saving browser history"/>
- <int value="12" label="Enable printing"/>
- <int value="13" label="Enable Google Cloud Print proxy"/>
- <int value="14" label="Enable Safe Browsing"/>
- <int value="15" label="Enable reporting of usage and crash-related data"/>
- <int value="16" label="Enable the password manager"/>
- <int value="17" label="Allow users to show passwords in Password Manager"/>
- <int value="18" label="Enable AutoFill"/>
- <int value="19" label="Specify a list of disabled plugins"/>
- <int value="20" label="Disable synchronization of data with Google"/>
- <int value="21" label="Choose how to specify proxy server settings"/>
- <int value="22" label="Choose how to specify proxy server settings"/>
- <int value="23" label="Address or URL of proxy server"/>
- <int value="24" label="URL to a proxy .pac file"/>
- <int value="25" label="Proxy bypass rules"/>
- <int value="26" label="Supported authentication schemes"/>
- <int value="27"
- label="Disable CNAME lookup when negotiating Kerberos authentication"/>
- <int value="28" label="Include non-standard port in Kerberos SPN"/>
- <int value="29" label="Authentication server whitelist"/>
- <int value="30" label="Kerberos delegation server whitelist"/>
- <int value="31" label="GSSAPI library name"/>
- <int value="32" label="Configure extension installation blacklist"/>
- <int value="33" label="Configure extension installation whitelist"/>
- <int value="34" label="Configure the list of force-installed extensions"/>
- <int value="35" label="Show Home button on toolbar"/>
- <int value="36" label="Disable Developer Tools"/>
- <int value="37" label="Action on startup"/>
- <int value="38" label="URLs to open on startup"/>
- <int value="39" label="Block third party cookies"/>
- <int value="40" label="Enable the default search provider"/>
- <int value="41" label="Default search provider name"/>
- <int value="42" label="Default search provider keyword"/>
- <int value="43" label="Default search provider search URL"/>
- <int value="44" label="Default search provider suggest URL"/>
- <int value="45" label="Default search provider instant URL"/>
- <int value="46" label="Default search provider icon"/>
- <int value="47" label="Default search provider encodings"/>
- <int value="48" label="Default cookies setting"/>
- <int value="49" label="Default images setting"/>
- <int value="50" label="Default JavaScript setting"/>
- <int value="51" label="Default plugins setting"/>
- <int value="52" label="Default popups setting"/>
- <int value="53" label="Default notification setting"/>
- <int value="54" label="Default geolocation setting"/>
- <int value="55" label="Disable support for 3D graphics APIs"/>
- <int value="56" label="Refresh rate for user policy"/>
- <int value="57" label="Default HTML renderer for Google Chrome Frame"/>
- <int value="58"
- label="Always render the following URL patterns in Google Chrome Frame"/>
- <int value="59"
- label="Always render the following URL patterns in the host browser"/>
- <int value="60"
- label="Allow Google Chrome Frame to handle the listed content types"/>
- <int value="61" label="Enable lock when the device become idle or suspended"/>
- <int value="62" label="Enable Instant"/>
- <int value="63" label="Set user data directory"/>
- <int value="64" label="Set download directory"/>
- <int value="65" label="Clear site data on browser shutdown (deprecated)"/>
- <int value="66" label="Specify whether the plugin finder should be disabled"/>
- <int value="67" label="Block cookies on these sites"/>
- <int value="68" label="Allow session only cookies on these sites"/>
- <int value="69" label="Allow images on these sites"/>
- <int value="70" label="Block images on these sites"/>
- <int value="71" label="Allow JavaScript on these sites"/>
- <int value="72" label="Block JavaScript on these sites"/>
- <int value="73" label="Allow plugins on these sites"/>
- <int value="74" label="Block plugins on these sites"/>
- <int value="75" label="Allow popups on these sites"/>
- <int value="76" label="Block popups on these sites"/>
- <int value="77" label="Allow cookies on these sites"/>
- <int value="78" label="Specify a list of enabled plugins"/>
- <int value="79"
- label="Specify a list of plugins that the user can enable or disable"/>
- <int value="80" label="Enable Translate"/>
- <int value="81" label="Allow running plugins that are outdated"/>
- <int value="82" label="Enable Bookmark Bar"/>
- <int value="83" label="Enables or disables bookmark editing"/>
- <int value="84" label="Allow invocation of file selection dialogs"/>
- <int value="85" label="Disable URL protocol schemes"/>
- <int value="86" label="Always runs plugins that require authorization"/>
- <int value="87" label="Set Google Chrome Frame user data directory"/>
- <int value="88" label="Set disk cache directory"/>
- <int value="89" label="Cross-origin HTTP Basic Auth prompts"/>
- <int value="90" label="Refresh rate for Device Policy"/>
- <int value="91" label="Release channel"/>
- <int value="92"
- label="Maximal number of concurrent connections to the proxy server"/>
- <int value="93" label="Incognito mode availability"/>
- <int value="94" label="Enable firewall traversal from remote access client"/>
- <int value="95" label="Enable firewall traversal from remote access host"/>
- <int value="96"
- label="Prevent app promotions from appearing on the new tab page"/>
- <int value="97" label="Import bookmarks from default browser on first run"/>
- <int value="98"
- label="Import browsing history from default browser on first run"/>
- <int value="99" label="Import of homepage from default browser on first run"/>
- <int value="100"
- label="Import search engines from default browser on first run"/>
- <int value="101"
- label="Import saved passwords from default browser on first run"/>
- <int value="102"
- label="Automatically select client certificates for these sites"/>
- <int value="103" label="Block access to a list of URLs"/>
- <int value="104" label="Allows access to a list of URLs"/>
- <int value="105" label="Allow notifications on these sites"/>
- <int value="106" label="Block notifications on these sites"/>
- <int value="107" label="User-level network configuration"/>
- <int value="108" label="Device-level network configuration"/>
- <int value="109"
- label="Enable submission of documents to Google Cloud Print"/>
- <int value="110" label="Set disk cache size in bytes"/>
- <int value="111" label="Set media disk cache size in bytes"/>
- <int value="112" label="Enterprise web store URL (deprecated)"/>
- <int value="113" label="Enterprise web store name (deprecated)"/>
- <int value="114" label="Enable TLS domain-bound certificates extension"/>
- <int value="115" label="Enable reporting memory info (JS heap size) to page"/>
- <int value="116" label="Proxy settings"/>
- <int value="117" label="Disable Print Preview"/>
- <int value="118" label="Disable SSL record splitting"/>
- <int value="119" label="Report OS and firmware version"/>
- <int value="120" label="Report device activity times"/>
- <int value="121" label="Report device boot mode"/>
- <int value="122" label="Login user white list"/>
- <int value="123" label="Allow creation of new user accounts"/>
- <int value="124" label="Enable guest mode"/>
- <int value="125" label="Show usernames on login screen"/>
- <int value="126" label="Enable data roaming"/>
- <int value="127" label="Enable metrics reporting"/>
- <int value="128" label="Wipe user data on sign-out"/>
- <int value="129" label="Whether online OCSP/CRL checks are performed"/>
- <int value="130" label="Timeout until idle user log-out is executed"/>
- <int value="131" label="Duration of the idle log-out warning message"/>
- <int value="132"
- label="Screen saver to be used on the sign-in screen in retail mode"/>
- <int value="133"
- label="Duration of inactivity before the screen saver is shown on the
- sign-in screen in retail mode"/>
- <int value="134"
- label="Whether the release channel should be configurable by the user"/>
- <int value="135" label="List of AppPack extensions"/>
- <int value="136" label="Disables Auto Update"/>
- <int value="137" label="Load specified urls on demo login"/>
- <int value="138"
- label="Continue running background apps when Google Chrome is closed"/>
- <int value="139" label="Disables Drive in the Chrome OS Files app"/>
- <int value="140"
- label="Disables Google Drive over Cellular connections in the Chrome OS
- Files app"/>
- <int value="141"
- label="Additional command line parameters for Google Chrome"/>
- <int value="142" label="Target Auto Update Version"/>
- <int value="143" label="Report device location"/>
- <int value="144" label="List of pinned apps to show in the launcher"/>
- <int value="145" label="Auto update scatter factor"/>
- <int value="146" label="Connection types allowed for updates"/>
- <int value="147"
- label="Restrict which users are allowed to sign in to Google Chrome"/>
- <int value="148"
- label="Configure extension, app, and user script install sources"/>
- <int value="149" label="Default mediastream setting"/>
- <int value="150"
- label="Disable proceeding from the Safe Browsing warning page"/>
- <int value="151" label="Enable or disable spell checking web service"/>
- <int value="152" label="Disable mounting of external storage"/>
- <int value="153" label="Disable taking screenshots"/>
- <int value="154"
- label="Configure the required domain name for remote access hosts"/>
- <int value="155"
- label="Enable two-factor authentication for remote access hosts"/>
- <int value="156"
- label="Configure the TalkGadget prefix for remote access hosts"/>
- <int value="157" label="Enable curtaining of remote access hosts"/>
- <int value="158" label="Timezone"/>
- <int value="159" label="Allow playing audio"/>
- <int value="160" label="Allow or deny audio capture"/>
- <int value="161"
- label="List of alternate URLs for the default search provider"/>
- <int value="162" label="Force SafeSearch"/>
- <int value="163" label="Device-local accounts"/>
- <int value="164" label="Add a logout button to the system tray"/>
- <int value="165" label="Use built-in DNS client"/>
- <int value="166" label="Control shelf auto-hiding"/>
- <int value="167" label="Allow or deny video capture"/>
- <int value="168" label="Configure allowed app/extension types"/>
- <int value="169" label="Set the display name for device-local accounts"/>
- <int value="170" label="Limit the session length"/>
- <int value="171"
- label="Parameter controlling search term placement for the default
- search provider"/>
- <int value="172" label="Screen dim delay when running on AC power"/>
- <int value="173" label="Screen off delay when running on AC power"/>
- <int value="174" label="Screen lock delay when running on AC power"/>
- <int value="175" label="Idle delay when running on AC power"/>
- <int value="176" label="Screen dim delay when running on battery power"/>
- <int value="177" label="Screen off delay when running on battery power"/>
- <int value="178" label="Screen lock delay when running on battery power"/>
- <int value="179" label="Idle delay when running on battery power"/>
- <int value="180" label="Action to take when the idle delay is reached"/>
- <int value="181" label="Action to take when the user closes the lid"/>
- <int value="182"
- label="Specify whether audio activity affects power management"/>
- <int value="183"
- label="Specify whether video activity affects power management"/>
- <int value="184"
- label="Percentage by which to scale the idle delay in presentation mode
- (deprecated)"/>
- <int value="185"
- label="Allow users to redeem offers through Chrome OS Registration"/>
- <int value="186" label="Set the Terms of Service for a device-local account"/>
- <int value="187" label="Enable deleting browser and download history"/>
- <int value="188" label="Show accessibility options in system tray menu"/>
- <int value="189"
- label="Hide the web store from the new tab page and app launcher"/>
- <int value="190" label="Allows sign in to Chrome"/>
- <int value="191" label="System wide flags to be applied on Chrome start-up"/>
- <int value="192" label="Limit device uptime by automatically rebooting"/>
- <int value="193" label="Automatically reboot after update"/>
- <int value="194" label="Public session for auto-login"/>
- <int value="195" label="Public session auto-login timer"/>
- <int value="196"
- label="Set the restriction on the fetching of the Variations seed"/>
- <int value="197" label="Idle warning delay when running on AC power"/>
- <int value="198" label="Idle warning delay when running on battery power"/>
- <int value="199"
- label="Set the restriction on the fetching of the Variations seed"/>
- <int value="200" label="Enable remote attestation for the user"/>
- <int value="201"
- label="Extensions allowed to to use the remote attestation API"/>
- <int value="202" label="Enable bailout keyboard shortcut for auto-login"/>
- <int value="203" label="Allow screen wake locks"/>
- <int value="204" label="Default behavior for sites not in any content pack"/>
- <int value="205" label="Managed user manual exception hosts"/>
- <int value="206" label="Managed user manual exception URLs"/>
- <int value="207" label="Enable remote attestation for the device"/>
- <int value="208"
- label="URLs that will be granted access to audio capture devices
- without prompt"/>
- <int value="209"
- label="URLs that will be granted access to video capture devices
- without prompt"/>
- <int value="210"
- label="Percentage by which to scale the screen dim delay if the user
- becomes active after dimming"/>
- <int value="211" label="Enable large cursor"/>
- <int value="212" label="Enable spoken feedback"/>
- <int value="213" label="Enable high contrast mode"/>
- <int value="214" label="Set screen magnifier type"/>
- <int value="215"
- label="Set default state of the large cursor on the login screen"/>
- <int value="216"
- label="Set the default state of spoken feedback on the login screen"/>
- <int value="217"
- label="Set the default state of high contrast mode on the login screen"/>
- <int value="218"
- label="Set the default screen magnifier type enabled on the login
- screen"/>
- <int value="219" label="Enable supervised users"/>
- <int value="220"
- label="Percentage by which to scale the screen dim delay in
- presentation mode"/>
- <int value="221" label="Suppress the Google Chrome Frame turndown prompt"/>
- <int value="222"
- label="Action to take when the idle delay is reached while running on
- battery power"/>
- <int value="223" label="Enable creation of supervised users"/>
- <int value="224" label="Report device network interfaces"/>
- <int value="225" label="Power mangement on the login screen"/>
- <int value="226"
- label="Action to take when the idle delay is reached while running on
- AC power"/>
- <int value="227" label="Managed Bookmarks"/>
- <int value="228" label="Maximum fetch delay after a policy invalidation"/>
- <int value="229"
- label="Parameter providing search-by-image feature for the default
- search provider"/>
- <int value="230" label="Parameters for search URL which uses POST"/>
- <int value="231" label="Parameters for suggest URL which uses POST"/>
- <int value="232" label="Parameters for instant URL which uses POST"/>
- <int value="233" label="Parameters for image URL which uses POST"/>
- <int value="234" label="Enable or disable PIN-less authentication"/>
- <int value="235"
- label="Whether online OCSP/CRL checks are required for local trust
- anchors"/>
- <int value="236" label="Use 24 hour clock by default"/>
- <int value="237" label="Default search provider new tab page URL"/>
- <int value="238" label="Skip the meta tag check in Google Chrome Frame"/>
- <int value="239"
- label="Enable the use of remote attestation for content protection for
- the device"/>
- <int value="240" label="Allow fullscreen mode"/>
- <int value="241" label="Enable the data compression proxy feature"/>
- <int value="242" label="Auto update p2p enabled"/>
- <int value="243" label="Allow autoupdate downloads via HTTP"/>
- <int value="244" label="Control the user behavior in a multiprofile session"/>
- <int value="245" label="Ephemeral profile"/>
- <int value="246"
- label="Selects the strategy used to free up disk space during automatic
- clean-up"/>
- <int value="247"
- label="Specify whether power management delays and the session length
- limit should only start running after initial user activity in a
- session"/>
- <int value="248" label="Report device users"/>
- <int value="249" label="User avatar image"/>
- <int value="250" label="Enable network configuration prompt when offline"/>
-</enum>
-
-<enum name="EnterprisePolicyInvalidations" type="int">
- <int value="0" label="No payload"/>
- <int value="1" label="Payload"/>
-</enum>
-
-<enum name="EnterprisePolicyLoadStatus" type="int">
- <summary>
- Status codes produced by the policy loaders that pull policy settings from
- the platform-specific management infrastructure, such as Windows Group
- Policy.
- </summary>
- <int value="0" label="STARTED">
- Policy load attempt started. This gets logged for each policy load attempt
- to get a baseline on the number of requests, and an arbitrary number of the
- below status codes may get added in addition.
- </int>
- <int value="1" label="QUERY_FAILED">
- System failed to determine whether there's policy.
- </int>
- <int value="2" label="NO_POLICY">No policy present.</int>
- <int value="3" label="INACCCESSIBLE">
- Data inaccessible, such as non-local policy file.
- </int>
- <int value="4" label="MISSING">
- Data missing, such as policy file not present.
- </int>
- <int value="5" label="WOW64_REDIRECTION_DISABLED">
- Trying with Wow64 redirection disabled.
- </int>
- <int value="6" label="READ_ERROR">
- Data read error, for example file reading errors.
- </int>
- <int value="7" label="TOO_BIG">Data too large to process.</int>
- <int value="8" label="PARSE_ERROR">Parse error.</int>
-</enum>
-
-<enum name="EnterprisePolicyRefresh" type="int">
- <int value="0" label="Changed"/>
- <int value="1" label="Changed; Invalidations disabled"/>
- <int value="2" label="Unchanged"/>
- <int value="3" label="Invalidated; Changed"/>
- <int value="4" label="Invalidated; Unchanged"/>
-</enum>
-
-<enum name="EnterprisePolicyType" type="int">
- <summary>
- Result of Policy operations as defined in
- chrome/browser/policy/enterprise_metrics.h.
- </summary>
- <int value="0" label="Load Succeeded">
- A cached policy was successfully loaded from disk.
- </int>
- <int value="1" label="Load Failed">
- Reading a cached policy from disk failed.
- </int>
- <int value="2" label="Fetch Requested">
- A policy fetch request was sent to the DM server.
- </int>
- <int value="3" label="Fetch Request Failed">
- The request was invalid, or the HTTP request failed.
- </int>
- <int value="4" label="Fetch Server Failed">
- Error HTTP status received, or the DM server failed in another way.
- </int>
- <int value="5" label="Fetch Not Found">
- Policy not found for the given user or device.
- </int>
- <int value="6" label="Fetch Invalid Token">
- DM server didn't accept the token used in the request.
- </int>
- <int value="7" label="Fetch Response Received">
- A response to the policy fetch request was received.
- </int>
- <int value="8" label="Fetch Bad Response">
- The policy response message didn't contain a policy, or other data was
- missing.
- </int>
- <int value="9" label="Fetch Invalid Policy">Failed to decode the policy.</int>
- <int value="10" label="Fetch Bad Signature">
- The device policy was rejected because its signature was invalid.
- </int>
- <int value="11" label="Fetch Timestamp In Future">
- Rejected policy because its timestamp is in the future.
- </int>
- <int value="12" label="Fetch Non Enterprise Device">
- Device policy rejected because the device is not managed.
- </int>
- <int value="13" label="Fetch User Mismatch">
- The policy was provided for a username that is different from the device
- owner, and the policy was rejected.
- </int>
- <int value="14" label="Fetch Other Failed">
- The policy was rejected for another reason. Currently this can happen only
- for device policies, when the SignedSettings fail to store or retrieve a
- stored policy.
- </int>
- <int value="15" label="Fetch OK">The fetched policy was accepted.</int>
- <int value="16" label="Fetch Not Modified">
- The policy just fetched didn't have any changes compared to the cached
- policy.
- </int>
- <int value="17" label="Store Succeeded">
- Successfully cached a policy to disk.
- </int>
- <int value="18" label="Store Failed">Caching a policy to disk failed.</int>
-</enum>
-
-<enum name="ErrorCodesGetAdaptersAddresses" type="int">
- <int value="8" label="ERROR_NOT_ENOUGH_MEMORY"/>
- <int value="87" label="ERROR_INVALID_PARAMETER"/>
- <int value="111" label="ERROR_BUFFER_OVERFLOW"/>
- <int value="232" label="ERROR_NO_DATA"/>
- <int value="1228" label="ERROR_ADDRESS_NOT_ASSOCIATED"/>
-</enum>
-
-<enum name="ErrorCodesGetaddrinfo_All" type="int">
- <int value="1" label="EAI_BADFLAGS(L)"/>
- <int value="2" label="EAI_NONAME(L) EAI_AGAIN(M)"/>
- <int value="3" label="EAI_AGAIN(L) EAI_BADFLAGS(M)"/>
- <int value="4" label="EAI_FAIL"/>
- <int value="5" label="EAI_NODATA(L) EAI_FAMILY(M)"/>
- <int value="6" label="WSA_INVALID_HANDLE EAI_FAMILY(L) EAI_MEMORY(M)"/>
- <int value="7" label="EAI_SOCKTYPE(L) EAI_NODATA(M)"/>
- <int value="8" label="WSA_NOT_ENOUGH_MEMORY EAI_SERVICE(L) EAI_NONAME(M)"/>
- <int value="9" label="EAI_ADDRFAMILY EAI_SERVICE(M)"/>
- <int value="10" label="EAI_MEMORY(L) EAI_SOCKTYPE(L)"/>
- <int value="11" label="EAI_SYSTEM"/>
- <int value="12" label="EAI_OVERFLOW"/>
- <int value="10022" label="WSAEINVAL"/>
- <int value="10044" label="WSAESOCKTNOSUPPORT"/>
- <int value="10047" label="WSAEAFNOSUPPORT"/>
- <int value="10093" label="WSANOTINITIALISED"/>
- <int value="10109" label="WSA_TYPE_NOT_FOUND"/>
- <int value="11001" label="WSA_HOST_NOT_FOUND"/>
- <int value="11002" label="WSATRY_AGAIN"/>
- <int value="11003" label="WSA_ANO_RECOVERY"/>
- <int value="11004" label="WSANO_DATA"/>
-</enum>
-
-<enum name="ErrorCodesGetaddrinfo_Linux" type="int">
- <int value="1" label="EAI_BADFLAGS"/>
- <int value="2" label="EAI_NONAME"/>
- <int value="3" label="EAI_AGAIN"/>
- <int value="4" label="EAI_FAIL"/>
- <int value="5" label="EAI_NODATA"/>
- <int value="6" label="EAI_FAMILY"/>
- <int value="7" label="EAI_SOCKTYPE"/>
- <int value="8" label="EAI_SERVICE"/>
- <int value="9" label="EAI_ADDRFAMILY"/>
- <int value="10" label="EAI_MEMORY"/>
- <int value="11" label="EAI_SYSTEM"/>
- <int value="12" label="EAI_OVERFLOW"/>
-</enum>
-
-<enum name="ErrorCodesGetaddrinfo_Mac" type="int">
- <int value="1" label="EAI_ADDRFAMILY"/>
- <int value="2" label="EAI_AGAIN"/>
- <int value="3" label="EAI_BADFLAGS"/>
- <int value="4" label="EAI_FAIL"/>
- <int value="5" label="EAI_FAMILY"/>
- <int value="6" label="EAI_MEMORY"/>
- <int value="7" label="EAI_NODATA"/>
- <int value="8" label="EAI_NONAME"/>
- <int value="9" label="EAI_SERVICE"/>
- <int value="10" label="EAI_SOCKTYPE"/>
- <int value="11" label="EAI_SYSTEM"/>
- <int value="12" label="EAI_BADHINTS"/>
- <int value="13" label="EAI_PROTOCOL"/>
- <int value="14" label="EAI_OVERFLOW"/>
-</enum>
-
-<enum name="ErrorCodesGetaddrinfo_Win" type="int">
- <int value="6" label="WSA_INVALID_HANDLE"/>
- <int value="8" label="WSA_NOT_ENOUGH_MEMORY or EAI_SERVICE"/>
- <int value="10022" label="WSAEINVAL"/>
- <int value="10044" label="WSAESOCKTNOSUPPORT"/>
- <int value="10047" label="WSAEAFNOSUPPORT"/>
- <int value="10093" label="WSANOTINITIALISED"/>
- <int value="10109" label="WSA_TYPE_NOT_FOUND"/>
- <int value="11001" label="WSA_HOST_NOT_FOUND"/>
- <int value="11002" label="WSATRY_AGAIN"/>
- <int value="11003" label="WSA_ANO_RECOVERY"/>
- <int value="11004" label="WSANO_DATA"/>
-</enum>
-
-<enum name="ExecutionPhase" type="int">
- <int value="0" label="UNINITIALIZED_PHASE"/>
- <int value="100" label="START_METRICS_RECORDING"/>
- <int value="200" label="CREATE_PROFILE"/>
- <int value="300" label="STARTUP_TIMEBOMB_ARM"/>
- <int value="400" label="THREAD_WATCHER_START"/>
- <int value="500" label="MAIN_MESSAGE_LOOP_RUN"/>
- <int value="600" label="SHUTDOWN_TIMEBOMB_ARM"/>
- <int value="700" label="SHUTDOWN_COMPLETE"/>
-</enum>
-
-<enum name="ExtensionBackgroundPageType" type="int">
- <int value="0" label="None"/>
- <int value="1" label="Persistent"/>
- <int value="2" label="Event Page"/>
-</enum>
-
-<enum name="ExtensionDisabledUIUserResponse" type="int">
- <int value="0" label="IGNORED"/>
- <int value="1" label="REENABLE"/>
- <int value="2" label="UNINSTALL"/>
-</enum>
-
-<enum name="ExtensionFileWriteResult" type="int">
- <obsolete>
- Deprecated 10/2013.
- </obsolete>
- <int value="0" label="SUCCESS"/>
- <int value="1" label="CANT_CREATE_TEMP_CRX"/>
- <int value="2" label="CANT_WRITE_CRX_DATA"/>
- <int value="3" label="CANT_READ_CRX_FILE"/>
-</enum>
-
-<enum name="ExtensionFromWebstoreInconcistencyEnum" type="int">
- <int value="0" label="Non-webstore update URL"/>
- <int value="1" label="External install location"/>
-</enum>
-
-<enum name="ExtensionFunctions" type="int">
-<!-- Generated from ../../../chrome/browser/extensions/extension_function_histogram_value.h -->
-
- <int value="0" label="UNKNOWN"/>
- <int value="1" label="WEBNAVIGATION_GETALLFRAMES"/>
- <int value="2" label="BROWSINGDATA_REMOVEWEBSQL"/>
- <int value="3" label="ALARMS_CREATE"/>
- <int value="4" label="FILEBROWSERPRIVATE_REMOVEFILEWATCH"/>
- <int value="5" label="COOKIES_GET"/>
- <int value="6" label="FONTSETTINGS_GETMINIMUMFONTSIZE"/>
- <int value="7" label="CHROMEOSINFOPRIVATE_GET"/>
- <int value="8" label="BOOKMARKMANAGERPRIVATE_CUT"/>
- <int value="9" label="TABS_CAPTUREVISIBLETAB"/>
- <int value="10" label="MANAGEMENT_SETENABLED"/>
- <int value="11" label="HISTORY_DELETEALL"/>
- <int value="12" label="STORAGE_GET"/>
- <int value="13" label="SOCKET_SETKEEPALIVE"/>
- <int value="14" label="DOWNLOADS_CANCEL"/>
- <int value="15" label="BOOKMARKS_CREATE"/>
- <int value="16" label="BOOKMARKS_UPDATE"/>
- <int value="17" label="FILEBROWSERPRIVATE_GETDRIVEFILES"/>
- <int value="18" label="TERMINALPRIVATE_ONTERMINALRESIZE"/>
- <int value="19" label="DELETED_FILEBROWSERPRIVATE_REQUESTDIRECTORYREFRESH"/>
- <int value="20" label="BLUETOOTH_GETADAPTERSTATE"/>
- <int value="21" label="FILEBROWSERPRIVATE_CANCELFILETRANSFERS"/>
- <int value="22" label="FILEBROWSERPRIVATE_PINDRIVEFILE"/>
- <int value="23" label="SOCKET_WRITE"/>
- <int value="24" label="OMNIBOX_SETDEFAULTSUGGESTION"/>
- <int value="25" label="TTS_SPEAK"/>
- <int value="26" label="WALLPAPERPRIVATE_RESTOREMINIMIZEDWINDOWS"/>
- <int value="27" label="BROWSINGDATA_REMOVEHISTORY"/>
- <int value="28" label="DELETED_FILEBROWSERPRIVATE_ISFULLSCREEN"/>
- <int value="29" label="AUTOTESTPRIVATE_LOGOUT"/>
- <int value="30" label="EXPERIMENTAL_HISTORY_GETMOSTVISITED"/>
- <int value="31" label="BLUETOOTH_DISCONNECT"/>
- <int value="32" label="BLUETOOTH_SETOUTOFBANDPAIRINGDATA"/>
- <int value="33" label="BOOKMARKMANAGERPRIVATE_CANPASTE"/>
- <int value="34" label="AUTOTESTPRIVATE_RESTART"/>
- <int value="35" label="USB_CLAIMINTERFACE"/>
- <int value="36" label="MEDIAPLAYERPRIVATE_SETWINDOWHEIGHT"/>
- <int value="37" label="DELETED_EXPERIMENTAL_PROCESSES_GETPROCESSINFO"/>
- <int value="38" label="HISTORY_GETVISITS"/>
- <int value="39" label="SOCKET_BIND"/>
- <int value="40" label="TABS_MOVE"/>
- <int value="41" label="SOCKET_DISCONNECT"/>
- <int value="42" label="FILESYSTEM_GETWRITABLEENTRY"/>
- <int value="43" label="SYNCFILESYSTEM_REQUESTFILESYSTEM"/>
- <int value="44" label="COMMANDS_GETALL"/>
- <int value="45" label="EXPERIMENTAL_DISCOVERY_REMOVESUGGESTION"/>
- <int value="46" label="VIRTUALKEYBOARDPRIVATE_SENDKEYEVENT"/>
- <int value="47" label="BOOKMARKMANAGERPRIVATE_GETSUBTREE"/>
- <int value="48" label="DELETED_EXPERIMENTAL_RLZ_RECORDPRODUCTEVENT"/>
- <int value="49" label="BOOKMARKS_GETRECENT"/>
- <int value="50" label="APP_CURRENTWINDOWINTERNAL_SETBOUNDS"/>
- <int value="51" label="CLOUDPRINTPRIVATE_SETUPCONNECTOR"/>
- <int value="52" label="SERIAL_SETCONTROLSIGNALS"/>
- <int value="53" label="DELETED_FILEBROWSERPRIVATE_SETLASTMODIFIED"/>
- <int value="54" label="IDLE_SETDETECTIONINTERVAL"/>
- <int value="55" label="FILEBROWSERPRIVATE_GETFILETASKS"/>
- <int value="56" label="WEBSTOREPRIVATE_GETSTORELOGIN"/>
- <int value="57" label="SYSTEMPRIVATE_GETINCOGNITOMODEAVAILABILITY"/>
- <int value="58" label="IDLTEST_SENDARRAYBUFFERVIEW"/>
- <int value="59" label="SOCKET_SETNODELAY"/>
- <int value="60" label="APP_CURRENTWINDOWINTERNAL_SHOW"/>
- <int value="61" label="WEBSTOREPRIVATE_GETBROWSERLOGIN"/>
- <int value="62" label="EXPERIMENTAL_IDENTITY_GETAUTHTOKEN"/>
- <int value="63" label="DELETED_SYSTEMINFO_DISPLAY_GETDISPLAYINFO"/>
- <int value="64" label="BROWSINGDATA_REMOVEPLUGINDATA"/>
- <int value="65" label="SOCKET_LISTEN"/>
- <int value="66" label="MEDIAGALLERIES_GETMEDIAFILESYSTEMS"/>
- <int value="67" label="DOWNLOADS_OPEN"/>
- <int value="68" label="TABS_EXECUTESCRIPT"/>
- <int value="69" label="SYNCFILESYSTEM_GETUSAGEANDQUOTA"/>
- <int value="70" label="INPUTMETHODPRIVATE_GET"/>
- <int value="71" label="USB_CLOSEDEVICE"/>
- <int value="72" label="TTS_STOP"/>
- <int value="73" label="DELETED_SERIAL_GETPORTS"/>
- <int value="74" label="DELETED_FILEBROWSERPRIVATE_CLEARDRIVECACHE"/>
- <int value="75" label="SERIAL_GETCONTROLSIGNALS"/>
- <int value="76" label="DEVELOPERPRIVATE_ENABLE"/>
- <int value="77" label="FILEBROWSERPRIVATE_GETDRIVEFILEPROPERTIES"/>
- <int value="78" label="USB_FINDDEVICES"/>
- <int value="79" label="BOOKMARKMANAGERPRIVATE_DROP"/>
- <int value="80" label="DELETED_FILEBROWSERPRIVATE_GETFILETRANSFERS"/>
- <int value="81" label="INPUT_IME_SETMENUITEMS"/>
- <int value="82" label="BOOKMARKS_EXPORT"/>
- <int value="83" label="HISTORY_SEARCH"/>
- <int value="84" label="TTSENGINE_SENDTTSEVENT"/>
- <int value="85" label="EXPERIMENTAL_ACCESSIBILITY_GETALERTSFORTAB"/>
- <int value="86" label="BOOKMARKS_IMPORT"/>
- <int value="87" label="SYNCFILESYSTEM_DELETEFILESYSTEM"/>
- <int value="88" label="DEBUGGER_SENDCOMMAND"/>
- <int value="89" label="DEBUGGER_DETACH"/>
- <int value="90" label="METRICSPRIVATE_RECORDSMALLCOUNT"/>
- <int value="91" label="APP_CURRENTWINDOWINTERNAL_MINIMIZE"/>
- <int value="92" label="DEVELOPERPRIVATE_AUTOUPDATE"/>
- <int value="93" label="DNS_RESOLVE"/>
- <int value="94" label="DELETED_EXPERIMENTAL_SYSTEMINFO_MEMORY_GET"/>
- <int value="95" label="HISTORY_ADDURL"/>
- <int value="96" label="TABS_GET"/>
- <int value="97" label="BROWSERACTION_SETBADGETEXT"/>
- <int value="98" label="TABS_RELOAD"/>
- <int value="99" label="WINDOWS_CREATE"/>
- <int value="100" label="DEVELOPERPRIVATE_LOADUNPACKED"/>
- <int value="101" label="DELETED_DOWNLOADS_SETDESTINATION"/>
- <int value="102" label="DELETED_EXPERIMENTAL_PROCESSES_GETPROCESSIDFORTAB"/>
- <int value="103" label="BOOKMARKS_GETCHILDREN"/>
- <int value="104" label="BROWSERACTION_GETTITLE"/>
- <int value="105" label="TERMINALPRIVATE_OPENTERMINALPROCESS"/>
- <int value="106" label="DELETED_SERIAL_CLOSE"/>
- <int value="107" label="CONTEXTMENUS_REMOVE"/>
- <int value="108" label="FILEBROWSERPRIVATE_REQUESTFILESYSTEM"/>
- <int value="109" label="ECHOPRIVATE_GETREGISTRATIONCODE"/>
- <int value="110" label="TABS_GETCURRENT"/>
- <int value="111" label="FONTSETTINGS_CLEARDEFAULTFIXEDFONTSIZE"/>
- <int value="112" label="MEDIAPLAYERPRIVATE_CLOSEWINDOW"/>
- <int value="113" label="WEBREQUESTINTERNAL_ADDEVENTLISTENER"/>
- <int value="114" label="CLOUDPRINTPRIVATE_GETPRINTERS"/>
- <int value="115" label="STORAGE_SET"/>
- <int value="116" label="FONTSETTINGS_GETDEFAULTFONTSIZE"/>
- <int value="117" label="EXTENSION_SETUPDATEURLDATA"/>
- <int value="118" label="DELETED_SERIAL_WRITE"/>
- <int value="119" label="IDLE_QUERYSTATE"/>
- <int value="120" label="DELETED_EXPERIMENTAL_RLZ_GETACCESSPOINTRLZ"/>
- <int value="121" label="WEBSTOREPRIVATE_SETSTORELOGIN"/>
- <int value="122" label="PAGEACTIONS_ENABLEFORTAB"/>
- <int value="123" label="COOKIES_SET"/>
- <int value="124" label="CONTENTSETTINGS_SET"/>
- <int value="125" label="CONTEXTMENUS_REMOVEALL"/>
- <int value="126" label="TABS_INSERTCSS"/>
- <int value="127" label="WEBREQUEST_HANDLERBEHAVIORCHANGED"/>
- <int value="128" label="INPUT_IME_SETCURSORPOSITION"/>
- <int value="129" label="OMNIBOX_SENDSUGGESTIONS"/>
- <int value="130" label="SYSTEMINDICATOR_ENABLE"/>
- <int value="131" label="EVENTS_GETRULES"/>
- <int value="132" label="BOOKMARKMANAGERPRIVATE_COPY"/>
- <int value="133" label="SOCKET_RECVFROM"/>
- <int value="134" label="TABS_GETALLINWINDOW"/>
- <int value="135" label="CONTEXTMENUS_UPDATE"/>
- <int value="136" label="BOOKMARKS_SEARCH"/>
- <int value="137" label="EXPERIMENTAL_APP_CLEARALLNOTIFICATIONS"/>
- <int value="138" label="BLUETOOTH_GETLOCALOUTOFBANDPAIRINGDATA"/>
- <int value="139" label="SYSTEMPRIVATE_GETUPDATESTATUS"/>
- <int value="140" label="FONTSETTINGS_CLEARMINIMUMFONTSIZE"/>
- <int value="141" label="DELETED_FILEBROWSERPRIVATE_GETFILELOCATIONS"/>
- <int value="142" label="EXPERIMENTAL_DISCOVERY_SUGGEST"/>
- <int value="143" label="FILEBROWSERPRIVATE_SETDEFAULTTASK"/>
- <int value="144" label="BROWSERACTION_GETBADGETEXT"/>
- <int value="145" label="APP_CURRENTWINDOWINTERNAL_HIDE"/>
- <int value="146" label="SOCKET_CONNECT"/>
- <int value="147" label="BOOKMARKS_GETSUBTREE"/>
- <int value="148" label="HISTORY_DELETEURL"/>
- <int value="149"
- label="DELETED_EXPERIMENTAL_MEDIAGALLERIES_ASSEMBLEMEDIAFILE"/>
- <int value="150" label="BOOKMARKMANAGERPRIVATE_STARTDRAG"/>
- <int value="151" label="BROWSINGDATA_REMOVEPASSWORDS"/>
- <int value="152" label="DOWNLOADS_DRAG"/>
- <int value="153" label="INPUT_IME_SETCOMPOSITION"/>
- <int value="154" label="METRICSPRIVATE_RECORDUSERACTION"/>
- <int value="155" label="USB_RELEASEINTERFACE"/>
- <int value="156" label="PAGEACTION_GETPOPUP"/>
- <int value="157" label="SCRIPTBADGE_GETATTENTION"/>
- <int value="158" label="FONTSETTINGS_GETFONTLIST"/>
- <int value="159" label="PERMISSIONS_CONTAINS"/>
- <int value="160" label="SCRIPTBADGE_GETPOPUP"/>
- <int value="161" label="EXPERIMENTAL_ACCESSIBILITY_GETFOCUSEDCONTROL"/>
- <int value="162" label="DEVELOPERPRIVATE_GETSTRINGS"/>
- <int value="163" label="METRICSPRIVATE_RECORDMEDIUMCOUNT"/>
- <int value="164" label="MANAGEMENT_GET"/>
- <int value="165" label="PERMISSIONS_GETALL"/>
- <int value="166" label="DOWNLOADS_SHOW"/>
- <int value="167" label="DELETED_EXPERIMENTAL_RLZ_CLEARPRODUCTSTATE"/>
- <int value="168" label="TABS_REMOVE"/>
- <int value="169" label="MANAGEMENT_GETPERMISSIONWARNINGSBYID"/>
- <int value="170" label="WINDOWS_GET"/>
- <int value="171" label="FILEBROWSERPRIVATE_EXECUTETASK"/>
- <int value="172" label="TTS_GETVOICES"/>
- <int value="173" label="MANAGEMENT_GETALL"/>
- <int value="174" label="MANAGEMENT_GETPERMISSIONWARNINGSBYMANIFEST"/>
- <int value="175" label="APP_CURRENTWINDOWINTERNAL_CLEARATTENTION"/>
- <int value="176" label="AUTOTESTPRIVATE_SHUTDOWN"/>
- <int value="177" label="FONTSETTINGS_CLEARDEFAULTFONTSIZE"/>
- <int value="178" label="BOOKMARKS_GETTREE"/>
- <int value="179" label="FILEBROWSERPRIVATE_SELECTFILES"/>
- <int value="180" label="RUNTIME_GETBACKGROUNDPAGE"/>
- <int value="181" label="DELETED_EXPERIMENTAL_RECORD_REPLAYURLS"/>
- <int value="182" label="WEBSTOREPRIVATE_COMPLETEINSTALL"/>
- <int value="183" label="DELETED_EXPERIMENTAL_SPEECHINPUT_START"/>
- <int value="184" label="COOKIES_GETALL"/>
- <int value="185" label="DOWNLOADS_GETFILEICON"/>
- <int value="186" label="PAGEACTION_GETTITLE"/>
- <int value="187" label="BROWSINGDATA_REMOVE"/>
- <int value="188" label="DELETED_SERIAL_OPEN"/>
- <int value="189" label="FILESYSTEM_GETDISPLAYPATH"/>
- <int value="190" label="FILEBROWSERPRIVATE_FORMATVOLUME"/>
- <int value="191" label="BOOKMARKS_GET"/>
- <int value="192" label="DELETED_MANAGEDMODEPRIVATE_GET"/>
- <int value="193" label="ALARMS_CLEAR"/>
- <int value="194" label="SYNCFILESYSTEM_GETFILESYNCSTATUS"/>
- <int value="195" label="SOCKET_GETINFO"/>
- <int value="196" label="WEBSTOREPRIVATE_INSTALLBUNDLE"/>
- <int value="197" label="BROWSERACTION_ENABLE"/>
- <int value="198" label="METRICSPRIVATE_RECORDMEDIUMTIME"/>
- <int value="199" label="PAGEACTION_SETTITLE"/>
- <int value="200" label="CLOUDPRINTPRIVATE_GETHOSTNAME"/>
- <int value="201" label="CONTENTSETTINGS_GETRESOURCEIDENTIFIERS"/>
- <int value="202" label="SOCKET_CREATE"/>
- <int value="203" label="DEVELOPERPRIVATE_RELOAD"/>
- <int value="204" label="FILEBROWSERPRIVATE_GETVOLUMEMETADATALIST"/>
- <int value="205" label="APP_RUNTIME_POSTINTENTRESPONSE"/>
- <int value="206" label="DELETED_MANAGEDMODEPRIVATE_SETPOLICY"/>
- <int value="207" label="WEBSTOREPRIVATE_BEGININSTALLWITHMANIFEST3"/>
- <int value="208" label="WALLPAPERPRIVATE_SETWALLPAPER"/>
- <int value="209" label="USB_CONTROLTRANSFER"/>
- <int value="210" label="DELETED_EXPERIMENTAL_SPEECHINPUT_STOP"/>
- <int value="211" label="USB_BULKTRANSFER"/>
- <int value="212" label="DELETED_FILEBROWSERPRIVATE_GETVOLUMEMETADATA"/>
- <int value="213" label="PAGECAPTURE_SAVEASMHTML"/>
- <int value="214" label="EXTENSION_ISALLOWEDINCOGNITOACCESS"/>
- <int value="215" label="BROWSINGDATA_REMOVEAPPCACHE"/>
- <int value="216" label="APP_CURRENTWINDOWINTERNAL_DRAWATTENTION"/>
- <int value="217" label="METRICSPRIVATE_RECORDCOUNT"/>
- <int value="218" label="USB_INTERRUPTTRANSFER"/>
- <int value="219" label="TYPES_CHROMESETTING_CLEAR"/>
- <int value="220" label="INPUT_IME_COMMITTEXT"/>
- <int value="221" label="IDLTEST_SENDARRAYBUFFER"/>
- <int value="222" label="WALLPAPERPRIVATE_SETWALLPAPERIFEXISTS"/>
- <int value="223" label="SOCKET_ACCEPT"/>
- <int value="224" label="WEBNAVIGATION_GETFRAME"/>
- <int value="225" label="EXPERIMENTAL_POWER_RELEASEKEEPAWAKE"/>
- <int value="226" label="APP_CURRENTWINDOWINTERNAL_SETICON"/>
- <int value="227" label="PUSHMESSAGING_GETCHANNELID"/>
- <int value="228" label="EXPERIMENTAL_INFOBARS_SHOW"/>
- <int value="229" label="INPUT_IME_SETCANDIDATEWINDOWPROPERTIES"/>
- <int value="230" label="METRICSPRIVATE_RECORDPERCENTAGE"/>
- <int value="231" label="TYPES_CHROMESETTING_GET"/>
- <int value="232" label="WINDOWS_GETLASTFOCUSED"/>
- <int value="233" label="DELETED_MANAGEDMODEPRIVATE_GETPOLICY"/>
- <int value="234" label="STORAGE_CLEAR"/>
- <int value="235" label="STORAGE_GETBYTESINUSE"/>
- <int value="236" label="TABS_QUERY"/>
- <int value="237" label="PAGEACTION_SETPOPUP"/>
- <int value="238" label="DEVELOPERPRIVATE_INSPECT"/>
- <int value="239" label="DOWNLOADS_SEARCH"/>
- <int value="240" label="FONTSETTINGS_CLEARFONT"/>
- <int value="241" label="WINDOWS_UPDATE"/>
- <int value="242" label="BOOKMARKMANAGERPRIVATE_CANOPENNEWWINDOWS"/>
- <int value="243" label="SERIAL_FLUSH"/>
- <int value="244" label="BROWSERACTION_SETTITLE"/>
- <int value="245" label="BOOKMARKMANAGERPRIVATE_CANEDIT"/>
- <int value="246" label="WALLPAPERPRIVATE_SETCUSTOMWALLPAPER"/>
- <int value="247" label="BOOKMARKS_REMOVE"/>
- <int value="248" label="INPUT_IME_SETCANDIDATES"/>
- <int value="249" label="TERMINALPRIVATE_CLOSETERMINALPROCESS"/>
- <int value="250" label="HISTORY_DELETERANGE"/>
- <int value="251" label="IDLTEST_GETARRAYBUFFER"/>
- <int value="252" label="TERMINALPRIVATE_SENDINPUT"/>
- <int value="253" label="TABS_HIGHLIGHT"/>
- <int value="254" label="BLUETOOTH_STARTDISCOVERY"/>
- <int value="255" label="FILEBROWSERPRIVATE_SELECTFILE"/>
- <int value="256" label="WINDOWS_GETCURRENT"/>
- <int value="257" label="DEBUGGER_ATTACH"/>
- <int value="258" label="WALLPAPERPRIVATE_SAVETHUMBNAIL"/>
- <int value="259" label="INPUT_IME_KEYEVENTHANDLED"/>
- <int value="260" label="FONTSETTINGS_SETDEFAULTFONTSIZE"/>
- <int value="261" label="RUNTIME_REQUESTUPDATECHECK"/>
- <int value="262" label="PAGEACTION_SETICON"/>
- <int value="263" label="BROWSERACTION_SETBADGEBACKGROUNDCOLOR"/>
- <int value="264" label="DEVELOPERPRIVATE_GETITEMSINFO"/>
- <int value="265" label="BLUETOOTH_STOPDISCOVERY"/>
- <int value="266" label="COOKIES_REMOVE"/>
- <int value="267" label="DELETED_EXPERIMENTAL_RLZ_SENDFINANCIALPING"/>
- <int value="268" label="TABCAPTURE_GETCAPTUREDTABS"/>
- <int value="269" label="WINDOWS_REMOVE"/>
- <int value="270" label="WALLPAPERPRIVATE_GETOFFLINEWALLPAPERLIST"/>
- <int value="271" label="BROWSERACTION_GETBADGEBACKGROUNDCOLOR"/>
- <int value="272" label="PAGEACTIONS_DISABLEFORTAB"/>
- <int value="273" label="DEVELOPERPRIVATE_ALLOWFILEACCESS"/>
- <int value="274" label="FILEBROWSERPRIVATE_REMOVEMOUNT"/>
- <int value="275" label="BLUETOOTH_CONNECT"/>
- <int value="276" label="TABCAPTURE_CAPTURE"/>
- <int value="277" label="NOTIFICATIONS_CREATE"/>
- <int value="278" label="TABS_DUPLICATE"/>
- <int value="279" label="BLUETOOTH_WRITE"/>
- <int value="280" label="PAGEACTION_SHOW"/>
- <int value="281" label="WALLPAPERPRIVATE_GETTHUMBNAIL"/>
- <int value="282" label="DOWNLOADS_PAUSE"/>
- <int value="283" label="PERMISSIONS_REQUEST"/>
- <int value="284" label="TOPSITES_GET"/>
- <int value="285" label="BROWSINGDATA_REMOVEDOWNLOADS"/>
- <int value="286" label="BROWSINGDATA_REMOVELOCALSTORAGE"/>
- <int value="287" label="FILEBROWSERHANDLERINTERNAL_SELECTFILE"/>
- <int value="288" label="INPUT_IME_UPDATEMENUITEMS"/>
- <int value="289" label="FILEBROWSERPRIVATE_GETSTRINGS"/>
- <int value="290" label="CONTENTSETTINGS_GET"/>
- <int value="291" label="FONTSETTINGS_SETDEFAULTFIXEDFONTSIZE"/>
- <int value="292" label="EXPERIMENTAL_APP_NOTIFY"/>
- <int value="293" label="METRICSPRIVATE_RECORDLONGTIME"/>
- <int value="294" label="SOCKET_READ"/>
- <int value="295" label="DELETED_EXPERIMENTAL_PROCESSES_TERMINATE"/>
- <int value="296" label="METRICSPRIVATE_RECORDTIME"/>
- <int value="297" label="BOOKMARKMANAGERPRIVATE_GETSTRINGS"/>
- <int value="298" label="USB_ISOCHRONOUSTRANSFER"/>
- <int value="299" label="PERMISSIONS_REMOVE"/>
- <int value="300" label="MANAGEMENT_UNINSTALL"/>
- <int value="301" label="I18N_GETACCEPTLANGUAGES"/>
- <int value="302" label="MANAGEMENT_LAUNCHAPP"/>
- <int value="303" label="INPUT_IME_CLEARCOMPOSITION"/>
- <int value="304" label="ALARMS_GETALL"/>
- <int value="305" label="DIAL_DISCOVERNOW"/>
- <int value="306" label="TYPES_CHROMESETTING_SET"/>
- <int value="307" label="BROWSERACTION_SETICON"/>
- <int value="308" label="EXPERIMENTAL_ACCESSIBILITY_SETACCESSIBILITYENABLED"/>
- <int value="309" label="DELETED_FILEBROWSERPRIVATE_VIEWFILES"/>
- <int value="310" label="BLUETOOTH_GETSERVICES"/>
- <int value="311" label="TABS_UPDATE"/>
- <int value="312" label="BROWSINGDATA_REMOVEFORMDATA"/>
- <int value="313" label="DELETED_FILEBROWSERPRIVATE_RELOADDRIVE"/>
- <int value="314" label="ALARMS_GET"/>
- <int value="315" label="BROWSINGDATA_REMOVEINDEXEDDB"/>
- <int value="316" label="FILEBROWSERPRIVATE_ADDFILEWATCH"/>
- <int value="317" label="CONTENTSETTINGS_CLEAR"/>
- <int value="318" label="FILEBROWSERPRIVATE_GETPREFERENCES"/>
- <int value="319" label="BOOKMARKMANAGERPRIVATE_PASTE"/>
- <int value="320" label="FILESYSTEM_ISWRITABLEENTRY"/>
- <int value="321" label="USB_SETINTERFACEALTERNATESETTING"/>
- <int value="322" label="FONTSETTINGS_SETMINIMUMFONTSIZE"/>
- <int value="323" label="BROWSERACTION_GETPOPUP"/>
- <int value="324" label="SOCKET_DESTROY"/>
- <int value="325" label="BLUETOOTH_GETDEVICES"/>
- <int value="326" label="ALARMS_CLEARALL"/>
- <int value="327" label="FONTSETTINGS_GETDEFAULTFIXEDFONTSIZE"/>
- <int value="328" label="FILEBROWSERPRIVATE_ZIPSELECTION"/>
- <int value="329" label="SYSTEMINDICATOR_DISABLE"/>
- <int value="330" label="SCRIPTBADGE_SETPOPUP"/>
- <int value="331" label="EXTENSION_ISALLOWEDFILESCHEMEACCESS"/>
- <int value="332" label="EXPERIMENTAL_IDENTITY_LAUNCHWEBAUTHFLOW"/>
- <int value="333" label="FILEBROWSERPRIVATE_GETDRIVECONNECTIONSTATE"/>
- <int value="334" label="TABS_DETECTLANGUAGE"/>
- <int value="335" label="METRICSPRIVATE_RECORDVALUE"/>
- <int value="336" label="BOOKMARKMANAGERPRIVATE_SORTCHILDREN"/>
- <int value="337" label="DELETED_SERIAL_READ"/>
- <int value="338" label="APP_CURRENTWINDOWINTERNAL_MAXIMIZE"/>
- <int value="339" label="EXPERIMENTAL_DISCOVERY_CLEARALLSUGGESTIONS"/>
- <int value="340" label="DELETED_MANAGEDMODEPRIVATE_ENTER"/>
- <int value="341" label="DELETED_FILEBROWSERPRIVATE_TRANSFERFILE"/>
- <int value="342" label="BROWSERACTION_SETPOPUP"/>
- <int value="343" label="TABS_GETSELECTED"/>
- <int value="344" label="FONTSETTINGS_GETFONT"/>
- <int value="345" label="BLUETOOTH_READ"/>
- <int value="346" label="WEBREQUESTINTERNAL_EVENTHANDLED"/>
- <int value="347" label="EVENTS_ADDRULES"/>
- <int value="348" label="CONTEXTMENUS_CREATE"/>
- <int value="349" label="MEDIAPLAYERPRIVATE_GETPLAYLIST"/>
- <int value="350" label="DOWNLOADS_ERASE"/>
- <int value="351" label="DELETED_EXPERIMENTAL_RECORD_CAPTUREURLS"/>
- <int value="352" label="TTS_ISSPEAKING"/>
- <int value="353" label="BOOKMARKS_REMOVETREE"/>
- <int value="354" label="FILEBROWSERPRIVATE_SEARCHDRIVE"/>
- <int value="355" label="DELETED_EXPERIMENTAL_SYSTEMINFO_CPU_GET"/>
- <int value="356" label="FILEBROWSERPRIVATE_SETPREFERENCES"/>
- <int value="357" label="FONTSETTINGS_SETFONT"/>
- <int value="358" label="SOCKET_GETNETWORKLIST"/>
- <int value="359" label="BOOKMARKS_MOVE"/>
- <int value="360" label="WALLPAPERPRIVATE_MINIMIZEINACTIVEWINDOWS"/>
- <int value="361" label="STORAGE_REMOVE"/>
- <int value="362" label="AUTOTESTPRIVATE_LOGINSTATUS"/>
- <int value="363" label="TABS_CREATE"/>
- <int value="364" label="FILEBROWSERPRIVATE_CANCELDIALOG"/>
- <int value="365" label="BROWSINGDATA_REMOVECOOKIES"/>
- <int value="366" label="FILESYSTEM_CHOOSEENTRY"/>
- <int value="367" label="MEDIAPLAYERPRIVATE_PLAY"/>
- <int value="368" label="WEBSTOREPRIVATE_GETWEBGLSTATUS"/>
- <int value="369" label="SOCKET_SENDTO"/>
- <int value="370" label="BROWSINGDATA_REMOVEFILESYSTEMS"/>
- <int value="371" label="WALLPAPERPRIVATE_GETSTRINGS"/>
- <int value="372" label="BROWSINGDATA_REMOVECACHE"/>
- <int value="373" label="BOOKMARKMANAGERPRIVATE_RECORDLAUNCH"/>
- <int value="374" label="BROWSERACTION_DISABLE"/>
- <int value="375" label="DELETED_EXPERIMENTAL_SPEECHINPUT_ISRECORDING"/>
- <int value="376" label="APP_WINDOW_CREATE"/>
- <int value="377" label="RUNTIME_RELOAD"/>
- <int value="378" label="EXPERIMENTAL_POWER_REQUESTKEEPAWAKE"/>
- <int value="379" label="SYSTEMINDICATOR_SETICON"/>
- <int value="380" label="FILEBROWSERPRIVATE_ADDMOUNT"/>
- <int value="381" label="APP_CURRENTWINDOWINTERNAL_FOCUS"/>
- <int value="382" label="EVENTS_REMOVERULES"/>
- <int value="383" label="DOWNLOADS_DOWNLOAD"/>
- <int value="384" label="WINDOWS_GETALL"/>
- <int value="385" label="DELETED_FILEBROWSERPRIVATE_TOGGLEFULLSCREEN"/>
- <int value="386" label="APP_CURRENTWINDOWINTERNAL_RESTORE"/>
- <int value="387" label="DELETED_WEBSOCKETPROXYPRIVATE_GETPASSPORTFORTCP"/>
- <int value="388" label="PAGEACTION_HIDE"/>
- <int value="389" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_GET"/>
- <int value="390" label="DOWNLOADS_ACCEPTDANGER"/>
- <int value="391" label="DELETED_WEBSOCKETPROXYPRIVATE_GETURLFORTCP"/>
- <int value="392" label="FILEBROWSERPRIVATE_GETSIZESTATS"/>
- <int value="393" label="DOWNLOADS_RESUME"/>
- <int value="394" label="COOKIES_GETALLCOOKIESTORES"/>
- <int value="395" label="MEDIAGALLERIESPRIVATE_ADDGALLERYWATCH"/>
- <int value="396" label="MEDIAGALLERIESPRIVATE_REMOVEGALLERYWATCH"/>
- <int value="397" label="WEBVIEW_EXECUTESCRIPT"/>
- <int value="398" label="NOTIFICATIONS_UPDATE"/>
- <int value="399" label="NOTIFICATIONS_CLEAR"/>
- <int value="400" label="DELETED_SESSIONRESTORE_GETRECENTLYCLOSED"/>
- <int value="401" label="DELETED_SESSIONRESTORE_RESTORE"/>
- <int value="402" label="MANAGEMENT_UNINSTALLSELF"/>
- <int value="403" label="ECHOPRIVATE_GETOOBETIMESTAMP"/>
- <int value="404" label="FILEBROWSERPRIVATE_VALIDATEPATHNAMELENGTH"/>
- <int value="405" label="BROWSINGDATA_SETTINGS"/>
- <int value="406" label="WEBSTOREPRIVATE_GETISLAUNCHERENABLED"/>
- <int value="407" label="NETWORKINGPRIVATE_GETPROPERTIES"/>
- <int value="408" label="NETWORKINGPRIVATE_GETVISIBLENETWORKS"/>
- <int value="409" label="NETWORKINGPRIVATE_STARTCONNECT"/>
- <int value="410" label="NETWORKINGPRIVATE_STARTDISCONNECT"/>
- <int value="411" label="MEDIAGALLERIESPRIVATE_GETALLGALLERYWATCH"/>
- <int value="412" label="MEDIAGALLERIESPRIVATE_REMOVEALLGALLERYWATCH"/>
- <int value="413" label="FILEBROWSERPRIVATE_SEARCHDRIVEMETADATA"/>
- <int value="414" label="DELETED_ECHOPRIVATE_CHECKALLOWREDEEMOFFERS"/>
- <int value="415" label="DELETED_MEDIAGALLERIESPRIVATE_EJECTDEVICE"/>
- <int value="416" label="FILEBROWSERPRIVATE_LOGOUTUSERFORREAUTHENTICATION"/>
- <int value="417" label="DEVELOPERPRIVATE_CHOOSEPATH"/>
- <int value="418" label="DEVELOPERPRIVATE_PACKDIRECTORY"/>
- <int value="419" label="NETWORKINGPRIVATE_VERIFYDESTINATION"/>
- <int value="420" label="NETWORKINGPRIVATE_VERIFYANDENCRYPTCREDENTIALS"/>
- <int value="421" label="NETWORKINGPRIVATE_VERIFYANDENCRYPTDATA"/>
- <int value="422" label="DEVELOPERPRIVATE_RESTART"/>
- <int value="423" label="DEVELOPERPRIVATE_ALLOWINCOGNITO"/>
- <int value="424" label="INPUT_IME_DELETESURROUNDINGTEXT"/>
- <int value="425" label="DELETED_FILEBROWSERPRIVATE_OPENNEWWINDOW"/>
- <int value="426" label="CLOUDPRINTPRIVATE_GETCLIENTID"/>
- <int value="427" label="ECHOPRIVATE_GETUSERCONSENT"/>
- <int value="428" label="SYNCFILESYSTEM_SETCONFLICTRESOLUTIONPOLICY"/>
- <int value="429" label="SYNCFILESYSTEM_GETCONFLICTRESOLUTIONPOLICY"/>
- <int value="430" label="NETWORKINGPRIVATE_SETPROPERTIES"/>
- <int value="431" label="NETWORKINGPRIVATE_GETSTATE"/>
- <int value="432" label="POWER_REQUESTKEEPAWAKE"/>
- <int value="433" label="POWER_RELEASEKEEPAWAKE"/>
- <int value="434" label="WALLPAPERPRIVATE_SETCUSTOMWALLPAPERLAYOUT"/>
- <int value="435" label="DOWNLOADSINTERNAL_DETERMINEFILENAME"/>
- <int value="436" label="SYNCFILESYSTEM_GETFILESYNCSTATUSES"/>
- <int value="437" label="MEDIAGALLERIESPRIVATE_GETHANDLERS"/>
- <int value="438" label="WALLPAPERPRIVATE_RESETWALLPAPER"/>
- <int value="439" label="DEVELOPERPRIVATE_PERMISSIONS"/>
- <int value="440" label="WEBSTOREPRIVATE_ENABLEAPPLAUNCHER"/>
- <int value="441" label="APP_CURRENTWINDOWINTERNAL_FULLSCREEN"/>
- <int value="442" label="DEVELOPERPRIVATE_LOADUNPACKEDCROS"/>
- <int value="443" label="NETWORKINGPRIVATE_REQUESTNETWORKSCAN"/>
- <int value="444" label="ENTERPRISE_PLATFORMKEYSPRIVATE_CHALLENGEMACHINEKEY"/>
- <int value="445" label="ENTERPRISE_PLATFORMKEYSPRIVATE_CHALLENGEUSERKEY"/>
- <int value="446" label="DEVELOPERPRIVATE_LOADPROJECTTOSYNCFS"/>
- <int value="447" label="DEVELOPERPRIVATE_GETPROJECTSINFO"/>
- <int value="448" label="DEVELOPERPRIVATE_LOADPROJECT"/>
- <int value="449" label="COMMANDLINEPRIVATE_HASSWITCH"/>
- <int value="450" label="NETWORKINGPRIVATE_GETMANAGEDPROPERTIES"/>
- <int value="451" label="LOCATION_WATCHLOCATION"/>
- <int value="452" label="LOCATION_CLEARWATCH"/>
- <int value="453" label="BLUETOOTH_ADDPROFILE"/>
- <int value="454" label="BLUETOOTH_REMOVEPROFILE"/>
- <int value="455" label="BLUETOOTH_GETPROFILES"/>
- <int value="456" label="EXPERIMENTAL_IDENTITY_REMOVECACHEDAUTHTOKEN"/>
- <int value="457" label="AUDIO_GETINFO"/>
- <int value="458" label="AUDIO_SETACTIVEDEVICES"/>
- <int value="459" label="AUDIO_SETPROPERTIES"/>
- <int value="460" label="USB_RESETDEVICE"/>
- <int value="461" label="SOCKET_MULTICAST_JOIN_GROUP"/>
- <int value="462" label="SOCKET_MULTICAST_LEAVE_GROUP"/>
- <int value="463" label="SOCKET_MULTICAST_SET_TIME_TO_LIVE"/>
- <int value="464" label="SOCKET_MULTICAST_SET_LOOPBACK_MODE"/>
- <int value="465" label="SOCKET_MULTICAST_GET_JOINED_GROUPS"/>
- <int value="466"
- label="EXPERIMENTAL_ACCESSIBILITY_SETNATIVEACCESSIBILITYENABLED"/>
- <int value="467" label="RUNTIME_GETPLATFORMINFO"/>
- <int value="468" label="WEBVIEW_INSERTCSS"/>
- <int value="469" label="METRICSPRIVATE_GETISCRASHRECORDINGENABLED"/>
- <int value="470" label="IDENTITYPRIVATE_GETRESOURCES"/>
- <int value="471" label="NOTIFICATIONS_GET_ALL"/>
- <int value="472" label="USB_LISTINTERFACES"/>
- <int value="473" label="FILESYSTEM_RETAINENTRY"/>
- <int value="474" label="FILESYSTEM_ISRESTORABLE"/>
- <int value="475" label="FILESYSTEM_RESTOREENTRY"/>
- <int value="476" label="RUNTIME_SETUNINSTALLURL"/>
- <int value="477" label="INPUTMETHODPRIVATE_STARTIME"/>
- <int value="478" label="MUSICMANAGERPRIVATE_GETDEVICEID"/>
- <int value="479" label="TTS_PAUSE"/>
- <int value="480" label="TTS_RESUME"/>
- <int value="481" label="DELETED_SYSTEMINFO_CPU_GET"/>
- <int value="482" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_ADDWATCH"/>
- <int value="483" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_REMOVEWATCH"/>
- <int value="484" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_GETALLWATCH"/>
- <int value="485"
- label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_REMOVEALLWATCH"/>
- <int value="486" label="DELETED_SYSTEMINFO_MEMORY_GET"/>
- <int value="487" label="ACTIVITYLOGPRIVATE_GETEXTENSIONACTIVITIES"/>
- <int value="488" label="RUNTIME_GETPACKAGEDIRECTORYENTRY"/>
- <int value="489" label="DELETED_SYSTEMINFO_DISPLAY_SETDISPLAYPROPERTIES"/>
- <int value="490" label="FEEDBACKPRIVATE_GETUSEREMAIL"/>
- <int value="491" label="FEEDBACKPRIVATE_GETSYSTEMINFORMATION"/>
- <int value="492" label="FEEDBACKPRIVATE_SENDFEEDBACK"/>
- <int value="493" label="VIRTUALKEYBOARDPRIVATE_INSERTTEXT"/>
- <int value="494" label="DIAGNOSTICS_SENDPACKET"/>
- <int value="495" label="METRICSPRIVATE_GETFIELDTRIAL"/>
- <int value="496" label="FILEBROWSERPRIVATE_ZOOM"/>
- <int value="497" label="WEBVIEW_GO"/>
- <int value="498" label="WEBSTOREPRIVATE_ISININCOGNITOMODEFUNCTION"/>
- <int value="499" label="FILEBROWSERPRIVATE_REQUESTACCESSTOKEN"/>
- <int value="500" label="WEBVIEW_STOP"/>
- <int value="501" label="WEBVIEW_RELOAD"/>
- <int value="502" label="WEBVIEW_TERMINATE"/>
- <int value="503" label="TYPES_PRIVATE_CHROMEDIRECTSETTING_GET"/>
- <int value="504" label="TYPES_PRIVATE_CHROMEDIRECTSETTING_SET"/>
- <int value="505" label="TYPES_PRIVATE_CHROMEDIRECTSETTING_CLEAR"/>
- <int value="506" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_EJECTDEVICE"/>
- <int value="507" label="SYSTEM_CPU_GETINFO"/>
- <int value="508" label="BOOKMARKMANAGERPRIVATE_REMOVETREES"/>
- <int value="509" label="SYSTEM_DISPLAY_GETINFO"/>
- <int value="510" label="SYSTEM_DISPLAY_SETDISPLAYPROPERTIES"/>
- <int value="511" label="SYSTEM_MEMORY_GETINFO"/>
- <int value="512" label="FILEBROWSERPRIVATE_GETSHAREURL"/>
- <int value="513" label="SYSTEM_STORAGE_GETINFO"/>
- <int value="514" label="SYSTEM_STORAGE_EJECTDEVICE"/>
- <int value="515" label="DELETED_SYSTEM_STORAGE_ADDAVAILABLECAPACITYWATCH"/>
- <int value="516" label="DELETED_SYSTEM_STORAGE_REMOVEAVAILABLECAPACITYWATCH"/>
- <int value="517"
- label="DELETED_SYSTEM_STORAGE_GETALLAVAILABLECAPACITYWATCHES"/>
- <int value="518"
- label="DELETED_SYSTEM_STORAGE_REMOVEALLAVAILABLECAPACITYWATCHES"/>
- <int value="519" label="DOWNLOADS_REMOVEFILE"/>
- <int value="520" label="DOWNLOADS_SHOWDEFAULTFOLDER"/>
- <int value="521" label="INFOBARS_SHOW"/>
- <int value="522" label="DOWNLOADS_SETSHELFENABLED"/>
- <int value="523" label="IMAGEWRITER_WRITEFROMURL"/>
- <int value="524" label="IMAGEWRITER_WRITEFROMFILE"/>
- <int value="525" label="IMAGEWRITER_CANCELWRITE"/>
- <int value="526" label="IMAGEWRITER_DESTROYPARTITIONS"/>
- <int value="527" label="FEEDBACKPRIVATE_GETSTRINGS"/>
- <int value="528" label="LOGPRIVATE_GETHISTORICAL"/>
- <int value="529" label="VIRTUALKEYBOARDPRIVATE_MOVECURSOR"/>
- <int value="530" label="METRICSPRIVATE_GETVARIATIONPARAMS"/>
- <int value="531" label="WEBVIEW_SETPERMISSION"/>
- <int value="532" label="DESKTOPCAPTURE_CHOOSEDESKTOPMEDIA"/>
- <int value="533" label="APP_CURRENTWINDOWINTERNAL_SETSHAPE"/>
- <int value="534" label="PROCESSES_GETPROCESSINFO"/>
- <int value="535" label="PROCESSES_GETPROCESSIDFORTAB"/>
- <int value="536" label="PROCESSES_TERMINATE"/>
- <int value="537" label="SOCKETS_UDP_CREATE"/>
- <int value="538" label="SOCKETS_UDP_UPDATE"/>
- <int value="539" label="SOCKETS_UDP_BIND"/>
- <int value="540" label="SOCKETS_UDP_SEND"/>
- <int value="541" label="SOCKETS_UDP_CLOSE"/>
- <int value="542" label="SOCKETS_UDP_GETINFO"/>
- <int value="543" label="SOCKETS_UDP_GETSOCKETS"/>
- <int value="544" label="SOCKETS_UDP_JOINGROUP"/>
- <int value="545" label="SOCKETS_UDP_LEAVEGROUP"/>
- <int value="546" label="SOCKETS_UDP_SETMULTICASTTIMETOLIVE"/>
- <int value="547" label="SOCKETS_UDP_SETMULTICASTLOOPBACKMODE"/>
- <int value="548" label="SOCKETS_UDP_GETJOINEDGROUPS"/>
- <int value="549" label="SIGNED_IN_DEVICES_GET"/>
- <int value="550" label="AUTOTESTPRIVATE_SIMULATEASANMEMORYBUG"/>
- <int value="551" label="WEBVIEW_CLEARDATA"/>
- <int value="552" label="SESSIONS_GETRECENTLYCLOSED"/>
- <int value="553" label="SESSIONS_GETDEVICES"/>
- <int value="554" label="SESSIONS_RESTORE"/>
- <int value="555" label="SYNCFILESYSTEM_GETSERVICESTATUS"/>
- <int value="556" label="ECHOPRIVATE_SETOFFERINFO"/>
- <int value="557" label="ECHOPRIVATE_GETOFFERINFO"/>
- <int value="558" label="DEVELOPERPRIVATE_ISPROFILEMANAGED"/>
- <int value="559" label="FILEBROWSERPRIVATE_INSTALLWEBSTOREITEM"/>
- <int value="560" label="FILEBROWSERPRIVATE_STARTCOPY"/>
- <int value="561" label="FILEBROWSERPRIVATE_CANCELCOPY"/>
- <int value="562" label="NETWORKINGPRIVATE_CREATENETWORK"/>
- <int value="563" label="BRAILLEDISPLAYPRIVATE_GETDISPLAYSTATE"/>
- <int value="564" label="BRAILLEDISPLAYPRIVATE_WRITEDOTS"/>
- <int value="565" label="USB_GETDEVICES"/>
- <int value="566" label="USB_REQUESTACCESS"/>
- <int value="567" label="USB_OPENDEVICE"/>
- <int value="568" label="ACTIVITYLOGPRIVATE_DELETEDATABASE"/>
- <int value="569" label="ACTIVITYLOGPRIVATE_DELETEURLS"/>
- <int value="570" label="FILEBROWSERPRIVATE_REQUESTWEBSTOREACCESSTOKEN"/>
- <int value="571" label="IMAGEWRITER_LISTREMOVABLESTORAGEDEVICES"/>
- <int value="572" label="WALLPAPER_SETWALLPAPER"/>
- <int value="573" label="VIRTUALKEYBOARDPRIVATE_HIDEKEYBOARD"/>
- <int value="574" label="AUTOTESTPRIVATE_LOCKSCREEN"/>
- <int value="575" label="WEBRTCLOGGINGPRIVATE_SETMETADATA"/>
- <int value="576" label="WEBRTCLOGGINGPRIVATE_START"/>
- <int value="577" label="WEBRTCLOGGINGPRIVATE_SETUPLOADONRENDERCLOSE"/>
- <int value="578" label="WEBRTCLOGGINGPRIVATE_STOP"/>
- <int value="579" label="WEBRTCLOGGINGPRIVATE_UPLOAD"/>
- <int value="580" label="WEBRTCLOGGINGPRIVATE_DISCARD"/>
- <int value="581" label="WEBVIEW_OVERRIDEUSERAGENT"/>
- <int value="582" label="PRINCIPALSPRIVATE_SHOWAVATARBUBBLE"/>
- <int value="583" label="PRINCIPALSPRIVATE_SIGNOUT"/>
- <int value="584" label="CAST_CHANNEL_OPEN"/>
- <int value="585" label="CAST_CHANNEL_SEND"/>
- <int value="586" label="CAST_CHANNEL_CLOSE"/>
- <int value="587" label="RUNTIME_RESTART"/>
- <int value="588" label="DESKTOPCAPTURE_CANCELCHOOSEDESKTOPMEDIA"/>
- <int value="589" label="APP_CURRENTWINDOWINTERNAL_SETALWAYSONTOP"/>
- <int value="590" label="SOCKETS_TCP_CREATE"/>
- <int value="591" label="SOCKETS_TCP_UPDATE"/>
- <int value="592" label="SOCKETS_TCP_SETPAUSED"/>
- <int value="593" label="SOCKETS_TCP_SETKEEPALIVE"/>
- <int value="594" label="SOCKETS_TCP_SETNODELAY"/>
- <int value="595" label="SOCKETS_TCP_CONNECT"/>
- <int value="596" label="SOCKETS_TCP_DISCONNECT"/>
- <int value="597" label="SOCKETS_TCP_SEND"/>
- <int value="598" label="SOCKETS_TCP_CLOSE"/>
- <int value="599" label="SOCKETS_TCP_GETINFO"/>
- <int value="600" label="SOCKETS_TCP_GETSOCKETS"/>
- <int value="601" label="NETWORKINGPRIVATE_GETENABLEDNETWORKTYPES"/>
- <int value="602" label="NETWORKINGPRIVATE_ENABLENETWORKTYPE"/>
- <int value="603" label="NETWORKINGPRIVATE_DISABLENETWORKTYPE"/>
- <int value="604" label="SOCKETS_TCP_SERVER_CREATE"/>
- <int value="605" label="SOCKETS_TCP_SERVER_UPDATE"/>
- <int value="606" label="SOCKETS_TCP_SERVER_SETPAUSED"/>
- <int value="607" label="SOCKETS_TCP_SERVER_LISTEN"/>
- <int value="608" label="SOCKETS_TCP_SERVER_DISCONNECT"/>
- <int value="609" label="SOCKETS_TCP_SERVER_CLOSE"/>
- <int value="610" label="SOCKETS_TCP_SERVER_GETINFO"/>
- <int value="611" label="SOCKETS_TCP_SERVER_GETSOCKETS"/>
- <int value="612" label="SYSTEM_STORAGE_GETAVAILABLECAPACITY"/>
- <int value="613" label="BROWSERACTION_OPEN_POPUP"/>
- <int value="614" label="WEBRTC_AUDIO_PRIVATE_GET_SINKS"/>
- <int value="615" label="WEBRTC_AUDIO_PRIVATE_GET_ACTIVE_SINK"/>
- <int value="616" label="WEBRTC_AUDIO_PRIVATE_SET_ACTIVE_SINK"/>
- <int value="617" label="WEBRTC_AUDIO_PRIVATE_GET_ASSOCIATED_SINK"/>
- <int value="618" label="VIRTUALKEYBOARDPRIVATE_KEYBOARDLOADED"/>
- <int value="619" label="APP_CURRENTWINDOWINTERNAL_SETMINWIDTH"/>
- <int value="620" label="APP_CURRENTWINDOWINTERNAL_SETMINHEIGHT"/>
- <int value="621" label="APP_CURRENTWINDOWINTERNAL_SETMAXWIDTH"/>
- <int value="622" label="APP_CURRENTWINDOWINTERNAL_SETMAXHEIGHT"/>
- <int value="623" label="SYSTEMPRIVATE_GETAPIKEY"/>
- <int value="624" label="CHROMEOSINFOPRIVATE_SET"/>
- <int value="625" label="BOOKMARKMANAGERPRIVATE_GETMETAINFO"/>
- <int value="626" label="BOOKMARKMANAGERPRIVATE_SETMETAINFO"/>
- <int value="627" label="FILESYSTEMPROVIDER_MOUNT"/>
- <int value="628" label="AUTOTESTPRIVATE_GETEXTENSIONSINFO"/>
- <int value="629" label="SCREENLOCKPRIVATE_GETLOCKED"/>
- <int value="630" label="SCREENLOCKPRIVATE_SETLOCKED"/>
- <int value="631" label="SCREENLOCKPRIVATE_SHOWMESSAGE"/>
- <int value="632" label="FEEDBACKPRIVATE_GETHISTOGRAMS"/>
- <int value="633" label="SYSTEM_NETWORK_GETNETWORKINTERFACES"/>
- <int value="634" label="SERIAL_GETDEVICES"/>
- <int value="635" label="SERIAL_UPDATE"/>
- <int value="636" label="SERIAL_SETPAUSED"/>
- <int value="637" label="SERIAL_GETINFO"/>
- <int value="638" label="SERIAL_GETCONNECTIONS"/>
- <int value="639" label="SERIAL_SEND"/>
- <int value="640" label="GCM_REGISTER"/>
- <int value="641" label="GCM_SEND"/>
- <int value="642" label="SERIAL_CONNECT"/>
- <int value="643" label="SERIAL_DISCONNECT"/>
- <int value="644" label="MEDIAGALLERIES_GETALLMEDIAFILESYSTEMMETADATA"/>
- <int value="645" label="FIRSTRUNPRIVATE_GETLOCALIZEDSTRINGS"/>
- <int value="646" label="FIRSTRUNPRIVATE_LAUNCHTUTORIAL"/>
- <int value="647" label="SOCKETS_UDP_SETPAUSED"/>
- <int value="648" label="WEBVIEW_CAPTUREVISIBLEREGION"/>
- <int value="649" label="MEDIAGALLERIES_GETMETADATA"/>
- <int value="650" label="INPUT_IME_SENDKEYEVENTS"/>
-</enum>
-
-<enum name="ExtensionInstallCause" type="int">
- <int value="0" label="INSTALL_CAUSE_UNSET"/>
- <int value="1" label="INSTALL_CAUSE_USER_DOWNLOAD"/>
- <int value="2" label="INSTALL_CAUSE_UPDATE"/>
- <int value="3" label="INSTALL_CAUSE_EXTERNAL_FILE"/>
- <int value="4" label="INSTALL_CAUSE_AUTOMATION"/>
-</enum>
-
-<enum name="ExtensionInstallVerifierGetSignatureResult" type="int">
- <int value="0" label="No signature (network error, etc)"/>
- <int value="1" label="Invalid signature"/>
- <int value="2" label="Valid signature"/>
-</enum>
-
-<enum name="ExtensionInstallVerifierInitResult" type="int">
- <int value="0" label="No value in prefs"/>
- <int value="1" label="Pref present but parsing failed"/>
- <int value="2" label="Invalid signature"/>
- <int value="3" label="Valid signature"/>
-</enum>
-
-<enum name="ExtensionInstallVerifierMustRemainDisabled" type="int">
- <int value="0" label="VERIFIED"/>
- <int value="1" label="NOT_EXTENSION"/>
- <int value="2" label="UNPACKED"/>
- <int value="3" label="ENTERPRISE_POLICY_ALLOWED"/>
- <int value="4" label="FORCED_NOT_VERIFIED"/>
- <int value="5" label="NOT_FROM_STORE"/>
- <int value="6" label="NO_SIGNATURE"/>
- <int value="7" label="NOT_VERIFIED_BUT_NOT_ENFORCING"/>
- <int value="8" label="NOT_VERIFIED"/>
-</enum>
-
-<enum name="ExtensionLaunchType" type="int">
- <int value="0" label="PINNED"/>
- <int value="1" label="REGULAR"/>
- <int value="2" label="FULLSCREEN"/>
-</enum>
-
-<enum name="ExtensionLocation" type="int">
- <int value="0" label="INVALID"/>
- <int value="1" label="INTERNAL"/>
- <int value="2" label="EXTERNAL_PREF"/>
- <int value="3" label="EXTERNAL_REGISTRY"/>
- <int value="4" label="LOAD"/>
- <int value="5" label="COMPONENT"/>
- <int value="6" label="EXTERNAL_PREF_DOWNLOAD"/>
- <int value="7" label="EXTERNAL_POLICY_DOWNLOAD"/>
- <int value="8" label="COMMAND_LINE"/>
- <int value="9" label="EXTERNAL_POLICY"/>
- <int value="10" label="EXTERNAL_COMPONENT"/>
-</enum>
-
-<enum name="ExtensionPermission" type="int">
- <int value="0" label="UNKNOWN"/>
- <int value="1" label="NONE"/>
- <int value="2" label="BOOKMARKS"/>
- <int value="3" label="GEOLOCATION"/>
- <int value="4" label="BROWSING_HISTORY"/>
- <int value="5" label="TABS"/>
- <int value="6" label="MANAGEMENT"/>
- <int value="7" label="DEBUGGER"/>
- <int value="8" label="1_HOST"/>
- <int value="9" label="2_HOSTS"/>
- <int value="10" label="3_HOSTS"/>
- <int value="11" label="4_OR_MORE_HOSTS"/>
- <int value="12" label="ALL_HOSTS"/>
- <int value="13" label="FULL_ACCESS"/>
- <int value="14" label="CLIPBOARD"/>
- <int value="15" label="TTS_ENGINE"/>
- <int value="16" label="CONTENT_SETTINGS"/>
- <int value="17" label="PRIVACY"/>
- <int value="18" label="MANAGED_MODE"/>
- <int value="19" label="INPUT"/>
- <int value="20" label="AUDIO_CAPTURE"/>
- <int value="21" label="VIDEO_CAPTURE"/>
- <int value="22" label="DOWNLOADS"/>
- <int value="23" label="FILE_SYSTEM_WRITE"/>
- <int value="24" label="ALL_MEDIA_GALLERIES"/>
- <int value="25" label="SERIAL"/>
- <int value="26" label="SOCKET_ANY_HOST"/>
- <int value="27" label="SOCKET_DOMAIN_HOSTS"/>
- <int value="28" label="SOCKET_SPECIFIC_HOSTS"/>
-</enum>
-
-<enum name="ExtensionType" type="int">
- <int value="0" label="UNKNOWN"/>
- <int value="1" label="EXTENSION"/>
- <int value="2" label="THEME"/>
- <int value="3" label="USER_SCRIPT"/>
- <int value="4" label="HOSTED_APP"/>
- <int value="5" label="LEGACY_PACKAGED_APP"/>
- <int value="6" label="PLATFORM_APP"/>
-</enum>
-
-<enum name="ExtensionUnpackFailureReason" type="int">
- <summary>
- Reasons the sandboxed extension unpacker can fail. See enum FailureReason
- in src/chrome/browser/extensions/sandboxed_extension_unpacker.h .
- </summary>
- <int value="0" label="COULD_NOT_GET_TEMP_DIRECTORY"/>
- <int value="1" label="COULD_NOT_CREATE_TEMP_DIRECTORY"/>
- <int value="2" label="FAILED_TO_COPY_EXTENSION_FILE_TO_TEMP_DIRECTORY"/>
- <int value="3" label="COULD_NOT_GET_SANDBOX_FRIENDLY_PATH"/>
- <int value="4" label="COULD_NOT_LOCALIZE_EXTENSION"/>
- <int value="5" label="INVALID_MANIFEST"/>
- <int value="6" label="UNPACKER_CLIENT_FAILED"/>
- <int value="7" label="UTILITY_PROCESS_CRASHED_WHILE_TRYING_TO_INSTALL"/>
- <int value="8" label="CRX_FILE_NOT_READABLE"/>
- <int value="9" label="CRX_HEADER_INVALID"/>
- <int value="10" label="CRX_MAGIC_NUMBER_INVALID"/>
- <int value="11" label="CRX_VERSION_NUMBER_INVALID"/>
- <int value="12" label="CRX_EXCESSIVELY_LARGE_KEY_OR_SIGNATURE"/>
- <int value="13" label="CRX_ZERO_KEY_LENGTH"/>
- <int value="14" label="CRX_ZERO_SIGNATURE_LENGTH"/>
- <int value="15" label="CRX_PUBLIC_KEY_INVALID"/>
- <int value="16" label="CRX_SIGNATURE_INVALID"/>
- <int value="17" label="CRX_SIGNATURE_VERIFICATION_INITIALIZATION_FAILED"/>
- <int value="18" label="CRX_SIGNATURE_VERIFICATION_FAILED"/>
- <int value="19" label="ERROR_SERIALIZING_MANIFEST_JSON"/>
- <int value="20" label="ERROR_SAVING_MANIFEST_JSON"/>
- <int value="21" label="COULD_NOT_READ_IMAGE_DATA_FROM_DISK"/>
- <int value="22" label="DECODED_IMAGES_DO_NOT_MATCH_THE_MANIFEST"/>
- <int value="23" label="INVALID_PATH_FOR_BROWSER_IMAGE"/>
- <int value="24" label="ERROR_REMOVING_OLD_IMAGE_FILE"/>
- <int value="25" label="INVALID_PATH_FOR_BITMAP_IMAGE"/>
- <int value="26" label="ERROR_RE_ENCODING_THEME_IMAGE"/>
- <int value="27" label="ERROR_SAVING_THEME_IMAGE"/>
- <int value="28" label="COULD_NOT_READ_CATALOG_DATA_FROM_DISK"/>
- <int value="29" label="INVALID_CATALOG_DATA"/>
- <int value="30" label="INVALID_PATH_FOR_CATALOG"/>
- <int value="31" label="ERROR_SERIALIZING_CATALOG"/>
- <int value="32" label="ERROR_SAVING_CATALOG"/>
-</enum>
-
-<enum name="ExternalDeviceAction" type="int">
- <int value="0" label="Import to Drive"/>
- <int value="1" label="View files"/>
- <int value="2" label="View files (automatically)"/>
- <int value="3" label="Watch video"/>
- <int value="4" label="Error"/>
- <int value="5" label="Close (no action)"/>
-</enum>
-
-<enum name="ExternalItemState" type="int">
- <int value="0" label="DEPRECATED_DISABLED"/>
- <int value="1" label="DEPRECATED_ENABLED"/>
- <int value="2" label="DISABLED (in webstore)"/>
- <int value="3" label="ENABLED (in webstore)"/>
- <int value="4" label="DISABLED (not in webstore)"/>
- <int value="5" label="ENABLED (not in webstore)"/>
- <int value="6" label="UNINSTALLED (in webstore)"/>
- <int value="7" label="UNINSTALLED (not in webstore)"/>
-</enum>
-
-<enum name="Exynos5250LotIdEnum" type="int">
- <int value="0" label="Fused device"/>
- <int value="1" label="Generic unfused device"/>
- <int value="2" label="Unfused; lot ID NZVPU"/>
- <int value="3" label="Unfused; lot ID NZVR7"/>
-</enum>
-
-<enum name="FallbackSSLVersion" type="int">
- <int value="0" label="FALLBACK_NONE">SSL version fallback did not occur.</int>
- <int value="1" label="FALLBACK_SSL3">Fell back on SSL 3.0.</int>
- <int value="2" label="FALLBACK_TLS1">Fell back on TLS 1.0.</int>
- <int value="3" label="FALLBACK_TLS1_1">Fell back on TLS 1.1.</int>
-</enum>
-
-<enum name="FeatureObserver" type="int">
-<!-- See http://src.chromium.org/viewvc/blink/trunk/Source/core/page/UseCounter.h -->
-
- <int value="0" label="PageDestruction"/>
- <int value="1" label="LegacyNotifications"/>
- <int value="2" label="MultipartMainResource"/>
- <int value="3" label="PrefixedIndexedDB"/>
- <int value="4" label="WorkerStart"/>
- <int value="5" label="SharedWorkerStart"/>
- <int value="6" label="LegacyWebAudioNoteOn"/>
- <int value="7" label="WebAudioStart"/>
- <int value="8" label="PrefixedContentSecurityPolicy"/>
- <int value="9" label="UnprefixedIndexedDB"/>
- <int value="10" label="OpenWebDatabase"/>
- <int value="11" label="LegacyHTMLNotifications"/>
- <int value="12" label="LegacyTextNotifications"/>
- <int value="13" label="UnprefixedRequestAnimationFrame"/>
- <int value="14" label="PrefixedRequestAnimationFrame"/>
- <int value="15" label="ContentSecurityPolicy"/>
- <int value="16" label="ContentSecurityPolicyReportOnly"/>
- <int value="17" label="PrefixedContentSecurityPolicyReportOnly"/>
- <int value="18" label="PrefixedTransitionEndEvent"/>
- <int value="19" label="UnprefixedTransitionEndEvent"/>
- <int value="20" label="PrefixedAndUnprefixedTransitionEndEvent"/>
- <int value="21" label="AutoFocusAttribute"/>
- <int value="22" label="DeprecatedAutoSaveAttribute"/>
- <int value="23" label="DataListElement"/>
- <int value="24" label="FormAttribute"/>
- <int value="25" label="IncrementalAttribute"/>
- <int value="26" label="InputTypeColor"/>
- <int value="27" label="InputTypeDate"/>
- <int value="28" label="InputTypeDateTime"/>
- <int value="29" label="InputTypeDateTimeFallback"/>
- <int value="30" label="InputTypeDateTimeLocal"/>
- <int value="31" label="InputTypeEmail"/>
- <int value="32" label="InputTypeMonth"/>
- <int value="33" label="InputTypeNumber"/>
- <int value="34" label="InputTypeRange"/>
- <int value="35" label="InputTypeSearch"/>
- <int value="36" label="InputTypeTel"/>
- <int value="37" label="InputTypeTime"/>
- <int value="38" label="InputTypeURL"/>
- <int value="39" label="InputTypeWeek"/>
- <int value="40" label="InputTypeWeekFallback"/>
- <int value="41" label="ListAttribute"/>
- <int value="42" label="MaxAttribute"/>
- <int value="43" label="MinAttribute"/>
- <int value="44" label="PatternAttribute"/>
- <int value="45" label="PlaceholderAttribute"/>
- <int value="46" label="PrecisionAttribute"/>
- <int value="47" label="PrefixedDirectoryAttribute"/>
- <int value="48" label="PrefixedSpeechAttribute"/>
- <int value="49" label="RequiredAttribute"/>
- <int value="50" label="ResultsAttribute"/>
- <int value="51" label="StepAttribute"/>
- <int value="52" label="PageVisits"/>
- <int value="53" label="HTMLMarqueeElement"/>
- <int value="54" label="Unused: CSSOverflowMarquee"/>
- <int value="55" label="Reflection"/>
- <int value="56" label="CursorVisibility"/>
- <int value="57" label="StorageInfo"/>
- <int value="58" label="XFrameOptions"/>
- <int value="59" label="XFrameOptionsSameOrigin"/>
- <int value="60" label="XFrameOptionsSameOriginWithBadAncestorChain"/>
- <int value="61" label="DeprecatedFlexboxWebContent"/>
- <int value="62" label="DeprecatedFlexboxChrome"/>
- <int value="63" label="DeprecatedFlexboxChromeExtension"/>
- <int value="64" label="SVGTRefElement"/>
- <int value="65" label="UnprefixedPerformanceTimeline"/>
- <int value="66" label="PrefixedPerformanceTimeline"/>
- <int value="67" label="UnprefixedUserTiming"/>
- <int value="68" label="PrefixedUserTiming"/>
- <int value="69" label="WindowEvent"/>
- <int value="70" label="ContentSecurityPolicyWithBaseElement"/>
- <int value="71" label="PrefixedMediaAddKey"/>
- <int value="72" label="PrefixedMediaGenerateKeyRequest"/>
- <int value="73" label="WebAudioLooping"/>
- <int value="74" label="DocumentClear"/>
- <int value="75" label="PrefixedTransitionMediaFeature"/>
- <int value="76" label="SVGFontElement"/>
- <int value="77" label="XMLDocument"/>
- <int value="78" label="XSLProcessingInstruction"/>
- <int value="79" label="XSLTProcessor"/>
- <int value="80" label="SVGSwitchElement"/>
- <int value="81" label="PrefixedDocumentRegister"/>
- <int value="82" label="HTMLShadowElementOlderShadowRoot"/>
- <int value="83" label="Document.all()"/>
- <int value="84" label="FormElement"/>
- <int value="85" label="DemotedFormElement"/>
- <int value="86" label="CaptureAttributeAsEnum"/>
- <int value="87" label="ShadowDOMPrefixedPseudo"/>
- <int value="88" label="ShadowDOMPrefixedCreateShadowRoot"/>
- <int value="89" label="ShadowDOMPrefixedShadowRoot"/>
- <int value="90" label="SVGAnimationElement"/>
- <int value="91" label="KeyboardEventKeyLocation"/>
- <int value="92" label="CaptureEvents"/>
- <int value="93" label="ReleaseEvents"/>
- <int value="94" label="CSSDisplayRunIn"/>
- <int value="95" label="CSSDisplayCompact"/>
- <int value="96" label="LineClamp"/>
- <int value="97" label="SubFrameBeforeUnloadRegistered"/>
- <int value="98" label="SubFrameBeforeUnloadFired"/>
- <int value="99" label="CSSPseudoElementPrefixedDistributed"/>
- <int value="100" label="TextReplaceWholeText"/>
- <int value="101" label="PrefixedShadowRootConstructor"/>
- <int value="102" label="ConsoleMarkTimeline"/>
- <int value="103" label="CSSPseudoElementUserAgentCustomPseudo"/>
- <int value="104" label="DocumentTypeEntities"/>
- <int value="105" label="DocumentTypeInternalSubset"/>
- <int value="106" label="DocumentTypeNotations"/>
- <int value="107" label="ElementGetAttributeNode"/>
- <int value="108" label="ElementSetAttributeNode"/>
- <int value="109" label="ElementRemoveAttributeNode"/>
- <int value="110" label="ElementGetAttributeNodeNS"/>
- <int value="111" label="DocumentCreateAttribute"/>
- <int value="112" label="DocumentCreateAttributeNS"/>
- <int value="113" label="DocumentCreateCDATASection"/>
- <int value="114" label="DocumentInputEncoding"/>
- <int value="115" label="DocumentXMLEncoding"/>
- <int value="116" label="DocumentXMLStandalone"/>
- <int value="117" label="DocumentXMLVersion"/>
- <int value="118" label="NodeIsSameNode"/>
- <int value="119" label="NodeIsSupported"/>
- <int value="120" label="NodeNamespaceURI"/>
- <int value="121" label="NodePrefix"/>
- <int value="122" label="NodeLocalName"/>
- <int value="123" label="NavigatorProductSub"/>
- <int value="124" label="NavigatorVendor"/>
- <int value="125" label="NavigatorVendorSub"/>
- <int value="126" label="FileError"/>
- <int value="127" label="DocumentCharset"/>
- <int value="128" label="PrefixedAnimationEndEvent"/>
- <int value="129" label="UnprefixedAnimationEndEvent"/>
- <int value="130" label="PrefixedAndUnprefixedAnimationEndEvent"/>
- <int value="131" label="PrefixedAnimationStartEvent"/>
- <int value="132" label="UnprefixedAnimationStartEvent"/>
- <int value="133" label="PrefixedAndUnprefixedAnimationStartEvent"/>
- <int value="134" label="PrefixedAnimationIterationEvent"/>
- <int value="135" label="UnprefixedAnimationIterationEvent"/>
- <int value="136" label="PrefixedAndUnprefixedAnimationIterationEvent"/>
- <int value="137" label="EventReturnValue"/>
- <int value="138" label="SVGSVGElement"/>
- <int value="139" label="SVGAnimateColorElement"/>
- <int value="140" label="InsertAdjacentText"/>
- <int value="141" label="InsertAdjacentElement"/>
- <int value="142" label="HasAttributes"/>
- <int value="143" label="DOMSubtreeModifiedEvent"/>
- <int value="144" label="DOMNodeInsertedEvent"/>
- <int value="145" label="DOMNodeRemovedEvent"/>
- <int value="146" label="DOMNodeRemovedFromDocumentEvent"/>
- <int value="147" label="DOMNodeInsertedIntoDocumentEvent"/>
- <int value="148" label="DOMCharacterDataModifiedEvent"/>
- <int value="149" label="DocumentAllTags"/>
- <int value="150" label="DocumentAllLegacyCall"/>
- <int value="151" label="HTMLAppletElementLegacyCall"/>
- <int value="152" label="HTMLEmbedElementLegacyCall"/>
- <int value="153" label="HTMLObjectElementLegacyCall"/>
- <int value="154" label="BeforeLoadEvent"/>
- <int value="155" label="GetMatchedCSSRules"/>
- <int value="156" label="SVGFontInCSS"/>
- <int value="157" label="ScrollTopBodyNotQuirksMode"/>
- <int value="158" label="ScrollLeftBodyNotQuirksMode"/>
- <int value="159" label="AttributeIsId"/>
- <int value="160" label="AttributeOwnerElement"/>
- <int value="161" label="AttributeSetPrefix"/>
- <int value="162" label="AttributeSpecified"/>
- <int value="163" label="BeforeLoadEventInIsolatedWorld"/>
- <int value="164" label="PrefixedAudioDecodedByteCount"/>
- <int value="165" label="PrefixedVideoDecodedByteCount"/>
- <int value="166" label="PrefixedVideoSupportsFullscreen"/>
- <int value="167" label="PrefixedVideoDisplayingFullscreen"/>
- <int value="168" label="PrefixedVideoEnterFullscreen"/>
- <int value="169" label="PrefixedVideoExitFullscreen"/>
- <int value="170" label="PrefixedVideoEnterFullScreen"/>
- <int value="171" label="PrefixedVideoExitFullScreen"/>
- <int value="172" label="PrefixedVideoDecodedFrameCount"/>
- <int value="173" label="PrefixedVideoDroppedFrameCount"/>
- <int value="174" label="SourceElementCandidate"/>
- <int value="175" label="SourceElementNonMatchingMedia"/>
- <int value="176" label="PrefixedElementRequestFullscreen"/>
- <int value="177" label="PrefixedElementRequestFullScreen"/>
- <int value="178" label="BarPropLocationbar"/>
- <int value="179" label="BarPropMenubar"/>
- <int value="180" label="BarPropPersonalbar"/>
- <int value="181" label="BarPropScrollbars"/>
- <int value="182" label="BarPropStatusbar"/>
- <int value="183" label="BarPropToolbar"/>
- <int value="184" label="input[type=email][multiple]"/>
- <int value="185" label="input[type=email][maxlength]"/>
- <int value="186" label="input[type=email][multiple][maxlength]"/>
- <int value="187" label="TextTrackCueConstructor"/>
- <int value="188" label="CSSStyleDeclarationPropertyName"/>
- <int value="189" label="CSSStyleDeclarationFloatPropertyName"/>
- <int value="190" label="InputTypeText"/>
- <int value="191" label="InputTypeTextMaxLength"/>
- <int value="192" label="InputTypePassword"/>
- <int value="193" label="InputTypePasswordMaxLength"/>
- <int value="194" label="SVGInstanceRoot"/>
- <int value="195" label="ShowModalDialog"/>
- <int value="196" label="PrefixedPageVisibility"/>
- <int value="197" label="HTMLFrameElementLocation"/>
- <int value="198" label="CSSStyleSheetInsertRuleOptionalArg"/>
- <int value="199" label="CSSWebkitRegionAtRule"/>
- <int value="200" label="DocumentBeforeUnloadRegistered"/>
- <int value="201" label="DocumentBeforeUnloadFired"/>
- <int value="202" label="DocumentUnloadRegistered"/>
- <int value="203" label="DocumentUnloadFired"/>
- <int value="204" label="SVGLocatableNearestViewportElement"/>
- <int value="205" label="SVGLocatableFarthestViewportElement"/>
- <int value="206" label="IsIndexElement"/>
- <int value="207" label="HTMLHeadElementProfile"/>
- <int value="208" label="OverflowChangedEvent"/>
- <int value="209" label="SVGPointMatrixTransform"/>
- <int value="210" label="HTMLHtmlElementManifest"/>
- <int value="211" label="DOMFocusInOutEvent"/>
- <int value="212" label="FileGetLastModifiedDate"/>
- <int value="213" label="HTMLElementInnerText"/>
- <int value="214" label="HTMLElementOuterText"/>
- <int value="215" label="ReplaceDocumentViaJavaScriptURL"/>
- <int value="216" label="ElementSetAttributeNodeNS"/>
- <int value="217" label="ElementPrefixedMatchesSelector"/>
- <int value="218" label="DOMImplementationCreateCSSStyleSheet"/>
-</enum>
-
-<enum name="FFmpegCodecs" type="int">
- <int value="0" label="NONE"/>
- <int value="1" label="MPEG1VIDEO"/>
- <int value="2" label="MPEG2VIDEO"/>
- <int value="3" label="MPEG2VIDEO_XVMC"/>
- <int value="4" label="H261"/>
- <int value="5" label="H263"/>
- <int value="6" label="RV10"/>
- <int value="7" label="RV20"/>
- <int value="8" label="MJPEG"/>
- <int value="9" label="MJPEGB"/>
- <int value="10" label="LJPEG"/>
- <int value="11" label="SP5X"/>
- <int value="12" label="JPEGLS"/>
- <int value="13" label="MPEG4"/>
- <int value="14" label="RAWVIDEO"/>
- <int value="15" label="MSMPEG4V1"/>
- <int value="16" label="MSMPEG4V2"/>
- <int value="17" label="MSMPEG4V3"/>
- <int value="18" label="WMV1"/>
- <int value="19" label="WMV2"/>
- <int value="20" label="H263P"/>
- <int value="21" label="H263I"/>
- <int value="22" label="FLV1"/>
- <int value="23" label="SVQ1"/>
- <int value="24" label="SVQ3"/>
- <int value="25" label="DVVIDEO"/>
- <int value="26" label="HUFFYUV"/>
- <int value="27" label="CYUV"/>
- <int value="28" label="H264"/>
- <int value="29" label="INDEO3"/>
- <int value="30" label="VP3"/>
- <int value="31" label="THEORA"/>
- <int value="32" label="ASV1"/>
- <int value="33" label="ASV2"/>
- <int value="34" label="FFV1"/>
- <int value="35" label="4XM"/>
- <int value="36" label="VCR1"/>
- <int value="37" label="CLJR"/>
- <int value="38" label="MDEC"/>
- <int value="39" label="ROQ"/>
- <int value="40" label="INTERPLAY_VIDEO"/>
- <int value="41" label="XAN_WC3"/>
- <int value="42" label="XAN_WC4"/>
- <int value="43" label="RPZA"/>
- <int value="44" label="CINEPAK"/>
- <int value="45" label="WS_VQA"/>
- <int value="46" label="MSRLE"/>
- <int value="47" label="MSVIDEO1"/>
- <int value="48" label="IDCIN"/>
- <int value="49" label="8BPS"/>
- <int value="50" label="SMC"/>
- <int value="51" label="FLIC"/>
- <int value="52" label="TRUEMOTION1"/>
- <int value="53" label="VMDVIDEO"/>
- <int value="54" label="MSZH"/>
- <int value="55" label="ZLIB"/>
- <int value="56" label="QTRLE"/>
- <int value="57" label="SNOW"/>
- <int value="58" label="TSCC"/>
- <int value="59" label="ULTI"/>
- <int value="60" label="QDRAW"/>
- <int value="61" label="VIXL"/>
- <int value="62" label="QPEG"/>
- <int value="63" label="PNG"/>
- <int value="64" label="PPM"/>
- <int value="65" label="PBM"/>
- <int value="66" label="PGM"/>
- <int value="67" label="PGMYUV"/>
- <int value="68" label="PAM"/>
- <int value="69" label="FFVHUFF"/>
- <int value="70" label="RV30"/>
- <int value="71" label="RV40"/>
- <int value="72" label="VC1"/>
- <int value="73" label="WMV3"/>
- <int value="74" label="LOCO"/>
- <int value="75" label="WNV1"/>
- <int value="76" label="AASC"/>
- <int value="77" label="INDEO2"/>
- <int value="78" label="FRAPS"/>
- <int value="79" label="TRUEMOTION2"/>
- <int value="80" label="BMP"/>
- <int value="81" label="CSCD"/>
- <int value="82" label="MMVIDEO"/>
- <int value="83" label="ZMBV"/>
- <int value="84" label="AVS"/>
- <int value="85" label="SMACKVIDEO"/>
- <int value="86" label="NUV"/>
- <int value="87" label="KMVC"/>
- <int value="88" label="FLASHSV"/>
- <int value="89" label="CAVS"/>
- <int value="90" label="JPEG2000"/>
- <int value="91" label="VMNC"/>
- <int value="92" label="VP5"/>
- <int value="93" label="VP6"/>
- <int value="94" label="VP6F"/>
- <int value="95" label="TARGA"/>
- <int value="96" label="DSICINVIDEO"/>
- <int value="97" label="TIERTEXSEQVIDEO"/>
- <int value="98" label="TIFF"/>
- <int value="99" label="GIF"/>
- <int value="100" label="DXA"/>
- <int value="101" label="DNXHD"/>
- <int value="102" label="THP"/>
- <int value="103" label="SGI"/>
- <int value="104" label="C93"/>
- <int value="105" label="BETHSOFTVID"/>
- <int value="106" label="PTX"/>
- <int value="107" label="TXD"/>
- <int value="108" label="VP6A"/>
- <int value="109" label="AMV"/>
- <int value="110" label="VB"/>
- <int value="111" label="PCX"/>
- <int value="112" label="SUNRAST"/>
- <int value="113" label="INDEO4"/>
- <int value="114" label="INDEO5"/>
- <int value="115" label="MIMIC"/>
- <int value="116" label="RL2"/>
- <int value="117" label="ESCAPE124"/>
- <int value="118" label="DIRAC"/>
- <int value="119" label="BFI"/>
- <int value="120" label="CMV"/>
- <int value="121" label="MOTIONPIXELS"/>
- <int value="122" label="TGV"/>
- <int value="123" label="TGQ"/>
- <int value="124" label="TQI"/>
- <int value="125" label="AURA"/>
- <int value="126" label="AURA2"/>
- <int value="127" label="V210X"/>
- <int value="128" label="TMV"/>
- <int value="129" label="V210"/>
- <int value="130" label="DPX"/>
- <int value="131" label="MAD"/>
- <int value="132" label="FRWU"/>
- <int value="133" label="FLASHSV2"/>
- <int value="134" label="CDGRAPHICS"/>
- <int value="135" label="R210"/>
- <int value="136" label="ANM"/>
- <int value="137" label="BINKVIDEO"/>
- <int value="138" label="IFF_ILBM"/>
- <int value="139" label="IFF_BYTERUN1"/>
- <int value="140" label="KGV1"/>
- <int value="141" label="YOP"/>
- <int value="142" label="VP8"/>
- <int value="143" label="PICTOR"/>
- <int value="144" label="ANSI"/>
- <int value="145" label="A64_MULTI"/>
- <int value="146" label="A64_MULTI5"/>
- <int value="147" label="R10K"/>
- <int value="148" label="MXPEG"/>
- <int value="149" label="LAGARITH"/>
- <int value="150" label="PRORES"/>
- <int value="151" label="JV"/>
- <int value="152" label="DFA"/>
- <int value="153" label="WMV3IMAGE"/>
- <int value="154" label="VC1IMAGE"/>
- <int value="155" label="UTVIDEO"/>
- <int value="156" label="BMV_VIDEO"/>
- <int value="157" label="VBLE"/>
- <int value="158" label="DXTORY"/>
- <int value="159" label="V410"/>
- <int value="160" label="XWD"/>
- <int value="161" label="CDXL"/>
- <int value="162" label="XBM"/>
- <int value="163" label="ZEROCODEC"/>
- <int value="164" label="MSS1"/>
- <int value="165" label="MSA1"/>
- <int value="166" label="TSCC2"/>
- <int value="167" label="MTS2"/>
- <int value="168" label="CLLC"/>
- <int value="169" label="MSS2"/>
- <int value="170" label="VP9"/>
- <int value="65536" label="PCM_S16LE"/>
- <int value="65537" label="PCM_S16BE"/>
- <int value="65538" label="PCM_U16LE"/>
- <int value="65539" label="PCM_U16BE"/>
- <int value="65540" label="PCM_S8"/>
- <int value="65541" label="PCM_U8"/>
- <int value="65542" label="PCM_MULAW"/>
- <int value="65543" label="PCM_ALAW"/>
- <int value="65544" label="PCM_S32LE"/>
- <int value="65545" label="PCM_S32BE"/>
- <int value="65546" label="PCM_U32LE"/>
- <int value="65547" label="PCM_U32BE"/>
- <int value="65548" label="PCM_S24LE"/>
- <int value="65549" label="PCM_S24BE"/>
- <int value="65550" label="PCM_U24LE"/>
- <int value="65551" label="PCM_U24BE"/>
- <int value="65552" label="PCM_S24DAUD"/>
- <int value="65553" label="PCM_ZORK"/>
- <int value="65554" label="PCM_S16LE_PLANAR"/>
- <int value="65555" label="PCM_DVD"/>
- <int value="65556" label="PCM_F32BE"/>
- <int value="65557" label="PCM_F32LE"/>
- <int value="65558" label="PCM_F64BE"/>
- <int value="65559" label="PCM_F64LE"/>
- <int value="65560" label="PCM_BLURAY"/>
- <int value="65561" label="PCM_LXF"/>
- <int value="65562" label="S302M"/>
- <int value="65563" label="PCM_S8_PLANAR"/>
- <int value="69632" label="ADPCM_IMA_QT"/>
- <int value="69633" label="ADPCM_IMA_WAV"/>
- <int value="69634" label="ADPCM_IMA_DK3"/>
- <int value="69635" label="ADPCM_IMA_DK4"/>
- <int value="69636" label="ADPCM_IMA_WS"/>
- <int value="69637" label="ADPCM_IMA_SMJPEG"/>
- <int value="69638" label="ADPCM_MS"/>
- <int value="69639" label="ADPCM_4XM"/>
- <int value="69640" label="ADPCM_XA"/>
- <int value="69641" label="ADPCM_ADX"/>
- <int value="69642" label="ADPCM_EA"/>
- <int value="69643" label="ADPCM_G726"/>
- <int value="69644" label="ADPCM_CT"/>
- <int value="69645" label="ADPCM_SWF"/>
- <int value="69646" label="ADPCM_YAMAHA"/>
- <int value="69647" label="ADPCM_SBPRO_4"/>
- <int value="69648" label="ADPCM_SBPRO_3"/>
- <int value="69649" label="ADPCM_SBPRO_2"/>
- <int value="69650" label="ADPCM_THP"/>
- <int value="69651" label="ADPCM_IMA_AMV"/>
- <int value="69652" label="ADPCM_EA_R1"/>
- <int value="69653" label="ADPCM_EA_R3"/>
- <int value="69654" label="ADPCM_EA_R2"/>
- <int value="69655" label="ADPCM_IMA_EA_SEAD"/>
- <int value="69656" label="ADPCM_IMA_EA_EACS"/>
- <int value="69657" label="ADPCM_EA_XAS"/>
- <int value="69658" label="ADPCM_EA_MAXIS_XA"/>
- <int value="69659" label="ADPCM_IMA_ISS"/>
- <int value="69660" label="ADPCM_G722"/>
- <int value="69661" label="ADPCM_IMA_APC"/>
- <int value="73728" label="AMR_NB"/>
- <int value="73729" label="AMR_WB"/>
- <int value="77824" label="RA_144"/>
- <int value="77825" label="RA_288"/>
- <int value="81920" label="ROQ_DPCM"/>
- <int value="81921" label="INTERPLAY_DPCM"/>
- <int value="81922" label="XAN_DPCM"/>
- <int value="81923" label="SOL_DPCM"/>
- <int value="86016" label="MP2"/>
- <int value="86017" label="MP3"/>
- <int value="86018" label="AAC"/>
- <int value="86019" label="AC3"/>
- <int value="86020" label="DTS"/>
- <int value="86021" label="VORBIS"/>
- <int value="86022" label="DVAUDIO"/>
- <int value="86023" label="WMAV1"/>
- <int value="86024" label="WMAV2"/>
- <int value="86025" label="MACE3"/>
- <int value="86026" label="MACE6"/>
- <int value="86027" label="VMDAUDIO"/>
- <int value="86028" label="FLAC"/>
- <int value="86029" label="MP3ADU"/>
- <int value="86030" label="MP3ON4"/>
- <int value="86031" label="SHORTEN"/>
- <int value="86032" label="ALAC"/>
- <int value="86033" label="WESTWOOD_SND1"/>
- <int value="86034" label="GSM"/>
- <int value="86035" label="QDM2"/>
- <int value="86036" label="COOK"/>
- <int value="86037" label="TRUESPEECH"/>
- <int value="86038" label="TTA"/>
- <int value="86039" label="SMACKAUDIO"/>
- <int value="86040" label="QCELP"/>
- <int value="86041" label="WAVPACK"/>
- <int value="86042" label="DSICINAUDIO"/>
- <int value="86043" label="IMC"/>
- <int value="86044" label="MUSEPACK7"/>
- <int value="86045" label="MLP"/>
- <int value="86046" label="GSM_MS"/>
- <int value="86047" label="ATRAC3"/>
- <int value="86048" label="VOXWARE"/>
- <int value="86049" label="APE"/>
- <int value="86050" label="NELLYMOSER"/>
- <int value="86051" label="MUSEPACK8"/>
- <int value="86052" label="SPEEX"/>
- <int value="86053" label="WMAVOICE"/>
- <int value="86054" label="WMAPRO"/>
- <int value="86055" label="WMALOSSLESS"/>
- <int value="86056" label="ATRAC3P"/>
- <int value="86057" label="EAC3"/>
- <int value="86058" label="SIPR"/>
- <int value="86059" label="MP1"/>
- <int value="86060" label="TWINVQ"/>
- <int value="86061" label="TRUEHD"/>
- <int value="86062" label="MP4ALS"/>
- <int value="86063" label="ATRAC1"/>
- <int value="86064" label="BINKAUDIO_RDFT"/>
- <int value="86065" label="BINKAUDIO_DCT"/>
- <int value="86066" label="AAC_LATM"/>
- <int value="86067" label="QDMC"/>
- <int value="86068" label="CELT"/>
- <int value="86069" label="G723_1"/>
- <int value="86070" label="G729"/>
- <int value="86071" label="8SVX_EXP"/>
- <int value="86072" label="8SVX_FIB"/>
- <int value="86073" label="BMV_AUDIO"/>
- <int value="86074" label="RALF"/>
- <int value="86075" label="IAC"/>
- <int value="86076" label="ILBC"/>
- <int value="86077" label="OPUS_DEPRECATED"/>
- <int value="86078" label="COMFORT_NOISE"/>
- <int value="86079" label="TAK_DEPRECATED"/>
- <int value="94208" label="DVD_SUBTITLE"/>
- <int value="94209" label="DVB_SUBTITLE"/>
- <int value="94210" label="TEXT"/>
- <int value="94211" label="XSUB"/>
- <int value="94212" label="SSA"/>
- <int value="94213" label="MOV_TEXT"/>
- <int value="94214" label="HDMV_PGS_SUBTITLE"/>
- <int value="94215" label="DVB_TELETEXT"/>
- <int value="94216" label="SRT"/>
- <int value="98304" label="TTF"/>
- <int value="102400" label="PROBE"/>
- <int value="131072" label="MPEG2TS"/>
- <int value="131073" label="MPEG4SYSTEMS"/>
- <int value="135168" label="FFMETADATA"/>
- <int value="4665933" label="G2M"/>
- <int value="4801606" label="IDF"/>
- <int value="5198918" label="OTF"/>
- <int value="407917392" label="PCM_S24LE_PLANAR"/>
- <int value="542135120" label="PCM_S32LE_PLANAR"/>
- <int value="808530518" label="012V"/>
- <int value="809850962" label="EXR"/>
- <int value="944985688" label="8SVX_RAW"/>
- <int value="1095123744" label="ADPCM_AFC"/>
- <int value="1096176208" label="AVRP"/>
- <int value="1096176238" label="AVRN"/>
- <int value="1096176969" label="AVUI"/>
- <int value="1096373590" label="AYUV"/>
- <int value="1112557912" label="BRENDER_PIX"/>
- <int value="1112823892" label="BINTEXT"/>
- <int value="1129335105" label="CPIA"/>
- <int value="1160852272" label="ESCAPE130"/>
- <int value="1179014995" label="FFWAVESYNTH"/>
- <int value="1246975298" label="JACOSUB"/>
- <int value="1263294017" label="SMPTE_KLV"/>
- <int value="1297108018" label="MPL2"/>
- <int value="1297498929" label="MVC1"/>
- <int value="1297498930" label="MVC2"/>
- <int value="1330333984" label="ADPCM_IMA_OKI"/>
- <int value="1330664787" label="OPUS"/>
- <int value="1346455105" label="PAF_AUDIO"/>
- <int value="1346455126" label="PAF_VIDEO"/>
- <int value="1347637264" label="PCM_S16BE_PLANAR"/>
- <int value="1349012051" label="PJS"/>
- <int value="1381259348" label="REALTEXT"/>
- <int value="1396788553" label="SAMI"/>
- <int value="1396788813" label="SANM"/>
- <int value="1397180754" label="SGIRLE"/>
- <int value="1397706307" label="SONIC"/>
- <int value="1397706316" label="SONIC_LS"/>
- <int value="1397909872" label="SUBRIP"/>
- <int value="1398953521" label="SUBVIEWER1"/>
- <int value="1400201814" label="SUBVIEWER"/>
- <int value="1412575542" label="TARGA_Y216"/>
- <int value="1446195256" label="V308"/>
- <int value="1446260792" label="V408"/>
- <int value="1447644481" label="VIMA"/>
- <int value="1448111218" label="VPLAYER"/>
- <int value="1465275476" label="WEBVTT"/>
- <int value="1480739150" label="XBIN"/>
- <int value="1480999235" label="XFACE"/>
- <int value="1496592720" label="Y41P"/>
- <int value="1498764852" label="YUV4"/>
- <int value="1664495672" label="EIA_608"/>
- <int value="1833195076" label="MICRODVD"/>
- <int value="1936029283" label="EVRC"/>
- <int value="1936944502" label="SMV"/>
- <int value="1950507339" label="TAK"/>
-</enum>
-
-<enum name="FFmpegColorRanges" type="int">
- <int value="0" label="UNSPECIFIED"/>
- <int value="1" label="MPEG"/>
- <int value="2" label="JPEG"/>
-</enum>
-
-<enum name="FileDialogType" type="int">
- <int value="0" label="Select folder"/>
- <int value="1" label="Save as file"/>
- <int value="2" label="Open file"/>
- <int value="3" label="Open multiple files"/>
- <int value="4" label="Full page"/>
- <int value="5" label="Error"/>
-</enum>
-
-<enum name="FileType" type="int">
- <int value="0" label="other"/>
- <int value="1" label=".doc"/>
- <int value="2" label=".docx"/>
- <int value="3" label=".odt"/>
- <int value="4" label=".rtf"/>
- <int value="5" label=".pdf"/>
- <int value="6" label=".ppt"/>
- <int value="7" label=".pptx"/>
- <int value="8" label=".odp"/>
- <int value="9" label=".xls"/>
- <int value="10" label=".xlsx"/>
- <int value="11" label=".ods"/>
- <int value="12" label=".csv"/>
- <int value="13" label=".odf"/>
- <int value="14" label=".rar"/>
- <int value="15" label=".asf"/>
- <int value="16" label=".wma"/>
- <int value="17" label=".wmv"/>
- <int value="18" label=".mov"/>
- <int value="19" label=".mpg"/>
- <int value="20" label=".log"/>
-</enum>
-
-<enum name="FlashNavigateUsageType" type="int">
- <int value="0" label="Rejected because of Authorization header."/>
- <int value="1" label="Rejected because of Cache-Control header."/>
- <int value="2" label="Rejected because of Content-Encoding header."/>
- <int value="3" label="Rejected because of Content-MD5 header."/>
- <int value="4" label="Rejected because of Content-Type header."/>
- <int value="5" label="Rejected because of Expires header."/>
- <int value="6" label="Rejected because of From header."/>
- <int value="7" label="Rejected because of If-Match header."/>
- <int value="8" label="Rejected because of If-None-Match header."/>
- <int value="9" label="Rejected because of If-Range header."/>
- <int value="10" label="Rejected because of If-Unmodified-Since header."/>
- <int value="11" label="Rejected because of Pragma header."/>
- <int value="12" label="Rejected because of Referer header."/>
- <int value="13"
- label="Rejected because of other headers (e.g., custom headers)."/>
- <int value="14" label="The total number of rejected navigate requests."/>
- <int value="15" label="The total number of navigate requests."/>
-</enum>
-
-<enum name="FtpDataConnectionError" type="int">
- <int value="0">Data connection successful</int>
- <int value="1">Local firewall blocked the connection</int>
- <int value="2">Connection timed out</int>
- <int value="3">
- Connection has been established, but then got broken (either reset or
- aborted)
- </int>
- <int value="4">Connection has been refused</int>
- <int value="20">Other kind of error</int>
-</enum>
-
-<enum name="FtpServerType" type="int">
- <summary>
- FTP server type as defined in net/ftp/ftp_server_type_histograms.h
- </summary>
- <int value="0" label="Unknown">
- Unknown (could be a server we don't support, a broken server, or a security
- attack)
- </int>
- <int value="1" label="/bin/ls">Server using /bin/ls -l and variants</int>
- <int value="2" label="/bin/dls">Server using /bin/dls</int>
- <int value="3" label="EPLF">Server using EPLF format</int>
- <int value="4" label="WinNT">
- WinNT server configured for old style listing
- </int>
- <int value="5" label="VMS">VMS (including variants)</int>
- <int value="6" label="IBM VM">IBM VM/CMS, VM/ESA, z/VM formats</int>
- <int value="7" label="OS/2">OS/2 FTP Server</int>
- <int value="8" label="win16">
- win16 hosts: SuperTCP or NetManage Chameleon
- </int>
-</enum>
-
-<enum name="GaiaSessionRestoreOutcome" type="int">
- <int value="0" label="UNDEFINED"/>
- <int value="1" label="SUCCESS"/>
- <int value="2" label="RESTORE_TOKEN_FETCH_FAILED"/>
- <int value="3" label="NO_REFRESH_TOKEN_FAILED"/>
- <int value="4" label="OAUTHLOGIN_FAILED"/>
- <int value="5" label="MERGESESSION_FAILED"/>
-</enum>
-
-<enum name="GDataAuthResult" type="int">
- <int value="0" label="FAILURE"/>
- <int value="1" label="SUCCESS"/>
- <int value="2" label="NO_CONNECTION"/>
-</enum>
-
-<enum name="GDataEntryKind" type="int">
- <obsolete>
- Deprecated 9/2012, and replaced by DriveEntryKind
- </obsolete>
- <int value="0" label="UNKNOWN"/>
- <int value="4097" label="ITEM"/>
- <int value="4098" label="SITE"/>
- <int value="8449" label="DOCUMENT"/>
- <int value="8450" label="SPEREADSHEET"/>
- <int value="8451" label="PRESENTATION"/>
- <int value="8452" label="DRAWING"/>
- <int value="8453" label="TABLE"/>
- <int value="8705" label="EXTERNAL_APP"/>
- <int value="16385" label="FOLDER"/>
- <int value="32769" label="FILE"/>
- <int value="32770" label="PDF"/>
-</enum>
-
-<enum name="GeolocationInfoBarDelegateAndroidEvent" type="int">
- <int value="0" label="User allowed the page to use geolocation">
- For the Android platform the count for this event should be exactly the same
- as the corresponding event in the GeolocationInfoBarDelegateEvent enum.
- </int>
- <int value="1" label="User opened geolocation settings"/>
-</enum>
-
-<enum name="GeolocationInfoBarDelegateEvent" type="int">
- <int value="0" label="The bar was created"/>
- <int value="1" label="User allowed use of geolocation"/>
- <int value="2" label="User denied use of geolocation"/>
- <int value="3" label="User dismissed the bar"/>
- <int value="4" label="User clicked on link"/>
- <int value="5" label="User ignored the bar"/>
-</enum>
-
-<enum name="GestureActionType" type="int">
- <int value="0" label="Unknown"/>
- <int value="1" label="Omnibox pinch"/>
- <int value="2" label="Omnibox scroll"/>
- <int value="3" label="Tabstrip pinch"/>
- <int value="4" label="Tabstrip scroll"/>
- <int value="5" label="Bezel scroll"/>
- <int value="6" label="Desktop scroll"/>
- <int value="7" label="Desktop pinch"/>
- <int value="8" label="Webpage pinch"/>
- <int value="9" label="Webpage scroll"/>
- <int value="10" label="Webpage tap"/>
- <int value="11" label="Tabstrip tap"/>
- <int value="12" label="Bezel down"/>
- <int value="13" label="Tab switched tap"/>
- <int value="14" label="Active tab tap"/>
- <int value="15" label="Tab close button tap"/>
- <int value="16" label="New tab button tap"/>
- <int value="17" label="Top edge of window tap"/>
- <int value="18" label="Window size button tap"/>
- <int value="19" label="Area surrounding tabstrip tap"/>
- <int value="20" label="Window resized double tap"/>
-</enum>
-
-<enum name="GetPerfDataOutcome" type="int">
- <int value="0" label="Success.">
- Perf data was collected, parsed and attached to the UMA protobuf
- successfully.
- </int>
- <int value="1" label="No perf data ready to be uploaded.">
- Could not add perf data to the UMA protobuf because no perf data was ready
- to be uploaded.
- </int>
- <int value="2" label="Collection timer triggered but have data already.">
- Perf timer triggered but the perf provider already had a perf data proto to
- be added to the UMA protobuf.
- </int>
- <int value="3"
- label="Collection timer triggered but incognito window active.">
- Perf timer triggered but an incognito window was open.
- </int>
- <int value="4" label="Incognito window launched during collection.">
- Perf data was collected but an incognito window was opened during the
- collection.
- </int>
- <int value="5" label="Protobuf returned by debugd not deserialized.">
- Perf data was collected and sent to Chrome as a serialized protobuf but it
- could be deserialized by Chrome.
- </int>
-</enum>
-
-<enum name="GetUserDataTempDirResult" type="int">
- <int value="0" label="SUCCESS"/>
- <int value="1" label="CANT_GET_PARENT_PATH"/>
- <int value="2" label="CANT_GET_UDT_PATH"/>
- <int value="3" label="NOT_A_DIRECTORY"/>
- <int value="4" label="CANT_CREATE_DIR"/>
- <int value="5" label="CANT_WRITE_TO_PATH"/>
- <int value="6" label="UNSET"/>
-</enum>
-
-<enum name="GoogleNowEvent" type="int">
- <summary>
- Events in Google Now component extension. See GoogleNowEvent in
- chrome/browser/resources/google_now/background.js.
- </summary>
- <int value="0" label="REQUEST_FOR_CARDS_TOTAL"/>
- <int value="1" label="REQUEST_FOR_CARDS_SUCCESS"/>
- <int value="2" label="CARDS_PARSE_SUCCESS"/>
- <int value="3" label="DISMISS_REQUEST_TOTAL"/>
- <int value="4" label="DISMISS_REQUEST_SUCCESS"/>
- <int value="5" label="LOCATION_REQUEST"/>
- <int value="6" label="LOCATION_UPDATE"/>
- <int value="7" label="EXTENSION_START"/>
- <int value="8" label="DELETED_SHOW_WELCOME_TOAST"/>
- <int value="9" label="STOPPED"/>
- <int value="10" label="DELETED_USER_SUPPRESSED"/>
-</enum>
-
-<enum name="GoogleServiceAuthError" type="int">
- <int value="0" label="NONE"/>
- <int value="1" label="INVALID_GAIA_CREDENTIALS"/>
- <int value="2" label="USER_NOT_SIGNED_UP"/>
- <int value="3" label="CONNECTION_FAILED"/>
- <int value="4" label="CAPTCHA_REQUIRED"/>
- <int value="5" label="ACCOUNT_DELETED"/>
- <int value="6" label="ACCOUNT_DISABLED"/>
- <int value="7" label="SERVICE_UNAVAILABLE"/>
- <int value="8" label="TWO_FACTOR"/>
- <int value="9" label="REQUEST_CANCELED"/>
- <int value="10" label="HOSTED_NOT_ALLOWED"/>
- <int value="11" label="UNEXPECTED_SERVICE_RESPONSE"/>
- <int value="12" label="SERVICE_ERROR"/>
-</enum>
-
-<enum name="HistoryFaviconsRecoveryEnum" type="int">
- <summary>Error states noted in thumbnail_database.cc recovery code.</summary>
- <int value="0" label="RECOVERY_EVENT_RECOVERED">Successful recovery.</int>
- <int value="1" label="RECOVERY_EVENT_FAILED_SCOPER">
- sql::Recovery failed init.
- </int>
- <int value="2" label="RECOVERY_EVENT_FAILED_META_VERSION_ERROR">
- Query failed against recovery meta table.
- </int>
- <int value="3" label="RECOVERY_EVENT_FAILED_META_VERSION_NONE">
- No version row in recovery meta table.
- </int>
- <int value="4" label="RECOVERY_EVENT_FAILED_META_WRONG_VERSION6">
- Recovery meta table has version 6.
- </int>
- <int value="5" label="RECOVERY_EVENT_FAILED_META_WRONG_VERSION5">
- Recovery meta table has version 5.
- </int>
- <int value="6" label="RECOVERY_EVENT_FAILED_META_WRONG_VERSION">
- Recovery meta table has an unexpected version.
- </int>
- <int value="7" label="RECOVERY_EVENT_FAILED_RECOVER_META">
- Failed to create recovery meta table.
- </int>
- <int value="8" label="RECOVERY_EVENT_FAILED_META_INSERT">
- Failed to copy recovery meta table.
- </int>
- <int value="9" label="RECOVERY_EVENT_FAILED_INIT">
- Failed to init target schema.
- </int>
- <int value="10" label="RECOVERY_EVENT_FAILED_RECOVER_FAVICONS">
- Failed to create recovery favicons table.
- </int>
- <int value="11" label="RECOVERY_EVENT_FAILED_FAVICONS_INSERT">
- Failed to copy recovery favicons table.
- </int>
- <int value="12" label="RECOVERY_EVENT_FAILED_RECOVER_FAVICON_BITMAPS">
- Failed to create recovery favicon_bitmaps table.
- </int>
- <int value="13" label="RECOVERY_EVENT_FAILED_FAVICON_BITMAPS_INSERT">
- Failed to copy recovery favicon_bitmaps table.
- </int>
- <int value="14" label="RECOVERY_EVENT_FAILED_RECOVER_ICON_MAPPING">
- Failed to create recovery icon_mapping table.
- </int>
- <int value="15" label="RECOVERY_EVENT_FAILED_ICON_MAPPING_INSERT">
- Failed to copy recovery icon_mapping table.
- </int>
- <int value="16" label="RECOVERY_EVENT_RECOVERED_VERSION6">
- Successful recovery of version 6 database.
- </int>
- <int value="17" label="RECOVERY_EVENT_FAILED_META_INIT">
- Failed sql::MetaTable::Init().
- </int>
- <int value="18" label="RECOVERY_EVENT_FAILED_META_VERSION">
- Failed sql::Recovery::SetupMeta() or GetMetaVersionNumber().
- </int>
- <int value="19" label="RECOVERY_EVENT_DEPRECATED">
- Recovery found deprecated version and razed.
- </int>
- <int value="20" label="RECOVERY_EVENT_FAILED_V5_INITSCHEMA">
- Failed v5 recovery loading schema.
- </int>
- <int value="21" label="RECOVERY_EVENT_FAILED_V5_AUTORECOVER_FAVICONS">
- Failed v5 recovery on favicons.
- </int>
- <int value="22" label="RECOVERY_EVENT_FAILED_V5_AUTORECOVER_ICON_MAPPING">
- Failed v5 recovery on icon_mapping.
- </int>
- <int value="23" label="RECOVERY_EVENT_RECOVERED_VERSION5">
- Successful recovery of version 6 database.
- </int>
- <int value="24" label="RECOVERY_EVENT_FAILED_AUTORECOVER_FAVICONS">
- Failed v6/7 recovery on favicons.
- </int>
- <int value="25" label="RECOVERY_EVENT_FAILED_AUTORECOVER_FAVICON_BITMAPS">
- Failed v6/7 recovery on favicon_bitmaps.
- </int>
- <int value="26" label="RECOVERY_EVENT_FAILED_AUTORECOVER_ICON_MAPPING">
- Failed v6/7 recovery on icon_mapping.
- </int>
- <int value="27" label="RECOVERY_EVENT_FAILED_COMMIT">
- Failed sql::Recovery::Recovered().
- </int>
-</enum>
-
-<enum name="HistoryTopSitesRecoveryEnum" type="int">
- <summary>Error states noted in top_sites_database.cc recovery code.</summary>
- <int value="0" label="RECOVERY_EVENT_RECOVERED">Successful recovery.</int>
- <int value="1" label="RECOVERY_EVENT_DEPRECATED">
- Recovery found deprecated version and razed.
- </int>
- <int value="2" label="RECOVERY_EVENT_FAILED_SCOPER">
- sql::Recovery failed init.
- </int>
- <int value="3" label="RECOVERY_EVENT_FAILED_META_VERSION">
- Failed sql::Recovery::SetupMeta() or GetMetaVersionNumber().
- </int>
- <int value="4" label="RECOVERY_EVENT_FAILED_META_WRONG_VERSION">
- Recovery meta table has an unexpected version.
- </int>
- <int value="5" label="RECOVERY_EVENT_FAILED_META_INIT">
- Failed sql::MetaTable::Init().
- </int>
- <int value="6" label="RECOVERY_EVENT_FAILED_SCHEMA_INIT">
- Failed to init target schema.
- </int>
- <int value="7" label="RECOVERY_EVENT_FAILED_AUTORECOVER_THUMBNAILS">
- Failed recovery on thumbnails table.
- </int>
- <int value="8" label="RECOVERY_EVENT_FAILED_COMMIT">
- Failure from sql::Recovery::Recovered().
- </int>
- <int value="9" label="RECOVERY_EVENT_INVARIANT_RANK">
- Rows were deleted because |url_rank| and |last_forced| didn't agree. Does
- not prevent recovery.
- </int>
- <int value="10" label="RECOVERY_EVENT_INVARIANT_REDIRECT">
- Rows were deleted because |redirects| did not contain |url|. Does not
- prevent recovery.
- </int>
- <int value="11" label="RECOVERY_EVENT_INVARIANT_CONTIGUOUS">
- |url_rank| was renumbered due to missing rows. Does not prevent recovery.
- </int>
-</enum>
-
-<enum name="HttpAuthCount" type="int">
- <int value="0" label="Basic Start"/>
- <int value="1" label="Basic Reject"/>
- <int value="2" label="Digest Start"/>
- <int value="3" label="Digest Reject"/>
- <int value="4" label="NTLM Start"/>
- <int value="5" label="NTLM Reject"/>
- <int value="6" label="Negotiate Start"/>
- <int value="7" label="Negotiate Reject"/>
-</enum>
-
-<enum name="HttpAuthResource" type="int">
- <int value="0" label="Top Page Allowed"/>
- <int value="1" label="Same-domain Sub-resource Allowed"/>
- <int value="2" label="Cross-domain Sub-resource Blocked"/>
- <int value="3" label="Cross-domain Sub-resource Allowed"/>
-</enum>
-
-<enum name="HttpAuthTarget" type="int">
- <int value="0" label="Basic Proxy"/>
- <int value="1" label="Basic Secure Proxy"/>
- <int value="2" label="Basic Server"/>
- <int value="3" label="Basic Secure Server"/>
- <int value="4" label="Digest Proxy"/>
- <int value="5" label="Digest Secure Proxy"/>
- <int value="6" label="Digest Server"/>
- <int value="7" label="Digest Secure Server"/>
- <int value="8" label="NTLM Proxy"/>
- <int value="9" label="NTLM Secure Proxy"/>
- <int value="10" label="NTLM Server"/>
- <int value="11" label="NTLM Secure Server"/>
- <int value="12" label="Negotiate Proxy"/>
- <int value="13" label="Negotiate Secure Proxy"/>
- <int value="14" label="Negotiate Server"/>
- <int value="15" label="Negotiate Secure Server"/>
-</enum>
-
-<enum name="HttpPipelineStatus" type="int">
- <int value="0" label="Success"/>
- <int value="1" label="Redirected"/>
- <int value="2" label="Certificate error"/>
- <int value="3" label="Bad HTTP response code"/>
- <int value="4" label="Network error"/>
- <int value="5" label="Response too large"/>
- <int value="6" label="Response too small"/>
- <int value="7" label="Response content mismatch"/>
- <int value="8" label="Bad HTTP version"/>
- <int value="9" label="Corrupt stats response"/>
-</enum>
-
-<enum name="HttpResponseCode" type="int">
- <int value="100" label="Continue"/>
- <int value="101" label="Switching Protocols"/>
- <int value="200" label="OK"/>
- <int value="201" label="Created"/>
- <int value="202" label="Accepted"/>
- <int value="203" label="Non-Authoritative Information"/>
- <int value="204" label="No Content"/>
- <int value="205" label="Reset Content"/>
- <int value="206" label="Partial Content"/>
- <int value="300" label="Multiple Choices"/>
- <int value="301" label="Moved Permanently"/>
- <int value="302" label="Found"/>
- <int value="303" label="See Other"/>
- <int value="304" label="Not Modified"/>
- <int value="305" label="Use Proxy"/>
- <int value="306" label="(Unused)"/>
- <int value="307" label="Temporary Redirect"/>
- <int value="400" label="Bad Request"/>
- <int value="401" label="Unauthorized"/>
- <int value="402" label="Payment Required"/>
- <int value="403" label="Forbidden"/>
- <int value="404" label="Not Found"/>
- <int value="405" label="Method Not Allowed"/>
- <int value="406" label="Not Acceptable"/>
- <int value="407" label="Proxy Authentication Required"/>
- <int value="408" label="Request Timeout"/>
- <int value="409" label="Conflict"/>
- <int value="410" label="Gone"/>
- <int value="411" label="Length Required"/>
- <int value="412" label="Precondition Failed"/>
- <int value="413" label="Request Entity Too Large"/>
- <int value="414" label="Request-URI Too Long"/>
- <int value="415" label="Unsupported Media Type"/>
- <int value="416" label="Requested Range Not Satisfiable"/>
- <int value="417" label="Expectation Failed"/>
- <int value="500" label="Internal Server Error"/>
- <int value="501" label="Not Implemented"/>
- <int value="503" label="Service Unavailable"/>
- <int value="504" label="Gateway Timeout"/>
- <int value="505" label="HTTP Version Not Supported"/>
-</enum>
-
-<enum name="HttpSocketType" type="int">
- <int value="0" label="UNUSED">newly connected socket</int>
- <int value="1" label="UNUSED_IDLE">
- connected unused socket (idle prior to use)
- </int>
- <int value="2" label="REUSED_IDLE">previously used (keep-alive?) socket</int>
-</enum>
-
-<enum name="IDBLevelDBBackingStoreInternalErrorType" type="int">
- <int value="0" label="IDBLevelDBBackingStoreReadError">
- IndexedDB encountered an error attempting to read or decode a value from the
- leveldb backing store, indicative of corruption or I/O error. Unused as of
- M26.
- </int>
- <int value="1" label="IDBLevelDBBackingStoreWriteError">
- IndexeDB encountered an error attempting to write or commit a value to the
- leveldb backing store, indicative of I/O error. Unused as of M26.
- </int>
- <int value="2" label="IDBLevelDBBackingStoreConsistencyError">
- IndexedDB encountered a consistency error in the leveldb backing store,
- indicative of corruption or an coding error. Unused as of M26.
- </int>
- <int value="3" label="FindKeyInIndex"/>
- <int value="4" label="GetIDBDatabaseMetaData"/>
- <int value="5" label="GetIndexes"/>
- <int value="6" label="GetKeyGeneratorCurrentNumber"/>
- <int value="7" label="GetObjectStores"/>
- <int value="8" label="GetRecord"/>
- <int value="9" label="KeyExistsInObjectStore"/>
- <int value="10" label="LoadCurrentRow"/>
- <int value="11" label="SetupMetadata"/>
- <int value="12" label="GetPrimaryKeyViaIndex"/>
- <int value="13" label="KeyExistsInIndex"/>
- <int value="14" label="VersionExists"/>
- <int value="15" label="DeleteObjectStore"/>
- <int value="16" label="SetMaxObjectStoreId"/>
- <int value="17" label="SetMaxIndexId"/>
- <int value="18" label="GetNewDatabaseId"/>
- <int value="19" label="GetNewVersionNumber"/>
- <int value="20" label="CreateIDBDatabaseMetaData"/>
- <int value="21" label="DeleteDatabase"/>
- <int value="22" label="TransactionCommit"/>
- <int value="23" label="GetDatabaseNames"/>
-</enum>
-
-<enum name="IDBLevelDBBackingStoreOpenResult" type="int">
- <int value="0" label="OpenMemorySuccess">
- An in-memory backing store was opened successfully.
- </int>
- <int value="1" label="OpenSuccess">
- An on-disk backing store was opened successfully.
- </int>
- <int value="2" label="OpenFailedDirectory">
- An on-disk backing store could not be opened or created because the
- directory could not be opened or created. Cleanup will not be attempted.
- </int>
- <int value="3" label="OpenFailedUnknownSchema">
- An on-disk backing store was opened but had an unknown schema version, due
- to corruption or reverting to a previous version of Chrome. Cleanup will be
- attempted.
- </int>
- <int value="4" label="OpenCleanupDestroyFailed">
- An on-disk backing store failed to open; cleanup was attempted but the
- database could not be destroyed.
- </int>
- <int value="5" label="OpenCleanupReopenFailed">
- An on-disk backing store failed to open; cleanup was attempted but
- re-opening the database failed.
- </int>
- <int value="6" label="OpenCleanupReopenSuccess">
- An on-disk backing store failed to open; cleanup was attempted and the
- database was then opened successfully.
- </int>
- <int value="7" label="OpenFailedIOErrCheckingSchema">
- An on-disk backing store was opened but leveldb failed to read the schema
- version.
- </int>
- <int value="8" label="OpenFailedUnknownErr"/>
- <int value="9" label="OpenMemoryFailed">
- An in-memory backing store failed to open.
- </int>
- <int value="10" label="OpenNonASCII">
- A database with non-ascii characters in its path was opened (with either
- success or failure).
- </int>
- <int value="11" label="OpenAttemptDiskFull">
- An open failed on a machine with a full disk. No cleanup was attempted.
- </int>
- <int value="12" label="OpenAttemptPathTooLong">
- Open failed because either a path component or the overall path was too
- long.
- </int>
- <int value="13" label="OpenAttemptNoRecovery">
- An open attempt failed with an I/O error that doesn't necessitate a recovery
- attempt.
- </int>
-</enum>
-
-<enum name="ImporterType" type="int">
- <int value="0" label="Unknown"/>
- <int value="1" label="IMPORTER_METRICS_IE">IE (Windows-only)</int>
- <int value="2" label="IMPORTER_METRICS_FIREFOX2">Firefox 2</int>
- <int value="3" label="IMPORTER_METRICS_FIREFOX3">Firefox 3 (and later)</int>
- <int value="4" label="IMPORTER_METRICS_SAFARI">Safari (Mac-only)</int>
- <int value="5" label="IMPORTER_METRICS_GOOGLE_TOOLBAR5">Google Toolbar</int>
- <int value="6" label="IMPORTER_METRICS_BOOKMARKS_FILE">
- A bookmarks.html file
- </int>
-</enum>
-
-<enum name="IndexedDatabaseMethods" type="int">
- <int value="0" label="CreateObjectStore()"/>
- <int value="1" label="DeleteObjectStore()"/>
- <int value="2" label="Transaction()"/>
- <int value="3" label="DeleteDatabase()"/>
- <int value="4" label="Open()"/>
-</enum>
-
-<enum name="InfoBarResponse" type="int">
- <int value="0" label="No Response selected"/>
- <int value="1" label="Save Password"/>
- <int value="2" label="Never for this site (blacklist / exception)"/>
- <int value="3" label="InfoBar dismissed by clicking the 'X'"/>
-</enum>
-
-<enum name="InstantControllerEvent" type="int">
- <int value="0" label="URL_ADDED_TO_BLACKLIST"/>
- <int value="1" label="URL_REMOVED_FROM_BLACKLIST"/>
- <int value="2" label="URL_BLOCKED_BY_BLACKLIST"/>
-</enum>
-
-<enum name="InstantExtended_CacheableNTPLoad" type="int">
- <int value="0" label="Failed to load"/>
- <int value="1" label="Loaded successfuly"/>
-</enum>
-
-<enum name="InstantExtended_FallbackCause" type="int">
- <int value="0" label="Fallback did not occur"/>
- <int value="1" label="Page not current: unknown"/>
- <int value="2" label="Page not current: empty instant url"/>
- <int value="3" label="Page not current: origin/path mismatch"/>
- <int value="4" label="Page not current: instant not supported"/>
- <int value="5" label="No overlay"/>
- <int value="6" label="Javascript disabled"/>
-</enum>
-
-<enum name="InstantExtended_InstantNavigation" type="int">
- <obsolete>
- Deprecated as of 10/2013.
- </obsolete>
- <int value="0" label="Local click"/>
- <int value="1" label="Local submit"/>
- <int value="2" label="Online click"/>
- <int value="3" label="Online submit"/>
- <int value="4" label="Non-extended navigation"/>
-</enum>
-
-<enum name="InstantExtended_NewOptInState" type="int">
- <int value="0" label="Default"/>
- <int value="1" label="Opted in"/>
- <int value="2" label="Opted out"/>
-</enum>
-
-<enum name="InstantExtended_OptInState" type="int">
- <obsolete>
- Deprecated 2013-06.
- </obsolete>
- <int value="0" label="Default"/>
- <int value="1" label="Opted in"/>
- <int value="2" label="Opted out"/>
- <int value="3" label="Opted in local"/>
- <int value="4" label="Opted out local"/>
- <int value="5" label="Opted out both"/>
-</enum>
-
-<enum name="InstantSessionStorageNamespace" type="int">
- <int value="0" label="different"/>
- <int value="1" label="identical"/>
-</enum>
-
-<enum name="IntelMaxMicroArchitecture" type="int">
- <int value="0" label="Pentium"/>
- <int value="1" label="SSE"/>
- <int value="2" label="SSE2"/>
- <int value="3" label="SSE3"/>
- <int value="4" label="SSSE3"/>
- <int value="5" label="SSE4.1"/>
- <int value="6" label="SSE4.3"/>
- <int value="7" label="AVX"/>
-</enum>
-
-<enum name="InterruptReason" type="int">
- <int value="0" label="NONE"/>
- <int value="1" label="FILE_FAILED"/>
- <int value="2" label="FILE_ACCESS_DENIED"/>
- <int value="3" label="FILE_NO_SPACE"/>
- <int value="5" label="FILE_NAME_TOO_LONG"/>
- <int value="6" label="FILE_TOO_LARGE"/>
- <int value="7" label="FILE_VIRUS_INFECTED"/>
- <int value="10" label="FILE_TRANSIENT_ERROR"/>
- <int value="11" label="FILE_BLOCKED"/>
- <int value="12" label="FILE_SECURITY_CHECK_FAILED"/>
- <int value="13" label="FILE_TOO_SHORT"/>
- <int value="20" label="NETWORK_FAILED"/>
- <int value="21" label="NETWORK_TIMEOUT"/>
- <int value="22" label="NETWORK_DISCONNECTED"/>
- <int value="23" label="NETWORK_SERVER_DOWN"/>
- <int value="30" label="SERVER_FAILED"/>
- <int value="31" label="SERVER_NO_RANGE"/>
- <int value="32" label="SERVER_PRECONDITION"/>
- <int value="33" label="SERVER_BAD_CONTENT"/>
- <int value="40" label="USER_CANCELED"/>
- <int value="41" label="USER_SHUTDOWN"/>
- <int value="50" label="CRASH"/>
-</enum>
-
-<enum name="IPV6ProbeResult" type="int">
- <int value="0" label="IPV6_CANNOT_CREATE_SOCKETS"/>
- <int value="1" label="IPV6_CAN_CREATE_SOCKETS"/>
- <int value="2" label="IPV6_GETIFADDRS_FAILED">
- getifaddrs or GetAdaptersAddresses failed
- </int>
- <int value="3" label="IPV6_GLOBAL_ADDRESS_MISSING"/>
- <int value="4" label="IPV6_GLOBAL_ADDRESS_PRESENT"/>
- <int value="5" label="IPV6_INTERFACE_ARRAY_TOO_SHORT"/>
-</enum>
-
-<enum name="JavaScriptAPIName" type="int">
- <int value="0" label="GetUserMedia"/>
- <int value="1" label="PeerConnection00"/>
- <int value="2" label="DeprecatedPeerConnection"/>
- <int value="3" label="RTCPeerConnection"/>
-</enum>
-
-<enum name="KeyboardControlEvent" type="int">
- <int value="0" label="Keyboard was shown."/>
- <int value="1" label="Keyboard was automatically hidden."/>
- <int value="2" label="Keyboard was hidden by the user."/>
-</enum>
-
-<enum name="LanguageCode" type="int">
- <summary>ISO 639 Language Codes.</summary>
- <int value="24929" label="Afar"/>
- <int value="24930" label="Abkhazian"/>
- <int value="24933" label="Avestan"/>
- <int value="24934" label="Afrikaans"/>
- <int value="24939" label="Akan"/>
- <int value="24941" label="Amharic"/>
- <int value="24942" label="Aragonese"/>
- <int value="24946" label="Arabic"/>
- <int value="24947" label="Assamese"/>
- <int value="24950" label="Avaric"/>
- <int value="24953" label="Aymara"/>
- <int value="24954" label="Azerbaijani"/>
- <int value="25185" label="Bashkir"/>
- <int value="25189" label="Belarusian"/>
- <int value="25191" label="Bulgarian"/>
- <int value="25192" label="Bihari"/>
- <int value="25193" label="Bislama"/>
- <int value="25197" label="Bambara"/>
- <int value="25198" label="Bengali"/>
- <int value="25199" label="Tibetan"/>
- <int value="25202" label="Breton"/>
- <int value="25203" label="Bosnian"/>
- <int value="25441" label="Catalan"/>
- <int value="25445" label="Chechen"/>
- <int value="25448" label="Chamorro"/>
- <int value="25455" label="Corsican"/>
- <int value="25458" label="Cree"/>
- <int value="25459" label="Czech"/>
- <int value="25461" label="Church Slavic"/>
- <int value="25462" label="Chuvash"/>
- <int value="25465" label="Welsh"/>
- <int value="25697" label="Danish"/>
- <int value="25701" label="German"/>
- <int value="25718" label="Divehi"/>
- <int value="25722" label="Dzongkha"/>
- <int value="25957" label="Ewe"/>
- <int value="25964" label="Greek"/>
- <int value="25966" label="English"/>
- <int value="25967" label="Esperanto"/>
- <int value="25971" label="Spanish"/>
- <int value="25972" label="Estonian"/>
- <int value="25973" label="Basque"/>
- <int value="26209" label="Persian"/>
- <int value="26214" label="Fulah"/>
- <int value="26217" label="Finnish"/>
- <int value="26218" label="Fijian"/>
- <int value="26223" label="Faroese"/>
- <int value="26226" label="French"/>
- <int value="26233" label="Western Frisian"/>
- <int value="26465" label="Irish"/>
- <int value="26468" label="Scottish Gaelic"/>
- <int value="26476" label="Galician"/>
- <int value="26478" label="Guarani"/>
- <int value="26485" label="Gujarati"/>
- <int value="26486" label="Manx"/>
- <int value="26721" label="Hausa"/>
- <int value="26725" label="Hebrew"/>
- <int value="26729" label="Hindi"/>
- <int value="26735" label="Hiri Motu"/>
- <int value="26738" label="Croatian"/>
- <int value="26740" label="Haitian"/>
- <int value="26741" label="Hungarian"/>
- <int value="26745" label="Armenian"/>
- <int value="26746" label="Herero"/>
- <int value="26977" label="Interlingua"/>
- <int value="26980" label="Indonesian"/>
- <int value="26981" label="Interlingue"/>
- <int value="26983" label="Igbo"/>
- <int value="26985" label="Sichuan Yi"/>
- <int value="26987" label="Inupiaq"/>
- <int value="26991" label="Ido"/>
- <int value="26995" label="Icelandic"/>
- <int value="26996" label="Italian"/>
- <int value="26997" label="Inuktitut"/>
- <int value="27233" label="Japanese"/>
- <int value="27254" label="Javanese"/>
- <int value="27489" label="Georgian"/>
- <int value="27495" label="Kongo"/>
- <int value="27497" label="Kikuyu"/>
- <int value="27498" label="Kuanyama"/>
- <int value="27499" label="Kazakh"/>
- <int value="27500" label="Kalaallisut"/>
- <int value="27501" label="Khmer"/>
- <int value="27502" label="Kannada"/>
- <int value="27503" label="Korean"/>
- <int value="27506" label="Kanuri"/>
- <int value="27507" label="Kashmiri"/>
- <int value="27509" label="Kurdish"/>
- <int value="27510" label="Komi"/>
- <int value="27511" label="Cornish"/>
- <int value="27513" label="Kirghiz"/>
- <int value="27745" label="Latin"/>
- <int value="27746" label="Luxembourgish"/>
- <int value="27751" label="Ganda"/>
- <int value="27753" label="Limburgish"/>
- <int value="27758" label="Lingala"/>
- <int value="27759" label="Lao"/>
- <int value="27764" label="Lithuanian"/>
- <int value="27765" label="Luba-Katanga"/>
- <int value="27766" label="Latvian"/>
- <int value="28007" label="Malagasy"/>
- <int value="28008" label="Marshallese"/>
- <int value="28009" label="Maori"/>
- <int value="28011" label="Macedonian"/>
- <int value="28012" label="Malayalam"/>
- <int value="28014" label="Mongolian"/>
- <int value="28015" label="Moldavian"/>
- <int value="28018" label="Marathi"/>
- <int value="28019" label="Malay"/>
- <int value="28020" label="Maltese"/>
- <int value="28025" label="Burmese"/>
- <int value="28257" label="Nauru"/>
- <int value="28258" label="Norwegian Bokmal"/>
- <int value="28260" label="North Ndebele"/>
- <int value="28261" label="Nepali"/>
- <int value="28263" label="Ndonga"/>
- <int value="28268" label="Dutch"/>
- <int value="28270" label="Norwegian Nynorsk"/>
- <int value="28271" label="Norwegian"/>
- <int value="28274" label="South Ndebele"/>
- <int value="28278" label="Navajo"/>
- <int value="28281" label="Nyanja"/>
- <int value="28515" label="Occitan"/>
- <int value="28522" label="Ojibwa"/>
- <int value="28525" label="Oromo"/>
- <int value="28530" label="Oriya"/>
- <int value="28531" label="Ossetic"/>
- <int value="28769" label="Punjabi"/>
- <int value="28777" label="Pali"/>
- <int value="28780" label="Polish"/>
- <int value="28787" label="Pashto"/>
- <int value="28788" label="Portuguese"/>
- <int value="29045" label="Quechua"/>
- <int value="29293" label="Romansh"/>
- <int value="29294" label="Rundi"/>
- <int value="29295" label="Romanian"/>
- <int value="29301" label="Russian"/>
- <int value="29303" label="Kinyarwanda"/>
- <int value="29537" label="Sanskrit"/>
- <int value="29539" label="Sardinian"/>
- <int value="29540" label="Sindhi"/>
- <int value="29541" label="Northern Sami"/>
- <int value="29543" label="Sango"/>
- <int value="29544" label="Serbo-Croatian"/>
- <int value="29545" label="Sinhala"/>
- <int value="29547" label="Slovak"/>
- <int value="29548" label="Slovenian"/>
- <int value="29549" label="Samoan"/>
- <int value="29550" label="Shona"/>
- <int value="29551" label="Somali"/>
- <int value="29553" label="Albanian"/>
- <int value="29554" label="Serbian"/>
- <int value="29555" label="Swati"/>
- <int value="29556" label="Southern Sotho"/>
- <int value="29557" label="Sundanese"/>
- <int value="29558" label="Swedish"/>
- <int value="29559" label="Swahili"/>
- <int value="29793" label="Tamil"/>
- <int value="29797" label="Telugu"/>
- <int value="29799" label="Tajik"/>
- <int value="29800" label="Thai"/>
- <int value="29801" label="Tigrinya"/>
- <int value="29803" label="Turkmen"/>
- <int value="29804" label="Tagalog"/>
- <int value="29806" label="Tswana"/>
- <int value="29807" label="Tonga"/>
- <int value="29810" label="Turkish"/>
- <int value="29811" label="Tsonga"/>
- <int value="29812" label="Tatar"/>
- <int value="29815" label="Twi"/>
- <int value="29817" label="Tahitian"/>
- <int value="30055" label="Uighur"/>
- <int value="30059" label="Ukrainian"/>
- <int value="30066" label="Urdu"/>
- <int value="30074" label="Uzbek"/>
- <int value="30309" label="Venda"/>
- <int value="30313" label="Vietnamese"/>
- <int value="30319" label="Volapuk"/>
- <int value="30561" label="Walloon"/>
- <int value="30575" label="Wolof"/>
- <int value="30824" label="Xhosa"/>
- <int value="31081" label="Yiddish"/>
- <int value="31087" label="Yoruba"/>
- <int value="31329" label="Zhuang"/>
- <int value="31336" label="Chinese"/>
- <int value="31349" label="Zulu"/>
- <int value="6382437" label="Achinese"/>
- <int value="6382440" label="Acoli"/>
- <int value="6382689" label="Adangme"/>
- <int value="6382713" label="Adyghe"/>
- <int value="6383201" label="Afro-Asiatic Language"/>
- <int value="6383208" label="Afrihili"/>
- <int value="6383982" label="Ainu"/>
- <int value="6384491" label="Akkadian"/>
- <int value="6384741" label="Aleut"/>
- <int value="6384743" label="Algonquian Language"/>
- <int value="6384756" label="Southern Altai"/>
- <int value="6385255" label="Old English"/>
- <int value="6385264" label="Angika"/>
- <int value="6385761" label="Apache Language"/>
- <int value="6386275" label="Aramaic"/>
- <int value="6386286" label="Araucanian"/>
- <int value="6386288" label="Arapaho"/>
- <int value="6386292" label="Artificial Language"/>
- <int value="6386295" label="Arawak"/>
- <int value="6386529" label="Asu"/>
- <int value="6386548" label="Asturian"/>
- <int value="6386792" label="Athapascan Language"/>
- <int value="6387059" label="Australian Language"/>
- <int value="6387553" label="Awadhi"/>
- <int value="6447460" label="Banda"/>
- <int value="6447465" label="Bamileke Language"/>
- <int value="6447468" label="Baluchi"/>
- <int value="6447470" label="Balinese"/>
- <int value="6447475" label="Basa"/>
- <int value="6447476" label="Baltic Language"/>
- <int value="6448490" label="Beja"/>
- <int value="6448493" label="Bemba"/>
- <int value="6448498" label="Berber"/>
- <int value="6448506" label="Bena"/>
- <int value="6449263" label="Bhojpuri"/>
- <int value="6449515" label="Bikol"/>
- <int value="6449518" label="Bini"/>
- <int value="6450273" label="Siksika"/>
- <int value="6450804" label="Bantu"/>
- <int value="6451809" label="Braj"/>
- <int value="6451832" label="Bodo"/>
- <int value="6452331" label="Batak"/>
- <int value="6452577" label="Buriat"/>
- <int value="6452583" label="Buginese"/>
- <int value="6453614" label="Blin"/>
- <int value="6512996" label="Caddo"/>
- <int value="6513001" label="Central American Indian Language"/>
- <int value="6513010" label="Carib"/>
- <int value="6513013" label="Caucasian Language"/>
- <int value="6513017" label="Cayuga"/>
- <int value="6513512" label="Atsam"/>
- <int value="6514018" label="Cebuano"/>
- <int value="6514028" label="Celtic Language"/>
- <int value="6514535" label="Chiga"/>
- <int value="6514786" label="Chibcha"/>
- <int value="6514791" label="Chagatai"/>
- <int value="6514795" label="Chuukese"/>
- <int value="6514797" label="Mari"/>
- <int value="6514798" label="Chinook Jargon"/>
- <int value="6514799" label="Choctaw"/>
- <int value="6514800" label="Chipewyan"/>
- <int value="6514802" label="Cherokee"/>
- <int value="6514809" label="Cheyenne"/>
- <int value="6516067" label="Chamic Language"/>
- <int value="6516592" label="Coptic"/>
- <int value="6516837" label="English-based Creole or Pidgin"/>
- <int value="6516838" label="French-based Creole or Pidgin"/>
- <int value="6516848" label="Portuguese-based Creole or Pidgin"/>
- <int value="6517352" label="Crimean Turkish"/>
- <int value="6517360" label="Creole or Pidgin"/>
- <int value="6517602" label="Kashubian"/>
- <int value="6518131" label="Cushitic Language"/>
- <int value="6578539" label="Dakota"/>
- <int value="6578546" label="Dargwa"/>
- <int value="6578550" label="Taita"/>
- <int value="6578553" label="Dayak"/>
- <int value="6579564" label="Delaware"/>
- <int value="6579566" label="Slave"/>
- <int value="6580082" label="Dogrib"/>
- <int value="6580590" label="Dinka"/>
- <int value="6580837" label="Zarma"/>
- <int value="6582121" label="Dogri"/>
- <int value="6582881" label="Dravidian Language"/>
- <int value="6583138" label="Lower Sorbian"/>
- <int value="6583649" label="Duala"/>
- <int value="6583661" label="Middle Dutch"/>
- <int value="6584693" label="Dyula"/>
- <int value="6644341" label="Embu"/>
- <int value="6645353" label="Efik"/>
- <int value="6645625" label="Ancient Egyptian"/>
- <int value="6646625" label="Ekajuk"/>
- <int value="6646904" label="Elamite"/>
- <int value="6647405" label="Middle English"/>
- <int value="6649711" label="Ewondo"/>
- <int value="6709614" label="Fang"/>
- <int value="6709620" label="Fanti"/>
- <int value="6711660" label="Filipino"/>
- <int value="6711669" label="Finno-Ugrian Language"/>
- <int value="6713198" label="Fon"/>
- <int value="6713965" label="Middle French"/>
- <int value="6713967" label="Old French"/>
- <int value="6713970" label="Northern Frisian"/>
- <int value="6713971" label="Eastern Frisian"/>
- <int value="6714738" label="Friulian"/>
- <int value="6775137" label="Ga"/>
- <int value="6775161" label="Gayo"/>
- <int value="6775393" label="Gbaya"/>
- <int value="6776173" label="Germanic Language"/>
- <int value="6776186" label="Geez"/>
- <int value="6777196" label="Gilbertese"/>
- <int value="6778216" label="Middle High German"/>
- <int value="6778728" label="Old High German"/>
- <int value="6778734" label="Gondi"/>
- <int value="6778738" label="Gorontalo"/>
- <int value="6778740" label="Gothic"/>
- <int value="6779490" label="Grebo"/>
- <int value="6779491" label="Ancient Greek"/>
- <int value="6779767" label="Swiss German"/>
- <int value="6780282" label="Gusii"/>
- <int value="6780777" label="Gwich'in"/>
- <int value="6840681" label="Haida"/>
- <int value="6840695" label="Hawaiian"/>
- <int value="6842732" label="Hiligaynon"/>
- <int value="6842733" label="Himachali"/>
- <int value="6842740" label="Hittite"/>
- <int value="6843758" label="Hmong"/>
- <int value="6845282" label="Upper Sorbian"/>
- <int value="6845808" label="Hupa"/>
- <int value="6906465" label="Iban"/>
- <int value="6908527" label="Ijo"/>
- <int value="6909039" label="Iloko"/>
- <int value="6909539" label="Indic Language"/>
- <int value="6909541" label="Indo-European Language"/>
- <int value="6909544" label="Ingush"/>
- <int value="6910561" label="Iranian Language"/>
- <int value="6910575" label="Iroquoian Language"/>
- <int value="6972015" label="Lojban"/>
- <int value="6974819" label="Machame"/>
- <int value="6975602" label="Judeo-Persian"/>
- <int value="6976098" label="Judeo-Arabic"/>
- <int value="7037281" label="Kara-Kalpak"/>
- <int value="7037282" label="Kabyle"/>
- <int value="7037283" label="Kachin"/>
- <int value="7037290" label="Jju"/>
- <int value="7037293" label="Kamba"/>
- <int value="7037298" label="Karen"/>
- <int value="7037303" label="Kawi"/>
- <int value="7037540" label="Kabardian"/>
- <int value="7037799" label="Tyap"/>
- <int value="7038053" label="Makonde"/>
- <int value="7038305" label="Kabuverdianu"/>
- <int value="7038575" label="Koro"/>
- <int value="7039073" label="Khasi"/>
- <int value="7039081" label="Khoisan Language"/>
- <int value="7039087" label="Khotanese"/>
- <int value="7039089" label="Koyra Chiini"/>
- <int value="7040110" label="Kalenjin"/>
- <int value="7040354" label="Kimbundu"/>
- <int value="7040875" label="Konkani"/>
- <int value="7040883" label="Kosraean"/>
- <int value="7041125" label="Kpelle"/>
- <int value="7041635" label="Karachay-Balkar"/>
- <int value="7041644" label="Karelian"/>
- <int value="7041647" label="Kru"/>
- <int value="7041653" label="Kurukh"/>
- <int value="7041890" label="Shambala"/>
- <int value="7041896" label="Colognian"/>
- <int value="7042413" label="Kumyk"/>
- <int value="7042420" label="Kutenai"/>
- <int value="7102820" label="Ladino"/>
- <int value="7102823" label="Langi"/>
- <int value="7102824" label="Lahnda"/>
- <int value="7102829" label="Lamba"/>
- <int value="7103866" label="Lezghian"/>
- <int value="7106412" label="Mongo"/>
- <int value="7106426" label="Lozi"/>
- <int value="7107937" label="Luba-Lulua"/>
- <int value="7107945" label="Luiseno"/>
- <int value="7107950" label="Lunda"/>
- <int value="7107951" label="Luo"/>
- <int value="7107955" label="Lushai"/>
- <int value="7107961" label="Luyia"/>
- <int value="7168356" label="Madurese"/>
- <int value="7168359" label="Magahi"/>
- <int value="7168361" label="Maithili"/>
- <int value="7168363" label="Makasar"/>
- <int value="7168366" label="Mandingo"/>
- <int value="7168368" label="Austronesian Language"/>
- <int value="7168371" label="Masai"/>
- <int value="7169126" label="Moksha"/>
- <int value="7169138" label="Mandar"/>
- <int value="7169390" label="Mende"/>
- <int value="7169394" label="Meru"/>
- <int value="7169637" label="Morisyen"/>
- <int value="7169889" label="Middle Irish"/>
- <int value="7170403" label="Micmac"/>
- <int value="7170414" label="Minangkabau"/>
- <int value="7170419" label="Miscellaneous Language"/>
- <int value="7170920" label="Mon-Khmer Language"/>
- <int value="7171683" label="Manchu"/>
- <int value="7171689" label="Manipuri"/>
- <int value="7171695" label="Manobo Language"/>
- <int value="7171944" label="Mohawk"/>
- <int value="7171955" label="Mossi"/>
- <int value="7173484" label="Multiple Languages"/>
- <int value="7173486" label="Munda Language"/>
- <int value="7173491" label="Creek"/>
- <int value="7173996" label="Mirandese"/>
- <int value="7174002" label="Marwari"/>
- <int value="7174510" label="Mayan Language"/>
- <int value="7174518" label="Erzya"/>
- <int value="7233896" label="Nahuatl"/>
- <int value="7233897" label="North American Indian Language"/>
- <int value="7233904" label="Neapolitan"/>
- <int value="7233905" label="Nama"/>
- <int value="7234675" label="Low German"/>
- <int value="7234935" label="Newari"/>
- <int value="7235937" label="Nias"/>
- <int value="7235939" label="Niger-Kordofanian Language"/>
- <int value="7235957" label="Niuean"/>
- <int value="7237479" label="Nogai"/>
- <int value="7237486" label="Old Norse"/>
- <int value="7237999" label="N'Ko"/>
- <int value="7238511" label="Northern Sotho"/>
- <int value="7239010" label="Nubian Language"/>
- <int value="7239523" label="Classical Newari"/>
- <int value="7240045" label="Nyamwezi"/>
- <int value="7240046" label="Nyankole"/>
- <int value="7240047" label="Nyoro"/>
- <int value="7240297" label="Nzima"/>
- <int value="7304033" label="Osage"/>
- <int value="7304289" label="Ottoman Turkish"/>
- <int value="7304303" label="Otomian Language"/>
- <int value="7364961" label="Papuan Language"/>
- <int value="7364967" label="Pangasinan"/>
- <int value="7364972" label="Pahlavi"/>
- <int value="7364973" label="Pampanga"/>
- <int value="7364976" label="Papiamento"/>
- <int value="7364981" label="Palauan"/>
- <int value="7365999" label="Old Persian"/>
- <int value="7366761" label="Philippine Language"/>
- <int value="7366766" label="Phoenician"/>
- <int value="7368558" label="Pohnpeian"/>
- <int value="7369313" label="Prakrit Language"/>
- <int value="7369327" label="Old Provencal"/>
- <int value="7496042" label="Rajasthani"/>
- <int value="7496048" label="Rapanui"/>
- <int value="7496050" label="Rarotongan"/>
- <int value="7499617" label="Romance Language"/>
- <int value="7499622" label="Rombo"/>
- <int value="7499629" label="Romany"/>
- <int value="7501168" label="Aromanian"/>
- <int value="7501675" label="Rwa"/>
- <int value="7561572" label="Sandawe"/>
- <int value="7561576" label="Yakut"/>
- <int value="7561577" label="South American Indian Language"/>
- <int value="7561580" label="Salishan Language"/>
- <int value="7561581" label="Samaritan Aramaic"/>
- <int value="7561585" label="Samburu"/>
- <int value="7561587" label="Sasak"/>
- <int value="7561588" label="Santali"/>
- <int value="7562094" label="Sicilian"/>
- <int value="7562095" label="Scots"/>
- <int value="7562597" label="Seneca"/>
- <int value="7562600" label="Sena"/>
- <int value="7562604" label="Selkup"/>
- <int value="7562605" label="Semitic Language"/>
- <int value="7562611" label="Koyraboro Senni"/>
- <int value="7563105" label="Old Irish"/>
- <int value="7563118" label="Sign Language"/>
- <int value="7563369" label="Tachelhit"/>
- <int value="7563374" label="Shan"/>
- <int value="7563620" label="Sidamo"/>
- <int value="7563631" label="Siouan Language"/>
- <int value="7563636" label="Sino-Tibetan Language"/>
- <int value="7564385" label="Slavic Language"/>
- <int value="7564641" label="Southern Sami"/>
- <int value="7564649" label="Sami Language"/>
- <int value="7564650" label="Lule Sami"/>
- <int value="7564654" label="Inari Sami"/>
- <int value="7564659" label="Skolt Sami"/>
- <int value="7564907" label="Soninke"/>
- <int value="7565159" label="Sogdien"/>
- <int value="7565166" label="Songhai"/>
- <int value="7565934" label="Sranan Tongo"/>
- <int value="7565938" label="Serer"/>
- <int value="7566177" label="Nilo-Saharan Language"/>
- <int value="7566201" label="Saho"/>
- <int value="7566699" label="Sukuma"/>
- <int value="7566707" label="Susu"/>
- <int value="7566712" label="Sumerian"/>
- <int value="7567202" label="Comorian"/>
- <int value="7567715" label="Classical Syriac"/>
- <int value="7567730" label="Syriac"/>
- <int value="7627113" label="Tai Language"/>
- <int value="7628141" label="Timne"/>
- <int value="7628143" label="Teso"/>
- <int value="7628146" label="Tereno"/>
- <int value="7628148" label="Tetum"/>
- <int value="7629159" label="Tigre"/>
- <int value="7629174" label="Tiv"/>
- <int value="7629676" label="Tokelau"/>
- <int value="7629928" label="Klingon"/>
- <int value="7629929" label="Tlingit"/>
- <int value="7630184" label="Tamashek"/>
- <int value="7630695" label="Nyasa Tonga"/>
- <int value="7630953" label="Tok Pisin"/>
- <int value="7631478" label="Taroko"/>
- <int value="7631721" label="Tsimshian"/>
- <int value="7632237" label="Tumbuka"/>
- <int value="7632240" label="Tupi Language"/>
- <int value="7632244" label="Altaic Language"/>
- <int value="7632492" label="Tuvalu"/>
- <int value="7632753" label="Tasawaq"/>
- <int value="7633270" label="Tuvinian"/>
- <int value="7633517" label="Central Morocco Tamazight"/>
- <int value="7693421" label="Udmurt"/>
- <int value="7694177" label="Ugaritic"/>
- <int value="7695714" label="Umbundu"/>
- <int value="7695972" label="Unknown Language"/>
- <int value="7758185" label="Vai"/>
- <int value="7761780" label="Votic"/>
- <int value="7763310" label="Vunjo"/>
- <int value="7823723" label="Wakashan Language"/>
- <int value="7823724" label="Walamo"/>
- <int value="7823730" label="Waray"/>
- <int value="7823731" label="Washo"/>
- <int value="7824750" label="Sorbian Language"/>
- <int value="7889260" label="Kalmyk"/>
- <int value="7892839" label="Soga"/>
- <int value="7954799" label="Yao"/>
- <int value="7954800" label="Yapese"/>
- <int value="7958635" label="Yupik Language"/>
- <int value="7959909" label="Cantonese"/>
- <int value="8020336" label="Zapotec"/>
- <int value="8020588" label="Blissymbols"/>
- <int value="8021358" label="Zenaga"/>
- <int value="8023652" label="Zande"/>
- <int value="8025454" label="Zuni"/>
- <int value="8026232" label="No linguistic content"/>
- <int value="8026721" label="Zaza"/>
-</enum>
-
-<enum name="LevelDBCorruptionTypes" type="int">
- <int value="0" label="other"/>
- <int value="1" label="missing files"/>
- <int value="2" label="log record too small"/>
- <int value="3" label="corrupted internal key"/>
- <int value="4" label="partial record"/>
- <int value="5" label="missing start of fragmented record"/>
- <int value="6" label="error in middle of record"/>
- <int value="7" label="unknown record type"/>
- <int value="8" label="truncated record at end"/>
- <int value="9" label="bad record length"/>
- <int value="10" label="VersionEdit"/>
- <int value="11" label="FileReader invoked with unexpected value"/>
- <int value="12" label="corrupted key"/>
- <int value="13" label="CURRENT file does not end with newline"/>
- <int value="14" label="no meta-nextfile entry"/>
- <int value="15" label="no meta-lognumber entry"/>
- <int value="16" label="no last-sequence-number entry"/>
- <int value="17" label="malformed WriteBatch"/>
- <int value="18" label="bad WriteBatch Put"/>
- <int value="19" label="bad WriteBatch Delete"/>
- <int value="20" label="unknown WriteBatch tag"/>
- <int value="21" label="WriteBatch has wrong count"/>
- <int value="22" label="bad entry in block"/>
- <int value="23" label="bad block contents"/>
- <int value="24" label="bad block handle"/>
- <int value="25" label="truncated block read"/>
- <int value="26" label="block checksum mismatch"/>
- <int value="27" label="checksum mismatch"/>
- <int value="28" label="corrupted compressed block contents"/>
- <int value="29" label="bad block type"/>
- <int value="30" label="bad magic number"/>
- <int value="31" label="file is too short"/>
-</enum>
-
-<enum name="LevelDBErrorCount" type="int">
- <int value="1" label="Failure"/>
-</enum>
-
-<enum name="LevelDBErrorTypes" type="int">
- <int value="0" label="NotFound"/>
- <int value="1" label="Corruption"/>
- <int value="2" label="IOError"/>
- <int value="3" label="Other"/>
-</enum>
-
-<enum name="LevelDBIOErrorMethods" type="int">
- <int value="0" label="SequentialFileRead"/>
- <int value="1" label="SequentialFileSkip"/>
- <int value="2" label="RandomAccessFileRead"/>
- <int value="3" label="WritableFileAppend"/>
- <int value="4" label="WritableFileClose"/>
- <int value="5" label="WritableFileFlush"/>
- <int value="6" label="WritableFileSync"/>
- <int value="7" label="NewSequentialFile"/>
- <int value="8" label="NewRandomAccessFile"/>
- <int value="9" label="NewWritableFile"/>
- <int value="10" label="DeleteFile"/>
- <int value="11" label="CreateDir"/>
- <int value="12" label="DeleteDir"/>
- <int value="13" label="GetFileSize"/>
- <int value="14" label="RenameFile"/>
- <int value="15" label="LockFile"/>
- <int value="16" label="UnlockFile"/>
- <int value="17" label="GetTestDirectory"/>
- <int value="18" label="NewLogger"/>
- <int value="19" label="SyncParent"/>
- <int value="20" label="GetChildren"/>
-</enum>
-
-<enum name="LinkMonitorFailureType" type="int">
- <int value="0" label="Local MAC Address Not Found"/>
- <int value="1" label="Client Startup Failure"/>
- <int value="2" label="Transmission Failure"/>
- <int value="3" label="Failure Threshold Reached"/>
-</enum>
-
-<enum name="LinuxAudioIO" type="int">
- <int value="0" label="PulseAudio"/>
- <int value="1" label="ALSA"/>
- <int value="2" label="Cras"/>
-</enum>
-
-<enum name="LinuxGlibcVersion" type="int">
- <int value="0" label="Not Parseable"/>
- <int value="1" label="Unknown"/>
- <int value="2" label="2.11"/>
- <int value="3" label="2.12"/>
- <int value="4" label="2.13"/>
- <int value="5" label="2.14"/>
- <int value="6" label="2.15"/>
- <int value="7" label="2.16"/>
- <int value="8" label="2.17"/>
- <int value="9" label="2.18"/>
- <int value="10" label="2.19"/>
-</enum>
-
-<enum name="LoadType" type="int">
- <int value="0" label="UNDEFINED_LOAD">Not yet initialized</int>
- <int value="1" label="RELOAD">User pressed reload</int>
- <int value="2" label="HISTORY_LOAD">Back or forward</int>
- <int value="3" label="NORMAL_LOAD">User entered URL, or omnibox search</int>
- <int value="4" label="LINK_LOAD">(deprecated) Included next 4 categories</int>
- <int value="5" label="LINK_LOAD_NORMAL">Commonly following of link</int>
- <int value="6" label="LINK_LOAD_RELOAD">JS/link directed reload</int>
- <int value="7" label="LINK_LOAD_CACHE_STALE_OK">
- back/forward or encoding change
- </int>
- <int value="8" label="LINK_LOAD_CACHE_ONLY">
- Allow stale data (avoid doing a re-post)
- </int>
- <int value="9" label="PRERENDER_LOAD">Speculative prerendering of a page</int>
-</enum>
-
-<enum name="LocalRendererSinkStates" type="int">
- <int value="0" label="SinkStarted"/>
- <int value="1" label="SinkNeverStarted"/>
-</enum>
-
-<enum name="LoginFailureReason" type="int">
- <int value="0" label="NONE">None</int>
- <int value="1" label="COULD_NOT_MOUNT_CRYPTOHOME">
- Could not mount cryptohome
- </int>
- <int value="2" label="COULD_NOT_MOUNT_TMPFS">Could not mount tmpfs</int>
- <int value="3" label="COULD_NOT_UNMOUNT_CRYPTOHOME">
- Could not unmount cryptohome
- </int>
- <int value="4" label="DATA_REMOVAL_FAILED">Data removal failed</int>
- <int value="5" label="LOGIN_TIMED_OUT">Login timed out</int>
- <int value="6" label="UNLOCK_FAILED">Unlock failed</int>
- <int value="7" label="NETWORK_AUTH_FAILED">Network auth failed</int>
-</enum>
-
-<enum name="LoginPolicyFilesState" type="int">
- <summary>Policy/owner key file state.</summary>
- <int value="0" label="HEALTHY_R11">Healthy, pre-R11</int>
- <int value="1" label="UNUSED">Unused</int>
- <int value="2" label="HEALTHY">Healthy</int>
- <int value="3" label="RESERVED">Reserved</int>
- <int value="4" label="BAD_POLICY_R11">Key OK, policy bad, pre-R11</int>
- <int value="5" label="UNUSED">Unused</int>
- <int value="6" label="BAD_POLICY">Key OK, policy bad</int>
- <int value="7" label="RESERVED">Reserved</int>
- <int value="8" label="KEY_OK_NO_POLICY_R11">
- Key OK, no policy, pre-R11 user (http://crosbug.com/24916)
- </int>
- <int value="9" label="UNUSED">Unused</int>
- <int value="10" label="KEY_OK_NO_POLICY">Key OK, no policy</int>
- <int value="11" label="RESERVED">Reserved</int>
- <int value="12" label="RESERVED">Reserved</int>
- <int value="13" label="RESERVED">Reserved</int>
- <int value="14" label="RESERVED">Reserved</int>
- <int value="15" label="RESERVED">Reserved</int>
- <int value="16" label="BAD_KEY_R11">Key bad, policy OK, pre-R11</int>
- <int value="17" label="UNUSED">Unused</int>
- <int value="18" label="BAD_KEY">Key bad, policy OK</int>
- <int value="19" label="RESERVED">Reserved</int>
- <int value="20" label="BAD_KEY_BAD_POLICY_R11">
- Key bad, policy bad, pre-R11
- </int>
- <int value="21" label="UNUSED">Unused</int>
- <int value="22" label="BAD_KEY_BAD_POLICY">Key bad, policy bad</int>
- <int value="23" label="RESERVED">Reserved</int>
- <int value="24" label="BAD_KEY_NO_POLICY_R11">
- Key bad, policy bad, pre-R11
- </int>
- <int value="25" label="UNUSED">Unused</int>
- <int value="26" label="BAD_KEY_BAD_POLICY">Key bad, policy bad</int>
- <int value="27" label="RESERVED">Reserved</int>
- <int value="28" label="RESERVED">Reserved</int>
- <int value="29" label="RESERVED">Reserved</int>
- <int value="30" label="RESERVED">Reserved</int>
- <int value="31" label="RESERVED">Reserved</int>
- <int value="32" label="NO_KEY_R11">No key, policy OK, pre-R11</int>
- <int value="33" label="UNUSED">Unused</int>
- <int value="34" label="NO_KEY">No key, policy OK</int>
- <int value="35" label="RESERVED">RESERVED</int>
- <int value="36" label="NO_KEY_BAD_POLICY_R11">
- No key, policy bad, pre-R11
- </int>
- <int value="37" label="UNUSED">Unused</int>
- <int value="38" label="NO_KEY_BAD_POLICY">No key, bad policy</int>
- <int value="39" label="RESERVED">Reserved</int>
- <int value="40" label="NO_KEY_NO_POLICY_R11">Un-owned, pre-R11</int>
- <int value="41" label="UNUSED">Unused</int>
- <int value="42" label="NO_KEY_NO_POLICY">Un-owned</int>
- <int value="43" label="RESERVED">Reserved</int>
-</enum>
-
-<enum name="LoginSuccessReason" type="int">
- <int value="0" label="OFFLINE_AND_ONLINE">
- Login success offline and online
- </int>
- <int value="1" label="OFFLINE_ONLY">Login success offline only</int>
-</enum>
-
-<enum name="LoginUserType" type="int">
- <int value="0" label="INCOGNITO_NORMAL">Incognito Normal</int>
- <int value="1" label="OWNER_NORMAL">Owner Normal</int>
- <int value="2" label="OTHER_NORMAL">Other Normal</int>
- <int value="3" label="INCOGNITO_DEVELOPER">Incognito Dev</int>
- <int value="4" label="OWNER_DEVELOPER">Owner Dev</int>
- <int value="5" label="OTHER_DEVELOPER">Other Dev</int>
-</enum>
-
-<enum name="MappedCSSProperties" type="int">
-<!-- See http://src.chromium.org/viewvc/blink/trunk/Source/core/page/UseCounter.cpp -->
-
- <int value="1" label="Total Pages Measured"/>
- <int value="2" label="color"/>
- <int value="3" label="direction"/>
- <int value="4" label="display"/>
- <int value="5" label="font"/>
- <int value="6" label="font-family"/>
- <int value="7" label="font-size"/>
- <int value="8" label="font-style"/>
- <int value="9" label="font-variant"/>
- <int value="10" label="font-weight"/>
- <int value="11" label="text-rendering"/>
- <int value="12" label="webkit-font-feature-settings"/>
- <int value="13" label="webkit-font-kerning"/>
- <int value="14" label="webkit-font-smoothing"/>
- <int value="15" label="webkit-font-variant-ligatures"/>
- <int value="16" label="webkit-locale"/>
- <int value="17" label="webkit-text-orientation"/>
- <int value="18" label="webkit-writing-mode"/>
- <int value="19" label="zoom"/>
- <int value="20" label="line-height"/>
- <int value="21" label="background"/>
- <int value="22" label="background-attachment"/>
- <int value="23" label="background-clip"/>
- <int value="24" label="background-color"/>
- <int value="25" label="background-image"/>
- <int value="26" label="background-origin"/>
- <int value="27" label="background-position"/>
- <int value="28" label="background-position-x"/>
- <int value="29" label="background-position-y"/>
- <int value="30" label="background-repeat"/>
- <int value="31" label="background-repeat-x"/>
- <int value="32" label="background-repeat-y"/>
- <int value="33" label="background-size"/>
- <int value="34" label="border"/>
- <int value="35" label="border-bottom"/>
- <int value="36" label="border-bottom-color"/>
- <int value="37" label="border-bottom-left-radius"/>
- <int value="38" label="border-bottom-right-radius"/>
- <int value="39" label="border-bottom-style"/>
- <int value="40" label="border-bottom-width"/>
- <int value="41" label="border-collapse"/>
- <int value="42" label="border-color"/>
- <int value="43" label="border-image"/>
- <int value="44" label="border-image-outset"/>
- <int value="45" label="border-image-repeat"/>
- <int value="46" label="border-image-slice"/>
- <int value="47" label="border-image-source"/>
- <int value="48" label="border-image-width"/>
- <int value="49" label="border-left"/>
- <int value="50" label="border-left-color"/>
- <int value="51" label="border-left-style"/>
- <int value="52" label="border-left-width"/>
- <int value="53" label="border-radius"/>
- <int value="54" label="border-right"/>
- <int value="55" label="border-right-color"/>
- <int value="56" label="border-right-style"/>
- <int value="57" label="border-right-width"/>
- <int value="58" label="border-spacing"/>
- <int value="59" label="border-style"/>
- <int value="60" label="border-top"/>
- <int value="61" label="border-top-color"/>
- <int value="62" label="border-top-left-radius"/>
- <int value="63" label="border-top-right-radius"/>
- <int value="64" label="border-top-style"/>
- <int value="65" label="border-top-width"/>
- <int value="66" label="border-width"/>
- <int value="67" label="bottom"/>
- <int value="68" label="box-shadow"/>
- <int value="69" label="box-sizing"/>
- <int value="70" label="caption-side"/>
- <int value="71" label="clear"/>
- <int value="72" label="clip"/>
- <int value="73" label="webkit-clip-path"/>
- <int value="74" label="content"/>
- <int value="75" label="counter-increment"/>
- <int value="76" label="counter-reset"/>
- <int value="77" label="cursor"/>
- <int value="78" label="empty-cells"/>
- <int value="79" label="float"/>
- <int value="80" label="font-stretch"/>
- <int value="81" label="height"/>
- <int value="82" label="image-rendering"/>
- <int value="83" label="left"/>
- <int value="84" label="letter-spacing"/>
- <int value="85" label="list-style"/>
- <int value="86" label="list-style-image"/>
- <int value="87" label="list-style-position"/>
- <int value="88" label="list-style-type"/>
- <int value="89" label="margin"/>
- <int value="90" label="margin-bottom"/>
- <int value="91" label="margin-left"/>
- <int value="92" label="margin-right"/>
- <int value="93" label="margin-top"/>
- <int value="94" label="max-height"/>
- <int value="95" label="max-width"/>
- <int value="96" label="min-height"/>
- <int value="97" label="min-width"/>
- <int value="98" label="opacity"/>
- <int value="99" label="orphans"/>
- <int value="100" label="outline"/>
- <int value="101" label="outline-color"/>
- <int value="102" label="outline-offset"/>
- <int value="103" label="outline-style"/>
- <int value="104" label="outline-width"/>
- <int value="105" label="overflow"/>
- <int value="106" label="overflow-wrap"/>
- <int value="107" label="overflow-x"/>
- <int value="108" label="overflow-y"/>
- <int value="109" label="padding"/>
- <int value="110" label="padding-bottom"/>
- <int value="111" label="padding-left"/>
- <int value="112" label="padding-right"/>
- <int value="113" label="padding-top"/>
- <int value="114" label="page"/>
- <int value="115" label="page-break-after"/>
- <int value="116" label="page-break-before"/>
- <int value="117" label="page-break-inside"/>
- <int value="118" label="pointer-events"/>
- <int value="119" label="position"/>
- <int value="120" label="quotes"/>
- <int value="121" label="resize"/>
- <int value="122" label="right"/>
- <int value="123" label="size"/>
- <int value="124" label="src"/>
- <int value="125" label="speak"/>
- <int value="126" label="table-layout"/>
- <int value="127" label="tab-size"/>
- <int value="128" label="text-align"/>
- <int value="129" label="text-decoration"/>
- <int value="130" label="text-indent"/>
- <int value="131" label="text-line-through"/>
- <int value="132" label="text-line-through-color"/>
- <int value="133" label="text-line-through-mode"/>
- <int value="134" label="text-line-through-style"/>
- <int value="135" label="text-line-through-width"/>
- <int value="136" label="text-overflow"/>
- <int value="137" label="text-overline"/>
- <int value="138" label="text-overline-color"/>
- <int value="139" label="text-overline-mode"/>
- <int value="140" label="text-overline-style"/>
- <int value="141" label="text-overline-width"/>
- <int value="142" label="text-shadow"/>
- <int value="143" label="text-transform"/>
- <int value="144" label="text-underline"/>
- <int value="145" label="text-underline-color"/>
- <int value="146" label="text-underline-mode"/>
- <int value="147" label="text-underline-style"/>
- <int value="148" label="text-underline-width"/>
- <int value="149" label="top"/>
- <int value="150" label="transition"/>
- <int value="151" label="transition-delay"/>
- <int value="152" label="transition-duration"/>
- <int value="153" label="transition-property"/>
- <int value="154" label="transition-timing-function"/>
- <int value="155" label="unicode-bidi"/>
- <int value="156" label="unicode-range"/>
- <int value="157" label="vertical-align"/>
- <int value="158" label="visibility"/>
- <int value="159" label="white-space"/>
- <int value="160" label="widows"/>
- <int value="161" label="width"/>
- <int value="162" label="word-break"/>
- <int value="163" label="word-spacing"/>
- <int value="164" label="word-wrap"/>
- <int value="165" label="z-index"/>
- <int value="166" label="webkit-animation"/>
- <int value="167" label="webkit-animation-delay"/>
- <int value="168" label="webkit-animation-direction"/>
- <int value="169" label="webkit-animation-duration"/>
- <int value="170" label="webkit-animation-fill-mode"/>
- <int value="171" label="webkit-animation-iteration-count"/>
- <int value="172" label="webkit-animation-name"/>
- <int value="173" label="webkit-animation-play-state"/>
- <int value="174" label="webkit-animation-timing-function"/>
- <int value="175" label="webkit-appearance"/>
- <int value="176" label="webkit-aspect-ratio"/>
- <int value="177" label="webkit-backface-visibility"/>
- <int value="178" label="webkit-background-clip"/>
- <int value="179" label="webkit-background-composite"/>
- <int value="180" label="webkit-background-origin"/>
- <int value="181" label="webkit-background-size"/>
- <int value="182" label="webkit-border-after"/>
- <int value="183" label="webkit-border-after-color"/>
- <int value="184" label="webkit-border-after-style"/>
- <int value="185" label="webkit-border-after-width"/>
- <int value="186" label="webkit-border-before"/>
- <int value="187" label="webkit-border-before-color"/>
- <int value="188" label="webkit-border-before-style"/>
- <int value="189" label="webkit-border-before-width"/>
- <int value="190" label="webkit-border-end"/>
- <int value="191" label="webkit-border-end-color"/>
- <int value="192" label="webkit-border-end-style"/>
- <int value="193" label="webkit-border-end-width"/>
- <int value="194" label="webkit-border-fit"/>
- <int value="195" label="webkit-border-horizontal-spacing"/>
- <int value="196" label="webkit-border-image"/>
- <int value="197" label="webkit-border-radius"/>
- <int value="198" label="webkit-border-start"/>
- <int value="199" label="webkit-border-start-color"/>
- <int value="200" label="webkit-border-start-style"/>
- <int value="201" label="webkit-border-start-width"/>
- <int value="202" label="webkit-border-vertical-spacing"/>
- <int value="203" label="webkit-box-align"/>
- <int value="204" label="webkit-box-direction"/>
- <int value="205" label="webkit-box-flex"/>
- <int value="206" label="webkit-box-flex-group"/>
- <int value="207" label="webkit-box-lines"/>
- <int value="208" label="webkit-box-ordinal-group"/>
- <int value="209" label="webkit-box-orient"/>
- <int value="210" label="webkit-box-pack"/>
- <int value="211" label="webkit-box-reflect"/>
- <int value="212" label="webkit-box-shadow"/>
- <int value="213" label="webkit-color-correction"/>
- <int value="214" label="webkit-column-axis"/>
- <int value="215" label="webkit-column-break-after"/>
- <int value="216" label="webkit-column-break-before"/>
- <int value="217" label="webkit-column-break-inside"/>
- <int value="218" label="webkit-column-count"/>
- <int value="219" label="webkit-column-gap"/>
- <int value="220" label="webkit-column-progression"/>
- <int value="221" label="webkit-column-rule"/>
- <int value="222" label="webkit-column-rule-color"/>
- <int value="223" label="webkit-column-rule-style"/>
- <int value="224" label="webkit-column-rule-width"/>
- <int value="225" label="webkit-column-span"/>
- <int value="226" label="webkit-column-width"/>
- <int value="227" label="webkit-columns"/>
- <int value="228" label="webkit-box-decoration-break"/>
- <int value="229" label="webkit-filter"/>
- <int value="230" label="webkit-align-content"/>
- <int value="231" label="webkit-align-items"/>
- <int value="232" label="webkit-align-self"/>
- <int value="233" label="webkit-flex"/>
- <int value="234" label="webkit-flex-basis"/>
- <int value="235" label="webkit-flex-direction"/>
- <int value="236" label="webkit-flex-flow"/>
- <int value="237" label="webkit-flex-grow"/>
- <int value="238" label="webkit-flex-shrink"/>
- <int value="239" label="webkit-flex-wrap"/>
- <int value="240" label="webkit-justify-content"/>
- <int value="241" label="webkit-font-size-delta"/>
- <int value="242" label="webkit-grid-columns"/>
- <int value="243" label="webkit-grid-rows"/>
- <int value="244" label="webkit-grid-start"/>
- <int value="245" label="webkit-grid-end"/>
- <int value="246" label="webkit-grid-before"/>
- <int value="247" label="webkit-grid-after"/>
- <int value="248" label="webkit-grid-column"/>
- <int value="249" label="webkit-grid-row"/>
- <int value="250" label="webkit-grid-auto-flow"/>
- <int value="251" label="webkit-highlight"/>
- <int value="252" label="webkit-hyphenate-character"/>
- <int value="253" label="webkit-hyphenate-limit-after"/>
- <int value="254" label="webkit-hyphenate-limit-before"/>
- <int value="255" label="webkit-hyphenate-limit-lines"/>
- <int value="256" label="webkit-hyphens"/>
- <int value="257" label="webkit-line-box-contain"/>
- <int value="258" label="webkit-line-align"/>
- <int value="259" label="webkit-line-break"/>
- <int value="260" label="webkit-line-clamp"/>
- <int value="261" label="webkit-line-grid"/>
- <int value="262" label="webkit-line-snap"/>
- <int value="263" label="webkit-logical-width"/>
- <int value="264" label="webkit-logical-height"/>
- <int value="265" label="webkit-margin-after-collapse"/>
- <int value="266" label="webkit-margin-before-collapse"/>
- <int value="267" label="webkit-margin-bottom-collapse"/>
- <int value="268" label="webkit-margin-top-collapse"/>
- <int value="269" label="webkit-margin-collapse"/>
- <int value="270" label="webkit-margin-after"/>
- <int value="271" label="webkit-margin-before"/>
- <int value="272" label="webkit-margin-end"/>
- <int value="273" label="webkit-margin-start"/>
- <int value="274" label="webkit-marquee"/>
- <int value="275" label="webkit-marquee-direction"/>
- <int value="276" label="webkit-marquee-increment"/>
- <int value="277" label="webkit-marquee-repetition"/>
- <int value="278" label="webkit-marquee-speed"/>
- <int value="279" label="webkit-marquee-style"/>
- <int value="280" label="webkit-mask"/>
- <int value="281" label="webkit-mask-box-image"/>
- <int value="282" label="webkit-mask-box-image-outset"/>
- <int value="283" label="webkit-mask-box-image-repeat"/>
- <int value="284" label="webkit-mask-box-image-slice"/>
- <int value="285" label="webkit-mask-box-image-source"/>
- <int value="286" label="webkit-mask-box-image-width"/>
- <int value="287" label="webkit-mask-clip"/>
- <int value="288" label="webkit-mask-composite"/>
- <int value="289" label="webkit-mask-image"/>
- <int value="290" label="webkit-mask-origin"/>
- <int value="291" label="webkit-mask-position"/>
- <int value="292" label="webkit-mask-position-x"/>
- <int value="293" label="webkit-mask-position-y"/>
- <int value="294" label="webkit-mask-repeat"/>
- <int value="295" label="webkit-mask-repeat-x"/>
- <int value="296" label="webkit-mask-repeat-y"/>
- <int value="297" label="webkit-mask-size"/>
- <int value="298" label="webkit-max-logical-width"/>
- <int value="299" label="webkit-max-logical-height"/>
- <int value="300" label="webkit-min-logical-width"/>
- <int value="301" label="webkit-min-logical-height"/>
- <int value="302" label="webkit-nbsp-mode"/>
- <int value="303" label="webkit-order"/>
- <int value="304" label="webkit-padding-after"/>
- <int value="305" label="webkit-padding-before"/>
- <int value="306" label="webkit-padding-end"/>
- <int value="307" label="webkit-padding-start"/>
- <int value="308" label="webkit-perspective"/>
- <int value="309" label="webkit-perspective-origin"/>
- <int value="310" label="webkit-perspective-origin-x"/>
- <int value="311" label="webkit-perspective-origin-y"/>
- <int value="312" label="webkit-print-color-adjust"/>
- <int value="313" label="webkit-rtl-ordering"/>
- <int value="314" label="webkit-ruby-position"/>
- <int value="315" label="webkit-text-combine"/>
- <int value="316" label="webkit-text-decorations-in-effect"/>
- <int value="317" label="webkit-text-emphasis"/>
- <int value="318" label="webkit-text-emphasis-color"/>
- <int value="319" label="webkit-text-emphasis-position"/>
- <int value="320" label="webkit-text-emphasis-style"/>
- <int value="321" label="webkit-text-fill-color"/>
- <int value="322" label="webkit-text-security"/>
- <int value="323" label="webkit-text-stroke"/>
- <int value="324" label="webkit-text-stroke-color"/>
- <int value="325" label="webkit-text-stroke-width"/>
- <int value="326" label="webkit-transform"/>
- <int value="327" label="webkit-transform-origin"/>
- <int value="328" label="webkit-transform-origin-x"/>
- <int value="329" label="webkit-transform-origin-y"/>
- <int value="330" label="webkit-transform-origin-z"/>
- <int value="331" label="webkit-transform-style"/>
- <int value="332" label="webkit-transition"/>
- <int value="333" label="webkit-transition-delay"/>
- <int value="334" label="webkit-transition-duration"/>
- <int value="335" label="webkit-transition-property"/>
- <int value="336" label="webkit-transition-timing-function"/>
- <int value="337" label="webkit-user-drag"/>
- <int value="338" label="webkit-user-modify"/>
- <int value="339" label="webkit-user-select"/>
- <int value="340" label="webkit-flow-into"/>
- <int value="341" label="webkit-flow-from"/>
- <int value="342" label="webkit-region-overflow"/>
- <int value="343" label="webkit-region-break-after"/>
- <int value="344" label="webkit-region-break-before"/>
- <int value="345" label="webkit-region-break-inside"/>
- <int value="346" label="webkit-shape-inside"/>
- <int value="347" label="webkit-shape-outside"/>
- <int value="348" label="webkit-shape-margin"/>
- <int value="349" label="webkit-shape-padding"/>
- <int value="350" label="webkit-wrap-flow"/>
- <int value="351" label="webkit-wrap-through"/>
- <int value="352" label="webkit-wrap"/>
- <int value="353" label="webkit-tap-highlight-color"/>
- <int value="354" label="webkit-app-region"/>
- <int value="355" label="clip-path"/>
- <int value="356" label="clip-rule"/>
- <int value="357" label="mask"/>
- <int value="358" label="enable-background"/>
- <int value="359" label="filter"/>
- <int value="360" label="flood-color"/>
- <int value="361" label="flood-opacity"/>
- <int value="362" label="lighting-color"/>
- <int value="363" label="stop-color"/>
- <int value="364" label="stop-opacity"/>
- <int value="365" label="color-interpolation"/>
- <int value="366" label="color-interpolation-filters"/>
- <int value="367" label="color-profile"/>
- <int value="368" label="color-rendering"/>
- <int value="369" label="fill"/>
- <int value="370" label="fill-opacity"/>
- <int value="371" label="fill-rule"/>
- <int value="372" label="marker"/>
- <int value="373" label="marker-end"/>
- <int value="374" label="marker-mid"/>
- <int value="375" label="marker-start"/>
- <int value="376" label="mask-type"/>
- <int value="377" label="shape-rendering"/>
- <int value="378" label="stroke"/>
- <int value="379" label="stroke-dasharray"/>
- <int value="380" label="stroke-dashoffset"/>
- <int value="381" label="stroke-linecap"/>
- <int value="382" label="stroke-linejoin"/>
- <int value="383" label="stroke-miterlimit"/>
- <int value="384" label="stroke-opacity"/>
- <int value="385" label="stroke-width"/>
- <int value="386" label="alignment-baseline"/>
- <int value="387" label="baseline-shift"/>
- <int value="388" label="dominant-baseline"/>
- <int value="389" label="glyph-orientation-horizontal"/>
- <int value="390" label="glyph-orientation-vertical"/>
- <int value="391" label="kerning"/>
- <int value="392" label="text-anchor"/>
- <int value="393" label="vector-effect"/>
- <int value="394" label="writing-mode"/>
- <int value="395" label="webkit-svg-shadow"/>
- <int value="396" label="webkit-cursor-visibility"/>
- <int value="397" label="image-orientation"/>
- <int value="398" label="image-resolution"/>
- <int value="399" label="webkit-blend-mode"/>
- <int value="400" label="webkit-background-blend-mode"/>
- <int value="401" label="webkit-text-decoration-line"/>
- <int value="402" label="webkit-text-decoration-style"/>
- <int value="403" label="webkit-text-decoration-color"/>
- <int value="404" label="webkit-text-align-last"/>
- <int value="405" label="webkit-text-underline-position"/>
- <int value="406" label="max-zoom"/>
- <int value="407" label="min-zoom"/>
- <int value="408" label="orientation"/>
- <int value="409" label="user-zoom"/>
- <int value="410" label="webkit-dashboard-region"/>
- <int value="411" label="webkit-overflow-scrolling"/>
- <int value="412" label="webkit-app-region"/>
- <int value="413" label="webkit-filter"/>
- <int value="414" label="webkit-box-decoration-break"/>
- <int value="415" label="webkit-tap-highlight-color"/>
- <int value="416" label="buffered-rendering"/>
- <int value="417" label="grid-auto-rows"/>
- <int value="418" label="grid-auto-columns"/>
- <int value="419" label="background-blend-mode"/>
- <int value="420" label="mix-blend-mode"/>
- <int value="421" label="touch-action"/>
- <int value="422" label="grid-area"/>
- <int value="423" label="grid-template"/>
- <int value="424" label="animation"/>
- <int value="425" label="animation-delay"/>
- <int value="426" label="animation-direction"/>
- <int value="427" label="animation-duration"/>
- <int value="428" label="animation-fill-mode"/>
- <int value="429" label="animation-iteration-count"/>
- <int value="430" label="animation-name"/>
- <int value="431" label="animation-play-state"/>
- <int value="432" label="animation-timing-function"/>
- <int value="433" label="object-fit"/>
- <int value="434" label="paint-order"/>
- <int value="435" label="mask-source-type"/>
- <int value="436" label="isolation"/>
- <int value="437" label="object-position"/>
-</enum>
-
-<enum name="MediaContainers" type="int">
- <int value="0" label="Unknown"/>
- <int value="1" label="AAC (Advanced Audio Coding)"/>
- <int value="2" label="AC-3"/>
- <int value="3" label="AIFF (Audio Interchange File Format)"/>
- <int value="4" label="AMR (Adaptive Multi-Rate Audio)"/>
- <int value="5" label="APE (Monkey's Audio)"/>
- <int value="6" label="ASF (Advanced / Active Streaming Format)"/>
- <int value="7" label="SSA (SubStation Alpha) subtitle"/>
- <int value="8" label="AVI (Audio Video Interleaved)"/>
- <int value="9" label="Bink"/>
- <int value="10" label="CAF (Apple Core Audio Format)"/>
- <int value="11" label="DTS"/>
- <int value="12" label="DTS-HD"/>
- <int value="13" label="DV (Digital Video)"/>
- <int value="14" label="DXA"/>
- <int value="15" label="Enhanced AC-3"/>
- <int value="16" label="FLAC (Free Lossless Audio Codec)"/>
- <int value="17" label="FLV (Flash Video)"/>
- <int value="18" label="GSM (Global System for Mobile Audio)"/>
- <int value="19" label="H.261"/>
- <int value="20" label="H.263"/>
- <int value="21" label="H.264"/>
- <int value="22" label="HLS (Apple HTTP Live Streaming PlayList)"/>
- <int value="23" label="Berkeley/IRCAM/CARL Sound Format"/>
- <int value="24" label="MJPEG video"/>
- <int value="25" label="QuickTime / MOV / MPEG4"/>
- <int value="26" label="MP3 (MPEG audio layer 2/3)"/>
- <int value="27" label="MPEG-2 Program Stream"/>
- <int value="28" label="MPEG-2 Transport Stream"/>
- <int value="29" label="MPEG-4 Bitstream"/>
- <int value="30" label="Ogg"/>
- <int value="31" label="RM (RealMedia)"/>
- <int value="32" label="SRT (SubRip subtitle)"/>
- <int value="33" label="SWF (ShockWave Flash)"/>
- <int value="34" label="VC-1"/>
- <int value="35" label="WAV / WAVE (Waveform Audio)"/>
- <int value="36" label="Matroska / WebM"/>
- <int value="37" label="WTV (Windows Television)"/>
-</enum>
-
-<enum name="MediaGalleriesUsageType" type="int">
- <int value="0" label="Gallery added from dialog"/>
- <int value="1" label="Gallery permission added from dialog"/>
- <int value="2" label="Gallery permission removed from dialog"/>
- <int value="3" label="GetMediaFileSystems API invocations"/>
- <int value="4" label="Profiles With API Usage"/>
- <int value="5" label="Dialog shown"/>
- <int value="6" label="Dialog permissions saved"/>
- <int value="7" label="Gallery added from WebUI"/>
- <int value="8" label="Gallery removed from WebUI"/>
- <int value="9" label="Preferences initialized"/>
- <int value="10" label="Preferences initialization failed"/>
- <int value="11" label="GetAllMediaFileSystemMetadata API invocations"/>
-</enum>
-
-<enum name="MediaKeyError" type="int">
- <int value="1" label="kUnknownError"/>
- <int value="2" label="kClientError"/>
- <int value="4" label="kOutputError"/>
-</enum>
-
-<enum name="MediaKeyException" type="int">
- <int value="0" label="kUnknownResultId"/>
- <int value="1" label="kSuccess"/>
- <int value="2" label="kKeySystemNotSupported"/>
- <int value="3" label="kInvalidPlayerState"/>
-</enum>
-
-<enum name="MigrationNssToPemNetworkTypes" type="int">
- <int value="0" label="EAP"/>
- <int value="1" label="OpenVPN"/>
- <int value="2" label="IPsec"/>
-</enum>
-
-<enum name="MistSwitchResult" type="int">
- <int value="0" label="Success"/>
- <int value="1" label="Failure"/>
-</enum>
-
-<enum name="MobileSessionCallerApp" type="int">
- <int value="0" label="Google Search"/>
- <int value="1" label="GMail"/>
- <int value="2" label="Google+"/>
- <int value="3" label="Google Drive"/>
- <int value="4" label="Google Earth"/>
- <int value="5" label="Other Google Apps"/>
- <int value="6" label="Others"/>
- <int value="7" label="Mobile Safari"/>
- <int value="8" label="Other Apple Apps"/>
- <int value="9" label="YouTube"/>
- <int value="10" label="Google Maps"/>
-</enum>
-
-<enum name="MobileSessionStartAction" type="int">
- <int value="0" label="Open http"/>
- <int value="1" label="Open https"/>
- <int value="2" label="Open file"/>
- <int value="3" label="x-callback-url open"/>
- <int value="4" label="x-callback-url other"/>
- <int value="5" label="Others"/>
-</enum>
-
-<enum name="MouseEventFollowedByClick" type="int">
- <int value="0" label="Missed event before click"/>
- <int value="1" label="Caught event before click"/>
-</enum>
-
-<enum name="MSECodec" type="int">
- <int value="0" label="(Unknown)"/>
- <int value="1" label="VP8"/>
- <int value="2" label="VP9"/>
- <int value="3" label="Vorbis"/>
- <int value="4" label="H.264"/>
- <int value="5" label="MPEG2 AAC"/>
- <int value="6" label="MPEG4 AAC"/>
- <int value="7" label="EAC3"/>
- <int value="8" label="MP3"/>
- <int value="9" label="OPUS"/>
-</enum>
-
-<enum name="MultiProfileSessionMode" type="int">
- <int value="0" label="Single user mode"/>
- <int value="1" label="Side by side mode"/>
- <int value="2" label="Separate desktop mode"/>
-</enum>
-
-<enum name="MultiProfileSigninUserAction" type="int">
- <int value="0" label="System tray"/>
- <int value="1" label="Browser frame"/>
-</enum>
-
-<enum name="MultiProfileSwitchActiveUserAction" type="int">
- <int value="0" label="System tray"/>
- <int value="1" label="Keyboard accelerator"/>
-</enum>
-
-<enum name="MultiProfileTeleportWindowAction" type="int">
- <int value="0" label="Drag and drop"/>
- <int value="1" label="Caption context menu"/>
- <int value="2" label="Return by minimize"/>
- <int value="3" label="Return by launcher"/>
-</enum>
-
-<enum name="MultiProfileTeleportWindowType" type="int">
- <int value="0" label="Tabbed browser"/>
- <int value="1" label="Tabbed incognito browser"/>
- <int value="2" label="V1 app"/>
- <int value="3" label="V2 app"/>
- <int value="4" label="Panel"/>
- <int value="5" label="Popup"/>
- <int value="6" label="Unknown"/>
-</enum>
-
-<enum name="NavigationScheme" type="int">
- <int value="0" label="(Unknown)"/>
- <int value="1" label="http"/>
- <int value="2" label="https"/>
- <int value="3" label="file"/>
- <int value="4" label="ftp"/>
- <int value="5" label="data"/>
- <int value="6" label="javascript"/>
- <int value="7" label="about"/>
- <int value="8" label="chrome"/>
-</enum>
-
-<enum name="NetConnectivityProtocolStatus" type="int">
- <int value="0" label="SUCCESS"/>
- <int value="1" label="IP_STRING_PARSE_FAILED"/>
- <int value="2" label="SOCKET_CREATE_FAILED"/>
- <int value="3" label="RESOLVE_FAILED"/>
- <int value="4" label="CONNECT_FAILED"/>
- <int value="5" label="WRITE_FAILED"/>
- <int value="6" label="READ_TIMED_OUT"/>
- <int value="7" label="READ_FAILED"/>
- <int value="8" label="ZERO_LENGTH_ERROR"/>
- <int value="9" label="NO_CHECKSUM_ERROR"/>
- <int value="10" label="NO_KEY_ERROR"/>
- <int value="11" label="NO_PAYLOAD_SIZE_ERROR"/>
- <int value="12" label="NO_PAYLOAD_ERROR"/>
- <int value="13" label="INVALID_KEY_ERROR"/>
- <int value="14" label="TOO_SHORT_PAYLOAD"/>
- <int value="15" label="TOO_LONG_PAYLOAD"/>
- <int value="16" label="INVALID_CHECKSUM"/>
- <int value="17" label="PATTERN_CHANGED"/>
- <int value="18" label="INVALID_PACKET_NUMBER"/>
- <int value="19" label="TOO_MANY_PACKETS"/>
- <int value="20" label="STATUS_MAX"/>
-</enum>
-
-<enum name="NetConnectivityStatus" type="int">
- <int value="0" label="SUCCESS"/>
- <int value="1" label="IP_STRING_PARSE_FAILED"/>
- <int value="2" label="SOCKET_CREATE_FAILED"/>
- <int value="3" label="RESOLVE_FAILED"/>
- <int value="4" label="CONNECT_FAILED"/>
- <int value="5" label="WRITE_FAILED"/>
- <int value="6" label="READ_TIMED_OUT"/>
- <int value="7" label="READ_FAILED"/>
- <int value="8" label="READ_VERIFY_FAILED"/>
- <int value="9" label="STATUS_MAX"/>
-</enum>
-
-<enum name="NetErrorCodes" type="int">
- <int value="0" label="OK"/>
- <int value="1" label="IO_PENDING"/>
- <int value="2" label="FAILED"/>
- <int value="3" label="ABORTED"/>
- <int value="4" label="INVALID_ARGUMENT"/>
- <int value="5" label="INVALID_HANDLE"/>
- <int value="6" label="FILE_NOT_FOUND"/>
- <int value="7" label="TIMED_OUT"/>
- <int value="8" label="FILE_TOO_BIG"/>
- <int value="9" label="UNEXPECTED"/>
- <int value="10" label="ACCESS_DENIED"/>
- <int value="11" label="NOT_IMPLEMENTED"/>
- <int value="12" label="INSUFFICIENT_RESOURCES"/>
- <int value="13" label="OUT_OF_MEMORY"/>
- <int value="14" label="UPLOAD_FILE_CHANGED"/>
- <int value="15" label="SOCKET_NOT_CONNECTED"/>
- <int value="16" label="FILE_EXISTS"/>
- <int value="17" label="FILE_PATH_TOO_LONG"/>
- <int value="18" label="FILE_NO_SPACE"/>
- <int value="19" label="FILE_VIRUS_INFECTED"/>
- <int value="20" label="BLOCKED_BY_CLIENT"/>
- <int value="21" label="NETWORK_CHANGED"/>
- <int value="22" label="BLOCKED_BY_ADMINISTRATOR"/>
- <int value="100" label="CONNECTION_CLOSED"/>
- <int value="101" label="CONNECTION_RESET"/>
- <int value="102" label="CONNECTION_REFUSED"/>
- <int value="103" label="CONNECTION_ABORTED"/>
- <int value="104" label="CONNECTION_FAILED"/>
- <int value="105" label="NAME_NOT_RESOLVED"/>
- <int value="106" label="INTERNET_DISCONNECTED"/>
- <int value="107" label="SSL_PROTOCOL_ERROR"/>
- <int value="108" label="ADDRESS_INVALID"/>
- <int value="109" label="ADDRESS_UNREACHABLE"/>
- <int value="110" label="SSL_CLIENT_AUTH_CERT_NEEDED"/>
- <int value="111" label="TUNNEL_CONNECTION_FAILED"/>
- <int value="112" label="NO_SSL_VERSIONS_ENABLED"/>
- <int value="113" label="SSL_VERSION_OR_CIPHER_MISMATCH"/>
- <int value="114" label="SSL_RENEGOTIATION_REQUESTED"/>
- <int value="115" label="PROXY_AUTH_UNSUPPORTED"/>
- <int value="116" label="CERT_ERROR_IN_SSL_RENEGOTIATION"/>
- <int value="117" label="BAD_SSL_CLIENT_AUTH_CERT"/>
- <int value="118" label="CONNECTION_TIMED_OUT"/>
- <int value="119" label="HOST_RESOLVER_QUEUE_TOO_LARGE"/>
- <int value="120" label="SOCKS_CONNECTION_FAILED"/>
- <int value="121" label="SOCKS_CONNECTION_HOST_UNREACHABLE"/>
- <int value="122" label="NPN_NEGOTIATION_FAILED"/>
- <int value="123" label="SSL_NO_RENEGOTIATION"/>
- <int value="124" label="WINSOCK_UNEXPECTED_WRITTEN_BYTES"/>
- <int value="125" label="SSL_DECOMPRESSION_FAILURE_ALERT"/>
- <int value="126" label="SSL_BAD_RECORD_MAC_ALERT"/>
- <int value="127" label="PROXY_AUTH_REQUESTED"/>
- <int value="128" label="SSL_UNSAFE_NEGOTIATION"/>
- <int value="129" label="SSL_WEAK_SERVER_EPHEMERAL_DH_KEY"/>
- <int value="130" label="PROXY_CONNECTION_FAILED"/>
- <int value="131" label="MANDATORY_PROXY_CONFIGURATION_FAILED"/>
- <int value="132" label="ESET_ANTI_VIRUS_SSL_INTERCEPTION"/>
- <int value="133" label="PRECONNECT_MAX_SOCKET_LIMIT"/>
- <int value="134" label="SSL_CLIENT_AUTH_PRIVATE_KEY_ACCESS_DENIED"/>
- <int value="135" label="SSL_CLIENT_AUTH_CERT_NO_PRIVATE_KEY"/>
- <int value="136" label="PROXY_CERTIFICATE_INVALID"/>
- <int value="137" label="NAME_RESOLUTION_FAILED"/>
- <int value="138" label="NETWORK_ACCESS_DENIED"/>
- <int value="139" label="TEMPORARILY_THROTTLED"/>
- <int value="140" label="HTTPS_PROXY_TUNNEL_RESPONSE"/>
- <int value="141" label="SSL_CLIENT_AUTH_SIGNATURE_FAILED"/>
- <int value="142" label="MSG_TOO_BIG"/>
- <int value="143" label="KASPERSKY_ANTI_VIRUS_SSL_INTERCEPTION"/>
- <int value="144" label="LIMIT_VIOLATION"/>
- <int value="145" label="WS_PROTOCOL_ERROR"/>
- <int value="146" label="PROTOCOL_SWITCHED"/>
- <int value="147" label="ADDRESS_IN_USE"/>
- <int value="148" label="SSL_HANDSHAKE_NOT_COMPLETED"/>
- <int value="149" label="SSL_BAD_PEER_PUBLIC_KEY"/>
- <int value="150" label="SSL_PINNED_KEY_NOT_IN_CERT_CHAIN"/>
- <int value="151" label="CLIENT_AUTH_CERT_TYPE_UNSUPPORTED"/>
- <int value="152" label="ORIGIN_BOUND_CERT_GENERATION_TYPE_MISMATCH"/>
- <int value="200" label="CERT_COMMON_NAME_INVALID"/>
- <int value="201" label="CERT_DATE_INVALID"/>
- <int value="202" label="CERT_AUTHORITY_INVALID"/>
- <int value="203" label="CERT_CONTAINS_ERRORS"/>
- <int value="204" label="CERT_NO_REVOCATION_MECHANISM"/>
- <int value="205" label="CERT_UNABLE_TO_CHECK_REVOCATION"/>
- <int value="206" label="CERT_REVOKED"/>
- <int value="207" label="CERT_INVALID"/>
- <int value="208" label="CERT_WEAK_SIGNATURE_ALGORITHM"/>
- <int value="209" label="CERT_NOT_IN_DNS"/>
- <int value="210" label="CERT_NON_UNIQUE_NAME"/>
- <int value="211" label="CERT_WEAK_KEY"/>
- <int value="300" label="INVALID_URL"/>
- <int value="301" label="DISALLOWED_URL_SCHEME"/>
- <int value="302" label="UNKNOWN_URL_SCHEME"/>
- <int value="310" label="TOO_MANY_REDIRECTS"/>
- <int value="311" label="UNSAFE_REDIRECT"/>
- <int value="312" label="UNSAFE_PORT"/>
- <int value="320" label="INVALID_RESPONSE"/>
- <int value="321" label="INVALID_CHUNKED_ENCODING"/>
- <int value="322" label="METHOD_NOT_SUPPORTED"/>
- <int value="323" label="UNEXPECTED_PROXY_AUTH"/>
- <int value="324" label="EMPTY_RESPONSE"/>
- <int value="325" label="RESPONSE_HEADERS_TOO_BIG"/>
- <int value="326" label="PAC_STATUS_NOT_OK"/>
- <int value="327" label="PAC_SCRIPT_FAILED"/>
- <int value="328" label="REQUEST_RANGE_NOT_SATISFIABLE"/>
- <int value="329" label="MALFORMED_IDENTITY"/>
- <int value="330" label="CONTENT_DECODING_FAILED"/>
- <int value="331" label="NETWORK_IO_SUSPENDED"/>
- <int value="332" label="SYN_REPLY_NOT_RECEIVED"/>
- <int value="333" label="ENCODING_CONVERSION_FAILED"/>
- <int value="334" label="UNRECOGNIZED_FTP_DIRECTORY_LISTING_FORMAT"/>
- <int value="335" label="INVALID_SPDY_STREAM"/>
- <int value="336" label="NO_SUPPORTED_PROXIES"/>
- <int value="337" label="SPDY_PROTOCOL_ERROR"/>
- <int value="338" label="INVALID_AUTH_CREDENTIALS"/>
- <int value="339" label="UNSUPPORTED_AUTH_SCHEME"/>
- <int value="340" label="ENCODING_DETECTION_FAILED"/>
- <int value="341" label="MISSING_AUTH_CREDENTIALS"/>
- <int value="342" label="UNEXPECTED_SECURITY_LIBRARY_STATUS"/>
- <int value="343" label="MISCONFIGURED_AUTH_ENVIRONMENT"/>
- <int value="344" label="UNDOCUMENTED_SECURITY_LIBRARY_STATUS"/>
- <int value="345" label="RESPONSE_BODY_TOO_BIG_TO_DRAIN"/>
- <int value="346" label="RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH"/>
- <int value="347" label="INCOMPLETE_SPDY_HEADERS"/>
- <int value="348" label="PAC_NOT_IN_DHCP"/>
- <int value="349" label="RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION"/>
- <int value="350" label="RESPONSE_HEADERS_MULTIPLE_LOCATION"/>
- <int value="351" label="SPDY_SERVER_REFUSED_STREAM"/>
- <int value="352" label="SPDY_PING_FAILED"/>
- <int value="353" label="PIPELINE_EVICTION"/>
- <int value="354" label="CONTENT_LENGTH_MISMATCH"/>
- <int value="355" label="INCOMPLETE_CHUNKED_ENCODING"/>
- <int value="356" label="QUIC_PROTOCOL_ERROR"/>
- <int value="357" label="RESPONSE_HEADERS_TRUNCATED"/>
- <int value="400" label="CACHE_MISS"/>
- <int value="401" label="CACHE_READ_FAILURE"/>
- <int value="402" label="CACHE_WRITE_FAILURE"/>
- <int value="403" label="CACHE_OPERATION_NOT_SUPPORTED"/>
- <int value="404" label="CACHE_OPEN_FAILURE"/>
- <int value="405" label="CACHE_CREATE_FAILURE"/>
- <int value="406" label="CACHE_RACE"/>
- <int value="407" label="CACHE_CACHE_CHECKSUM_READ_FAILURE"/>
- <int value="408" label="CACHE_CACHE_CHECKSUM_MISMATCH"/>
- <int value="501" label="INSECURE_RESPONSE"/>
- <int value="502" label="NO_PRIVATE_KEY_FOR_CERT"/>
- <int value="503" label="ADD_USER_CERT_FAILED"/>
- <int value="601" label="FTP_FAILED"/>
- <int value="602" label="FTP_SERVICE_UNAVAILABLE"/>
- <int value="603" label="FTP_TRANSFER_ABORTED"/>
- <int value="604" label="FTP_FILE_BUSY"/>
- <int value="605" label="FTP_SYNTAX_ERROR"/>
- <int value="606" label="FTP_COMMAND_NOT_SUPPORTED"/>
- <int value="607" label="FTP_BAD_COMMAND_SEQUENCE"/>
- <int value="701" label="PKCS12_IMPORT_BAD_PASSWORD"/>
- <int value="702" label="PKCS12_IMPORT_FAILED"/>
- <int value="703" label="IMPORT_CA_CERT_NOT_CA"/>
- <int value="704" label="IMPORT_CERT_ALREADY_EXISTS"/>
- <int value="705" label="IMPORT_CA_CERT_FAILED"/>
- <int value="706" label="IMPORT_SERVER_CERT_FAILED"/>
- <int value="707" label="PKCS12_IMPORT_INVALID_MAC"/>
- <int value="708" label="PKCS12_IMPORT_INVALID_FILE"/>
- <int value="709" label="PKCS12_IMPORT_UNSUPPORTED"/>
- <int value="710" label="KEY_GENERATION_FAILED"/>
- <int value="711" label="ORIGIN_BOUND_CERT_GENERATION_FAILED"/>
- <int value="712" label="PRIVATE_KEY_EXPORT_FAILED"/>
- <int value="800" label="DNS_MALFORMED_RESPONSE"/>
- <int value="801" label="DNS_SERVER_REQUIRES_TCP"/>
- <int value="802" label="DNS_SERVER_FAILED"/>
- <int value="803" label="DNS_TIMED_OUT"/>
- <int value="804" label="DNS_CACHE_MISS"/>
- <int value="805" label="DNS_SEARCH_EMPTY"/>
- <int value="806" label="DNS_SORT_ERROR"/>
-</enum>
-
-<enum name="NetPreconnectUtilization" type="int">
- <int value="0" label="non-speculative, never connected"/>
- <int value="1" label="non-speculative, never used"/>
- <int value="2" label="non-speculative and used"/>
- <int value="3" label="omnibox never connected"/>
- <int value="4" label="omnibox never used"/>
- <int value="5" label="omnibox and used"/>
- <int value="6" label="subresource never connected"/>
- <int value="7" label="subresource never used"/>
- <int value="8" label="subresource and used"/>
-</enum>
-
-<enum name="Network3GGobiError" type="int">
- <summary>
- These error indexes are produced by QCErrorToMetricIndex() in
- gobi-cromo-plugin.
- </summary>
- <int value="0" label="NONE"/>
- <int value="1" label="QMI_HARDWARE_RESTRICTED"/>
-</enum>
-
-<enum name="NetworkAuthModeType" type="int">
- <int value="0" label="UNKNOWN"/>
- <int value="1" label="EAP-AKA"/>
- <int value="2" label="EAP-FAST"/>
- <int value="3" label="EAP-GPSK"/>
- <int value="4" label="EAP-GTC"/>
- <int value="5" label="EAP-IKEV2"/>
- <int value="6" label="EAP-LEAP"/>
- <int value="7" label="EAP-MD5"/>
- <int value="8" label="EAP-MSCHAPV2"/>
- <int value="9" label="EAP-OTP"/>
- <int value="10" label="EAP-PAX"/>
- <int value="11" label="EAP-PEAP"/>
- <int value="12" label="EAP-PSK"/>
- <int value="13" label="EAP-SAKE"/>
- <int value="14" label="EAP-SIM"/>
- <int value="15" label="EAP-TLS"/>
- <int value="16" label="EAP-TNC"/>
- <int value="17" label="EAP-TTLS"/>
-</enum>
-
-<enum name="NetworkCellular3GPPRegistrationDelayedDrop" type="int">
- <int value="0" label="Delayed drop posted">
- A signal loss in the cellular service was detected and a delayed connection
- drop request was posted. This request causes the cellular connection to be
- dropped if it is not cancelled within the delay provided.
- </int>
- <int value="1" label="Delayed drop canceled">
- Signal strength returned to normal soon after a delayed drop request was
- made, causing the request to be canceled. This indicates a flaky network.
- </int>
-</enum>
-
-<enum name="NetworkCellularOutOfCreditsReason" type="int">
- <int value="0" label="Connect-Disconnect Loop"/>
- <int value="1" label="TX-Queue Congestion"/>
- <int value="2" label="Elongated Time Wait"/>
-</enum>
-
-<enum name="NetworkCellularTechnology" type="int">
- <int value="0" label="1XRTT"/>
- <int value="1" label="EDGE"/>
- <int value="2" label="EVDO"/>
- <int value="3" label="GPRS"/>
- <int value="4" label="GSM"/>
- <int value="5" label="HSPA"/>
- <int value="6" label="HSPA_PLUS"/>
- <int value="7" label="LTE"/>
- <int value="8" label="UMTS"/>
- <int value="9" label="Unknown"/>
-</enum>
-
-<enum name="NetworkCellularUsageRequestStatus" type="int">
- <summary>
- Status code that we received in response to a cellular usage API request.
- </summary>
- <int value="0" label="Failed">
- This value is distinct from the others in that it indicates that we were
- unable to issue a request or that we received no reply. The other values
- represent the status code contained in a reply.
- </int>
- <int value="1" label="Ok"/>
- <int value="2" label="Error"/>
- <int value="3" label="Malformed Request"/>
- <int value="4" label="Internal Error"/>
- <int value="5" label="Service Unavailable"/>
- <int value="6" label="Request Refused"/>
- <int value="7" label="Unknown Device"/>
-</enum>
-
-<enum name="NetworkChannelType" type="int">
- <int value="0" label="UNDEF"/>
- <int value="1" label="2412"/>
- <int value="2" label="2417"/>
- <int value="3" label="2422"/>
- <int value="4" label="2427"/>
- <int value="5" label="2432"/>
- <int value="6" label="2437"/>
- <int value="7" label="2442"/>
- <int value="8" label="2447"/>
- <int value="9" label="2452"/>
- <int value="10" label="2457"/>
- <int value="11" label="2462"/>
- <int value="12" label="2467"/>
- <int value="13" label="2472"/>
- <int value="14" label="2484"/>
- <int value="15" label="5180"/>
- <int value="16" label="5200"/>
- <int value="17" label="5220"/>
- <int value="18" label="5240"/>
- <int value="19" label="5260"/>
- <int value="20" label="5280"/>
- <int value="21" label="5300"/>
- <int value="22" label="5320"/>
- <int value="23" label="5500"/>
- <int value="24" label="5520"/>
- <int value="25" label="5540"/>
- <int value="26" label="5560"/>
- <int value="27" label="5580"/>
- <int value="28" label="5600"/>
- <int value="29" label="5620"/>
- <int value="30" label="5640"/>
- <int value="31" label="5660"/>
- <int value="32" label="5680"/>
- <int value="33" label="5700"/>
- <int value="34" label="5745"/>
- <int value="35" label="5765"/>
- <int value="36" label="5785"/>
- <int value="37" label="5805"/>
- <int value="38" label="5825"/>
- <int value="39" label="5170"/>
- <int value="40" label="5190"/>
- <int value="41" label="5210"/>
- <int value="42" label="5230"/>
-</enum>
-
-<enum name="NetworkCorruptedProfile" type="int">
- <int value="0" label="Corrupted Profile"/>
-</enum>
-
-<enum name="NetworkDHCPOptionFailure" type="int">
- <int value="0" label="DHCP Option Failure"/>
-</enum>
-
-<enum name="NetworkDisconnectType" type="int">
- <int value="0" label="System Disconnect"/>
- <int value="1" label="User Disconnect"/>
-</enum>
-
-<enum name="NetworkLocationRequestEvent" type="int">
- <int value="0" label="REQUEST_START"/>
- <int value="1" label="REQUEST_CANCEL"/>
- <int value="2" label="RESPONSE_SUCCESS"/>
- <int value="3" label="RESPONSE_NOT_OK"/>
- <int value="4" label="RESPONSE_EMPTY"/>
- <int value="5" label="RESPONSE_MALFORMED"/>
- <int value="6" label="RESPONSE_INVALID_FIX"/>
-</enum>
-
-<enum name="NetworkPhyModeType" type="int">
- <int value="0" label="UNDEF"/>
- <int value="1" label="802.11a"/>
- <int value="2" label="802.11b"/>
- <int value="3" label="802.11g"/>
- <int value="4" label="802.11n"/>
- <int value="5" label="PSB 10MHz-wide"/>
- <int value="6" label="PSB 5MHz-wide"/>
-</enum>
-
-<enum name="NetworkPortalResult" type="int">
- <summary>
- The portal result types come from PortalResult in shill/metrics.h
- </summary>
- <int value="0" label="Success"/>
- <int value="1" label="DNS Failure"/>
- <int value="2" label="DNS Timeout"/>
- <int value="3" label="Connection Failure"/>
- <int value="4" label="Connection Timeout"/>
- <int value="5" label="HTTP Failure"/>
- <int value="6" label="HTTP Timeout"/>
- <int value="7" label="Content Failure"/>
- <int value="8" label="Content Timeout"/>
- <int value="9" label="Unknown"/>
-</enum>
-
-<enum name="NetworkSecurityType" type="int">
- <summary>
- The security types come from the connman_service_security enum in
- flimflam/include/service.h
- </summary>
- <int value="0" label="UNKNOWN"/>
- <int value="1" label="NONE"/>
- <int value="2" label="WEP"/>
- <int value="3" label="WPA"/>
- <int value="4" label="802.11i/RSN"/>
- <int value="5" label="802.1x"/>
- <int value="6" label="PSK"/>
-</enum>
-
-<enum name="NetworkServiceError" type="int">
- <summary>
- The error types come from the connman_service_error enum in
- flimflam/include/service.h
- </summary>
- <int value="0" label="UNKNOWN"/>
- <int value="1" label="OUT_OF_RANGE"/>
- <int value="2" label="PIN_MISSING"/>
- <int value="3" label="DHCP_FAILED"/>
- <int value="4" label="CONNECT_FAILED"/>
- <int value="5" label="BAD_PASSPHRASE"/>
- <int value="6" label="BAD_WEPKEY"/>
- <int value="7" label="ACTIVATION_FAILED"/>
- <int value="8" label="NEED_EVDO"/>
- <int value="9" label="NEED_HOME_NETWORK"/>
- <int value="10" label="OTASP_FAILED"/>
- <int value="11" label="AAA_FAILED"/>
- <int value="12" label="INTERNAL"/>
- <int value="13" label="DNS_LOOKUP_FAILED"/>
- <int value="14" label="HTTP_GET_FAILED"/>
-</enum>
-
-<enum name="NewTabPageActionAndroid" type="int">
- <int value="0" label="Searched using the omnibox"/>
- <int value="1" label="Navigated to Google search homepage using the omnibox"/>
- <int value="2" label="Navigated to any other page using the omnibox"/>
- <int value="3" label="Opened a most visited page"/>
- <int value="4" label="Opened a recently closed tab"/>
- <int value="5" label="Opened a bookmark"/>
- <int value="6" label="Opened a foreign session (from other devices section)"/>
-</enum>
-
-<enum name="NewTabPageBookmarkActionAndroid" type="int">
- <summary>
- These values are defined in PartnerBookmarkAction enum in
- chrome/browser/ui/webui/ntp/android/bookmarks_handler.cc.
- </summary>
- <int value="0" label="Deleted partner bookmark"/>
- <int value="1" label="Deleted root partner folder"/>
- <int value="2" label="Renamed partner bookmark"/>
- <int value="3" label="Renamed root partner folder"/>
-</enum>
-
-<enum name="NewTabPageMobilePromo" type="int">
- <summary>
- These values are defined inside the PromoImpressionBuckets enum in
- chrome/browser/ui/webui/ntp/android/promo_handler.cc
- </summary>
- <int value="0" label="Shown from most visited page"/>
- <int value="1" label="Shown from open tabs page"/>
- <int value="2" label="Shown from sync promo page"/>
- <int value="3" label="User pressed 'Try Chrome'"/>
- <int value="4" label="User dismissed the promo"/>
-</enum>
-
-<enum name="NotificationActionType" type="int">
- <int value="0" label="Unknown"/>
- <int value="1" label="Notification added"/>
- <int value="2" label="Notificaiton updated"/>
- <int value="3" label="Notification clicked"/>
- <int value="4" label="Notification button clicked"/>
- <int value="5" label="Notification displayed"/>
- <int value="6" label="Notification closed by user"/>
- <int value="7" label="Notification closed by system"/>
-</enum>
-
-<enum name="NtpFollowAction" type="int">
- <int value="0" label="PAGE_TRANSITION_LINK"/>
- <int value="1" label="PAGE_TRANSITION_TYPED"/>
- <int value="2" label="PAGE_TRANSITION_AUTO_BOOKMARK"/>
- <int value="3" label="PAGE_TRANSITION_AUTO_SUBFRAME"/>
- <int value="4" label="PAGE_TRANSITION_MANUAL_SUBFRAME"/>
- <int value="5" label="PAGE_TRANSITION_GENERATED"/>
- <int value="6" label="PAGE_TRANSITION_START_PAGE"/>
- <int value="7" label="PAGE_TRANSITION_FORM_SUBMIT"/>
- <int value="8" label="PAGE_TRANSITION_RELOAD"/>
- <int value="9" label="PAGE_TRANSITION_KEYWORD"/>
- <int value="10" label="PAGE_TRANSITION_KEYWORD_GENERATED"/>
- <int value="11" label="Clicked on a tile."/>
- <int value="12" label="Clicked to other NTP pane."/>
- <int value="13" label="Other action"/>
-</enum>
-
-<enum name="NtpOtherSessionsType" type="int">
- <int value="0" label="Menu initialized"/>
- <int value="1" label="Menu shown"/>
- <int value="2" label="Link clicked"/>
- <int value="3" label="Link context menu shown"/>
- <int value="4" label="Device context menu shown"/>
- <int value="5" label="Unused/previous device context menu shown"/>
- <int value="6" label="Collapse Session"/>
- <int value="7" label="Expand Session"/>
- <int value="8" label="Open All"/>
-</enum>
-
-<enum name="NtpPaneType" type="int">
- <int value="1" label="MostVisited"/>
- <int value="2" label="Apps"/>
- <int value="3" label="Bookmarks"/>
- <int value="4" label="Suggestions"/>
-</enum>
-
-<enum name="NtpPromoAction" type="int">
- <int value="0" label="NTP Promo viewed"/>
- <int value="1" label="NTP Promo closed"/>
- <int value="2" label="NTP Promo link clicked"/>
-</enum>
-
-<enum name="NtpSuggestionsType" type="int">
- <int value="0" label="Client suggestion"/>
- <int value="1" label="Server suggestion"/>
-</enum>
-
-<enum name="NtpTileExperimentActions" type="int">
- <summary>
- The types of actions performed by the Most Visited Tile Placement
- experiment, used to identify the cases where the experiment could not
- operate as expected, and the reason for it.
- </summary>
- <int value="0" label="Removed URL that was already open in browser"/>
- <int value="1" label="Didn't remove URL, too few suggestions in MV"/>
- <int value="2" label="Too few URLs, didn't flip tiles 1 and 8"/>
- <int value="3" label="Too few URLs, didn't flip tiles 1 and 4"/>
-</enum>
-
-<enum name="OfflineStatus" type="int">
- <int value="0" label="Fresh data load from Cache"/>
- <int value="1" label="Successful network request (validation or fetch)."/>
- <int value="2" label="Failed network request (non-offline error)."/>
- <int value="3" label="Server offline and stale data available."/>
- <int value="4" label="Server offline and stale data not available."/>
-</enum>
-
-<enum name="OmniboxAggressiveHistoryURLProviderFieldTrialBeacon" type="int">
- <int value="0" label="disabled by flags"/>
- <int value="1" label="enabled by flags"/>
- <int value="2" label="auto, not in trial"/>
- <int value="3" label="auto, disabled in trial"/>
- <int value="4" label="auto, enabled in trial"/>
-</enum>
-
-<enum name="OmniboxEnteredKeywordMode" type="int">
- <int value="0" label="via tab"/>
- <int value="1" label="via space at end"/>
- <int value="2" label="via space in middle"/>
-</enum>
-
-<enum name="OmniboxSearchEngine" type="int">
- <int value="0" label="Unknown"/>
- <int value="1" label="Google"/>
- <int value="2" label="Yahoo!"/>
- <int value="3" label="Bing"/>
- <int value="4" label="Ask"/>
- <int value="5" label="Yahoo! Quebec"/>
- <int value="6" label="OK.hu"/>
- <int value="7" label="Bing French and Arabic"/>
- <int value="11" label="Yamli"/>
- <int value="12" label="Araby"/>
- <int value="13" label="Maktoob"/>
- <int value="14" label="Masrawy"/>
- <int value="15" label="Yandex"/>
- <int value="16" label="Rambler"/>
- <int value="17" label="TUT.BY"/>
- <int value="18" label="hispavista"/>
- <int value="19" label="Jabse"/>
- <int value="20" label="NUR.KZ"/>
- <int value="21" label="Baidu"/>
- <int value="22" label="search.ch"/>
- <int value="23" label="goo"/>
- <int value="24" label="Pogodak!"/>
- <int value="25" label="Seznam"/>
- <int value="26" label="Centrum"/>
- <int value="27" label="Atlas"/>
- <int value="28" label="Jubii"/>
- <int value="29" label="Eniro"/>
- <int value="30" label="NetSprint"/>
- <int value="32" label="diri"/>
- <int value="33" label="Custom"/>
- <int value="35" label="AOL"/>
- <int value="36" label="Conduit"/>
- <int value="37" label="Rediff"/>
- <int value="38" label="guruji"/>
- <int value="40" label="GO.com"/>
- <int value="41" label="Rednano"/>
- <int value="44" label="NETI"/>
- <int value="45" label="DELFI"/>
- <int value="46" label="Fonecta 02.fi"/>
- <int value="50" label="AVG"/>
- <int value="51" label="search.ch"/>
- <int value="54" label="in.gr"/>
- <int value="55" label="Walla!"/>
- <int value="59" label="leit.is"/>
- <int value="62" label="Virgilio"/>
- <int value="63" label="Libero"/>
- <int value="67" label="Naver"/>
- <int value="68" label="Daum"/>
- <int value="69" label="Nate"/>
- <int value="71" label="LATNE"/>
- <int value="72" label="ABC S.k"/>
- <int value="73" label="Kvasir"/>
- <int value="75" label="Onet.pl"/>
- <int value="76" label="Wirtualna Polska"/>
- <int value="77" label="SAPO"/>
- <int value="82" label="UOL Busca"/>
- <int value="83" label="@MAIL.RU"/>
- <int value="85" label="Zoznam"/>
- <int value="87" label="Najdi.si"/>
- <int value="89" label="AltaVista"/>
- <int value="90" label="Terra"/>
- <int value="99" label="Spray"/>
- <int value="100" label="Sanook!"/>
- <int value="101" label="MYNET"/>
- <int value="102" label="searchnu.com"/>
- <int value="103" label="babylon.com"/>
- <int value="104" label="delta-search.com"/>
- <int value="105" label="iminent.com"/>
- <int value="106" label="hao123.com"/>
- <int value="107" label="sweetim.com"/>
- <int value="108" label="snap.do"/>
- <int value="109" label="snapdo.com"/>
- <int value="110" label="softonic.com"/>
- <int value="111" label="searchfunmoods.com"/>
- <int value="112" label="incredibar.com"/>
- <int value="113" label="sweetpacks.com"/>
- <int value="114" label="imesh.net"/>
-</enum>
-
-<enum name="OmniboxSearchEngineType" type="int">
- <int value="0" label="Unknown"/>
- <int value="1" label="AOL"/>
- <int value="2" label="Ask"/>
- <int value="3" label="Atlas"/>
- <int value="4" label="AVG"/>
- <int value="5" label="Baidu"/>
- <int value="6" label="Babylon"/>
- <int value="7" label="Bing"/>
- <int value="8" label="Conduit"/>
- <int value="9" label="Daum"/>
- <int value="10" label="DELFI"/>
- <int value="11" label="Delta"/>
- <int value="12" label="Funmoods"/>
- <int value="13" label="goo"/>
- <int value="14" label="Google"/>
- <int value="15" label="iminent.com"/>
- <int value="16" label="IMesh"/>
- <int value="17" label="in.gr"/>
- <int value="18" label="incredibar.com"/>
- <int value="19" label="Kvasir"/>
- <int value="20" label="Libero"/>
- <int value="21" label="@MAIL.RU"/>
- <int value="22" label="Najdi.si"/>
- <int value="23" label="Nate"/>
- <int value="24" label="Naver"/>
- <int value="25" label="NETI"/>
- <int value="26" label="Nigma"/>
- <int value="27" label="OK.hu"/>
- <int value="28" label="Onet.pl"/>
- <int value="29" label="Rambler"/>
- <int value="30" label="SAPO"/>
- <int value="31" label="searchnu"/>
- <int value="32" label="search-results.com"/>
- <int value="33" label="Seznam"/>
- <int value="34" label="snap.do"/>
- <int value="35" label="softonic.com"/>
- <int value="36" label="Sogou"/>
- <int value="37" label="Soso"/>
- <int value="38" label="sweetim.com/sweetpacks.com"/>
- <int value="39" label="Terra"/>
- <int value="40" label="TUT.BY"/>
- <int value="41" label="Vinden.nl"/>
- <int value="42" label="Virgilio"/>
- <int value="43" label="Walla!"/>
- <int value="44" label="Wirtualna Polska"/>
- <int value="45" label="Yahoo!"/>
- <int value="46" label="Yandex"/>
- <int value="47" label="Zoznam"/>
-</enum>
-
-<enum name="OmniboxSuggestRequests" type="int">
- <int value="1" label="requests sent"/>
- <int value="2" label="requests invalidated"/>
- <int value="3" label="(non-invalidated) replies received"/>
-</enum>
-
-<enum name="OmniboxZeroSuggestRequests" type="int">
- <int value="1" label="requests sent"/>
- <int value="2" label="requests invalidated"/>
- <int value="3" label="(non-invalidated) replies received"/>
-</enum>
-
-<enum name="OSAgnosticErrno" type="int">
- <summary>Errno values with the same meanings on Mac/Win/Linux.</summary>
- <int value="0" label="0">No error</int>
- <int value="1" label="EPERM">Operation not permitted</int>
- <int value="2" label="ENOENT">No such file or directory</int>
- <int value="3" label="ESRCH">No such process</int>
- <int value="4" label="EINTR">Interrupted function call</int>
- <int value="5" label="EIO">Input/output error</int>
- <int value="6" label="ENXIO">No such device or address</int>
- <int value="7" label="E2BIG">Arg list too long</int>
- <int value="8" label="ENOEXEC">Exec format error</int>
- <int value="9" label="EBADF">Bad file descriptor</int>
- <int value="10" label="ECHILD">No child processes</int>
- <int value="11" label="EDEADLK">Resource deadlock avoided</int>
- <int value="12" label="ENOMEM">Cannot allocate memory</int>
- <int value="13" label="EACCES">Permission denied</int>
- <int value="14" label="EFAULT">Bad address</int>
- <int value="15" label="ENOTBLK">Not a block device</int>
- <int value="16" label="EBUSY">Resource busy</int>
- <int value="17" label="EEXIST">File exists</int>
- <int value="18" label="EXDEV">Improper link</int>
- <int value="19" label="ENODEV">Operation not supported by device</int>
- <int value="20" label="ENOTDIR">Not a directory</int>
- <int value="21" label="EISDIR">Is a directory</int>
- <int value="22" label="EINVAL">Invalid argument</int>
- <int value="23" label="ENFILE">Too many open files in system</int>
- <int value="24" label="EMFILE">Too many open files</int>
- <int value="25" label="ENOTTY">Inappropriate ioctl for device</int>
- <int value="26" label="ETXTBSY">Text file busy</int>
- <int value="27" label="EFBIG">File too large</int>
- <int value="28" label="ENOSPC">Device out of space</int>
- <int value="29" label="ESPIPE">Illegal seek</int>
- <int value="30" label="EROFS">Read-only file system</int>
- <int value="31" label="EMLINK">Too many links</int>
- <int value="32" label="EPIPE">Broken pipe</int>
- <int value="33" label="EDOM">Numerical argument out of domain</int>
- <int value="34" label="ERANGE">Numerical result out of range</int>
-</enum>
-
-<enum name="OSXExceptionHandlerEvents" type="int">
- <int value="0" label="EXCEPTION_ACCESSIBILITY">
- Object does not support accessibility attributes
- </int>
- <int value="1" label="EXCEPTION_MENU_ITEM_BOUNDS_CHECK">
- Forced crash due to menu item bounds checking failure
- </int>
- <int value="2" label="EXCEPTION_VIEW_NOT_IN_WINDOW">
- Forced crash due to view not in a window requiring a window
- </int>
- <int value="3" label="EXCEPTION_NSURL_INIT_NIL">
- Whitelisted exception for bug 85463. Suspect ImageKit conversions for media
- browser in open or save panel.
- </int>
- <int value="4" label="EXCEPTION_NSDATADETECTOR_NIL_STRING">
- Whitelisted exception for bug 316759. Suspect background address detection,
- field unknown.
- </int>
-</enum>
-
-<enum name="OtherPossibleUsernamesUsage" type="int">
- <int value="0" label="Nothing to Autofill"/>
- <int value="1" label="No other possible usernames"/>
- <int value="2" label="Other possible usernames present, but none were shown"/>
- <int value="3" label="Other possible username was shown, but not selected"/>
- <int value="4" label="Other possible username was selected"/>
-</enum>
-
-<enum name="OverscrollMode" type="int">
- <summary>Direction of the overscroll gesture.</summary>
- <int value="1" label="North">Scrolled from bottom towards top</int>
- <int value="2" label="South">Scrolled from top towards the bottom</int>
- <int value="3" label="West">Scrolled from right towards left</int>
- <int value="4" label="East">Scrolled from left towards right</int>
-</enum>
-
-<enum name="P2PLookupResult" type="int">
- <int value="0" label="Found"/>
- <int value="1" label="Not Found"/>
- <int value="2" label="Vanished"/>
- <int value="3" label="Canceled"/>
- <int value="4" label="Filtered"/>
-</enum>
-
-<enum name="P2PServerResult" type="int">
- <int value="0" label="Response Sent"/>
- <int value="1" label="Response Interrupted"/>
- <int value="2" label="Malformed"/>
- <int value="3" label="Not Found"/>
- <int value="4" label="Index"/>
-</enum>
-
-<enum name="PagespeedHeaderServerType" type="int">
- <int value="0" label="Total responses"/>
- <int value="1" label="mod_pagespeed server"/>
- <int value="2" label="ngx_pagespeed server"/>
- <int value="3" label="PageSpeed Service server"/>
- <int value="4" label="Unknown server type"/>
-</enum>
-
-<enum name="PagespeedVersion" type="int">
- <summary>
- The version of PageSpeed. Values up to 1.6.29.x are in use as of 2013-10-01
- while later values may adjust 'a' and/or 'b' arbitrarily.
- </summary>
- <int value="1" label="Unknown"/>
- <int value="2" label="0.9.10.0"/>
- <int value="3" label="0.9.10.x"/>
- <int value="4" label="0.9.11.0"/>
- <int value="5" label="0.9.11.x"/>
- <int value="6" label="0.9.12.0"/>
- <int value="7" label="0.9.12.x"/>
- <int value="8" label="0.9.13.0"/>
- <int value="9" label="0.9.13.x"/>
- <int value="10" label="0.9.14.0"/>
- <int value="11" label="0.9.14.x"/>
- <int value="12" label="0.9.15.0"/>
- <int value="13" label="0.9.15.x"/>
- <int value="14" label="0.9.16.0"/>
- <int value="15" label="0.9.16.x"/>
- <int value="16" label="0.9.17.0"/>
- <int value="17" label="0.9.17.x"/>
- <int value="18" label="0.9.18.0"/>
- <int value="19" label="0.9.18.x"/>
- <int value="20" label="0.10.19.0"/>
- <int value="21" label="0.10.19.x"/>
- <int value="22" label="0.10.20.0"/>
- <int value="23" label="0.10.20.x"/>
- <int value="24" label="0.10.21.0"/>
- <int value="25" label="0.10.21.x"/>
- <int value="26" label="0.10.22.0"/>
- <int value="27" label="0.10.22.x"/>
- <int value="28" label="1.1.23.0"/>
- <int value="29" label="1.1.23.x"/>
- <int value="30" label="1.2.24.0"/>
- <int value="31" label="1.2.24.x"/>
- <int value="32" label="1.3.25.0"/>
- <int value="33" label="1.3.25.x"/>
- <int value="34" label="1.4.26.0"/>
- <int value="35" label="1.4.26.x"/>
- <int value="36" label="1.5.27.0"/>
- <int value="37" label="1.5.27.x"/>
- <int value="38" label="1.5.28.0"/>
- <int value="39" label="1.5.28.x"/>
- <int value="40" label="1.6.29.0"/>
- <int value="41" label="1.6.29.x"/>
- <int value="42" label="a.b.30.0"/>
- <int value="43" label="a.b.30.x"/>
- <int value="44" label="a.b.31.0"/>
- <int value="45" label="a.b.31.x"/>
- <int value="46" label="a.b.32.0"/>
- <int value="47" label="a.b.32.x"/>
- <int value="48" label="a.b.33.0"/>
- <int value="49" label="a.b.33.x"/>
- <int value="50" label="a.b.34.0"/>
- <int value="51" label="a.b.34.x"/>
- <int value="52" label="a.b.35.0"/>
- <int value="53" label="a.b.35.x"/>
- <int value="54" label="a.b.36.0"/>
- <int value="55" label="a.b.36.x"/>
- <int value="56" label="a.b.37.0"/>
- <int value="57" label="a.b.37.x"/>
- <int value="58" label="a.b.38.0"/>
- <int value="59" label="a.b.38.x"/>
- <int value="60" label="a.b.39.0"/>
- <int value="61" label="a.b.39.x"/>
- <int value="62" label="a.b.40.0"/>
- <int value="63" label="a.b.40.x"/>
- <int value="64" label="a.b.41.0"/>
- <int value="65" label="a.b.41.x"/>
- <int value="66" label="a.b.42.0"/>
- <int value="67" label="a.b.42.x"/>
- <int value="68" label="a.b.43.0"/>
- <int value="69" label="a.b.43.x"/>
- <int value="70" label="a.b.44.0"/>
- <int value="71" label="a.b.44.x"/>
- <int value="72" label="a.b.45.0"/>
- <int value="73" label="a.b.45.x"/>
- <int value="74" label="a.b.46.0"/>
- <int value="75" label="a.b.46.x"/>
- <int value="76" label="a.b.47.0"/>
- <int value="77" label="a.b.47.x"/>
- <int value="78" label="a.b.48.0"/>
- <int value="79" label="a.b.48.x"/>
- <int value="80" label="a.b.49.0"/>
- <int value="81" label="a.b.49.x"/>
- <int value="82" label="a.b.50.0"/>
- <int value="83" label="a.b.50.x"/>
- <int value="84" label="a.b.51.0"/>
- <int value="85" label="a.b.51.x"/>
- <int value="86" label="a.b.52.0"/>
- <int value="87" label="a.b.52.x"/>
- <int value="88" label="a.b.53.0"/>
- <int value="89" label="a.b.53.x"/>
- <int value="90" label="a.b.54.0"/>
- <int value="91" label="a.b.54.x"/>
- <int value="92" label="a.b.55.0"/>
- <int value="93" label="a.b.55.x"/>
- <int value="94" label="a.b.56.0"/>
- <int value="95" label="a.b.56.x"/>
- <int value="96" label="a.b.57.0"/>
- <int value="97" label="a.b.57.x"/>
- <int value="98" label="a.b.58.0"/>
- <int value="99" label="a.b.58.x"/>
-</enum>
-
-<enum name="ParsedCookieStatus" type="int">
- <obsolete>
- Deprecated as of 9/2013. Experiment to measure control characters in cookies
- is finished.
- </obsolete>
- <int value="0" label="All cookie values valid and without control chars"/>
- <int value="1" label="Cookie contains control chars"/>
- <int value="2" label="Cookie is invalid"/>
- <int value="3" label="Cookie contains both control chars and is invalid"/>
-</enum>
-
-<enum name="PasswordManagerActionsTaken" type="int">
- <obsolete>
- Deprecated as of Chrome 32. See PasswordManagerActionsTakenWithPsl
- </obsolete>
- <summary>
- The value is a combination of three different options - what did the
- password manager do, what did the user do, and was the form submitted (and
- submitted successfully or not). The meaning of each value can be determined
- from the values in chrome/browser/password_manager/password_form_manager.h
- </summary>
- <int value="0"
- label="manager did nothing / user did nothing / form not submitted"/>
- <int value="1"
- label="manager did nothing / user chose a value / form not submitted"/>
- <int value="2"
- label="manager did nothing / user typed in something / form not
- submitted"/>
- <int value="3"
- label="manager filled the fields / user did nothing / form not
- submitted"/>
- <int value="4"
- label="manager filled the fields / user chose a value / form not
- submitted"/>
- <int value="5"
- label="manager filled the fields / user typed in something / form not
- submitted"/>
- <int value="6"
- label="manager did nothing (site was blacklisted) / user did nothing /
- form not submitted"/>
- <int value="7"
- label="manager did nothing (site was blacklisted) / user chose a value
- / form not submitted (this value shouldn't be possible)"/>
- <int value="8"
- label="manager did nothing (site was blacklisted) / user typed in
- something / form not submitted"/>
- <int value="9"
- label="manager did nothing (autocomplete off) / user did nothing / form
- not submitted"/>
- <int value="10"
- label="manager did nothing (autocomplete off) / user chose a value /
- form not submitted (this value shouldn't be possible)"/>
- <int value="11"
- label="manager did nothing (autocomplete off) / user typed in something
- / form not submitted"/>
- <int value="12"
- label="manager did nothing / user did nothing / form submit failed"/>
- <int value="13"
- label="manager did nothing / user chose a value / form submit failed"/>
- <int value="14"
- label="manager did nothing / user typed in something / form submit
- failed"/>
- <int value="15"
- label="manager filled the fields / user did nothing / form submit
- failed"/>
- <int value="16"
- label="manager filled the fields / user chose a value / form submit
- failed"/>
- <int value="17"
- label="manager filled the fields / user typed in something / form
- submit failed"/>
- <int value="18"
- label="manager did nothing (site was blacklisted) / user did nothing /
- form submit failed"/>
- <int value="19"
- label="manager did nothing (site was blacklisted) / user chose a value
- / form submit failed (this value shouldn't be possible)"/>
- <int value="20"
- label="manager did nothing (site was blacklisted) / user typed in
- something / form submit failed"/>
- <int value="21"
- label="manager did nothing (autocomplete off) / user did nothing / form
- submit failed"/>
- <int value="22"
- label="manager did nothing (autocomplete off) / user chose a value /
- form submit failed (this value shouldn't be possible)"/>
- <int value="23"
- label="manager did nothing (autocomplete off) / user typed in something
- / form submit failed"/>
- <int value="24"
- label="manager did nothing / user did nothing / form submit succeeded"/>
- <int value="25"
- label="manager did nothing / user chose a value / form submit succeeded"/>
- <int value="26"
- label="manager did nothing / user typed in something / form submit
- succeeded"/>
- <int value="27"
- label="manager filled the fields / user did nothing / form submit
- succeeded"/>
- <int value="28"
- label="manager filled the fields / user chose a value / form submit
- succeeded"/>
- <int value="29"
- label="manager filled the fields / user typed in something / form
- submit succeeded"/>
- <int value="30"
- label="manager did nothing (site was blacklisted) / user did nothing /
- form submit succeeded"/>
- <int value="31"
- label="manager did nothing (site was blacklisted) / user chose a value
- / form submit succeeded (this value shouldn't be possible)"/>
- <int value="32"
- label="manager did nothing (site was blacklisted) / user typed in
- something / form submit succeeded"/>
- <int value="33"
- label="manager did nothing (autocomplete off) / user did nothing / form
- submit succeeded"/>
- <int value="34"
- label="manager did nothing (autocomplete off) / user chose a value /
- form submit succeeded (this value shouldn't be possible)"/>
- <int value="35"
- label="manager did nothing (autocomplete off) / user typed in something
- / form submit succeeded"/>
-</enum>
-
-<enum name="PasswordManagerActionsTakenWithPsl" type="int">
- <summary>
- The value is a combination of three different options - what did the
- password manager do, what did the user do, and was the form submitted (and
- submitted successfully or not). The meaning of each value can be determined
- from the values in chrome/browser/password_manager/password_form_manager.h
- </summary>
- <int value="0"
- label="manager did nothing / user did nothing / form not submitted"/>
- <int value="1"
- label="manager did nothing / user chose a value / form not submitted"/>
- <int value="2"
- label="manager did nothing / user chose a value from PSL / form not
- submitted"/>
- <int value="3"
- label="manager did nothing / user typed in something / form not
- submitted"/>
- <int value="4"
- label="manager filled the fields / user did nothing / form not
- submitted"/>
- <int value="5"
- label="manager filled the fields / user chose a value / form not
- submitted"/>
- <int value="6"
- label="manager filled the fields / user chose a value from PSL / form
- not submitted"/>
- <int value="7"
- label="manager filled the fields / user typed in something / form not
- submitted"/>
- <int value="8"
- label="manager did nothing (site was blacklisted) / user did nothing /
- form not submitted"/>
- <int value="9"
- label="manager did nothing (site was blacklisted) / user chose a value
- / form not submitted (this value shouldn't be possible)"/>
- <int value="10"
- label="manager did nothing (site was blacklisted) / user chose a value
- from PSL / form not submitted (this value shouldn't be possible)"/>
- <int value="11"
- label="manager did nothing (site was blacklisted) / user typed in
- something / form not submitted"/>
- <int value="12"
- label="manager did nothing (autocomplete off) / user did nothing / form
- not submitted"/>
- <int value="13"
- label="manager did nothing (autocomplete off) / user chose a value /
- form not submitted (this value shouldn't be possible)"/>
- <int value="14"
- label="manager did nothing (autocomplete off) / user chose a value from
- psl / form not submitted (this value shouldn't be possible)"/>
- <int value="15"
- label="manager did nothing (autocomplete off) / user typed in something
- / form not submitted"/>
- <int value="16"
- label="manager did nothing / user did nothing / form submit failed"/>
- <int value="17"
- label="manager did nothing / user chose a value / form submit failed"/>
- <int value="18"
- label="manager did nothing / user chose a value from psl / form submit
- failed"/>
- <int value="19"
- label="manager did nothing / user typed in something / form submit
- failed"/>
- <int value="20"
- label="manager filled the fields / user did nothing / form submit
- failed"/>
- <int value="21"
- label="manager filled the fields / user chose a value / form submit
- failed"/>
- <int value="22"
- label="manager filled the fields / user chose a value from psl / form
- submit failed"/>
- <int value="23"
- label="manager filled the fields / user typed in something / form
- submit failed"/>
- <int value="24"
- label="manager did nothing (site was blacklisted) / user did nothing /
- form submit failed"/>
- <int value="25"
- label="manager did nothing (site was blacklisted) / user chose a value
- / form submit failed (this value shouldn't be possible)"/>
- <int value="26"
- label="manager did nothing (site was blacklisted) / user chose a value
- from psl / form submit failed (this value shouldn't be possible)"/>
- <int value="27"
- label="manager did nothing (site was blacklisted) / user typed in
- something / form submit failed"/>
- <int value="28"
- label="manager did nothing (autocomplete off) / user did nothing / form
- submit failed"/>
- <int value="29"
- label="manager did nothing (autocomplete off) / user chose a value /
- form submit failed (this value shouldn't be possible)"/>
- <int value="30"
- label="manager did nothing (autocomplete off) / user chose a value from
- psl / form submit failed (this value shouldn't be possible)"/>
- <int value="31"
- label="manager did nothing (autocomplete off) / user typed in something
- / form submit failed"/>
- <int value="32"
- label="manager did nothing / user did nothing / form submit succeeded"/>
- <int value="33"
- label="manager did nothing / user chose a value / form submit succeeded"/>
- <int value="34"
- label="manager did nothing / user chose a value from psl / form submit
- succeeded"/>
- <int value="35"
- label="manager did nothing / user typed in something / form submit
- succeeded"/>
- <int value="36"
- label="manager filled the fields / user did nothing / form submit
- succeeded"/>
- <int value="37"
- label="manager filled the fields / user chose a value / form submit
- succeeded"/>
- <int value="38"
- label="manager filled the fields / user chose a value from psl / form
- submit succeeded"/>
- <int value="39"
- label="manager filled the fields / user typed in something / form
- submit succeeded"/>
- <int value="40"
- label="manager did nothing (site was blacklisted) / user did nothing /
- form submit succeeded"/>
- <int value="41"
- label="manager did nothing (site was blacklisted) / user chose a value
- / form submit succeeded (this value shouldn't be possible)"/>
- <int value="42"
- label="manager did nothing (site was blacklisted) / user chose a value
- from psl / form submit succeeded (this value shouldn't be
- possible)"/>
- <int value="43"
- label="manager did nothing (site was blacklisted) / user typed in
- something / form submit succeeded"/>
- <int value="44"
- label="manager did nothing (autocomplete off) / user did nothing / form
- submit succeeded"/>
- <int value="45"
- label="manager did nothing (autocomplete off) / user chose a value /
- form submit succeeded (this value shouldn't be possible)"/>
- <int value="46"
- label="manager did nothing (autocomplete off) / user chose a value from
- psl / form submit succeeded (this value shouldn't be possible)"/>
- <int value="47"
- label="manager did nothing (autocomplete off) / user typed in something
- / form submit succeeded"/>
-</enum>
-
-<enum name="PasswordManagerOsPasswordStatus" type="int">
- <int value="0" label="Unknown"/>
- <int value="1" label="Unsupported platform"/>
- <int value="2" label="Password is blank"/>
- <int value="3" label="Password is non blank"/>
- <int value="4"
- label="Password status not checked as user is on a Windows Domain"/>
-</enum>
-
-<enum name="PasswordManagerPslDomainMatchTriggering" type="int">
- <summary>
- The value indicates whether an entry returned by password autofill contains
- a value that was found by matching against the public suffix list.
- </summary>
- <int value="0" label="Matching disabled"/>
- <int value="1" label="No match"/>
- <int value="2" label="Match"/>
-</enum>
-
-<enum name="PepperVideoDecodeError" type="int">
- <int value="1" label="Illegal state">
- An operation was attempted during an incompatible decoder state.
- </int>
- <int value="2" label="Invalid argument">
- Invalid argument was passed to an API method.
- </int>
- <int value="3" label="Unreadable input">Encoded input is unreadable.</int>
- <int value="4" label="Platform failure">
- A failure occurred at the browser layer or lower. Examples of such failures
- include GPU hardware failures, GPU driver failures, GPU library failures,
- browser programming errors, and so on.
- </int>
-</enum>
-
-<enum name="PhotoEditorFileType" type="int">
- <int value="0" label="jpg"/>
- <int value="1" label="png"/>
- <int value="2" label="gif"/>
- <int value="3" label="bmp"/>
- <int value="4" label="webp"/>
- <int value="5" label="other"/>
-</enum>
-
-<enum name="PhotoEditorLoadMode" type="int">
- <int value="0" label="From full resolution cache"/>
- <int value="1" label="From screen resolution cache"/>
- <int value="2" label="From file"/>
- <int value="3" label="Other"/>
-</enum>
-
-<enum name="PhotoEditorSaveResult" type="int">
- <int value="0" label="Failure"/>
- <int value="1" label="Success"/>
- <int value="2" label="Other"/>
-</enum>
-
-<enum name="PhotoEditorToolType" type="int">
- <int value="0" label="Auto-fix"/>
- <int value="1" label="Crop"/>
- <int value="2" label="Brightness"/>
- <int value="3" label="Rotate left"/>
- <int value="4" label="Rotate right"/>
- <int value="5" label="Rotate undo"/>
- <int value="6" label="Rotate redo"/>
- <int value="7" label="Share"/>
- <int value="8" label="Other"/>
-</enum>
-
-<enum name="PipelineStatus" type="int">
- <int value="0" label="PIPELINE_OK"/>
- <int value="1" label="PIPELINE_ERROR_URL_NOT_FOUND"/>
- <int value="2" label="PIPELINE_ERROR_NETWORK"/>
- <int value="3" label="PIPELINE_ERROR_DECODE"/>
- <int value="4" label="PIPELINE_ERROR_DECRYPT"/>
- <int value="5" label="PIPELINE_ERROR_ABORT"/>
- <int value="6" label="PIPELINE_ERROR_INITIALIZATION_FAILED"/>
- <int value="7" label="PIPELINE_ERROR_REQUIRED_FILTER_MISSING"/>
- <int value="8" label="PIPELINE_ERROR_COULD_NOT_RENDER"/>
- <int value="9" label="PIPELINE_ERROR_READ"/>
- <int value="10" label="PIPELINE_ERROR_OPERATION_PENDING"/>
- <int value="11" label="PIPELINE_ERROR_INVALID_STATE"/>
- <int value="12" label="DEMUXER_ERROR_COULD_NOT_OPEN"/>
- <int value="13" label="DEMUXER_ERROR_COULD_NOT_PARSE"/>
- <int value="14" label="DEMUXER_ERROR_NO_SUPPORTED_STREAMS"/>
- <int value="15" label="DECODER_ERROR_NOT_SUPPORTED"/>
-</enum>
-
-<enum name="PlatformFileError" type="int">
- <int value="0" label="OK"/>
- <int value="1" label="FAILED"/>
- <int value="2" label="IN_USE"/>
- <int value="3" label="EXISTS"/>
- <int value="4" label="NOT_FOUND"/>
- <int value="5" label="ACCESS_DENIED"/>
- <int value="6" label="TOO_MANY_OPENED"/>
- <int value="7" label="NO_MEMORY"/>
- <int value="8" label="NO_SPACE"/>
- <int value="9" label="NOT_A_DIRECTORY"/>
- <int value="10" label="INVALID_OPERATION"/>
- <int value="11" label="SECURITY"/>
- <int value="12" label="ABORT"/>
- <int value="13" label="NOT_A_FILE"/>
- <int value="14" label="NOT_EMPTY"/>
- <int value="15" label="INVALID_URL"/>
- <int value="16" label="I/O"/>
-</enum>
-
-<enum name="PluginLoadResult" type="int">
- <int value="0" label="LOAD_SUCCESS"/>
- <int value="1" label="LOAD_FAILED"/>
- <int value="2" label="ENTRY_POINT_MISSING"/>
- <int value="3" label="INIT_FAILED"/>
-</enum>
-
-<enum name="PointerSensitivity" type="int">
- <int value="1" label="1"/>
- <int value="2" label="2"/>
- <int value="3" label="3"/>
- <int value="4" label="4"/>
- <int value="5" label="5"/>
-</enum>
-
-<enum name="PostMergeVerificationOutcome" type="int">
- <int value="0" label="Undefined"/>
- <int value="1" label="Succeeded"/>
- <int value="2" label="No accounts found"/>
- <int value="3" label="Missing primary account"/>
- <int value="4" label="Primary account is not the first"/>
- <int value="5" label="Verification failed"/>
- <int value="6" label="Connection failed"/>
- <int value="7" label="Overflow"/>
-</enum>
-
-<enum name="PowerBrightnessAdjust" type="int">
- <int value="0" label="Brightness Down"/>
- <int value="1" label="Brightness Up"/>
- <int value="2" label="Brightness Absolute"/>
-</enum>
-
-<enum name="PowerChargerType" type="int">
- <int value="0" label="Unknown charger"/>
- <int value="1" label="MAINS charger"/>
- <int value="2" label="USB Charger"/>
- <int value="3" label="Unconfirmed Spring Charger"/>
- <int value="4" label="Safe Spring Charger"/>
-</enum>
-
-<enum name="PreconnectedNavigation" type="int">
- <int value="0" label="No recent pre-connect to the page"/>
- <int value="1" label="Page nav. preceded by a pre-connect"/>
-</enum>
-
-<enum name="PreconnectMotivation" type="int">
- <int value="0" label="MOUSE_OVER_MOTIVATED"/>
- <int value="1" label="PAGE_SCAN_MOTIVATED"/>
- <int value="2" label="UNIT_TEST_MOTIVATED"/>
- <int value="3" label="LINKED_MAX_MOTIVATED"/>
- <int value="4" label="OMNIBOX_MOTIVATED"/>
- <int value="5" label="STARTUP_LIST_MOTIVATED"/>
- <int value="6" label="EARLY_LOAD_MOTIVATED"/>
- <int value="7" label="NO_PREFETCH_MOTIVATION"/>
- <int value="8" label="STATIC_REFERAL_MOTIVATED"/>
- <int value="9" label="LEARNED_REFERAL_MOTIVATED"/>
- <int value="10" label="SELF_REFERAL_MOTIVATED"/>
-</enum>
-
-<enum name="PreconnectSubresourceEval" type="int">
- <int value="0" label="PRECONNECTION"/>
- <int value="1" label="PRERESOLUTION"/>
- <int value="2" label="TOO_NEW"/>
-</enum>
-
-<enum name="PreconnectTriggerUsed" type="int">
- <int value="0" label="The pre-connect triggered host was not accessed"/>
- <int value="1" label="The pre-connect triggered host was accessed"/>
-</enum>
-
-<enum name="PrefetchStatus" type="int">
- <int value="0" label="undefined"/>
- <int value="1" label="success from cache"/>
- <int value="2" label="success from network"/>
- <int value="3" label="canceled in-flight"/>
-</enum>
-
-<enum name="PrerenderEvent" type="int">
- <int value="0" label="Swapin no delegate"/>
- <int value="1" label="Swapin candidate"/>
- <int value="2" label="Swapin candidate namespace matces"/>
- <int value="3" label="Swapin no merge pending"/>
- <int value="4" label="Swapin merging disabled"/>
- <int value="5" label="Swapin issuing merge"/>
- <int value="6" label="Merge for swapin candidate"/>
- <int value="7" label="Merge result no pending swapin"/>
- <int value="8" label="Merge result timeout cb"/>
- <int value="9" label="Merge result result cb"/>
- <int value="10" label="Merge result timed out"/>
- <int value="11" label="Merge result merge done"/>
- <int value="12" label="Merge result: namespace not found"/>
- <int value="13" label="Merge result: namespace not alias"/>
- <int value="14" label="Merge result: not logging"/>
- <int value="15" label="Merge result: no transactions"/>
- <int value="16" label="Merge result: too many transactions"/>
- <int value="17" label="Merge result: not mergeable"/>
- <int value="18" label="Merge result: mergeable"/>
- <int value="19" label="Merge result merge failed"/>
- <int value="20" label="Merge result swapping in"/>
- <int value="21" label="Merge result swapin successful"/>
- <int value="22" label="Merge result swapin failed"/>
-</enum>
-
-<enum name="PrerenderFinalStatus" type="int">
- <int value="0" label="USED"/>
- <int value="1" label="TIMED_OUT"/>
- <int value="2" label="EVICTED"/>
- <int value="3" label="MANAGER_SHUTDOWN"/>
- <int value="4" label="CLOSED"/>
- <int value="5" label="CREATE_NEW_WINDOW"/>
- <int value="6" label="PROFILE_DESTROYED"/>
- <int value="7" label="APP_TERMINATING"/>
- <int value="8" label="JAVASCRIPT_ALERT"/>
- <int value="9" label="AUTH_NEEDED"/>
- <int value="10" label="HTTPS"/>
- <int value="11" label="DOWNLOAD"/>
- <int value="12" label="MEMORY_LIMIT_EXCEEDED"/>
- <int value="13" label="JS_OUT_OF_MEMORY"/>
- <int value="14" label="RENDERER_UNRESPONSIVE"/>
- <int value="15" label="TOO_MANY_PROCESSES"/>
- <int value="16" label="RATE_LIMIT_EXCEEDED"/>
- <int value="17" label="PENDING_SKIPPED"/>
- <int value="18" label="CONTROL_GROUP"/>
- <int value="19" label="HTML5_MEDIA"/>
- <int value="20" label="SOURCE_RENDER_VIEW_CLOSED"/>
- <int value="21" label="RENDERER_CRASHED"/>
- <int value="22" label="UNSUPPORTED_SCHEME"/>
- <int value="23" label="INVALID_HTTP_METHOD"/>
- <int value="24" label="WINDOW_PRINT"/>
- <int value="25" label="RECENTLY_VISITED"/>
- <int value="26" label="WINDOW_OPENER"/>
- <int value="27" label="PAGE_ID_CONFLICT"/>
- <int value="28" label="SAFE_BROWSING"/>
- <int value="29" label="FRAGMENT_MISMATCH"/>
- <int value="30" label="SSL_CLIENT_CERTIFICATE_REQUESTED"/>
- <int value="31" label="CACHE_OR_HISTORY_CLEARED"/>
- <int value="32" label="CANCELLED"/>
- <int value="33" label="SSL_ERROR"/>
- <int value="34" label="CROSS_SITE_NAVIGATION_PENDING"/>
- <int value="35" label="DEVTOOLS_ATTACHED"/>
- <int value="36" label="SESSION_STORAGE_NAMESPACE_MISMATCH"/>
- <int value="37" label="NO_USE_GROUP"/>
- <int value="38" label="MATCH_COMPLETE_DUMMY"/>
- <int value="39" label="DUPLICATE"/>
- <int value="40" label="OPEN_URL"/>
- <int value="41" label="WOULD_HAVE_BEEN_USED"/>
- <int value="42" label="REGISTER_PROTOCOL_HANDLER"/>
- <int value="43" label="CREATING_AUDIO_STREAM"/>
- <int value="44" label="PAGE_BEING_CAPTURED"/>
- <int value="45" label="BAD_DEFERRED_REDIRECT"/>
- <int value="46" label="NAVIGATION_UNCOMMITTED"/>
- <int value="47" label="NEW_NAVIGATION_ENTRY"/>
-</enum>
-
-<enum name="PrerenderHoverEvent" type="int">
- <obsolete>
- deprecated May 10 2012
- </obsolete>
- <int value="0" label="HOVER_EVENT_START"/>
- <int value="1" label="HOVER_EVENT_TOO_SHORT"/>
- <int value="2" label="HOVER_EVENT_REPLACED"/>
- <int value="3" label="HOVER_EVENT_CLICK"/>
-</enum>
-
-<enum name="PrerenderLocalPredictorEvents" type="int">
- <int value="0" label="Constructed"/>
- <int value="1" label="Init scheduled"/>
- <int value="2" label="Init started"/>
- <int value="3" label="Init failed: no history"/>
- <int value="4" label="Init succeeded"/>
- <int value="5" label="AddVisit"/>
- <int value="6" label="AddVisit initialized"/>
- <int value="7" label="AddVisit prerender identified"/>
- <int value="8" label="AddVisit relevant transition"/>
- <int value="9" label="AddVisit identified prerender candidate"/>
- <int value="10" label="AddVisit prerendering"/>
- <int value="11" label="Got prerender url"/>
- <int value="12" label="Error: no prerender url for PLT"/>
- <int value="13" label="AddVisit prerender rextended"/>
- <int value="14" label="URL lookup result"/>
- <int value="15" label="URL lookup result: root page"/>
- <int value="16" label="URL lookup result: http"/>
- <int value="17" label="URL lookup result: has query string"/>
- <int value="18" label="URL lookup result: contains logout"/>
- <int value="19" label="URL lookup result: contians login"/>
- <int value="20" label="Start url lookup"/>
- <int value="21" label="AddVisit not root page"/>
- <int value="22" label="Whitelist error"/>
- <int value="23" label="Whitelist ok"/>
- <int value="24" label="URL lookup result: on whitelist"/>
- <int value="25" label="URL lookup result: on whitelist root page"/>
- <int value="26" label="URL lookup result: extended root page"/>
- <int value="27" label="URL lookup result: root page http"/>
- <int value="28" label="URL lookup failed"/>
- <int value="29" label="URL lookup no source webcontents found"/>
- <int value="30" label="URL lookup no logged in table found"/>
- <int value="31" label="URL lookup issuing logged in lookup"/>
- <int value="32" label="Continue prerender check started"/>
- <int value="33" label="Continue prerender check no url"/>
- <int value="34" label="Continue prerender check priority too low"/>
- <int value="35" label="Continue prerender check urls identical but fragemet"/>
- <int value="36" label="Continue prerender check https"/>
- <int value="37" label="Continue prerender check root page"/>
- <int value="38" label="Continue prerender check logout url"/>
- <int value="39" label="Continue prerender check login url"/>
- <int value="40" label="Continue prerender check not logged in"/>
- <int value="41" label="Continue prerender check fallthrough no prerender"/>
- <int value="42" label="Continue prerender check issuing prerender"/>
- <int value="43" label="Issuing prerender"/>
- <int value="44" label="No prerender candidates"/>
- <int value="45" label="Got history issuing lookup"/>
- <int value="46" label="Tab Helper URL seen"/>
- <int value="47" label="Tab Helper URL seen match"/>
- <int value="48" label="Tab Helper URL seen namespace match"/>
- <int value="49" label="URL lookup multiple source webcontents"/>
- <int value="50" label="Continue prerender check side-effect free whitelist"/>
- <int value="51" label="Continue prerender check Examine next URL"/>
- <int value="52" label="Issuing prerender, already prerendering"/>
- <int value="53" label="Issuing prerender, new prerender"/>
- <int value="54" label="Issuing prerender, cancelled old prerender"/>
- <int value="55" label="Continue prerender check fallthrough prerendering"/>
- <int value="56" label="URL lookup success"/>
- <int value="57" label="Prerender Service disabled"/>
- <int value="58" label="Prerender Service issued lookup"/>
- <int value="59" label="Prerender Service lookup timed out"/>
- <int value="60" label="Prerender Service received result"/>
- <int value="61" label="Prerender Service no record for result"/>
- <int value="62" label="Prerender Service parsed correctly"/>
- <int value="63" label="Prerender Service parse error"/>
- <int value="64" label="Prerender Service parse error incorrect JSON"/>
- <int value="65" label="Prerender Service hinting timed out"/>
- <int value="66" label="Prerender Service hinting url lookup timed out"/>
- <int value="67" label="Prerender Service candidate url lookup timed out"/>
- <int value="68" label="Continue prerender check service whitelist"/>
- <int value="69" label="Continue prerender check next URL local"/>
- <int value="70" label="Continue prerender check next URL service"/>
- <int value="71" label="AddVisit relevant transition repeat URL"/>
- <int value="72" label="AddVisit relevant transition new URL"/>
- <int value="73" label="Tab Helper namespace mismatch: no namespace"/>
- <int value="74" label="Tab Helper namespace mismatch: merge issued"/>
- <int value="75" label="Namespace mismatch: merge result received"/>
- <int value="76" label="Namespace mismatch: merge result namespace not found"/>
- <int value="77" label="Namespace mismatch: merge result not logging"/>
- <int value="78" label="Namespace mismatch: merge result no transactions"/>
- <int value="79"
- label="Namespace mismatch: merge result too many transactions"/>
- <int value="80" label="Namespace mismatch: merge result not mergeable"/>
- <int value="81" label="Namespace mismatch: merge result mergeable"/>
- <int value="82" label="Init failed unencrypted sync not enabled"/>
- <int value="83" label="Continue prerender check next URL not skipped"/>
- <int value="84" label="Prerender Service returned hinting candidates"/>
- <int value="85" label="Namespace mismatch: merge result namespace not alias"/>
- <int value="86" label="Tab Helper URL seen entry"/>
- <int value="87" label="Tab Helper URL seen match browser navigation"/>
- <int value="88" label="Tab Helper URL seen namespace match entry"/>
- <int value="89"
- label="Tab Helper URL seen namespace match browser navigation"/>
-</enum>
-
-<enum name="PrerenderLocalVisitCoreTransition" type="int">
- <int value="0" label="LINK"/>
- <int value="1" label="TYPED"/>
- <int value="2" label="AUTO_BOOKMARK"/>
- <int value="3" label="AUTO_SUBFRAME"/>
- <int value="4" label="MANUAL_SUBFRAME"/>
- <int value="5" label="GENERATED"/>
- <int value="6" label="START_PAGE"/>
- <int value="7" label="FORM_SUBMIT"/>
- <int value="8" label="RELOAD"/>
- <int value="9" label="KEYWORD"/>
- <int value="10" label="GENERATED"/>
-</enum>
-
-<enum name="PrerenderLocalVisitEvents" type="int">
- <int value="0" label="V1_VISIT"/>
- <int value="1" label="V1_PRERENDER_STARTED_1"/>
- <int value="2" label="V1_PRERENDER_USED_1"/>
- <int value="3" label="V1_PRERENDER_STARTED_3"/>
- <int value="4" label="V1_PRERENDER_USED_3"/>
- <int value="5" label="V1_PRERENDER_STARTED_5"/>
- <int value="6" label="V1_PRERENDER_USED_5"/>
- <int value="10" label="VISIT"/>
- <int value="11" label="VISIT_EXCLUDE_BACK_FORWARD"/>
- <int value="12" label="VISIT_EXCLUDE_HOME_PAGE"/>
- <int value="13" label="VISIT_EXCLUDE_REDIRECT_CHAIN"/>
- <int value="14" label="PRERENDER_STARTED_1"/>
- <int value="15" label="PRERENDER_USED_1"/>
- <int value="16" label="PRERENDER_STARTED_3"/>
- <int value="17" label="PRERENDER_USED_3"/>
- <int value="18" label="PRERENDER_STARTED_5"/>
- <int value="19" label="PRERENDER_USED_5"/>
-</enum>
-
-<enum name="PrerenderMode" type="int">
- <int value="0" label="PRERENDER_MODE_DISABLED"/>
- <int value="1" label="PRERENDER_MODE_ENABLED"/>
- <int value="2" label="PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP"/>
- <int value="3" label="PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP"/>
- <int value="4" label="PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP"/>
- <int value="5" label="PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP"/>
- <int value="6" label="PRERENDER_MODE_EXPERIMENT_MULTI_PRERENDER_GROUP"/>
- <int value="7" label="PRERENDER_MODE_EXPERIMENT_15MIN_TTL_GROUP"/>
-</enum>
-
-<enum name="PrerenderPageviewEvents" type="int">
- <int value="0" label="PAGEVIEW_EVENT_NEW_URL"/>
- <int value="1" label="PAGEVIEW_EVENT_TOP_SITE_NEW_URL"/>
- <int value="2" label="PAGEVIEW_EVENT_LOAD_START"/>
- <int value="3" label="PAGEVIEW_EVENT_TOP_SITE_LOAD_START"/>
-</enum>
-
-<enum name="PrerenderSchemeCancelReason" type="int">
- <int value="0" label="EXTERNAL_PROTOCOL"/>
- <int value="1" label="DATA"/>
- <int value="2" label="BLOB"/>
- <int value="3" label="FILE"/>
- <int value="4" label="FILESYSTEM"/>
- <int value="5" label="WEBSOCKET"/>
- <int value="6" label="FTP"/>
- <int value="7" label="CHROME"/>
- <int value="8" label="CHROME_EXTENSION"/>
- <int value="9" label="ABOUT"/>
- <int value="10" label="UNKNOWN"/>
-</enum>
-
-<enum name="PrerenderTabHelperEvents" type="int">
- <int value="0" label="Table requested"/>
- <int value="1" label="Table present"/>
- <int value="2" label="Mainframe change"/>
- <int value="3" label="Mainframe change, logged in"/>
- <int value="4" label="Mainframe commit"/>
- <int value="5" label="Mainframe commit, logged in"/>
- <int value="6" label="Login action added"/>
- <int value="7" label="Login action added, Mainframe"/>
- <int value="8" label="Login action added, Mainframe, pw empty"/>
- <int value="9" label="Login action added, Subframe"/>
- <int value="10" label="Login action added, Subframe, pw empty"/>
-</enum>
-
-<enum name="PreTapEvents" type="int">
- <int value="0" label="no event"/>
- <int value="1" label="tapdown"/>
- <int value="2" label="tapunconfirmed"/>
- <int value="3" label="tapdown + tapunconfirmed"/>
-</enum>
-
-<enum name="ProfileCreateResult" type="int">
- <int value="0" label="Failed locally"/>
- <int value="1" label="Failed remotely"/>
- <int value="2" label="Created but not initialized (should never happen)"/>
- <int value="3" label="Succeeded"/>
- <int value="4" label="Canceled"/>
-</enum>
-
-<enum name="ProfileErrorType" type="int">
- <int value="0" label="History error"/>
- <int value="1" label="Preferences error"/>
- <int value="2" label="Webdata autofill DB error"/>
- <int value="3" label="Webdata token DB error"/>
- <int value="4" label="Webdata DB error"/>
-</enum>
-
-<enum name="ProfileImageDownloadResult" type="int">
- <int value="0" label="DownloadSuccessChanged">
- <summary>
- Reported when image download succeeds and the image is newer than what we
- already have so we update it.
- </summary>
- </int>
- <int value="1" label="DownloadSuccess">
- <summary>Reported anytime we download profile image successfully.</summary>
- </int>
- <int value="2" label="DownloadFailure">
- <summary>Download failed because of network errors.</summary>
- </int>
- <int value="3" label="DownloadDefault">
- <summary>
- We didn't download the image because it's the default one.
- </summary>
- </int>
-</enum>
-
-<enum name="ProtectorError" type="int">
- <obsolete>
- Deprecated 8/2013. No longer generated.
- </obsolete>
- <summary>
- Codes for errors Protector detects about settings it protects. See
- chrome/browser/protector/histograms.h for the corresponding enum.
- </summary>
- <int value="0" label="Backup invalid"/>
- <int value="1" label="Value changed"/>
- <int value="2" label="Value valid"/>
- <int value="3" label="Value is valid and zero"/>
-</enum>
-
-<enum name="ProtocolVersion" type="int">
- <int value="0" label="UNKNOWN"/>
- <int value="1" label="HTTP 1.1"/>
- <int value="2" label="SPDY 1.0"/>
- <int value="3" label="SPDY 2.0"/>
- <int value="4" label="SPDY 2.1"/>
- <int value="5" label="SPDY 3.0"/>
-</enum>
-
-<enum name="ProvisionalSaveFailure" type="int">
- <int value="0" label="SAVING_DISABLED"/>
- <int value="1" label="EMPTY_PASSWORD"/>
- <int value="2" label="NO_MATCHING_FORM"/>
- <int value="3" label="MATCHING_NOT_COMPLETE"/>
- <int value="4" label="FORM_BLACKLISTED"/>
- <int value="5" label="INVALID_FORM"/>
- <int value="6" label="AUTOCOMPLETE_OFF"/>
-</enum>
-
-<enum name="ProxyStatus" type="int">
- <int value="0" label="PROXY_STATUS_IGNORED"/>
- <int value="1" label="PROXY_UNINITIALIZED"/>
- <int value="2" label="PROXY_NOT_USED"/>
- <int value="3" label="PROXY_PAC_RESOLVER"/>
- <int value="4" label="PROXY_HAS_RULES"/>
-</enum>
-
-<enum name="PublicKeyPinFailedDomain" type="int">
- <int value="0" label="DOMAIN_NOT_PINNED"/>
- <int value="1" label="DOMAIN_GOOGLE_COM"/>
- <int value="2" label="DOMAIN_ANDROID_COM"/>
- <int value="3" label="DOMAIN_GOOGLE_ANALYTICS_COM"/>
- <int value="4" label="DOMAIN_GOOGLEPLEX_COM"/>
- <int value="5" label="DOMAIN_YTIMG_COM"/>
- <int value="6" label="DOMAIN_GOOGLEUSERCONTENT_COM"/>
- <int value="7" label="DOMAIN_YOUTUBE_COM"/>
- <int value="8" label="DOMAIN_GOOGLEAPIS_COM"/>
- <int value="9" label="DOMAIN_GOOGLEADSERVICES_COM"/>
- <int value="10" label="DOMAIN_GOOGLECODE_COM"/>
- <int value="11" label="DOMAIN_APPSPOT_COM"/>
- <int value="12" label="DOMAIN_GOOGLESYNDICATION_COM"/>
- <int value="13" label="DOMAIN_DOUBLECLICK_NET"/>
- <int value="14" label="DOMAIN_GSTATIC_COM"/>
- <int value="15" label="DOMAIN_GMAIL_COM"/>
- <int value="16" label="DOMAIN_GOOGLEMAIL_COM"/>
- <int value="17" label="DOMAIN_GOOGLEGROUPS_COM"/>
- <int value="18" label="DOMAIN_TORPROJECT_ORG"/>
- <int value="19" label="DOMAIN_TWITTER_COM"/>
- <int value="20" label="DOMAIN_TWIMG_COM"/>
- <int value="21" label="DOMAIN_AKAMAIHD_NET"/>
- <int value="22" label="DOMAIN_NUM_EVENTS"/>
-</enum>
-
-<enum name="QuicErrorCodes" type="int">
- <int value="0" label="NO_ERROR"/>
- <int value="1" label="INTERNAL_ERROR"/>
- <int value="2" label="STREAM_DATA_AFTER_TERMINATION"/>
- <int value="3" label="INVALID_PACKET_HEADER"/>
- <int value="4" label="INVALID_FRAME_DATA"/>
- <int value="5" label="INVALID_FEC_DATA"/>
- <int value="6" label="INVALID_RST_STREAM_DATA"/>
- <int value="7" label="INVALID_CONNECTION_CLOSE_DATA"/>
- <int value="8" label="INVALID_GOAWAY_DATA"/>
- <int value="9" label="INVALID_ACK_DATA"/>
- <int value="10" label="INVALID_VERSION_NEGOTIATION_PACKET"/>
- <int value="11" label="INVALID_PUBLIC_RST_PACKET"/>
- <int value="12" label="DECRYPTION_FAILURE"/>
- <int value="13" label="ENCRYPTION_FAILURE"/>
- <int value="14" label="PACKET_TOO_LARGE"/>
- <int value="15" label="PACKET_FOR_NONEXISTENT_STREAM"/>
- <int value="16" label="PEER_GOING_AWAY"/>
- <int value="17" label="INVALID_STREAM_ID"/>
- <int value="18" label="TOO_MANY_OPEN_STREAMS"/>
- <int value="19" label="PUBLIC_RESET"/>
- <int value="20" label="INVALID_VERSION"/>
- <int value="21" label="STREAM_RST_BEFORE_HEADERS_DECOMPRESSED"/>
- <int value="22" label="INVALID_HEADER_ID"/>
- <int value="23" label="INVALID_NEGOTIATED_VALUE"/>
- <int value="24" label="DECOMPRESSION_FAILURE"/>
- <int value="25" label="CONNECTION_TIMED_OUT"/>
- <int value="26" label="ERROR_MIGRATING_ADDRESS"/>
- <int value="27" label="PACKET_WRITE_ERROR"/>
- <int value="28" label="HANDSHAKE_FAILED"/>
- <int value="29" label="CRYPTO_TAGS_OUT_OF_ORDER"/>
- <int value="30" label="CRYPTO_TOO_MANY_ENTRIES"/>
- <int value="31" label="CRYPTO_INVALID_VALUE_LENGTH"/>
- <int value="32" label="CRYPTO_MESSAGE_AFTER_HANDSHAKE_COMPLETE"/>
- <int value="33" label="INVALID_CRYPTO_MESSAGE_TYPE"/>
- <int value="34" label="INVALID_CRYPTO_MESSAGE_PARAMETER"/>
- <int value="35" label="CRYPTO_MESSAGE_PARAMETER_NOT_FOUND"/>
- <int value="36" label="CRYPTO_MESSAGE_PARAMETER_NO_OVERLAP"/>
- <int value="37" label="CRYPTO_MESSAGE_INDEX_NOT_FOUND"/>
- <int value="38" label="CRYPTO_INTERNAL_ERROR"/>
- <int value="39" label="CRYPTO_VERSION_NOT_SUPPORTED"/>
- <int value="40" label="CRYPTO_NO_SUPPORT"/>
- <int value="41" label="CRYPTO_TOO_MANY_REJECTS"/>
- <int value="42" label="PROOF_INVALID"/>
- <int value="43" label="CRYPTO_DUPLICATE_TAG"/>
- <int value="44" label="CRYPTO_ENCRYPTION_LEVEL_INCORRECT"/>
- <int value="45" label="CRYPTO_SERVER_CONFIG_EXPIRED"/>
- <int value="46" label="INVALID_STREAM_DATA"/>
- <int value="47" label="INVALID_CONGESTION_FEEDBACK_DATA"/>
- <int value="48" label="MISSING_PAYLOAD"/>
- <int value="49" label="INVALID_PRIORITY"/>
- <int value="50" label="INVALID_STREAM_FRAME"/>
- <int value="51" label="PACKET_READ_ERROR"/>
-</enum>
-
-<enum name="QuicHandshakeState" type="int">
- <int value="0" label="STARTED"/>
- <int value="1" label="ENCRYPTION_ESTABLISHED"/>
- <int value="2" label="HANDSHAKE_CONFIRMED"/>
- <int value="3" label="FAILED"/>
-</enum>
-
-<enum name="QuickofficeErrorTypes" type="int">
- <int value="0" label="doc uncaught js exception"/>
- <int value="1" label="docx uncaught js exception"/>
- <int value="2" label="docm uncaught js exception"/>
- <int value="3" label="xls uncaught js exception"/>
- <int value="4" label="xlsx uncaught js exception"/>
- <int value="5" label="xlsm uncaught js exception"/>
- <int value="6" label="ppt uncaught js exception"/>
- <int value="7" label="pptx uncaught js exception"/>
- <int value="8" label="pptm uncaught js exception"/>
- <int value="9" label="pps uncaught js exception"/>
- <int value="10" label="ppsx uncaught js exception"/>
- <int value="11" label="ppsm uncaught js exception"/>
- <int value="12" label="doc suspected corrupt file"/>
- <int value="13" label="docx suspected corrupt file"/>
- <int value="14" label="docm suspected corrupt file"/>
- <int value="15" label="xls suspected corrupt file"/>
- <int value="16" label="xlsx suspected corrupt file"/>
- <int value="17" label="xlsm suspected corrupt file"/>
- <int value="18" label="ppt suspected corrupt file"/>
- <int value="19" label="pptx suspected corrupt file"/>
- <int value="20" label="pptm suspected corrupt file"/>
- <int value="21" label="pps suspected corrupt file"/>
- <int value="22" label="ppsx suspected corrupt file"/>
- <int value="23" label="ppsm suspected corrupt file"/>
- <int value="24" label="doc qowt ui warning"/>
- <int value="25" label="docx qowt ui warning"/>
- <int value="26" label="docm qowt ui warning"/>
- <int value="27" label="xls qowt ui warning"/>
- <int value="28" label="xlsx qowt ui warning"/>
- <int value="29" label="xlsm qowt ui warning"/>
- <int value="30" label="ppt qowt ui warning"/>
- <int value="31" label="pptx qowt ui warning"/>
- <int value="32" label="pptm qowt ui warning"/>
- <int value="33" label="pps qowt ui warning"/>
- <int value="34" label="ppsx qowt ui warning"/>
- <int value="35" label="ppsm qowt ui warning"/>
- <int value="36" label="doc nacl error"/>
- <int value="37" label="docx nacl error"/>
- <int value="38" label="docm nacl error"/>
- <int value="39" label="xls nacl error"/>
- <int value="40" label="xlsx nacl error"/>
- <int value="41" label="xlsm nacl error"/>
- <int value="42" label="ppt nacl error"/>
- <int value="43" label="pptx nacl error"/>
- <int value="44" label="pptm nacl error"/>
- <int value="45" label="pps nacl error"/>
- <int value="46" label="ppsx nacl error"/>
- <int value="47" label="ppsm nacl error"/>
- <int value="48" label="doc nacl crash"/>
- <int value="49" label="docx nacl crash"/>
- <int value="50" label="docm nacl crash"/>
- <int value="51" label="xls nacl crash"/>
- <int value="52" label="xlsx nacl crash"/>
- <int value="53" label="xlsm nacl crash"/>
- <int value="54" label="ppt nacl crash"/>
- <int value="55" label="pptx nacl crash"/>
- <int value="56" label="pptm nacl crash"/>
- <int value="57" label="pps nacl crash"/>
- <int value="58" label="ppsx nacl crash"/>
- <int value="59" label="ppsm nacl crash"/>
- <int value="60" label="doc invalid file format"/>
- <int value="61" label="docx invalid file format"/>
- <int value="62" label="docm invalid file format"/>
- <int value="63" label="xls invalid file format"/>
- <int value="64" label="xlsx invalid file format"/>
- <int value="65" label="xlsm invalid file format"/>
- <int value="66" label="ppt invalid file format"/>
- <int value="67" label="pptx invalid file format"/>
- <int value="68" label="pptm invalid file format"/>
- <int value="69" label="pps invalid file format"/>
- <int value="70" label="ppsx invalid file format"/>
- <int value="71" label="ppsm invalid file format"/>
- <int value="72" label="doc editing dom sync error"/>
- <int value="73" label="docx editing dom sync error"/>
- <int value="74" label="docm editing dom sync error"/>
- <int value="75" label="xls editing dom sync error"/>
- <int value="76" label="xlsx editing dom sync error"/>
- <int value="77" label="xlsm editing dom sync error"/>
- <int value="78" label="ppt editing dom sync error"/>
- <int value="79" label="pptx editing dom sync error"/>
- <int value="80" label="pptm editing dom sync error"/>
- <int value="81" label="pps editing dom sync error"/>
- <int value="82" label="ppsx editing dom sync error"/>
- <int value="83" label="ppsm editing dom sync error"/>
-</enum>
-
-<enum name="QuickofficeFileFormat" type="int">
- <int value="0" label="doc"/>
- <int value="1" label="docx"/>
- <int value="2" label="docm"/>
- <int value="3" label="xls"/>
- <int value="4" label="xlsx"/>
- <int value="5" label="xlsm"/>
- <int value="6" label="ppt"/>
- <int value="7" label="pptx"/>
- <int value="8" label="pptm"/>
- <int value="9" label="pps"/>
- <int value="10" label="ppsx"/>
- <int value="11" label="ppsm"/>
-</enum>
-
-<enum name="QuicRstStreamErrorCodes" type="int">
- <int value="0" label="NO_ERROR"/>
- <int value="1" label="ERROR_PROCESSING_STREAM"/>
- <int value="2" label="MULTIPLE_TERMINATION_OFFSETS"/>
- <int value="3" label="BAD_APPLICATION_PAYLOAD"/>
- <int value="4" label="CONNECTION_ERROR"/>
- <int value="5" label="PEER_GOING_AWAY"/>
- <int value="6" label="CANCELLED"/>
-</enum>
-
-<enum name="RecentTabsAction" type="int">
- <int value="0" label="Local Session Tab"/>
- <int value="1" label="Other Device Tab"/>
- <int value="2" label="Restore Window"/>
- <int value="3" label="Show More"/>
-</enum>
-
-<enum name="ResolutionCategory" type="int">
- <int value="0" label="RESOLVE_SUCCESS"/>
- <int value="1" label="RESOLVE_FAIL"/>
- <int value="2" label="RESOLVE_SPECULATIVE_SUCCESS"/>
- <int value="3" label="RESOLVE_SPECULATIVE_FAIL"/>
-</enum>
-
-<enum name="ResolutionUnspecWasteCategory" type="int">
- <int value="0" label="AF_WASTE_IPV4_ONLY">
- Running in a IPv4-only configuration. No waste.
- </int>
- <int value="1" label="AF_WASTE_CACHE_IPV4">
- Cache contained an UNSPEC result for this IPv4 lookup. Waste.
- </int>
- <int value="2" label="AF_WASTE_CACHE_UNSPEC">
- Cache contained an IPv4 result for this UNSPEC lookup. Waste.
- </int>
- <int value="3" label="AF_WASTE_JOB_IPV4">
- Job pool contained an UNSPEC job for this IPv4 lookup. Waste.
- </int>
- <int value="4" label="AF_WASTE_JOB_UNSPEC">
- Job pool contained an IPv4 job for this UNSPEC lookup. Waste.
- </int>
- <int value="5" label="AF_WASTE_NONE_IPV4">
- A new job was needed for this IPv4 lookup. No waste.
- </int>
- <int value="6" label="AF_WASTE_NONE_UNSPEC">
- A new job was needed for this UNSPEC lookup. No waste.
- </int>
-</enum>
-
-<enum name="ResourceHasClient" type="int">
- <int value="0" label="No client"/>
- <int value="1" label="Has client"/>
-</enum>
-
-<enum name="ResourceType" type="int">
- <int value="0" label="Main resource"/>
- <int value="1" label="Image"/>
- <int value="2" label="CSSS"/>
- <int value="3" label="Script"/>
- <int value="4" label="Font"/>
- <int value="5" label="Raw"/>
- <int value="6" label="SVG"/>
- <int value="7" label="XSL"/>
- <int value="8" label="Link prefetch"/>
- <int value="9" label="Link subresource"/>
- <int value="10" label="Text track"/>
- <int value="11" label="Shader"/>
- <int value="12" label="Import resource"/>
-</enum>
-
-<enum name="SavePasswordPromptResponseType" type="int">
- <int value="0" label="NO_RESPONSE"/>
- <int value="1" label="REMEMBER_PASSWORD"/>
- <int value="2" label="DONT_REMEMBER_PASSWORD"/>
-</enum>
-
-<enum name="SB2BloomFailure" type="int">
- <int value="0" label="READ_OPEN"/>
- <int value="1" label="READ_VERSION"/>
- <int value="2" label="READ_NUM_KEYS"/>
- <int value="3" label="READ_KEY"/>
- <int value="4" label="READ_DATA_MINSIZE"/>
- <int value="5" label="READ_DATA_MAXSIZE"/>
- <int value="6" label="READ_DATA_SHORT"/>
- <int value="7" label="READ_DATA"/>
-</enum>
-
-<enum name="SB2BloomFilterFalsePositives" type="int">
- <int value="0" label="ALL_MISSES"/>
- <int value="1" label="FALSE_POSITIVE_MISSES"/>
-</enum>
-
-<enum name="SB2DatabaseFailure" type="int">
- <int value="0" label="CORRUPT"/>
- <int value="1" label="CORRUPT_HANDLER"/>
- <int value="2" label="BROWSE_DB_UPDATE_BEGIN"/>
- <int value="3" label="BROWSE_DB_UPDATE_FINISH"/>
- <int value="4" label="FILTER_MISSING"/>
- <int value="5" label="FILTER_READ"/>
- <int value="6" label="FILTER_WRITE"/>
- <int value="7" label="FILTER_DELETE"/>
- <int value="8" label="STORE_MISSING"/>
- <int value="9" label="STORE_DELETE"/>
- <int value="10" label="DOWNLOAD_DB_UPDATE_BEGIN"/>
- <int value="11" label="DOWNLOAD_DB_UPDATE_FINISH"/>
- <int value="12" label="CSD_DB_UPDATE_BEGIN"/>
- <int value="13" label="CSD_DB_UPDATE_FINISH"/>
- <int value="14" label="BROWSE_PREFIX_SET_MISSING"/>
- <int value="15" label="BROWSE_PREFIX_SET_READ"/>
- <int value="16" label="BROWSE_PREFIX_SET_WRITE"/>
- <int value="17" label="BROWSE_PREFIX_SET_DELETE"/>
- <int value="18" label="EXTENSION_BLACKLIST_UPDATE_BEGIN"/>
- <int value="19" label="EXTENSION_BLACKLIST_UPDATE_FINISH"/>
- <int value="20" label="EXTENSION_BLACKLIST_UPDATE_DELETE"/>
- <int value="21" label="SIDE_EFFECT_FREE_WHITELIST_UPDATE_BEGIN"/>
- <int value="22" label="SIDE_EFFECT_FREE_WHITELIST_UPDATE_FINISH"/>
- <int value="23" label="SIDE_EFFECT_FREE_WHITELIST_DELETE"/>
- <int value="24" label="SIDE_EFFECT_FREE_WHITELIST_PREFIX_SET_READ"/>
- <int value="25" label="SIDE_EFFECT_FREE_WHITELIST_PREFIX_SET_WRITE"/>
- <int value="26" label="SIDE_EFFECT_FREE_WHITELIST_PREFIX_SET_DELETE"/>
-</enum>
-
-<enum name="SB2DownloadChecks" type="int">
- <int value="0" label="URL_CHECKS_TOTAL"/>
- <int value="1" label="URL_CHECKS_CANCELED"/>
- <int value="2" label="URL_CHECKS_MALWARE"/>
- <int value="3" label="HASH_CHECKS_TOTAL"/>
- <int value="4" label="HASH_CHECKS_MALWARE"/>
-</enum>
-
-<enum name="SB2FilterLoad" type="int">
- <int value="0" label="ALL"/>
- <int value="1" label="PREFIX_SET"/>
- <int value="2" label="BLOOM_FILTER"/>
-</enum>
-
-<enum name="SB2FormatEvent" type="int">
- <int value="0" label="FILE_CORRUPT"/>
- <int value="1" label="SQLITE_CORRUPT"/>
- <int value="2" label="FOUND_SQLITE"/>
- <int value="3" label="FOUND_UNKNOWN"/>
- <int value="4" label="SQLITE_DELETED"/>
- <int value="5" label="SQLITE_DELETE_FAILED"/>
- <int value="6" label="SQLITE_DELETED_ORIGINAL"/>
- <int value="7" label="SQLITE_DELETE_ORIGINAL_FAILED"/>
-</enum>
-
-<enum name="SB2GetHashResult" type="int">
- <int value="0" label="STATUS_200"/>
- <int value="1" label="STATUS_204"/>
- <int value="2" label="FULL_HASH_EMPTY"/>
- <int value="3" label="FULL_HASH_HIT"/>
- <int value="4" label="FULL_HASH_MISS"/>
-</enum>
-
-<enum name="SB2InterstitialAction" type="int">
- <int value="0" label="MALWARE_SHOW"/>
- <int value="1" label="MALWARE_DONT_PROCEED"/>
- <int value="2" label="MALWARE_FORCED_DONT_PROCEED"/>
- <int value="3" label="MALWARE_PROCEED"/>
- <int value="4" label="MULTIPLE_SHOW"/>
- <int value="5" label="MULTIPLE_DONT_PROCEED"/>
- <int value="6" label="MULTIPLE_FORCED_DONT_PROCEED"/>
- <int value="7" label="MULTIPLE_PROCEED"/>
- <int value="8" label="PHISHING_SHOW"/>
- <int value="9" label="PHISHING_DONT_PROCEED"/>
- <int value="10" label="PHISHING_FORCED_DONT_PROCEED"/>
- <int value="11" label="PHISHING_PROCEED"/>
- <int value="12" label="MALWARE_SHOW_ADVANCED"/>
- <int value="13" label="MULTIPLE_SHOW_ADVANCED"/>
- <int value="14" label="PHISHING_SHOW_ADVANCED"/>
-</enum>
-
-<enum name="SB2InterstitialActionDetails" type="int">
- <int value="0" label="MALWARE_SHOW_NEW_SITE"/>
- <int value="1" label="MALWARE_PROCEED_NEW_SITE"/>
- <int value="2" label="MALWARE_SHOW_CROSS_SITE"/>
- <int value="3" label="MALWARE_PROCEED_CROSS_SITE"/>
- <int value="4" label="PHISHING_SHOW_NEW_SITE"/>
- <int value="5" label="PHISHING_PROCEED_NEW_SITE"/>
- <int value="6" label="PHISHING_SHOW_CROSS_SITE"/>
- <int value="7" label="PHISHING_PROCEED_CROSS_SITE"/>
-</enum>
-
-<enum name="SB2PrefixSetEvent" type="int">
- <obsolete>
- Deprecated 9/2012. No longer generated.
- </obsolete>
- <int value="0" label="PREFIX_SET_HIT"/>
- <int value="1" label="BLOOM_HIT"/>
- <int value="2" label="BLOOM_MISS_PREFIX_SET_HIT"/>
- <int value="3" label="BLOOM_MISS_PREFIX_HIT_INVALID"/>
- <int value="4" label="GETPREFIXES_BROKEN"/>
- <int value="5" label="GETPREFIXES_BROKEN_SIZE"/>
- <int value="6" label="GETPREFIXES_FIRST_BROKEN"/>
- <int value="7" label="SBPREFIX_WAS_BROKEN"/>
- <int value="8" label="GETPREFIXES_BROKEN_SORTING"/>
- <int value="9" label="GETPREFIXES_BROKEN_DUPLICATION"/>
- <int value="10" label="GETPREFIX_UNSORTED_IS_DELTA"/>
- <int value="11" label="GETPREFIX_UNSORTED_IS_INDEX"/>
- <int value="12" label="CREATE_PREFIX_SET_CHECKSUM"/>
- <int value="13" label="CREATE_BLOOM_FILTER_CHECKSUM"/>
- <int value="14" label="CREATE_ADD_PREFIXES_CHECKSUM"/>
- <int value="15" label="CREATE_PREFIXES_CHECKSUM"/>
- <int value="16" label="GET_PREFIXES_CHECKSUM"/>
- <int value="17" label="MISMATCH_PREFIX_SET_CHECKSUM"/>
- <int value="18" label="MISMATCH_BLOOM_FILTER_CHECKSUM"/>
- <int value="19" label="BLOOM_MISS_PREFIX_HIT"/>
-</enum>
-
-<enum name="SB2SideEffectFreeWhitelistStatus" type="int">
- <int value="0" label="Enabled"/>
- <int value="1" label="Disabled"/>
-</enum>
-
-<enum name="SB2UpdateResult" type="int">
- <int value="0" label="FAIL"/>
- <int value="1" label="SUCCESS"/>
- <int value="2" label="BACKUP_CONNECT_FAIL"/>
- <int value="3" label="BACKUP_CONNECT_SUCCESS"/>
- <int value="4" label="BACKUP_HTTP_FAIL"/>
- <int value="5" label="BACKUP_HTTP_SUCCESS"/>
- <int value="6" label="BACKUP_NETWORK_FAIL"/>
- <int value="7" label="BACKUP_NETWORK_SUCCESS"/>
-</enum>
-
-<enum name="SBClientDownloadCheckDownloadStats" type="int">
- <int value="0" label="INVALID_URL"/>
- <int value="1" label="SB_DISABLED"/>
- <int value="2" label="WHITELISTED_URL"/>
- <int value="3" label="WHITELISTED_REFERRER"/>
- <int value="4" label="INVALID_REQUEST_PROTO"/>
- <int value="5" label="SERVER_PING_FAILED"/>
- <int value="6" label="INVALID_RESPONSE_PROTO"/>
- <int value="7" label="NOT_BINARY_FILE"/>
- <int value="8" label="REQUEST_CANCELED"/>
- <int value="9" label="DOWNLOAD_DANGEROUS"/>
- <int value="10" label="DOWNLOAD_SAFE"/>
- <int value="11" label="EMPTY_URL_CHAIN"/>
- <int value="12" label="HTTPS_URL"/>
- <int value="13" label="PING_DISABLED"/>
- <int value="14" label="TRUSTED_EXECUTABLE"/>
- <int value="15" label="OS_NOT_SUPPORTED"/>
- <int value="16" label="DOWNLOAD_UNCOMMON"/>
- <int value="17" label="DOWNLOAD_NOT_SUPPORTED"/>
- <int value="18" label="INVALID_RESPONSE_VERDICT"/>
- <int value="19" label="ARCHIVE_WITHOUT_BINARIES"/>
- <int value="20" label="DOWNLOAD_DANGEROUS_HOST"/>
- <int value="21" label="DOWNLOAD_POTENTIALLY_UNWANTED"/>
-</enum>
-
-<enum name="SBClientDownloadExtensions" type="int">
- <int value="0" label="EXE"/>
- <int value="1" label="MSI"/>
- <int value="2" label="CAB"/>
- <int value="3" label="SYS"/>
- <int value="4" label="SCR"/>
- <int value="5" label="DRV"/>
- <int value="6" label="BAT"/>
- <int value="7" label="ZIP"/>
- <int value="8" label="RAR"/>
- <int value="9" label="DLL"/>
- <int value="10" label="PIF"/>
- <int value="11" label="COM"/>
- <int value="12" label="JAR"/>
- <int value="13" label="CLASS"/>
- <int value="14" label="PDF"/>
- <int value="15" label="VB"/>
- <int value="16" label="REG"/>
- <int value="17" label="GRP"/>
- <int value="18" label="OTHER"/>
- <int value="19" label="CRX"/>
- <int value="20" label="APK"/>
-</enum>
-
-<enum name="SBClientDownloadIsSignedBinary" type="int">
- <int value="0" label="Unsigned"/>
- <int value="1" label="Signed"/>
-</enum>
-
-<enum name="SBClientMalwareSentReports" type="int">
- <int value="0" label="Sent"/>
- <int value="1" label="Hit limit"/>
- <int value="2" label="Failed serialization"/>
-</enum>
-
-<enum name="SBClientPhishingCancelClassificationReason" type="int">
- <int value="0" label="NAVIGATE_AWAY"/>
- <int value="1" label="NAVIGATE_WITHIN_PAGE"/>
- <int value="2" label="PAGE_RECAPTURED"/>
- <int value="3" label="SHUTDOWN"/>
- <int value="4" label="NEW_PHISHING_SCORER"/>
-</enum>
-
-<enum name="SBClientPhishingClientModelStatus" type="int">
- <int value="0" label="MODEL_SUCCESS"/>
- <int value="1" label="MODEL_NOT_CHANGED"/>
- <int value="2" label="MODEL_FETCH_FAILED"/>
- <int value="3" label="MODEL_EMPTY"/>
- <int value="4" label="MODEL_TOO_LARGE"/>
- <int value="5" label="MODEL_PARSE_ERROR"/>
- <int value="6" label="MODEL_MISSING_FIELDS"/>
- <int value="7" label="MODEL_INVALID_VERSION_NUMBER"/>
-</enum>
-
-<enum name="SBClientPhishingPreClassificationCheckFail" type="int">
- <int value="0" label="PROXY_FETCH"/>
- <int value="1" label="PRIVATE_IP"/>
- <int value="2" label="OFF_THE_RECORD"/>
- <int value="3" label="MATCH_CSD_WHITELIST"/>
- <int value="4" label="TOO_MANY_REPORTS"/>
- <int value="5" label="UNSUPPORTED_MIME_TYPE"/>
-</enum>
-
-<enum name="SBClientPhishingScorerCreationStatus" type="int">
- <int value="0" label="SUCCESS"/>
- <int value="1" label="MODEL_OPEN_FAIL"/>
- <int value="2" label="MODEL_FILE_EMPTY"/>
- <int value="3" label="MODEL_FILE_TOO_LARGE"/>
- <int value="4" label="MODEL_PARSE_ERROR"/>
- <int value="5" label="MODEL_MISSING_FIELDS"/>
-</enum>
-
-<enum name="SBDownloadFeedbackUploadResult" type="int">
- <int value="0" label="SUCCESS"/>
- <int value="1" label="UPLOAD_SUCCESS"/>
- <int value="2" label="UPLOAD_CANCELLED"/>
- <int value="3" label="UPLOAD_METADATA_NET_ERROR"/>
- <int value="4" label="UPLOAD_METADATA_RESPONSE_ERROR"/>
- <int value="5" label="UPLOAD_FILE_NET_ERROR"/>
- <int value="6" label="UPLOAD_FILE_RESPONSE_ERROR"/>
- <int value="7" label="UPLOAD_COMPLETE_RESPONSE_ERROR"/>
-</enum>
-
-<enum name="ScrollThread" type="int">
- <int value="0" label="Scroll on impl-thread"/>
- <int value="1" label="Scroll on main-thread"/>
-</enum>
-
-<enum name="SearchEngine" type="int">
- <obsolete>
- Deprecated 8/2013. No longer generated.
- </obsolete>
- <summary>
- Indices of most popular prepopulated search engines as defined in
- chrome/browser/search_engines/search_engine_type.h.
- </summary>
- <int value="0" label="OTHER"/>
- <int value="1" label="GOOGLE"/>
- <int value="2" label="YAHOO"/>
- <int value="3" label="YAHOOJP"/>
- <int value="4" label="BING"/>
- <int value="5" label="ASK"/>
- <int value="6" label="YANDEX"/>
- <int value="7" label="SEZNAM"/>
- <int value="8" label="CENTRUM"/>
- <int value="9" label="NETSPRINT"/>
- <int value="10" label="VIRGILIO"/>
- <int value="11" label="MAILRU"/>
- <int value="12" label="ABCSOK"/>
- <int value="13" label="ALTAVISTA"/>
- <int value="14" label="BAIDU"/>
- <int value="15" label="DAUM"/>
- <int value="16" label="DELFI"/>
- <int value="17" label="DIRI"/>
- <int value="18" label="GOO"/>
- <int value="19" label="IN"/>
- <int value="20" label="NAJDI"/>
- <int value="21" label="NAVER"/>
- <int value="22" label="NETI"/>
- <int value="23" label="OK"/>
- <int value="24" label="POGODAK"/>
- <int value="25" label="POGODOK_MK"/>
- <int value="26" label="RAMBLER"/>
- <int value="27" label="SANOOK"/>
- <int value="28" label="SAPO"/>
- <int value="29" label="TUT"/>
- <int value="30" label="WALLA"/>
- <int value="31" label="ZOZNAM"/>
- <int value="32" label="YAHOOQC"/>
- <int value="33" label="NONE"/>
-</enum>
-
-<enum name="SessionStartupPref" type="int">
- <int value="0" label="Open home page (unused)"/>
- <int value="1" label="Continue from last opened pages"/>
- <int value="4" label="Open URLs"/>
- <int value="5" label="Open new tab page"/>
-</enum>
-
-<enum name="SessionStartupType" type="int">
- <obsolete>
- Deprecated 8/2013. No longer generated.
- </obsolete>
- <int value="0" label="New Tab page"/>
- <int value="1" label="Homepage (DEPRECATED)"/>
- <int value="2" label="Last session"/>
- <int value="3" label="Specified URLs"/>
-</enum>
-
-<enum name="ShelfAlignmentValue" type="int">
- <summary>
- The alignment of the shelf area (see ash/launcher/launcher_view.cc).
- </summary>
- <int value="0" label="Bottom"/>
- <int value="1" label="Left"/>
- <int value="2" label="Right"/>
-</enum>
-
-<enum name="ShillTerminationActionResult" type="int">
- <summary>
- The termination action result types come from TerminationActionResult in
- shill/metrics.h
- </summary>
- <int value="0" label="Success"/>
- <int value="1" label="Failure"/>
-</enum>
-
-<enum name="SideloadUIEvents" type="int">
- <int value="0" label="Extension installed"/>
- <int value="1" label="Extension ignored"/>
- <int value="2" label="Extension re-enabled"/>
- <int value="3" label="Extension uninstalled"/>
-</enum>
-
-<enum name="SideloadWipeoutBubble" type="int">
- <int value="0" label="Learn more"/>
- <int value="1" label="Settings page"/>
- <int value="2" label="Dismiss"/>
-</enum>
-
-<enum name="SigninFlowConfirmations" type="int">
- <int value="0" label="Shown"/>
- <int value="1" label="OK"/>
- <int value="2" label="Return"/>
- <int value="3" label="Advanced"/>
- <int value="4" label="Close"/>
- <int value="5" label="Escape"/>
- <int value="6" label="Undo"/>
- <int value="7" label="Learn more"/>
- <int value="8" label="Learn more ok"/>
- <int value="9" label="Learn more return"/>
- <int value="10" label="Learn more advanced"/>
- <int value="11" label="Learn more close"/>
- <int value="12" label="Learn more escape"/>
- <int value="13" label="Learn more undo"/>
-</enum>
-
-<enum name="SimpleCache.EntryCreatedAndStream2Omitted" type="int">
- <int value="0" label="Stream 2 file was present"/>
- <int value="1" label="Empty stream 2 file was omitted"/>
-</enum>
-
-<enum name="SimpleCache.EntryOpenedAndStream2Removed" type="int">
- <int value="0" label="Stream 2 file was already omitted or not empty"/>
- <int value="1" label="Empty stream 2 file removed"/>
-</enum>
-
-<enum name="SimpleCache.FileDescriptorLimitStatus" type="int">
- <int value="0" label="Unsupported"/>
- <int value="1" label="Supported but failed"/>
- <int value="2" label="Succeeded"/>
-</enum>
-
-<enum name="SimpleCacheHeaderSizeChange" type="int">
- <int value="0" label="Written for the first time"/>
- <int value="1" label="Rewritten with same size"/>
- <int value="2" label="Rewritten with larger size"/>
- <int value="3" label="Rewritten with smaller size"/>
- <int value="4" label="Unexpected header stream write"/>
-</enum>
-
-<enum name="SimpleCacheIndexInitializeMethod" type="int">
- <int value="0" label="Directory Scan"/>
- <int value="1" label="Index File"/>
- <int value="2" label="New Cache"/>
-</enum>
-
-<enum name="SimpleCacheOpenEntryIndexState" type="int">
- <int value="0" label="No index"/>
- <int value="1" label="Hit"/>
- <int value="2" label="Miss"/>
-</enum>
-
-<enum name="SimpleCacheReadParallelizable" type="int">
- <int value="0" label="Standalone Read (obsolete)"/>
- <int value="1" label="Follows read"/>
- <int value="2" label="Follows conflicting write"/>
- <int value="3" label="Follows non conflicting write"/>
- <int value="4" label="Follows other operation"/>
- <int value="5" label="Read alone in queue"/>
-</enum>
-
-<enum name="SimpleCacheReadResult" type="int">
- <int value="0" label="Success"/>
- <int value="1" label="Invalid Argument"/>
- <int value="2" label="Nonblocking Empty Return"/>
- <int value="3" label="Invalid State"/>
- <int value="4" label="Fast Empty Return"/>
- <int value="5" label="Synchronous Read Failure"/>
- <int value="6" label="Synchronous Checksum Failure"/>
-</enum>
-
-<enum name="SimpleCacheSyncCheckEOFResult" type="int">
- <int value="0" label="Success"/>
- <int value="1" label="Read Failure"/>
- <int value="2" label="Magic Number Mismatch"/>
- <int value="3" label="CRC Mismatch"/>
-</enum>
-
-<enum name="SimpleCacheSyncCloseResult" type="int">
- <int value="0" label="Success"/>
- <int value="1" label="Write Failure"/>
-</enum>
-
-<enum name="SimpleCacheSyncCreateResult" type="int">
- <int value="0" label="Success"/>
- <int value="1" label="Platform File Error"/>
- <int value="2" label="Can't Write Header"/>
- <int value="3" label="Can't Write Key"/>
-</enum>
-
-<enum name="SimpleCacheSyncOpenResult" type="int">
- <int value="0" label="Success"/>
- <int value="1" label="Platform File Error"/>
- <int value="2" label="Can't Read Header"/>
- <int value="3" label="Bad Magic Number"/>
- <int value="4" label="Bad Version"/>
- <int value="5" label="Can't Read Key"/>
- <int value="6" label="Key Mismatch (obsolete)"/>
- <int value="7" label="Hash Mismatch"/>
-</enum>
-
-<enum name="SimpleCacheSyncWriteResult" type="int">
- <int value="0" label="Success"/>
- <int value="1" label="Pretruncate Failure"/>
- <int value="2" label="Write Failure"/>
- <int value="3" label="Truncate Failure"/>
-</enum>
-
-<enum name="SimpleCacheWriteDependencyType" type="int">
- <int value="0" label="First operation in the queue (Optimistic)"/>
- <int value="1" label="Follows conflicting optimistic write"/>
- <int value="2" label="Follows non conflicting optimistic write"/>
- <int value="3" label="Follows conflicting conservative write"/>
- <int value="4" label="Follows non conflicting conservative write"/>
- <int value="5" label="Follows conflicting read"/>
- <int value="6" label="Follows non conflicting read"/>
- <int value="7" label="Follows other operation"/>
-</enum>
-
-<enum name="SimpleCacheWriteResult" type="int">
- <int value="0" label="Success"/>
- <int value="1" label="Invalid Argument"/>
- <int value="2" label="Over Max Size"/>
- <int value="3" label="Bad State"/>
- <int value="4" label="Synchronous Write Failure"/>
- <int value="5" label="Fast Empty Return (Success)"/>
-</enum>
-
-<enum name="SimpleIndexState" type="int">
- <int value="0" label="Corrupt"/>
- <int value="1" label="Stale"/>
- <int value="2" label="Fresh"/>
- <int value="3" label="Fresh index with cache updated since backend start"/>
-</enum>
-
-<enum name="SiteIsolationMimeType" type="int">
- <int value="0" label="HTML"/>
- <int value="1" label="XML"/>
- <int value="2" label="JSON"/>
- <int value="3" label="Plain"/>
- <int value="4" label="Others"/>
-</enum>
-
-<enum name="SiteIsolationResourceType" type="int">
- <int value="0" label="MAIN_FRAME"/>
- <int value="1" label="SUB_FRAME"/>
- <int value="2" label="STYLESHEET"/>
- <int value="3" label="SCRIPT"/>
- <int value="4" label="IMAGE"/>
- <int value="5" label="FONT_RESOURCE"/>
- <int value="6" label="SUB_RESOURCE"/>
- <int value="7" label="OBJECT"/>
- <int value="8" label="MEDIA"/>
- <int value="9" label="WORKER"/>
- <int value="10" label="SHARED_WORKER"/>
- <int value="11" label="PREFETCH"/>
- <int value="12" label="FAVICON"/>
- <int value="13" label="XHR"/>
- <int value="14" label="PING"/>
-</enum>
-
-<enum name="SocketStreamConnectionType" type="int">
- <int value="0" label="none"/>
- <int value="1" label="all connections"/>
- <int value="2" label="tunnel connections"/>
- <int value="3" label="socks connections"/>
- <int value="4" label="ssl connections"/>
-</enum>
-
-<enum name="SocketStreamProtocolType" type="int">
- <int value="0" label="unknown"/>
- <int value="1" label="ws"/>
- <int value="2" label="wss"/>
-</enum>
-
-<enum name="SpdyFrameFlowControlState" type="int">
- <int value="0" label="Send not stalled"/>
- <int value="1" label="Send stalled by stream"/>
- <int value="2" label="Send stalled by session"/>
- <int value="3" label="Send stalled by stream and session"/>
-</enum>
-
-<enum name="SpdyIPPoolDomainMatch" type="int">
- <int value="0" label="mismatch"/>
- <int value="1" label="match"/>
-</enum>
-
-<!-- Replaced by SpdyProtocolErrorDetails2 on 2013-04-19. -->
-
-<enum name="SpdyProtocolErrorDetails" type="int">
- <int value="0" label="No error"/>
- <int value="1" label="Invalid Control Frame"/>
- <int value="2" label="Control Frame Payload Too Large"/>
- <int value="3" label="Zlib Init Failure"/>
- <int value="4" label="Unsupported Version"/>
- <int value="5" label="Decompress Failure"/>
- <int value="6" label="Compress Failure"/>
- <int value="7" label="Credential Frame Corrupt"/>
- <int value="8" label="Invalid Data Frame Flags"/>
-<!-- r181910 added an enum value here, so don't trust the counts for
- the values below for Chrome builds after that revision. -->
-
- <int value="9" label="Invalid Status Code"/>
- <int value="10" label="Protocol Error"/>
- <int value="11" label="Invalid Stream"/>
- <int value="12" label="Refused Stream"/>
- <int value="13" label="Unsupported Version"/>
- <int value="14" label="Cancel"/>
- <int value="15" label="Internal Error"/>
- <int value="16" label="Flow Control Error"/>
- <int value="17" label="Stream In Use"/>
- <int value="18" label="Stream Already Closed"/>
- <int value="19" label="Invalid Credentials"/>
- <int value="20" label="Frame Too Large"/>
- <int value="21" label="Unexpected Ping"/>
- <int value="22" label="Rst Stream For Non Active Stream"/>
- <int value="23" label="Spdy Compression Failure"/>
- <int value="24" label="Request For Secure Content Over Insecure Session"/>
- <int value="25" label="Protocol Error Syn Reply Not Received"/>
- <int value="26" label="Num Spdy Protocol Error Details"/>
-</enum>
-
-<enum name="SpdyProtocolErrorDetails2" type="int">
-<!-- SpdyFramer::SpdyErrors -->
-
- <int value="0" label="No error"/>
- <int value="1" label="Invalid Control Frame"/>
- <int value="2" label="Control Frame Payload Too Large"/>
- <int value="3" label="Zlib Init Failure"/>
- <int value="4" label="Unsupported Version"/>
- <int value="5" label="Decompress Failure"/>
- <int value="6" label="Compress Failure"/>
- <int value="7" label="Credential Frame Corrupt"/>
- <int value="8" label="Invalid Data Frame Flags"/>
- <int value="9" label="Invalid Control Frame Flags"/>
-<!-- SpdyRstStreamStatus -->
-
- <int value="10" label="(Unused)"/>
- <int value="11" label="Protocol Error"/>
- <int value="12" label="Invalid Stream"/>
- <int value="13" label="Refused Stream"/>
- <int value="14" label="Unsupported Version"/>
- <int value="15" label="Cancel"/>
- <int value="16" label="Internal Error"/>
- <int value="17" label="Flow Control Error"/>
- <int value="18" label="Stream In Use"/>
- <int value="19" label="Stream Already Closed"/>
- <int value="20" label="Invalid Credentials"/>
- <int value="21" label="Frame Too Large"/>
-<!-- SpdySession errors -->
-
- <int value="22" label="Unexpected Ping"/>
- <int value="23" label="Rst Stream For Non Active Stream"/>
- <int value="24" label="Spdy Compression Failure"/>
- <int value="25" label="Request For Secure Content Over Insecure Session"/>
- <int value="26" label="Syn Reply Not Received"/>
- <int value="27" label="Invalid Window Update Size"/>
- <int value="28" label="Receive Window Size Violation"/>
- <int value="29" label="(Unused)"/>
-</enum>
-
-<enum name="SpdySessionGet" type="int">
- <int value="0" label="created new"/>
- <int value="1" label="found existing"/>
- <int value="2" label="found existing from IP Pool"/>
- <int value="3" label="imported from socket"/>
-</enum>
-
-<enum name="SpdySettingsReceived" type="int">
- <int value="0" label="not received"/>
- <int value="1" label="received"/>
-</enum>
-
-<enum name="SpdySettingsSent" type="int">
- <int value="0" label="not sent"/>
- <int value="1" label="sent"/>
-</enum>
-
-<enum name="SpecialShFileOperationCodes" type="int">
- <summary>Legacy error codes still returned by |ShFileOperation()|</summary>
- <int value="5" label="Access denied"/>
- <int value="113" label="Source and Destination are same file"/>
- <int value="114" label="Multiple source mapped to single destination"/>
- <int value="115" label="Rename to different directory"/>
- <int value="116" label="Source root"/>
- <int value="117" label="Canceled by user"/>
- <int value="118" label="Destination is subtree of source"/>
- <int value="120" label="Denied by security settings"/>
- <int value="121" label="Path length exceeded MAX_PATH"/>
- <int value="122" label="Multiple destination paths"/>
- <int value="124" label="Path invalid"/>
- <int value="125" label="Source and destination have same parent"/>
- <int value="126" label="Destination exists"/>
- <int value="128" label="Destination exists as folder"/>
- <int value="129" label="Name length exceeded MAX_PATH"/>
- <int value="130" label="Destination read-only CD-ROM"/>
- <int value="131" label="Destination read-only DVD"/>
- <int value="132" label="Destination writable CD-ROM"/>
- <int value="133" label="File too large"/>
- <int value="134" label="Source read-only CD-ROM"/>
- <int value="135" label="Source read-only DVD"/>
- <int value="136" label="Source writable CD-ROM"/>
- <int value="183" label="Operation exceeded MAX_PATH"/>
- <int value="1026" label="Invalid path / unknown"/>
- <int value="65536" label="Unspecified destination error"/>
- <int value="65652" label="Destination root"/>
-</enum>
-
-<enum name="SpeculativeRestoreApplicability" type="int">
- <int value="0" label="Applicable"/>
- <int value="1" label="Not applicable (tablet)"/>
- <int value="2" label="Not applicable (low-memory device)"/>
- <int value="3" label="Not applicable (bandwidth management)"/>
-</enum>
-
-<enum name="SpeculativeRestorePredictionAccuracy" type="int">
- <int value="0" label="Hit"/>
- <int value="1" label="Miss (different tab)"/>
- <int value="2" label="Miss (tab not switched)"/>
-</enum>
-
-<enum name="SpeculativeRestoreTabStatus" type="int">
- <int value="0" label="Already loaded"/>
- <int value="1" label="Needs restore"/>
-</enum>
-
-<enum name="SqliteErrorCode" type="int">
- <summary>Error codes returned by SQLite - see sqlite3.h</summary>
- <int value="0" label="SQLITE_OK">Successful result</int>
- <int value="1" label="SQLITE_ERROR">SQL error or missing database</int>
- <int value="2" label="SQLITE_INTERNAL">
- NOT USED. Internal logic error in SQLite
- </int>
- <int value="3" label="SQLITE_PERM">Access permission denied</int>
- <int value="4" label="SQLITE_ABORT">Callback routine requested an abort</int>
- <int value="5" label="SQLITE_BUSY">The database file is locked</int>
- <int value="6" label="SQLITE_LOCKED">A table in the database is locked</int>
- <int value="7" label="SQLITE_NOMEM">A malloc() failed</int>
- <int value="8" label="SQLITE_READONLY">
- Attempt to write a readonly database
- </int>
- <int value="9" label="SQLITE_INTERRUPT">
- Operation terminated by sqlite3_interrupt()
- </int>
- <int value="10" label="SQLITE_IOERR">
- Some kind of disk I/O error occurred
- </int>
- <int value="11" label="SQLITE_CORRUPT">
- The database disk image is malformed
- </int>
- <int value="12" label="SQLITE_NOTFOUND">
- NOT USED. Table or record not found
- </int>
- <int value="13" label="SQLITE_FULL">
- Insertion failed because database is full
- </int>
- <int value="14" label="SQLITE_CANTOPEN">Unable to open the database file</int>
- <int value="15" label="SQLITE_PROTOCOL">
- NOT USED. Database lock protocol error
- </int>
- <int value="16" label="SQLITE_EMPTY">Database is empty</int>
- <int value="17" label="SQLITE_SCHEMA">The database schema changed</int>
- <int value="18" label="SQLITE_TOOBIG">String or BLOB exceeds size limit</int>
- <int value="19" label="SQLITE_CONSTRAINT">
- Abort due to contraint violation
- </int>
- <int value="20" label="SQLITE_MISMATCH">Data type mismatch</int>
- <int value="21" label="SQLITE_MISUSE">Library used incorrectly</int>
- <int value="22" label="SQLITE_NOLFS">
- Uses OS features not supported on host
- </int>
- <int value="23" label="SQLITE_AUTH">Authorization denied</int>
- <int value="24" label="SQLITE_FORMAT">Auxiliary database format error</int>
- <int value="25" label="SQLITE_RANGE">
- 2nd parameter to sqlite3_bind() out of range
- </int>
- <int value="26" label="SQLITE_NOTADB">
- File opened that is not a database file
- </int>
- <int value="100" label="SQLITE_ROW">sqlite3_step() has another row ready</int>
- <int value="101" label="SQLITE_DONE">
- sqlite3_step() has finished executing
- </int>
- <int value="261" label="SQLITE_BUSY_RECOVERY">TBD</int>
- <int value="262" label="SQLITE_LOCKED_SHAREDCACHE">TBD</int>
- <int value="266" label="SQLITE_IOERR_READ">Error reading from file</int>
- <int value="270" label="SQLITE_CANTOPEN_NOTEMPDIR">TBD</int>
- <int value="522" label="SQLITE_IOERR_SHORT_READ">Short read from file</int>
- <int value="778" label="SQLITE_IOERR_WRITE">
- Error writing to file (other than SQLITE_FULL)
- </int>
- <int value="1034" label="SQLITE_IOERR_FSYNC">Error syncing to disk</int>
- <int value="1290" label="SQLITE_IOERR_DIR_FSYNC">
- Error syncing directory changes to disk
- </int>
- <int value="1546" label="SQLITE_IOERR_TRUNCATE">Error truncating file</int>
- <int value="1802" label="SQLITE_IOERR_FSTAT">Error reading file metadata</int>
- <int value="2058" label="SQLITE_IOERR_UNLOCK">Error unlocking file</int>
- <int value="2314" label="SQLITE_IOERR_RDLOCK">
- Error getting read lock - should not be possible
- </int>
- <int value="2570" label="SQLITE_IOERR_DELETE">Error deleting file</int>
- <int value="2826" label="SQLITE_IOERR_BLOCKED">
- Deadlock due to other process access to SQLite files
- </int>
- <int value="3082" label="SQLITE_IOERR_NOMEM">Error mapping shared memory</int>
- <int value="3338" label="SQLITE_IOERR_ACCESS">
- Error getting file attributes (other than not found)
- </int>
- <int value="3594" label="SQLITE_IOERR_CHECKRESERVEDLOCK">
- Error while querying lock status
- </int>
- <int value="3850" label="SQLITE_IOERR_LOCK">Error acquiring lock</int>
- <int value="4106" label="SQLITE_IOERR_CLOSE">Error closing file</int>
- <int value="4362" label="SQLITE_IOERR_DIR_CLOSE">Unused</int>
- <int value="4618" label="SQLITE_IOERR_SHMOPEN">Error mmapping file</int>
- <int value="4874" label="SQLITE_IOERR_SHMSIZE">
- Error in stat while mmapping file
- </int>
- <int value="5130" label="SQLITE_IOERR_SHMLOCK">Unused</int>
-</enum>
-
-<enum name="SqliteIOERRCode" type="int">
- <obsolete>
- Replaced 5/14/2013 by expanded Sqlite.Error histogram.
- </obsolete>
- <summary>Extended error codes returned by SQLite - see sqlite3.h</summary>
- <int value="0" label="SQLITE_IOERR">No extended code given</int>
- <int value="1" label="SQLITE_IOERR_READ">Error reading from file</int>
- <int value="2" label="SQLITE_IOERR_SHORT_READ">Short read from file</int>
- <int value="3" label="SQLITE_IOERR_WRITE">
- Error writing to file (other than SQLITE_FULL)
- </int>
- <int value="4" label="SQLITE_IOERR_FSYNC">Error syncing to disk</int>
- <int value="5" label="SQLITE_IOERR_DIR_FSYNC">
- Error syncing directory changes to disk
- </int>
- <int value="6" label="SQLITE_IOERR_TRUNCATE">Error truncating file</int>
- <int value="7" label="SQLITE_IOERR_FSTAT">Error reading file metadata</int>
- <int value="8" label="SQLITE_IOERR_UNLOCK">Error unlocking file</int>
- <int value="9" label="SQLITE_IOERR_RDLOCK">
- Error getting read lock - should not be possible
- </int>
- <int value="10" label="SQLITE_IOERR_DELETE">Error deleting file</int>
- <int value="11" label="SQLITE_IOERR_BLOCKED">
- Deadlock due to other process access to SQLite files
- </int>
- <int value="12" label="SQLITE_IOERR_NOMEM">Error mapping shared memory</int>
- <int value="13" label="SQLITE_IOERR_ACCESS">
- Error getting file attributes (other than not found)
- </int>
- <int value="14" label="SQLITE_IOERR_CHECKRESERVEDLOCK">
- Error while querying lock status
- </int>
- <int value="15" label="SQLITE_IOERR_LOCK">Error acquiring lock</int>
- <int value="16" label="SQLITE_IOERR_CLOSE">Error closing file</int>
- <int value="17" label="SQLITE_IOERR_DIR_CLOSE">Unused</int>
- <int value="18" label="SQLITE_IOERR_SHMOPEN">Error mmapping file</int>
- <int value="19" label="SQLITE_IOERR_SHMSIZE">
- Error in stat while mmapping file
- </int>
- <int value="20" label="SQLITE_IOERR_SHMLOCK">Unused</int>
-</enum>
-
-<enum name="SqliteRecoveryEventEnum" type="int">
- <summary>
- Track successful completion or failure of sql::Recovery implementation.
- </summary>
- <int value="0" label="RECOVERY_SUCCESS_BEGIN">
- sql::Recovery::Init() (helper for Begin()) completely successfully.
- </int>
- <int value="1" label="RECOVERY_FAILED_OPEN_TEMPORARY">
- Failed to open temporary database to recover into.
- </int>
- <int value="2" label="RECOVERY_FAILED_VIRTUAL_TABLE_INIT">
- Failed to initialize recover vtable subsystem for connection.
- </int>
- <int value="3" label="RECOVERY_FAILED_VIRTUAL_TABLE_SYSTEM_SQLITE">
- USE_SYSTEM_SQLITE in force, recovery virtual table not available.
- </int>
- <int value="4" label="RECOVERY_FAILED_WRITABLE_SCHEMA">
- Failed to enable writable_schema.
- </int>
- <int value="5" label="RECOVERY_FAILED_ATTACH">
- Failed to attach corrupt database to recovery database.
- </int>
- <int value="6" label="RECOVERY_SUCCESS_BACKUP">
- sql::Recovery::Backup() (helper for Recovered()) completely successfully.
- </int>
- <int value="7" label="RECOVERY_FAILED_BACKUP_INIT">
- Failed sqlite3_backup_init(). Error code in Sqlite.RecoveryHandle.
- </int>
- <int value="8" label="RECOVERY_FAILED_BACKUP_STEP">
- Failed sqlite3_backup_step(). Error code in Sqlite.RecoveryStep.
- </int>
- <int value="9" label="RECOVERY_SUCCESS_AUTORECOVER">
- sql::Recovery::AutoRecoverTable() completed successfully.
- </int>
- <int value="10" label="RECOVERY_FAILED_AUTORECOVER_UNRECOGNIZED_TYPE">
- Failed sqlite3_backup_step(). Error code in Sqlite.RecoveryStep.
- </int>
- <int value="11" label="RECOVERY_FAILED_AUTORECOVER_MISSING_TABLE">
- AutoRecoverTable() could not find the target table.
- </int>
- <int value="12" label="RECOVERY_FAILED_AUTORECOVER_CREATE">
- AutoRecoverTable() failed creating recovery vtable.
- </int>
- <int value="13" label="RECOVERY_FAILED_AUTORECOVER_INSERT">
- AutoRecoverTable() failed copying data from recovery to target table.
- </int>
- <int value="14" label="RECOVERY_FAILED_AUTORECOVER_DROP">
- AutoRecoverTable() failed to drop recovery table.
- </int>
- <int value="15" label="RECOVERY_SUCCESS_SETUP_META">
- sql::Recovery::SetupMeta() completed successfully.
- </int>
- <int value="16" label="RECOVERY_FAILED_META_CREATE">
- SetupMeta() failed to create meta recovery table.
- </int>
- <int value="17" label="RECOVERY_SUCCESS_META_VERSION">
- GetMetaVersionNumber() found no version row in meta table.
- </int>
- <int value="18" label="RECOVERY_FAILED_META_QUERY">
- GetMetaVersionNumber() failed querying recovery meta table.
- </int>
- <int value="19" label="RECOVERY_FAILED_META_NO_VERSION">
- GetMetaVersionNumber() found no version row in meta table.
- </int>
-</enum>
-
-<enum name="SqliteVersionDeprecation" type="int">
- <summary>Sqlite database version deprecation status</summary>
- <int value="0" label="DEPRECATION_DATABASE_NOT_EMPTY">
- Database has tables, but no meta table.
- </int>
- <int value="1" label="DEPRECATION_DATABASE_UNKNOWN">
- Failure figuring out if database has tables.
- </int>
- <int value="2" label="DEPRECATION_FAILED_VERSION">
- Failed querying meta table.
- </int>
- <int value="3" label="DEPRECATION_NO_VERSION">
- No version row in meta table.
- </int>
- <int value="4" label="DEPRECATION_RAZED">Raze succeeded.</int>
- <int value="5" label="DEPRECATION_RAZE_FAILED">Raze failed.</int>
-</enum>
-
-<enum name="SSLCipherSuite" type="int">
- <summary>SSL/TLS cipher suites from the IANA registry</summary>
- <int value="0" label="TLS_NULL_WITH_NULL_NULL"/>
- <int value="1" label="TLS_RSA_WITH_NULL_MD5"/>
- <int value="2" label="TLS_RSA_WITH_NULL_SHA"/>
- <int value="3" label="TLS_RSA_EXPORT_WITH_RC4_40_MD5"/>
- <int value="4" label="TLS_RSA_WITH_RC4_128_MD5"/>
- <int value="5" label="TLS_RSA_WITH_RC4_128_SHA"/>
- <int value="6" label="TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5"/>
- <int value="7" label="TLS_RSA_WITH_IDEA_CBC_SHA"/>
- <int value="8" label="TLS_RSA_EXPORT_WITH_DES40_CBC_SHA"/>
- <int value="9" label="TLS_RSA_WITH_DES_CBC_SHA"/>
- <int value="10" label="TLS_RSA_WITH_3DES_EDE_CBC_SHA"/>
- <int value="11" label="TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA"/>
- <int value="12" label="TLS_DH_DSS_WITH_DES_CBC_SHA"/>
- <int value="13" label="TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA"/>
- <int value="14" label="TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA"/>
- <int value="15" label="TLS_DH_RSA_WITH_DES_CBC_SHA"/>
- <int value="16" label="TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA"/>
- <int value="17" label="TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA"/>
- <int value="18" label="TLS_DHE_DSS_WITH_DES_CBC_SHA"/>
- <int value="19" label="TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA"/>
- <int value="20" label="TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA"/>
- <int value="21" label="TLS_DHE_RSA_WITH_DES_CBC_SHA"/>
- <int value="22" label="TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA"/>
- <int value="23" label="TLS_DH_anon_EXPORT_WITH_RC4_40_MD5"/>
- <int value="24" label="TLS_DH_anon_WITH_RC4_128_MD5"/>
- <int value="25" label="TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA"/>
- <int value="26" label="TLS_DH_anon_WITH_DES_CBC_SHA"/>
- <int value="27" label="TLS_DH_anon_WITH_3DES_EDE_CBC_SHA"/>
- <int value="30" label="TLS_KRB5_WITH_DES_CBC_SHA"/>
- <int value="31" label="TLS_KRB5_WITH_3DES_EDE_CBC_SHA"/>
- <int value="32" label="TLS_KRB5_WITH_RC4_128_SHA"/>
- <int value="33" label="TLS_KRB5_WITH_IDEA_CBC_SHA"/>
- <int value="34" label="TLS_KRB5_WITH_DES_CBC_MD5"/>
- <int value="35" label="TLS_KRB5_WITH_3DES_EDE_CBC_MD5"/>
- <int value="36" label="TLS_KRB5_WITH_RC4_128_MD5"/>
- <int value="37" label="TLS_KRB5_WITH_IDEA_CBC_MD5"/>
- <int value="38" label="TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA"/>
- <int value="39" label="TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA"/>
- <int value="40" label="TLS_KRB5_EXPORT_WITH_RC4_40_SHA"/>
- <int value="41" label="TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5"/>
- <int value="42" label="TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5"/>
- <int value="43" label="TLS_KRB5_EXPORT_WITH_RC4_40_MD5"/>
- <int value="44" label="TLS_PSK_WITH_NULL_SHA"/>
- <int value="45" label="TLS_DHE_PSK_WITH_NULL_SHA"/>
- <int value="46" label="TLS_RSA_PSK_WITH_NULL_SHA"/>
- <int value="47" label="TLS_RSA_WITH_AES_128_CBC_SHA"/>
- <int value="48" label="TLS_DH_DSS_WITH_AES_128_CBC_SHA"/>
- <int value="49" label="TLS_DH_RSA_WITH_AES_128_CBC_SHA"/>
- <int value="50" label="TLS_DHE_DSS_WITH_AES_128_CBC_SHA"/>
- <int value="51" label="TLS_DHE_RSA_WITH_AES_128_CBC_SHA"/>
- <int value="52" label="TLS_DH_anon_WITH_AES_128_CBC_SHA"/>
- <int value="53" label="TLS_RSA_WITH_AES_256_CBC_SHA"/>
- <int value="54" label="TLS_DH_DSS_WITH_AES_256_CBC_SHA"/>
- <int value="55" label="TLS_DH_RSA_WITH_AES_256_CBC_SHA"/>
- <int value="56" label="TLS_DHE_DSS_WITH_AES_256_CBC_SHA"/>
- <int value="57" label="TLS_DHE_RSA_WITH_AES_256_CBC_SHA"/>
- <int value="58" label="TLS_DH_anon_WITH_AES_256_CBC_SHA"/>
- <int value="59" label="TLS_RSA_WITH_NULL_SHA256"/>
- <int value="60" label="TLS_RSA_WITH_AES_128_CBC_SHA256"/>
- <int value="61" label="TLS_RSA_WITH_AES_256_CBC_SHA256"/>
- <int value="62" label="TLS_DH_DSS_WITH_AES_128_CBC_SHA256"/>
- <int value="63" label="TLS_DH_RSA_WITH_AES_128_CBC_SHA256"/>
- <int value="64" label="TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"/>
- <int value="65" label="TLS_RSA_WITH_CAMELLIA_128_CBC_SHA"/>
- <int value="66" label="TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA"/>
- <int value="67" label="TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA"/>
- <int value="68" label="TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA"/>
- <int value="69" label="TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA"/>
- <int value="70" label="TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA"/>
- <int value="103" label="TLS_DHE_RSA_WITH_AES_128_CBC_SHA256"/>
- <int value="104" label="TLS_DH_DSS_WITH_AES_256_CBC_SHA256"/>
- <int value="105" label="TLS_DH_RSA_WITH_AES_256_CBC_SHA256"/>
- <int value="106" label="TLS_DHE_DSS_WITH_AES_256_CBC_SHA256"/>
- <int value="107" label="TLS_DHE_RSA_WITH_AES_256_CBC_SHA256"/>
- <int value="108" label="TLS_DH_anon_WITH_AES_128_CBC_SHA256"/>
- <int value="109" label="TLS_DH_anon_WITH_AES_256_CBC_SHA256"/>
- <int value="132" label="TLS_RSA_WITH_CAMELLIA_256_CBC_SHA"/>
- <int value="133" label="TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA"/>
- <int value="134" label="TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA"/>
- <int value="135" label="TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA"/>
- <int value="136" label="TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA"/>
- <int value="137" label="TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA"/>
- <int value="138" label="TLS_PSK_WITH_RC4_128_SHA"/>
- <int value="139" label="TLS_PSK_WITH_3DES_EDE_CBC_SHA"/>
- <int value="140" label="TLS_PSK_WITH_AES_128_CBC_SHA"/>
- <int value="141" label="TLS_PSK_WITH_AES_256_CBC_SHA"/>
- <int value="142" label="TLS_DHE_PSK_WITH_RC4_128_SHA"/>
- <int value="143" label="TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA"/>
- <int value="144" label="TLS_DHE_PSK_WITH_AES_128_CBC_SHA"/>
- <int value="145" label="TLS_DHE_PSK_WITH_AES_256_CBC_SHA"/>
- <int value="146" label="TLS_RSA_PSK_WITH_RC4_128_SHA"/>
- <int value="147" label="TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA"/>
- <int value="148" label="TLS_RSA_PSK_WITH_AES_128_CBC_SHA"/>
- <int value="149" label="TLS_RSA_PSK_WITH_AES_256_CBC_SHA"/>
- <int value="150" label="TLS_RSA_WITH_SEED_CBC_SHA"/>
- <int value="151" label="TLS_DH_DSS_WITH_SEED_CBC_SHA"/>
- <int value="152" label="TLS_DH_RSA_WITH_SEED_CBC_SHA"/>
- <int value="153" label="TLS_DHE_DSS_WITH_SEED_CBC_SHA"/>
- <int value="154" label="TLS_DHE_RSA_WITH_SEED_CBC_SHA"/>
- <int value="155" label="TLS_DH_anon_WITH_SEED_CBC_SHA"/>
- <int value="156" label="TLS_RSA_WITH_AES_128_GCM_SHA256"/>
- <int value="157" label="TLS_RSA_WITH_AES_256_GCM_SHA384"/>
- <int value="158" label="TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"/>
- <int value="159" label="TLS_DHE_RSA_WITH_AES_256_GCM_SHA384"/>
- <int value="160" label="TLS_DH_RSA_WITH_AES_128_GCM_SHA256"/>
- <int value="161" label="TLS_DH_RSA_WITH_AES_256_GCM_SHA384"/>
- <int value="162" label="TLS_DHE_DSS_WITH_AES_128_GCM_SHA256"/>
- <int value="163" label="TLS_DHE_DSS_WITH_AES_256_GCM_SHA384"/>
- <int value="164" label="TLS_DH_DSS_WITH_AES_128_GCM_SHA256"/>
- <int value="165" label="TLS_DH_DSS_WITH_AES_256_GCM_SHA384"/>
- <int value="166" label="TLS_DH_anon_WITH_AES_128_GCM_SHA256"/>
- <int value="167" label="TLS_DH_anon_WITH_AES_256_GCM_SHA384"/>
- <int value="168" label="TLS_PSK_WITH_AES_128_GCM_SHA256"/>
- <int value="169" label="TLS_PSK_WITH_AES_256_GCM_SHA384"/>
- <int value="170" label="TLS_DHE_PSK_WITH_AES_128_GCM_SHA256"/>
- <int value="171" label="TLS_DHE_PSK_WITH_AES_256_GCM_SHA384"/>
- <int value="172" label="TLS_RSA_PSK_WITH_AES_128_GCM_SHA256"/>
- <int value="173" label="TLS_RSA_PSK_WITH_AES_256_GCM_SHA384"/>
- <int value="174" label="TLS_PSK_WITH_AES_128_CBC_SHA256"/>
- <int value="175" label="TLS_PSK_WITH_AES_256_CBC_SHA384"/>
- <int value="176" label="TLS_PSK_WITH_NULL_SHA256"/>
- <int value="177" label="TLS_PSK_WITH_NULL_SHA384"/>
- <int value="178" label="TLS_DHE_PSK_WITH_AES_128_CBC_SHA256"/>
- <int value="179" label="TLS_DHE_PSK_WITH_AES_256_CBC_SHA384"/>
- <int value="180" label="TLS_DHE_PSK_WITH_NULL_SHA256"/>
- <int value="181" label="TLS_DHE_PSK_WITH_NULL_SHA384"/>
- <int value="182" label="TLS_RSA_PSK_WITH_AES_128_CBC_SHA256"/>
- <int value="183" label="TLS_RSA_PSK_WITH_AES_256_CBC_SHA384"/>
- <int value="184" label="TLS_RSA_PSK_WITH_NULL_SHA256"/>
- <int value="185" label="TLS_RSA_PSK_WITH_NULL_SHA384"/>
- <int value="186" label="TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256"/>
- <int value="187" label="TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256"/>
- <int value="188" label="TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256"/>
- <int value="189" label="TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256"/>
- <int value="190" label="TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256"/>
- <int value="191" label="TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256"/>
- <int value="192" label="TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256"/>
- <int value="193" label="TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256"/>
- <int value="194" label="TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256"/>
- <int value="195" label="TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256"/>
- <int value="196" label="TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256"/>
- <int value="197" label="TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256"/>
- <int value="255" label="TLS_EMPTY_RENEGOTIATION_INFO_SCSV"/>
- <int value="49153" label="TLS_ECDH_ECDSA_WITH_NULL_SHA"/>
- <int value="49154" label="TLS_ECDH_ECDSA_WITH_RC4_128_SHA"/>
- <int value="49155" label="TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA"/>
- <int value="49156" label="TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA"/>
- <int value="49157" label="TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA"/>
- <int value="49158" label="TLS_ECDHE_ECDSA_WITH_NULL_SHA"/>
- <int value="49159" label="TLS_ECDHE_ECDSA_WITH_RC4_128_SHA"/>
- <int value="49160" label="TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA"/>
- <int value="49161" label="TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"/>
- <int value="49162" label="TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"/>
- <int value="49163" label="TLS_ECDH_RSA_WITH_NULL_SHA"/>
- <int value="49164" label="TLS_ECDH_RSA_WITH_RC4_128_SHA"/>
- <int value="49165" label="TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA"/>
- <int value="49166" label="TLS_ECDH_RSA_WITH_AES_128_CBC_SHA"/>
- <int value="49167" label="TLS_ECDH_RSA_WITH_AES_256_CBC_SHA"/>
- <int value="49168" label="TLS_ECDHE_RSA_WITH_NULL_SHA"/>
- <int value="49169" label="TLS_ECDHE_RSA_WITH_RC4_128_SHA"/>
- <int value="49170" label="TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA"/>
- <int value="49171" label="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"/>
- <int value="49172" label="TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"/>
- <int value="49173" label="TLS_ECDH_anon_WITH_NULL_SHA"/>
- <int value="49174" label="TLS_ECDH_anon_WITH_RC4_128_SHA"/>
- <int value="49175" label="TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA"/>
- <int value="49176" label="TLS_ECDH_anon_WITH_AES_128_CBC_SHA"/>
- <int value="49177" label="TLS_ECDH_anon_WITH_AES_256_CBC_SHA"/>
- <int value="49178" label="TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA"/>
- <int value="49179" label="TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA"/>
- <int value="49180" label="TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA"/>
- <int value="49181" label="TLS_SRP_SHA_WITH_AES_128_CBC_SHA"/>
- <int value="49182" label="TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA"/>
- <int value="49183" label="TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA"/>
- <int value="49184" label="TLS_SRP_SHA_WITH_AES_256_CBC_SHA"/>
- <int value="49185" label="TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA"/>
- <int value="49186" label="TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA"/>
- <int value="49187" label="TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"/>
- <int value="49188" label="TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"/>
- <int value="49189" label="TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256"/>
- <int value="49190" label="TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384"/>
- <int value="49191" label="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"/>
- <int value="49192" label="TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"/>
- <int value="49193" label="TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256"/>
- <int value="49194" label="TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384"/>
- <int value="49195" label="TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"/>
- <int value="49196" label="TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"/>
- <int value="49197" label="TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256"/>
- <int value="49198" label="TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384"/>
- <int value="49199" label="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"/>
- <int value="49200" label="TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"/>
- <int value="49201" label="TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256"/>
- <int value="49202" label="TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384"/>
- <int value="49203" label="TLS_ECDHE_PSK_WITH_RC4_128_SHA"/>
- <int value="49204" label="TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA"/>
- <int value="49205" label="TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA"/>
- <int value="49206" label="TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA"/>
- <int value="49207" label="TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256"/>
- <int value="49208" label="TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384"/>
- <int value="49209" label="TLS_ECDHE_PSK_WITH_NULL_SHA"/>
- <int value="49210" label="TLS_ECDHE_PSK_WITH_NULL_SHA256"/>
- <int value="49211" label="TLS_ECDHE_PSK_WITH_NULL_SHA384"/>
- <int value="49212" label="TLS_RSA_WITH_ARIA_128_CBC_SHA256"/>
- <int value="49213" label="TLS_RSA_WITH_ARIA_256_CBC_SHA384"/>
- <int value="49214" label="TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256"/>
- <int value="49215" label="TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384"/>
- <int value="49216" label="TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256"/>
- <int value="49217" label="TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384"/>
- <int value="49218" label="TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256"/>
- <int value="49219" label="TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384"/>
- <int value="49220" label="TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256"/>
- <int value="49221" label="TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384"/>
- <int value="49222" label="TLS_DH_anon_WITH_ARIA_128_CBC_SHA256"/>
- <int value="49223" label="TLS_DH_anon_WITH_ARIA_256_CBC_SHA384"/>
- <int value="49224" label="TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256"/>
- <int value="49225" label="TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384"/>
- <int value="49226" label="TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256"/>
- <int value="49227" label="TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384"/>
- <int value="49228" label="TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256"/>
- <int value="49229" label="TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384"/>
- <int value="49230" label="TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256"/>
- <int value="49231" label="TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384"/>
- <int value="49232" label="TLS_RSA_WITH_ARIA_128_GCM_SHA256"/>
- <int value="49233" label="TLS_RSA_WITH_ARIA_256_GCM_SHA384"/>
- <int value="49234" label="TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256"/>
- <int value="49235" label="TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384"/>
- <int value="49236" label="TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256"/>
- <int value="49237" label="TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384"/>
- <int value="49238" label="TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256"/>
- <int value="49239" label="TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384"/>
- <int value="49240" label="TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256"/>
- <int value="49241" label="TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384"/>
- <int value="49242" label="TLS_DH_anon_WITH_ARIA_128_GCM_SHA256"/>
- <int value="49243" label="TLS_DH_anon_WITH_ARIA_256_GCM_SHA384"/>
- <int value="49244" label="TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256"/>
- <int value="49245" label="TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384"/>
- <int value="49246" label="TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256"/>
- <int value="49247" label="TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384"/>
- <int value="49248" label="TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256"/>
- <int value="49249" label="TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384"/>
- <int value="49250" label="TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256"/>
- <int value="49251" label="TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384"/>
- <int value="49252" label="TLS_PSK_WITH_ARIA_128_CBC_SHA256"/>
- <int value="49253" label="TLS_PSK_WITH_ARIA_256_CBC_SHA384"/>
- <int value="49254" label="TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256"/>
- <int value="49255" label="TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384"/>
- <int value="49256" label="TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256"/>
- <int value="49257" label="TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384"/>
- <int value="49258" label="TLS_PSK_WITH_ARIA_128_GCM_SHA256"/>
- <int value="49259" label="TLS_PSK_WITH_ARIA_256_GCM_SHA384"/>
- <int value="49260" label="TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256"/>
- <int value="49261" label="TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384"/>
- <int value="49262" label="TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256"/>
- <int value="49263" label="TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384"/>
- <int value="49264" label="TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256"/>
- <int value="49265" label="TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384"/>
- <int value="49266" label="TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256"/>
- <int value="49267" label="TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384"/>
- <int value="49268" label="TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256"/>
- <int value="49269" label="TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384"/>
- <int value="49270" label="TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256"/>
- <int value="49271" label="TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384"/>
- <int value="49272" label="TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256"/>
- <int value="49273" label="TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384"/>
- <int value="49274" label="TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256"/>
- <int value="49275" label="TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384"/>
- <int value="49276" label="TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256"/>
- <int value="49277" label="TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384"/>
- <int value="49278" label="TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256"/>
- <int value="49279" label="TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384"/>
- <int value="49280" label="TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256"/>
- <int value="49281" label="TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384"/>
- <int value="49282" label="TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256"/>
- <int value="49283" label="TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384"/>
- <int value="49284" label="TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256"/>
- <int value="49285" label="TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384"/>
- <int value="49286" label="TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256"/>
- <int value="49287" label="TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384"/>
- <int value="49288" label="TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256"/>
- <int value="49289" label="TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384"/>
- <int value="49290" label="TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256"/>
- <int value="49291" label="TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384"/>
- <int value="49292" label="TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256"/>
- <int value="49293" label="TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384"/>
- <int value="49294" label="TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256"/>
- <int value="49295" label="TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384"/>
- <int value="49296" label="TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256"/>
- <int value="49297" label="TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384"/>
- <int value="49298" label="TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256"/>
- <int value="49299" label="TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384"/>
- <int value="49300" label="TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256"/>
- <int value="49301" label="TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384"/>
- <int value="49302" label="TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256"/>
- <int value="49303" label="TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384"/>
- <int value="49304" label="TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256"/>
- <int value="49305" label="TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384"/>
- <int value="49306" label="TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256"/>
- <int value="49307" label="TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384"/>
- <int value="49308" label="TLS_RSA_WITH_AES_128_CCM"/>
- <int value="49309" label="TLS_RSA_WITH_AES_256_CCM"/>
- <int value="49310" label="TLS_DHE_RSA_WITH_AES_128_CCM"/>
- <int value="49311" label="TLS_DHE_RSA_WITH_AES_256_CCM"/>
- <int value="49312" label="TLS_RSA_WITH_AES_128_CCM_8"/>
- <int value="49313" label="TLS_RSA_WITH_AES_256_CCM_8"/>
- <int value="49314" label="TLS_DHE_RSA_WITH_AES_128_CCM_8"/>
- <int value="49315" label="TLS_DHE_RSA_WITH_AES_256_CCM_8"/>
- <int value="49316" label="TLS_PSK_WITH_AES_128_CCM"/>
- <int value="49317" label="TLS_PSK_WITH_AES_256_CCM"/>
- <int value="49318" label="TLS_DHE_PSK_WITH_AES_128_CCM"/>
- <int value="49319" label="TLS_DHE_PSK_WITH_AES_256_CCM"/>
- <int value="49320" label="TLS_PSK_WITH_AES_128_CCM_8"/>
- <int value="49321" label="TLS_PSK_WITH_AES_256_CCM_8"/>
- <int value="49322" label="TLS_PSK_DHE_WITH_AES_128_CCM_8"/>
- <int value="49323" label="TLS_PSK_DHE_WITH_AES_256_CCM_8"/>
-</enum>
-
-<enum name="SSLErrorTypes" type="int">
- <int value="0" label="CERT_COMMON_NAME_INVALID"/>
- <int value="1" label="CERT_DATE_INVALID"/>
- <int value="2" label="CERT_AUTHORITY_INVALID"/>
- <int value="3" label="CERT_CONTAINS_ERRORS"/>
- <int value="4" label="CERT_NO_REVOCATION_MECHANISM"/>
- <int value="5" label="CERT_REVOKED"/>
- <int value="6" label="CERT_INVALID"/>
- <int value="7" label="CERT_WEAK_SIGNATURE_ALGORITHM"/>
- <int value="8" label="CERT_WEAK_KEY"/>
- <int value="9" label="UNKNOWN"/>
-</enum>
-
-<enum name="SSLResponseTypesV2" type="int">
- <int value="0" label="SHOW_ALL"/>
- <int value="1" label="SHOW_OVERRIDABLE"/>
- <int value="2" label="PROCEED_OVERRIDABLE"/>
- <int value="3" label="PROCEED_NAME"/>
- <int value="4" label="PROCEED_DATE"/>
- <int value="5" label="PROCEED_AUTHORITY"/>
- <int value="6" label="DONT_PROCEED_OVERRIDABLE"/>
- <int value="7" label="DONT_PROCEED_NAME"/>
- <int value="8" label="DONT_PROCEED_DATE"/>
- <int value="9" label="DONT_PROCEED_AUTHORITY"/>
- <int value="10" label="MORE"/>
- <int value="11" label="SHOW_UNDERSTAND"/>
- <int value="12" label="SHOW_INTERNAL_HOSTNAME"/>
- <int value="13" label="PROCEED_INTERNAL_HOSTNAME"/>
- <int value="14" label="SHOW_NEW_SITE"/>
- <int value="15" label="PROCEED_NEW_SITE"/>
-</enum>
-
-<enum name="StartupURLsMigration" type="int">
- <int value="0" label="Performed migration"/>
- <int value="1" label="No migration value"/>
- <int value="2" label="Reset migration"/>
-</enum>
-
-<enum name="SuggestAppsDialogCloseReason" type="int">
- <int value="0" label="Unknown error"/>
- <int value="1" label="Item installed"/>
- <int value="2" label="User cancelled"/>
- <int value="3" label="Webstore link clicked"/>
-</enum>
-
-<enum name="SuggestAppsDialogInstall" type="int">
- <int value="0" label="Install succeeded"/>
- <int value="1" label="Install cancelled"/>
- <int value="2" label="Install failed"/>
-</enum>
-
-<enum name="SuggestAppsDialogLoad" type="int">
- <int value="0" label="Load succeeded"/>
- <int value="1" label="Load cancelled"/>
- <int value="2" label="Load failed"/>
-</enum>
-
-<enum name="SuspendStatus" type="int">
- <int value="0" label="Success"/>
- <int value="1" label="Failure"/>
- <int value="2" label="Cancelled"/>
- <int value="3" label="Attempted"/>
-</enum>
-
-<enum name="SyncAuthError" type="int">
- <int value="0"
- label="Number of times clients have encountered an Auth error."/>
- <int value="1" label="Number of times clients have fixed an auth error."/>
-</enum>
-
-<enum name="SyncBackendInitializeRestoreState" type="int">
- <int value="0" label="Expected restored types and found some"/>
- <int value="1" label="Expected restored types but found none"/>
- <int value="2" label="Did not expect restored types and found none"/>
- <int value="3" label="Did not expect restored types but found some"/>
-</enum>
-
-<enum name="SyncedNotificationActionType" type="int">
- <int value="0" label="Unknown"/>
- <int value="1" label="Notification clicked"/>
- <int value="2" label="Notification button clicked"/>
- <int value="3" label="Notification closed by user"/>
- <int value="4" label="Notification closed by system"/>
-</enum>
-
-<enum name="TabRestoreResult" type="int">
- <int value="0" label="Failure (other)"/>
- <int value="1" label="Success"/>
- <int value="2" label="Failure due to network connectivity"/>
-</enum>
-
-<enum name="TabRestoreUserAction" type="int">
- <int value="0" label="Wait for completion"/>
- <int value="1" label="Leave tab (close tab/switch tab/go to tab switcher)"/>
- <int value="2" label="Leave Chrome"/>
-</enum>
-
-<enum name="TabStatus" type="int">
- <int value="0" label="Memory resident"/>
- <int value="1" label="Evicted and reloaded"/>
- <int value="2" label="Reloaded due to cold start"/>
- <int value="3" label="Partially evicted"/>
- <int value="4" label="Reloaded due to backgrounding"/>
- <int value="5" label="Reloaded due to incognito"/>
- <int value="6" label="Reloaded due to cold start (fg tab on start)"/>
- <int value="7" label="Reloaded due to cold start (bg tab on switch)"/>
- <int value="8" label="Lazy load for 'Open in new tab'"/>
-</enum>
-
-<enum name="TabSwitchedToForegroundLaunchedWithURL" type="int">
- <int value="0" label="Launched without an URL"/>
- <int value="1" label="Launched with an URL"/>
-</enum>
-
-<enum name="TabSwitchedToForegroundRevisit" type="int">
- <int value="0" label="First time"/>
- <int value="1" label="Revisit"/>
-</enum>
-
-<enum name="TapDelayType" type="int">
- <int value="0" label="Delayed Tap"/>
- <int value="1" label="Undelayed Tap"/>
-</enum>
-
-<enum name="TcpSocketStatus" type="int">
- <int value="0" label="Unknown"/>
- <int value="1" label="Fast Connection Return"/>
- <int value="2" label="Slow Connection Return"/>
- <int value="3" label="Connection Error"/>
- <int value="4" label="Syn Data Acknowledged"/>
- <int value="5" label="Syn Data Nacked"/>
- <int value="6" label="Syn Data Probe Failed"/>
- <int value="7" label="No syn data + ack (can't happen)"/>
- <int value="8" label="No syn data + nack"/>
- <int value="9" label="No syn data + probe failed"/>
-</enum>
-
-<enum name="TLSRenegotiationPatched" type="int">
- <int value="0" label="Not renegotiation patched"/>
- <int value="1" label="Renegotiation patched"/>
-</enum>
-
-<enum name="TouchpadDeviceState" type="int">
- <int value="0" label="NO_TP_PRESENT_NO_TP_EXPECTED">
- No touchpad detected on a device without built-in touchpad
- </int>
- <int value="1" label="TP_PRESENT_NO_TP_EXPECTED">
- External touchpad detected on a device without built-in touchpad
- </int>
- <int value="2" label="NO_TP_PRESENT_TP_EXPECTED_BOOT">
- Built-in touchpad not detected at boot time on a device with built-in
- touchpad (touchpad failure at boot time)
- </int>
- <int value="3" label="TP_PRESENT_TP_EXPECTED_BOOT">
- Built-in touchpad detected at boot time on a device with built-in touchpad
- </int>
- <int value="4" label="NO_TP_PRESENT_TP_EXPECTED_RESUME">
- Built-in touchpad not detected at resume time on a device with built-in
- touchpad (touchpad failure at resume time)
- </int>
- <int value="5" label="TP_PRESENT_TP_EXPECTED_RESUME">
- Built-in touchpad detected at resume time on a device with built-in touchpad
- </int>
-</enum>
-
-<enum name="TouchpadProblemType" type="int">
- <int value="0" label="All events">
- All observed input events from touchpad. Serves as a reference.
- </int>
- <int value="1" label="Noisy Ground">
- The touchpad noise events (e.g. abrupt cursor jumps) caused by the noisy
- ground.
- </int>
-</enum>
-
-<enum name="TrackedPreference" type="int">
- <int value="0" label="prefs::kShowHomeButton"/>
- <int value="1" label="prefs::kHomePageIsNewTabPage"/>
- <int value="2" label="prefs::kHomePage"/>
- <int value="3" label="prefs::kRestoreOnStartup"/>
- <int value="4" label="prefs::kURLsToRestoreOnStartup"/>
- <int value="5" label="prefs::kExtensionsPref"/>
- <int value="6" label="prefs::kGoogleServicesLastUsername"/>
- <int value="7" label="prefs::kSearchProviderOverrides"/>
- <int value="8" label="prefs::kDefaultSearchProviderSearchURL"/>
- <int value="9" label="prefs::kDefaultSearchProviderKeyword"/>
- <int value="10" label="prefs::kDefaultSearchProviderName"/>
- <int value="11" label="prefs::kPinnedTabs"/>
- <int value="12" label="prefs::kExtensionKnownDisabled"/>
- <int value="13" label="prefs::kProfileResetPromptMemento"/>
-</enum>
-
-<enum name="TranslateError" type="int">
- <int value="0" label="No error"/>
- <int value="1" label="Network error"/>
- <int value="2" label="Initialization error"/>
- <int value="3" label="Unknown language"/>
- <int value="4" label="Unsupported language"/>
- <int value="5" label="Identical language"/>
- <int value="6" label="Translation error"/>
-</enum>
-
-<enum name="TranslateInitiationStatus" type="int">
- <int value="0" label="Completely disabled by prefs"/>
- <int value="1" label="Completely disabled by switch"/>
- <int value="2" label="Disabled by user configuration"/>
- <int value="3" label="Unsupported Language"/>
- <int value="4" label="Unsupported URL"/>
- <int value="5" label="Do nothing for similar languages"/>
- <int value="6" label="Do nothing for accepted languages"/>
- <int value="7" label="Auto translation by user configuration"/>
- <int value="8" label="Auto translation by linked from a translated page"/>
- <int value="9" label="Show infobar"/>
- <int value="10" label="MIME-type is not supported"/>
-</enum>
-
-<enum name="TranslateLanguage" type="int">
- <int value="0" label="No language code"/>
- <int value="1" label="Valid language code"/>
- <int value="2" label="Invalid language code"/>
-</enum>
-
-<enum name="TranslateLanguageVerification" type="int">
- <int value="0" label="CLD is disabled"/>
- <int value="1" label="No Content-Language"/>
- <int value="2" label="CLD can not determine a language"/>
- <int value="3" label="CLD agrees with Content-Language"/>
- <int value="4" label="CLD disagrees with Content-Language"/>
- <int value="5" label="CLD can be trusted"/>
- <int value="6" label="CLD can complement a sub code"/>
-</enum>
-
-<enum name="TranslateScheme" type="int">
- <int value="0" label="http"/>
- <int value="1" label="https"/>
- <int value="2" label="unexpected other schemes"/>
-</enum>
-
-<enum name="UIEventType" type="int">
- <int value="0" label="Unknown"/>
- <int value="1" label="Touch released"/>
- <int value="2" label="Touch pressed"/>
- <int value="3" label="Touch moved"/>
- <int value="4" label="Touch stationary"/>
- <int value="5" label="Touch cancelled"/>
- <int value="6" label="Gesture scroll begin"/>
- <int value="7" label="Gesture scroll end"/>
- <int value="8" label="Gesture scroll update"/>
- <int value="9" label="Gesture tap"/>
- <int value="10" label="Gesture tap down"/>
- <int value="11" label="Gesture finger down"/>
- <int value="12" label="Gesture finger up"/>
- <int value="13" label="Gesture double tap"/>
- <int value="14" label="Gesture triple tap"/>
- <int value="15" label="Gesture two-finger tap"/>
- <int value="16" label="Gesture pinch begin"/>
- <int value="17" label="Gesture pinch end"/>
- <int value="18" label="Gesture pinch update (2 fingers)"/>
- <int value="19" label="Long press"/>
- <int value="20" label="Multi-finger swipe (2 fingers)"/>
- <int value="21" label="Scroll"/>
- <int value="22" label="Scroll fling start"/>
- <int value="23" label="Scroll fling cancel"/>
- <int value="24" label="Multi-finger swipe (3 fingers)"/>
- <int value="25" label="Multi-finger swipe (4+ fingers)"/>
- <int value="26" label="Gesture scroll update (2 fingers)"/>
- <int value="27" label="Gesture scroll update (3 fingers)"/>
- <int value="28" label="Gesture scroll update (4+ fingers)"/>
- <int value="29" label="Gesture pinch update (3 fingers)"/>
- <int value="30" label="Gesture pinch update (4+ fingers)"/>
- <int value="31" label="Long tap"/>
- <int value="32" label="Show Press"/>
- <int value="33" label="Tap Cancel"/>
-</enum>
-
-<enum name="UmaInitSequence" type="int">
- <int value="0" label="Timer fired first"/>
- <int value="1" label="Init task completed first"/>
-</enum>
-
-<enum name="UmaUploadResponseStatus" type="int">
- <int value="0" label="Unknown failure"/>
- <int value="1" label="Success"/>
- <int value="2" label="Bad request"/>
- <int value="3" label="No response"/>
-</enum>
-
-<enum name="UncacheableReason" type="int">
- <int value="0" label="kNoData"/>
- <int value="1" label="kPre11PartialResponse"/>
- <int value="2" label="kNoStrongValidatorOnPartialResponse"/>
- <int value="3" label="kShortMaxAge"/>
- <int value="4" label="kExpiresTooSoon"/>
- <int value="5" label="kHasMustRevalidate"/>
- <int value="6" label="kNoCache"/>
- <int value="7" label="kNoStore"/>
-</enum>
-
-<enum name="UniformityTrialGroupNotActive" type="int">
- <int value="0" label="Invalid"/>
- <int value="1" label="Group not reported"/>
- <int value="2" label="Trial was disabled"/>
- <int value="3" label="Group not reported and trial was disabled"/>
-</enum>
-
-<enum name="UpdateEngineDownloadSources" type="int">
- <int value="0" label="Other"/>
- <int value="1" label="HTTPS Server Only"/>
- <int value="2" label="HTTP Server Only"/>
- <int value="3" label="HTTP Server, HTTPS Server"/>
- <int value="4" label="HTTP Peer Only"/>
- <int value="5" label="HTTP Peer and HTTPS Server"/>
- <int value="6" label="HTTP Peer and HTTP Server"/>
- <int value="7" label="HTTP Peer, HTTPS Server, and HTTP Server"/>
-</enum>
-
-<enum name="UpdateEngineErrorCode" type="int">
- <int value="0" label="kErrorCodeSuccess"/>
- <int value="1" label="kErrorCodeError"/>
- <int value="2" label="kErrorCodeOmahaRequestError"/>
- <int value="3" label="kErrorCodeOmahaResponseHandlerError"/>
- <int value="4" label="kErrorCodeFilesystemCopierError"/>
- <int value="5" label="kErrorCodePostinstallRunnerError"/>
- <int value="6" label="kErrorCodeSetBootableFlagError"/>
- <int value="7" label="kErrorCodeInstallDeviceOpenError"/>
- <int value="8" label="kErrorCodeKernelDeviceOpenError"/>
- <int value="9" label="kErrorCodeDownloadTransferError"/>
- <int value="10" label="kErrorCodePayloadHashMismatchError"/>
- <int value="11" label="kErrorCodePayloadSizeMismatchError"/>
- <int value="12" label="kErrorCodeDownloadPayloadVerificationError"/>
- <int value="13" label="kErrorCodeDownloadNewPartitionInfoError"/>
- <int value="14" label="kErrorCodeDownloadWriteError"/>
- <int value="15" label="kErrorCodeNewRootfsVerificationError"/>
- <int value="16" label="kErrorCodeNewKernelVerificationError"/>
- <int value="17" label="kErrorCodeSignedDeltaPayloadExpectedError"/>
- <int value="18" label="kErrorCodeDownloadPayloadPubKeyVerificationError"/>
- <int value="19" label="kErrorCodePostinstallBootedFromFirmwareB"/>
- <int value="20" label="kErrorCodeDownloadStateInitializationError"/>
- <int value="21" label="kErrorCodeDownloadInvalidMetadataMagicString"/>
- <int value="22" label="kErrorCodeDownloadSignatureMissingInManifest"/>
- <int value="23" label="kErrorCodeDownloadManifestParseError"/>
- <int value="24" label="kErrorCodeDownloadMetadataSignatureError"/>
- <int value="25" label="kErrorCodeDownloadMetadataSignatureVerificationError"/>
- <int value="26" label="kErrorCodeDownloadMetadataSignatureMismatch"/>
- <int value="27" label="kErrorCodeDownloadOperationHashVerificationError"/>
- <int value="28" label="kErrorCodeDownloadOperationExecutionError"/>
- <int value="29" label="kErrorCodeDownloadOperationHashMismatch"/>
- <int value="30" label="kErrorCodeOmahaRequestEmptyResponseError"/>
- <int value="31" label="kErrorCodeOmahaRequestXMLParseError"/>
- <int value="32" label="kErrorCodeDownloadInvalidMetadataSize"/>
- <int value="33" label="kErrorCodeDownloadInvalidMetadataSignature"/>
- <int value="34" label="kErrorCodeOmahaRequestResponseInvalid"/>
- <int value="35" label="kErrorCodeOmahaUpdateIgnoredPerPolicy"/>
- <int value="36" label="kErrorCodeOmahaUpdateDeferredPerPolicy"/>
- <int value="37" label="kErrorCodeOmahaErrorInHTTPResponse"/>
- <int value="38" label="kErrorCodeDownloadOperationHashMissingError"/>
- <int value="39" label="kErrorCodeDownloadMetadataSignatureMissingError"/>
- <int value="40" label="kErrorCodeOmahaUpdateDeferredForBackoff"/>
- <int value="41" label="kErrorCodePostinstallPowerwashError"/>
- <int value="42" label="kErrorCodeUpdateCanceledByChannelChange"/>
-</enum>
-
-<enum name="UpdateEnginePayloadFormat" type="int">
- <int value="0" label="Full"/>
- <int value="1" label="Delta"/>
- <int value="2" label="Forced Full"/>
-</enum>
-
-<enum name="UpdatePolicy" type="int">
- <int value="0" label="UPDATES_DISABLED"/>
- <int value="1" label="AUTOMATIC_UPDATES"/>
- <int value="2" label="MANUAL_UPDATES_ONLY"/>
- <int value="3" label="AUTO_UPDATES_ONLY"/>
-</enum>
-
-<enum name="UrlResolutionResult" type="int">
- <int value="0" label="Absolute URL"/>
- <int value="1" label="Resolutions Differ"/>
- <int value="2" label="Resolutions Agree"/>
-</enum>
-
-<enum name="URLSchemeForHistogram" type="int">
- <int value="0" label="kUnknownURLScheme"/>
- <int value="1" label="kMissingURLScheme"/>
- <int value="2" label="kHttpURLScheme"/>
- <int value="3" label="kHttpsURLScheme"/>
- <int value="4" label="kFtpURLScheme"/>
- <int value="5" label="kChromeExtensionURLScheme"/>
- <int value="6" label="kJavascriptURLScheme"/>
- <int value="7" label="kFileURLScheme"/>
- <int value="8" label="kBlobURLScheme"/>
- <int value="9" label="kDataURLScheme"/>
- <int value="10" label="kFileSystemScheme"/>
-</enum>
-
-<enum name="UserType" type="int">
- <int value="0" label="Regular"/>
- <int value="1" label="Guest"/>
- <int value="2" label="Retail Mode"/>
- <int value="3" label="Public Account"/>
- <int value="4" label="Locally Managed"/>
- <int value="5" label="Kiosk App"/>
-</enum>
-
-<enum name="VariationsResourceRequestsAllowedState" type="int">
- <int value="0" label="Requests allowed"/>
- <int value="1" label="Requests not allowed (Obsolete 11/2013)"/>
- <int value="2" label="Notified that requests became allowed"/>
- <int value="3" label="Requests not allowed: EULA not accepted"/>
- <int value="4" label="Requests not allowed: network down"/>
- <int value="5" label="Requests not allowed: disabled by command line"/>
-</enum>
-
-<enum name="VariationsSeedEmpty" type="int">
- <int value="0" label="Seed Not Empty"/>
- <int value="1" label="Seed Empty"/>
- <int value="2" label="Seed Corrupt"/>
-</enum>
-
-<enum name="VaryType" type="int">
- <int value="0" label="No Vary header present"/>
- <int value="1" label="Vary:User-Agent"/>
- <int value="2" label="Other"/>
-</enum>
-
-<enum name="VAVDAH264DecoderFailure" type="int">
- <int value="0" label="FRAME_MBS_ONLY_FLAG_NOT_ONE"/>
- <int value="1" label="GAPS_IN_FRAME_NUM"/>
- <int value="2" label="MID_STREAM_RESOLUTION_CHANGE"/>
- <int value="3" label="INTERLACED_STREAM"/>
- <int value="4" label="VAAPI_ERROR"/>
-</enum>
-
-<enum name="VideoCodec" type="int">
- <int value="0" label="kUnknownVideoCodec"/>
- <int value="1" label="kCodecH264"/>
- <int value="2" label="kCodecVC1"/>
- <int value="3" label="kCodecMPEG2"/>
- <int value="4" label="kCodecMPEG4"/>
- <int value="5" label="kCodecTheora"/>
- <int value="6" label="kCodecVP8"/>
- <int value="7" label="kCodecVP9"/>
-</enum>
-
-<enum name="VideoCodecProfile" type="int">
- <int value="0" label="H.264 Baseline"/>
- <int value="1" label="H.264 Main"/>
- <int value="2" label="H.264 Extended"/>
- <int value="3" label="H.264 High"/>
- <int value="4" label="H.264 High10"/>
- <int value="5" label="H.264 High422"/>
- <int value="6" label="H.264 High444"/>
- <int value="7" label="H.264 ScalableBaseline"/>
- <int value="8" label="H.264 ScalableHigh"/>
- <int value="9" label="H.264 StereoHigh"/>
- <int value="10" label="H.264 MultiviewHigh"/>
- <int value="11" label="VP8"/>
- <int value="12" label="VP9"/>
-</enum>
-
-<enum name="VideoPixelFormat" type="int">
- <int value="0" label="UNKNOWN"/>
- <int value="1" label="YV12"/>
- <int value="2" label="YV16"/>
- <int value="3" label="I420"/>
- <int value="4" label="YV12A"/>
- <int value="5" label="HOLE"/>
- <int value="6" label="NATIVE_TEXTURE"/>
-</enum>
-
-<enum name="ViewFileType" type="int">
- <int value="0" label="other"/>
- <int value="1" label=".3ga"/>
- <int value="2" label=".3gp"/>
- <int value="3" label=".aac"/>
- <int value="4" label=".alac"/>
- <int value="5" label=".asf"/>
- <int value="6" label=".avi"/>
- <int value="7" label=".bmp"/>
- <int value="8" label=".csv"/>
- <int value="9" label=".doc"/>
- <int value="10" label=".docx"/>
- <int value="11" label=".flac"/>
- <int value="12" label=".gif"/>
- <int value="13" label=".jpeg"/>
- <int value="14" label=".jpg"/>
- <int value="15" label=".log"/>
- <int value="16" label=".m3u"/>
- <int value="17" label=".m3u8"/>
- <int value="18" label=".m4a"/>
- <int value="19" label=".m4v"/>
- <int value="20" label=".mid"/>
- <int value="21" label=".mkv"/>
- <int value="22" label=".mov"/>
- <int value="23" label=".mp3"/>
- <int value="24" label=".mp4"/>
- <int value="25" label=".mpg"/>
- <int value="26" label=".odf"/>
- <int value="27" label=".odp"/>
- <int value="28" label=".ods"/>
- <int value="29" label=".odt"/>
- <int value="30" label=".oga"/>
- <int value="31" label=".ogg"/>
- <int value="32" label=".ogv"/>
- <int value="33" label=".pdf"/>
- <int value="34" label=".png"/>
- <int value="35" label=".ppt"/>
- <int value="36" label=".pptx"/>
- <int value="37" label=".ra"/>
- <int value="38" label=".ram"/>
- <int value="39" label=".rar"/>
- <int value="40" label=".rm"/>
- <int value="41" label=".rtf"/>
- <int value="42" label=".wav"/>
- <int value="43" label=".webm"/>
- <int value="44" label=".webp"/>
- <int value="45" label=".wma"/>
- <int value="46" label=".wmv"/>
- <int value="47" label=".xls"/>
- <int value="48" label=".xlsx"/>
-</enum>
-
-<enum name="VPNDriver" type="int">
- <int value="0" label="OpenVPN"/>
- <int value="1" label="L2TP/IPSec"/>
-</enum>
-
-<enum name="VPNRemoteAuthenticationType" type="int">
- <int value="0" label="OpenVPN Default"/>
- <int value="1" label="OpenVPN Certificate"/>
- <int value="2" label="L2TP/IPSec Default"/>
- <int value="3" label="L2TP/IPSec Certificate"/>
- <int value="4" label="L2TP/IPSec PSK"/>
-</enum>
-
-<enum name="VPNUserAuthenticationType" type="int">
- <int value="0" label="OpenVPN None"/>
- <int value="1" label="OpenVPN Certificate"/>
- <int value="2" label="OpenVPN Username/Password"/>
- <int value="3" label="OpenVPN Username/Password/OTP"/>
- <int value="4" label="L2TP/IPSec None"/>
- <int value="5" label="L2TP/IPSec Certificate"/>
- <int value="6" label="L2TP/IPSec Username/Password"/>
-</enum>
-
-<enum name="WalletApiCall" type="int">
- <int value="0" label="Unknown API call"/>
- <int value="1" label="Accept Legal Documents"/>
- <int value="2" label="Authenticate Instrument"/>
- <int value="3" label="Get Full Wallet"/>
- <int value="4" label="Get Wallet Items"/>
- <int value="5" label="Save to Wallet"/>
-</enum>
-
-<enum name="WalletErrors" type="int">
- <int value="0" label="Baseline: Issued request"/>
- <int value="1" label="Fatal error (deprecated)"/>
- <int value="2" label="Malformed response"/>
- <int value="3" label="Network error"/>
- <int value="4" label="Bad request"/>
- <int value="5" label="Internal error"/>
- <int value="6" label="Invalid params"/>
- <int value="7" label="Service unavailable"/>
- <int value="8" label="Spending limit exceeded"/>
- <int value="9" label="Unsupported API version"/>
- <int value="10" label="Unknown error"/>
- <int value="11" label="Unsupported merchant"/>
- <int value="12" label="Unsupported buyer legal address"/>
- <int value="13" label="Unverified know your customer status"/>
-</enum>
-
-<enum name="WalletRequiredActions" type="int">
- <int value="0" label="Baseline: Issued request"/>
- <int value="1" label="Unknown"/>
- <int value="2" label="GAIA auth"/>
- <int value="3" label="Passive GAIA auth"/>
- <int value="4" label="Set up Wallet"/>
- <int value="5" label="Accept ToS"/>
- <int value="6" label="Update expiration date"/>
- <int value="7" label="Upgrade min address"/>
- <int value="8" label="Choose another instrument or address"/>
- <int value="9" label="Verify CVV"/>
- <int value="10" label="Invalid form field"/>
- <int value="11" label="Require phone number"/>
-</enum>
-
-<enum name="WebFontCacheHit" type="int">
- <int value="0" label="Miss"/>
- <int value="1" label="Hit"/>
- <int value="2" label="Served from data URL"/>
-</enum>
-
-<enum name="WebFontUsageType" type="int">
- <int value="0" label="Styled, and used"/>
- <int value="1" label="Styled, but not used"/>
- <int value="2" label="Not styled, but used"/>
-</enum>
-
-<enum name="WebHistoryStatus" type="int">
- <int value="0" label="WEB_HISTORY_QUERY_FAILED">Failed</int>
- <int value="1" label="WEB_HISTORY_QUERY_SUCCEEDED">Succeeded</int>
- <int value="2" label="WEB_HISTORY_QUERY_TIMED_OUT">Timed out</int>
-</enum>
-
-<enum name="WebSocketHandshakeResult" type="int">
- <int value="0" label="Incomplete"/>
- <int value="1" label="Normal"/>
- <int value="2" label="Failed"/>
- <int value="3" label="Connected"/>
-</enum>
-
-<enum name="WebSocketPerMessageDeflateContextTakeOverMode" type="int">
- <int value="0" label="DoNotTakeOverContext"/>
- <int value="1" label="TakeOverContext"/>
-</enum>
-
-<enum name="WiFiApMode" type="int">
- <int value="0" label="Unknown"/>
- <int value="1" label="Managed"/>
- <int value="2" label="AdHoc"/>
-</enum>
-
-<enum name="WiFiReasonCode" type="int">
- <int value="0" label="kReasonReserved0"/>
- <int value="1" label="kReasonCodeUnspecified"/>
- <int value="2" label="kReasonCodePreviousAuthenticationInvalid"/>
- <int value="3" label="kReasonCodeSenderHasLeft"/>
- <int value="4" label="kReasonCodeInactivity"/>
- <int value="5" label="kReasonCodeTooManySTAs"/>
- <int value="6" label="kReasonCodeNonAuthenticated"/>
- <int value="7" label="kReasonCodeNonAssociated"/>
- <int value="8" label="kReasonCodeDisassociatedHasLeft"/>
- <int value="9" label="kReasonCodeReassociationNotAuthenticated"/>
- <int value="10" label="kReasonCodeUnacceptablePowerCapability"/>
- <int value="11" label="kReasonCodeUnacceptableSupportedChannelInfo"/>
- <int value="12" label="kReasonReserved12"/>
- <int value="13" label="kReasonCodeInvalidInfoElement"/>
- <int value="14" label="kReasonCodeMICFailure"/>
- <int value="15" label="kReasonCode4WayTimeout"/>
- <int value="16" label="kReasonCodeGroupKeyHandshakeTimeout"/>
- <int value="17" label="kReasonCodeDifferenIE"/>
- <int value="18" label="kReasonCodeGroupCipherInvalid"/>
- <int value="19" label="kReasonCodePairwiseCipherInvalid"/>
- <int value="20" label="kReasonCodeAkmpInvalid"/>
- <int value="21" label="kReasonCodeUnsupportedRsnIeVersion"/>
- <int value="22" label="kReasonCodeInvalidRsnIeCaps"/>
- <int value="23" label="kReasonCode8021XAuth"/>
- <int value="24" label="kReasonCodeCipherSuiteRejected"/>
- <int value="25" label="kReasonReserved25"/>
- <int value="26" label="kReasonReserved26"/>
- <int value="27" label="kReasonReserved27"/>
- <int value="28" label="kReasonReserved28"/>
- <int value="29" label="kReasonReserved29"/>
- <int value="30" label="kReasonReserved30"/>
- <int value="31" label="kReasonReserved31"/>
- <int value="32" label="kReasonCodeUnspecifiedQoS"/>
- <int value="33" label="kReasonCodeQoSBandwidth"/>
- <int value="34" label="kReasonCodeiPoorConditions"/>
- <int value="35" label="kReasonCodeOutsideTxop"/>
- <int value="36" label="kReasonCodeStaLeaving"/>
- <int value="37" label="kReasonCodeUnacceptableMechanism"/>
- <int value="38" label="kReasonCodeSetupRequired"/>
- <int value="39" label="kReasonCodeTimeout"/>
- <int value="45" label="kReasonCodeCipherSuiteNotSupported"/>
-</enum>
-
-<enum name="WiFiScanResult" type="int">
- <int value="0" label="ProgressiveScan connected"/>
- <int value="1" label="ProgressiveScan error then FullScan didn't connect"/>
- <int value="2" label="ProgressiveScan error then FullScan connected"/>
- <int value="3"
- label="ProgressiveScan didn't connect then FullScan didn't connect"/>
- <int value="4"
- label="ProgressiveScan didn't connect then FullScan connected"/>
- <int value="5" label="FullScan didn't connect"/>
- <int value="6" label="FullScan connected"/>
- <int value="7" label="Internal error"/>
-</enum>
-
-<enum name="WiFiStatusType" type="int">
- <int value="0" label="kStatusCodeTypeByAp"/>
- <int value="1" label="kStatusCodeTypeByClient"/>
- <int value="2" label="kStatusCodeTypeByUser"/>
- <int value="3" label="kStatusCodeTypeConsideredDead"/>
-</enum>
-
-<enum name="Win8PageLoadType" type="int">
- <int value="0" label="Metro"/>
- <int value="1" label="Desktop"/>
- <int value="2" label="Metro Aura"/>
- <int value="3" label="Desktop Aura"/>
-</enum>
-
-<enum name="WindowsVersion" type="int">
- <int value="0" label="Pre-XP"/>
- <int value="1" label="XP"/>
- <int value="2" label="2003 Server"/>
- <int value="3" label="Vista"/>
- <int value="4" label="Windows 7"/>
- <int value="5" label="Windows 8"/>
-</enum>
-
-<enum name="WindowType" type="int">
- <int value="0" label="Other"/>
- <int value="1" label="Browser"/>
- <int value="2" label="Hosted App"/>
- <int value="3" label="Packaged App"/>
-</enum>
-
-<enum name="XMLHttpRequestSendArrayBufferOrView" type="int">
- <int value="0" label="XMLHttpRequestSendArrayBuffer"/>
- <int value="1" label="XMLHttpRequestSendArrayBufferView"/>
-</enum>
-
-</enums>
-
-<!-- Field trials -->
-
-<fieldtrials>
-
-<fieldtrial name="AsyncSlowStart">
- <group name="AsyncSlowStart" label="Async Slow Start on"/>
- <group name="AsyncSlowStart_off" label="Async Slow Start off"/>
- <group name="AsyncSlowStart_on" label="Async Slow Start on"/>
- <affected-histogram name="Net.Transaction_Connected_New"/>
- <affected-histogram name="Renderer4.StartToFinish"/>
-</fieldtrial>
-
-<fieldtrial name="AutofillServerExperiments">
- <group name="ar06" label="Acceptance ratio: 0.6"/>
- <group name="ar1" label="Acceptance ratio: 1.0"/>
- <group name="ar2" label="Acceptance ratio: 2.0"/>
- <group name="ar4" label="Acceptance ratio: 4.0"/>
- <group name="ar04wr3fs4"
- label="Acceptance ratio: 0.4; winner lead ratio: 3.0; min form score: 4"/>
- <group name="ar05wlr15"
- label="Acceptance ratio: 0.5; winner lead ratio: 1.5"/>
- <group name="ar05wlr25"
- label="Acceptance ratio: 0.5; winner lead ratio: 2.5"/>
- <group name="ar05wr15fs5"
- label="Acceptance ratio: 0.5; winner lead ratio: 1.5; min form score: 5"/>
- <group name="fp05" label="Probability picker algorithm, p=0.5"/>
- <group name="fp025" label="Probability picker algorithm, p=0.25"/>
- <group name="fp05cc03"
- label="Probability picker algorithm, p=0.5; p_ccname=0.3"/>
- <group name="fp05cco03"
- label="Probability picker algorithm, p=0.5;
- p_ccname_given_other_cc_fields=0.3"/>
- <group name="fp05cco03cstd"
- label="Probability picker algorithm, p=0.5;
- p_ccname_given_other_cc_fields=0.3; with fallback to the default
- algorithm"/>
- <group name="fp05cc03e1"
- label="Probability picker algorithm, p=0.5 for cc and company name
- fields; p_ccname_given_other_cc_fields=0.3; with fallback to the
- default algorithm;"/>
- <group name="tbar1" label="Use only Toolbar upload data"/>
- <affected-histogram name="Autofill.Quality"/>
- <affected-histogram name="AutoFill.Quality"/>
- <affected-histogram name="Autofill.Quality.HeuristicType"/>
- <affected-histogram name="Autofill.Quality.HeuristicType.ByFieldType"/>
- <affected-histogram name="Autofill.Quality.PredictedType"/>
- <affected-histogram name="Autofill.Quality.PredictedType.ByFieldType"/>
- <affected-histogram name="Autofill.Quality.ServerType"/>
- <affected-histogram name="Autofill.Quality.ServerType.ByFieldType"/>
-</fieldtrial>
-
-<fieldtrial name="CacheListSize">
- <group name="CacheListSize_12" label="Control"/>
- <group name="CacheListSize_13" label="Extended deleted list (2x)"/>
- <group name="CacheListSize_14" label="Out of the experiment"/>
- <affected-histogram name="DiskCache.TotalIOTime"/>
- <affected-histogram name="Net.HttpJob.TotalTime"/>
- <affected-histogram name="Net.HttpJob.TotalTimeCached"/>
- <affected-histogram name="Net.HttpJob.TotalTimeCancel"/>
- <affected-histogram name="Net.HttpJob.TotalTimeNotCached"/>
- <affected-histogram name="Net.HttpJob.TotalTimeSuccess"/>
- <affected-histogram name="PLT.Abandoned"/>
- <affected-histogram name="PLT.BeginToFinish"/>
- <affected-histogram name="PLT.BeginToFinish_HistoryLoad"/>
- <affected-histogram name="PLT.BeginToFinish_LinkLoadCacheOnly"/>
- <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
- <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
- <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
- <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
- <affected-histogram name="PLT.BeginToFinish_Reload"/>
-</fieldtrial>
-
-<fieldtrial name="CacheSensitivityAnalysis">
- <group name="No" label="Turned off"/>
- <group name="Control" label="Control group"/>
- <group name="ControlA" label="Control, Group A"/>
- <group name="ControlB" label="Control, Group B"/>
- <group name="100" label="100% slowdown"/>
- <group name="100A" label="100% slowdown, Group A"/>
- <group name="100B" label="100% slowdown, Group B"/>
- <group name="200A" label="200% slowdown, Group A"/>
- <group name="200B" label="200% slowdown, Group B"/>
- <group name="400A" label="400% slowdown, Group A"/>
- <group name="400B" label="400% slowdown, Group B"/>
- <affected-histogram name="Net.HttpJob.TotalTime"/>
- <affected-histogram name="Net.HttpJob.TotalTimeCached"/>
- <affected-histogram name="Net.HttpJob.TotalTimeCancel"/>
- <affected-histogram name="Net.HttpJob.TotalTimeNotCached"/>
- <affected-histogram name="Net.HttpJob.TotalTimeSuccess"/>
- <affected-histogram name="PLT.BeginToFinish_CacheSensitivity"/>
- <affected-histogram name="PLT.BeginToFinishDoc_CacheSensitivity"/>
- <affected-histogram name="PLT.BeginToFirstPaint_CacheSensitivity"/>
- <affected-histogram name="PLT.CommitToFirstPaint_CacheSensitivity"/>
-</fieldtrial>
-
-<fieldtrial name="CacheSensitivityHistograms">
- <group name="CacheSensitivity" label="Cache Sensivitiy Analysis"/>
- <affected-histogram name="PLT.BeginToFinish"/>
- <affected-histogram name="PLT.BeginToFinishDoc"/>
- <affected-histogram name="PLT.BeginToFirstPaint"/>
- <affected-histogram name="PLT.CommitToFirstPaint"/>
-</fieldtrial>
-
-<fieldtrial name="CertificateTypeAlgorithms" separator=".">
- <group name="DH" label="DH"/>
- <group name="DSA" label="DSA"/>
- <group name="ECDH" label="ECDH"/>
- <group name="ECDSA" label="ECDSA"/>
- <group name="RSA" label="RSA"/>
- <group name="Unknown" label="SPKI unrecognized by cert library"/>
- <group name="Unsupported" label="Un-histogrammed type - please fix"/>
- <affected-histogram name="CertificateType.BR.Intermediate"/>
- <affected-histogram name="CertificateType.BR.Leaf"/>
- <affected-histogram name="CertificateType.BR.Root"/>
- <affected-histogram name="CertificateType.NonBR.Intermediate"/>
- <affected-histogram name="CertificateType.NonBR.Leaf"/>
- <affected-histogram name="CertificateType.NonBR.Root"/>
- <affected-histogram name="CertificateType2.BR.Intermediate"/>
- <affected-histogram name="CertificateType2.BR.Leaf"/>
- <affected-histogram name="CertificateType2.BR.Root"/>
- <affected-histogram name="CertificateType2.NonBR.Intermediate"/>
- <affected-histogram name="CertificateType2.NonBR.Leaf"/>
- <affected-histogram name="CertificateType2.NonBR.Root"/>
-</fieldtrial>
-
-<fieldtrial name="CertificateTypeBRValidity" separator=".">
- <obsolete>
- Deprecated as of 8/2013. This histogram only considered the leaf certificate
- expiry date as a proxy for whether a certificate was in-scope for the BRs,
- but did not consider the issuance date. As some CAs have issued long-lived
- certs prior to the BRs, this disproportionately reported those certs as
- being subject to the BRs, but non-compliant, when in reality they're not
- subject.
- </obsolete>
- <group name="BR"
- label="The *leaf* certificate of the chain expires after 2013-12-31,
- meaning that it should be in scope for the Baseline
- Requirement's key size requirements"/>
- <group name="NonBR"
- label="The *leaf* certificate of the chain expires on or before
- 2013-12-31"/>
- <affected-histogram name="CertificateType"/>
-</fieldtrial>
-
-<fieldtrial name="CertificateTypeBRValidity2" separator=".">
- <group name="BR"
- label="The *leaf* certificate of the chain expires after 2013-12-31 and
- was issued on or after 2012-07-01, as judged by the notBefore,
- meaning that it should be in scope for the Baseline
- Requirement's key size requirements"/>
- <group name="NonBR"
- label="The *leaf* certificate of the chain expires on or before
- 2013-12-31 or was issued before 2012-07-01"/>
- <affected-histogram name="CertificateType2"/>
-</fieldtrial>
-
-<fieldtrial name="CertificateTypeChainPosition" separator=".">
- <group name="Intermediate" label="Intermediate's SPKI"/>
- <group name="Leaf" label="Leaf's SPKI"/>
- <group name="Root" label="Root's SPKI"/>
- <affected-histogram name="CertificateType.BR"/>
- <affected-histogram name="CertificateType.NonBR"/>
- <affected-histogram name="CertificateType2.BR"/>
- <affected-histogram name="CertificateType2.NonBR"/>
-</fieldtrial>
-
-<fieldtrial name="ConnCountImpact">
- <group name="conn_count_16" label="with 16 persistent connections per host"/>
- <group name="conn_count_4" label="with 4 persistent connections per host"/>
- <group name="conn_count_5" label="with 5 persistent connections per host"/>
- <group name="conn_count_6" label="with 6 persistent connections per host"/>
- <group name="conn_count_7" label="with 7 persistent connections per host"/>
- <group name="conn_count_8" label="with 8 persistent connections per host"/>
- <group name="conn_count_9" label="with 9 persistent connections per host"/>
- <affected-histogram name="Net.Transaction_Connected_New"/>
- <affected-histogram name="PLT.Abandoned"/>
- <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
- <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
- <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
- <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
- <affected-histogram name="Renderer4.Abandoned"/>
- <affected-histogram name="Renderer4.BeginToFinish_LinkLoadNormal"/>
- <affected-histogram name="Renderer4.BeginToFinish_LinkLoadReload"/>
- <affected-histogram name="Renderer4.BeginToFinish_LinkLoadStaleOk"/>
- <affected-histogram name="Renderer4.BeginToFinish_NormalLoad"/>
-</fieldtrial>
-
-<fieldtrial name="ConnectivityDiagnostics" separator=".">
- <group name="0" label="INTERNET_DISCONNECTED"/>
- <group name="1" label="CHROME_VERSION"/>
- <group name="2" label="CHROMEOS_VERSION"/>
- <group name="3" label="DNS_RESOLVER_PRESENT"/>
- <group name="4" label="CAPTIVE_PORTAL_DNS"/>
- <group name="5" label="CAPTIVE_PORTAL_HTTP"/>
- <group name="6" label="FIREWALL_80"/>
- <group name="7" label="FIREWALL_443"/>
- <group name="8" label="RESOLVER_LATENCY"/>
- <group name="9" label="HTTP_LATENCY"/>
- <group name="10" label="NIC_SIGNAL_STRENGTH"/>
- <group name="11" label="PING_GATEWAY"/>
- <affected-histogram name="ConnectivityDiagnostics.TestVerdict"/>
- <affected-histogram name="ConnectivityDiagnostics.TimeTaken"/>
-</fieldtrial>
-
-<fieldtrial name="ConnnectBackupJobs">
- <group name="ConnectBackupJobsEnabled"/>
- <group name="ConnectBackupJobsDisabled"/>
- <affected-histogram name="Net.PreconnectUtilization"/>
- <affected-histogram name="Net.PreconnectUtilization2"/>
- <affected-histogram name="PLT.Abandoned"/>
- <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
- <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
- <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
- <affected-histogram name="PLT.LoadType"/>
-</fieldtrial>
-
-<fieldtrial name="CrosFirstRunStep" separator="">
- <group name="AppList"/>
- <group name="Tray"/>
- <group name="Help"/>
- <affected-histogram name="CrosFirstRun.TimeSpentOnStep"/>
-</fieldtrial>
-
-<fieldtrial name="DataReductionProxy">
- <group name="DataReductionProxy"
- label="Only page loads through the data reduction proxy are considered."/>
- <affected-histogram name="PLT.NT_Connect"/>
- <affected-histogram name="PLT.NT_DelayBeforeConnect"/>
- <affected-histogram name="PLT.NT_DelayBeforeDomainLookup"/>
- <affected-histogram name="PLT.NT_DelayBeforeDomLoading"/>
- <affected-histogram name="PLT.NT_DelayBeforeFetch"/>
- <affected-histogram name="PLT.NT_DelayBeforeFetchRedirect"/>
- <affected-histogram name="PLT.NT_DelayBeforeLoadEvent"/>
- <affected-histogram name="PLT.NT_DelayBeforeRequest"/>
- <affected-histogram name="PLT.NT_DomainLookup"/>
- <affected-histogram name="PLT.NT_DomContentLoaded"/>
- <affected-histogram name="PLT.NT_DomInteractive"/>
- <affected-histogram name="PLT.NT_DomLoading"/>
- <affected-histogram name="PLT.NT_LoadEvent"/>
- <affected-histogram name="PLT.NT_Redirect"/>
- <affected-histogram name="PLT.NT_Request"/>
- <affected-histogram name="PLT.NT_Response"/>
- <affected-histogram name="PLT.PT_BeginToCommit"/>
- <affected-histogram name="PLT.PT_BeginToFinish"/>
- <affected-histogram name="PLT.PT_BeginToFinishDoc"/>
- <affected-histogram name="PLT.PT_CommitToFinish"/>
- <affected-histogram name="PLT.PT_CommitToFinishDoc"/>
- <affected-histogram name="PLT.PT_FinishDocToFinish"/>
- <affected-histogram name="PLT.PT_RequestToCommit"/>
- <affected-histogram name="PLT.PT_RequestToDomContentLoaded"/>
- <affected-histogram name="PLT.PT_RequestToFinish"/>
- <affected-histogram name="PLT.PT_RequestToFinishDoc"/>
- <affected-histogram name="PLT.PT_RequestToStart"/>
- <affected-histogram name="PLT.PT_StartToCommit"/>
- <affected-histogram name="PLT.PT_StartToFinish"/>
-</fieldtrial>
-
-<fieldtrial name="DefaultAppsExperiment">
- <group name="NoDefaultApps" label="User's without default apps installed"/>
- <group name="WithDefaultApps" label="User's with default apps installed"/>
- <affected-histogram name="Extensions.AppTabLaunchType"/>
- <affected-histogram name="Extensions.ExtensionInstalled"/>
- <affected-histogram name="Extensions.ExtensionUninstalled"/>
- <affected-histogram name="NewTabPage.DefaultPageType"/>
- <affected-histogram name="NewTabPage.SelectedPageType"/>
- <affected-histogram name="NtpHandler.AttachShownPageType"/>
- <affected-histogram name="NtpHandler.SelectedShownPageType"/>
- <affected-histogram name="Profile.AppCount"/>
-</fieldtrial>
-
-<fieldtrial name="DefaultPinnedApps">
- <obsolete>
- Deprecated as of 12/2013. Default pinned apps trial is finished.
- </obsolete>
- <group name="Existing"/>
- <group name="Control"/>
- <group name="Alternate"/>
- <affected-histogram name="Cros.ClickOnShelf"/>
-</fieldtrial>
-
-<fieldtrial name="DiskUsagePerUserCount" separator=".">
- <group name="1User" label="Only 1 user exists on device."/>
- <group name="2Users" label="2 users exist on device."/>
- <group name="3Users" label="3 users exist on device."/>
- <group name="4Users" label="4 users exist on device."/>
- <group name="5Users" label="5 users exist on device."/>
- <group name="6Users" label="6 users exist on device."/>
- <group name="7OrMoreUsers" label="7 or more users exist on device."/>
- <affected-histogram name="Platform.DiskUsage.Cache_Avg"/>
- <affected-histogram name="Platform.DiskUsage.Cache_Max"/>
- <affected-histogram name="Platform.DiskUsage.Downloads_Avg"/>
- <affected-histogram name="Platform.DiskUsage.Downloads_Max"/>
- <affected-histogram name="Platform.DiskUsage.GCache_Avg"/>
- <affected-histogram name="Platform.DiskUsage.GCache_Max"/>
- <affected-histogram name="Platform.DiskUsage.LeastUsedAccountDays"/>
-</fieldtrial>
-
-<fieldtrial name="DnsImpact2">
- <group name="disabled_prefetch"
- label="DNS pre-resolving is disabled in these clients"/>
- <group name="disabled_prefetch_4_connections"
- label="DNS pre-resolving is disabled in these clients, and a maximum of
- 4 connections per host was allowed"/>
- <group name="enabled_prefetch_4_connections"
- label="a maximum of 4 connections per host was allowed in these clients"/>
- <group name="parallel_4_prefetch"
- label="DNS pre-resolving was only doing 4 concurrent speculative
- resolutions in this test"/>
- <affected-histogram name="Net.Dns_Resolution_And_TCP_Connection_Latency"/>
- <affected-histogram name="Net.TCP_Connection_Idle_Sockets">
- <with-group name="disabled_prefetch"/>
- <with-group name="disabled_prefetch_4_connections"/>
- <with-group name="enabled_prefetch_4_connections"/>
- </affected-histogram>
- <affected-histogram name="Net.TCP_Connection_Latency"/>
- <affected-histogram name="Net.Transaction_Connected"/>
- <affected-histogram name="Net.Transaction_Connected_New"/>
- <affected-histogram name="Net.Transaction_Connected_New_b"/>
- <affected-histogram name="Net.Transaction_Connected_Under_10"/>
- <affected-histogram name="Net.Transaction_Latency"/>
- <affected-histogram name="Net.Transaction_Latency_b"/>
- <affected-histogram name="Net.Transaction_Latency_Total"/>
- <affected-histogram name="Net.Transaction_Latency_Total_New_Connection"/>
- <affected-histogram
- name="Net.Transaction_Latency_Total_New_Connection_Under_10"/>
- <affected-histogram name="Net.Transaction_Latency_Total_Under_10"/>
- <affected-histogram name="Net.Transaction_Latency_Under_10"/>
- <affected-histogram name="PLT.RequestToFinish">
- <with-group name="parallel_4_prefetch"/>
- </affected-histogram>
-</fieldtrial>
-
-<fieldtrial name="DnsImpact3">
- <group name="disabled_prefetch" label="with DNS pre-resolving disabled"/>
- <group name="parallel_4_prefetch"
- label="with only 4 concurrent speculative resolutions done in parallel"/>
- <affected-histogram name="Net.Transaction_Connected_New">
- <with-group name="disabled_prefetch"/>
- </affected-histogram>
- <affected-histogram name="Renderer2.FinishDocToFinish"/>
- <affected-histogram name="Renderer2.RequestToFinish"/>
- <affected-histogram name="Renderer2.RequestToFinish_L">
- <with-group name="disabled_prefetch"/>
- </affected-histogram>
- <affected-histogram name="Renderer2.RequestToFirstLayout"/>
- <affected-histogram name="Renderer2.RequestToStart"/>
- <affected-histogram name="Renderer2.StartToFinish"/>
- <affected-histogram name="Renderer2.StartToFinishDoc"/>
- <affected-histogram name="Renderer2.StartToFirstLayout"/>
- <affected-histogram name="Renderer4.RequestToFinish">
- <with-group name="parallel_4_prefetch"/>
- </affected-histogram>
- <affected-histogram name="Renderer4.StartToFinish">
- <with-group name="parallel_4_prefetch"/>
- </affected-histogram>
-</fieldtrial>
-
-<fieldtrial name="DnsParallelism">
- <group name="parallel_10"
- label="with only 10 concurrent resolutions done in parallel"/>
- <group name="parallel_14"
- label="with only 14 concurrent resolutions done in parallel"/>
- <group name="parallel_20"
- label="with only 20 concurrent resolutions done in parallel"/>
- <group name="parallel_6"
- label="with only 6 concurrent resolutions done in parallel"/>
- <group name="parallel_7"
- label="with only 7 concurrent resolutions done in parallel"/>
- <group name="parallel_8"
- label="with only 8 concurrent resolutions done in parallel"/>
- <group name="parallel_9"
- label="with only 9 concurrent resolutions done in parallel"/>
- <group name="parallel_default"
- label="with the default number of concurrent resolutions done in
- parallel"/>
- <affected-histogram name="DNS.ResolveCategory"/>
- <affected-histogram name="DNS.ResolveSuccess"/>
-</fieldtrial>
-
-<fieldtrial name="DomainGoogle" separator="">
- <group name="Google" label="only Google cookies are recorded."/>
- <group name="Other" label="only NON-Google cookies are recorded."/>
- <affected-histogram name="Cookie.ReinstatedCookies"/>
-</fieldtrial>
-
-<fieldtrial name="ExternalExtensionEvent" separator="">
- <group name="NonWebstore"
- label="sideloaded extensions that don't update from the webstore"/>
- <group name="Webstore"
- label="sideloaded extensions that update from the webstore"/>
- <affected-histogram name="Extensions.ExternalExtensionEvent"/>
-</fieldtrial>
-
-<fieldtrial name="FileBrowserLoad" separator=".">
- <group name="Construct"
- label="Time spent constructing the main Javascript object."/>
- <group name="DOM" label="Time to initialize DOM."/>
- <group name="FileSystem"
- label="Deprecated as of 9/2013. Time to get access to the local file
- system."/>
- <group name="Parse" label="Time to parse Javascript and CSS."/>
- <group name="Roots" label="Time to enumerate file system roots."/>
- <group name="Total"
- label="Total load time from the moment the Javascript started parsing
- till the moment the empty file list is displayed."/>
- <affected-histogram name="FileBrowser.Load"/>
-</fieldtrial>
-
-<fieldtrial name="FromGWS">
- <group name="FromGWS"
- label="Only page loads that are a result of a navigation from a web
- search are considered."/>
- <affected-histogram name="PLT.BeginToFinish"/>
- <affected-histogram name="PLT.BeginToFinishDoc"/>
- <affected-histogram name="PLT.BeginToFirstPaint"/>
- <affected-histogram name="PLT.CommitToFirstPaint"/>
- <affected-histogram name="PLT.PT_BeginToCommit"/>
- <affected-histogram name="PLT.PT_BeginToFinish"/>
- <affected-histogram name="PLT.PT_BeginToFinishDoc"/>
- <affected-histogram name="PLT.PT_CommitToFinish"/>
- <affected-histogram name="PLT.PT_CommitToFinishDoc"/>
- <affected-histogram name="PLT.PT_RequestToCommit"/>
- <affected-histogram name="PLT.PT_RequestToDomContentLoaded"/>
- <affected-histogram name="PLT.PT_RequestToFinish"/>
- <affected-histogram name="PLT.PT_RequestToFinishDoc"/>
- <affected-histogram name="PLT.PT_RequestToStart"/>
- <affected-histogram name="PLT.PT_StartToCommit"/>
- <affected-histogram name="PLT.PT_StartToFinish"/>
-</fieldtrial>
-
-<fieldtrial name="GWSChromeJointExperiment">
- <group name="Experiment1"
- label="Only page loads that are a result of a navigation from a web
- search under a specific web search/Chrome joint experiment.
- Unused at this moment."/>
- <group name="Experiment2"
- label="Only page loads that are a result of a navigation from a web
- search under a specific web search/Chrome joint experiment.
- Unused at this moment."/>
- <group name="Experiment3"
- label="Only page loads that are a result of a navigation from a web
- search under a specific web search/Chrome joint experiment.
- Unused at this moment."/>
- <group name="Experiment4"
- label="Only page loads that are a result of a navigation from a web
- search under a specific web search/Chrome joint experiment.
- Unused at this moment."/>
- <group name="Experiment5"
- label="Only page loads that are a result of a navigation from a web
- search under a specific web search/Chrome joint experiment.
- Unused at this moment."/>
- <group name="Experiment6"
- label="Only page loads that are a result of a navigation from a web
- search under a specific web search/Chrome joint experiment.
- Unused at this moment."/>
- <group name="Experiment7"
- label="Only page loads that are a result of a navigation from a web
- search under a specific web search/Chrome joint experiment.
- Unused at this moment."/>
- <group name="Experiment8"
- label="Only page loads that are a result of a navigation from a web
- search under a specific web search/Chrome joint experiment.
- Unused at this moment."/>
- <group name="Experiment9"
- label="Only page loads that are a result of a navigation from a web
- search under a specific web search/Chrome joint experiment.
- Unused at this moment."/>
- <group name="Experiment10"
- label="Only page loads that are a result of a navigation from a web
- search under a specific web search/Chrome joint experiment.
- Unused at this moment."/>
- <group name="Experiment11"
- label="Only page loads that are a result of a navigation from a web
- search under a specific web search/Chrome joint experiment.
- Unused at this moment."/>
- <group name="Experiment12"
- label="Only page loads that are a result of a navigation from a web
- search under a specific web search/Chrome joint experiment.
- Unused at this moment."/>
- <group name="Experiment13"
- label="Only page loads that are a result of a navigation from a web
- search under a specific web search/Chrome joint experiment.
- Unused at this moment."/>
- <group name="Experiment14"
- label="Only page loads that are a result of a navigation from a web
- search under a specific web search/Chrome joint experiment.
- Unused at this moment."/>
- <group name="Experiment15"
- label="Only page loads that are a result of a navigation from a web
- search under a specific web search/Chrome joint experiment.
- Unused at this moment."/>
- <group name="Experiment16"
- label="Only page loads that are a result of a navigation from a web
- search under a specific web search/Chrome joint experiment.
- Unused at this moment."/>
- <group name="Experiment17"
- label="Only page loads that are a result of a navigation from a web
- search under a specific web search/Chrome joint experiment.
- Unused at this moment."/>
- <group name="Experiment18"
- label="Only page loads that are a result of a navigation from a web
- search under a specific web search/Chrome joint experiment.
- Unused at this moment."/>
- <group name="Experiment19"
- label="Only page loads that are a result of a navigation from a web
- search under a specific web search/Chrome joint experiment.
- Unused at this moment."/>
- <group name="Experiment20"
- label="Only page loads that are a result of a navigation from a web
- search under a specific web search/Chrome joint experiment.
- Unused at this moment."/>
- <affected-histogram name="PLT.BeginToFinish_FromGWS"/>
- <affected-histogram name="PLT.BeginToFinishDoc_FromGWS"/>
- <affected-histogram name="PLT.BeginToFirstPaint_FromGWS"/>
- <affected-histogram name="PLT.CommitToFirstPaint_FromGWS"/>
- <affected-histogram name="PLT.PT_BeginToCommit_FromGWS"/>
- <affected-histogram name="PLT.PT_BeginToFinish_FromGWS"/>
- <affected-histogram name="PLT.PT_BeginToFinishDoc_FromGWS"/>
- <affected-histogram name="PLT.PT_CommitToFinish_FromGWS"/>
- <affected-histogram name="PLT.PT_CommitToFinishDoc_FromGWS"/>
- <affected-histogram name="PLT.PT_RequestToCommit_FromGWS"/>
- <affected-histogram name="PLT.PT_RequestToDomContentLoaded_FromGWS"/>
- <affected-histogram name="PLT.PT_RequestToFinish_FromGWS"/>
- <affected-histogram name="PLT.PT_RequestToFinishDoc_FromGWS"/>
- <affected-histogram name="PLT.PT_RequestToStart_FromGWS"/>
- <affected-histogram name="PLT.PT_StartToCommit_FromGWS"/>
- <affected-histogram name="PLT.PT_StartToFinish_FromGWS"/>
-</fieldtrial>
-
-<fieldtrial name="HttpPipeliningCompatibility">
- <group name="disable_test" label="Do nothing"/>
- <group name="enable_test" label="Test connection for HTTP pipelining"/>
- <affected-histogram name="NetConnectivity.Pipeline.0.NetworkError"/>
- <affected-histogram name="NetConnectivity.Pipeline.0.ResponseCode"/>
- <affected-histogram name="NetConnectivity.Pipeline.0.Status"/>
- <affected-histogram name="NetConnectivity.Pipeline.1.NetworkError"/>
- <affected-histogram name="NetConnectivity.Pipeline.1.ResponseCode"/>
- <affected-histogram name="NetConnectivity.Pipeline.1.Status"/>
- <affected-histogram name="NetConnectivity.Pipeline.2.NetworkError"/>
- <affected-histogram name="NetConnectivity.Pipeline.2.ResponseCode"/>
- <affected-histogram name="NetConnectivity.Pipeline.2.Status"/>
- <affected-histogram name="NetConnectivity.Pipeline.3.NetworkError"/>
- <affected-histogram name="NetConnectivity.Pipeline.3.ResponseCode"/>
- <affected-histogram name="NetConnectivity.Pipeline.3.Status"/>
- <affected-histogram name="NetConnectivity.Pipeline.4.NetworkError"/>
- <affected-histogram name="NetConnectivity.Pipeline.4.ResponseCode"/>
- <affected-histogram name="NetConnectivity.Pipeline.4.Status"/>
- <affected-histogram name="NetConnectivity.Pipeline.5.NetworkError"/>
- <affected-histogram name="NetConnectivity.Pipeline.5.ResponseCode"/>
- <affected-histogram name="NetConnectivity.Pipeline.5.Status"/>
- <affected-histogram name="NetConnectivity.Pipeline.AllHTTP11"/>
- <affected-histogram name="NetConnectivity.Pipeline.CanarySuccess"/>
- <affected-histogram name="NetConnectivity.Pipeline.Depth"/>
- <affected-histogram name="NetConnectivity.Pipeline.Success"/>
-</fieldtrial>
-
-<fieldtrial name="IndexedDBLevelDBErrnoMethods" separator=".">
- <group name="NewLogger" label="ChromiumEnv::NewLogger"/>
- <group name="NewSequentialFile" label="ChromiumEnv::NewSequentialFile"/>
- <group name="NewWritableFile" label="ChromiumEnv::NewWritableFile"/>
- <group name="SequentialFileRead" label="ChromiumSequentialFile::Read"/>
- <group name="SequentialFileSkip" label="ChromiumSequentialFile::Skip"/>
- <group name="WritableFileAppend" label="ChromiumWritableFile::Append"/>
- <group name="WritableFileClose" label="ChromiumWritableFile::Close"/>
- <group name="WritableFileFlush" label="ChromiumWritableFile::Flush"/>
- <group name="WritableFileSync" label="ChromiumWritableFile::Sync"/>
- <group name="WritableFileSyncParent"
- label="ChromiumWritableFile::SyncParent"/>
- <affected-histogram name="WebCore.IndexedDB.LevelDBOpenErrors.Errno"/>
- <affected-histogram name="WebCore.IndexedDB.LevelDBReadErrors.Errno"/>
- <affected-histogram name="WebCore.IndexedDB.LevelDBWriteErrors.Errno"/>
-</fieldtrial>
-
-<fieldtrial name="IndexedDBLevelDBPFEMethods" separator=".">
- <group name="CreateDir" label="ChromiumEnv::CreateDir"/>
- <group name="DeleteDir" label="ChromiumEnv::DeleteDir"/>
- <group name="DeleteFile" label="ChromiumEnv::DeleteFile"/>
- <group name="GetChildren" label="ChromiumEnv::GetChildren"/>
- <group name="GetFileSize" label="ChromiumEnv::GetFileSize"/>
- <group name="LockFile" label="ChromiumEnv::LockFile"/>
- <group name="NewRandomAccessFile" label="ChromiumEnv::NewRandomAccessFile"/>
- <group name="RandomAccessFileRead" label="ChromiumRandomAccessFile::Read"/>
- <group name="RenameFile" label="ChromiumEnv::RenameFile"/>
- <group name="UnlockFile" label="ChromiumEnv::UnlockFile"/>
- <affected-histogram name="WebCore.IndexedDB.LevelDBOpenErrors.PFE"/>
- <affected-histogram name="WebCore.IndexedDB.LevelDBReadErrors.PFE"/>
- <affected-histogram name="WebCore.IndexedDB.LevelDBWriteErrors.PFE"/>
-</fieldtrial>
-
-<fieldtrial name="InstallerDownloadSources" separator="">
- <group name="HttpPeer" label="Download Source: HTTP Peer"/>
- <group name="HttpServer" label="Download Source: HTTP Server"/>
- <group name="HttpsServer" label="Download Source: HTTPS Server"/>
- <affected-histogram name="Installer.SuccessfulMBsDownloadedFrom"/>
- <affected-histogram name="Installer.TotalMBsDownloadedFrom"/>
-</fieldtrial>
-
-<fieldtrial name="Instant">
- <group name="Extended" label="Suggestions + Results"/>
- <group name="Instant" label="Results"/>
- <affected-histogram name="Instant.SessionsStorageNamespace"/>
-</fieldtrial>
-
-<fieldtrial name="InstantExtended_QuerytoQuery">
- <group name="400" label="Omnibox width &lt; 400"/>
- <group name="700" label="Omnibox width &lt; 700"/>
- <group name="1200" label="Omnibox width &lt; 1200"/>
- <group name="large" label="Omnibox width &gt;= 1200"/>
- <affected-histogram name="InstantExtended.PercentageMatchV2_QuerytoQuery"/>
- <affected-histogram name="InstantExtended.PercentageMatchV2_QuerytoURL"/>
- <affected-histogram name="InstantExtended.PercentageMatchV2_URLtoQuery"/>
- <affected-histogram name="InstantExtended.PercentageMatchV2_URLtoURL"/>
-</fieldtrial>
-
-<fieldtrial name="Interval" separator="_">
- <group name="Interval" label="Interval between two consecutive connects is"/>
- <affected-histogram name="Net.TCP_Connection_Latency"/>
-</fieldtrial>
-
-<fieldtrial name="Interval_20ms_plus_and_minus" separator="_">
- <group name="Interval_20ms_Minus"
- label="Interval between two consecutive connects is less than 20ms."/>
- <group name="Interval_20ms_Plus"
- label="Interval between two consecutive connects is greater than or
- equal to 20ms."/>
- <affected-histogram name="Net.TCP_Connection_Latency"/>
-</fieldtrial>
-
-<fieldtrial name="Interval_lt_gt_20ms" separator="_">
- <group name="LessThanOrEqual_10ms" label="less than or equal to 10ms."/>
- <group name="LessThanOrEqual_20ms"
- label="more than 10ms, and less than or equal to 20ms."/>
- <group name="GreaterThan_20ms" label="greater than 20ms."/>
- <affected-histogram name="Net.TCP_Connection_Latency_Interval"/>
-</fieldtrial>
-
-<fieldtrial name="IPv6_Probe">
- <group name="IPv6_probe_skipped"
- label="with IPv6 not probed, and default OS settings used"/>
- <group name="IPv6_probe_done"
- label="with IPv6 probed for and possibly disabled"/>
- <affected-histogram name="DNS.PrefetchResolution"/>
-</fieldtrial>
-
-<fieldtrial name="LateBindingExperiment">
- <group name="disable_late_binding" label="socket late binding is disabled"/>
- <group name="enable_late_binding" label="socket late binding is enabled"/>
- <affected-histogram name="Net.SocketIdleTimeBeforeNextUse_ReusedSocket"/>
- <affected-histogram name="Net.SocketIdleTimeBeforeNextUse_UnusedSocket"/>
- <affected-histogram name="Net.SocketIdleTimeOnIOError2_ReusedSocket"/>
- <affected-histogram name="Net.SocketIdleTimeOnIOError2_UnusedSocket"/>
- <affected-histogram name="Net.TCPSocketType"/>
- <affected-histogram name="Net.Transaction_Connected"/>
- <affected-histogram name="Net.Transaction_Connected_Under_10"/>
- <affected-histogram name="Net.TransportSocketRequestTime"/>
- <affected-histogram name="Renderer4.BeginToFinish_LinkLoad"/>
- <affected-histogram name="Renderer4.BeginToFinish_LinkLoadNormal"/>
- <affected-histogram name="Renderer4.BeginToFinish_LinkLoadReload"/>
- <affected-histogram name="Renderer4.BeginToFinish_NormalLoad"/>
- <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoad"/>
- <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoadNormal"/>
- <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoadReload"/>
- <affected-histogram name="Renderer4.BeginToFinishDoc_NormalLoad"/>
- <affected-histogram name="Renderer4.RequestToFinish"/>
- <affected-histogram name="Renderer4.StartToFinish"/>
-</fieldtrial>
-
-<fieldtrial name="LevelDBEnvBackupRestore" separator="">
- <group name="Backup" label="Backing up an ldb file."/>
- <group name="Restore" label="Restoring an ldb file."/>
- <affected-histogram name="LevelDBEnv.IDB.Table"/>
- <affected-histogram name="LevelDBEnv.Table"/>
-</fieldtrial>
-
-<fieldtrial name="LevelDBEnvMaxFDs" separator=".">
- <group name="Success"
- label="This histogram shows the limit when open succeeded."/>
- <group name="TooManyOpened"
- label="This histogram shows the limit when open failed because the
- limit had been reached."/>
- <group name="OtherError"
- label="This histogram shows the limit when open failed for reasons
- other than exceeding the limit."/>
- <affected-histogram name="LevelDBEnv.IDB.MaxFDs"/>
- <affected-histogram name="LevelDBEnv.MaxFDs"/>
-</fieldtrial>
-
-<fieldtrial name="LevelDBEnvPlatformFileErrors" separator="">
- <group name="CreateDir" label="ChromiumEnv::CreateDir"/>
- <group name="GetChildren" label="ChromiumEnv::GetChildren"/>
- <group name="LockFile" label="ChromiumEnv::LockFile"/>
- <group name="NewRandomAccessFile" label="ChromiumEnv::NewRandomAccessFile"/>
- <group name="RenameFile" label="ChromiumEnv::RenameFile"/>
- <affected-histogram name="LevelDBEnv.IDB.IOError."/>
- <affected-histogram name="LevelDBEnv.IOError."/>
-</fieldtrial>
-
-<fieldtrial name="LevelDBEnvRetry" separator="">
- <group name="RenameFile" label="RenameFile"/>
- <group name="LockFile" label="LockFile"/>
- <group name="CreateDir" label="CreateDir"/>
- <affected-histogram name="LevelDBEnv.IDB.RetryRecoveredFromErrorIn"/>
- <affected-histogram name="LevelDBEnv.IDB.TimeUntilSuccessFor"/>
- <affected-histogram name="LevelDBEnv.RetryRecoveredFromErrorIn"/>
- <affected-histogram name="LevelDBEnv.TimeUntilSuccessFor"/>
-</fieldtrial>
-
-<fieldtrial name="LevelDBEnvRetryTimes" separator="">
- <obsolete>
- Deprecated 2013-04 in favor of LevelDBEnvRetry.
- </obsolete>
- <group name="Rename" label="RenameFile"/>
- <group name="LockFile" label="LockFile"/>
- <affected-histogram name="LevelDBEnv.IDB.TimeTo"/>
- <affected-histogram name="LevelDBEnv.TimeTo"/>
-</fieldtrial>
-
-<fieldtrial name="MediaAudioInputControllerTime" separator=".">
- <group name="CloseTime" label="Measures the time taken for DoClose()."/>
- <group name="CreateTime" label="Measures the time taken for DoCreate()."/>
- <group name="RecordTime" label="Measures the time taken for DoRecord()."/>
- <affected-histogram name="Media.AudioInputController"/>
-</fieldtrial>
-
-<fieldtrial name="MediaAudioInputDeviceManagerTime" separator=".">
- <group name="OpenOnDeviceThreadTime"
- label="Measures the time taken for OpenOnDeviceThread()."/>
- <group name="EnumerateOnDeviceThreadTime"
- label="Measures the time taken for EnumerateOnDeviceThread()."/>
- <affected-histogram name="Media.AudioInputDeviceManager"/>
-</fieldtrial>
-
-<fieldtrial name="MediaAudioOutputControllerTime" separator=".">
- <group name="CloseTime" label="Measures the time taken for DoClose()."/>
- <group name="CreateTime" label="Measures the time taken for DoCreate()."/>
- <group name="DeviceChangeTime"
- label="Measures the time taken for OnDeviceChange()."/>
- <group name="PauseTime" label="Measures the time taken for DoPause()."/>
- <group name="PlayTime"
- label="Measures the time taken for DoPlay(). Technically only the
- worker method AudioOutputController::PollAndStartIfDataReady()."/>
- <affected-histogram name="Media.AudioOutputController"/>
-</fieldtrial>
-
-<fieldtrial name="MediaVideoCaptureManagerTime" separator=".">
- <group name="OnEnumerateDevicesTime"
- label="Measures the time taken for OnEnumerateDevices()."/>
- <group name="OnOpenTime" label="Measures the time taken for OnOpen()."/>
- <group name="OnCloseTime" label="Measures the time taken for OnClose()."/>
- <group name="OnStartTime" label="Measures the time taken for OnStart()."/>
- <group name="OnStopTime" label="Measures the time taken for OnStop()."/>
- <affected-histogram name="Media.VideoCaptureManager"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity" separator=".">
- <group name="53.100B" label="100 bytes of data on port 53."/>
- <group name="53.100B.NoProxy"
- label="100 bytes of data on port 53 with no proxy."/>
- <group name="53.1K" label="1K bytes of data on port 53."/>
- <group name="53.1K.NoProxy"
- label="1K bytes of data on port 53 with no proxy."/>
- <group name="53.100B.RTT" label="100 bytes of data on port 53 successfully."/>
- <group name="53.100B.RTT.NoProxy"
- label="100 bytes of data on port 53 successfully with no proxy."/>
- <group name="53.1K.RTT" label="1K bytes of data on port 53 successfully."/>
- <group name="53.1K.RTT.NoProxy"
- label="1K bytes of data on port 53 successfully with no proxy."/>
- <group name="587.100B" label="100 bytes of data on port 587."/>
- <group name="587.100B.NoProxy"
- label="100 bytes of data on port 587 with no proxy."/>
- <group name="587.1K" label="1K bytes of data on port 587."/>
- <group name="587.1K.NoProxy"
- label="1K bytes of data on port 587 with no proxy."/>
- <group name="587.100B.RTT"
- label="100 bytes of data on port 587 successfully."/>
- <group name="587.100B.RTT.NoProxy"
- label="100 bytes of data on port 587 successfully with no proxy."/>
- <group name="587.1K.RTT" label="1K bytes of data on port 587 successfully."/>
- <group name="587.1K.RTT.NoProxy"
- label="1K bytes of data on port 587 successfully with no proxy."/>
- <group name="6121.100B" label="100 bytes of data on port 6121."/>
- <group name="6121.100B.NoProxy"
- label="100 bytes of data on port 6121 with no proxy."/>
- <group name="6121.1K" label="1K bytes of data on port 6121."/>
- <group name="6121.1K.NoProxy"
- label="1K bytes of data on port 6121 with no proxy."/>
- <group name="6121.100B.RTT"
- label="100 bytes of data on port 6121 successfully."/>
- <group name="6121.100B.RTT.NoProxy"
- label="100 bytes of data on port 6121 successfully with no proxy."/>
- <group name="6121.1K.RTT"
- label="1K bytes of data on port 6121 successfully."/>
- <group name="6121.1K.RTT.NoProxy"
- label="1K bytes of data on port 6121 successfully with no proxy."/>
- <group name="80.100B" label="100 bytes of data on port 80."/>
- <group name="80.100B.NoProxy"
- label="100 bytes of data on port 80 with no proxy."/>
- <group name="80.1K" label="1K bytes of data on port 80."/>
- <group name="80.1K.NoProxy"
- label="1K bytes of data on port 80 with no proxy."/>
- <group name="80.100B.RTT" label="100 bytes of data on port 80 successfully."/>
- <group name="80.100B.RTT.NoProxy"
- label="100 bytes of data on port 80 successfully with no proxy."/>
- <group name="80.1K.RTT" label="1K bytes of data on port 80 successfully."/>
- <group name="80.1K.RTT.NoProxy"
- label="1K bytes of data on port 80 successfully with no proxy."/>
- <group name="8080.100B" label="100 bytes of data on port 8080."/>
- <group name="8080.100B.NoProxy"
- label="100 bytes of data on port 8080 with no proxy."/>
- <group name="8080.1K" label="1K bytes of data on port 8080."/>
- <group name="8080.1K.NoProxy"
- label="1K bytes of data on port 8080 with no proxy."/>
- <group name="8080.100B.RTT"
- label="100 bytes of data on port 8080 successfully."/>
- <group name="8080.100B.RTT.NoProxy"
- label="100 bytes of data on port 8080 successfully with no proxy."/>
- <group name="8080.1K.RTT"
- label="1K bytes of data on port 8080 successfully."/>
- <group name="8080.1K.RTT.NoProxy"
- label="1K bytes of data on port 8080 successfully with no proxy."/>
- <affected-histogram name="NetConnectivity.TCP.Status"/>
- <affected-histogram name="NetConnectivity.TCP.Success"/>
- <affected-histogram name="NetConnectivity.UDP.PacketLoss"/>
- <affected-histogram name="NetConnectivity.UDP.PacketLoss6"/>
- <affected-histogram name="NetConnectivity.UDP.Status"/>
- <affected-histogram name="NetConnectivity.UDP.Success"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity2" separator=".">
- <group name="AcksReceivedFromFirst2Packets" label="2 packets."/>
- <group name="AcksReceivedFromFirst3Packets" label="3 packets."/>
- <group name="AcksReceivedFromFirst4Packets" label="4 packets."/>
- <group name="AcksReceivedFromFirst5Packets" label="5 packets."/>
- <group name="AcksReceivedFromFirst6Packets" label="6 packets."/>
- <group name="AcksReceivedFromFirst7Packets" label="7 packets."/>
- <group name="AcksReceivedFromFirst8Packets" label="8 packets."/>
- <group name="AcksReceivedFromFirst9Packets" label="9 packets."/>
- <group name="AcksReceivedFromFirst10Packets" label="10 packets."/>
- <group name="AcksReceivedFromFirst11Packets" label="11 packets."/>
- <group name="AcksReceivedFromFirst12Packets" label="12 packets."/>
- <group name="AcksReceivedFromFirst13Packets" label="13 packets."/>
- <group name="AcksReceivedFromFirst14Packets" label="14 packets."/>
- <group name="AcksReceivedFromFirst15Packets" label="15 packets."/>
- <group name="AcksReceivedFromFirst16Packets" label="16 packets."/>
- <group name="AcksReceivedFromFirst17Packets" label="17 packets."/>
- <group name="AcksReceivedFromFirst18Packets" label="18 packets."/>
- <group name="AcksReceivedFromFirst19Packets" label="19 packets."/>
- <group name="AcksReceivedFromFirst20Packets" label="20 packets."/>
- <group name="AcksReceivedFromFirst21Packets" label="21 packets."/>
- <affected-histogram name="NetConnectivity.Sent21"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity2a" separator=".">
- <group name="6121.100B" label="100 bytes of data is sent on port 6121."/>
- <group name="6121.500B" label="500 bytes of data is sent on port 6121."/>
- <group name="6121.1K" label="1K bytes of data is sent on port 6121."/>
- <affected-histogram name="NetConnectivity2.Sent21.AckReceivedForNthPacket"/>
- <affected-histogram name="NetConnectivity2.Sent21.GotAnAck"/>
- <affected-histogram name="NetConnectivity2.Sent21.PacketsSent"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity2b" separator=".">
- <group name="AcksReceivedFromFirst2Packets.6121.100B"
- label="2 packets. 100 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst3Packets.6121.100B"
- label="3 packets. 100 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst4Packets.6121.100B"
- label="4 packets. 100 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst5Packets.6121.100B"
- label="5 packets. 100 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst6Packets.6121.100B"
- label="6 packets. 100 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst7Packets.6121.100B"
- label="7 packets. 100 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst8Packets.6121.100B"
- label="8 packets. 100 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst9Packets.6121.100B"
- label="9 packets. 100 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst10Packets.6121.100B"
- label="10 packets. 100 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst11Packets.6121.100B"
- label="11 packets. 100 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst12Packets.6121.100B"
- label="12 packets. 100 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst13Packets.6121.100B"
- label="13 packets. 100 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst14Packets.6121.100B"
- label="14 packets. 100 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst15Packets.6121.100B"
- label="15 packets. 100 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst16Packets.6121.100B"
- label="16 packets. 100 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst17Packets.6121.100B"
- label="17 packets. 100 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst18Packets.6121.100B"
- label="18 packets. 100 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst19Packets.6121.100B"
- label="19 packets. 100 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst20Packets.6121.100B"
- label="20 packets. 100 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst21Packets.6121.100B"
- label="21 packets. 100 bytes of data is sent on port 6121."/>
- <affected-histogram name="NetConnectivity2.Sent21"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity2c" separator=".">
- <group name="6121.100B" label="100 bytes of data is sent on port 6121."/>
- <group name="6121.100B.NoProxy"
- label="100 bytes of data is sent on port 6121 with no proxy."/>
- <group name="6121.500B" label="500 bytes of data is sent on port 6121."/>
- <group name="6121.500B.NoProxy"
- label="500 bytes of data is sent on port 6121 with no proxy."/>
- <group name="6121.1K" label="1K bytes of data is sent on port 6121."/>
- <group name="6121.1K.NoProxy"
- label="1K bytes of data is sent on port 6121 with no proxy."/>
- <affected-histogram name="NetConnectivity2.Send6.PacketsSent"/>
- <affected-histogram name="NetConnectivity2.Send6.SeriesAcked"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity2d" separator=".">
- <group name="AcksReceivedFromFirst2Packets.6121.500B"
- label="2 packets. 500 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst3Packets.6121.500B"
- label="3 packets. 500 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst4Packets.6121.500B"
- label="4 packets. 500 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst5Packets.6121.500B"
- label="5 packets. 500 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst6Packets.6121.500B"
- label="6 packets. 500 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst7Packets.6121.500B"
- label="7 packets. 500 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst8Packets.6121.500B"
- label="8 packets. 500 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst9Packets.6121.500B"
- label="9 packets. 500 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst10Packets.6121.500B"
- label="10 packets. 500 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst11Packets.6121.500B"
- label="11 packets. 500 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst12Packets.6121.500B"
- label="12 packets. 500 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst13Packets.6121.500B"
- label="13 packets. 500 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst14Packets.6121.500B"
- label="14 packets. 500 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst15Packets.6121.500B"
- label="15 packets. 500 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst16Packets.6121.500B"
- label="16 packets. 500 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst17Packets.6121.500B"
- label="17 packets. 500 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst18Packets.6121.500B"
- label="18 packets. 500 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst19Packets.6121.500B"
- label="19 packets. 500 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst20Packets.6121.500B"
- label="20 packets. 500 bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst21Packets.6121.500B"
- label="21 packets. 500 bytes of data is sent on port 6121."/>
- <affected-histogram name="NetConnectivity2.Sent21"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity2e" separator=".">
- <group name="AcksReceivedFromFirst2Packets.6121.1K"
- label="2 packets. 1K bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst3Packets.6121.1K"
- label="3 packets. 1K bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst4Packets.6121.1K"
- label="4 packets. 1K bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst5Packets.6121.1K"
- label="5 packets. 1K bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst6Packets.6121.1K"
- label="6 packets. 1K bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst7Packets.6121.1K"
- label="7 packets. 1K bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst8Packets.6121.1K"
- label="8 packets. 1K bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst9Packets.6121.1K"
- label="9 packets. 1K bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst10Packets.6121.1K"
- label="10 packets. 1K bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst11Packets.6121.1K"
- label="11 packets. 1K bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst12Packets.6121.1K"
- label="12 packets. 1K bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst13Packets.6121.1K"
- label="13 packets. 1K bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst14Packets.6121.1K"
- label="14 packets. 1K bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst15Packets.6121.1K"
- label="15 packets. 1K bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst16Packets.6121.1K"
- label="16 packets. 1K bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst17Packets.6121.1K"
- label="17 packets. 1K bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst18Packets.6121.1K"
- label="18 packets. 1K bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst19Packets.6121.1K"
- label="19 packets. 1K bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst20Packets.6121.1K"
- label="20 packets. 1K bytes of data is sent on port 6121."/>
- <group name="AcksReceivedFromFirst21Packets.6121.1K"
- label="21 packets. 1K bytes of data is sent on port 6121."/>
- <affected-histogram name="NetConnectivity2.Sent21"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity3a" separator=".">
- <group name="NonPacedPacket"
- label="In this histogram results are only shown if at least two packets
- were ACKed in the Startup Test. Packets were sent as rapidly as
- possible."/>
- <group name="PacedPacket"
- label="In this histogram results are only shown if at least two packets
- were ACKed in the Startup Test. Packets are sent at equal
- intervals. The interval is selected to match the bandwidth
- discovered during the StartPacket test."/>
- <group name="StartPacket"
- label="Packets are sent as rapidly as possible, just after successfully
- sending an UMA upload. Each packet was numbered, as was its ACK
- sent back by Google. If no packets (of the 21) were ever ACKed,
- then the port is assumed to be blocked, and no data is recorded
- in this histogram."/>
- <affected-histogram name="NetConnectivity3"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity3aa" separator=".">
- <group name="Sent21"
- label="This histogram shows the number of echo responses received from
- the first"/>
- <affected-histogram name="NetConnectivity3.NonPacedPacket"/>
- <affected-histogram name="NetConnectivity3.PacedPacket"/>
- <affected-histogram name="NetConnectivity3.StartPacket"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity3AckReceivedForNthPacket" separator=".">
- <group name="Sent21.AckReceivedForNthPacket"
- label="Each packet was numbered, as was its ACK sent back by Google.
- This histogram records, for each packet number, how often we
- received an ACK for that packet."/>
- <affected-histogram name="NetConnectivity3.NonPacedPacket"/>
- <affected-histogram name="NetConnectivity3.PacedPacket"/>
- <affected-histogram name="NetConnectivity3.StartPacket"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity3AcksReceivedFromFirst" separator=".">
- <group name="AcksReceivedFromFirst02Packets" label="2 packets."/>
- <group name="AcksReceivedFromFirst03Packets" label="3 packets."/>
- <group name="AcksReceivedFromFirst04Packets" label="4 packets."/>
- <group name="AcksReceivedFromFirst05Packets" label="5 packets."/>
- <group name="AcksReceivedFromFirst06Packets" label="6 packets."/>
- <group name="AcksReceivedFromFirst07Packets" label="7 packets."/>
- <group name="AcksReceivedFromFirst08Packets" label="8 packets."/>
- <group name="AcksReceivedFromFirst09Packets" label="9 packets."/>
- <group name="AcksReceivedFromFirst10Packets" label="10 packets."/>
- <group name="AcksReceivedFromFirst11Packets" label="11 packets."/>
- <group name="AcksReceivedFromFirst12Packets" label="12 packets."/>
- <group name="AcksReceivedFromFirst13Packets" label="13 packets."/>
- <group name="AcksReceivedFromFirst14Packets" label="14 packets."/>
- <group name="AcksReceivedFromFirst15Packets" label="15 packets."/>
- <group name="AcksReceivedFromFirst16Packets" label="16 packets."/>
- <group name="AcksReceivedFromFirst17Packets" label="17 packets."/>
- <group name="AcksReceivedFromFirst18Packets" label="18 packets."/>
- <group name="AcksReceivedFromFirst19Packets" label="19 packets."/>
- <group name="AcksReceivedFromFirst20Packets" label="20 packets."/>
- <group name="AcksReceivedFromFirst21Packets" label="21 packets."/>
- <affected-histogram name="NetConnectivity3.NonPacedPacket.Sent21"/>
- <affected-histogram name="NetConnectivity3.PacedPacket.Sent21"/>
- <affected-histogram name="NetConnectivity3.StartPacket.Sent21"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity3GotAnAck" separator=".">
- <group name="Sent21.GotAnAck"
- label="The histogram shows if we ever got an ACK for a packet in our
- series of 21."/>
- <affected-histogram name="NetConnectivity3.NonPacedPacket"/>
- <affected-histogram name="NetConnectivity3.PacedPacket"/>
- <affected-histogram name="NetConnectivity3.StartPacket"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity3PacketDelay1" separator=".">
- <group name="Sent21.443"
- label="This histogram shows the difference between the time when we
- have received 1st byte from the server and the last time when we
- have received data from the server on port 443."/>
- <group name="Sent21.6121"
- label="This histogram shows the difference between the time when we
- have received 1st byte from the server and the last time when we
- have received data from the server on port 6121."/>
- <affected-histogram name="NetConnectivity3.NonPacedPacket"/>
- <affected-histogram name="NetConnectivity3.PacedPacket"/>
- <affected-histogram name="NetConnectivity3.StartPacket"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity3PacketDelay2" separator=".">
- <group name="443.100B.PacketDelay"
- label="100 bytes of data is sent on port 443."/>
- <group name="443.1200B.PacketDelay"
- label="1200 bytes of data is sent on port 443."/>
- <group name="443.500B.PacketDelay"
- label="500 bytes of data is sent on port 443."/>
- <group name="6121.100B.PacketDelay"
- label="100 bytes of data is sent on port 6121."/>
- <group name="6121.1200B.PacketDelay"
- label="1200 bytes of data is sent on port 6121."/>
- <group name="6121.500B.PacketDelay"
- label="500 bytes of data is sent on port 6121."/>
- <affected-histogram name="NetConnectivity3.NonPacedPacket.Sent21"/>
- <affected-histogram name="NetConnectivity3.PacedPacket.Sent21"/>
- <affected-histogram name="NetConnectivity3.StartPacket.Sent21"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity3PacketRTT" separator=".">
- <group name="Sent21.Success.RTT" label="The histogram shows the RTT for"/>
- <affected-histogram name="NetConnectivity3.NonPacedPacket"/>
- <affected-histogram name="NetConnectivity3.PacedPacket"/>
- <affected-histogram name="NetConnectivity3.StartPacket"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity3Packets" separator=".">
- <group name="Packet01" label="1st packet."/>
- <group name="Packet02" label="2nd packet."/>
- <group name="Packet03" label="3rd packet."/>
- <group name="Packet10" label="10th packet."/>
- <group name="Packet20" label="20th packet."/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT"/>
- <affected-histogram name="NetConnectivity3.PacedPacket.Sent21.Success.RTT"/>
- <affected-histogram name="NetConnectivity3.StartPacket.Sent21.Success.RTT"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity3PacketsSent" separator=".">
- <group name="Sent21.PacketsSent"
- label="This histogram records how many packets (out of 21 attempted)
- were sent to the server via UDP."/>
- <group name="Send6.SeriesAcked"
- label="Chrome sends 6 UDP packets in a row to test to see if there is a
- probabalistic dependency in packet loss for consecutive packets.
- We record a bit vector of packets received, where the least
- significant bit is a 1 if the first packet was received, etc.
- For example, if all packets other than packet 2 and 4 are
- responded to, then we'd have a sample (in binary) of 110101B, or
- 53."/>
- <affected-histogram name="NetConnectivity3.NonPacedPacket"/>
- <affected-histogram name="NetConnectivity3.PacedPacket"/>
- <affected-histogram name="NetConnectivity3.StartPacket"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity3PacketsSentBytes" separator=".">
- <group name="443.100B" label="100 bytes of data is sent on port 443."/>
- <group name="443.500B" label="500 bytes of data is sent on port 443."/>
- <group name="443.1200B" label="1200 bytes of data is sent on port 443."/>
- <group name="6121.100B" label="100 bytes of data is sent on port 6121."/>
- <group name="6121.500B" label="500 bytes of data is sent on port 6121."/>
- <group name="6121.1200B" label="1200 bytes of data is sent on port 6121."/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.AckReceivedForNthPacket"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst02Packets"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst03Packets"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst04Packets"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst05Packets"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst06Packets"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst07Packets"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst08Packets"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst09Packets"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst10Packets"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst11Packets"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst12Packets"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst13Packets"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst14Packets"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst15Packets"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst16Packets"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst17Packets"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst18Packets"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst19Packets"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst20Packets"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst21Packets"/>
- <affected-histogram name="NetConnectivity3.NonPacedPacket.Sent21.GotAnAck"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.PacketsSent"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT.Packet01"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT.Packet02"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT.Packet03"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT.Packet10"/>
- <affected-histogram
- name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT.Packet20"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.AckReceivedForNthPacket"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst02Packets"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst03Packets"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst04Packets"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst05Packets"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst06Packets"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst07Packets"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst08Packets"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst09Packets"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst10Packets"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst11Packets"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst12Packets"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst13Packets"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst14Packets"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst15Packets"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst16Packets"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst17Packets"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst18Packets"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst19Packets"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst20Packets"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst21Packets"/>
- <affected-histogram name="NetConnectivity3.PacedPacket.Sent21.GotAnAck"/>
- <affected-histogram name="NetConnectivity3.PacedPacket.Sent21.PacketsSent"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.Success.RTT.Packet01"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.Success.RTT.Packet02"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.Success.RTT.Packet03"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.Success.RTT.Packet10"/>
- <affected-histogram
- name="NetConnectivity3.PacedPacket.Sent21.Success.RTT.Packet20"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.AckReceivedForNthPacket"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst02Packets"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst03Packets"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst04Packets"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst05Packets"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst06Packets"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst07Packets"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst08Packets"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst09Packets"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst10Packets"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst11Packets"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst12Packets"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst13Packets"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst14Packets"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst15Packets"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst16Packets"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst17Packets"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst18Packets"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst19Packets"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst20Packets"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst21Packets"/>
- <affected-histogram name="NetConnectivity3.StartPacket.Sent21.GotAnAck"/>
- <affected-histogram name="NetConnectivity3.StartPacket.Sent21.PacketsSent"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.Success.RTT.Packet01"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.Success.RTT.Packet02"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.Success.RTT.Packet03"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.Success.RTT.Packet10"/>
- <affected-histogram
- name="NetConnectivity3.StartPacket.Sent21.Success.RTT.Packet20"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity3Send6Acked" separator=".">
- <group name="443.100B" label="100 bytes of data is sent on port 443."/>
- <group name="443.100B.NoProxy"
- label="100 bytes of data is sent on port 443 with no proxy."/>
- <group name="443.500B" label="500 bytes of data is sent on port 443."/>
- <group name="443.500B.NoProxy"
- label="500 bytes of data is sent on port 443 with no proxy."/>
- <group name="443.1200B" label="1200 bytes of data is sent on port 443."/>
- <group name="443.1200B.NoProxy"
- label="1200 bytes of data is sent on port 443 with no proxy."/>
- <group name="6121.100B" label="100 bytes of data is sent on port 6121."/>
- <group name="6121.100B.NoProxy"
- label="100 bytes of data is sent on port 6121 with no proxy."/>
- <group name="6121.500B" label="500 bytes of data is sent on port 6121."/>
- <group name="6121.500B.NoProxy"
- label="500 bytes of data is sent on port 6121 with no proxy."/>
- <group name="6121.1200B" label="1200 bytes of data is sent on port 6121."/>
- <group name="6121.1200B.NoProxy"
- label="1200 bytes of data is sent on port 6121 with no proxy."/>
- <affected-histogram name="NetConnectivity3.NonPacedPacket.Send6.SeriesAcked"/>
- <affected-histogram name="NetConnectivity3.PacedPacket.Send6.SeriesAcked"/>
- <affected-histogram name="NetConnectivity3.StartPacket.Send6.PacketsSent"/>
- <affected-histogram name="NetConnectivity3.StartPacket.Send6.SeriesAcked"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity4a" separator=".">
- <group name="NATBind.Sent2"
- label="Two packets were sent spreading over a random period, to test if
- the NAT dropped the binding. Afterwords, an extra (short) packet
- was sent with renewed NAT binding to test whether the network
- that was used to deliver the first packet is still connected.
- Results are only shown in this histogram if at least ten packets
- were received in the StartPacket test."/>
- <group name="NonPacedPacket"
- label="21 Packets were sent as rapidly as possible. Results are only
- shown in this histogram if at least two packets were received in
- the StartPacket Test."/>
- <group name="PacedPacket"
- label="21 Packets were sent at equal intervals, which were selected to
- match the bandwidth discovered during the StartPacket test.
- Results are only shown in this histogram if at least two packets
- were received in the StartPacket Test."/>
- <group name="StartPacket"
- label="21 Packets were sent as rapidly as possible, just after the
- client successfully sent a UMA upload. Each packet was numbered
- when it was sent by Google."/>
- <affected-histogram name="NetConnectivity4"/>
- <affected-histogram name="NetConnectivity5"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity4NATBindPacketReceives" separator=".">
- <group name="Bind.Failure"
- label="Only when the second packet never arrived (we wait for 10 extra
- seconds) and the first and the extra (short) packets arrived did
- we record the duration in seconds between the sendings of the
- first two packets in this histogram."/>
- <group name="Bind.Success"
- label="Only when all three packets including the extra (short) packet
- arrived did we record the duration in seconds between the
- sendings of the first two packets in this histogram."/>
- <group name="Connectivity.Failure"
- label="Only when the extra (short) packet (with renewed NAT binding)
- never arrived (we wait for 10 extra seconds) did we record the
- duration in seconds between the sendings of the first two
- packets in this histogram."/>
- <group name="Connectivity.Success"
- label="Only when the extra (short) packet arrived did we record the
- duration in seconds between the sendings of the first two
- packets in this histogram."/>
- <group name="SendToLastRecvDelay"
- label="This histogram records the time duration (in milliseconds)
- between the client sending the request and the receiving of the
- second packet sent from the server, excluding the idle time
- between sendings of the first two packets. Results are only
- shown if the first two packets are both received."/>
- <affected-histogram name="NetConnectivity4.NATBind.Sent2"/>
- <affected-histogram name="NetConnectivity5.NATBind.Sent2"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity4PacketFirst6" separator=".">
- <group name="First6.SeriesRecv"
- label="This histogram records a bit vector of the first 6 packets sent,
- where the least significant bit is a 1 if the first packet was
- received, etc. For example, if all packets other than packet 2
- and 4 are received, then we'd have a sample (in binary) of
- 110101B, or 53."/>
- <group name="Sent21"
- label="This histogram shows the number of packets received from the
- first"/>
- <affected-histogram name="NetConnectivity4.NonPacedPacket"/>
- <affected-histogram name="NetConnectivity4.PacedPacket"/>
- <affected-histogram name="NetConnectivity4.StartPacket"/>
- <affected-histogram name="NetConnectivity5.NonPacedPacket"/>
- <affected-histogram name="NetConnectivity5.PacedPacket"/>
- <affected-histogram name="NetConnectivity5.StartPacket"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity4PacketReceives" separator=".">
- <group name="NumRecvFromFirst01Packets" label="1 packet."/>
- <group name="NumRecvFromFirst02Packets" label="2 packets."/>
- <group name="NumRecvFromFirst03Packets" label="3 packets."/>
- <group name="NumRecvFromFirst04Packets" label="4 packets."/>
- <group name="NumRecvFromFirst05Packets" label="5 packets."/>
- <group name="NumRecvFromFirst06Packets" label="6 packets."/>
- <group name="NumRecvFromFirst07Packets" label="7 packets."/>
- <group name="NumRecvFromFirst08Packets" label="8 packets."/>
- <group name="NumRecvFromFirst09Packets" label="9 packets."/>
- <group name="NumRecvFromFirst10Packets" label="10 packets."/>
- <group name="NumRecvFromFirst11Packets" label="11 packets."/>
- <group name="NumRecvFromFirst12Packets" label="12 packets."/>
- <group name="NumRecvFromFirst13Packets" label="13 packets."/>
- <group name="NumRecvFromFirst14Packets" label="14 packets."/>
- <group name="NumRecvFromFirst15Packets" label="15 packets."/>
- <group name="NumRecvFromFirst16Packets" label="16 packets."/>
- <group name="NumRecvFromFirst17Packets" label="17 packets."/>
- <group name="NumRecvFromFirst18Packets" label="18 packets."/>
- <group name="NumRecvFromFirst19Packets" label="19 packets."/>
- <group name="NumRecvFromFirst20Packets" label="20 packets."/>
- <group name="NumRecvFromFirst21Packets" label="21 packets."/>
- <affected-histogram name="NetConnectivity4.NonPacedPacket.Sent21"/>
- <affected-histogram name="NetConnectivity4.PacedPacket.Sent21"/>
- <affected-histogram name="NetConnectivity4.StartPacket.Sent21"/>
- <affected-histogram name="NetConnectivity5.NonPacedPacket.Sent21"/>
- <affected-histogram name="NetConnectivity5.PacedPacket.Sent21"/>
- <affected-histogram name="NetConnectivity5.StartPacket.Sent21"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity4PacketRTT" separator=".">
- <group name="Sent21.GotAPacket"
- label="The histogram shows if we ever got at least one packet in our
- series of 21."/>
- <group name="Sent21.PacketDelay"
- label="The histogram shows the average inter-arrival time between every
- two consecutive packets we receive in our series of 21
- multiplied by 20 (so this is essentially the time duration
- between the first and the last received packets)."/>
- <group name="Sent21.PacketsRecv"
- label="The histogram shows how many packets we receive in our series of
- 21."/>
- <group name="Sent21.RecvNthPacket"
- label="Each packet was numbered when it was sent by Google. This
- histogram records, for each packet number, how often we received
- that packet."/>
- <group name="Sent21.SendToLastRecvDelay"
- label="This histogram records the time duration between the client
- sending the request and the receiving of the last packet sent
- from the server, excluding the total pacing time requested by
- the client. Results are only shown if at least two packets are
- received."/>
- <group name="Sent21.Success.RTT" label="The histogram shows the RTT for the"/>
- <affected-histogram name="NetConnectivity4.NonPacedPacket"/>
- <affected-histogram name="NetConnectivity4.PacedPacket"/>
- <affected-histogram name="NetConnectivity4.StartPacket"/>
- <affected-histogram name="NetConnectivity5.NonPacedPacket"/>
- <affected-histogram name="NetConnectivity5.PacedPacket"/>
- <affected-histogram name="NetConnectivity5.StartPacket"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity4PacketRTTSeries" separator=".">
- <group name="Packet01" label="1st packet."/>
- <group name="Packet02" label="2nd packet."/>
- <group name="Packet03" label="3rd packet."/>
- <group name="Packet10" label="10th packet."/>
- <group name="Packet20" label="20th packet."/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.Success.RTT"/>
- <affected-histogram name="NetConnectivity4.PacedPacket.Sent21.Success.RTT"/>
- <affected-histogram name="NetConnectivity4.StartPacket.Sent21.Success.RTT"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.Success.RTT"/>
- <affected-histogram name="NetConnectivity5.PacedPacket.Sent21.Success.RTT"/>
- <affected-histogram name="NetConnectivity5.StartPacket.Sent21.Success.RTT"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity4PacketsAll" separator=".">
- <group name="443.100B" label="100 bytes of data is sent on port 443."/>
- <group name="443.1200B" label="1200 bytes of data is sent on port 443."/>
- <group name="443.500B" label="500 bytes of data is sent on port 443."/>
- <group name="80.100B" label="100 bytes of data is sent on port 80."/>
- <group name="80.1200B" label="1200 bytes of data is sent on port 80."/>
- <group name="80.500B" label="500 bytes of data is sent on port 80."/>
- <affected-histogram name="NetConnectivity4.NATBind.Sent2.Bind.Failure"/>
- <affected-histogram name="NetConnectivity4.NATBind.Sent2.Bind.Success"/>
- <affected-histogram
- name="NetConnectivity4.NATBind.Sent2.Connectivity.Failure"/>
- <affected-histogram
- name="NetConnectivity4.NATBind.Sent2.Connectivity.Success"/>
- <affected-histogram
- name="NetConnectivity4.NATBind.Sent2.SendToLastRecvDelay"/>
- <affected-histogram name="NetConnectivity4.NonPacedPacket.Sent21.GotAPacket"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst01Packets"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst02Packets"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst03Packets"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst04Packets"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst05Packets"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst06Packets"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst07Packets"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst08Packets"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst09Packets"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst10Packets"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst11Packets"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst12Packets"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst13Packets"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst14Packets"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst15Packets"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst16Packets"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst17Packets"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst18Packets"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst19Packets"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst20Packets"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst21Packets"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.PacketDelay"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.PacketsRecv"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.RecvNthPacket"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.SendToLastRecvDelay"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.Success.RTT.Packet01"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.Success.RTT.Packet02"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.Success.RTT.Packet03"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.Success.RTT.Packet10"/>
- <affected-histogram
- name="NetConnectivity4.NonPacedPacket.Sent21.Success.RTT.Packet20"/>
- <affected-histogram name="NetConnectivity4.PacedPacket.Sent21.GotAPacket"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst01Packets"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst02Packets"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst03Packets"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst04Packets"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst05Packets"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst06Packets"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst07Packets"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst08Packets"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst09Packets"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst10Packets"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst11Packets"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst12Packets"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst13Packets"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst14Packets"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst15Packets"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst16Packets"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst17Packets"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst18Packets"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst19Packets"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst20Packets"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst21Packets"/>
- <affected-histogram name="NetConnectivity4.PacedPacket.Sent21.PacketDelay"/>
- <affected-histogram name="NetConnectivity4.PacedPacket.Sent21.PacketsRecv"/>
- <affected-histogram name="NetConnectivity4.PacedPacket.Sent21.RecvNthPacket"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.SendToLastRecvDelay"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.Success.RTT.Packet01"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.Success.RTT.Packet02"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.Success.RTT.Packet03"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.Success.RTT.Packet10"/>
- <affected-histogram
- name="NetConnectivity4.PacedPacket.Sent21.Success.RTT.Packet20"/>
- <affected-histogram name="NetConnectivity4.StartPacket.Sent21.GotAPacket"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst01Packets"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst02Packets"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst03Packets"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst04Packets"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst05Packets"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst06Packets"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst07Packets"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst08Packets"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst09Packets"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst10Packets"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst11Packets"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst12Packets"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst13Packets"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst14Packets"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst15Packets"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst16Packets"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst17Packets"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst18Packets"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst19Packets"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst20Packets"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst21Packets"/>
- <affected-histogram name="NetConnectivity4.StartPacket.Sent21.PacketDelay"/>
- <affected-histogram name="NetConnectivity4.StartPacket.Sent21.PacketsRecv"/>
- <affected-histogram name="NetConnectivity4.StartPacket.Sent21.RecvNthPacket"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.SendToLastRecvDelay"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.Success.RTT.Packet01"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.Success.RTT.Packet02"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.Success.RTT.Packet03"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.Success.RTT.Packet10"/>
- <affected-histogram
- name="NetConnectivity4.StartPacket.Sent21.Success.RTT.Packet20"/>
- <affected-histogram name="NetConnectivity5.NATBind.Sent2.Bind.Failure"/>
- <affected-histogram name="NetConnectivity5.NATBind.Sent2.Bind.Success"/>
- <affected-histogram
- name="NetConnectivity5.NATBind.Sent2.Connectivity.Failure"/>
- <affected-histogram
- name="NetConnectivity5.NATBind.Sent2.Connectivity.Success"/>
- <affected-histogram
- name="NetConnectivity5.NATBind.Sent2.SendToLastRecvDelay"/>
- <affected-histogram name="NetConnectivity5.NonPacedPacket.Sent21.GotAPacket"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst01Packets"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst02Packets"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst03Packets"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst04Packets"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst05Packets"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst06Packets"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst07Packets"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst08Packets"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst09Packets"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst10Packets"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst11Packets"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst12Packets"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst13Packets"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst14Packets"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst15Packets"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst16Packets"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst17Packets"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst18Packets"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst19Packets"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst20Packets"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst21Packets"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.PacketDelay"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.PacketsRecv"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.RecvNthPacket"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.SendToLastRecvDelay"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.Success.RTT.Packet01"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.Success.RTT.Packet02"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.Success.RTT.Packet03"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.Success.RTT.Packet10"/>
- <affected-histogram
- name="NetConnectivity5.NonPacedPacket.Sent21.Success.RTT.Packet20"/>
- <affected-histogram name="NetConnectivity5.PacedPacket.Sent21.GotAPacket"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst01Packets"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst02Packets"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst03Packets"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst04Packets"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst05Packets"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst06Packets"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst07Packets"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst08Packets"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst09Packets"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst10Packets"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst11Packets"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst12Packets"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst13Packets"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst14Packets"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst15Packets"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst16Packets"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst17Packets"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst18Packets"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst19Packets"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst20Packets"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst21Packets"/>
- <affected-histogram name="NetConnectivity5.PacedPacket.Sent21.PacketDelay"/>
- <affected-histogram name="NetConnectivity5.PacedPacket.Sent21.PacketsRecv"/>
- <affected-histogram name="NetConnectivity5.PacedPacket.Sent21.RecvNthPacket"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.SendToLastRecvDelay"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.Success.RTT.Packet01"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.Success.RTT.Packet02"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.Success.RTT.Packet03"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.Success.RTT.Packet10"/>
- <affected-histogram
- name="NetConnectivity5.PacedPacket.Sent21.Success.RTT.Packet20"/>
- <affected-histogram name="NetConnectivity5.StartPacket.Sent21.GotAPacket"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst01Packets"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst02Packets"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst03Packets"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst04Packets"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst05Packets"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst06Packets"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst07Packets"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst08Packets"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst09Packets"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst10Packets"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst11Packets"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst12Packets"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst13Packets"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst14Packets"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst15Packets"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst16Packets"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst17Packets"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst18Packets"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst19Packets"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst20Packets"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst21Packets"/>
- <affected-histogram name="NetConnectivity5.StartPacket.Sent21.PacketDelay"/>
- <affected-histogram name="NetConnectivity5.StartPacket.Sent21.PacketsRecv"/>
- <affected-histogram name="NetConnectivity5.StartPacket.Sent21.RecvNthPacket"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.SendToLastRecvDelay"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.Success.RTT.Packet01"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.Success.RTT.Packet02"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.Success.RTT.Packet03"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.Success.RTT.Packet10"/>
- <affected-histogram
- name="NetConnectivity5.StartPacket.Sent21.Success.RTT.Packet20"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity4PacketSizeTest" separator=".">
- <group name="PacketSizeTest.Connectivity.Failure"
- label="This histogram records the size of the packet size that was not
- received from the server."/>
- <group name="PacketSizeTest.Connectivity.Success"
- label="This histogram records the size of the packet size that was
- received from the server."/>
- <affected-histogram name="NetConnectivity4"/>
- <affected-histogram name="NetConnectivity5"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity4PacketSizeTestPort" separator=".">
- <group name="443" label="Packet is sent on port 443."/>
- <group name="80" label="Packet is sent on port 80."/>
- <affected-histogram
- name="NetConnectivity4.PacketSizeTest.Connectivity.Failure"/>
- <affected-histogram
- name="NetConnectivity4.PacketSizeTest.Connectivity.Success"/>
- <affected-histogram
- name="NetConnectivity5.PacketSizeTest.Connectivity.Failure"/>
- <affected-histogram
- name="NetConnectivity5.PacketSizeTest.Connectivity.Success"/>
-</fieldtrial>
-
-<fieldtrial name="NetConnectivity4SeriesRecv" separator=".">
- <group name="443.100B" label="100 bytes of data is sent on port 443."/>
- <group name="443.100B.NoProxy"
- label="100 bytes of data is sent on port 443 with no proxy."/>
- <group name="443.1200B" label="1200 bytes of data is sent on port 443."/>
- <group name="443.1200B.NoProxy"
- label="1200 bytes of data is sent on port 443 with no proxy."/>
- <group name="443.500B" label="500 bytes of data is sent on port 443."/>
- <group name="443.500B.NoProxy"
- label="500 bytes of data is sent on port 443 with no proxy."/>
- <group name="80.100B" label="100 bytes of data is sent on port 80."/>
- <group name="80.100B.NoProxy"
- label="100 bytes of data is sent on port 80 with no proxy."/>
- <group name="80.1200B" label="1200 bytes of data is sent on port 80."/>
- <group name="80.1200B.NoProxy"
- label="1200 bytes of data is sent on port 80 with no proxy."/>
- <group name="80.500B" label="500 bytes of data is sent on port 80."/>
- <group name="80.500B.NoProxy"
- label="500 bytes of data is sent on port 80 with no proxy."/>
- <affected-histogram name="NetConnectivity4.NonPacedPacket.First6.SeriesRecv"/>
- <affected-histogram name="NetConnectivity4.PacedPacket.First6.SeriesRecv"/>
- <affected-histogram name="NetConnectivity4.StartPacket.First6.SeriesRecv"/>
- <affected-histogram name="NetConnectivity5.NonPacedPacket.First6.SeriesRecv"/>
- <affected-histogram name="NetConnectivity5.PacedPacket.First6.SeriesRecv"/>
- <affected-histogram name="NetConnectivity5.StartPacket.First6.SeriesRecv"/>
-</fieldtrial>
-
-<fieldtrial name="NetProxyResolverExecutionTime">
- <group name="UrlOver2K" label="URL length was over 2K"/>
- <group name="UrlOver4K" label="URL length was over 4K"/>
- <group name="UrlOver8K" label="URL length was over 8K"/>
- <group name="UrlOver128K" label="URL length was over 128K"/>
- <affected-histogram name="Net.ProxyResolver.ExecutionTime"/>
-</fieldtrial>
-
-<fieldtrial name="NewTabPageProviders" separator=".">
- <group name="client" label="Suggestions coming from the client."/>
- <group name="server" label="Suggestions coming from the server."/>
- <group name="server1" label="Suggestions coming from server source 1."/>
- <group name="server2" label="Suggestions coming from server source 2."/>
- <group name="server3" label="Suggestions coming from server source 3."/>
- <group name="server4" label="Suggestions coming from server source 4."/>
- <affected-histogram name="NewTabPage.MostVisited"/>
- <affected-histogram name="NewTabPage.SuggestionsImpression"/>
-</fieldtrial>
-
-<fieldtrial name="OmniboxProviderTime" separator=".">
- <group name="Bookmark"/>
- <group name="Builtin"/>
- <group name="Contact"/>
- <group name="ExtensionApp"/>
- <group name="HistoryContents"/>
- <group name="HistoryQuick"/>
- <group name="HistoryURL"/>
- <group name="Keyword"/>
- <group name="Search"/>
- <group name="Shortcuts"/>
- <group name="ZeroSuggest"/>
- <affected-histogram name="Omnibox.ProviderTime"/>
-</fieldtrial>
-
-<fieldtrial name="OverlappedReadImpact">
- <group name="OverlappedReadDisabled" label="Non-blocking reads"/>
- <group name="OverlappedReadEnabled" label="Default, async reads"/>
- <affected-histogram name="Net.HttpJob.TotalTime"/>
- <affected-histogram name="Net.HttpJob.TotalTimeCached"/>
- <affected-histogram name="Net.HttpJob.TotalTimeCancel"/>
- <affected-histogram name="Net.HttpJob.TotalTimeNotCached"/>
- <affected-histogram name="Net.HttpJob.TotalTimeSuccess"/>
- <affected-histogram name="PLT.Abandoned"/>
- <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
- <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
- <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
- <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
- <affected-histogram name="PLT.LoadType"/>
-</fieldtrial>
-
-<fieldtrial name="PageLoadType">
- <group name="HistoryLoad" label="but only for user pressing back or forward"/>
- <group name="LinkLoad"
- label="deprecated - see LinkLoadReload, LinkLoadNormal,
- LinkLoadStaleOk, LinkLoadCacheOnly; content initiated, commonly
- back to a posted page"/>
- <group name="LinkLoadCacheOnly"
- label="content initiated, commonly back to a posted page, where browser
- must ONLY use cache"/>
- <group name="LinkLoadNormal"
- label="content initiated, ordinary link traversal or post"/>
- <group name="LinkLoadReload" label="content initiated, calling reload()"/>
- <group name="LinkLoadStaleOk"
- label="content initiated, commonly forward or back where stale cached
- data is very acceptable"/>
- <group name="NormalLoad"
- label="but only for user entered URL or omnibox search"/>
- <group name="Reload" label="but only for user pressed reload"/>
- <group name="UndefLoad"
- label="should never happen... as it is only for an client-code error
- case which should not exist"/>
- <affected-histogram name="PLT.BeginToFinish"/>
- <affected-histogram name="PLT.BeginToFinishDoc"/>
- <affected-histogram name="PLT.StartToCommit">
- <with-group name="LinkLoadNormal"/>
- <with-group name="NormalLoad"/>
- </affected-histogram>
- <affected-histogram name="PLT.StartToFinish">
- <with-group name="LinkLoadNormal"/>
- <with-group name="NormalLoad"/>
- </affected-histogram>
- <affected-histogram name="Renderer4.BeginToFinish"/>
- <affected-histogram name="Renderer4.BeginToFinishDoc"/>
-</fieldtrial>
-
-<fieldtrial name="PasswordManagerMonitor">
- <group name="group_1" label="group 1"/>
- <group name="group_2" label="group 2"/>
- <group name="group_3" label="group 3"/>
- <group name="group_4" label="group 4"/>
- <group name="group_5" label="group 5"/>
- <group name="group_6" label="group 6"/>
- <group name="group_7" label="group 7"/>
- <group name="group_8" label="group 8"/>
- <group name="group_9" label="group 9"/>
- <group name="group_10" label="group 10"/>
- <group name="group_11" label="group 11"/>
- <group name="group_12" label="group 12"/>
- <group name="group_13" label="group 13"/>
- <group name="group_14" label="group 14"/>
- <group name="group_15" label="group 15"/>
- <group name="group_16" label="group 16"/>
- <group name="group_17" label="group 17"/>
- <group name="group_18" label="group 18"/>
- <group name="group_19" label="group 19"/>
- <group name="group_20" label="group 20"/>
- <group name="" label=""/>
- <affected-histogram name="PasswordManager.ProvisionalSaveFailure"/>
- <affected-histogram
- name="PasswordManager.SavePasswordPromptDisappearedQuickly"/>
- <affected-histogram name="PasswordManager.SavePasswordPromptDisplayed"/>
- <affected-histogram name="PasswordManager.SavePasswordPromptResponse"/>
-</fieldtrial>
-
-<fieldtrial name="PpapiPluginName">
- <group name="libpepflashplayer.so" label="Flash player on Linux or Cros"/>
- <group name="libwidevinecdmadapter.so" label="Widevine CDM on Linux or Cros"/>
- <group name="pepflashplayer.dll" label="Flash player on Windows"/>
- <group name="PepperFlashPlayer.plugin" label="Flash player on Mac"/>
- <group name="widevinecdmadapter.dll" label="Widevine CDM on Windows"/>
- <group name="widevinecdmadapter.plugin" label="Widevine CDM on Mac"/>
- <affected-histogram name="Plugin.PpapiBrokerLoadResult"/>
- <affected-histogram name="Plugin.PpapiPluginLoadResult"/>
-</fieldtrial>
-
-<fieldtrial name="PrecacheCellular" separator=".">
- <group name="Cellular"
- label="covers fetches when connected to cellular networks"/>
- <affected-histogram name="Precache.DownloadedNonPrecache"/>
- <affected-histogram name="Precache.Saved"/>
-</fieldtrial>
-
-<fieldtrial name="Prefetch">
- <group name="ContentPrefetchPrefetchOff"
- label="Prefetch is completely disabled."/>
- <group name="ContentPrefetchPrefetchOn"
- label="prefetch is enabled but prerender is disabled."/>
- <affected-histogram name="HttpCache.EntryLockWait"/>
- <affected-histogram name="Net.HttpTimeToFirstByte"/>
- <affected-histogram name="PLT.Abandoned"/>
- <affected-histogram name="PLT.BeginToFinish"/>
- <affected-histogram name="PLT.BeginToFinish_ContentPrefetcher"/>
- <affected-histogram name="PLT.BeginToFinish_ContentPrefetcherReferrer"/>
- <affected-histogram name="PLT.BeginToFinishDoc"/>
- <affected-histogram name="PLT.BeginToFinishDoc_ContentPrefetcher"/>
- <affected-histogram name="PLT.BeginToFinishDoc_ContentPrefetcherReferrer"/>
- <affected-histogram name="PLT.PerceivedLoadTime"/>
- <affected-histogram name="PLT.PerceivedLoadTime_PrerenderLoad"/>
-</fieldtrial>
-
-<fieldtrial name="Prerender">
- <group name="PrerenderEnabled" label="prerender is enabled."/>
- <group name="PrerenderControl" label="prerender is disabled."/>
- <group name="PrerenderNoUse"
- label="prerender is enabled, but pages are not swapped in."/>
- <group name="PrerenderMulti"
- label="prerender is enabled with multiple simultanious prerenders."/>
- <group name="Prerender5minTTL"
- label="prerender is enabled, and the TTL is extended to 5 minutes."/>
- <affected-histogram name="HttpCache.EntryLockWait"/>
- <affected-histogram name="Net.HttpTimeToFirstByte"/>
- <affected-histogram name="PLT.Abandoned"/>
- <affected-histogram name="PLT.BeginToFinish"/>
- <affected-histogram name="PLT.BeginToFinish_ContentPrefetcher"/>
- <affected-histogram name="PLT.BeginToFinish_ContentPrefetcherReferrer"/>
- <affected-histogram name="PLT.BeginToFinishDoc"/>
- <affected-histogram name="PLT.BeginToFinishDoc_ContentPrefetcher"/>
- <affected-histogram name="PLT.BeginToFinishDoc_ContentPrefetcherReferrer"/>
- <affected-histogram name="PLT.PerceivedLoadTime"/>
- <affected-histogram name="PLT.PerceivedLoadTime_PrerenderLoad"/>
- <affected-histogram name="Prerender.FinalStatus"/>
- <affected-histogram name="Prerender.FinalStatusMatchComplete"/>
- <affected-histogram name="Prerender.FractionPixelsFinalAtSwapin"/>
- <affected-histogram name="Prerender.LocalPredictorEvent"/>
- <affected-histogram name="Prerender.PerceivedPLT"/>
- <affected-histogram name="Prerender.PerceivedPLTFirstAfterMiss"/>
- <affected-histogram name="Prerender.PerceivedPLTFirstAfterMissAnyOnly"/>
- <affected-histogram name="Prerender.PerceivedPLTFirstAfterMissBoth"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly"/>
- <affected-histogram name="Prerender.PerceivedPLTMatched"/>
- <affected-histogram name="Prerender.PerceivedPLTMatchedComplete"/>
- <affected-histogram name="Prerender.PerceivedPLTWindowed"/>
- <affected-histogram name="Prerender.PerceivedPLTWindowNotMatched"/>
- <affected-histogram name="Prerender.PercentLoadDoneAtSwapin"/>
- <affected-histogram name="Prerender.PrerenderNotSwappedInPLT"/>
- <affected-histogram name="Prerender.RendererIdleTime"/>
- <affected-histogram name="Prerender.RendererPerceivedPLT"/>
- <affected-histogram name="Prerender.RendererPerceivedPLTMatched"/>
- <affected-histogram name="Prerender.RendererTimeUntilDisplay"/>
- <affected-histogram name="Prerender.SimulatedLocalBrowsingBaselinePLT"/>
- <affected-histogram name="Prerender.SimulatedLocalBrowsingPLT"/>
-</fieldtrial>
-
-<fieldtrial name="PrerenderHoverType" ordering="prefix">
- <obsolete>
- deprecated May 10 2012
- </obsolete>
- <group name="HoverStats_50" label="Hover stats @ threshold 50 ms."/>
- <group name="HoverStats_75" label="Hover stats @ threshold 75 ms."/>
- <group name="HoverStats_100" label="Hover stats @ threshold 100 ms."/>
- <group name="HoverStats_150" label="Hover stats @ threshold 150 ms."/>
- <group name="HoverStats_200" label="Hover stats @ threshold 200 ms."/>
- <group name="HoverStats_250" label="Hover stats @ threshold 250 ms."/>
- <group name="HoverStats_300" label="Hover stats @ threshold 300 ms."/>
- <group name="HoverStats_400" label="Hover stats @ threshold 400 ms."/>
- <group name="HoverStats_500" label="Hover stats @ threshold 500 ms."/>
- <group name="HoverStats_750" label="Hover stats @ threshold 750 ms."/>
- <group name="HoverStats_1000" label="Hover stats @ threshold 1000 ms."/>
- <group name="HoverStats_1500" label="Hover stats @ threshold 1500 ms."/>
- <group name="HoverStats_2000" label="Hover stats @ threshold 2000 ms."/>
- <group name="HoverStats_3000" label="Hover stats @ threshold 3000 ms."/>
- <group name="HoverStats_4000" label="Hover stats @ threshold 4000 ms."/>
- <group name="HoverStats_5000" label="Hover stats @ threshold 5000 ms."/>
- <affected-histogram name="Prerender.Events"/>
- <affected-histogram name="Prerender.TimeToClick"/>
-</fieldtrial>
-
-<fieldtrial name="PrerenderSource" ordering="prefix">
- <group name="" label="All prerenders."/>
- <group name="exp1" label="Likelihood threshold experiment 1."/>
- <group name="exp2" label="Likelihood threshold experiment 2."/>
- <group name="exp3" label="Likelihood threshold experiment 3."/>
- <group name="exp4" label="Likelihood threshold experiment 4."/>
- <group name="exp5" label="Likelihood threshold experiment 5."/>
- <group name="exp6" label="Likelihood threshold experiment 6."/>
- <group name="exp7" label="Likelihood threshold experiment 7."/>
- <group name="exp8" label="Likelihood threshold experiment 8."/>
- <group name="exp9" label="Likelihood threshold experiment 9."/>
- <group name="gws" label="GWS triggered prerender."/>
- <group name="localpredictor" label="Local predictor triggered prerender."/>
- <group name="omnibox" label="Triggered from the omnibox."/>
- <group name="wash" label="Multiple sources could have triggered."/>
- <group name="web" label="Link triggered prerender."/>
- <group name="webcross" label="Link triggered prerender, cross domain."/>
- <group name="websame" label="Link triggered prerender, same domain."/>
- <affected-histogram name="Prerender.Event"/>
- <affected-histogram name="Prerender.FinalStatus"/>
- <affected-histogram name="Prerender.FinalStatus_Prerender5minTTL"/>
- <affected-histogram name="Prerender.FinalStatus_PrerenderControl"/>
- <affected-histogram name="Prerender.FinalStatus_PrerenderEnabled"/>
- <affected-histogram name="Prerender.FinalStatus_PrerenderMulti"/>
- <affected-histogram name="Prerender.FinalStatus_PrerenderNoUse"/>
- <affected-histogram name="Prerender.FinalStatusMatchComplete"/>
- <affected-histogram
- name="Prerender.FinalStatusMatchComplete_Prerender5minTTL"/>
- <affected-histogram
- name="Prerender.FinalStatusMatchComplete_PrerenderControl"/>
- <affected-histogram
- name="Prerender.FinalStatusMatchComplete_PrerenderEnabled"/>
- <affected-histogram name="Prerender.FinalStatusMatchComplete_PrerenderMulti"/>
- <affected-histogram name="Prerender.FinalStatusMatchComplete_PrerenderNoUse"/>
- <affected-histogram name="Prerender.FractionPixelsFinalAtSwapin"/>
- <affected-histogram
- name="Prerender.FractionPixelsFinalAtSwapin_Prerender5minTTL"/>
- <affected-histogram
- name="Prerender.FractionPixelsFinalAtSwapin_PrerenderControl"/>
- <affected-histogram
- name="Prerender.FractionPixelsFinalAtSwapin_PrerenderEnabled"/>
- <affected-histogram
- name="Prerender.FractionPixelsFinalAtSwapin_PrerenderMulti"/>
- <affected-histogram
- name="Prerender.FractionPixelsFinalAtSwapin_PrerenderNoUse"/>
- <affected-histogram name="Prerender.LocalPredictorEvent"/>
- <affected-histogram name="Prerender.LocalPredictorEvent_Prerender5minTTL"/>
- <affected-histogram name="Prerender.LocalPredictorEvent_PrerenderControl"/>
- <affected-histogram name="Prerender.LocalPredictorEvent_PrerenderEnabled"/>
- <affected-histogram name="Prerender.LocalPredictorEvent_PrerenderMulti"/>
- <affected-histogram name="Prerender.LocalPredictorEvent_PrerenderNoUse"/>
- <affected-histogram name="Prerender.LocalPredictorTimeUntilUsed"/>
- <affected-histogram name="Prerender.PerceivedPLT"/>
- <affected-histogram name="Prerender.PerceivedPLT_Prerender5minTTL"/>
- <affected-histogram name="Prerender.PerceivedPLT_PrerenderControl"/>
- <affected-histogram name="Prerender.PerceivedPLT_PrerenderEnabled"/>
- <affected-histogram name="Prerender.PerceivedPLT_PrerenderMulti"/>
- <affected-histogram name="Prerender.PerceivedPLT_PrerenderNoUse"/>
- <affected-histogram name="Prerender.PerceivedPLTFirstAfterMiss"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMiss_Prerender5minTTL"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMiss_PrerenderControl"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMiss_PrerenderEnabled"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMiss_PrerenderMulti"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMiss_PrerenderNoUse"/>
- <affected-histogram name="Prerender.PerceivedPLTFirstAfterMissAnyOnly"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMissAnyOnly_Prerender5minTTL"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMissAnyOnly_PrerenderControl"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMissAnyOnly_PrerenderEnabled"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMissAnyOnly_PrerenderMulti"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMissAnyOnly_PrerenderNoUse"/>
- <affected-histogram name="Prerender.PerceivedPLTFirstAfterMissBoth"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMissBoth_Prerender5minTTL"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMissBoth_PrerenderControl"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMissBoth_PrerenderEnabled"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMissBoth_PrerenderMulti"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMissBoth_PrerenderNoUse"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping_Prerender5minTTL"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping_PrerenderControl"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping_PrerenderEnabled"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping_PrerenderMulti"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping_PrerenderNoUse"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly_Prerender5minTTL"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly_PrerenderControl"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly_PrerenderEnabled"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly_PrerenderMulti"/>
- <affected-histogram
- name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly_PrerenderNoUse"/>
- <affected-histogram name="Prerender.PerceivedPLTMatched"/>
- <affected-histogram name="Prerender.PerceivedPLTMatched_Prerender5minTTL"/>
- <affected-histogram name="Prerender.PerceivedPLTMatched_PrerenderControl"/>
- <affected-histogram name="Prerender.PerceivedPLTMatched_PrerenderEnabled"/>
- <affected-histogram name="Prerender.PerceivedPLTMatched_PrerenderMulti"/>
- <affected-histogram name="Prerender.PerceivedPLTMatched_PrerenderNoUse"/>
- <affected-histogram name="Prerender.PerceivedPLTMatchedComplete"/>
- <affected-histogram
- name="Prerender.PerceivedPLTMatchedComplete_Prerender5minTTL"/>
- <affected-histogram
- name="Prerender.PerceivedPLTMatchedComplete_PrerenderControl"/>
- <affected-histogram
- name="Prerender.PerceivedPLTMatchedComplete_PrerenderEnabled"/>
- <affected-histogram
- name="Prerender.PerceivedPLTMatchedComplete_PrerenderMulti"/>
- <affected-histogram
- name="Prerender.PerceivedPLTMatchedComplete_PrerenderNoUse"/>
- <affected-histogram name="Prerender.PerceivedPLTWindowed"/>
- <affected-histogram name="Prerender.PerceivedPLTWindowed_PrerenderEnabled"/>
- <affected-histogram name="Prerender.PerceivedPLTWindowNotMatched"/>
- <affected-histogram
- name="Prerender.PerceivedPLTWindowNotMatched_Prerender5minTTL"/>
- <affected-histogram
- name="Prerender.PerceivedPLTWindowNotMatched_PrerenderControl"/>
- <affected-histogram
- name="Prerender.PerceivedPLTWindowNotMatched_PrerenderEnabled"/>
- <affected-histogram
- name="Prerender.PerceivedPLTWindowNotMatched_PrerenderMulti"/>
- <affected-histogram
- name="Prerender.PerceivedPLTWindowNotMatched_PrerenderNoUse"/>
- <affected-histogram name="Prerender.PercentLoadDoneAtSwapin"/>
- <affected-histogram
- name="Prerender.PercentLoadDoneAtSwapin_Prerender5minTTL"/>
- <affected-histogram
- name="Prerender.PercentLoadDoneAtSwapin_PrerenderControl"/>
- <affected-histogram
- name="Prerender.PercentLoadDoneAtSwapin_PrerenderEnabled"/>
- <affected-histogram name="Prerender.PercentLoadDoneAtSwapin_PrerenderMulti"/>
- <affected-histogram name="Prerender.PercentLoadDoneAtSwapin_PrerenderNoUse"/>
- <affected-histogram name="Prerender.PrerenderNotSwappedInPLT"/>
- <affected-histogram
- name="Prerender.PrerenderNotSwappedInPLT_Prerender5minTTL"/>
- <affected-histogram
- name="Prerender.PrerenderNotSwappedInPLT_PrerenderControl"/>
- <affected-histogram
- name="Prerender.PrerenderNotSwappedInPLT_PrerenderEnabled"/>
- <affected-histogram name="Prerender.PrerenderNotSwappedInPLT_PrerenderMulti"/>
- <affected-histogram name="Prerender.PrerenderNotSwappedInPLT_PrerenderNoUse"/>
- <affected-histogram name="Prerender.PrerendersPerSessionCount"/>
- <affected-histogram name="Prerender.SimulatedLocalBrowsingBaselinePLT"/>
- <affected-histogram
- name="Prerender.SimulatedLocalBrowsingBaselinePLT_Prerender5minTTL"/>
- <affected-histogram
- name="Prerender.SimulatedLocalBrowsingBaselinePLT_PrerenderControl"/>
- <affected-histogram
- name="Prerender.SimulatedLocalBrowsingBaselinePLT_PrerenderEnabled"/>
- <affected-histogram
- name="Prerender.SimulatedLocalBrowsingBaselinePLT_PrerenderMulti"/>
- <affected-histogram
- name="Prerender.SimulatedLocalBrowsingBaselinePLT_PrerenderNoUse"/>
- <affected-histogram name="Prerender.SimulatedLocalBrowsingPLT"/>
- <affected-histogram
- name="Prerender.SimulatedLocalBrowsingPLT_Prerender5minTTL"/>
- <affected-histogram
- name="Prerender.SimulatedLocalBrowsingPLT_PrerenderControl"/>
- <affected-histogram
- name="Prerender.SimulatedLocalBrowsingPLT_PrerenderEnabled"/>
- <affected-histogram
- name="Prerender.SimulatedLocalBrowsingPLT_PrerenderMulti"/>
- <affected-histogram
- name="Prerender.SimulatedLocalBrowsingPLT_PrerenderNoUse"/>
- <affected-histogram name="Prerender.TimeBetweenPrerenderRequests"/>
- <affected-histogram name="Prerender.TimeSinceLastRecentVisit"/>
- <affected-histogram name="Prerender.TimeUntilUsed2"/>
-</fieldtrial>
-
-<fieldtrial name="ProfilePictureDownload" separator=".">
- <group name="Default.OOBE" label="default picture, in OOBE"/>
- <group name="Default.LoggedIn" label="default picture, after login"/>
- <group name="Default.Preferences" label="default picture, in Prefs"/>
- <group name="Failure.OOBE" label="download has failed, in OOBE"/>
- <group name="Failure.LoggedIn" label="download has failed, after login"/>
- <group name="Failure.Preferences" label="download has failed, in Prefs"/>
- <group name="Success.OOBE" label="download was successful, in OOBE"/>
- <group name="Success.LoggedIn" label="download was successful, after login"/>
- <group name="Success.Preferences" label="download was successful, in Prefs"/>
- <affected-histogram name="UserImage.ProfileDownloadTime"/>
-</fieldtrial>
-
-<fieldtrial name="ProgressiveScan">
- <group name="FullScan" label="Using WPA_supplicant to scan."/>
- <group name="33Percent_4MinMax"
- label="Progressive scan @ 33%, 4 frequency bins."/>
- <group name="50Percent_4MinMax"
- label="Progressive scan @ 50%, 4 frequency bins."/>
- <group name="50Percent_8MinMax"
- label="Progressive scan @ 50%, 8 frequency bins."/>
- <group name="100Percent_8MinMax"
- label="Progressive scan @ 100%, 8 frequency bins."/>
- <group name="100Percent_1MinSeen_A"
- label="Progressive scan @ all previously seen frequencies (A)."/>
- <group name="100Percent_1MinSeen_B"
- label="Progressive scan @ all previously seen frequencies (B)."/>
- <group name="100Percent_1Min_4Max"
- label="Progressive scan @ 100%, minimum 1/maximum 4 frequencies."/>
- <affected-histogram name="Network.Shill.TimeToDrop"/>
- <affected-histogram name="Network.Shill.WiFi.ScanResult"/>
- <affected-histogram name="Network.Shill.Wifi.TimeToConnect"/>
- <affected-histogram name="Network.Shill.Wifi.TimeToJoin"/>
- <affected-histogram name="Network.Shill.Wifi.TimeToScan"/>
- <affected-histogram name="Network.Shill.Wifi.TimeToScanAndConnect"/>
-</fieldtrial>
-
-<fieldtrial name="ProtectorSettingChange" separator=".">
- <obsolete>
- Deprecated 8/2013. No longer tracked.
- </obsolete>
- <group name="Applied" label="change has been accepted by user"/>
- <group name="Corrupt" label="possibly hijacked, backup invalid"/>
- <group name="Discarded" label="change has been reverted by user"/>
- <group name="Fallback" label="fallback provider used (no backup available)"/>
- <group name="Hijacked" label="hijacked, with a valid backup"/>
- <group name="Missing" label="fallback provider missing, added"/>
- <group name="New" label="(obsolete, was sum of Corrupt+Hijacked)"/>
- <group name="Restored"
- label="search provider restored by Protector before showing the bubble"/>
- <group name="Timeout" label="change has been ignored by user (timed out)"/>
- <affected-histogram name="Protector.SearchProvider"/>
- <affected-histogram name="Protector.StartupSettings"/>
-</fieldtrial>
-
-<fieldtrial name="ProxyConnectionImpact">
- <group name="proxy_connections_16"
- label="with 16 connections per proxy server"/>
- <group name="proxy_connections_32"
- label="with 32 connections per proxy server"/>
- <group name="proxy_connections_64"
- label="with 64 connections per proxy server"/>
- <group name="proxy_connections_8"
- label="with 8 connections per proxy server"/>
- <affected-histogram name="Net.HttpProxySocketRequestTime"/>
- <affected-histogram name="Net.SocksSocketRequestTime"/>
- <affected-histogram name="PLT.Abandoned"/>
- <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
- <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
- <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
- <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
-</fieldtrial>
-
-<fieldtrial name="QueryTimeSuffix" separator=".">
- <group name="0" label="N = 0"/>
- <group name="1" label="N = 1"/>
- <group name="2" label="N = 2"/>
- <group name="3" label="N = 3"/>
- <group name="4" label="N = 4"/>
- <group name="5" label="N = 5"/>
- <affected-histogram name="Omnibox.QueryTime"/>
-</fieldtrial>
-
-<fieldtrial name="RemoteProcessWarmStartFast" separator="">
- <group name="" label="Normal start."/>
- <group name="Fast" label="Fast start by skipping normal chrome.dll startup."/>
- <affected-histogram name="Startup.WarmStartTimeFromRemoteProcessStart"/>
-</fieldtrial>
-
-<fieldtrial name="SBInterstitial">
- <group name="V1" label="original interstitial"/>
- <group name="V2" label="version 2 (new interstitial)"/>
- <affected-histogram name="SB2.InterstitialAction"/>
- <affected-histogram name="SB2.MalwareInterstitialTimeClosed"/>
- <affected-histogram name="SB2.MalwareInterstitialTimeDiagnostic"/>
- <affected-histogram name="SB2.MalwareInterstitialTimeLearnMore"/>
- <affected-histogram name="SB2.MalwareInterstitialTimePrivacyPolicy"/>
- <affected-histogram name="SB2.MalwareInterstitialTimeProceed"/>
- <affected-histogram name="SB2.MalwareInterstitialTimeTakeMeBack"/>
-</fieldtrial>
-
-<fieldtrial name="ShowAppListWarmStartFast" separator="">
- <group name="" label="Normal start."/>
- <group name="Fast" label="Fast start by skipping normal chrome.dll startup."/>
- <affected-histogram name="Startup.ShowAppListWarmStart"/>
-</fieldtrial>
-
-<fieldtrial name="SideloadWipeout">
- <group name="Enabled" label="Sideload Wipeout Active."/>
- <group name="Disabled" label="Control group."/>
- <affected-histogram name="DisabledExtension.ExtensionWipedStatus"/>
- <affected-histogram name="DisabledExtension.SideloadWipeoutCount"/>
- <affected-histogram name="DisabledExtension.SideloadWipeoutNeeded"/>
- <affected-histogram name="DisabledExtension.UserSelection"/>
- <affected-histogram name="Extensions.ExternalExtensionEvent"/>
- <affected-histogram name="Extensions.InstallSource"/>
- <affected-histogram name="Extensions.UpdateSource"/>
-</fieldtrial>
-
-<fieldtrial name="SocketType">
- <group name="HTTPProxy" label="HTTP proxy socket"/>
- <group name="SOCK" label="SOCKS socket"/>
- <group name="SSL" label="(Obsolete, SSL socket)"/>
- <group name="SSL2" label="SSL2 socket"/>
- <group name="SSLForProxies"
- label="SSLClientSocket wrapping the TCPClient socket eventually used
- for connection to a proxy"/>
- <group name="SSLforHTTPSProxy"
- label="SSLClientSocket wrapping the TCPClient socket eventually used
- for connection to an HTTPS proxy"/>
- <group name="TCP" label="plain, no proxy, no SSL socket"/>
- <group name="TCPforHTTPProxy"
- label="TCPClientSocket eventually used for connection to an HTTP proxy"/>
- <group name="TCPforHTTPSProxy"
- label="TCPClientSocket eventually used for connection to an HTTPS proxy"/>
- <group name="TCPforSOCKS"
- label="TCPClientSocket eventually used for connection to a SOCKS proxy"/>
- <affected-histogram name="Net.SocketIdleTimeBeforeNextUse_ReusedSocket"/>
- <affected-histogram name="Net.SocketIdleTimeBeforeNextUse_UnusedSocket"/>
- <affected-histogram name="Net.SocketInitErrorCodes"/>
- <affected-histogram name="Net.SocketRequestTime"/>
- <affected-histogram name="Net.SocketType"/>
-</fieldtrial>
-
-<fieldtrial name="SpdyImpact">
- <group name="npn_with_http"
- label="with NPN negotiated but using HTTP instead of SPDY"/>
- <group name="npn_with_spdy" label="with NPN negotiated and using SPDY"/>
- <affected-histogram name="Net.Transaction_Connected"/>
- <affected-histogram name="Net.Transaction_Connected_New"/>
- <affected-histogram name="Net.Transaction_Connected_New_b"/>
- <affected-histogram name="Net.Transaction_Connected_Under_10"/>
- <affected-histogram name="PLT.Abandoned"/>
- <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
- <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
- <affected-histogram name="PLT.StartToCommit_LinkLoadNormal"/>
- <affected-histogram name="PLT.StartToCommit_NormalLoad"/>
- <affected-histogram name="PLT.StartToFinish_LinkLoadNormal"/>
- <affected-histogram name="PLT.StartToFinish_NormalLoad"/>
-</fieldtrial>
-
-<fieldtrial name="SpdySettingsCwnd" separator="">
- <group name="10K" label="where at least 10KB was transferred."/>
- <group name="25K" label="where at least 25KB was transferred."/>
- <group name="50K" label="where at least 50KB was transferred."/>
- <group name="100K" label="where at least 100KB was transferred."/>
- <affected-histogram name="Net.SpdySettingsCwnd"/>
-</fieldtrial>
-
-<fieldtrial name="SqliteDatabases" separator=".">
- <group name="Activity" label="Activity"/>
- <group name="AppCache" label="AppCache"/>
- <group name="Cookie" label="Cookie"/>
- <group name="DatabaseTracker" label="DatabaseTracker"/>
- <group name="DomainBoundCerts" label="DomainBoundCerts"/>
- <group name="DomStorageDatabase" label="DomStorageDatabase"/>
- <group name="History" label="History"/>
- <group name="Predictor" label="Predictor"/>
- <group name="Quota" label="Quota"/>
- <group name="Shortcuts" label="Shortcuts"/>
- <group name="SyncDirectory" label="SyncDirectory"/>
- <group name="Text" label="Text (obsolete 7/24/13)"/>
- <group name="Thumbnail" label="Thumbnail"/>
- <group name="TopSites" label="TopSites"/>
- <group name="Web" label="Web"/>
- <affected-histogram name="Sqlite.Error"/>
- <affected-histogram name="Sqlite.SizeKB"/>
- <affected-histogram name="Sqlite.Version"/>
-</fieldtrial>
-
-<fieldtrial name="SSLFalseStart">
- <group name="FalseStart_enabled"/>
- <group name="FalseStart_disabled"/>
- <affected-histogram name="Net.SSL_Connection_Latency"/>
- <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
- <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
-</fieldtrial>
-
-<fieldtrial name="SSLResumption">
- <group name="Resume_Handshake" label="Session Resumption"/>
- <group name="Full_Handshake" label="Full"/>
- <affected-histogram name="Net.SSL_Connection_Latency"/>
- <affected-histogram name="Net.SSL_Connection_Latency_Google"/>
-</fieldtrial>
-
-<fieldtrial name="SyzygyStartupTime">
- <group name="PreReadEnabled"/>
- <group name="PreReadDisabled"/>
- <group name="XP_PreReadEnabled"/>
- <group name="XP_PreReadDisabled"/>
- <group name="PreRead_0"/>
- <group name="PreRead_5"/>
- <group name="PreRead_10"/>
- <group name="PreRead_15"/>
- <group name="PreRead_20"/>
- <group name="PreRead_25"/>
- <group name="PreRead_30"/>
- <group name="PreRead_35"/>
- <group name="PreRead_40"/>
- <group name="PreRead_45"/>
- <group name="PreRead_50"/>
- <group name="PreRead_55"/>
- <group name="PreRead_60"/>
- <group name="PreRead_65"/>
- <group name="PreRead_70"/>
- <group name="PreRead_75"/>
- <group name="PreRead_80"/>
- <group name="PreRead_85"/>
- <group name="PreRead_90"/>
- <group name="PreRead_95"/>
- <group name="PreRead_100"/>
- <group name="XP_PreRead_0"/>
- <group name="XP_PreRead_5"/>
- <group name="XP_PreRead_10"/>
- <group name="XP_PreRead_15"/>
- <group name="XP_PreRead_20"/>
- <group name="XP_PreRead_25"/>
- <group name="XP_PreRead_30"/>
- <group name="XP_PreRead_35"/>
- <group name="XP_PreRead_40"/>
- <group name="XP_PreRead_45"/>
- <group name="XP_PreRead_50"/>
- <group name="XP_PreRead_55"/>
- <group name="XP_PreRead_60"/>
- <group name="XP_PreRead_65"/>
- <group name="XP_PreRead_70"/>
- <group name="XP_PreRead_75"/>
- <group name="XP_PreRead_80"/>
- <group name="XP_PreRead_85"/>
- <group name="XP_PreRead_90"/>
- <group name="XP_PreRead_95"/>
- <group name="XP_PreRead_100"/>
- <affected-histogram name="Startup.BrowserMessageLoopStartTime"/>
- <affected-histogram name="Startup.BrowserOpenTabs"/>
-</fieldtrial>
-
-<fieldtrial name="WebStoreLinkExperiment">
- <group name="Disabled" label="Neither extra webstore link is visible"/>
- <group name="FooterLink" label="Link in bottom right of footer"/>
- <group name="PlusIcon" label="Plus icon in apps page"/>
- <affected-histogram name="Extensions.AppLaunch"/>
- <affected-histogram name="NewTabPage.DefaultPageType"/>
-</fieldtrial>
-
-</fieldtrials>
-
-</histogram-configuration>
diff --git a/chromium/tools/metrics/histograms/pretty_print.py b/chromium/tools/metrics/histograms/pretty_print.py
deleted file mode 100755
index f1001b1ce96..00000000000
--- a/chromium/tools/metrics/histograms/pretty_print.py
+++ /dev/null
@@ -1,358 +0,0 @@
-#!/usr/bin/env python
-# 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.
-
-"""Pretty-prints the histograms.xml file, alphabetizing tags, wrapping text
-at 80 chars, enforcing standard attribute ordering, and standardizing
-indentation.
-
-This is quite a bit more complicated than just calling tree.toprettyxml();
-we need additional customization, like special attribute ordering in tags
-and wrapping text nodes, so we implement our own full custom XML pretty-printer.
-"""
-
-from __future__ import with_statement
-
-import diffutil
-import json
-import logging
-import shutil
-import sys
-import textwrap
-import xml.dom.minidom
-
-
-WRAP_COLUMN = 80
-
-# Desired order for tag attributes; attributes listed here will appear first,
-# and in the same order as in these lists.
-# { tag_name: [attribute_name, ...] }
-ATTRIBUTE_ORDER = {
- 'enum': ['name', 'type'],
- 'histogram': ['name', 'enum', 'units'],
- 'int': ['value', 'label'],
- 'fieldtrial': ['name', 'separator', 'ordering'],
- 'group': ['name', 'label'],
- 'affected-histogram': ['name'],
- 'with-group': ['name'],
-}
-
-# Tag names for top-level nodes whose children we don't want to indent.
-TAGS_THAT_DONT_INDENT = [
- 'histogram-configuration',
- 'histograms',
- 'fieldtrials',
- 'enums'
-]
-
-# Extra vertical spacing rules for special tag names.
-# {tag_name: (newlines_after_open, newlines_before_close, newlines_after_close)}
-TAGS_THAT_HAVE_EXTRA_NEWLINE = {
- 'histogram-configuration': (2, 1, 1),
- 'histograms': (2, 1, 1),
- 'fieldtrials': (2, 1, 1),
- 'enums': (2, 1, 1),
- 'histogram': (1, 1, 1),
- 'enum': (1, 1, 1),
- 'fieldtrial': (1, 1, 1),
-}
-
-# Tags that we allow to be squished into a single line for brevity.
-TAGS_THAT_ALLOW_SINGLE_LINE = [
- 'summary',
- 'int',
-]
-
-# Tags whose children we want to alphabetize. The key is the parent tag name,
-# and the value is a pair of the tag name of the children we want to sort,
-# and a key function that maps each child node to the desired sort key.
-ALPHABETIZATION_RULES = {
- 'histograms': ('histogram', lambda n: n.attributes['name'].value.lower()),
- 'enums': ('enum', lambda n: n.attributes['name'].value.lower()),
- 'enum': ('int', lambda n: int(n.attributes['value'].value)),
- 'fieldtrials': ('fieldtrial', lambda n: n.attributes['name'].value.lower()),
- 'fieldtrial': ('affected-histogram',
- lambda n: n.attributes['name'].value.lower()),
-}
-
-
-class Error(Exception):
- pass
-
-
-def LastLineLength(s):
- """Returns the length of the last line in s.
-
- Args:
- s: A multi-line string, including newlines.
-
- Returns:
- The length of the last line in s, in characters.
- """
- if s.rfind('\n') == -1: return len(s)
- return len(s) - s.rfind('\n') - len('\n')
-
-
-def XmlEscape(s):
- """XML-escapes the given string, replacing magic characters (&<>") with their
- escaped equivalents."""
- s = s.replace("&", "&amp;").replace("<", "&lt;")
- s = s.replace("\"", "&quot;").replace(">", "&gt;")
- return s
-
-
-def PrettyPrintNode(node, indent=0):
- """Pretty-prints the given XML node at the given indent level.
-
- Args:
- node: The minidom node to pretty-print.
- indent: The current indent level.
-
- Returns:
- The pretty-printed string (including embedded newlines).
-
- Raises:
- Error if the XML has unknown tags or attributes.
- """
- # Handle the top-level document node.
- if node.nodeType == xml.dom.minidom.Node.DOCUMENT_NODE:
- return '\n'.join([PrettyPrintNode(n) for n in node.childNodes])
-
- # Handle text nodes.
- if node.nodeType == xml.dom.minidom.Node.TEXT_NODE:
- # Wrap each paragraph in the text to fit in the 80 column limit.
- wrapper = textwrap.TextWrapper()
- wrapper.initial_indent = ' ' * indent
- wrapper.subsequent_indent = ' ' * indent
- wrapper.break_on_hyphens = False
- wrapper.break_long_words = False
- wrapper.width = WRAP_COLUMN
- text = XmlEscape(node.data)
- # Remove any common indent.
- text = textwrap.dedent(text.strip('\n'))
- lines = text.split('\n')
- # Split the text into paragraphs at blank line boundaries.
- paragraphs = [[]]
- for l in lines:
- if len(l.strip()) == 0 and len(paragraphs[-1]) > 0:
- paragraphs.append([])
- else:
- paragraphs[-1].append(l)
- # Remove trailing empty paragraph if present.
- if len(paragraphs) > 0 and len(paragraphs[-1]) == 0:
- paragraphs = paragraphs[:-1]
- # Wrap each paragraph and separate with two newlines.
- return '\n\n'.join([wrapper.fill('\n'.join(p)) for p in paragraphs])
-
- # Handle element nodes.
- if node.nodeType == xml.dom.minidom.Node.ELEMENT_NODE:
- newlines_after_open, newlines_before_close, newlines_after_close = (
- TAGS_THAT_HAVE_EXTRA_NEWLINE.get(node.tagName, (1, 1, 0)))
- # Open the tag.
- s = ' ' * indent + '<' + node.tagName
-
- # Calculate how much space to allow for the '>' or '/>'.
- closing_chars = 1
- if not node.childNodes:
- closing_chars = 2
-
- # Pretty-print the attributes.
- attributes = node.attributes.keys()
- if attributes:
- # Reorder the attributes.
- if not node.tagName in ATTRIBUTE_ORDER:
- unrecognized_attributes = attributes;
- else:
- unrecognized_attributes = (
- [a for a in attributes if not a in ATTRIBUTE_ORDER[node.tagName]])
- attributes = (
- [a for a in ATTRIBUTE_ORDER[node.tagName] if a in attributes])
-
- for a in unrecognized_attributes:
- logging.error(
- 'Unrecognized attribute "%s" in tag "%s"' % (a, node.tagName))
- if unrecognized_attributes:
- raise Error()
-
- for a in attributes:
- value = XmlEscape(node.attributes[a].value)
- # Replace sequences of whitespace with single spaces.
- words = value.split()
- a_str = ' %s="%s"' % (a, ' '.join(words))
- # Start a new line if the attribute will make this line too long.
- if LastLineLength(s) + len(a_str) + closing_chars > WRAP_COLUMN:
- s += '\n' + ' ' * (indent + 3)
- # Output everything up to the first quote.
- s += ' %s="' % (a)
- value_indent_level = LastLineLength(s)
- # Output one word at a time, splitting to the next line where necessary.
- column = value_indent_level
- for i, word in enumerate(words):
- # This is slightly too conservative since not every word will be
- # followed by the closing characters...
- if i > 0 and (column + len(word) + 1 + closing_chars > WRAP_COLUMN):
- s = s.rstrip() # remove any trailing whitespace
- s += '\n' + ' ' * value_indent_level
- column = value_indent_level
- s += word + ' '
- column += len(word) + 1
- s = s.rstrip() # remove any trailing whitespace
- s += '"'
- s = s.rstrip() # remove any trailing whitespace
-
- # Pretty-print the child nodes.
- if node.childNodes:
- s += '>'
- # Calculate the new indent level for child nodes.
- new_indent = indent
- if node.tagName not in TAGS_THAT_DONT_INDENT:
- new_indent += 2
- child_nodes = node.childNodes
-
- # Recursively pretty-print the child nodes.
- child_nodes = [PrettyPrintNode(n, indent=new_indent) for n in child_nodes]
- child_nodes = [c for c in child_nodes if len(c.strip()) > 0]
-
- # Determine whether we can fit the entire node on a single line.
- close_tag = '</%s>' % node.tagName
- space_left = WRAP_COLUMN - LastLineLength(s) - len(close_tag)
- if (node.tagName in TAGS_THAT_ALLOW_SINGLE_LINE and
- len(child_nodes) == 1 and len(child_nodes[0].strip()) <= space_left):
- s += child_nodes[0].strip()
- else:
- s += '\n' * newlines_after_open + '\n'.join(child_nodes)
- s += '\n' * newlines_before_close + ' ' * indent
- s += close_tag
- else:
- s += '/>'
- s += '\n' * newlines_after_close
- return s
-
- # Handle comment nodes.
- if node.nodeType == xml.dom.minidom.Node.COMMENT_NODE:
- return '<!--%s-->\n' % node.data
-
- # Ignore other node types. This could be a processing instruction (<? ... ?>)
- # or cdata section (<![CDATA[...]]!>), neither of which are legal in the
- # histograms XML at present.
- logging.error('Ignoring unrecognized node data: %s' % node.toxml())
- raise Error()
-
-
-def unsafeAppendChild(parent, child):
- """Append child to parent's list of children, ignoring the possibility that it
- is already in another node's childNodes list. Requires that the previous
- parent of child is discarded (to avoid non-tree DOM graphs).
- This can provide a significant speedup as O(n^2) operations are removed (in
- particular, each child insertion avoids the need to traverse the old parent's
- entire list of children)."""
- child.parentNode = None
- parent.appendChild(child)
- child.parentNode = parent
-
-
-def TransformByAlphabetizing(node):
- """Transform the given XML by alphabetizing specific node types according to
- the rules in ALPHABETIZATION_RULES.
-
- Args:
- node: The minidom node to transform.
-
- Returns:
- The minidom node, with children appropriately alphabetized. Note that the
- transformation is done in-place, i.e. the original minidom tree is modified
- directly.
- """
- if node.nodeType != xml.dom.minidom.Node.ELEMENT_NODE:
- for c in node.childNodes: TransformByAlphabetizing(c)
- return node
-
- # Element node with a tag name that we alphabetize the children of?
- if node.tagName in ALPHABETIZATION_RULES:
- # Put subnodes in a list of node,key pairs to allow for custom sorting.
- subtag, key_function = ALPHABETIZATION_RULES[node.tagName]
- subnodes = []
- last_key = -1
- for c in node.childNodes:
- if (c.nodeType == xml.dom.minidom.Node.ELEMENT_NODE and
- c.tagName == subtag):
- last_key = key_function(c)
- # Subnodes that we don't want to rearrange use the last node's key,
- # so they stay in the same relative position.
- subnodes.append( (c, last_key) )
-
- # Sort the subnode list.
- subnodes.sort(key=lambda pair: pair[1])
-
- # Re-add the subnodes, transforming each recursively.
- while node.firstChild:
- node.removeChild(node.firstChild)
- for (c, _) in subnodes:
- unsafeAppendChild(node, TransformByAlphabetizing(c))
- return node
-
- # Recursively handle other element nodes and other node types.
- for c in node.childNodes: TransformByAlphabetizing(c)
- return node
-
-
-def PrettyPrint(raw_xml):
- """Pretty-print the given XML.
-
- Args:
- xml: The contents of the histograms XML file, as a string.
-
- Returns:
- The pretty-printed version.
- """
- tree = xml.dom.minidom.parseString(raw_xml)
- tree = TransformByAlphabetizing(tree)
- return PrettyPrintNode(tree)
-
-
-def main():
- logging.basicConfig(level=logging.INFO)
-
- presubmit = ('--presubmit' in sys.argv)
-
- logging.info('Loading histograms.xml...')
- with open('histograms.xml', 'rb') as f:
- xml = f.read()
-
- # Check there are no CR ('\r') characters in the file.
- if '\r' in xml:
- logging.info('DOS-style line endings (CR characters) detected - these are '
- 'not allowed. Please run dos2unix histograms.xml')
- sys.exit(1)
-
- logging.info('Pretty-printing...')
- try:
- pretty = PrettyPrint(xml)
- except Error:
- logging.error('Aborting parsing due to fatal errors.')
- sys.exit(1)
-
- if xml == pretty:
- logging.info('histograms.xml is correctly pretty-printed.')
- sys.exit(0)
- if presubmit:
- logging.info('histograms.xml is not formatted correctly; run '
- 'pretty_print.py to fix.')
- sys.exit(1)
- if not diffutil.PromptUserToAcceptDiff(
- xml, pretty,
- 'Is the prettified version acceptable?'):
- logging.error('Aborting')
- return
-
- logging.info('Creating backup file histograms.before.pretty-print.xml')
- shutil.move('histograms.xml', 'histograms.before.pretty-print.xml')
-
- logging.info('Writing new histograms.xml file')
- with open('histograms.xml', 'wb') as f:
- f.write(pretty)
-
-
-if __name__ == '__main__':
- main()
diff --git a/chromium/tools/metrics/histograms/update_extension_functions.py b/chromium/tools/metrics/histograms/update_extension_functions.py
deleted file mode 100644
index 1925c6e4e4e..00000000000
--- a/chromium/tools/metrics/histograms/update_extension_functions.py
+++ /dev/null
@@ -1,148 +0,0 @@
-# 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.
-
-"""Updates ExtensionFunctions enum in histograms.xml file with values read from
-extension_function_histogram_value.h.
-
-If the file was pretty-printed, the updated version is pretty-printed too.
-"""
-
-import logging
-import re
-import sys
-
-from xml.dom import minidom
-
-from diffutil import PromptUserToAcceptDiff
-from pretty_print import PrettyPrintNode
-
-HISTOGRAMS_PATH = 'histograms.xml'
-ENUM_NAME = 'ExtensionFunctions'
-
-EXTENSION_FUNCTIONS_HISTOGRAM_VALUE_PATH = \
- '../../../chrome/browser/extensions/extension_function_histogram_value.h'
-ENUM_START_MARKER = "^enum HistogramValue {"
-ENUM_END_MARKER = "^ENUM_BOUNDARY"
-
-
-class UserError(Exception):
- def __init__(self, message):
- Exception.__init__(self, message)
-
- @property
- def message(self):
- return self.args[0]
-
-def ExtractRegexGroup(line, regex):
- m = re.match(regex, line)
- if m:
- return m.group(1)
- else:
- return None
-
-
-def ReadHistogramValues(filename):
- """Returns a list of pairs (label, value) corresponding to HistogramValue.
-
- Reads the extension_functions_histogram_value.h file, locates the
- HistogramValue enum definition and returns a pair for each entry.
- """
-
- # Read the file as a list of lines
- with open(filename) as f:
- content = f.readlines()
-
- # Locate the enum definition and collect all entries in it
- inside_enum = False # We haven't found the enum definition yet
- result = []
- for line in content:
- line = line.strip()
- if inside_enum:
- # Exit condition: we reached last enum value
- if re.match(ENUM_END_MARKER, line):
- inside_enum = False
- else:
- # Inside enum: generate new xml entry
- label = ExtractRegexGroup(line.strip(), "^([\w]+)")
- if label:
- result.append((label, enum_value))
- enum_value += 1
- else:
- if re.match(ENUM_START_MARKER, line):
- inside_enum = True
- enum_value = 0 # Start at 'UNKNOWN'
- return result
-
-
-def UpdateHistogramDefinitions(histogram_values, document):
- """Sets the children of <enum name="ExtensionFunctions" ...> node in
- |document| to values generated from policy ids contained in
- |policy_templates|.
-
- Args:
- histogram_values: A list of pairs (label, value) defining each extension
- function
- document: A minidom.Document object representing parsed histogram
- definitions XML file.
-
- """
- # Find ExtensionFunctions enum.
- for enum_node in document.getElementsByTagName('enum'):
- if enum_node.attributes['name'].value == ENUM_NAME:
- extension_functions_enum_node = enum_node
- break
- else:
- raise UserError('No policy enum node found')
-
- # Remove existing values.
- while extension_functions_enum_node.hasChildNodes():
- extension_functions_enum_node.removeChild(
- extension_functions_enum_node.lastChild)
-
- # Add a "Generated from (...)" comment
- comment = ' Generated from {0} '.format(
- EXTENSION_FUNCTIONS_HISTOGRAM_VALUE_PATH)
- extension_functions_enum_node.appendChild(document.createComment(comment))
-
- # Add values generated from policy templates.
- for (label, value) in histogram_values:
- node = document.createElement('int')
- node.attributes['value'] = str(value)
- node.attributes['label'] = label
- extension_functions_enum_node.appendChild(node)
-
-def Log(message):
- logging.info(message)
-
-def main():
- if len(sys.argv) > 1:
- print >>sys.stderr, 'No arguments expected!'
- sys.stderr.write(__doc__)
- sys.exit(1)
-
- Log('Reading histogram enum definition from "%s".'
- % (EXTENSION_FUNCTIONS_HISTOGRAM_VALUE_PATH))
- histogram_values = ReadHistogramValues(
- EXTENSION_FUNCTIONS_HISTOGRAM_VALUE_PATH)
-
- Log('Reading existing histograms from "%s".' % (HISTOGRAMS_PATH))
- with open(HISTOGRAMS_PATH, 'rb') as f:
- histograms_doc = minidom.parse(f)
- f.seek(0)
- xml = f.read()
-
- Log('Comparing histograms enum with new enum definition.')
- UpdateHistogramDefinitions(histogram_values, histograms_doc)
-
- Log('Writing out new histograms file.')
- new_xml = PrettyPrintNode(histograms_doc)
- if PromptUserToAcceptDiff(xml, new_xml, 'Is the updated version acceptable?'):
- with open(HISTOGRAMS_PATH, 'wb') as f:
- f.write(new_xml)
-
- Log('Done.')
-
-
-if __name__ == '__main__':
- main()
diff --git a/chromium/tools/metrics/histograms/update_policies.py b/chromium/tools/metrics/histograms/update_policies.py
deleted file mode 100644
index 5cad317512b..00000000000
--- a/chromium/tools/metrics/histograms/update_policies.py
+++ /dev/null
@@ -1,133 +0,0 @@
-# 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.
-
-"""Updates EnterprisePolicies enum in histograms.xml file with policy
-definitions read from policy_templates.json.
-
-If the file was pretty-printed, the updated version is pretty-printed too.
-"""
-
-import re
-import sys
-
-from ast import literal_eval
-from optparse import OptionParser
-from xml.dom import minidom
-
-from diffutil import PromptUserToAcceptDiff
-from pretty_print import PrettyPrintNode
-
-HISTOGRAMS_PATH = 'histograms.xml'
-POLICY_TEMPLATES_PATH =
- '../../../components/policy/resources/policy_templates.json'
-ENUM_NAME = 'EnterprisePolicies'
-
-class UserError(Exception):
- def __init__(self, message):
- Exception.__init__(self, message)
-
- @property
- def message(self):
- return self.args[0]
-
-
-def FlattenPolicies(policy_definitions, policy_list):
- """Appends a list of policies defined in |policy_definitions| to
- |policy_list|, flattening subgroups.
-
- Args:
- policy_definitions: A list of policy definitions and groups, as in
- policy_templates.json file.
- policy_list: A list that has policy definitions appended to it.
- """
- for policy in policy_definitions:
- if policy['type'] == 'group':
- FlattenPolicies(policy['policies'], policy_list)
- else:
- policy_list.append(policy)
-
-
-def ParsePlaceholders(text):
- """Parse placeholders in |text|, making it more human-readable. The format of
- |text| is exactly the same as in captions in policy_templates.json: it can
- contain XML tags (ph, ex) and $1-like substitutions. Note that this function
- does only a very simple parsing that is not fully correct, but should be
- enough for all practical situations.
-
- Args:
- text: A string containing placeholders.
-
- Returns:
- |text| with placeholders removed or replaced by readable text.
- """
- text = re.sub(r'\$\d+', '', text) # Remove $1-like substitutions.
- text = re.sub(r'<[^>]+>', '', text) # Remove XML tags.
- return text
-
-
-def UpdateHistogramDefinitions(policy_templates, doc):
- """Sets the children of <enum name="EnterprisePolicies" ...> node in |doc| to
- values generated from policy ids contained in |policy_templates|.
-
- Args:
- policy_templates: A list of dictionaries, defining policies or policy
- groups. The format is exactly the same as in
- policy_templates.json file.
- doc: A minidom.Document object representing parsed histogram definitions
- XML file.
- """
- # Find EnterprisePolicies enum.
- for enum_node in doc.getElementsByTagName('enum'):
- if enum_node.attributes['name'].value == ENUM_NAME:
- policy_enum_node = enum_node
- break
- else:
- raise UserError('No policy enum node found')
-
- # Remove existing values.
- while policy_enum_node.hasChildNodes():
- policy_enum_node.removeChild(policy_enum_node.lastChild)
-
- # Add a "Generated from (...)" comment
- comment = ' Generated from {0} '.format(POLICY_TEMPLATES_PATH)
- policy_enum_node.appendChild(doc.createComment(comment))
-
- # Add values generated from policy templates.
- ordered_policies = []
- FlattenPolicies(policy_templates['policy_definitions'], ordered_policies)
- ordered_policies.sort(key=lambda policy: policy['id'])
- for policy in ordered_policies:
- node = doc.createElement('int')
- node.attributes['value'] = str(policy['id'])
- node.attributes['label'] = ParsePlaceholders(policy['caption'])
- policy_enum_node.appendChild(node)
-
-
-def main():
- if len(sys.argv) > 1:
- print >>sys.stderr, 'No arguments expected!'
- sys.stderr.write(__doc__)
- sys.exit(1)
-
- with open(POLICY_TEMPLATES_PATH, 'rb') as f:
- policy_templates = literal_eval(f.read())
- with open(HISTOGRAMS_PATH, 'rb') as f:
- histograms_doc = minidom.parse(f)
- f.seek(0)
- xml = f.read()
-
- UpdateHistogramDefinitions(policy_templates, histograms_doc)
-
- new_xml = PrettyPrintNode(histograms_doc)
- if PromptUserToAcceptDiff(xml, new_xml, 'Is the updated version acceptable?'):
- with open(HISTOGRAMS_PATH, 'wb') as f:
- f.write(new_xml)
-
-
-if __name__ == '__main__':
- try:
- main()
- except UserError as e:
- print >>sys.stderr, e.message
- sys.exit(1)
diff --git a/chromium/tools/metrics/histograms/validate_format.py b/chromium/tools/metrics/histograms/validate_format.py
deleted file mode 100644
index d3af05ec207..00000000000
--- a/chromium/tools/metrics/histograms/validate_format.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# 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.
-
-"""Verifies that the histograms XML file is well-formatted."""
-
-import extract_histograms
-import os.path
-
-
-def main():
- # This will raise an exception if the file is not well-formatted.
- xml_file = os.path.join(os.path.dirname(os.path.realpath(__file__)),
- 'histograms.xml')
- histograms = extract_histograms.ExtractHistograms(xml_file)
-
-
-if __name__ == '__main__':
- main()
-
diff --git a/chromium/tools/multi-process-rss.py b/chromium/tools/multi-process-rss.py
deleted file mode 100755
index 100d0f759b1..00000000000
--- a/chromium/tools/multi-process-rss.py
+++ /dev/null
@@ -1,143 +0,0 @@
-#!/usr/bin/env python
-# 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.
-
-# Counts a resident set size (RSS) of multiple processes without double-counts.
-# If they share the same page frame, the page frame is counted only once.
-#
-# Usage:
-# ./multi-process-rss.py <pid>|<pid>r [...]
-#
-# If <pid> has 'r' at the end, all descendants of the process are accounted.
-#
-# Example:
-# ./multi-process-rss.py 12345 23456r
-#
-# The command line above counts the RSS of 1) process 12345, 2) process 23456
-# and 3) all descendant processes of process 23456.
-
-
-import collections
-import logging
-import os
-import psutil
-import sys
-
-
-if sys.platform.startswith('linux'):
- _TOOLS_PATH = os.path.dirname(os.path.abspath(__file__))
- _TOOLS_LINUX_PATH = os.path.join(_TOOLS_PATH, 'linux')
- sys.path.append(_TOOLS_LINUX_PATH)
- import procfs # pylint: disable=F0401
-
-
-class _NullHandler(logging.Handler):
- def emit(self, record):
- pass
-
-
-_LOGGER = logging.getLogger('multi-process-rss')
-_LOGGER.addHandler(_NullHandler())
-
-
-def _recursive_get_children(pid):
- try:
- children = psutil.Process(pid).get_children()
- except psutil.error.NoSuchProcess:
- return []
- descendant = []
- for child in children:
- descendant.append(child.pid)
- descendant.extend(_recursive_get_children(child.pid))
- return descendant
-
-
-def list_pids(argv):
- pids = []
- for arg in argv[1:]:
- try:
- if arg.endswith('r'):
- recursive = True
- pid = int(arg[:-1])
- else:
- recursive = False
- pid = int(arg)
- except ValueError:
- raise SyntaxError("%s is not an integer." % arg)
- else:
- pids.append(pid)
- if recursive:
- children = _recursive_get_children(pid)
- pids.extend(children)
-
- pids = sorted(set(pids), key=pids.index) # uniq: maybe slow, but simple.
-
- return pids
-
-
-def count_pageframes(pids):
- pageframes = collections.defaultdict(int)
- pagemap_dct = {}
- for pid in pids:
- maps = procfs.ProcMaps.load(pid)
- if not maps:
- _LOGGER.warning('/proc/%d/maps not found.' % pid)
- continue
- pagemap = procfs.ProcPagemap.load(pid, maps)
- if not pagemap:
- _LOGGER.warning('/proc/%d/pagemap not found.' % pid)
- continue
- pagemap_dct[pid] = pagemap
-
- for pid, pagemap in pagemap_dct.iteritems():
- for vma in pagemap.vma_internals.itervalues():
- for pageframe, number in vma.pageframes.iteritems():
- pageframes[pageframe] += number
-
- return pageframes
-
-
-def count_statm(pids):
- resident = 0
- shared = 0
- private = 0
-
- for pid in pids:
- statm = procfs.ProcStatm.load(pid)
- if not statm:
- _LOGGER.warning('/proc/%d/statm not found.' % pid)
- continue
- resident += statm.resident
- shared += statm.share
- private += (statm.resident - statm.share)
-
- return (resident, shared, private)
-
-
-def main(argv):
- logging_handler = logging.StreamHandler()
- logging_handler.setLevel(logging.WARNING)
- logging_handler.setFormatter(logging.Formatter(
- '%(asctime)s:%(name)s:%(levelname)s:%(message)s'))
-
- _LOGGER.setLevel(logging.WARNING)
- _LOGGER.addHandler(logging_handler)
-
- if sys.platform.startswith('linux'):
- logging.getLogger('procfs').setLevel(logging.WARNING)
- logging.getLogger('procfs').addHandler(logging_handler)
- pids = list_pids(argv)
- pageframes = count_pageframes(pids)
- else:
- _LOGGER.error('%s is not supported.' % sys.platform)
- return 1
-
- # TODO(dmikurube): Classify this total RSS.
- print len(pageframes) * 4096
-
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main(sys.argv))
diff --git a/chromium/tools/nocompile_driver.py b/chromium/tools/nocompile_driver.py
deleted file mode 100755
index 5a8a081afb1..00000000000
--- a/chromium/tools/nocompile_driver.py
+++ /dev/null
@@ -1,472 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""Implements a simple "negative compile" test for C++ on linux.
-
-Sometimes a C++ API needs to ensure that various usages cannot compile. To
-enable unittesting of these assertions, we use this python script to
-invoke gcc on a source file and assert that compilation fails.
-
-For more info, see:
- http://dev.chromium.org/developers/testing/no-compile-tests
-"""
-
-import ast
-import locale
-import os
-import re
-import select
-import shlex
-import subprocess
-import sys
-import time
-
-
-# Matches lines that start with #if and have the substring TEST in the
-# conditional. Also extracts the comment. This allows us to search for
-# lines like the following:
-#
-# #ifdef NCTEST_NAME_OF_TEST // [r'expected output']
-# #if defined(NCTEST_NAME_OF_TEST) // [r'expected output']
-# #if NCTEST_NAME_OF_TEST // [r'expected output']
-# #elif NCTEST_NAME_OF_TEST // [r'expected output']
-# #elif DISABLED_NCTEST_NAME_OF_TEST // [r'expected output']
-#
-# inside the unittest file.
-NCTEST_CONFIG_RE = re.compile(r'^#(?:el)?if.*\s+(\S*NCTEST\S*)\s*(//.*)?')
-
-
-# Matches and removes the defined() preprocesor predicate. This is useful
-# for test cases that use the preprocessor if-statement form:
-#
-# #if defined(NCTEST_NAME_OF_TEST)
-#
-# Should be used to post-process the results found by NCTEST_CONFIG_RE.
-STRIP_DEFINED_RE = re.compile(r'defined\((.*)\)')
-
-
-# Used to grab the expectation from comment at the end of an #ifdef. See
-# NCTEST_CONFIG_RE's comment for examples of what the format should look like.
-#
-# The extracted substring should be a python array of regular expressions.
-EXTRACT_EXPECTATION_RE = re.compile(r'//\s*(\[.*\])')
-
-
-# The header for the result file so that it can be compiled.
-RESULT_FILE_HEADER = """
-// This file is generated by the no compile test from:
-// %s
-
-#include "base/logging.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-"""
-
-
-# The GUnit test function to output on a successful test completion.
-SUCCESS_GUNIT_TEMPLATE = """
-TEST(%s, %s) {
- LOG(INFO) << "Took %f secs. Started at %f, ended at %f";
-}
-"""
-
-# The GUnit test function to output for a disabled test.
-DISABLED_GUNIT_TEMPLATE = """
-TEST(%s, %s) { }
-"""
-
-
-# Timeout constants.
-NCTEST_TERMINATE_TIMEOUT_SEC = 60
-NCTEST_KILL_TIMEOUT_SEC = NCTEST_TERMINATE_TIMEOUT_SEC + 2
-BUSY_LOOP_MAX_TIME_SEC = NCTEST_KILL_TIMEOUT_SEC * 2
-
-
-def ValidateInput(parallelism, sourcefile_path, cflags, resultfile_path):
- """Make sure the arguments being passed in are sane."""
- assert parallelism >= 1
- assert type(sourcefile_path) is str
- assert type(cflags) is str
- assert type(resultfile_path) is str
-
-
-def ParseExpectation(expectation_string):
- """Extracts expectation definition from the trailing comment on the ifdef.
-
- See the comment on NCTEST_CONFIG_RE for examples of the format we are parsing.
-
- Args:
- expectation_string: A string like "// [r'some_regex']"
-
- Returns:
- A list of compiled regular expressions indicating all possible valid
- compiler outputs. If the list is empty, all outputs are considered valid.
- """
- assert expectation_string is not None
-
- match = EXTRACT_EXPECTATION_RE.match(expectation_string)
- assert match
-
- raw_expectation = ast.literal_eval(match.group(1))
- assert type(raw_expectation) is list
-
- expectation = []
- for regex_str in raw_expectation:
- assert type(regex_str) is str
- expectation.append(re.compile(regex_str))
- return expectation
-
-
-def ExtractTestConfigs(sourcefile_path):
- """Parses the soruce file for test configurations.
-
- Each no-compile test in the file is separated by an ifdef macro. We scan
- the source file with the NCTEST_CONFIG_RE to find all ifdefs that look like
- they demark one no-compile test and try to extract the test configuration
- from that.
-
- Args:
- sourcefile_path: The path to the source file.
-
- Returns:
- A list of test configurations. Each test configuration is a dictionary of
- the form:
-
- { name: 'NCTEST_NAME'
- suite_name: 'SOURCE_FILE_NAME'
- expectations: [re.Pattern, re.Pattern] }
-
- The |suite_name| is used to generate a pretty gtest output on successful
- completion of the no compile test.
-
- The compiled regexps in |expectations| define the valid outputs of the
- compiler. If any one of the listed patterns matches either the stderr or
- stdout from the compilation, and the compilation failed, then the test is
- considered to have succeeded. If the list is empty, than we ignore the
- compiler output and just check for failed compilation. If |expectations|
- is actually None, then this specifies a compiler sanity check test, which
- should expect a SUCCESSFUL compilation.
- """
- sourcefile = open(sourcefile_path, 'r')
-
- # Convert filename from underscores to CamelCase.
- words = os.path.splitext(os.path.basename(sourcefile_path))[0].split('_')
- words = [w.capitalize() for w in words]
- suite_name = 'NoCompile' + ''.join(words)
-
- # Start with at least the compiler sanity test. You need to always have one
- # sanity test to show that compiler flags and configuration are not just
- # wrong. Otherwise, having a misconfigured compiler, or an error in the
- # shared portions of the .nc file would cause all tests to erroneously pass.
- test_configs = [{'name': 'NCTEST_SANITY',
- 'suite_name': suite_name,
- 'expectations': None}]
-
- for line in sourcefile:
- match_result = NCTEST_CONFIG_RE.match(line)
- if not match_result:
- continue
-
- groups = match_result.groups()
-
- # Grab the name and remove the defined() predicate if there is one.
- name = groups[0]
- strip_result = STRIP_DEFINED_RE.match(name)
- if strip_result:
- name = strip_result.group(1)
-
- # Read expectations if there are any.
- test_configs.append({'name': name,
- 'suite_name': suite_name,
- 'expectations': ParseExpectation(groups[1])})
- sourcefile.close()
- return test_configs
-
-
-def StartTest(sourcefile_path, cflags, config):
- """Start one negative compile test.
-
- Args:
- sourcefile_path: The path to the source file.
- cflags: A string with all the CFLAGS to give to gcc. This string will be
- split by shelex so be careful with escaping.
- config: A dictionary describing the test. See ExtractTestConfigs
- for a description of the config format.
-
- Returns:
- A dictionary containing all the information about the started test. The
- fields in the dictionary are as follows:
- { 'proc': A subprocess object representing the compiler run.
- 'cmdline': The exectued command line.
- 'name': The name of the test.
- 'suite_name': The suite name to use when generating the gunit test
- result.
- 'terminate_timeout': The timestamp in seconds since the epoch after
- which the test should be terminated.
- 'kill_timeout': The timestamp in seconds since the epoch after which
- the test should be given a hard kill signal.
- 'started_at': A timestamp in seconds since the epoch for when this test
- was started.
- 'aborted_at': A timestamp in seconds since the epoch for when this test
- was aborted. If the test completed successfully,
- this value is 0.
- 'finished_at': A timestamp in seconds since the epoch for when this
- test was successfully complete. If the test is aborted,
- or running, this value is 0.
- 'expectations': A dictionary with the test expectations. See
- ParseExpectation() for the structure.
- }
- """
- # TODO(ajwong): Get the compiler from gyp.
- cmdline = ['g++']
- cmdline.extend(shlex.split(cflags))
- name = config['name']
- expectations = config['expectations']
- if expectations is not None:
- cmdline.append('-D%s' % name)
- cmdline.extend(['-o', '/dev/null', '-c', '-x', 'c++', sourcefile_path])
-
- process = subprocess.Popen(cmdline, stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- now = time.time()
- return {'proc': process,
- 'cmdline': ' '.join(cmdline),
- 'name': name,
- 'suite_name': config['suite_name'],
- 'terminate_timeout': now + NCTEST_TERMINATE_TIMEOUT_SEC,
- 'kill_timeout': now + NCTEST_KILL_TIMEOUT_SEC,
- 'started_at': now,
- 'aborted_at': 0,
- 'finished_at': 0,
- 'expectations': expectations}
-
-
-def PassTest(resultfile, test):
- """Logs the result of a test started by StartTest(), or a disabled test
- configuration.
-
- Args:
- resultfile: File object for .cc file that results are written to.
- test: An instance of the dictionary returned by StartTest(), a
- configuration from ExtractTestConfigs().
- """
- # The 'started_at' key is only added if a test has been started.
- if 'started_at' in test:
- resultfile.write(SUCCESS_GUNIT_TEMPLATE % (
- test['suite_name'], test['name'],
- test['finished_at'] - test['started_at'],
- test['started_at'], test['finished_at']))
- else:
- resultfile.write(DISABLED_GUNIT_TEMPLATE % (
- test['suite_name'], test['name']))
-
-
-def FailTest(resultfile, test, error, stdout=None, stderr=None):
- """Logs the result of a test started by StartTest()
-
- Args:
- resultfile: File object for .cc file that results are written to.
- test: An instance of the dictionary returned by StartTest()
- error: The printable reason for the failure.
- stdout: The test's output to stdout.
- stderr: The test's output to stderr.
- """
- resultfile.write('#error "%s Failed: %s"\n' % (test['name'], error))
- resultfile.write('#error "compile line: %s"\n' % test['cmdline'])
- if stdout and len(stdout) != 0:
- resultfile.write('#error "%s stdout:"\n' % test['name'])
- for line in stdout.split('\n'):
- resultfile.write('#error " %s:"\n' % line)
-
- if stderr and len(stderr) != 0:
- resultfile.write('#error "%s stderr:"\n' % test['name'])
- for line in stderr.split('\n'):
- resultfile.write('#error " %s"\n' % line)
- resultfile.write('\n')
-
-
-def WriteStats(resultfile, suite_name, timings):
- """Logs the peformance timings for each stage of the script into a fake test.
-
- Args:
- resultfile: File object for .cc file that results are written to.
- suite_name: The name of the GUnit suite this test belongs to.
- timings: Dictionary with timestamps for each stage of the script run.
- """
- stats_template = ("Started %f, Ended %f, Total %fs, Extract %fs, "
- "Compile %fs, Process %fs")
- total_secs = timings['results_processed'] - timings['started']
- extract_secs = timings['extract_done'] - timings['started']
- compile_secs = timings['compile_done'] - timings['extract_done']
- process_secs = timings['results_processed'] - timings['compile_done']
- resultfile.write('TEST(%s, Stats) { LOG(INFO) << "%s"; }\n' % (
- suite_name, stats_template % (
- timings['started'], timings['results_processed'], total_secs,
- extract_secs, compile_secs, process_secs)))
-
-
-def ProcessTestResult(resultfile, test):
- """Interprets and logs the result of a test started by StartTest()
-
- Args:
- resultfile: File object for .cc file that results are written to.
- test: The dictionary from StartTest() to process.
- """
- # Snap a copy of stdout and stderr into the test dictionary immediately
- # cause we can only call this once on the Popen object, and lots of stuff
- # below will want access to it.
- proc = test['proc']
- (stdout, stderr) = proc.communicate()
-
- if test['aborted_at'] != 0:
- FailTest(resultfile, test, "Compile timed out. Started %f ended %f." %
- (test['started_at'], test['aborted_at']))
- return
-
- if test['expectations'] is None:
- # This signals a compiler sanity check test. Fail iff compilation failed.
- if proc.poll() == 0:
- PassTest(resultfile, test)
- return
- else:
- FailTest(resultfile, test, 'Sanity compile failed. Is compiler borked?',
- stdout, stderr)
- return
- elif proc.poll() == 0:
- # Handle failure due to successful compile.
- FailTest(resultfile, test,
- 'Unexpected successful compilation.',
- stdout, stderr)
- return
- else:
- # Check the output has the right expectations. If there are no
- # expectations, then we just consider the output "matched" by default.
- if len(test['expectations']) == 0:
- PassTest(resultfile, test)
- return
-
- # Otherwise test against all expectations.
- for regexp in test['expectations']:
- if (regexp.search(stdout) is not None or
- regexp.search(stderr) is not None):
- PassTest(resultfile, test)
- return
- expectation_str = ', '.join(
- ["r'%s'" % regexp.pattern for regexp in test['expectations']])
- FailTest(resultfile, test,
- 'Expectations [%s] did not match output.' % expectation_str,
- stdout, stderr)
- return
-
-
-def CompleteAtLeastOneTest(resultfile, executing_tests):
- """Blocks until at least one task is removed from executing_tests.
-
- This function removes completed tests from executing_tests, logging failures
- and output. If no tests can be removed, it will enter a poll-loop until one
- test finishes or times out. On a timeout, this function is responsible for
- terminating the process in the appropriate fashion.
-
- Args:
- executing_tests: A dict mapping a string containing the test name to the
- test dict return from StartTest().
-
- Returns:
- A list of tests that have finished.
- """
- finished_tests = []
- busy_loop_timeout = time.time() + BUSY_LOOP_MAX_TIME_SEC
- while len(finished_tests) == 0:
- # If we don't make progress for too long, assume the code is just dead.
- assert busy_loop_timeout > time.time()
-
- # Select on the output pipes.
- read_set = []
- for test in executing_tests.values():
- read_set.extend([test['proc'].stderr, test['proc'].stdout])
- result = select.select(read_set, [], read_set, NCTEST_TERMINATE_TIMEOUT_SEC)
-
- # Now attempt to process results.
- now = time.time()
- for test in executing_tests.values():
- proc = test['proc']
- if proc.poll() is not None:
- test['finished_at'] = now
- finished_tests.append(test)
- elif test['terminate_timeout'] < now:
- proc.terminate()
- test['aborted_at'] = now
- elif test['kill_timeout'] < now:
- proc.kill()
- test['aborted_at'] = now
-
- for test in finished_tests:
- del executing_tests[test['name']]
- return finished_tests
-
-
-def main():
- if len(sys.argv) != 5:
- print ('Usage: %s <parallelism> <sourcefile> <cflags> <resultfile>' %
- sys.argv[0])
- sys.exit(1)
-
- # Force us into the "C" locale so the compiler doesn't localize its output.
- # In particular, this stops gcc from using smart quotes when in english UTF-8
- # locales. This makes the expectation writing much easier.
- os.environ['LC_ALL'] = 'C'
-
- parallelism = int(sys.argv[1])
- sourcefile_path = sys.argv[2]
- cflags = sys.argv[3]
- resultfile_path = sys.argv[4]
-
- timings = {'started': time.time()}
-
- ValidateInput(parallelism, sourcefile_path, cflags, resultfile_path)
-
- test_configs = ExtractTestConfigs(sourcefile_path)
- timings['extract_done'] = time.time()
-
- resultfile = open(resultfile_path, 'w')
- resultfile.write(RESULT_FILE_HEADER % sourcefile_path)
-
- # Run the no-compile tests, but ensure we do not run more than |parallelism|
- # tests at once.
- timings['header_written'] = time.time()
- executing_tests = {}
- finished_tests = []
- for config in test_configs:
- # CompleteAtLeastOneTest blocks until at least one test finishes. Thus, this
- # acts as a semaphore. We cannot use threads + a real semaphore because
- # subprocess forks, which can cause all sorts of hilarity with threads.
- if len(executing_tests) >= parallelism:
- finished_tests.extend(CompleteAtLeastOneTest(resultfile, executing_tests))
-
- if config['name'].startswith('DISABLED_'):
- PassTest(resultfile, config)
- else:
- test = StartTest(sourcefile_path, cflags, config)
- assert test['name'] not in executing_tests
- executing_tests[test['name']] = test
-
- # If there are no more test to start, we still need to drain the running
- # ones.
- while len(executing_tests) > 0:
- finished_tests.extend(CompleteAtLeastOneTest(resultfile, executing_tests))
- timings['compile_done'] = time.time()
-
- for test in finished_tests:
- ProcessTestResult(resultfile, test)
- timings['results_processed'] = time.time()
-
- # We always know at least a sanity test was run.
- WriteStats(resultfile, finished_tests[0]['suite_name'], timings)
-
- resultfile.close()
-
-
-if __name__ == '__main__':
- main()
diff --git a/chromium/tools/omahaproxy.py b/chromium/tools/omahaproxy.py
deleted file mode 100755
index 75bf43ddef3..00000000000
--- a/chromium/tools/omahaproxy.py
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 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.
-
-"""Chrome Version Tool
-
-Scrapes Chrome channel information and prints out the requested nugget of
-information.
-"""
-
-import json
-import optparse
-import os
-import string
-import sys
-import urllib
-
-URL = 'https://omahaproxy.appspot.com/json'
-
-
-def main():
- try:
- data = json.load(urllib.urlopen(URL))
- except Exception as e:
- print 'Error: could not load %s\n\n%s' % (URL, str(e))
- return 1
-
- # Iterate to find out valid values for OS, channel, and field options.
- oses = set()
- channels = set()
- fields = set()
-
- for os_versions in data:
- oses.add(os_versions['os'])
-
- for version in os_versions['versions']:
- for field in version:
- if field == 'channel':
- channels.add(version['channel'])
- else:
- fields.add(field)
-
- oses = sorted(oses)
- channels = sorted(channels)
- fields = sorted(fields)
-
- # Command line parsing fun begins!
- usage = ('%prog [options]\n'
- 'Print out information about a particular Chrome channel.')
- parser = optparse.OptionParser(usage=usage)
-
- parser.add_option('-o', '--os',
- choices=oses,
- default='win',
- help='The operating system of interest: %s '
- '[default: %%default]' % ', '.join(oses))
- parser.add_option('-c', '--channel',
- choices=channels,
- default='stable',
- help='The channel of interest: %s '
- '[default: %%default]' % ', '.join(channels))
- parser.add_option('-f', '--field',
- choices=fields,
- default='version',
- help='The field of interest: %s '
- '[default: %%default] ' % ', '.join(fields))
- (opts, args) = parser.parse_args()
-
- # Print out requested data if available.
- for os_versions in data:
- if os_versions['os'] != opts.os:
- continue
-
- for version in os_versions['versions']:
- if version['channel'] != opts.channel:
- continue
-
- if opts.field not in version:
- continue
-
- print version[opts.field]
- return 0
-
- print 'Error: unable to find %s for Chrome %s %s.' % (
- opts.field, opts.os, opts.channel)
- return 1
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/oopif/OWNERS b/chromium/tools/oopif/OWNERS
deleted file mode 100644
index 7952d1b4dfb..00000000000
--- a/chromium/tools/oopif/OWNERS
+++ /dev/null
@@ -1,4 +0,0 @@
-ajwong@chromium.org
-creis@chromium.org
-kenrb@chromium.org
-nasko@chromium.org
diff --git a/chromium/tools/oopif/iframe_server.py b/chromium/tools/oopif/iframe_server.py
deleted file mode 100644
index ace58422003..00000000000
--- a/chromium/tools/oopif/iframe_server.py
+++ /dev/null
@@ -1,224 +0,0 @@
-# Copyright (c) 2012 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.
-
-"""Test server for generating nested iframes with different sites.
-
-Very simple python server for creating a bunch of iframes. The page generation
-is randomized based on query parameters. See the __init__ function of the
-Params class for a description of the parameters.
-
-This server relies on gevent. On Ubuntu, install it via:
-
- sudo apt-get install python-gevent
-
-Run the server using
-
- python iframe_server.py
-
-To use the server, run chrome as follows:
-
- google-chrome --host-resolver-rules='map *.invalid 127.0.0.1'
-
-Change 127.0.0.1 to be the IP of the machine this server is running on. Then
-in this chrome instance, navigate to any domain in .invalid
-(eg., http://1.invalid:8090) to run this test.
-
-"""
-
-import colorsys
-import copy
-import random
-import urllib
-import urlparse
-
-from gevent import pywsgi # pylint: disable=F0401
-
-MAIN_PAGE = """
-<html>
- <head>
- <style>
- body {
- background-color: %(color)s;
- }
- </style>
- </head>
- <body>
- <center>
- <h1><a href="%(url)s">%(site)s</a></h1>
- <p><small>%(url)s</small>
- </center>
- <br />
- %(iframe_html)s
- </body>
-</html>
-"""
-
-IFRAME_FRAGMENT = """
-<iframe src="%(src)s" width="%(width)s" height="%(height)s">
-</iframe>
-"""
-
-class Params(object):
- """Simple object for holding parameters"""
- def __init__(self, query_dict):
- # Basic params:
- # nframes is how many frames per page.
- # nsites is how many sites to random choose out of.
- # depth is how deep to make the frame tree
- # pattern specifies how the sites are layed out per depth. An empty string
- # uses a random N = [0, nsites] each time to generate a N.invalid URL.
- # Otherwise sepcify with single letters like 'ABCA' and frame
- # A.invalid will embed B.invalid will embed C.invalid will embed A.
- # jitter is the amount of randomness applied to nframes and nsites.
- # Should be from [0,1]. 0.0 means no jitter.
- # size_jitter is like jitter, but for width and height.
- self.nframes = int(query_dict.get('nframes', [4] )[0])
- self.nsites = int(query_dict.get('nsites', [10] )[0])
- self.depth = int(query_dict.get('depth', [1] )[0])
- self.jitter = float(query_dict.get('jitter', [0] )[0])
- self.size_jitter = float(query_dict.get('size_jitter', [0.5] )[0])
- self.pattern = query_dict.get('pattern', [''] )[0]
- self.pattern_pos = int(query_dict.get('pattern_pos', [0] )[0])
-
- # Size parameters. Values are percentages.
- self.width = int(query_dict.get('width', [60])[0])
- self.height = int(query_dict.get('height', [50])[0])
-
- # Pass the random seed so our pages are reproduceable.
- self.seed = int(query_dict.get('seed',
- [random.randint(0, 2147483647)])[0])
-
-
-def get_site(urlpath):
- """Takes a urlparse object and finds its approximate site.
-
- Site is defined as registered domain name + scheme. We approximate
- registered domain name by preserving the last 2 elements of the DNS
- name. This breaks for domains like co.uk.
- """
- no_port = urlpath.netloc.split(':')[0]
- host_parts = no_port.split('.')
- site_host = '.'.join(host_parts[-2:])
- return '%s://%s' % (urlpath.scheme, site_host)
-
-
-def generate_host(rand, params):
- """Generates the host to be used as an iframes source.
-
- Uses the .invalid domain to ensure DNS will not resolve to any real
- address.
- """
- if params.pattern:
- host = params.pattern[params.pattern_pos]
- params.pattern_pos = (params.pattern_pos + 1) % len(params.pattern)
- else:
- host = rand.randint(1, apply_jitter(rand, params.jitter, params.nsites))
- return '%s.invalid' % host
-
-
-def apply_jitter(rand, jitter, n):
- """Reduce n by random amount from [0, jitter]. Ensures result is >=1."""
- if jitter <= 0.001:
- return n
- v = n - int(n * rand.uniform(0, jitter))
- if v:
- return v
- else:
- return 1
-
-
-def get_color_for_site(site):
- """Generate a stable (and pretty-ish) color for a site."""
- val = hash(site)
- # The constants below are arbitrary chosen emperically to look "pretty."
- # HSV is used because it is easier to control the color than RGB.
- # Reducing the H to 0.6 produces a good range of colors. Preserving
- # > 0.5 saturation and value means the colors won't be too washed out.
- h = (val % 100)/100.0 * 0.6
- s = 1.0 - (int(val/100) % 100)/200.
- v = 1.0 - (int(val/10000) % 100)/200.0
- (r, g, b) = colorsys.hsv_to_rgb(h, s, v)
- return 'rgb(%d, %d, %d)' % (int(r * 255), int(g * 255), int(b * 255))
-
-
-def make_src(scheme, netloc, path, params):
- """Constructs the src url that will recreate the given params."""
- if path == '/':
- path = ''
- return '%(scheme)s://%(netloc)s%(path)s?%(params)s' % {
- 'scheme': scheme,
- 'netloc': netloc,
- 'path': path,
- 'params': urllib.urlencode(params.__dict__),
- }
-
-
-def make_iframe_html(urlpath, params):
- """Produces the HTML fragment for the iframe."""
- if (params.depth <= 0):
- return ''
- # Ensure a stable random number per iframe.
- rand = random.Random()
- rand.seed(params.seed)
-
- netloc_paths = urlpath.netloc.split(':')
- netloc_paths[0] = generate_host(rand, params)
-
- width = apply_jitter(rand, params.size_jitter, params.width)
- height = apply_jitter(rand, params.size_jitter, params.height)
- iframe_params = {
- 'src': make_src(urlpath.scheme, ':'.join(netloc_paths),
- urlpath.path, params),
- 'width': '%d%%' % width,
- 'height': '%d%%' % height,
- }
- return IFRAME_FRAGMENT % iframe_params
-
-
-def create_html(environ):
- """Creates the current HTML page. Also parses out query parameters."""
- urlpath = urlparse.urlparse('%s://%s%s?%s' % (
- environ['wsgi.url_scheme'],
- environ['HTTP_HOST'],
- environ['PATH_INFO'],
- environ['QUERY_STRING']))
- site = get_site(urlpath)
- params = Params(urlparse.parse_qs(urlpath.query))
-
- rand = random.Random()
- rand.seed(params.seed)
-
- iframe_htmls = []
- for frame in xrange(0, apply_jitter(rand, params.jitter, params.nframes)):
- # Copy current parameters into iframe and make modifications
- # for the recursive generation.
- iframe_params = copy.copy(params)
- iframe_params.depth = params.depth - 1
- # Base the new seed off the current seed, but have it skip enough that
- # different frame trees are unlikely to collide. Numbers and skips
- # not chosen in any scientific manner at all.
- iframe_params.seed = params.seed + (frame + 1) * (
- 1000000 + params.depth + 333)
- iframe_htmls.append(make_iframe_html(urlpath, iframe_params))
- template_params = dict(params.__dict__)
- template_params.update({
- 'color': get_color_for_site(site),
- 'iframe_html': '\n'.join(iframe_htmls),
- 'site': site,
- 'url': make_src(urlpath.scheme, urlpath.netloc, urlpath.path, params),
- })
- return MAIN_PAGE % template_params
-
-
-def application(environ, start_response):
- start_response('200 OK', [('Content-Type', 'text/html')])
- if environ['PATH_INFO'] == '/favicon.ico':
- yield ''
- else:
- yield create_html(environ)
-
-
-server = pywsgi.WSGIServer(('', 8090), application)
-
-server.serve_forever()
diff --git a/chromium/tools/prepare-bisect-perf-regression.py b/chromium/tools/prepare-bisect-perf-regression.py
deleted file mode 100755
index a07fcffcde8..00000000000
--- a/chromium/tools/prepare-bisect-perf-regression.py
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 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.
-
-"""Prepare Performance Test Bisect Tool
-
-This script is used by a trybot to create a working directory and sync an
-initial copy of the depot for use in bisecting performance regressions.
-
-An example usage:
-
-./tools/prepare-bisect-perf-regressions.py --working_directory "~/builds"
- --output_buildbot_annotations
-
-Would result in creating ~/builds/bisect and then populating it with a copy of
-the depot.
-
-"""
-
-import optparse
-import sys
-
-import bisect_utils
-
-
-def main():
-
- usage = ('%prog [options] [-- chromium-options]\n'
- 'Prepares a temporary depot for use on a trybot.')
-
- parser = optparse.OptionParser(usage=usage)
-
- parser.add_option('-w', '--working_directory',
- type='str',
- help='Path to the working directory where the script will '
- 'do an initial checkout of the chromium depot. The '
- 'files will be placed in a subdirectory "bisect" under '
- 'working_directory and that will be used to perform the '
- 'bisection.')
- parser.add_option('--output_buildbot_annotations',
- action="store_true",
- help='Add extra annotation output for buildbot.')
- parser.add_option('--target_platform',
- type='choice',
- choices=['chromium', 'cros', 'android'],
- default='chromium',
- help='The target platform. Choices are "chromium" (current '
- 'platform), "cros", or "android". If you specify something '
- 'other than "chromium", you must be properly set up to '
- 'build that platform.')
- (opts, args) = parser.parse_args()
-
- if not opts.working_directory:
- print 'Error: missing required parameter: --working_directory'
- print
- parser.print_help()
- return 1
-
- if not bisect_utils.CheckIfBisectDepotExists(opts):
- try:
- bisect_utils.CreateBisectDirectoryAndSetupDepot(opts,
- bisect_utils.DEFAULT_GCLIENT_CUSTOM_DEPS)
- except RuntimeError:
- return 1
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/python/google/__init__.py b/chromium/tools/python/google/__init__.py
deleted file mode 100644
index 8b137891791..00000000000
--- a/chromium/tools/python/google/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/chromium/tools/python/google/gethash_timer.py b/chromium/tools/python/google/gethash_timer.py
deleted file mode 100755
index 9c4bd460895..00000000000
--- a/chromium/tools/python/google/gethash_timer.py
+++ /dev/null
@@ -1,149 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""Issue a series of GetHash requests to the SafeBrowsing servers and measure
-the response times.
-
-Usage:
-
- $ ./gethash_timer.py --period=600 --samples=20 --output=resp.csv
-
- --period (or -p): The amount of time (in seconds) to wait between GetHash
- requests. Using a value of more than 300 (5 minutes) to
- include the effect of DNS.
-
- --samples (or -s): The number of requests to issue. If this parameter is not
- specified, the test will run indefinitely.
-
- --output (or -o): The path to a file where the output will be written in
- CSV format: sample_number,response_code,elapsed_time_ms
-"""
-
-import getopt
-import httplib
-import sys
-import time
-
-_GETHASH_HOST = 'safebrowsing.clients.google.com'
-_GETHASH_REQUEST = (
- '/safebrowsing/gethash?client=googleclient&appver=1.0&pver=2.1')
-
-# Global logging file handle.
-g_file_handle = None
-
-
-def IssueGetHash(prefix):
- '''Issue one GetHash request to the safebrowsing servers.
- Args:
- prefix: A 4 byte value to look up on the server.
- Returns:
- The HTTP response code for the GetHash request.
- '''
- body = '4:4\n' + prefix
- h = httplib.HTTPConnection(_GETHASH_HOST)
- h.putrequest('POST', _GETHASH_REQUEST)
- h.putheader('content-length', str(len(body)))
- h.endheaders()
- h.send(body)
- response_code = h.getresponse().status
- h.close()
- return response_code
-
-
-def TimedGetHash(prefix):
- '''Measure the amount of time it takes to receive a GetHash response.
- Args:
- prefix: A 4 byte value to look up on the the server.
- Returns:
- A tuple of HTTP resonse code and the response time (in milliseconds).
- '''
- start = time.time()
- response_code = IssueGetHash(prefix)
- return response_code, (time.time() - start) * 1000
-
-
-def RunTimedGetHash(period, samples=None):
- '''Runs an experiment to measure the amount of time it takes to receive
- multiple responses from the GetHash servers.
-
- Args:
- period: A floating point value that indicates (in seconds) the delay
- between requests.
- samples: An integer value indicating the number of requests to make.
- If 'None', the test continues indefinitely.
- Returns:
- None.
- '''
- global g_file_handle
- prefix = '\x50\x61\x75\x6c'
- sample_count = 1
- while True:
- response_code, elapsed_time = TimedGetHash(prefix)
- LogResponse(sample_count, response_code, elapsed_time)
- sample_count += 1
- if samples is not None and sample_count == samples:
- break
- time.sleep(period)
-
-
-def LogResponse(sample_count, response_code, elapsed_time):
- '''Output the response for one GetHash query.
- Args:
- sample_count: The current sample number.
- response_code: The HTTP response code for the GetHash request.
- elapsed_time: The round-trip time (in milliseconds) for the
- GetHash request.
- Returns:
- None.
- '''
- global g_file_handle
- output_list = (sample_count, response_code, elapsed_time)
- print 'Request: %d, status: %d, elapsed time: %f ms' % output_list
- if g_file_handle is not None:
- g_file_handle.write(('%d,%d,%f' % output_list) + '\n')
- g_file_handle.flush()
-
-
-def SetupOutputFile(file_name):
- '''Open a file for logging results.
- Args:
- file_name: A path to a file to store the output.
- Returns:
- None.
- '''
- global g_file_handle
- g_file_handle = open(file_name, 'w')
-
-
-def main():
- period = 10
- samples = None
-
- options, args = getopt.getopt(sys.argv[1:],
- 's:p:o:',
- ['samples=', 'period=', 'output='])
- for option, value in options:
- if option == '-s' or option == '--samples':
- samples = int(value)
- elif option == '-p' or option == '--period':
- period = float(value)
- elif option == '-o' or option == '--output':
- file_name = value
- else:
- print 'Bad option: %s' % option
- return 1
- try:
- print 'Starting Timed GetHash ----------'
- SetupOutputFile(file_name)
- RunTimedGetHash(period, samples)
- except KeyboardInterrupt:
- pass
-
- print 'Timed GetHash complete ----------'
- g_file_handle.close()
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/python/google/httpd_config/httpd.conf b/chromium/tools/python/google/httpd_config/httpd.conf
deleted file mode 100644
index 0457be4ff30..00000000000
--- a/chromium/tools/python/google/httpd_config/httpd.conf
+++ /dev/null
@@ -1,734 +0,0 @@
-##
-## httpd.conf -- Apache HTTP server configuration file
-##
-
-#
-# Based upon the NCSA server configuration files originally by Rob McCool.
-#
-# This is the main Apache server configuration file. It contains the
-# configuration directives that give the server its instructions.
-# See <URL:http://httpd.apache.org/docs/> for detailed information about
-# the directives.
-#
-# Do NOT simply read the instructions in here without understanding
-# what they do. They're here only as hints or reminders. If you are unsure
-# consult the online docs. You have been warned.
-#
-# After this file is processed, the server will look for and process
-# /private/etc/httpd/srm.conf and then /private/etc/httpd/access.conf
-# unless you have overridden these with ResourceConfig and/or
-# AccessConfig directives here.
-#
-# The configuration directives are grouped into three basic sections:
-# 1. Directives that control the operation of the Apache server process as a
-# whole (the 'global environment').
-# 2. Directives that define the parameters of the 'main' or 'default' server,
-# which responds to requests that aren't handled by a virtual host.
-# These directives also provide default values for the settings
-# of all virtual hosts.
-# 3. Settings for virtual hosts, which allow Web requests to be sent to
-# different IP addresses or hostnames and have them handled by the
-# same Apache server process.
-#
-# Configuration and logfile names: If the filenames you specify for many
-# of the server's control files begin with "/" (or "drive:/" for Win32), the
-# server will use that explicit path. If the filenames do *not* begin
-# with "/", the value of ServerRoot is prepended -- so "logs/foo.log"
-# with ServerRoot set to "/usr/local/apache" will be interpreted by the
-# server as "/usr/local/apache/logs/foo.log".
-#
-
-### Section 1: Global Environment
-#
-# The directives in this section affect the overall operation of Apache,
-# such as the number of concurrent requests it can handle or where it
-# can find its configuration files.
-#
-
-#
-# ServerType is either inetd, or standalone. Inetd mode is only supported on
-# Unix platforms.
-#
-ServerType standalone
-
-#
-# ServerRoot: The top of the directory tree under which the server's
-# configuration, error, and log files are kept.
-#
-# NOTE! If you intend to place this on an NFS (or otherwise network)
-# mounted filesystem then please read the LockFile documentation
-# (available at <URL:http://www.apache.org/docs/mod/core.html#lockfile>);
-# you will save yourself a lot of trouble.
-#
-#ServerRoot "/usr"
-
-#
-# The LockFile directive sets the path to the lockfile used when Apache
-# is compiled with either USE_FCNTL_SERIALIZED_ACCEPT or
-# USE_FLOCK_SERIALIZED_ACCEPT. This directive should normally be left at
-# its default value. The main reason for changing it is if the logs
-# directory is NFS mounted, since the lockfile MUST BE STORED ON A LOCAL
-# DISK. The PID of the main server process is automatically appended to
-# the filename.
-#
-#LockFile "/private/var/run/httpd.lock"
-
-#
-# PidFile: The file in which the server should record its process
-# identification number when it starts.
-#
-PidFile "/tmp/WebKit/httpd.pid"
-
-#
-# ScoreBoardFile: File used to store internal server process information.
-# Not all architectures require this. But if yours does (you'll know because
-# this file will be created when you run Apache) then you *must* ensure that
-# no two invocations of Apache share the same scoreboard file.
-#
-ScoreBoardFile "/tmp/WebKit/httpd.scoreboard"
-
-#
-# In the standard configuration, the server will process httpd.conf (this
-# file, specified by the -f command line option), srm.conf, and access.conf
-# in that order. The latter two files are now distributed empty, as it is
-# recommended that all directives be kept in a single file for simplicity.
-# The commented-out values below are the built-in defaults. You can have the
-# server ignore these files altogether by using "/dev/null" (for Unix) or
-# "nul" (for Win32) for the arguments to the directives.
-#
-ResourceConfig /dev/null
-AccessConfig /dev/null
-
-#
-# Timeout: The number of seconds before receives and sends time out.
-#
-Timeout 300
-
-#
-# KeepAlive: Whether or not to allow persistent connections (more than
-# one request per connection). Set to "Off" to deactivate.
-#
-KeepAlive On
-
-#
-# MaxKeepAliveRequests: The maximum number of requests to allow
-# during a persistent connection. Set to 0 to allow an unlimited amount.
-# We recommend you leave this number high, for maximum performance.
-#
-MaxKeepAliveRequests 100
-
-#
-# KeepAliveTimeout: Number of seconds to wait for the next request from the
-# same client on the same connection.
-#
-KeepAliveTimeout 15
-
-#
-# Server-pool size regulation. Rather than making you guess how many
-# server processes you need, Apache dynamically adapts to the load it
-# sees --- that is, it tries to maintain enough server processes to
-# handle the current load, plus a few spare servers to handle transient
-# load spikes (e.g., multiple simultaneous requests from a single
-# Netscape browser).
-#
-# It does this by periodically checking how many servers are waiting
-# for a request. If there are fewer than MinSpareServers, it creates
-# a new spare. If there are more than MaxSpareServers, some of the
-# spares die off. The default values are probably OK for most sites.
-#
-MinSpareServers 1
-MaxSpareServers 5
-
-#
-# Number of servers to start initially --- should be a reasonable ballpark
-# figure.
-#
-StartServers 1
-
-#
-# Limit on total number of servers running, i.e., limit on the number
-# of clients who can simultaneously connect --- if this limit is ever
-# reached, clients will be LOCKED OUT, so it should NOT BE SET TOO LOW.
-# It is intended mainly as a brake to keep a runaway server from taking
-# the system with it as it spirals down...
-#
-MaxClients 150
-
-#
-# MaxRequestsPerChild: the number of requests each child process is
-# allowed to process before the child dies. The child will exit so
-# as to avoid problems after prolonged use when Apache (and maybe the
-# libraries it uses) leak memory or other resources. On most systems, this
-# isn't really needed, but a few (such as Solaris) do have notable leaks
-# in the libraries. For these platforms, set to something like 10000
-# or so; a setting of 0 means unlimited.
-#
-# NOTE: This value does not include keepalive requests after the initial
-# request per connection. For example, if a child process handles
-# an initial request and 10 subsequent "keptalive" requests, it
-# would only count as 1 request towards this limit.
-#
-MaxRequestsPerChild 100000
-
-#
-# Listen: Allows you to bind Apache to specific IP addresses and/or
-# ports, instead of the default. See also the <VirtualHost>
-# directive.
-#
-# Configured from the httpd command line for WebKit layout tests.
-#
-Listen 127.0.0.1:8000
-Listen 127.0.0.1:8080
-Listen 127.0.0.1:8081
-Listen 127.0.0.1:9000
-Listen 127.0.0.1:9080
-
-#
-# Dynamic Shared Object (DSO) Support
-#
-# To be able to use the functionality of a module which was built as a DSO you
-# have to place corresponding `LoadModule' lines at this location so the
-# directives contained in it are actually available _before_ they are used.
-# Please read the file http://httpd.apache.org/docs/dso.html for more
-# details about the DSO mechanism and run `httpd -l' for the list of already
-# built-in (statically linked and thus always available) modules in your httpd
-# binary.
-#
-# Note: The order in which modules are loaded is important. Don't change
-# the order below without expert advice.
-#
-# Example:
-# LoadModule foo_module lib/apache/mod_foo.dll
-#LoadModule vhost_alias_module lib/apache/mod_vhost_alias.dll
-#LoadModule env_module lib/apache/mod_env.dll
-LoadModule config_log_module lib/apache/mod_log_config.dll
-#LoadModule mime_magic_module lib/apache/mod_mime_magic.dll
-LoadModule mime_module lib/apache/mod_mime.dll
-LoadModule negotiation_module lib/apache/mod_negotiation.dll
-#LoadModule status_module lib/apache/mod_status.dll
-#LoadModule info_module lib/apache/mod_info.dll
-LoadModule includes_module lib/apache/mod_include.dll
-LoadModule autoindex_module lib/apache/mod_autoindex.dll
-#LoadModule dir_module lib/apache/mod_dir.dll
-LoadModule cgi_module lib/apache/mod_cgi.dll
-LoadModule asis_module lib/apache/mod_asis.dll
-LoadModule imap_module lib/apache/mod_imap.dll
-LoadModule action_module lib/apache/mod_actions.dll
-#LoadModule speling_module lib/apache/mod_speling.dll
-#LoadModule userdir_module lib/apache/mod_userdir.dll
-LoadModule alias_module lib/apache/mod_alias.dll
-LoadModule rewrite_module lib/apache/mod_rewrite.dll
-LoadModule access_module lib/apache/mod_access.dll
-LoadModule auth_module lib/apache/mod_auth.dll
-#LoadModule anon_auth_module lib/apache/mod_auth_anon.dll
-#LoadModule dbm_auth_module lib/apache/mod_auth_dbm.dll
-#LoadModule digest_module lib/apache/mod_digest.dll
-#LoadModule proxy_module lib/apache/libproxy.dll
-#LoadModule cern_meta_module lib/apache/mod_cern_meta.dll
-#LoadModule expires_module lib/apache/mod_expires.dll
-LoadModule headers_module lib/apache/mod_headers.dll
-#LoadModule usertrack_module lib/apache/mod_usertrack.dll
-#LoadModule log_forensic_module lib/apache/mod_log_forensic.dll
-#LoadModule unique_id_module lib/apache/mod_unique_id.dll
-#LoadModule setenvif_module lib/apache/mod_setenvif.dll
-#LoadModule dav_module lib/apache/libdav.dll
-#LoadModule ssl_module lib/apache/libssl.dll
-#LoadModule perl_module lib/apache/libperl.dll
-#LoadModule php4_module lib/apache/libphp4.dll
-#LoadModule hfs_apple_module lib/apache/mod_hfs_apple.dll
-#LoadModule bonjour_module lib/apache/mod_bonjour.dll
-
-# Reconstruction of the complete module list from all available modules
-# (static and shared ones) to achieve correct module execution order.
-# [WHENEVER YOU CHANGE THE LOADMODULE SECTION ABOVE UPDATE THIS, TOO]
-ClearModuleList
-#AddModule mod_vhost_alias.c
-#AddModule mod_env.c
-AddModule mod_log_config.c
-#AddModule mod_mime_magic.c
-AddModule mod_mime.c
-AddModule mod_negotiation.c
-#AddModule mod_status.c
-#AddModule mod_info.c
-AddModule mod_include.c
-AddModule mod_autoindex.c
-#AddModule mod_dir.c
-AddModule mod_cgi.c
-AddModule mod_asis.c
-AddModule mod_imap.c
-AddModule mod_actions.c
-#AddModule mod_speling.c
-#AddModule mod_userdir.c
-AddModule mod_alias.c
-AddModule mod_rewrite.c
-AddModule mod_access.c
-AddModule mod_auth.c
-#AddModule mod_auth_anon.c
-#AddModule mod_auth_dbm.c
-#AddModule mod_digest.c
-#AddModule mod_proxy.c
-#AddModule mod_cern_meta.c
-#AddModule mod_expires.c
-AddModule mod_headers.c
-#AddModule mod_usertrack.c
-#AddModule mod_log_forensic.c
-#AddModule mod_unique_id.c
-AddModule mod_so.c
-#AddModule mod_setenvif.c
-#AddModule mod_dav.c
-#AddModule mod_ssl.c
-#AddModule mod_perl.c
-#AddModule mod_php4.c
-#AddModule mod_hfs_apple.c
-#AddModule mod_bonjour.c
-
-### Section 2: 'Main' server configuration
-#
-# The directives in this section set up the values used by the 'main'
-# server, which responds to any requests that aren't handled by a
-# <VirtualHost> definition. These values also provide defaults for
-# any <VirtualHost> containers you may define later in the file.
-#
-# All of these directives may appear inside <VirtualHost> containers,
-# in which case these default settings will be overridden for the
-# virtual host being defined.
-#
-
-#
-# ServerName allows you to set a host name which is sent back to clients for
-# your server if it's different than the one the program would get (i.e., use
-# "www" instead of the host's real name).
-#
-# Note: You cannot just invent host names and hope they work. The name you
-# define here must be a valid DNS name for your host. If you don't understand
-# this, ask your network administrator.
-# If your host doesn't have a registered DNS name, enter its IP address here.
-# You will have to access it by its address (e.g., http://123.45.67.89/)
-# anyway, and this will make redirections work in a sensible way.
-#
-# 127.0.0.1 is the TCP/IP local loop-back address, often named localhost. Your
-# machine always knows itself by this address. If you use Apache strictly for
-# local testing and development, you may use 127.0.0.1 as the server name.
-#
-ServerName 127.0.0.1
-
-#
-# DocumentRoot: The directory out of which you will serve your
-# documents. By default, all requests are taken from this directory, but
-# symbolic links and aliases may be used to point to other locations.
-#
-# Configured from the httpd command line for WebKit layout tests.
-#DocumentRoot "/Library/WebServer/Documents"
-
-#
-# Each directory to which Apache has access, can be configured with respect
-# to which services and features are allowed and/or disabled in that
-# directory (and its subdirectories).
-#
-<Directory />
-#
-# This may also be "None", "All", or any combination of "Indexes",
-# "Includes", "FollowSymLinks", "ExecCGI", or "MultiViews".
-#
-# Note that "MultiViews" must be named *explicitly* --- "Options All"
-# doesn't give it to you.
-#
- Options Indexes FollowSymLinks MultiViews ExecCGI Includes
-
-#
-# This controls which options the .htaccess files in directories can
-# override. Can also be "All", or any combination of "Options", "FileInfo",
-# "AuthConfig", and "Limit"
-#
- AllowOverride All
-
-#
-# Controls who can get stuff from this server.
-#
- Order allow,deny
- Allow from all
-</Directory>
-
-#
-# AccessFileName: The name of the file to look for in each directory
-# for access control information.
-#
-AccessFileName .htaccess
-
-#
-# The following lines prevent .htaccess files from being viewed by
-# Web clients. Since .htaccess files often contain authorization
-# information, access is disallowed for security reasons. Comment
-# these lines out if you want Web visitors to see the contents of
-# .htaccess files. If you change the AccessFileName directive above,
-# be sure to make the corresponding changes here.
-#
-# Also, folks tend to use names such as .htpasswd for password
-# files, so this will protect those as well.
-#
-<Files ~ "^\.([Hh][Tt]|[Dd][Ss]_[Ss])">
- Order allow,deny
- Deny from all
- Satisfy All
-</Files>
-
-#
-# Apple specific filesystem protection.
-#
-
-<Files "rsrc">
- Order allow,deny
- Deny from all
- Satisfy All
-</Files>
-
-<Directory ~ ".*\.\.namedfork">
- Order allow,deny
- Deny from all
- Satisfy All
-</Directory>
-
-#
-# CacheNegotiatedDocs: By default, Apache sends "Pragma: no-cache" with each
-# document that was negotiated on the basis of content. This asks proxy
-# servers not to cache the document. Uncommenting the following line disables
-# this behavior, and proxies will be allowed to cache the documents.
-#
-#CacheNegotiatedDocs
-
-#
-# UseCanonicalName: (new for 1.3) With this setting turned on, whenever
-# Apache needs to construct a self-referencing URL (a URL that refers back
-# to the server the response is coming from) it will use ServerName and
-# Port to form a "canonical" name. With this setting off, Apache will
-# use the hostname:port that the client supplied, when possible. This
-# also affects SERVER_NAME and SERVER_PORT in CGI scripts.
-#
-UseCanonicalName On
-
-#
-# TypesConfig describes where the mime.types file (or equivalent) is
-# to be found.
-#
-# Configured from the httpd command line for WebKit layout tests.
-#
-#<IfModule mod_mime.c>
-# TypesConfig /private/etc/httpd/mime.types
-#</IfModule>
-
-#
-# DefaultType is the default MIME type the server will use for a document
-# if it cannot otherwise determine one, such as from filename extensions.
-# If your server contains mostly text or HTML documents, "text/plain" is
-# a good value. If most of your content is binary, such as applications
-# or images, you may want to use "application/octet-stream" instead to
-# keep browsers from trying to display binary files as though they are
-# text.
-#
-DefaultType text/plain
-
-#
-# HostnameLookups: Log the names of clients or just their IP addresses
-# e.g., www.apache.org (on) or 204.62.129.132 (off).
-# The default is off because it'd be overall better for the net if people
-# had to knowingly turn this feature on, since enabling it means that
-# each client request will result in AT LEAST one lookup request to the
-# nameserver.
-#
-HostnameLookups Off
-
-#
-# ErrorLog: The location of the error log file.
-# If you do not specify an ErrorLog directive within a <VirtualHost>
-# container, error messages relating to that virtual host will be
-# logged here. If you *do* define an error logfile for a <VirtualHost>
-# container, that host's errors will be logged there and not here.
-#
-# Configured from the httpd command line for WebKit layout tests.
-#ErrorLog "/tmp/layout-test-results/error_log"
-
-#
-# LogLevel: Control the number of messages logged to the error_log.
-# Possible values include: debug, info, notice, warn, error, crit,
-# alert, emerg.
-#
-LogLevel warn
-
-#
-# The following directives define some format nicknames for use with
-# a CustomLog directive (see below).
-#
-LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
-LogFormat "%p %h %l %u %t \"%r\" %>s %b" common
-LogFormat "%{Referer}i -> %U" referer
-LogFormat "%{User-agent}i" agent
-
-#
-# The location and format of the access logfile (Common Logfile Format).
-# If you do not define any access logfiles within a <VirtualHost>
-# container, they will be logged here. Contrariwise, if you *do*
-# define per-<VirtualHost> access logfiles, transactions will be
-# logged therein and *not* in this file.
-#
-# Configured from the httpd command line for WebKit layout tests.
-#CustomLog "/tmp/layout-test-results/access_log" common
-
-#
-# If you prefer a single logfile with access, agent, and referer information
-# (Combined Logfile Format) you can use the following directive.
-#
-#CustomLog "/tmp/layout-test-results/access_log" combined
-
-#
-# Optionally add a line containing the server version and virtual host
-# name to server-generated pages (error documents, FTP directory listings,
-# mod_status and mod_info output etc., but not CGI generated documents).
-# Set to "EMail" to also include a mailto: link to the ServerAdmin.
-# Set to one of: On | Off | EMail
-#
-ServerSignature On
-
-#
-# Aliases: Add here as many aliases as you need (with no limit). The format is
-# Alias fakename realname
-#
-<IfModule mod_alias.c>
-</IfModule>
-# End of aliases.
-
-#
-# Redirect allows you to tell clients about documents which used to exist in
-# your server's namespace, but do not anymore. This allows you to tell the
-# clients where to look for the relocated document.
-# Format: Redirect old-URI new-URL
-#
-
-#
-# Document types.
-#
-<IfModule mod_mime.c>
-
- #
- # AddLanguage allows you to specify the language of a document. You can
- # then use content negotiation to give a browser a file in a language
- # it can understand.
- #
- # Note 1: The suffix does not have to be the same as the language
- # keyword --- those with documents in Polish (whose net-standard
- # language code is pl) may wish to use "AddLanguage pl .po" to
- # avoid the ambiguity with the common suffix for perl scripts.
- #
- # Note 2: The example entries below illustrate that in quite
- # some cases the two character 'Language' abbreviation is not
- # identical to the two character 'Country' code for its country,
- # E.g. 'Danmark/dk' versus 'Danish/da'.
- #
- # Note 3: In the case of 'ltz' we violate the RFC by using a three char
- # specifier. But there is 'work in progress' to fix this and get
- # the reference data for rfc1766 cleaned up.
- #
- # Danish (da) - Dutch (nl) - English (en) - Estonian (ee)
- # French (fr) - German (de) - Greek-Modern (el)
- # Italian (it) - Korean (kr) - Norwegian (no) - Norwegian Nynorsk (nn)
- # Portugese (pt) - Luxembourgeois* (ltz)
- # Spanish (es) - Swedish (sv) - Catalan (ca) - Czech(cs)
- # Polish (pl) - Brazilian Portuguese (pt-br) - Japanese (ja)
- # Russian (ru)
- #
- AddLanguage da .dk
- AddLanguage nl .nl
- AddLanguage en .en
- AddLanguage et .ee
- AddLanguage fr .fr
- AddLanguage de .de
- AddLanguage el .el
- AddLanguage he .he
- AddCharset ISO-8859-8 .iso8859-8
- AddLanguage it .it
- AddLanguage ja .ja
- AddCharset ISO-2022-JP .jis
- AddLanguage kr .kr
- AddCharset ISO-2022-KR .iso-kr
- AddLanguage nn .nn
- AddLanguage no .no
- AddLanguage pl .po
- AddCharset ISO-8859-2 .iso-pl
- AddLanguage pt .pt
- AddLanguage pt-br .pt-br
- AddLanguage ltz .lu
- AddLanguage ca .ca
- AddLanguage es .es
- AddLanguage sv .sv
- AddLanguage cs .cz .cs
- AddLanguage ru .ru
- AddLanguage zh-TW .zh-tw
- AddCharset Big5 .Big5 .big5
- AddCharset WINDOWS-1251 .cp-1251
- AddCharset CP866 .cp866
- AddCharset ISO-8859-5 .iso-ru
- AddCharset KOI8-R .koi8-r
- AddCharset UCS-2 .ucs2
- AddCharset UCS-4 .ucs4
- AddCharset UTF-8 .utf8
-
- # LanguagePriority allows you to give precedence to some languages
- # in case of a tie during content negotiation.
- #
- # Just list the languages in decreasing order of preference. We have
- # more or less alphabetized them here. You probably want to change this.
- #
- <IfModule mod_negotiation.c>
- LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv tw
- </IfModule>
-
- #
- # AddType allows you to tweak mime.types without actually editing it, or to
- # make certain files to be certain types.
- #
- AddType application/x-tar .tgz
-
- #
- # AddEncoding allows you to have certain browsers uncompress
- # information on the fly. Note: Not all browsers support this.
- # Despite the name similarity, the following Add* directives have nothing
- # to do with the FancyIndexing customization directives above.
- #
- AddEncoding x-compress .Z
- AddEncoding x-gzip .gz .tgz
- #
- # If the AddEncoding directives above are commented-out, then you
- # probably should define those extensions to indicate media types:
- #
- #AddType application/x-compress .Z
- #AddType application/x-gzip .gz .tgz
-
- #
- # AddHandler allows you to map certain file extensions to "handlers",
- # actions unrelated to filetype. These can be either built into the server
- # or added with the Action command (see below)
- #
- # If you want to use server side includes, or CGI outside
- # ScriptAliased directories, uncomment the following lines.
- #
- # To use CGI scripts:
- #
- AddHandler cgi-script .cgi .pl
-
- #
- # To use server-parsed HTML files
- #
- AddType text/html .shtml
- AddHandler server-parsed .shtml
-
- #
- # Uncomment the following line to enable Apache's send-asis HTTP file
- # feature
- #
- AddHandler send-as-is asis
-
- #
- # If you wish to use server-parsed imagemap files, use
- #
- #AddHandler imap-file map
-
- #
- # To enable type maps, you might want to use
- #
- #AddHandler type-map var
-
-</IfModule>
-# End of document types.
-
-#
-# Action lets you define media types that will execute a script whenever
-# a matching file is called. This eliminates the need for repeated URL
-# pathnames for oft-used CGI file processors.
-# Format: Action media/type /cgi-script/location
-# Format: Action handler-name /cgi-script/location
-#
-
-#
-# MetaDir: specifies the name of the directory in which Apache can find
-# meta information files. These files contain additional HTTP headers
-# to include when sending the document
-#
-#MetaDir .web
-
-#
-# MetaSuffix: specifies the file name suffix for the file containing the
-# meta information.
-#
-#MetaSuffix .meta
-
-#
-# Customizable error response (Apache style)
-# these come in three flavors
-#
-# 1) plain text
-#ErrorDocument 500 "The server made a boo boo.
-# n.b. the single leading (") marks it as text, it does not get output
-#
-# 2) local redirects
-#ErrorDocument 404 /missing.html
-# to redirect to local URL /missing.html
-#ErrorDocument 404 /cgi-bin/missing_handler.pl
-# N.B.: You can redirect to a script or a document using server-side-includes.
-#
-# 3) external redirects
-#ErrorDocument 402 http://some.other-server.com/subscription_info.html
-# N.B.: Many of the environment variables associated with the original
-# request will *not* be available to such a script.
-
-#
-# Proxy Server directives. Uncomment the following lines to
-# enable the proxy server:
-#
-#<IfModule mod_proxy.c>
-# ProxyRequests On
-
-# <Directory proxy:*>
-# Order deny,allow
-# Deny from all
-# Allow from .your-domain.com
-# </Directory>
-
- #
- # Enable/disable the handling of HTTP/1.1 "Via:" headers.
- # ("Full" adds the server version; "Block" removes all outgoing Via: headers)
- # Set to one of: Off | On | Full | Block
- #
-# ProxyVia On
-
- #
- # To enable the cache as well, edit and uncomment the following lines:
- # (no cacheing without CacheRoot)
- #
-# CacheRoot "/private/var/run/proxy"
-# CacheSize 5
-# CacheGcInterval 4
-# CacheMaxExpire 24
-# CacheLastModifiedFactor 0.1
-# CacheDefaultExpire 1
-# NoCache a-domain.com another-domain.edu joes.garage-sale.com
-
-#</IfModule>
-# End of proxy directives.
-
-
-<IfModule mod_php4.c>
- # If php is turned on, we repsect .php and .phps files.
- AddType application/x-httpd-php .php
- AddType application/x-httpd-php-source .phps
-
- # Since most users will want index.php to work we
- # also automatically enable index.php
- <IfModule mod_dir.c>
- DirectoryIndex index.html index.php
- </IfModule>
-</IfModule>
-
-<IfModule mod_rewrite.c>
- RewriteEngine On
- RewriteCond %{REQUEST_METHOD} ^TRACE
- RewriteRule .* - [F]
-</IfModule>
diff --git a/chromium/tools/python/google/httpd_config/httpd2.conf b/chromium/tools/python/google/httpd_config/httpd2.conf
deleted file mode 100644
index 8c96f757787..00000000000
--- a/chromium/tools/python/google/httpd_config/httpd2.conf
+++ /dev/null
@@ -1,280 +0,0 @@
-## httpd2.conf -- Apache 2.x HTTP server configuration file
-
-#
-# Listen: Allows you to bind Apache to specific IP addresses and/or
-# ports, instead of the default. See also the <VirtualHost>
-# directive.
-#
-Listen 127.0.0.1:8000
-Listen 127.0.0.1:8080
-Listen 127.0.0.1:8081
-Listen 127.0.0.1:8443
-Listen 127.0.0.1:9000
-Listen 127.0.0.1:9080
-Listen 127.0.0.1:9443
-
-#
-# Dynamic Shared Object (DSO) Support
-#
-# To be able to use the functionality of a module which was built as a DSO you
-# have to place corresponding `LoadModule' lines at this location so the
-# directives contained in it are actually available _before_ they are used.
-# Please read the file http://httpd.apache.org/docs/dso.html for more
-# details about the DSO mechanism and run `httpd -l' for the list of already
-# built-in (statically linked and thus always available) modules in your httpd
-# binary.
-#
-# Note: The order in which modules are loaded is important. Don't change
-# the order below without expert advice.
-#
-#LoadModule authn_file_module lib/apache2/mod_authn_file.so
-#LoadModule authn_dbm_module lib/apache2/mod_authn_dbm.so
-#LoadModule authn_anon_module lib/apache2/mod_authn_anon.so
-#LoadModule authn_dbd_module lib/apache2/mod_authn_dbd.so
-#LoadModule authn_default_module lib/apache2/mod_authn_default.so
-LoadModule authz_host_module lib/apache2/mod_authz_host.so
-#LoadModule authz_groupfile_module lib/apache2/mod_authz_groupfile.so
-#LoadModule authz_user_module lib/apache2/mod_authz_user.so
-#LoadModule authz_dbm_module lib/apache2/mod_authz_dbm.so
-#LoadModule authz_owner_module lib/apache2/mod_authz_owner.so
-#LoadModule authz_default_module lib/apache2/mod_authz_default.so
-#LoadModule auth_basic_module lib/apache2/mod_auth_basic.so
-#LoadModule auth_digest_module lib/apache2/mod_auth_digest.so
-#LoadModule dbd_module lib/apache2/mod_dbd.so
-#LoadModule dumpio_module lib/apache2/mod_dumpio.so
-#LoadModule ext_filter_module lib/apache2/mod_ext_filter.so
-LoadModule include_module lib/apache2/mod_include.so
-#LoadModule filter_module lib/apache2/mod_filter.so
-#LoadModule deflate_module lib/apache2/mod_deflate.so
-LoadModule log_config_module lib/apache2/mod_log_config.so
-#LoadModule log_forensic_module lib/apache2/mod_log_forensic.so
-#LoadModule logio_module lib/apache2/mod_logio.so
-#LoadModule env_module lib/apache2/mod_env.so
-#LoadModule mime_magic_module lib/apache2/mod_mime_magic.so
-#LoadModule cern_meta_module lib/apache2/mod_cern_meta.so
-#LoadModule expires_module lib/apache2/mod_expires.so
-LoadModule headers_module lib/apache2/mod_headers.so
-#LoadModule ident_module lib/apache2/mod_ident.so
-#LoadModule usertrack_module lib/apache2/mod_usertrack.so
-#LoadModule unique_id_module lib/apache2/mod_unique_id.so
-#LoadModule setenvif_module lib/apache2/mod_setenvif.so
-#LoadModule version_module lib/apache2/mod_version.so
-#LoadModule proxy_module lib/apache2/mod_proxy.so
-#LoadModule proxy_connect_module lib/apache2/mod_proxy_connect.so
-#LoadModule proxy_ftp_module lib/apache2/mod_proxy_ftp.so
-#LoadModule proxy_http_module lib/apache2/mod_proxy_http.so
-#LoadModule proxy_ajp_module lib/apache2/mod_proxy_ajp.so
-#LoadModule proxy_balancer_module lib/apache2/mod_proxy_balancer.so
-LoadModule ssl_module lib/apache2/mod_ssl.so
-LoadModule mime_module lib/apache2/mod_mime.so
-#LoadModule dav_module lib/apache2/mod_dav.so
-#LoadModule status_module lib/apache2/mod_status.so
-LoadModule autoindex_module lib/apache2/mod_autoindex.so
-LoadModule asis_module lib/apache2/mod_asis.so
-#LoadModule info_module lib/apache2/mod_info.so
-LoadModule cgi_module lib/apache2/mod_cgi.so
-#LoadModule dav_fs_module lib/apache2/mod_dav_fs.so
-#LoadModule vhost_alias_module lib/apache2/mod_vhost_alias.so
-LoadModule negotiation_module lib/apache2/mod_negotiation.so
-#LoadModule dir_module lib/apache2/mod_dir.so
-LoadModule imagemap_module lib/apache2/mod_imagemap.so
-LoadModule actions_module lib/apache2/mod_actions.so
-#LoadModule speling_module lib/apache2/mod_speling.so
-#LoadModule userdir_module lib/apache2/mod_userdir.so
-LoadModule alias_module lib/apache2/mod_alias.so
-LoadModule rewrite_module lib/apache2/mod_rewrite.so
-LoadModule php5_module lib/apache2/cygphp5.so
-
-#LoadModule imap_module lib/apache/mod_imap.dll
-#LoadModule access_module lib/apache/mod_access.dll
-#LoadModule auth_module lib/apache/mod_auth.dll
-
-
-#
-# Each directory to which Apache has access, can be configured with respect
-# to which services and features are allowed and/or disabled in that
-# directory (and its subdirectories).
-#
-<Directory />
- Options Indexes FollowSymLinks MultiViews ExecCGI Includes
- AllowOverride All
- Order allow,deny
- Allow from all
-</Directory>
-
-
-#
-# Apple specific filesystem protection.
-#
-<Files "rsrc">
- Order allow,deny
- Deny from all
- Satisfy All
-</Files>
-<Directory ~ ".*\.\.namedfork">
- Order allow,deny
- Deny from all
- Satisfy All
-</Directory>
-
-
-#
-# UseCanonicalName: (new for 1.3) With this setting turned on, whenever
-# Apache needs to construct a self-referencing URL (a URL that refers back
-# to the server the response is coming from) it will use ServerName and
-# Port to form a "canonical" name. With this setting off, Apache will
-# use the hostname:port that the client supplied, when possible. This
-# also affects SERVER_NAME and SERVER_PORT in CGI scripts.
-#
-UseCanonicalName On
-
-
-#
-# The following directives define some format nicknames for use with
-# a CustomLog directive (see below).
-#
-LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
-LogFormat "%h %l %u %t \"%r\" %>s %b" common
-LogFormat "%{Referer}i -> %U" referer
-LogFormat "%{User-agent}i" agent
-
-
-#
-# Optionally add a line containing the server version and virtual host
-# name to server-generated pages (error documents, FTP directory listings,
-# mod_status and mod_info output etc., but not CGI generated documents).
-# Set to "EMail" to also include a mailto: link to the ServerAdmin.
-# Set to one of: On | Off | EMail
-#
-ServerSignature On
-
-
-#
-# Document types.
-#
-<IfModule mime_module>
-
- #
- # AddLanguage allows you to specify the language of a document. You can
- # then use content negotiation to give a browser a file in a language
- # it can understand.
- #
- # Note 1: The suffix does not have to be the same as the language
- # keyword --- those with documents in Polish (whose net-standard
- # language code is pl) may wish to use "AddLanguage pl .po" to
- # avoid the ambiguity with the common suffix for perl scripts.
- #
- # Note 2: The example entries below illustrate that in quite
- # some cases the two character 'Language' abbreviation is not
- # identical to the two character 'Country' code for its country,
- # E.g. 'Danmark/dk' versus 'Danish/da'.
- #
- # Note 3: In the case of 'ltz' we violate the RFC by using a three char
- # specifier. But there is 'work in progress' to fix this and get
- # the reference data for rfc1766 cleaned up.
- #
- # Danish (da) - Dutch (nl) - English (en) - Estonian (ee)
- # French (fr) - German (de) - Greek-Modern (el)
- # Italian (it) - Korean (kr) - Norwegian (no) - Norwegian Nynorsk (nn)
- # Portugese (pt) - Luxembourgeois* (ltz)
- # Spanish (es) - Swedish (sv) - Catalan (ca) - Czech(cs)
- # Polish (pl) - Brazilian Portuguese (pt-br) - Japanese (ja)
- # Russian (ru)
- #
- AddLanguage da .dk
- AddLanguage nl .nl
- AddLanguage en .en
- AddLanguage et .ee
- AddLanguage fr .fr
- AddLanguage de .de
- AddLanguage el .el
- AddLanguage he .he
- AddCharset ISO-8859-8 .iso8859-8
- AddLanguage it .it
- AddLanguage ja .ja
- AddCharset ISO-2022-JP .jis
- AddLanguage kr .kr
- AddCharset ISO-2022-KR .iso-kr
- AddLanguage nn .nn
- AddLanguage no .no
- AddLanguage pl .po
- AddCharset ISO-8859-2 .iso-pl
- AddLanguage pt .pt
- AddLanguage pt-br .pt-br
- AddLanguage ltz .lu
- AddLanguage ca .ca
- AddLanguage es .es
- AddLanguage sv .sv
- AddLanguage cs .cz .cs
- AddLanguage ru .ru
- AddLanguage zh-TW .zh-tw
- AddCharset Big5 .Big5 .big5
- AddCharset WINDOWS-1251 .cp-1251
- AddCharset CP866 .cp866
- AddCharset ISO-8859-5 .iso-ru
- AddCharset KOI8-R .koi8-r
- AddCharset UCS-2 .ucs2
- AddCharset UCS-4 .ucs4
- AddCharset UTF-8 .utf8
-
- # LanguagePriority allows you to give precedence to some languages
- # in case of a tie during content negotiation.
- #
- # Just list the languages in decreasing order of preference. We have
- # more or less alphabetized them here. You probably want to change this.
- #
- <IfModule negotiation_module>
- LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv tw
- </IfModule>
-
- #
- # AddType allows you to tweak mime.types without actually editing it, or to
- # make certain files to be certain types.
- #
- AddType application/x-tar .tgz
-
- #
- # AddEncoding allows you to have certain browsers uncompress
- # information on the fly. Note: Not all browsers support this.
- # Despite the name similarity, the following Add* directives have nothing
- # to do with the FancyIndexing customization directives above.
- #
- AddEncoding x-compress .Z
- AddEncoding x-gzip .gz .tgz
-
- #
- # AddHandler allows you to map certain file extensions to "handlers",
- # actions unrelated to filetype. These can be either built into the server
- # or added with the Action command (see below)
- #
- # If you want to use server side includes, or CGI outside
- # ScriptAliased directories, uncomment the following lines.
- #
- # To use CGI scripts:
- #
- AddHandler cgi-script .cgi .pl
-
- #
- # To use server-parsed HTML files
- #
- AddType text/html .shtml
- AddHandler server-parsed .shtml
-
- #
- # Uncomment the following line to enable Apache's send-asis HTTP file
- # feature
- #
- AddHandler send-as-is asis
-</IfModule>
-
-
-<IfModule php5_module>
- AddType application/x-httpd-php .php
- AddType application/x-httpd-php-source .phps
-</IfModule>
-
-<IfModule rewrite_module>
- RewriteEngine On
- RewriteCond %{REQUEST_METHOD} ^TRACE
- RewriteRule .* - [F]
-</IfModule>
diff --git a/chromium/tools/python/google/httpd_config/httpd2.pem b/chromium/tools/python/google/httpd_config/httpd2.pem
deleted file mode 100644
index 69d10d2219c..00000000000
--- a/chromium/tools/python/google/httpd_config/httpd2.pem
+++ /dev/null
@@ -1,110 +0,0 @@
------BEGIN PRIVATE KEY-----
-MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCbE8ILYEITh9up
-ken6c61zNAibRnq70g7glLy6fHqQJsrIVzmj6b+4dHLYUA3mu13pqZyoK6YP1MPd
-afdh23IrW4vo6xtxCpqQk0rAEa+0cji7E+01JHEvO4Y1Q4NScGj628HDe+dJqiQD
-AZWRDgIodlKrRjD1XZT91U0UsuytDvYQVbEIosgMdEevW8FvqWAhDH6fkb4Q5OdW
-wUxGnX0+cHLINVMJvCoPq+fDQWy4A/2uRiFn/x9NBZEz2AwNta+y6e3pn8gZE9vh
-Feqe3Jv9toIZzsqQZ/fCWK6FKzfkxQNYc5vcSqHx96VuDhqrbnPFdpcQfRB08Yg4
-3TSioKY7AgMBAAECggEAOqImzPxRH2dPs3Z6+/n+y78RvfvQ7fDHNTyneu8TvCse
-os7v+TypA4nr3kOubd3L7Uv28lLGj9fHUpD9Ot+o9CHB7YfvMTdsJ1u5eJN3VoeV
-UY6AMoab0Nr1rG/hWCsuViL+yPWxBlYxFX3k2hps0HWkXiPE4RDIA41BfqEEAY4+
-6V0lvoBZAJbYncGg1BEDxH+erXIFmAu3PeCYEpb2VP7hQH8JITEWco+DmK5impoB
-e+BaEVLqFKUjU+EdvpE4WKB24K9lw35bfGhWd/cQwSaLIPezG1OK9M0JbpPoj5gg
-KBdwrS7EdOur64Ue774KPAFRYU8mEpnnQMKOnNUuSQKBgQDHfriFwjViBdRJGTZ1
-Wa/AgJ7rVU9yMhaUSifYbLQDrYRwagYNtA/NqTgRYl7BbHZpsYmglQoCAWJa+KK2
-xwJ/1uLsNG+I04lSQCsRr4/z23O6Vc2VzmMpru6Upa9mL8aNiUm2+7VJje/NnUW5
-OXiSxbYGchYbO7+sIo8UmSpm7wKBgQDHAFLoBZOeh1BGnD0YNH7WYJ4kH9IriFcB
-QqJL8yFjikbUU976yAyXNbMIVBMkCZoT/l7RvgwLufarKTzRHv88nCPwg8/sbQQT
-WP4TRcxS6zZj4y0VHN2i0KSldAYk1ohgLFXzAQzXVcMBzNNOdSSLtqRbPZo9Gd7U
-DYaHxRIVdQKBgQCFykaV7hk/FAm6vF35dZyYzanGyf/t5gmeid0PGFfh34zilzhY
-GFpA4yvm/MHvln4ThC14tHtxvNvphrYZPn4+ni6xmrjyWmvN7Zr00XkJYjPK06B8
-x11Zpyf6KOPo9EGEyn3Vahm6qqYYj1EjV5e1V0MsL3cD7J4vIz4x4ka9oQKBgQCN
-9tQuQ7Qw1rVU+ia3etO1Wc3XVYAYoDX5ZzDi37rFCSNIW+DppQceZCepXFkfT15E
-vyWjmWF8iBjJuCxzvxo0ges9rLsLHiZXKxhuZU/DI5t0nN9PfX07pn6ereuoIge+
-HELgjbI8eCkawqVIBleg+BW+JW9AAZGuU0vS1ar19QKBgQC3J57JCl6ZZzGKpFpU
-/9qYA0qFFRBIRddHlfelk7EBqg/6C6yEXAqNO+DcurdU6li+lEOKNSPAqii2MC+H
-XqCIdtbZcOX7pUSg5E8N883ruMjsaePTsvA5iEY5QvA8Mn47wpPikYEXQgFWoP+W
-UFlVhwe/E/ebjJZqyTiQaQcMPQ==
------END PRIVATE KEY-----
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 237 (0xed)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: CN=Test Root CA
- Validity
- Not Before: Jun 18 19:52:02 2013 GMT
- Not After : Jun 16 19:52:02 2023 GMT
- Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- Public-Key: (2048 bit)
- Modulus:
- 00:9b:13:c2:0b:60:42:13:87:db:a9:91:e9:fa:73:
- ad:73:34:08:9b:46:7a:bb:d2:0e:e0:94:bc:ba:7c:
- 7a:90:26:ca:c8:57:39:a3:e9:bf:b8:74:72:d8:50:
- 0d:e6:bb:5d:e9:a9:9c:a8:2b:a6:0f:d4:c3:dd:69:
- f7:61:db:72:2b:5b:8b:e8:eb:1b:71:0a:9a:90:93:
- 4a:c0:11:af:b4:72:38:bb:13:ed:35:24:71:2f:3b:
- 86:35:43:83:52:70:68:fa:db:c1:c3:7b:e7:49:aa:
- 24:03:01:95:91:0e:02:28:76:52:ab:46:30:f5:5d:
- 94:fd:d5:4d:14:b2:ec:ad:0e:f6:10:55:b1:08:a2:
- c8:0c:74:47:af:5b:c1:6f:a9:60:21:0c:7e:9f:91:
- be:10:e4:e7:56:c1:4c:46:9d:7d:3e:70:72:c8:35:
- 53:09:bc:2a:0f:ab:e7:c3:41:6c:b8:03:fd:ae:46:
- 21:67:ff:1f:4d:05:91:33:d8:0c:0d:b5:af:b2:e9:
- ed:e9:9f:c8:19:13:db:e1:15:ea:9e:dc:9b:fd:b6:
- 82:19:ce:ca:90:67:f7:c2:58:ae:85:2b:37:e4:c5:
- 03:58:73:9b:dc:4a:a1:f1:f7:a5:6e:0e:1a:ab:6e:
- 73:c5:76:97:10:7d:10:74:f1:88:38:dd:34:a2:a0:
- a6:3b
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:FALSE
- X509v3 Subject Key Identifier:
- 34:FF:09:84:DB:23:D0:1F:45:72:50:CE:79:28:D3:EF:FB:B1:46:07
- X509v3 Authority Key Identifier:
- keyid:2B:88:93:E1:D2:54:50:F4:B8:A4:20:BD:B1:79:E6:0B:AA:EB:EC:1A
-
- X509v3 Extended Key Usage:
- TLS Web Server Authentication, TLS Web Client Authentication
- X509v3 Subject Alternative Name:
- IP Address:127.0.0.1
- Signature Algorithm: sha1WithRSAEncryption
- a6:21:b1:53:7f:ec:a8:23:6f:76:d4:bd:0a:6a:67:a7:a8:9e:
- 7d:08:38:62:cd:f4:34:d9:41:3a:02:a7:6d:31:7d:33:02:27:
- ab:06:e6:01:c8:65:32:b5:f3:96:27:4c:5a:82:a5:84:a7:99:
- 29:4a:b6:b9:57:41:75:a9:e2:a6:87:00:25:ff:5a:85:f6:68:
- da:e1:5a:19:fb:91:5e:70:27:31:dd:9a:ac:20:9a:d6:27:1c:
- 55:34:8c:f9:a4:97:ff:81:63:fb:b8:7d:71:d4:42:88:3c:10:
- db:78:54:e3:42:b1:a4:83:81:b9:92:7a:f6:b2:f2:19:1c:b6:
- 68:80:2b:14:5a:36:84:e0:67:ad:f9:e4:bc:a1:63:af:a1:13:
- 13:95:3f:76:5e:2c:81:ed:7c:4a:38:04:bf:dc:03:b0:ca:8b:
- d3:17:d8:fc:60:d9:83:31:9f:ef:be:a7:e3:05:4f:b4:3e:97:
- 8a:6d:86:c5:69:ef:93:8c:1b:9e:6e:95:f7:1a:66:f7:1f:bf:
- 5e:92:c4:ed:15:e1:2e:56:56:11:80:be:02:1d:96:fa:39:6a:
- e0:dd:04:d7:98:e9:29:72:a5:60:f1:0e:14:5d:08:db:26:18:
- 42:5b:f3:82:fb:79:83:48:1b:86:8d:9d:8b:5c:87:1a:23:ae:
- bc:4c:13:46
------BEGIN CERTIFICATE-----
-MIIDdDCCAlygAwIBAgICAO0wDQYJKoZIhvcNAQEFBQAwFzEVMBMGA1UEAwwMVGVz
-dCBSb290IENBMB4XDTEzMDYxODE5NTIwMloXDTIzMDYxNjE5NTIwMlowYDELMAkG
-A1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWlu
-IFZpZXcxEDAOBgNVBAoMB1Rlc3QgQ0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJsTwgtgQhOH26mR6fpzrXM0CJtG
-ervSDuCUvLp8epAmyshXOaPpv7h0cthQDea7XempnKgrpg/Uw91p92Hbcitbi+jr
-G3EKmpCTSsARr7RyOLsT7TUkcS87hjVDg1JwaPrbwcN750mqJAMBlZEOAih2UqtG
-MPVdlP3VTRSy7K0O9hBVsQiiyAx0R69bwW+pYCEMfp+RvhDk51bBTEadfT5wcsg1
-Uwm8Kg+r58NBbLgD/a5GIWf/H00FkTPYDA21r7Lp7emfyBkT2+EV6p7cm/22ghnO
-ypBn98JYroUrN+TFA1hzm9xKofH3pW4OGqtuc8V2lxB9EHTxiDjdNKKgpjsCAwEA
-AaOBgDB+MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFDT/CYTbI9AfRXJQznko0+/7
-sUYHMB8GA1UdIwQYMBaAFCuIk+HSVFD0uKQgvbF55guq6+waMB0GA1UdJQQWMBQG
-CCsGAQUFBwMBBggrBgEFBQcDAjAPBgNVHREECDAGhwR/AAABMA0GCSqGSIb3DQEB
-BQUAA4IBAQCmIbFTf+yoI2921L0KamenqJ59CDhizfQ02UE6AqdtMX0zAierBuYB
-yGUytfOWJ0xagqWEp5kpSra5V0F1qeKmhwAl/1qF9mja4VoZ+5FecCcx3ZqsIJrW
-JxxVNIz5pJf/gWP7uH1x1EKIPBDbeFTjQrGkg4G5knr2svIZHLZogCsUWjaE4Get
-+eS8oWOvoRMTlT92XiyB7XxKOAS/3AOwyovTF9j8YNmDMZ/vvqfjBU+0PpeKbYbF
-ae+TjBuebpX3Gmb3H79eksTtFeEuVlYRgL4CHZb6OWrg3QTXmOkpcqVg8Q4UXQjb
-JhhCW/OC+3mDSBuGjZ2LXIcaI668TBNG
------END CERTIFICATE-----
diff --git a/chromium/tools/python/google/httpd_config/httpd2_linux.conf b/chromium/tools/python/google/httpd_config/httpd2_linux.conf
deleted file mode 100644
index 27a67e027bf..00000000000
--- a/chromium/tools/python/google/httpd_config/httpd2_linux.conf
+++ /dev/null
@@ -1,144 +0,0 @@
-# For this to work, you need to have ssl.conf and ssl.load in
-# /etc/apache/mods-enabled. You also need to be able to write to
-# /var/run/apache2. (Tested on Ubuntu Hardy, directory names may
-# vary with other distros.)
-
-Listen 127.0.0.1:8000
-ServerName 127.0.0.1
-
-#
-# Timeout: The number of seconds before receives and sends time out.
-#
-Timeout 300
-
-#
-# KeepAlive: Whether or not to allow persistent connections (more than
-# one request per connection). Set to "Off" to deactivate.
-#
-KeepAlive On
-
-#
-# MaxKeepAliveRequests: The maximum number of requests to allow
-# during a persistent connection. Set to 0 to allow an unlimited amount.
-# We recommend you leave this number high, for maximum performance.
-#
-MaxKeepAliveRequests 100
-
-#
-# KeepAliveTimeout: Number of seconds to wait for the next request from the
-# same client on the same connection.
-#
-KeepAliveTimeout 15
-
-##
-## Server-Pool Size Regulation (MPM specific)
-##
-
-# prefork MPM
-# StartServers: number of server processes to start
-# MinSpareServers: minimum number of server processes which are kept spare
-# MaxSpareServers: maximum number of server processes which are kept spare
-# MaxClients: maximum number of server processes allowed to start
-# MaxRequestsPerChild: maximum number of requests a server process serves
-<IfModule mpm_prefork_module>
- StartServers 5
- MinSpareServers 5
- MaxSpareServers 10
- MaxClients 150
- MaxRequestsPerChild 0
-</IfModule>
-
-# worker MPM
-# StartServers: initial number of server processes to start
-# MaxClients: maximum number of simultaneous client connections
-# MinSpareThreads: minimum number of worker threads which are kept spare
-# MaxSpareThreads: maximum number of worker threads which are kept spare
-# ThreadsPerChild: constant number of worker threads in each server process
-# MaxRequestsPerChild: maximum number of requests a server process serves
-<IfModule mpm_worker_module>
- StartServers 2
- MaxClients 150
- MinSpareThreads 25
- MaxSpareThreads 75
- ThreadsPerChild 25
- MaxRequestsPerChild 0
-</IfModule>
-
-#
-# AccessFileName: The name of the file to look for in each directory
-# for additional configuration directives. See also the AllowOverride
-# directive.
-#
-
-AccessFileName .htaccess
-
-#
-# The following lines prevent .htaccess and .htpasswd files from being
-# viewed by Web clients.
-#
-<Files ~ "^\.ht">
- Order allow,deny
- Deny from all
-</Files>
-
-#
-# DefaultType is the default MIME type the server will use for a document
-# if it cannot otherwise determine one, such as from filename extensions.
-# If your server contains mostly text or HTML documents, "text/plain" is
-# a good value. If most of your content is binary, such as applications
-# or images, you may want to use "application/octet-stream" instead to
-# keep browsers from trying to display binary files as though they are
-# text.
-#
-DefaultType text/plain
-
-
-#
-# HostnameLookups: Log the names of clients or just their IP addresses
-# e.g., www.apache.org (on) or 204.62.129.132 (off).
-# The default is off because it'd be overall better for the net if people
-# had to knowingly turn this feature on, since enabling it means that
-# each client request will result in AT LEAST one lookup request to the
-# nameserver.
-#
-HostnameLookups Off
-
-#
-# LogLevel: Control the number of messages logged to the error_log.
-# Possible values include: debug, info, notice, warn, error, crit,
-# alert, emerg.
-#
-LogLevel warn
-
-Include /etc/apache2/mods-enabled/*.load
-Include /etc/apache2/mods-enabled/*.conf
-
-#
-# The following directives define some format nicknames for use with
-# a CustomLog directive (see below).
-# If you are behind a reverse proxy, you might want to change %h into %{X-Forwarded-For}i
-#
-LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
-LogFormat "%h %l %u %t \"%r\" %>s %b" common
-LogFormat "%{Referer}i -> %U" referer
-LogFormat "%{User-agent}i" agent
-
-#
-# ServerTokens
-# This directive configures what you return as the Server HTTP response
-# Header. The default is 'Full' which sends information about the OS-Type
-# and compiled in modules.
-# Set to one of: Full | OS | Minor | Minimal | Major | Prod
-# where Full conveys the most information, and Prod the least.
-#
-ServerTokens Full
-
-#
-# Optionally add a line containing the server version and virtual host
-# name to server-generated pages (internal error documents, FTP directory
-# listings, mod_status and mod_info output etc., but not CGI generated
-# documents or custom error documents).
-# Set to "EMail" to also include a mailto: link to the ServerAdmin.
-# Set to one of: On | Off | EMail
-#
-ServerSignature On
diff --git a/chromium/tools/python/google/httpd_config/httpd2_mac.conf b/chromium/tools/python/google/httpd_config/httpd2_mac.conf
deleted file mode 100644
index 07f88999b85..00000000000
--- a/chromium/tools/python/google/httpd_config/httpd2_mac.conf
+++ /dev/null
@@ -1,229 +0,0 @@
-## httpd2.conf -- Apache 2.x HTTP server configuration file
-
-#
-# Listen: Allows you to bind Apache to specific IP addresses and/or
-# ports, instead of the default. See also the <VirtualHost>
-# directive.
-#
-Listen 127.0.0.1:8000
-
-#
-# Dynamic Shared Object (DSO) Support
-#
-# To be able to use the functionality of a module which was built as a DSO you
-# have to place corresponding `LoadModule' lines at this location so the
-# directives contained in it are actually available _before_ they are used.
-# Please read the file http://httpd.apache.org/docs/dso.html for more
-# details about the DSO mechanism and run `httpd -l' for the list of already
-# built-in (statically linked and thus always available) modules in your httpd
-# binary.
-#
-# Note: The order in which modules are loaded is important. Don't change
-# the order below without expert advice.
-#
-# NOTE: This is not the same set of modules that gets loaded on win.
-LoadModule authz_host_module libexec/apache2/mod_authz_host.so
-LoadModule mime_module libexec/apache2/mod_mime.so
-LoadModule ssl_module libexec/apache2/mod_ssl.so
-LoadModule autoindex_module libexec/apache2/mod_autoindex.so
-LoadModule alias_module libexec/apache2/mod_alias.so
-LoadModule log_config_module libexec/apache2/mod_log_config.so
-
-#LoadModule include_module libexec/apache2/mod_include.so
-#LoadModule headers_module libexec/apache2/mod_headers.so
-#LoadModule asis_module libexec/apache2/mod_asis.so
-#LoadModule cgi_module libexec/apache2/mod_cgi.so
-#LoadModule negotiation_module libexec/apache2/mod_negotiation.so
-#LoadModule imagemap_module libexec/apache2/mod_imagemap.so
-#LoadModule actions_module libexec/apache2/mod_actions.so
-#LoadModule rewrite_module libexec/apache2/mod_rewrite.so
-
-
-#
-# Each directory to which Apache has access, can be configured with respect
-# to which services and features are allowed and/or disabled in that
-# directory (and its subdirectories).
-#
-<Directory />
- Options Indexes FollowSymLinks MultiViews ExecCGI Includes
- AllowOverride All
- Order allow,deny
- Allow from all
-</Directory>
-
-
-#
-# Apple specific filesystem protection.
-
-<Files "rsrc">
- Order allow,deny
- Deny from all
- Satisfy All
-</Files>
-<Directory ~ ".*\.\.namedfork">
- Order allow,deny
- Deny from all
- Satisfy All
-</Directory>
-
-
-#
-# UseCanonicalName: (new for 1.3) With this setting turned on, whenever
-# Apache needs to construct a self-referencing URL (a URL that refers back
-# to the server the response is coming from) it will use ServerName and
-# Port to form a "canonical" name. With this setting off, Apache will
-# use the hostname:port that the client supplied, when possible. This
-# also affects SERVER_NAME and SERVER_PORT in CGI scripts.
-#
-UseCanonicalName On
-
-
-#
-# The following directives define some format nicknames for use with
-# a CustomLog directive (see below).
-#
-LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
-LogFormat "%h %l %u %t \"%r\" %>s %b" common
-LogFormat "%{Referer}i -> %U" referer
-LogFormat "%{User-agent}i" agent
-
-
-#
-# Optionally add a line containing the server version and virtual host
-# name to server-generated pages (error documents, FTP directory listings,
-# mod_status and mod_info output etc., but not CGI generated documents).
-# Set to "EMail" to also include a mailto: link to the ServerAdmin.
-# Set to one of: On | Off | EMail
-#
-ServerSignature On
-
-
-#
-# Document types.
-#
-<IfModule mime_module>
-
- #
- # AddLanguage allows you to specify the language of a document. You can
- # then use content negotiation to give a browser a file in a language
- # it can understand.
- #
- # Note 1: The suffix does not have to be the same as the language
- # keyword --- those with documents in Polish (whose net-standard
- # language code is pl) may wish to use "AddLanguage pl .po" to
- # avoid the ambiguity with the common suffix for perl scripts.
- #
- # Note 2: The example entries below illustrate that in quite
- # some cases the two character 'Language' abbreviation is not
- # identical to the two character 'Country' code for its country,
- # E.g. 'Danmark/dk' versus 'Danish/da'.
- #
- # Note 3: In the case of 'ltz' we violate the RFC by using a three char
- # specifier. But there is 'work in progress' to fix this and get
- # the reference data for rfc1766 cleaned up.
- #
- # Danish (da) - Dutch (nl) - English (en) - Estonian (ee)
- # French (fr) - German (de) - Greek-Modern (el)
- # Italian (it) - Korean (kr) - Norwegian (no) - Norwegian Nynorsk (nn)
- # Portugese (pt) - Luxembourgeois* (ltz)
- # Spanish (es) - Swedish (sv) - Catalan (ca) - Czech(cs)
- # Polish (pl) - Brazilian Portuguese (pt-br) - Japanese (ja)
- # Russian (ru)
- #
- AddLanguage da .dk
- AddLanguage nl .nl
- AddLanguage en .en
- AddLanguage et .ee
- AddLanguage fr .fr
- AddLanguage de .de
- AddLanguage el .el
- AddLanguage he .he
- AddCharset ISO-8859-8 .iso8859-8
- AddLanguage it .it
- AddLanguage ja .ja
- AddCharset ISO-2022-JP .jis
- AddLanguage kr .kr
- AddCharset ISO-2022-KR .iso-kr
- AddLanguage nn .nn
- AddLanguage no .no
- AddLanguage pl .po
- AddCharset ISO-8859-2 .iso-pl
- AddLanguage pt .pt
- AddLanguage pt-br .pt-br
- AddLanguage ltz .lu
- AddLanguage ca .ca
- AddLanguage es .es
- AddLanguage sv .sv
- AddLanguage cs .cz .cs
- AddLanguage ru .ru
- AddLanguage zh-TW .zh-tw
- AddCharset Big5 .Big5 .big5
- AddCharset WINDOWS-1251 .cp-1251
- AddCharset CP866 .cp866
- AddCharset ISO-8859-5 .iso-ru
- AddCharset KOI8-R .koi8-r
- AddCharset UCS-2 .ucs2
- AddCharset UCS-4 .ucs4
- AddCharset UTF-8 .utf8
-
- # LanguagePriority allows you to give precedence to some languages
- # in case of a tie during content negotiation.
- #
- # Just list the languages in decreasing order of preference. We have
- # more or less alphabetized them here. You probably want to change this.
- #
- <IfModule negotiation_module>
- LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv tw
- </IfModule>
-
- #
- # AddType allows you to tweak mime.types without actually editing it, or to
- # make certain files to be certain types.
- #
- AddType application/x-tar .tgz
-
- #
- # AddEncoding allows you to have certain browsers uncompress
- # information on the fly. Note: Not all browsers support this.
- # Despite the name similarity, the following Add* directives have nothing
- # to do with the FancyIndexing customization directives above.
- #
- AddEncoding x-compress .Z
- AddEncoding x-gzip .gz .tgz
-
- #
- # AddHandler allows you to map certain file extensions to "handlers",
- # actions unrelated to filetype. These can be either built into the server
- # or added with the Action command (see below)
- #
- # If you want to use server side includes, or CGI outside
- # ScriptAliased directories, uncomment the following lines.
- #
- # To use CGI scripts:
- #
- AddHandler cgi-script .cgi .pl
-
- #
- # To use server-parsed HTML files
- #
- AddType text/html .shtml
- AddHandler server-parsed .shtml
-
- #
- # Uncomment the following line to enable Apache's send-asis HTTP file
- # feature
- #
- AddHandler send-as-is asis
-</IfModule>
-
-
-<IfModule php5_module>
- AddType application/x-httpd-php .php
- AddType application/x-httpd-php-source .phps
-</IfModule>
-
-<IfModule rewrite_module>
- RewriteEngine On
- RewriteCond %{REQUEST_METHOD} ^TRACE
- RewriteRule .* - [F]
-</IfModule>
diff --git a/chromium/tools/python/google/httpd_config/mime.types b/chromium/tools/python/google/httpd_config/mime.types
deleted file mode 100644
index 6735f1b0e15..00000000000
--- a/chromium/tools/python/google/httpd_config/mime.types
+++ /dev/null
@@ -1,599 +0,0 @@
-# This is a comment. I love comments.
-
-# This file controls what Internet media types are sent to the client for
-# given file extension(s). Sending the correct media type to the client
-# is important so they know how to handle the content of the file.
-# Extra types can either be added here or by using an AddType directive
-# in your config files. For more information about Internet media types,
-# please read RFC 2045, 2046, 2047, 2048, and 2077. The Internet media type
-# registry is at <http://www.iana.org/assignments/media-types/>.
-
-# MIME type Extensions
-application/activemessage
-application/andrew-inset ez
-application/applefile
-application/atom+xml atom
-application/atomicmail
-application/batch-smtp
-application/beep+xml
-application/cals-1840
-application/cnrp+xml
-application/commonground
-application/cpl+xml
-application/cybercash
-application/dca-rft
-application/dec-dx
-application/dvcs
-application/edi-consent
-application/edifact
-application/edi-x12
-application/eshop
-application/font-tdpfr
-application/http
-application/hyperstudio
-application/iges
-application/index
-application/index.cmd
-application/index.obj
-application/index.response
-application/index.vnd
-application/iotp
-application/ipp
-application/isup
-application/mac-binhex40 hqx
-application/mac-compactpro cpt
-application/macwriteii
-application/marc
-application/mathematica
-application/mathml+xml mathml
-application/msword doc
-application/news-message-id
-application/news-transmission
-application/ocsp-request
-application/ocsp-response
-application/octet-stream bin dms lha lzh exe class so dll dmg
-application/oda oda
-application/ogg ogg
-application/parityfec
-application/pdf pdf
-application/pgp-encrypted
-application/pgp-keys
-application/pgp-signature
-application/pkcs10
-application/pkcs7-mime
-application/pkcs7-signature
-application/pkix-cert
-application/pkix-crl
-application/pkixcmp
-application/postscript ai eps ps
-application/prs.alvestrand.titrax-sheet
-application/prs.cww
-application/prs.nprend
-application/prs.plucker
-application/qsig
-application/rdf+xml rdf
-application/reginfo+xml
-application/remote-printing
-application/riscos
-application/rtf
-application/sdp
-application/set-payment
-application/set-payment-initiation
-application/set-registration
-application/set-registration-initiation
-application/sgml
-application/sgml-open-catalog
-application/sieve
-application/slate
-application/smil smi smil
-application/srgs gram
-application/srgs+xml grxml
-application/timestamp-query
-application/timestamp-reply
-application/tve-trigger
-application/vemmi
-application/vnd.3gpp.pic-bw-large
-application/vnd.3gpp.pic-bw-small
-application/vnd.3gpp.pic-bw-var
-application/vnd.3gpp.sms
-application/vnd.3m.post-it-notes
-application/vnd.accpac.simply.aso
-application/vnd.accpac.simply.imp
-application/vnd.acucobol
-application/vnd.acucorp
-application/vnd.adobe.xfdf
-application/vnd.aether.imp
-application/vnd.amiga.ami
-application/vnd.anser-web-certificate-issue-initiation
-application/vnd.anser-web-funds-transfer-initiation
-application/vnd.audiograph
-application/vnd.blueice.multipass
-application/vnd.bmi
-application/vnd.businessobjects
-application/vnd.canon-cpdl
-application/vnd.canon-lips
-application/vnd.cinderella
-application/vnd.claymore
-application/vnd.commerce-battelle
-application/vnd.commonspace
-application/vnd.contact.cmsg
-application/vnd.cosmocaller
-application/vnd.criticaltools.wbs+xml
-application/vnd.ctc-posml
-application/vnd.cups-postscript
-application/vnd.cups-raster
-application/vnd.cups-raw
-application/vnd.curl
-application/vnd.cybank
-application/vnd.data-vision.rdz
-application/vnd.dna
-application/vnd.dpgraph
-application/vnd.dreamfactory
-application/vnd.dxr
-application/vnd.ecdis-update
-application/vnd.ecowin.chart
-application/vnd.ecowin.filerequest
-application/vnd.ecowin.fileupdate
-application/vnd.ecowin.series
-application/vnd.ecowin.seriesrequest
-application/vnd.ecowin.seriesupdate
-application/vnd.enliven
-application/vnd.epson.esf
-application/vnd.epson.msf
-application/vnd.epson.quickanime
-application/vnd.epson.salt
-application/vnd.epson.ssf
-application/vnd.ericsson.quickcall
-application/vnd.eudora.data
-application/vnd.fdf
-application/vnd.ffsns
-application/vnd.fints
-application/vnd.flographit
-application/vnd.framemaker
-application/vnd.fsc.weblaunch
-application/vnd.fujitsu.oasys
-application/vnd.fujitsu.oasys2
-application/vnd.fujitsu.oasys3
-application/vnd.fujitsu.oasysgp
-application/vnd.fujitsu.oasysprs
-application/vnd.fujixerox.ddd
-application/vnd.fujixerox.docuworks
-application/vnd.fujixerox.docuworks.binder
-application/vnd.fut-misnet
-application/vnd.grafeq
-application/vnd.groove-account
-application/vnd.groove-help
-application/vnd.groove-identity-message
-application/vnd.groove-injector
-application/vnd.groove-tool-message
-application/vnd.groove-tool-template
-application/vnd.groove-vcard
-application/vnd.hbci
-application/vnd.hhe.lesson-player
-application/vnd.hp-hpgl
-application/vnd.hp-hpid
-application/vnd.hp-hps
-application/vnd.hp-pcl
-application/vnd.hp-pclxl
-application/vnd.httphone
-application/vnd.hzn-3d-crossword
-application/vnd.ibm.afplinedata
-application/vnd.ibm.electronic-media
-application/vnd.ibm.minipay
-application/vnd.ibm.modcap
-application/vnd.ibm.rights-management
-application/vnd.ibm.secure-container
-application/vnd.informix-visionary
-application/vnd.intercon.formnet
-application/vnd.intertrust.digibox
-application/vnd.intertrust.nncp
-application/vnd.intu.qbo
-application/vnd.intu.qfx
-application/vnd.irepository.package+xml
-application/vnd.is-xpr
-application/vnd.japannet-directory-service
-application/vnd.japannet-jpnstore-wakeup
-application/vnd.japannet-payment-wakeup
-application/vnd.japannet-registration
-application/vnd.japannet-registration-wakeup
-application/vnd.japannet-setstore-wakeup
-application/vnd.japannet-verification
-application/vnd.japannet-verification-wakeup
-application/vnd.jisp
-application/vnd.kde.karbon
-application/vnd.kde.kchart
-application/vnd.kde.kformula
-application/vnd.kde.kivio
-application/vnd.kde.kontour
-application/vnd.kde.kpresenter
-application/vnd.kde.kspread
-application/vnd.kde.kword
-application/vnd.kenameaapp
-application/vnd.koan
-application/vnd.liberty-request+xml
-application/vnd.llamagraphics.life-balance.desktop
-application/vnd.llamagraphics.life-balance.exchange+xml
-application/vnd.lotus-1-2-3
-application/vnd.lotus-approach
-application/vnd.lotus-freelance
-application/vnd.lotus-notes
-application/vnd.lotus-organizer
-application/vnd.lotus-screencam
-application/vnd.lotus-wordpro
-application/vnd.mcd
-application/vnd.mediastation.cdkey
-application/vnd.meridian-slingshot
-application/vnd.micrografx.flo
-application/vnd.micrografx.igx
-application/vnd.mif mif
-application/vnd.minisoft-hp3000-save
-application/vnd.mitsubishi.misty-guard.trustweb
-application/vnd.mobius.daf
-application/vnd.mobius.dis
-application/vnd.mobius.mbk
-application/vnd.mobius.mqy
-application/vnd.mobius.msl
-application/vnd.mobius.plc
-application/vnd.mobius.txf
-application/vnd.mophun.application
-application/vnd.mophun.certificate
-application/vnd.motorola.flexsuite
-application/vnd.motorola.flexsuite.adsi
-application/vnd.motorola.flexsuite.fis
-application/vnd.motorola.flexsuite.gotap
-application/vnd.motorola.flexsuite.kmr
-application/vnd.motorola.flexsuite.ttc
-application/vnd.motorola.flexsuite.wem
-application/vnd.mozilla.xul+xml xul
-application/vnd.ms-artgalry
-application/vnd.ms-asf
-application/vnd.ms-excel xls
-application/vnd.ms-lrm
-application/vnd.ms-powerpoint ppt
-application/vnd.ms-project
-application/vnd.ms-tnef
-application/vnd.ms-works
-application/vnd.ms-wpl
-application/vnd.mseq
-application/vnd.msign
-application/vnd.music-niff
-application/vnd.musician
-application/vnd.netfpx
-application/vnd.noblenet-directory
-application/vnd.noblenet-sealer
-application/vnd.noblenet-web
-application/vnd.novadigm.edm
-application/vnd.novadigm.edx
-application/vnd.novadigm.ext
-application/vnd.obn
-application/vnd.osa.netdeploy
-application/vnd.palm
-application/vnd.pg.format
-application/vnd.pg.osasli
-application/vnd.powerbuilder6
-application/vnd.powerbuilder6-s
-application/vnd.powerbuilder7
-application/vnd.powerbuilder7-s
-application/vnd.powerbuilder75
-application/vnd.powerbuilder75-s
-application/vnd.previewsystems.box
-application/vnd.publishare-delta-tree
-application/vnd.pvi.ptid1
-application/vnd.pwg-multiplexed
-application/vnd.pwg-xhtml-print+xml
-application/vnd.quark.quarkxpress
-application/vnd.rapid
-application/vnd.rn-realmedia rm
-application/vnd.s3sms
-application/vnd.sealed.net
-application/vnd.seemail
-application/vnd.shana.informed.formdata
-application/vnd.shana.informed.formtemplate
-application/vnd.shana.informed.interchange
-application/vnd.shana.informed.package
-application/vnd.smaf
-application/vnd.sss-cod
-application/vnd.sss-dtf
-application/vnd.sss-ntf
-application/vnd.street-stream
-application/vnd.svd
-application/vnd.swiftview-ics
-application/vnd.triscape.mxs
-application/vnd.trueapp
-application/vnd.truedoc
-application/vnd.ufdl
-application/vnd.uplanet.alert
-application/vnd.uplanet.alert-wbxml
-application/vnd.uplanet.bearer-choice
-application/vnd.uplanet.bearer-choice-wbxml
-application/vnd.uplanet.cacheop
-application/vnd.uplanet.cacheop-wbxml
-application/vnd.uplanet.channel
-application/vnd.uplanet.channel-wbxml
-application/vnd.uplanet.list
-application/vnd.uplanet.list-wbxml
-application/vnd.uplanet.listcmd
-application/vnd.uplanet.listcmd-wbxml
-application/vnd.uplanet.signal
-application/vnd.vcx
-application/vnd.vectorworks
-application/vnd.vidsoft.vidconference
-application/vnd.visio
-application/vnd.visionary
-application/vnd.vividence.scriptfile
-application/vnd.vsf
-application/vnd.wap.sic
-application/vnd.wap.slc
-application/vnd.wap.wbxml wbxml
-application/vnd.wap.wmlc wmlc
-application/vnd.wap.wmlscriptc wmlsc
-application/vnd.webturbo
-application/vnd.wrq-hp3000-labelled
-application/vnd.wt.stf
-application/vnd.wv.csp+wbxml
-application/vnd.xara
-application/vnd.xfdl
-application/vnd.yamaha.hv-dic
-application/vnd.yamaha.hv-script
-application/vnd.yamaha.hv-voice
-application/vnd.yellowriver-custom-menu
-application/voicexml+xml vxml
-application/watcherinfo+xml
-application/whoispp-query
-application/whoispp-response
-application/wita
-application/wordperfect5.1
-application/x-bcpio bcpio
-application/x-cdlink vcd
-application/x-chess-pgn pgn
-application/x-compress
-application/x-cpio cpio
-application/x-csh csh
-application/x-director dcr dir dxr
-application/x-dvi dvi
-application/x-futuresplash spl
-application/x-gtar gtar
-application/x-gzip
-application/x-hdf hdf
-application/x-javascript js
-application/x-java-jnlp-file jnlp
-application/x-koan skp skd skt skm
-application/x-latex latex
-application/x-netcdf nc cdf
-application/x-sh sh
-application/x-shar shar
-application/x-shockwave-flash swf
-application/x-stuffit sit
-application/x-sv4cpio sv4cpio
-application/x-sv4crc sv4crc
-application/x-tar tar
-application/x-tcl tcl
-application/x-tex tex
-application/x-texinfo texinfo texi
-application/x-troff t tr roff
-application/x-troff-man man
-application/x-troff-me me
-application/x-troff-ms ms
-application/x-ustar ustar
-application/x-wais-source src
-application/x400-bp
-application/xhtml+xml xhtml xht
-application/xslt+xml xslt
-application/xml xml xsl
-application/xml-dtd dtd
-application/xml-external-parsed-entity
-application/zip zip
-audio/32kadpcm
-audio/amr
-audio/amr-wb
-audio/basic au snd
-audio/cn
-audio/dat12
-audio/dsr-es201108
-audio/dvi4
-audio/evrc
-audio/evrc0
-audio/g722
-audio/g.722.1
-audio/g723
-audio/g726-16
-audio/g726-24
-audio/g726-32
-audio/g726-40
-audio/g728
-audio/g729
-audio/g729D
-audio/g729E
-audio/gsm
-audio/gsm-efr
-audio/l8
-audio/l16
-audio/l20
-audio/l24
-audio/lpc
-audio/midi mid midi kar
-audio/mpa
-audio/mpa-robust
-audio/mp4a-latm m4a m4p
-audio/mpeg mpga mp2 mp3
-audio/parityfec
-audio/pcma
-audio/pcmu
-audio/prs.sid
-audio/qcelp
-audio/red
-audio/smv
-audio/smv0
-audio/telephone-event
-audio/tone
-audio/vdvi
-audio/vnd.3gpp.iufp
-audio/vnd.cisco.nse
-audio/vnd.cns.anp1
-audio/vnd.cns.inf1
-audio/vnd.digital-winds
-audio/vnd.everad.plj
-audio/vnd.lucent.voice
-audio/vnd.nortel.vbk
-audio/vnd.nuera.ecelp4800
-audio/vnd.nuera.ecelp7470
-audio/vnd.nuera.ecelp9600
-audio/vnd.octel.sbc
-audio/vnd.qcelp
-audio/vnd.rhetorex.32kadpcm
-audio/vnd.vmx.cvsd
-audio/x-aiff aif aiff aifc
-audio/x-alaw-basic
-audio/x-mpegurl m3u
-audio/x-pn-realaudio ram ra
-audio/x-pn-realaudio-plugin
-audio/x-wav wav
-chemical/x-pdb pdb
-chemical/x-xyz xyz
-image/bmp bmp
-image/cgm cgm
-image/g3fax
-image/gif gif
-image/ief ief
-image/jpeg jpeg jpg jpe
-image/jp2 jp2
-image/naplps
-image/pict pict pic pct
-image/png png
-image/prs.btif
-image/prs.pti
-image/svg+xml svg
-image/t38
-image/tiff tiff tif
-image/tiff-fx
-image/vnd.cns.inf2
-image/vnd.djvu djvu djv
-image/vnd.dwg
-image/vnd.dxf
-image/vnd.fastbidsheet
-image/vnd.fpx
-image/vnd.fst
-image/vnd.fujixerox.edmics-mmr
-image/vnd.fujixerox.edmics-rlc
-image/vnd.globalgraphics.pgb
-image/vnd.mix
-image/vnd.ms-modi
-image/vnd.net-fpx
-image/vnd.svf
-image/vnd.wap.wbmp wbmp
-image/vnd.xiff
-image/x-cmu-raster ras
-image/x-macpaint pntg pnt mac
-image/x-icon ico
-image/x-portable-anymap pnm
-image/x-portable-bitmap pbm
-image/x-portable-graymap pgm
-image/x-portable-pixmap ppm
-image/x-quicktime qtif qti
-image/x-rgb rgb
-image/x-xbitmap xbm
-image/x-xpixmap xpm
-image/x-xwindowdump xwd
-message/delivery-status
-message/disposition-notification
-message/external-body
-message/http
-message/news
-message/partial
-message/rfc822
-message/s-http
-message/sip
-message/sipfrag
-model/iges igs iges
-model/mesh msh mesh silo
-model/vnd.dwf
-model/vnd.flatland.3dml
-model/vnd.gdl
-model/vnd.gs-gdl
-model/vnd.gtw
-model/vnd.mts
-model/vnd.parasolid.transmit.binary
-model/vnd.parasolid.transmit.text
-model/vnd.vtu
-model/vrml wrl vrml
-multipart/alternative
-multipart/appledouble
-multipart/byteranges
-multipart/digest
-multipart/encrypted
-multipart/form-data
-multipart/header-set
-multipart/mixed
-multipart/parallel
-multipart/related
-multipart/report
-multipart/signed
-multipart/voice-message
-text/calendar ics ifb
-text/css css
-text/directory
-text/enriched
-text/html html htm
-text/parityfec
-text/plain asc txt
-text/prs.lines.tag
-text/rfc822-headers
-text/richtext rtx
-text/rtf rtf
-text/sgml sgml sgm
-text/t140
-text/tab-separated-values tsv
-text/uri-list
-text/vnd.abc
-text/vnd.curl
-text/vnd.dmclientscript
-text/vnd.fly
-text/vnd.fmi.flexstor
-text/vnd.in3d.3dml
-text/vnd.in3d.spot
-text/vnd.iptc.nitf
-text/vnd.iptc.newsml
-text/vnd.latex-z
-text/vnd.motorola.reflex
-text/vnd.ms-mediapackage
-text/vnd.net2phone.commcenter.command
-text/vnd.sun.j2me.app-descriptor
-text/vnd.wap.si
-text/vnd.wap.sl
-text/vnd.wap.wml wml
-text/vnd.wap.wmlscript wmls
-text/x-setext etx
-text/xml
-text/xml-external-parsed-entity
-video/bmpeg
-video/bt656
-video/celb
-video/dv
-video/h261
-video/h263
-video/h263-1998
-video/h263-2000
-video/jpeg
-video/mp1s
-video/mp2p
-video/mp2t
-video/mp4 mp4
-video/mp4v-es
-video/mpv
-video/mpeg mpeg mpg mpe
-video/nv
-video/parityfec
-video/pointer
-video/quicktime qt mov
-video/smpte292m
-video/vnd.fvt
-video/vnd.motorola.video
-video/vnd.motorola.videop
-video/vnd.mpegurl mxu m4u
-video/vnd.nokia.interleaved-multimedia
-video/vnd.objectvideo
-video/vnd.vivo
-video/x-dv dv dif
-video/x-msvideo avi
-video/x-sgi-movie movie
-x-conference/x-cooltalk ice
diff --git a/chromium/tools/python/google/httpd_config/root_ca_cert.pem b/chromium/tools/python/google/httpd_config/root_ca_cert.pem
deleted file mode 100644
index 0e58f2ab5a9..00000000000
--- a/chromium/tools/python/google/httpd_config/root_ca_cert.pem
+++ /dev/null
@@ -1,102 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEAq6OEFgWu9ICFgaeoWfq7Dl57BNzERHpBBTedRaFr3uj+D4nT
-OXjraAFPFcBLE6RMJZXtpLvZrfdUDPEzTtcliLAoXmQB8DN8TTvYXEgEr3dSb+qZ
-sAfmbbtjnjOtGJQwlkb0QdZp4+5V3vrD1DbT0XGHKDu4/Estvzzi+4zo+plEDL1d
-y+Op9g09HOu2gB6+pVG1YAR3ckeWFw2ORO76xF+rMRbcaJqfmnmUBLkPFN/Bmvo3
-q39wuIDdSCXtvUNnAcEynXah/sFk2AB3c9E/IYaScuiRNkWEi7cUXrAyXKPtMNo2
-RdvfVUEYz/42N+270wkf1taR0thfcwJS06oNIwIDAQABAoIBAQCml41KurV3h48N
-qydSPnR0m+uXapftRyP45mP2A5lpwIdnmYS00dLbHfoeyIeWRu/Jw13neJTtr5Ob
-BDmimlxJ8YEdLMBc3fwWErILz7MMhCo1imUlYGWduDYWhV3K73rBQZkulegtXVVn
-mcmdHqI1NZXTzTPdXTLH3VcKhVhUcftA+foSmY5Sr2EgWL34lkF0ciWSbYf4dIAc
-RS+DikEpAM552hPu9+oo0+5aheH9ijuF4SCRZcvToC2YaTUR5OG4j31oGtDMXmeu
-5alBhaUZqS3b8FX8Q2GbqJ4sR+2XrgovrVteOGN0QvoExZeZIdt6ArqArKGQ/hQf
-gPITpX7RAoGBANp/9E3a+CB9fculDW/Vdpo2jVMLFmlMzWCxA5V0BwIgx4yCKgK7
-Zx1gsO+vaOKu1uLfAj5wWd1qNRbAAvL0CpSkEqfteHInyyN6muSWuDEELCIYU/0u
-IdhPH7yU/SYKsZK3qnOZBwSJMI0iJAKXO0qVYepTtN3MXzhIWkaPqoj9AoGBAMkY
-qjS/QDmyIukeUrhpEn6F2nh6/Upek0+xFUP/0SIeaCAfFiJ9+mFLSDLQ0Rvsq5G6
-glfMFaQz/+610+6YZ5ioEPUlVMAx0qNZRS8Gy97MDoe9Z+PmbKdvbZXLTP6nhpGy
-9Nhilog+U8MZCwiklDEKyldQBg/TghMsqhYEyFifAoGBAIGJ9obp2M06WQgQ1ISG
-44fN679eBW1sUR6QE3XZkgYa9PNCgDGadSmfl4aiUeaCjXd3i1cFOOHiA5N3RshP
-Eq7JDx5r1UqoePCR0Z7QFGdK9/dGwRSK8xnQ3xnooqSZFmnLZcye3uA7jYM+yGaY
-zlgLdD9+XO5aKeGuU4cdyZbpAoGAIm8cxgdxoe+E1tIga/9h8VROQo8czB1BsEWs
-VIZ7cxIt1kI8cg+MThir9jeXduahwkRjiVEi64kT6/YqohJqutMchD2uM3LUlK/2
-jsTlJ/NdEZU3MukD9e+4ngu/1WMuQciY8GyBRjcV9LRXFVXJIlSsrSLAxvj6rvnY
-7ghHnhUCgYBiKCwWTxuoh450TwZMv8X3/6+88w6CieUa0EvdVDcmSQ1cnlAw/7Uh
-inzU7HizHG2tq8Rg5HjaXTnkNhacT9tg2WELSH8Cay3287CmIhdkvZMJIPRhMMCW
-NUQMCtufqhgyX4Qn0W1dbhBzyuyfsj1Ec3BrUp1aPHr0QRm4HdsAIA==
------END RSA PRIVATE KEY-----
-
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 12573969073242583322 (0xae7fb6409b5f311a)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: CN=Test Root CA
- Validity
- Not Before: Jun 18 19:52:02 2013 GMT
- Not After : Jun 16 19:52:02 2023 GMT
- Subject: CN=Test Root CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- Public-Key: (2048 bit)
- Modulus:
- 00:ab:a3:84:16:05:ae:f4:80:85:81:a7:a8:59:fa:
- bb:0e:5e:7b:04:dc:c4:44:7a:41:05:37:9d:45:a1:
- 6b:de:e8:fe:0f:89:d3:39:78:eb:68:01:4f:15:c0:
- 4b:13:a4:4c:25:95:ed:a4:bb:d9:ad:f7:54:0c:f1:
- 33:4e:d7:25:88:b0:28:5e:64:01:f0:33:7c:4d:3b:
- d8:5c:48:04:af:77:52:6f:ea:99:b0:07:e6:6d:bb:
- 63:9e:33:ad:18:94:30:96:46:f4:41:d6:69:e3:ee:
- 55:de:fa:c3:d4:36:d3:d1:71:87:28:3b:b8:fc:4b:
- 2d:bf:3c:e2:fb:8c:e8:fa:99:44:0c:bd:5d:cb:e3:
- a9:f6:0d:3d:1c:eb:b6:80:1e:be:a5:51:b5:60:04:
- 77:72:47:96:17:0d:8e:44:ee:fa:c4:5f:ab:31:16:
- dc:68:9a:9f:9a:79:94:04:b9:0f:14:df:c1:9a:fa:
- 37:ab:7f:70:b8:80:dd:48:25:ed:bd:43:67:01:c1:
- 32:9d:76:a1:fe:c1:64:d8:00:77:73:d1:3f:21:86:
- 92:72:e8:91:36:45:84:8b:b7:14:5e:b0:32:5c:a3:
- ed:30:da:36:45:db:df:55:41:18:cf:fe:36:37:ed:
- bb:d3:09:1f:d6:d6:91:d2:d8:5f:73:02:52:d3:aa:
- 0d:23
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 2B:88:93:E1:D2:54:50:F4:B8:A4:20:BD:B1:79:E6:0B:AA:EB:EC:1A
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- Signature Algorithm: sha1WithRSAEncryption
- a8:58:42:e4:7c:b1:46:11:ee:56:b7:09:08:fb:06:44:f0:a9:
- 60:03:f0:05:23:09:3c:36:d6:28:1b:e5:d6:61:15:a0:6f:de:
- 69:ac:28:58:05:f1:ce:9b:61:c2:58:b0:5d:ed:6c:75:44:e2:
- 68:01:91:59:b1:4f:f3:51:f2:23:f6:47:42:41:57:26:4f:87:
- 1e:d2:9f:94:3a:e2:d0:4e:6f:02:d2:92:76:2c:0a:dd:58:93:
- e1:47:b9:02:a3:3d:75:b4:ba:24:70:87:32:87:cf:76:4e:a0:
- 41:8b:86:42:18:55:ed:a5:ae:5d:6a:3a:8c:28:70:4c:f1:c5:
- 36:6c:ec:01:a9:d6:51:39:32:31:30:24:82:9f:88:d9:f5:c1:
- 09:6b:5a:6b:f1:95:d3:9d:3f:e0:42:63:fc:b7:32:90:55:56:
- f2:76:1b:71:38:bd:bd:fb:3b:23:50:46:4c:2c:4e:49:48:52:
- ea:05:5f:16:f2:98:51:af:2f:79:36:2a:a0:ba:36:68:1b:29:
- 8b:7b:e8:8c:ea:73:31:e5:86:d7:2c:d8:56:06:43:d7:72:d2:
- f0:27:4e:64:0a:2b:27:38:36:cd:be:c1:33:db:74:4b:4e:74:
- be:21:bd:f6:81:66:d2:fd:2b:7f:f4:55:36:c0:ed:a7:44:ca:
- b1:78:1d:0f
------BEGIN CERTIFICATE-----
-MIIC8zCCAdugAwIBAgIJAK5/tkCbXzEaMA0GCSqGSIb3DQEBBQUAMBcxFTATBgNV
-BAMMDFRlc3QgUm9vdCBDQTAeFw0xMzA2MTgxOTUyMDJaFw0yMzA2MTYxOTUyMDJa
-MBcxFTATBgNVBAMMDFRlc3QgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAKujhBYFrvSAhYGnqFn6uw5eewTcxER6QQU3nUWha97o/g+J0zl4
-62gBTxXASxOkTCWV7aS72a33VAzxM07XJYiwKF5kAfAzfE072FxIBK93Um/qmbAH
-5m27Y54zrRiUMJZG9EHWaePuVd76w9Q209Fxhyg7uPxLLb884vuM6PqZRAy9Xcvj
-qfYNPRzrtoAevqVRtWAEd3JHlhcNjkTu+sRfqzEW3Gian5p5lAS5DxTfwZr6N6t/
-cLiA3Ugl7b1DZwHBMp12of7BZNgAd3PRPyGGknLokTZFhIu3FF6wMlyj7TDaNkXb
-31VBGM/+Njftu9MJH9bWkdLYX3MCUtOqDSMCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUK4iT4dJUUPS4pCC9sXnmC6rr7BowDgYDVR0PAQH/BAQD
-AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCoWELkfLFGEe5WtwkI+wZE8KlgA/AFIwk8
-NtYoG+XWYRWgb95prChYBfHOm2HCWLBd7Wx1ROJoAZFZsU/zUfIj9kdCQVcmT4ce
-0p+UOuLQTm8C0pJ2LArdWJPhR7kCoz11tLokcIcyh892TqBBi4ZCGFXtpa5dajqM
-KHBM8cU2bOwBqdZROTIxMCSCn4jZ9cEJa1pr8ZXTnT/gQmP8tzKQVVbydhtxOL29
-+zsjUEZMLE5JSFLqBV8W8phRry95NiqgujZoGymLe+iM6nMx5YbXLNhWBkPXctLw
-J05kCisnODbNvsEz23RLTnS+Ib32gWbS/St/9FU2wO2nRMqxeB0P
------END CERTIFICATE-----
diff --git a/chromium/tools/python/google/httpd_utils.py b/chromium/tools/python/google/httpd_utils.py
deleted file mode 100755
index 4a03ffc7fb0..00000000000
--- a/chromium/tools/python/google/httpd_utils.py
+++ /dev/null
@@ -1,200 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""A class to help start/stop a local apache http server."""
-
-import logging
-import optparse
-import os
-import subprocess
-import sys
-import time
-import urllib
-
-import google.path_utils
-import google.platform_utils
-
-class HttpdNotStarted(Exception): pass
-
-def UrlIsAlive(url):
- """Checks to see if we get an http response from |url|.
- We poll the url 5 times with a 1 second delay. If we don't
- get a reply in that time, we give up and assume the httpd
- didn't start properly.
-
- Args:
- url: The URL to check.
- Return:
- True if the url is alive.
- """
- wait_time = 5
- while wait_time > 0:
- try:
- response = urllib.urlopen(url)
- # Server is up and responding.
- return True
- except IOError:
- pass
- wait_time -= 1
- # Wait a second and try again.
- time.sleep(1)
-
- return False
-
-def ApacheConfigDir(start_dir):
- """Returns a path to the directory holding the Apache config files."""
- return google.path_utils.FindUpward(start_dir, 'tools', 'python',
- 'google', 'httpd_config')
-
-
-def GetCygserverPath(start_dir, apache2=False):
- """Returns the path to the directory holding cygserver.exe file."""
- cygserver_path = None
- if apache2:
- cygserver_path = google.path_utils.FindUpward(start_dir, 'third_party',
- 'cygwin', 'usr', 'sbin')
- return cygserver_path
-
-
-def StartServer(document_root=None, output_dir=None, apache2=False):
- """Starts a local server on port 8000 using the basic configuration files.
-
- Args:
- document_root: If present, specifies the document root for the server;
- otherwise, the filesystem's root (e.g., C:/ or /) will be used.
- output_dir: If present, specifies where to put server logs; otherwise,
- they'll be placed in the system's temp dir (e.g., $TEMP or /tmp).
- apache2: boolean if true will cause this function to configure
- for Apache 2.x as opposed to Apache 1.3.x
-
- Returns: the ApacheHttpd object that was created
- """
- script_dir = google.path_utils.ScriptDir()
- platform_util = google.platform_utils.PlatformUtility(script_dir)
- if not output_dir:
- output_dir = platform_util.GetTempDirectory()
- if not document_root:
- document_root = platform_util.GetFilesystemRoot()
- apache_config_dir = ApacheConfigDir(script_dir)
- if apache2:
- httpd_conf_path = os.path.join(apache_config_dir, 'httpd2.conf')
- else:
- httpd_conf_path = os.path.join(apache_config_dir, 'httpd.conf')
- mime_types_path = os.path.join(apache_config_dir, 'mime.types')
- start_cmd = platform_util.GetStartHttpdCommand(output_dir,
- httpd_conf_path,
- mime_types_path,
- document_root,
- apache2=apache2)
- stop_cmd = platform_util.GetStopHttpdCommand()
- httpd = ApacheHttpd(start_cmd, stop_cmd, [8000],
- cygserver_path=GetCygserverPath(script_dir, apache2))
- httpd.StartServer()
- return httpd
-
-
-def StopServers(apache2=False):
- """Calls the platform's stop command on a newly created server, forcing it
- to stop.
-
- The details depend on the behavior of the platform stop command. For example,
- it's often implemented to kill all running httpd processes, as implied by
- the name of this function.
-
- Args:
- apache2: boolean if true will cause this function to configure
- for Apache 2.x as opposed to Apache 1.3.x
- """
- script_dir = google.path_utils.ScriptDir()
- platform_util = google.platform_utils.PlatformUtility(script_dir)
- httpd = ApacheHttpd('', platform_util.GetStopHttpdCommand(), [],
- cygserver_path=GetCygserverPath(script_dir, apache2))
- httpd.StopServer(force=True)
-
-
-class ApacheHttpd(object):
- def __init__(self, start_command, stop_command, port_list,
- cygserver_path=None):
- """Args:
- start_command: command list to call to start the httpd
- stop_command: command list to call to stop the httpd if one has been
- started. May kill all httpd processes running on the machine.
- port_list: list of ports expected to respond on the local machine when
- the server has been successfully started.
- cygserver_path: Path to cygserver.exe. If specified, exe will be started
- with server as well as stopped when server is stopped.
- """
- self._http_server_proc = None
- self._start_command = start_command
- self._stop_command = stop_command
- self._port_list = port_list
- self._cygserver_path = cygserver_path
-
- def StartServer(self):
- if self._http_server_proc:
- return
- if self._cygserver_path:
- cygserver_exe = os.path.join(self._cygserver_path, "cygserver.exe")
- cygbin = google.path_utils.FindUpward(cygserver_exe, 'third_party',
- 'cygwin', 'bin')
- env = os.environ
- env['PATH'] += ";" + cygbin
- subprocess.Popen(cygserver_exe, env=env)
- logging.info('Starting http server')
- self._http_server_proc = subprocess.Popen(self._start_command)
-
- # Ensure that the server is running on all the desired ports.
- for port in self._port_list:
- if not UrlIsAlive('http://127.0.0.1:%s/' % str(port)):
- raise HttpdNotStarted('Failed to start httpd on port %s' % str(port))
-
- def StopServer(self, force=False):
- """If we started an httpd.exe process, or if force is True, call
- self._stop_command (passed in on init so it can be platform-dependent).
- This will presumably kill it, and may also kill any other httpd.exe
- processes that are running.
- """
- if force or self._http_server_proc:
- logging.info('Stopping http server')
- kill_proc = subprocess.Popen(self._stop_command,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- logging.info('%s\n%s' % (kill_proc.stdout.read(),
- kill_proc.stderr.read()))
- self._http_server_proc = None
- if self._cygserver_path:
- subprocess.Popen(["taskkill.exe", "/f", "/im", "cygserver.exe"],
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
-
-
-def main():
- # Provide some command line params for starting/stopping the http server
- # manually.
- option_parser = optparse.OptionParser()
- option_parser.add_option('-k', '--server', help='Server action (start|stop)')
- option_parser.add_option('-r', '--root', help='Document root (optional)')
- option_parser.add_option('-a', '--apache2', action='store_true',
- default=False, help='Starts Apache 2 instead of Apache 1.3 (default). '
- 'Ignored on Mac (apache2 is used always)')
- options, args = option_parser.parse_args()
-
- if not options.server:
- print ("Usage: %s -k {start|stop} [-r document_root] [--apache2]" %
- sys.argv[0])
- return 1
-
- document_root = None
- if options.root:
- document_root = options.root
-
- if 'start' == options.server:
- StartServer(document_root, apache2=options.apache2)
- else:
- StopServers(apache2=options.apache2)
-
-
-if '__main__' == __name__:
- sys.exit(main())
diff --git a/chromium/tools/python/google/logging_utils.py b/chromium/tools/python/google/logging_utils.py
deleted file mode 100644
index ef2d674950f..00000000000
--- a/chromium/tools/python/google/logging_utils.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# Copyright (c) 2011 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.
-
-''' Utility functions and objects for logging.
-'''
-
-import logging
-import sys
-
-class StdoutStderrHandler(logging.Handler):
- ''' Subclass of logging.Handler which outputs to either stdout or stderr
- based on a threshold level.
- '''
-
- def __init__(self, threshold=logging.WARNING, err=sys.stderr, out=sys.stdout):
- ''' Args:
- threshold: below this logging level messages are sent to stdout,
- otherwise they are sent to stderr
- err: a stream object that error messages are sent to, defaults to
- sys.stderr
- out: a stream object that non-error messages are sent to, defaults to
- sys.stdout
- '''
- logging.Handler.__init__(self)
- self._err = logging.StreamHandler(err)
- self._out = logging.StreamHandler(out)
- self._threshold = threshold
- self._last_was_err = False
-
- def setLevel(self, lvl):
- logging.Handler.setLevel(self, lvl)
- self._err.setLevel(lvl)
- self._out.setLevel(lvl)
-
- def setFormatter(self, formatter):
- logging.Handler.setFormatter(self, formatter)
- self._err.setFormatter(formatter)
- self._out.setFormatter(formatter)
-
- def emit(self, record):
- if record.levelno < self._threshold:
- self._out.emit(record)
- self._last_was_err = False
- else:
- self._err.emit(record)
- self._last_was_err = False
-
- def flush(self):
- # preserve order on the flushing, the stalest stream gets flushed first
- if self._last_was_err:
- self._out.flush()
- self._err.flush()
- else:
- self._err.flush()
- self._out.flush()
-
-
-FORMAT = "%(asctime)s %(filename)s [%(levelname)s] %(message)s"
-DATEFMT = "%H:%M:%S"
-
-def config_root(level=logging.INFO, threshold=logging.WARNING, format=FORMAT,
- datefmt=DATEFMT):
- ''' Configure the root logger to use a StdoutStderrHandler and some default
- formatting.
- Args:
- level: messages below this level are ignored
- threshold: below this logging level messages are sent to stdout,
- otherwise they are sent to stderr
- format: format for log messages, see logger.Format
- datefmt: format for date in log messages
-
- '''
- # to set the handler of the root logging object, we need to do setup
- # manually rather than using basicConfig
- root = logging.getLogger()
- root.setLevel(level)
- formatter = logging.Formatter(format, datefmt)
- handler = StdoutStderrHandler(threshold=threshold)
- handler.setLevel(level)
- handler.setFormatter(formatter)
- root.addHandler(handler)
diff --git a/chromium/tools/python/google/path_utils.py b/chromium/tools/python/google/path_utils.py
deleted file mode 100644
index 6ab43120434..00000000000
--- a/chromium/tools/python/google/path_utils.py
+++ /dev/null
@@ -1,84 +0,0 @@
-# Copyright (c) 2011 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.
-
-"""Some utility methods for getting and manipulating paths."""
-
-# TODO(pamg): Have the buildbot use these, too.
-
-
-import errno
-import os
-import sys
-
-class PathNotFound(Exception): pass
-
-def ScriptDir():
- """Get the full path to the directory containing the current script."""
- script_filename = os.path.abspath(sys.argv[0])
- return os.path.dirname(script_filename)
-
-def FindAncestor(start_dir, ancestor):
- """Finds an ancestor dir in a path.
-
- For example, FindAncestor('c:\foo\bar\baz', 'bar') would return
- 'c:\foo\bar'. Unlike FindUpward*, this only looks at direct path ancestors.
- """
- start_dir = os.path.abspath(start_dir)
- path = start_dir
- while True:
- (parent, tail) = os.path.split(path)
- if tail == ancestor:
- return path
- if not tail:
- break
- path = parent
- raise PathNotFound("Unable to find ancestor %s in %s" % (ancestor, start_dir))
-
-def FindUpwardParent(start_dir, *desired_list):
- """Finds the desired object's parent, searching upward from the start_dir.
-
- Searches start_dir and all its parents looking for the desired directory
- or file, which may be given in one or more path components. Returns the
- first directory in which the top desired path component was found, or raises
- PathNotFound if it wasn't.
- """
- desired_path = os.path.join(*desired_list)
- last_dir = ''
- cur_dir = start_dir
- found_path = os.path.join(cur_dir, desired_path)
- while not os.path.exists(found_path):
- last_dir = cur_dir
- cur_dir = os.path.dirname(cur_dir)
- if last_dir == cur_dir:
- raise PathNotFound('Unable to find %s above %s' %
- (desired_path, start_dir))
- found_path = os.path.join(cur_dir, desired_path)
- # Strip the entire original desired path from the end of the one found
- # and remove a trailing path separator, if present.
- found_path = found_path[:len(found_path) - len(desired_path)]
- if found_path.endswith(os.sep):
- found_path = found_path[:len(found_path) - 1]
- return found_path
-
-
-def FindUpward(start_dir, *desired_list):
- """Returns a path to the desired directory or file, searching upward.
-
- Searches start_dir and all its parents looking for the desired directory
- or file, which may be given in one or more path components. Returns the full
- path to the desired object, or raises PathNotFound if it wasn't found.
- """
- parent = FindUpwardParent(start_dir, *desired_list)
- return os.path.join(parent, *desired_list)
-
-
-def MaybeMakeDirectory(*path):
- """Creates an entire path, if it doesn't already exist."""
- file_path = os.path.join(*path)
- try:
- os.makedirs(file_path)
- except OSError, e:
- # errno.EEXIST is "File exists". If we see another error, re-raise.
- if e.errno != errno.EEXIST:
- raise
diff --git a/chromium/tools/python/google/platform_utils.py b/chromium/tools/python/google/platform_utils.py
deleted file mode 100644
index 50bfb70cc08..00000000000
--- a/chromium/tools/python/google/platform_utils.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (c) 2011 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.
-
-"""Platform-specific utilities and pseudo-constants
-
-Any functions whose implementations or values differ from one platform to
-another should be defined in their respective platform_utils_<platform>.py
-modules. The appropriate one of those will be imported into this module to
-provide callers with a common, platform-independent interface.
-"""
-
-import sys
-
-# We may not support the version of Python that a user has installed (Cygwin
-# especially has had problems), but we'll allow the platform utils to be
-# included in any case so we don't get an import error.
-if sys.platform in ('cygwin', 'win32'):
- from platform_utils_win import *
-elif sys.platform == 'darwin':
- from platform_utils_mac import *
-elif sys.platform.startswith('linux'):
- from platform_utils_linux import *
diff --git a/chromium/tools/python/google/platform_utils_linux.py b/chromium/tools/python/google/platform_utils_linux.py
deleted file mode 100644
index 237565e3da8..00000000000
--- a/chromium/tools/python/google/platform_utils_linux.py
+++ /dev/null
@@ -1,148 +0,0 @@
-# Copyright (c) 2011 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.
-
-"""Platform-specific utility methods shared by several scripts."""
-
-import os
-import subprocess
-
-import google.path_utils
-
-
-class PlatformUtility(object):
- def __init__(self, base_dir):
- """Args:
- base_dir: the base dir for running tests.
- """
- self._base_dir = base_dir
- self._httpd_cmd_string = None # used for starting/stopping httpd
- self._bash = "/bin/bash"
-
- def _UnixRoot(self):
- """Returns the path to root."""
- return "/"
-
- def GetFilesystemRoot(self):
- """Returns the root directory of the file system."""
- return self._UnixRoot()
-
- def GetTempDirectory(self):
- """Returns the file system temp directory
-
- Note that this does not use a random subdirectory, so it's not
- intrinsically secure. If you need a secure subdir, use the tempfile
- package.
- """
- return os.getenv("TMPDIR", "/tmp")
-
- def FilenameToUri(self, path, use_http=False, use_ssl=False, port=8000):
- """Convert a filesystem path to a URI.
-
- Args:
- path: For an http URI, the path relative to the httpd server's
- DocumentRoot; for a file URI, the full path to the file.
- use_http: if True, returns a URI of the form http://127.0.0.1:8000/.
- If False, returns a file:/// URI.
- use_ssl: if True, returns HTTPS URL (https://127.0.0.1:8000/).
- This parameter is ignored if use_http=False.
- port: The port number to append when returning an HTTP URI
- """
- if use_http:
- protocol = 'http'
- if use_ssl:
- protocol = 'https'
- return "%s://127.0.0.1:%d/%s" % (protocol, port, path)
- return "file://" + path
-
- def GetStartHttpdCommand(self, output_dir,
- httpd_conf_path, mime_types_path,
- document_root=None, apache2=False):
- """Prepares the config file and output directory to start an httpd server.
- Returns a list of strings containing the server's command line+args.
-
- Args:
- output_dir: the path to the server's output directory, for log files.
- It will be created if necessary.
- httpd_conf_path: full path to the httpd.conf file to be used.
- mime_types_path: full path to the mime.types file to be used.
- document_root: full path to the DocumentRoot. If None, the DocumentRoot
- from the httpd.conf file will be used. Note that the httpd.conf
- file alongside this script does not specify any DocumentRoot, so if
- you're using that one, be sure to specify a document_root here.
- apache2: boolean if true will cause this function to return start
- command for Apache 2.x as opposed to Apache 1.3.x. This flag
- is ignored on Linux (but preserved here for compatibility in
- function signature with win), where apache2 is used always
- """
-
- exe_name = "apache2"
- cert_file = google.path_utils.FindUpward(self._base_dir, 'tools',
- 'python', 'google',
- 'httpd_config', 'httpd2.pem')
- ssl_enabled = os.path.exists('/etc/apache2/mods-enabled/ssl.conf')
-
- httpd_vars = {
- "httpd_executable_path":
- os.path.join(self._UnixRoot(), "usr", "sbin", exe_name),
- "httpd_conf_path": httpd_conf_path,
- "ssl_certificate_file": cert_file,
- "document_root" : document_root,
- "server_root": os.path.join(self._UnixRoot(), "usr"),
- "mime_types_path": mime_types_path,
- "output_dir": output_dir,
- "ssl_mutex": "file:"+os.path.join(output_dir, "ssl_mutex"),
- "ssl_session_cache":
- "shmcb:" + os.path.join(output_dir, "ssl_scache") + "(512000)",
- "user": os.environ.get("USER", "#%d" % os.geteuid()),
- "lock_file": os.path.join(output_dir, "accept.lock"),
- }
-
- google.path_utils.MaybeMakeDirectory(output_dir)
-
- # We have to wrap the command in bash
- # -C: process directive before reading config files
- # -c: process directive after reading config files
- # Apache wouldn't run CGIs with permissions==700 unless we add
- # -c User "<username>"
- httpd_cmd_string = (
- '%(httpd_executable_path)s'
- ' -f %(httpd_conf_path)s'
- ' -c \'TypesConfig "%(mime_types_path)s"\''
- ' -c \'CustomLog "%(output_dir)s/access_log.txt" common\''
- ' -c \'ErrorLog "%(output_dir)s/error_log.txt"\''
- ' -c \'PidFile "%(output_dir)s/httpd.pid"\''
- ' -C \'User "%(user)s"\''
- ' -C \'ServerRoot "%(server_root)s"\''
- ' -c \'LockFile "%(lock_file)s"\''
- )
-
- if document_root:
- httpd_cmd_string += ' -C \'DocumentRoot "%(document_root)s"\''
-
- if ssl_enabled:
- httpd_cmd_string += (
- ' -c \'SSLCertificateFile "%(ssl_certificate_file)s"\''
- ' -c \'SSLMutex "%(ssl_mutex)s"\''
- ' -c \'SSLSessionCache "%(ssl_session_cache)s"\''
- )
-
- # Save a copy of httpd_cmd_string to use for stopping httpd
- self._httpd_cmd_string = httpd_cmd_string % httpd_vars
-
- httpd_cmd = [self._bash, "-c", self._httpd_cmd_string]
- return httpd_cmd
-
- def GetStopHttpdCommand(self):
- """Returns a list of strings that contains the command line+args needed to
- stop the http server used in the http tests.
-
- This tries to fetch the pid of httpd (if available) and returns the
- command to kill it. If pid is not available, kill all httpd processes
- """
-
- if not self._httpd_cmd_string:
- return ["true"] # Haven't been asked for the start cmd yet. Just pass.
- # Add a sleep after the shutdown because sometimes it takes some time for
- # the port to be available again.
- return [self._bash, "-c", self._httpd_cmd_string + ' -k stop && sleep 5']
diff --git a/chromium/tools/python/google/platform_utils_mac.py b/chromium/tools/python/google/platform_utils_mac.py
deleted file mode 100644
index c4686fb16eb..00000000000
--- a/chromium/tools/python/google/platform_utils_mac.py
+++ /dev/null
@@ -1,145 +0,0 @@
-# Copyright (c) 2011 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.
-
-"""Platform-specific utility methods shared by several scripts."""
-
-import os
-import subprocess
-
-import google.path_utils
-
-
-class PlatformUtility(object):
- def __init__(self, base_dir):
- """Args:
- base_dir: the base dir for running tests.
- """
- self._base_dir = base_dir
- self._httpd_cmd_string = None # used for starting/stopping httpd
- self._bash = "/bin/bash"
-
- def _UnixRoot(self):
- """Returns the path to root."""
- return "/"
-
- def GetFilesystemRoot(self):
- """Returns the root directory of the file system."""
- return self._UnixRoot()
-
- def GetTempDirectory(self):
- """Returns the file system temp directory
-
- Note that this does not use a random subdirectory, so it's not
- intrinsically secure. If you need a secure subdir, use the tempfile
- package.
- """
- return os.getenv("TMPDIR", "/tmp")
-
- def FilenameToUri(self, path, use_http=False, use_ssl=False, port=8000):
- """Convert a filesystem path to a URI.
-
- Args:
- path: For an http URI, the path relative to the httpd server's
- DocumentRoot; for a file URI, the full path to the file.
- use_http: if True, returns a URI of the form http://127.0.0.1:8000/.
- If False, returns a file:/// URI.
- use_ssl: if True, returns HTTPS URL (https://127.0.0.1:8000/).
- This parameter is ignored if use_http=False.
- port: The port number to append when returning an HTTP URI
- """
- if use_http:
- protocol = 'http'
- if use_ssl:
- protocol = 'https'
- return "%s://127.0.0.1:%d/%s" % (protocol, port, path)
- return "file://" + path
-
- def GetStartHttpdCommand(self, output_dir,
- httpd_conf_path, mime_types_path,
- document_root=None, apache2=False):
- """Prepares the config file and output directory to start an httpd server.
- Returns a list of strings containing the server's command line+args.
-
- Args:
- output_dir: the path to the server's output directory, for log files.
- It will be created if necessary.
- httpd_conf_path: full path to the httpd.conf file to be used.
- mime_types_path: full path to the mime.types file to be used.
- document_root: full path to the DocumentRoot. If None, the DocumentRoot
- from the httpd.conf file will be used. Note that the httpd.conf
- file alongside this script does not specify any DocumentRoot, so if
- you're using that one, be sure to specify a document_root here.
- apache2: boolean if true will cause this function to return start
- command for Apache 2.x as opposed to Apache 1.3.x. This flag
- is ignored on Mac (but preserved here for compatibility in
- function signature with win), where httpd2 is used always
- """
-
- exe_name = "httpd"
- cert_file = google.path_utils.FindUpward(self._base_dir, 'tools',
- 'python', 'google',
- 'httpd_config', 'httpd2.pem')
- ssl_enabled = os.path.exists('/etc/apache2/mods-enabled/ssl.conf')
-
- httpd_vars = {
- "httpd_executable_path":
- os.path.join(self._UnixRoot(), "usr", "sbin", exe_name),
- "httpd_conf_path": httpd_conf_path,
- "ssl_certificate_file": cert_file,
- "document_root" : document_root,
- "server_root": os.path.join(self._UnixRoot(), "usr"),
- "mime_types_path": mime_types_path,
- "output_dir": output_dir,
- "ssl_mutex": "file:"+os.path.join(output_dir, "ssl_mutex"),
- "user": os.environ.get("USER", "#%d" % os.geteuid()),
- "lock_file": os.path.join(output_dir, "accept.lock"),
- }
-
- google.path_utils.MaybeMakeDirectory(output_dir)
-
- # We have to wrap the command in bash
- # -C: process directive before reading config files
- # -c: process directive after reading config files
- # Apache wouldn't run CGIs with permissions==700 unless we add
- # -c User "<username>"
- httpd_cmd_string = (
- '%(httpd_executable_path)s'
- ' -f %(httpd_conf_path)s'
- ' -c \'TypesConfig "%(mime_types_path)s"\''
- ' -c \'CustomLog "%(output_dir)s/access_log.txt" common\''
- ' -c \'ErrorLog "%(output_dir)s/error_log.txt"\''
- ' -c \'PidFile "%(output_dir)s/httpd.pid"\''
- ' -C \'User "%(user)s"\''
- ' -C \'ServerRoot "%(server_root)s"\''
- ' -c \'LockFile "%(lock_file)s"\''
- )
-
- if document_root:
- httpd_cmd_string += ' -C \'DocumentRoot "%(document_root)s"\''
-
- if ssl_enabled:
- httpd_cmd_string += (
- ' -c \'SSLCertificateFile "%(ssl_certificate_file)s"\''
- ' -c \'SSLMutex "%(ssl_mutex)s"\''
- )
-
- # Save a copy of httpd_cmd_string to use for stopping httpd
- self._httpd_cmd_string = httpd_cmd_string % httpd_vars
-
- httpd_cmd = [self._bash, "-c", self._httpd_cmd_string]
- return httpd_cmd
-
- def GetStopHttpdCommand(self):
- """Returns a list of strings that contains the command line+args needed to
- stop the http server used in the http tests.
-
- This tries to fetch the pid of httpd (if available) and returns the
- command to kill it. If pid is not available, kill all httpd processes
- """
-
- if not self._httpd_cmd_string:
- return ["true"] # Haven't been asked for the start cmd yet. Just pass.
- # Add a sleep after the shutdown because sometimes it takes some time for
- # the port to be available again.
- return [self._bash, "-c", self._httpd_cmd_string + ' -k stop && sleep 5']
diff --git a/chromium/tools/python/google/platform_utils_win.py b/chromium/tools/python/google/platform_utils_win.py
deleted file mode 100644
index 65db96c3faa..00000000000
--- a/chromium/tools/python/google/platform_utils_win.py
+++ /dev/null
@@ -1,194 +0,0 @@
-# Copyright (c) 2011 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.
-"""Platform-specific utility methods shared by several scripts."""
-
-import os
-import re
-import subprocess
-import sys
-
-import google.path_utils
-
-# Cache a single cygpath process for use throughout, even across instances of
-# the PlatformUtility class.
-_cygpath_proc = None
-
-class PlatformUtility(object):
- def __init__(self, base_dir):
- """Args:
- base_dir: a directory above which third_party/cygwin can be found,
- used to locate the cygpath executable for path conversions.
- """
- self._cygwin_root = None
- self._base_dir = base_dir
-
- def _CygwinRoot(self):
- """Returns the full path to third_party/cygwin/."""
- if not self._cygwin_root:
- self._cygwin_root = google.path_utils.FindUpward(self._base_dir,
- 'third_party', 'cygwin')
- return self._cygwin_root
-
- def _PathToExecutable(self, executable):
- """Returns the full path to an executable in Cygwin's bin dir."""
- return os.path.join(self._CygwinRoot(), 'bin', executable)
-
- def GetAbsolutePath(self, path, force=False):
- """Returns an absolute windows path. If platform is cygwin, converts it to
- windows style using cygpath.
-
- For performance reasons, we use a single cygpath process, shared among all
- instances of this class. Otherwise Python can run out of file handles.
- """
- if not force and sys.platform != "cygwin":
- return os.path.abspath(path)
- global _cygpath_proc
- if not _cygpath_proc:
- cygpath_command = [self._PathToExecutable("cygpath.exe"),
- "-a", "-m", "-f", "-"]
- _cygpath_proc = subprocess.Popen(cygpath_command,
- stdin=subprocess.PIPE,
- stdout=subprocess.PIPE)
- _cygpath_proc.stdin.write(path + "\n")
- return _cygpath_proc.stdout.readline().rstrip()
-
- def GetFilesystemRoot(self):
- """Returns the root directory of the file system."""
- return os.environ['SYSTEMDRIVE'] + '\\'
-
- def GetTempDirectory(self):
- """Returns the file system's base temp directory, or the filesystem root
- if the standard temp directory can't be determined.
-
- Note that this does not use a random subdirectory, so it's not
- intrinsically secure. If you need a secure subdir, use the tempfile
- package.
- """
- return os.environ.get('TEMP', self.GetFilesystemRoot())
-
- def FilenameToUri(self, path, use_http=False, use_ssl=False, port=8000):
- """Convert a Windows style path to a URI.
-
- Args:
- path: For an http URI, the path relative to the httpd server's
- DocumentRoot; for a file URI, the full path to the file.
- use_http: if True, returns a URI of the form http://127.0.0.1:8000/.
- If False, returns a file:/// URI.
- use_ssl: if True, returns HTTPS URL (https://127.0.0.1:8000/).
- This parameter is ignored if use_http=False.
- port: The port number to append when returning an HTTP URI
- """
- if use_http:
- protocol = 'http'
- if use_ssl:
- protocol = 'https'
- path = path.replace("\\", "/")
- return "%s://127.0.0.1:%s/%s" % (protocol, str(port), path)
- return "file:///" + self.GetAbsolutePath(path)
-
- def GetStartHttpdCommand(self, output_dir,
- httpd_conf_path, mime_types_path,
- document_root=None, apache2=False):
- """Prepares the config file and output directory to start an httpd server.
- Returns a list of strings containing the server's command line+args.
-
- Args:
- output_dir: the path to the server's output directory, for log files.
- It will be created if necessary.
- httpd_conf_path: full path to the httpd.conf file to be used.
- mime_types_path: full path to the mime.types file to be used.
- document_root: full path to the DocumentRoot. If None, the DocumentRoot
- from the httpd.conf file will be used. Note that the httpd.conf
- file alongside this script does not specify any DocumentRoot, so if
- you're using that one, be sure to specify a document_root here.
- apache2: boolean if true will cause this function to return start
- command for Apache 2.x as opposed to Apache 1.3.x
- """
-
- if document_root:
- document_root = GetCygwinPath(document_root)
- exe_name = "httpd"
- cert_file = ""
- if apache2:
- exe_name = "httpd2"
- cert_file = google.path_utils.FindUpward(self._base_dir, 'tools',
- 'python', 'google',
- 'httpd_config', 'httpd2.pem')
- httpd_vars = {
- "httpd_executable_path": GetCygwinPath(
- os.path.join(self._CygwinRoot(), "usr", "sbin", exe_name)),
- "httpd_conf_path": GetCygwinPath(httpd_conf_path),
- "ssl_certificate_file": GetCygwinPath(cert_file),
- "document_root" : document_root,
- "server_root": GetCygwinPath(os.path.join(self._CygwinRoot(), "usr")),
- "mime_types_path": GetCygwinPath(mime_types_path),
- "output_dir": GetCygwinPath(output_dir),
- "bindir": GetCygwinPath(os.path.join(self._CygwinRoot(), "bin")),
- "user": os.environ.get("USERNAME", os.environ.get("USER", "")),
- }
- if not httpd_vars["user"]:
- # Failed to get the username from the environment; use whoami.exe
- # instead.
- proc = subprocess.Popen(self._PathToExecutable("whoami.exe"),
- stdout=subprocess.PIPE)
- httpd_vars["user"] = proc.stdout.read().strip()
-
- if not httpd_vars["user"]:
- raise Exception("Failed to get username.")
-
- google.path_utils.MaybeMakeDirectory(output_dir)
-
- # We have to wrap the command in bash because the cygwin environment
- # is required for httpd to run.
- # -C: process directive before reading config files
- # -c: process directive after reading config files
- # Apache wouldn't run CGIs with permissions==700 unless we add
- # -c User "<username>"
- bash = self._PathToExecutable("bash.exe")
- httpd_cmd_string = (
- ' PATH=%(bindir)s %(httpd_executable_path)s'
- ' -f %(httpd_conf_path)s'
- ' -c \'TypesConfig "%(mime_types_path)s"\''
- ' -c \'CustomLog "%(output_dir)s/access_log.txt" common\''
- ' -c \'ErrorLog "%(output_dir)s/error_log.txt"\''
- ' -c \'PidFile "%(output_dir)s/httpd.pid"\''
- ' -C \'User "%(user)s"\''
- ' -C \'ServerRoot "%(server_root)s"\''
- )
- if apache2:
- httpd_cmd_string = ('export CYGWIN=server;' + httpd_cmd_string +
- ' -c \'SSLCertificateFile "%(ssl_certificate_file)s"\'')
- if document_root:
- httpd_cmd_string += ' -C \'DocumentRoot "%(document_root)s"\''
-
- httpd_cmd = [bash, "-c", httpd_cmd_string % httpd_vars]
- return httpd_cmd
-
- def GetStopHttpdCommand(self):
- """Returns a list of strings that contains the command line+args needed to
- stop the http server used in the http tests.
- """
- # Force kill (/f) *all* httpd processes. This has the side effect of
- # killing httpd processes that we didn't start.
- return ["taskkill.exe", "/f", "/im", "httpd*"]
-
-###########################################################################
-# This method is specific to windows, expected to be used only by *_win.py
-# files.
-
-def GetCygwinPath(path):
- """Convert a Windows path to a cygwin path.
-
- The cygpath utility insists on converting paths that it thinks are Cygwin
- root paths to what it thinks the correct roots are. So paths such as
- "C:\b\slave\webkit-release-kjs\build\third_party\cygwin\bin" are converted to
- plain "/usr/bin". To avoid this, we do the conversion manually.
-
- The path is expected to be an absolute path, on any drive.
- """
- drive_regexp = re.compile(r'([a-z]):[/\\]', re.IGNORECASE)
- def LowerDrive(matchobj):
- return '/cygdrive/%s/' % matchobj.group(1).lower()
- path = drive_regexp.sub(LowerDrive, path)
- return path.replace('\\', '/')
diff --git a/chromium/tools/python/google/process_utils.py b/chromium/tools/python/google/process_utils.py
deleted file mode 100644
index 64c92ea9f19..00000000000
--- a/chromium/tools/python/google/process_utils.py
+++ /dev/null
@@ -1,221 +0,0 @@
-# Copyright (c) 2006-2008 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.
-"""Shared process-related utility functions."""
-
-import errno
-import os
-import subprocess
-import sys
-
-class CommandNotFound(Exception): pass
-
-
-TASKKILL = os.path.join(os.environ['WINDIR'], 'system32', 'taskkill.exe')
-TASKKILL_PROCESS_NOT_FOUND_ERR = 128
-# On windows 2000 there is no taskkill.exe, we need to have pskill somewhere
-# in the path.
-PSKILL = 'pskill.exe'
-PSKILL_PROCESS_NOT_FOUND_ERR = -1
-
-def KillAll(executables):
- """Tries to kill all copies of each process in the processes list. Returns
- an error if any running processes couldn't be killed.
- """
- result = 0
- if os.path.exists(TASKKILL):
- command = [TASKKILL, '/f', '/im']
- process_not_found_err = TASKKILL_PROCESS_NOT_FOUND_ERR
- else:
- command = [PSKILL, '/t']
- process_not_found_err = PSKILL_PROCESS_NOT_FOUND_ERR
-
- for name in executables:
- new_error = RunCommand(command + [name])
- # Ignore "process not found" error.
- if new_error != 0 and new_error != process_not_found_err:
- result = new_error
- return result
-
-def RunCommandFull(command, verbose=True, collect_output=False,
- print_output=True):
- """Runs the command list.
-
- Prints the given command (which should be a list of one or more strings).
- If specified, prints its stderr (and optionally stdout) to stdout,
- line-buffered, converting line endings to CRLF (see note below). If
- specified, collects the output as a list of lines and returns it. Waits
- for the command to terminate and returns its status.
-
- Args:
- command: the full command to run, as a list of one or more strings
- verbose: if True, combines all output (stdout and stderr) into stdout.
- Otherwise, prints only the command's stderr to stdout.
- collect_output: if True, collects the output of the command as a list of
- lines and returns it
- print_output: if True, prints the output of the command
-
- Returns:
- A tuple consisting of the process's exit status and output. If
- collect_output is False, the output will be [].
-
- Raises:
- CommandNotFound if the command executable could not be found.
- """
- print '\n' + subprocess.list2cmdline(command).replace('\\', '/') + '\n', ###
-
- if verbose:
- out = subprocess.PIPE
- err = subprocess.STDOUT
- else:
- out = file(os.devnull, 'w')
- err = subprocess.PIPE
- try:
- proc = subprocess.Popen(command, stdout=out, stderr=err, bufsize=1)
- except OSError, e:
- if e.errno == errno.ENOENT:
- raise CommandNotFound('Unable to find "%s"' % command[0])
- raise
-
- output = []
-
- if verbose:
- read_from = proc.stdout
- else:
- read_from = proc.stderr
- line = read_from.readline()
- while line:
- line = line.rstrip()
-
- if collect_output:
- output.append(line)
-
- if print_output:
- # Windows Python converts \n to \r\n automatically whenever it
- # encounters it written to a text file (including stdout). The only
- # way around it is to write to a binary file, which isn't feasible for
- # stdout. So we end up with \r\n here even though we explicitly write
- # \n. (We could write \r instead, which doesn't get converted to \r\n,
- # but that's probably more troublesome for people trying to read the
- # files.)
- print line + '\n',
-
- # Python on windows writes the buffer only when it reaches 4k. This is
- # not fast enough for all purposes.
- sys.stdout.flush()
- line = read_from.readline()
-
- # Make sure the process terminates.
- proc.wait()
-
- if not verbose:
- out.close()
- return (proc.returncode, output)
-
-def RunCommand(command, verbose=True):
- """Runs the command list, printing its output and returning its exit status.
-
- Prints the given command (which should be a list of one or more strings),
- then runs it and prints its stderr (and optionally stdout) to stdout,
- line-buffered, converting line endings to CRLF. Waits for the command to
- terminate and returns its status.
-
- Args:
- command: the full command to run, as a list of one or more strings
- verbose: if True, combines all output (stdout and stderr) into stdout.
- Otherwise, prints only the command's stderr to stdout.
-
- Returns:
- The process's exit status.
-
- Raises:
- CommandNotFound if the command executable could not be found.
- """
- return RunCommandFull(command, verbose)[0]
-
-def RunCommandsInParallel(commands, verbose=True, collect_output=False,
- print_output=True):
- """Runs a list of commands in parallel, waits for all commands to terminate
- and returns their status. If specified, the ouput of commands can be
- returned and/or printed.
-
- Args:
- commands: the list of commands to run, each as a list of one or more
- strings.
- verbose: if True, combines stdout and stderr into stdout.
- Otherwise, prints only the command's stderr to stdout.
- collect_output: if True, collects the output of the each command as a list
- of lines and returns it.
- print_output: if True, prints the output of each command.
-
- Returns:
- A list of tuples consisting of each command's exit status and output. If
- collect_output is False, the output will be [].
-
- Raises:
- CommandNotFound if any of the command executables could not be found.
- """
-
- command_num = len(commands)
- outputs = [[] for i in xrange(command_num)]
- procs = [None for i in xrange(command_num)]
- eofs = [False for i in xrange(command_num)]
-
- for command in commands:
- print '\n' + subprocess.list2cmdline(command).replace('\\', '/') + '\n',
-
- if verbose:
- out = subprocess.PIPE
- err = subprocess.STDOUT
- else:
- out = file(os.devnull, 'w')
- err = subprocess.PIPE
-
- for i in xrange(command_num):
- try:
- command = commands[i]
- procs[i] = subprocess.Popen(command, stdout=out, stderr=err, bufsize=1)
- except OSError, e:
- if e.errno == errno.ENOENT:
- raise CommandNotFound('Unable to find "%s"' % command[0])
- raise
- # We could consider terminating the processes already started.
- # But Popen.kill() is only available in version 2.6.
- # For now the clean up is done by KillAll.
-
- while True:
- eof_all = True
- for i in xrange(command_num):
- if eofs[i]:
- continue
- if verbose:
- read_from = procs[i].stdout
- else:
- read_from = procs[i].stderr
- line = read_from.readline()
- if line:
- eof_all = False
- line = line.rstrip()
- outputs[i].append(line)
- if print_output:
- # Windows Python converts \n to \r\n automatically whenever it
- # encounters it written to a text file (including stdout). The only
- # way around it is to write to a binary file, which isn't feasible
- # for stdout. So we end up with \r\n here even though we explicitly
- # write \n. (We could write \r instead, which doesn't get converted
- # to \r\n, but that's probably more troublesome for people trying to
- # read the files.)
- print line + '\n',
- else:
- eofs[i] = True
- if eof_all:
- break
-
- # Make sure the process terminates.
- for i in xrange(command_num):
- procs[i].wait()
-
- if not verbose:
- out.close()
-
- return [(procs[i].returncode, outputs[i]) for i in xrange(command_num)]
diff --git a/chromium/tools/relocation_packer/relocation_packer.gyp b/chromium/tools/relocation_packer/relocation_packer.gyp
new file mode 100644
index 00000000000..f74a9e9b08c
--- /dev/null
+++ b/chromium/tools/relocation_packer/relocation_packer.gyp
@@ -0,0 +1,66 @@
+# Copyright 2014 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.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'lib_relocation_packer',
+ 'toolsets': ['host'],
+ 'type': 'static_library',
+ 'dependencies': [
+ '../../third_party/elfutils/elfutils.gyp:libelf',
+ ],
+ 'sources': [
+ 'src/debug.cc',
+ 'src/elf_file.cc',
+ 'src/leb128.cc',
+ 'src/packer.cc',
+ 'src/run_length_encoder.cc',
+ ],
+ },
+ {
+ 'target_name': 'relocation_packer',
+ 'toolsets': ['host'],
+ 'type': 'executable',
+ 'dependencies': [
+ '../../third_party/elfutils/elfutils.gyp:libelf',
+ 'lib_relocation_packer',
+ ],
+ 'sources': [
+ 'src/main.cc',
+ ],
+ },
+ {
+ 'target_name': 'relocation_packer_unittests',
+ 'toolsets': ['host'],
+ 'type': 'executable',
+ 'cflags': [
+ '-DINTERMEDIATE_DIR="<(INTERMEDIATE_DIR)"',
+ ],
+ 'dependencies': [
+ '../../testing/gtest.gyp:gtest',
+ 'lib_relocation_packer',
+ ],
+ 'include_dirs': [
+ '../..',
+ ],
+ 'sources': [
+ 'src/elf_file_unittest.cc',
+ 'src/leb128_unittest.cc',
+ 'src/packer_unittest.cc',
+ 'src/run_length_encoder_unittest.cc',
+ 'src/run_all_unittests.cc',
+ ],
+ 'copies': [
+ {
+ 'destination': '<(INTERMEDIATE_DIR)',
+ 'files': [
+ 'test_data/elf_file_unittest_relocs.so',
+ 'test_data/elf_file_unittest_relocs_packed.so',
+ ],
+ },
+ ],
+ },
+ ],
+}
diff --git a/chromium/tools/resources/find_unused_resources.py b/chromium/tools/resources/find_unused_resources.py
deleted file mode 100755
index dfd1bba4b06..00000000000
--- a/chromium/tools/resources/find_unused_resources.py
+++ /dev/null
@@ -1,194 +0,0 @@
-#!/usr/bin/env python
-# 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.
-
-"""This script searches for unused art assets listed in a .grd file.
-
-It uses git grep to look for references to the IDR resource id or the base
-filename. If neither is found, the file is reported unused.
-
-Requires a git checkout. Must be run from your checkout's "src" root.
-
-Example:
- cd /work/chrome/src
- tools/resources/find_unused_resouces.py ash/resources/ash_resources.grd
-"""
-
-__author__ = 'jamescook@chromium.org (James Cook)'
-
-
-import os
-import re
-import subprocess
-import sys
-
-
-def GetBaseResourceId(resource_id):
- """Removes common suffixes from a resource ID.
-
- Removes suffixies that may be added by macros like IMAGE_GRID or IMAGE_BORDER.
- For example, converts IDR_FOO_LEFT and IDR_FOO_RIGHT to just IDR_FOO.
-
- Args:
- resource_id: String resource ID.
-
- Returns:
- A string with the base part of the resource ID.
- """
- suffixes = [
- '_TOP_LEFT', '_TOP', '_TOP_RIGHT',
- '_LEFT', '_CENTER', '_RIGHT',
- '_BOTTOM_LEFT', '_BOTTOM', '_BOTTOM_RIGHT',
- '_TL', '_T', '_TR',
- '_L', '_M', '_R',
- '_BL', '_B', '_BR']
- # Note: This does not check _HOVER, _PRESSED, _HOT, etc. as those are never
- # used in macros.
- for suffix in suffixes:
- if resource_id.endswith(suffix):
- resource_id = resource_id[:-len(suffix)]
- return resource_id
-
-
-def FindFilesWithContents(string_a, string_b):
- """Returns list of paths of files that contain |string_a| or |string_b|.
-
- Uses --name-only to print the file paths. The default behavior of git grep
- is to OR together multiple patterns.
-
- Args:
- string_a: A string to search for (not a regular expression).
- string_b: As above.
-
- Returns:
- A list of file paths as strings.
- """
- matching_files = subprocess.check_output([
- 'git', 'grep', '--name-only', '--fixed-strings', '-e', string_a,
- '-e', string_b])
- files_list = matching_files.split('\n')
- # The output ends in a newline, so slice that off.
- files_list = files_list[:-1]
- return files_list
-
-
-def GetUnusedResources(grd_filepath):
- """Returns a list of resources that are unused in the code.
-
- Prints status lines to the console because this function is quite slow.
-
- Args:
- grd_filepath: Path to a .grd file listing resources.
-
- Returns:
- A list of pairs of [resource_id, filepath] for the unused resources.
- """
- unused_resources = []
- grd_file = open(grd_filepath, 'r')
- grd_data = grd_file.read()
- print 'Checking:'
- # Match the resource id and file path out of substrings like:
- # ...name="IDR_FOO_123" file="common/foo.png"...
- # by matching between the quotation marks.
- pattern = re.compile(
- r"""name="([^"]*)" # Match resource ID between quotes.
- \s* # Run of whitespace, including newlines.
- file="([^"]*)" # Match file path between quotes.""",
- re.VERBOSE)
- # Use finditer over the file contents because there may be newlines between
- # the name and file attributes.
- for result in pattern.finditer(grd_data):
- # Extract the IDR resource id and file path.
- resource_id = result.group(1)
- filepath = result.group(2)
- filename = os.path.basename(filepath)
- # Print progress as we go along.
- print resource_id
- # Ensure the resource isn't used anywhere by checking both for the resource
- # id (which should appear in C++ code) and the raw filename (in case the
- # file is referenced in a script, test HTML file, etc.).
- base_resource_id = GetBaseResourceId(resource_id)
- matching_files = FindFilesWithContents(base_resource_id, filename)
- # Each file is matched once in the resource file itself. If there are no
- # other matching files, it is unused.
- if len(matching_files) == 1:
- # Give the user some happy news.
- print 'Unused!'
- unused_resources.append([resource_id, filepath])
-
- return unused_resources
-
-
-def GetScaleDirectories(resources_path):
- """Returns a list of paths to per-scale-factor resource directories.
-
- Assumes the directory names end in '_percent', for example,
- ash/resources/default_200_percent or
- chrome/app/theme/resources/touch_140_percent
-
- Args:
- resources_path: The base path of interest.
-
- Returns:
- A list of paths relative to the 'src' directory.
- """
- file_list = os.listdir(resources_path)
- scale_directories = []
- for file_entry in file_list:
- file_path = os.path.join(resources_path, file_entry)
- if os.path.isdir(file_path) and file_path.endswith('_percent'):
- scale_directories.append(file_path)
-
- scale_directories.sort()
- return scale_directories
-
-
-def main():
- # The script requires exactly one parameter, the .grd file path.
- if len(sys.argv) != 2:
- print 'Usage: tools/resources/find_unused_resources.py <path/to/grd>'
- sys.exit(1)
- grd_filepath = sys.argv[1]
-
- # Try to ensure we are in a source checkout.
- current_dir = os.getcwd()
- if os.path.basename(current_dir) != 'src':
- print 'Script must be run in your "src" directory.'
- sys.exit(1)
-
- # We require a git checkout to use git grep.
- if not os.path.exists(current_dir + '/.git'):
- print 'You must use a git checkout for this script to run.'
- print current_dir + '/.git', 'not found.'
- sys.exit(1)
-
- # Look up the scale-factor directories.
- resources_path = os.path.dirname(grd_filepath)
- scale_directories = GetScaleDirectories(resources_path)
- if not scale_directories:
- print 'No scale directories (like "default_100_percent") found.'
- sys.exit(1)
-
- # |unused_resources| stores pairs of [resource_id, filepath] for resource ids
- # that are not referenced in the code.
- unused_resources = GetUnusedResources(grd_filepath)
- if not unused_resources:
- print 'All resources are used.'
- sys.exit(0)
-
- # Dump our output for the user.
- print
- print 'Unused resource ids:'
- for resource_id, filepath in unused_resources:
- print resource_id
- # Print a list of 'git rm' command lines to remove unused assets.
- print
- print 'Unused files:'
- for resource_id, filepath in unused_resources:
- for directory in scale_directories:
- print 'git rm ' + os.path.join(directory, filepath)
-
-
-if __name__ == '__main__':
- main()
diff --git a/chromium/tools/resources/optimize-png-files.sh b/chromium/tools/resources/optimize-png-files.sh
deleted file mode 100755
index 351e04545e1..00000000000
--- a/chromium/tools/resources/optimize-png-files.sh
+++ /dev/null
@@ -1,472 +0,0 @@
-#!/bin/bash
-# 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.
-
-# The optimization code is based on pngslim (http://goo.gl/a0XHg)
-# and executes a similar pipleline to optimize the png file size.
-# The steps that require pngoptimizercl/pngrewrite/deflopt are omitted,
-# but this runs all other processes, including:
-# 1) various color-dependent optimizations using optipng.
-# 2) optimize the number of huffman blocks.
-# 3) randomize the huffman table.
-# 4) Further optimize using optipng and advdef (zlib stream).
-# Due to the step 3), each run may produce slightly different results.
-#
-# Note(oshima): In my experiment, advdef didn't reduce much. I'm keeping it
-# for now as it does not take much time to run.
-
-readonly ALL_DIRS="
-ash/resources
-ui/resources
-chrome/app/theme
-chrome/browser/resources
-chrome/renderer/resources
-webkit/glue/resources
-remoting/resources
-remoting/webapp
-"
-
-# Files larger than this file size (in bytes) will
-# use the optimization parameters tailored for large files.
-LARGE_FILE_THRESHOLD=3000
-
-# Constants used for optimization
-readonly DEFAULT_MIN_BLOCK_SIZE=128
-readonly DEFAULT_LIMIT_BLOCKS=256
-readonly DEFAULT_RANDOM_TRIALS=100
-# Taken from the recommendation in the pngslim's readme.txt.
-readonly LARGE_MIN_BLOCK_SIZE=1
-readonly LARGE_LIMIT_BLOCKS=2
-readonly LARGE_RANDOM_TRIALS=1
-
-# Global variables for stats
-TOTAL_OLD_BYTES=0
-TOTAL_NEW_BYTES=0
-TOTAL_FILE=0
-PROCESSED_FILE=0
-
-declare -a THROBBER_STR=('-' '\\' '|' '/')
-THROBBER_COUNT=0
-
-# Show throbber character at current cursor position.
-function throbber {
- echo -ne "${THROBBER_STR[$THROBBER_COUNT]}\b"
- let THROBBER_COUNT=($THROBBER_COUNT+1)%4
-}
-
-# Usage: pngout_loop <file> <png_out_options> ...
-# Optimize the png file using pngout with the given options
-# using various block split thresholds and filter types.
-function pngout_loop {
- local file=$1
- shift
- local opts=$*
- if [ $OPTIMIZE_LEVEL == 1 ]; then
- for j in $(seq 0 5); do
- throbber
- pngout -q -k1 -s1 -f$j $opts $file
- done
- else
- for i in 0 128 256 512; do
- for j in $(seq 0 5); do
- throbber
- pngout -q -k1 -s1 -b$i -f$j $opts $file
- done
- done
- fi
-}
-
-# Usage: get_color_depth_list
-# Returns the list of color depth options for current optimization level.
-function get_color_depth_list {
- if [ $OPTIMIZE_LEVEL == 1 ]; then
- echo "-d0"
- else
- echo "-d1 -d2 -d4 -d8"
- fi
-}
-
-# Usage: process_grayscale <file>
-# Optimize grayscale images for all color bit depths.
-#
-# TODO(oshima): Experiment with -d0 w/o -c0.
-function process_grayscale {
- echo -n "|gray"
- for opt in $(get_color_depth_list); do
- pngout_loop $file -c0 $opt
- done
-}
-
-# Usage: process_grayscale_alpha <file>
-# Optimize grayscale images with alpha for all color bit depths.
-function process_grayscale_alpha {
- echo -n "|gray-a"
- pngout_loop $file -c4
- for opt in $(get_color_depth_list); do
- pngout_loop $file -c3 $opt
- done
-}
-
-# Usage: process_rgb <file>
-# Optimize rgb images with or without alpha for all color bit depths.
-function process_rgb {
- echo -n "|rgb"
- for opt in $(get_color_depth_list); do
- pngout_loop $file -c3 $opt
- done
- pngout_loop $file -c2
- pngout_loop $file -c6
-}
-
-# Usage: huffman_blocks <file>
-# Optimize the huffman blocks.
-function huffman_blocks {
- local file=$1
- echo -n "|huffman"
- local size=$(stat -c%s $file)
- local min_block_size=$DEFAULT_MIN_BLOCK_SIZE
- local limit_blocks=$DEFAULT_LIMIT_BLOCKS
-
- if [ $size -gt $LARGE_FILE_THRESHOLD ]; then
- min_block_size=$LARGE_MIN_BLOCK_SIZE
- limit_blocks=$LARGE_LIMIT_BLOCKS
- fi
- let max_blocks=$size/$min_block_size
- if [ $max_blocks -gt $limit_blocks ]; then
- max_blocks=$limit_blocks
- fi
-
- for i in $(seq 2 $max_blocks); do
- throbber
- pngout -q -k1 -ks -s1 -n$i $file
- done
-}
-
-# Usage: random_huffman_table_trial <file>
-# Try compressing by randomizing the initial huffman table.
-#
-# TODO(oshima): Try adjusting different parameters for large files to
-# reduce runtime.
-function random_huffman_table_trial {
- echo -n "|random"
- local file=$1
- local old_size=$(stat -c%s $file)
- local trials_count=$DEFAULT_RANDOM_TRIALS
-
- if [ $old_size -gt $LARGE_FILE_THRESHOLD ]; then
- trials_count=$LARGE_RANDOM_TRIALS
- fi
- for i in $(seq 1 $trials_count); do
- throbber
- pngout -q -k1 -ks -s0 -r $file
- done
- local new_size=$(stat -c%s $file)
- if [ $new_size -lt $old_size ]; then
- random_huffman_table_trial $file
- fi
-}
-
-# Usage: final_comprssion <file>
-# Further compress using optipng and advdef.
-# TODO(oshima): Experiment with 256.
-function final_compression {
- echo -n "|final"
- local file=$1
- if [ $OPTIMIZE_LEVEL == 2 ]; then
- for i in 32k 16k 8k 4k 2k 1k 512; do
- throbber
- optipng -q -nb -nc -zw$i -zc1-9 -zm1-9 -zs0-3 -f0-5 $file
- done
- fi
- for i in $(seq 1 4); do
- throbber
- advdef -q -z -$i $file
- done
- echo -ne "\r"
-}
-
-# Usage: get_color_type <file>
-# Returns the color type name of the png file. Here is the list of names
-# for each color type codes.
-# 0 : grayscale
-# 2 : RGB
-# 3 : colormap
-# 4 : gray+alpha
-# 6 : RGBA
-# See http://en.wikipedia.org/wiki/Portable_Network_Graphics#Color_depth
-# for details about the color type code.
-function get_color_type {
- local file=$1
- echo $(file $file | awk -F, '{print $3}' | awk '{print $2}')
-}
-
-# Usage: optimize_size <file>
-# Performs png file optimization.
-function optimize_size {
- tput el
- local file=$1
- echo -n "$file "
-
- advdef -q -z -4 $file
-
- pngout -q -s4 -c0 -force $file $file.tmp.png
- if [ -f $file.tmp.png ]; then
- rm $file.tmp.png
- process_grayscale $file
- process_grayscale_alpha $file
- else
- pngout -q -s4 -c4 -force $file $file.tmp.png
- if [ -f $file.tmp.png ]; then
- rm $file.tmp.png
- process_grayscale_alpha $file
- else
- process_rgb $file
- fi
- fi
-
- echo -n "|filter"
- local old_color_type=$(get_color_type $file)
- optipng -q -zc9 -zm8 -zs0-3 -f0-5 $file -out $file.tmp.png
- local new_color_type=$(get_color_type $file.tmp.png)
- # optipng may corrupt a png file when reducing the color type
- # to grayscale/grayscale+alpha. Just skip such cases until
- # the bug is fixed. See crbug.com/174505, crbug.com/174084.
- # The issue is reported in
- # https://sourceforge.net/tracker/?func=detail&aid=3603630&group_id=151404&atid=780913
- if [[ $old_color_type == "RGBA" && $new_color_type =~ gray.* ]] ; then
- rm $file.tmp.png
- echo -n "[skip opting]"
- else
- mv $file.tmp.png $file
- fi
- pngout -q -k1 -s1 $file
-
- huffman_blocks $file
-
- # TODO(oshima): Experiment with strategy 1.
- echo -n "|strategy"
- if [ $OPTIMIZE_LEVEL == 2 ]; then
- for i in 3 2 0; do
- pngout -q -k1 -ks -s$i $file
- done
- else
- pngout -q -k1 -ks -s1 $file
- fi
-
- if [ $OPTIMIZE_LEVEL == 2 ]; then
- random_huffman_table_trial $file
- fi
-
- final_compression $file
-}
-
-# Usage: process_file <file>
-function process_file {
- local file=$1
- local name=$(basename $file)
- # -rem alla removes all ancillary chunks except for tRNS
- pngcrush -d $TMP_DIR -brute -reduce -rem alla $file > /dev/null
-
- if [ $OPTIMIZE_LEVEL != 0 ]; then
- optimize_size $TMP_DIR/$name
- fi
-}
-
-# Usage: optimize_file <file>
-function optimize_file {
- local file=$1
- if $using_cygwin ; then
- file=$(cygpath -w $file)
- fi
-
- local name=$(basename $file)
- local old=$(stat -c%s $file)
- local tmp_file=$TMP_DIR/$name
-
- process_file $file
-
- local new=$(stat -c%s $tmp_file)
- let diff=$old-$new
- let percent=($diff*100)/$old
- let TOTAL_FILE+=1
-
- tput el
- if [ $new -lt $old ]; then
- echo -ne "$file : $old => $new ($diff bytes : $percent %)\n"
- mv "$tmp_file" "$file"
- let TOTAL_OLD_BYTES+=$old
- let TOTAL_NEW_BYTES+=$new
- let PROCESSED_FILE+=1
- else
- if [ $OPTIMIZE_LEVEL == 0 ]; then
- echo -ne "$file : skipped\r"
- fi
- rm $tmp_file
- fi
-}
-
-function optimize_dir {
- local dir=$1
- if $using_cygwin ; then
- dir=$(cygpath -w $dir)
- fi
-
- for f in $(find $dir -name "*.png"); do
- optimize_file $f
- done
-}
-
-function install_if_not_installed {
- local program=$1
- local package=$2
- which $program > /dev/null 2>&1
- if [ "$?" != "0" ]; then
- if $using_cygwin ; then
- echo "Couldn't find $program. " \
- "Please run cygwin's setup.exe and install the $package package."
- exit 1
- else
- read -p "Couldn't find $program. Do you want to install? (y/n)"
- [ "$REPLY" == "y" ] && sudo apt-get install $package
- [ "$REPLY" == "y" ] || exit
- fi
- fi
-}
-
-function fail_if_not_installed {
- local program=$1
- local url=$2
- which $program > /dev/null 2>&1
- if [ $? != 0 ]; then
- echo "Couldn't find $program. Please download and install it from $url ."
- exit 1
- fi
-}
-
-function show_help {
- local program=$(basename $0)
- echo \
-"Usage: $program [options] dir ...
-
-$program is a utility to reduce the size of png files by removing
-unnecessary chunks and compressing the image.
-
-Options:
- -o<optimize_level> Specify optimization level: (default is 1)
- 0 Just run pngcrush. It removes unnecessary chunks and perform basic
- optimization on the encoded data.
- 1 Optimize png files using pngout/optipng and advdef. This can further
- reduce addtional 5~30%. This is the default level.
- 2 Aggressively optimize the size of png files. This may produce
- addtional 1%~5% reduction. Warning: this is *VERY*
- slow and can take hours to process all files.
- -r<revision> If this is specified, the script processes only png files
- changed since this revision. The <dir> options will be used
- to narrow down the files under specific directories.
- -h Print this help text."
- exit 1
-}
-
-if [ ! -e ../.gclient ]; then
- echo "$0 must be run in src directory"
- exit 1
-fi
-
-if [ "$(expr substr $(uname -s) 1 6)" == "CYGWIN" ]; then
- using_cygwin=true
-else
- using_cygwin=false
-fi
-
-OPTIMIZE_LEVEL=1
-# Parse options
-while getopts o:r:h opts
-do
- case $opts in
- r)
- COMMIT=$(git svn find-rev r$OPTARG | tail -1) || exit
- if [ -z "$COMMIT" ] ; then
- echo "Revision $OPTARG not found"
- show_help
- fi
- ;;
- o)
- if [[ ! "$OPTARG" =~ [012] ]] ; then
- show_help
- fi
- OPTIMIZE_LEVEL=$OPTARG
- ;;
- [h?])
- show_help;;
- esac
-done
-
-# Remove options from argument list.
-shift $(($OPTIND -1))
-
-# Make sure we have all necessary commands installed.
-install_if_not_installed pngcrush pngcrush
-if [ $OPTIMIZE_LEVEL -ge 1 ]; then
- install_if_not_installed optipng optipng
-
- if $using_cygwin ; then
- fail_if_not_installed advdef "http://advancemame.sourceforge.net/comp-readme.html"
- else
- install_if_not_installed advdef advancecomp
- fi
-
- if $using_cygwin ; then
- pngout_url="http://www.advsys.net/ken/utils.htm"
- else
- pngout_url="http://www.jonof.id.au/kenutils"
- fi
- fail_if_not_installed pngout $pngout_url
-fi
-
-# Create tmp directory for crushed png file.
-TMP_DIR=$(mktemp -d)
-if $using_cygwin ; then
- TMP_DIR=$(cygpath -w $TMP_DIR)
-fi
-
-# Make sure we cleanup temp dir
-trap "rm -rf $TMP_DIR" EXIT
-
-# If no directories are specified, optimize all directories.
-DIRS=$@
-set ${DIRS:=$ALL_DIRS}
-
-echo "Optimize level=$OPTIMIZE_LEVEL"
-if [ -n "$COMMIT" ] ; then
- ALL_FILES=$(git diff --name-only $COMMIT HEAD $DIRS | grep "png$")
- ALL_FILES_LIST=( $ALL_FILES )
- echo "Processing ${#ALL_FILES_LIST[*]} files"
- for f in $ALL_FILES; do
- if [ -f $f ] ; then
- optimize_file $f
- else
- echo "Skipping deleted file: $f";
- fi
- done
-else
- for d in $DIRS; do
- echo "Optimizing png files in $d"
- optimize_dir $d
- echo
- done
-fi
-
-# Print the results.
-if [ $PROCESSED_FILE == 0 ]; then
- echo "Did not find any files (out of $TOTAL_FILE files)" \
- "that could be optimized" \
- "in $(date -u -d @$SECONDS +%T)s"
-else
- let diff=$TOTAL_OLD_BYTES-$TOTAL_NEW_BYTES
- let percent=$diff*100/$TOTAL_OLD_BYTES
- echo "Processed $PROCESSED_FILE files (out of $TOTAL_FILE files)" \
- "in $(date -u -d @$SECONDS +%T)s"
- echo "Result : $TOTAL_OLD_BYTES => $TOTAL_NEW_BYTES bytes" \
- "($diff bytes : $percent %)"
-fi
diff --git a/chromium/tools/run-bisect-manual-test.py b/chromium/tools/run-bisect-manual-test.py
deleted file mode 100755
index 1ea4e655871..00000000000
--- a/chromium/tools/run-bisect-manual-test.py
+++ /dev/null
@@ -1,128 +0,0 @@
-#!/usr/bin/env python
-# 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.
-
-"""Run Manual Test Bisect Tool
-
-An example usage:
-tools/run-bisect-manual-test.py -g 201281 -b 201290
-
-On Linux platform, follow the instructions in this document
-https://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment
-to setup the sandbox manually before running the script. Otherwise the script
-fails to launch Chrome and exits with an error.
-
-"""
-
-import os
-import subprocess
-import sys
-
-CROS_BOARD_ENV = 'BISECT_CROS_BOARD'
-CROS_IP_ENV = 'BISECT_CROS_IP'
-_DIR_TOOLS_ROOT = os.path.abspath(os.path.dirname(__file__))
-
-sys.path.append(os.path.join(_DIR_TOOLS_ROOT, 'telemetry'))
-from telemetry.core import browser_options
-
-
-def _RunBisectionScript(options):
- """Attempts to execute src/tools/bisect-perf-regression.py with the parameters
- passed in.
-
- Args:
- options: The configuration options to pass to the bisect script.
-
- Returns:
- 0 on success, otherwise 1.
- """
- test_command = 'python %s --browser=%s --chrome-root=.' %\
- (os.path.join(_DIR_TOOLS_ROOT, 'bisect-manual-test.py'),
- options.browser_type)
-
- cmd = ['python', os.path.join(_DIR_TOOLS_ROOT, 'bisect-perf-regression.py'),
- '-c', test_command,
- '-g', options.good_revision,
- '-b', options.bad_revision,
- '-m', 'manual_test/manual_test',
- '-r', '1',
- '--working_directory', options.working_directory,
- '--build_preference', 'ninja',
- '--use_goma',
- '--no_custom_deps']
-
- if 'cros' in options.browser_type:
- cmd.extend(['--target_platform', 'cros'])
-
- if os.environ[CROS_BOARD_ENV] and os.environ[CROS_IP_ENV]:
- cmd.extend(['--cros_board', os.environ[CROS_BOARD_ENV]])
- cmd.extend(['--cros_remote_ip', os.environ[CROS_IP_ENV]])
- else:
- print 'Error: Cros build selected, but BISECT_CROS_IP or'\
- 'BISECT_CROS_BOARD undefined.'
- print
- return 1
- elif 'android' in options.browser_type:
- cmd.extend(['--target_platform', 'android'])
-
- cmd = [str(c) for c in cmd]
-
- return_code = subprocess.call(cmd)
-
- if return_code:
- print 'Error: bisect-perf-regression.py returned with error %d' %\
- return_code
- print
-
- return return_code
-
-
-def main():
- usage = ('%prog [options]\n'
- 'Used to run the bisection script with a manual test.')
-
- options = browser_options.BrowserFinderOptions('release')
- parser = options.CreateParser(usage)
-
- parser.add_option('-b', '--bad_revision',
- type='str',
- help='A bad revision to start bisection. ' +
- 'Must be later than good revision. May be either a git' +
- ' or svn revision.')
- parser.add_option('-g', '--good_revision',
- type='str',
- help='A revision to start bisection where performance' +
- ' test is known to pass. Must be earlier than the ' +
- 'bad revision. May be either a git or svn revision.')
- parser.add_option('-w', '--working_directory',
- type='str',
- default='..',
- help='A working directory to supply to the bisection '
- 'script, which will use it as the location to checkout '
- 'a copy of the chromium depot.')
-
- options, args = parser.parse_args()
- error_msg = ''
- if not options.good_revision:
- error_msg += 'Error: missing required parameter: --good_revision\n'
- if not options.bad_revision:
- error_msg += 'Error: missing required parameter: --bad_revision\n'
-
- if error_msg:
- print error_msg
- parser.print_help()
- return 1
-
- if 'android' not in options.browser_type and sys.platform.startswith('linux'):
- if not os.environ.get('CHROME_DEVEL_SANDBOX'):
- print 'SUID sandbox has not been setup.'\
- ' See https://code.google.com/p/chromium/wiki/'\
- 'LinuxSUIDSandboxDevelopment for more information.'
- return 1
-
- return _RunBisectionScript(options)
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/run-bisect-perf-regression.cfg b/chromium/tools/run-bisect-perf-regression.cfg
deleted file mode 100644
index 085a0fc58b7..00000000000
--- a/chromium/tools/run-bisect-perf-regression.cfg
+++ /dev/null
@@ -1,88 +0,0 @@
-# Copyright (c) 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.
-
-"""Config file for Run Performance Test Bisect Tool
-
-This script is intended for use by anyone that wants to run a remote bisection
-on a range of revisions to look for a performance regression. Modify the config
-below and add the revision range, performance command, and metric. You can then
-run a git try <bot>.
-
-Changes to this file should never be submitted.
-
-Args:
- 'command': This is the full command line to pass to the
- bisect-perf-regression.py script in order to execute the test.
- 'good_revision': An svn or git revision where the metric hadn't regressed yet.
- 'bad_revision': An svn or git revision sometime after the metric had
- regressed.
- 'metric': The name of the metric to parse out from the results of the
- performance test. You can retrieve the metric by looking at the stdio of
- the performance test. Look for lines of the format:
-
- RESULT <graph>: <trace>= <value> <units>
-
- The metric name is "<graph>/<trace>".
- 'repeat_count': The number of times to repeat the performance test.
- 'max_time_minutes': The script will attempt to run the performance test
- "repeat_count" times, unless it exceeds "max_time_minutes".
- 'truncate_percent': Discard the highest/lowest % values from performance test.
-
-Sample config:
-
-config = {
- 'command': './tools/perf/run_measurement --browser=release blink_perf third_party/WebKit/PerformanceTests/Layout/floats_50_100.html',
- 'good_revision': '233015',
- 'bad_revision': '233115',
- 'metric': 'floats_50_100/floats_50_100',
- 'repeat_count': '20',
- 'max_time_minutes': '20',
- 'truncate_percent': '25',
-}
-
-On Windows:
- - If you're calling a python script you will need to add "python" to
-the command:
-
-config = {
- 'command': 'python tools/perf/run_measurement -v --browser=release kraken',
- 'good_revision': '185319',
- 'bad_revision': '185364',
- 'metric': 'Total/Total',
- 'repeat_count': '20',
- 'max_time_minutes': '20',
- 'truncate_percent': '25',
-}
-
-
-On ChromeOS:
- - Script accepts either ChromeOS versions, or unix timestamps as revisions.
- - You don't need to specify --identity and --remote, they will be added to
- the command using the bot's BISECT_CROS_IP and BISECT_CROS_BOARD values.
-
-config = {
- 'command': './tools/perf/run_measurement -v '\
- '--browser=cros-chrome-guest '\
- 'dromaeo tools/perf/page_sets/dromaeo/jslibstylejquery.json',
- 'good_revision': '4086.0.0',
- 'bad_revision': '4087.0.0',
- 'metric': 'jslib/jslib',
- 'repeat_count': '20',
- 'max_time_minutes': '20',
- 'truncate_percent': '25',
-}
-
-"""
-
-config = {
- 'command': '',
- 'good_revision': '',
- 'bad_revision': '',
- 'metric': '',
- 'repeat_count':'',
- 'max_time_minutes': '',
- 'truncate_percent':'',
-}
-
-# Workaround git try issue, see crbug.com/257689
diff --git a/chromium/tools/run-bisect-perf-regression.py b/chromium/tools/run-bisect-perf-regression.py
deleted file mode 100755
index 8dceea82fc0..00000000000
--- a/chromium/tools/run-bisect-perf-regression.py
+++ /dev/null
@@ -1,424 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 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.
-
-"""Run Performance Test Bisect Tool
-
-This script is used by a trybot to run the src/tools/bisect-perf-regression.py
-script with the parameters specified in run-bisect-perf-regression.cfg. It will
-check out a copy of the depot in a subdirectory 'bisect' of the working
-directory provided, and run the bisect-perf-regression.py script there.
-
-"""
-
-import imp
-import optparse
-import os
-import subprocess
-import sys
-import traceback
-
-import bisect_utils
-bisect = imp.load_source('bisect-perf-regression',
- os.path.join(os.path.abspath(os.path.dirname(sys.argv[0])),
- 'bisect-perf-regression.py'))
-
-
-CROS_BOARD_ENV = 'BISECT_CROS_BOARD'
-CROS_IP_ENV = 'BISECT_CROS_IP'
-
-
-class Goma(object):
-
- def __init__(self, path_to_goma):
- self._abs_path_to_goma = None
- self._abs_path_to_goma_file = None
- if path_to_goma:
- self._abs_path_to_goma = os.path.abspath(path_to_goma)
- self._abs_path_to_goma_file = self._GetExecutablePath(
- self._abs_path_to_goma)
-
- def __enter__(self):
- if self._HasGOMAPath():
- self._SetupAndStart()
- return self
-
- def __exit__(self, *_):
- if self._HasGOMAPath():
- self._Stop()
-
- def _HasGOMAPath(self):
- return bool(self._abs_path_to_goma)
-
- def _GetExecutablePath(self, path_to_goma):
- if os.name == 'nt':
- return os.path.join(path_to_goma, 'goma_ctl.bat')
- else:
- return os.path.join(path_to_goma, 'goma_ctl.sh')
-
- def _SetupEnvVars(self):
- if os.name == 'nt':
- os.environ['CC'] = (os.path.join(self._abs_path_to_goma, 'gomacc.exe') +
- ' cl.exe')
- os.environ['CXX'] = (os.path.join(self._abs_path_to_goma, 'gomacc.exe') +
- ' cl.exe')
- else:
- os.environ['PATH'] = os.pathsep.join([self._abs_path_to_goma,
- os.environ['PATH']])
-
- def _SetupAndStart(self):
- """Sets up GOMA and launches it.
-
- Args:
- path_to_goma: Path to goma directory.
-
- Returns:
- True if successful."""
- self._SetupEnvVars()
-
- # Sometimes goma is lingering around if something went bad on a previous
- # run. Stop it before starting a new process. Can ignore the return code
- # since it will return an error if it wasn't running.
- self._Stop()
-
- if subprocess.call([self._abs_path_to_goma_file, 'start']):
- raise RuntimeError('GOMA failed to start.')
-
- def _Stop(self):
- subprocess.call([self._abs_path_to_goma_file, 'stop'])
-
-
-
-def _LoadConfigFile(path_to_file):
- """Attempts to load the specified config file as a module
- and grab the global config dict.
-
- Args:
- path_to_file: Path to the file.
-
- Returns:
- The config dict which should be formatted as follows:
- {'command': string, 'good_revision': string, 'bad_revision': string
- 'metric': string, etc...}.
- Returns None on failure.
- """
- try:
- local_vars = {}
- execfile(path_to_file, local_vars)
-
- return local_vars['config']
- except:
- print
- traceback.print_exc()
- print
- return {}
-
-
-def _OutputFailedResults(text_to_print):
- bisect_utils.OutputAnnotationStepStart('Results - Failed')
- print
- print text_to_print
- print
- bisect_utils.OutputAnnotationStepClosed()
-
-
-def _CreateBisectOptionsFromConfig(config):
- opts_dict = {}
- opts_dict['command'] = config['command']
- opts_dict['metric'] = config['metric']
-
- if config['repeat_count']:
- opts_dict['repeat_test_count'] = int(config['repeat_count'])
-
- if config['truncate_percent']:
- opts_dict['truncate_percent'] = int(config['truncate_percent'])
-
- if config['max_time_minutes']:
- opts_dict['max_time_minutes'] = int(config['max_time_minutes'])
-
- if config.has_key('use_goma'):
- opts_dict['use_goma'] = config['use_goma']
-
- opts_dict['build_preference'] = 'ninja'
- opts_dict['output_buildbot_annotations'] = True
-
- if '--browser=cros' in config['command']:
- opts_dict['target_platform'] = 'cros'
-
- if os.environ[CROS_BOARD_ENV] and os.environ[CROS_IP_ENV]:
- opts_dict['cros_board'] = os.environ[CROS_BOARD_ENV]
- opts_dict['cros_remote_ip'] = os.environ[CROS_IP_ENV]
- else:
- raise RuntimeError('Cros build selected, but BISECT_CROS_IP or'
- 'BISECT_CROS_BOARD undefined.')
- elif 'android' in config['command']:
- if 'android-chrome' in config['command']:
- opts_dict['target_platform'] = 'android-chrome'
- else:
- opts_dict['target_platform'] = 'android'
-
- return bisect.BisectOptions.FromDict(opts_dict)
-
-
-def _RunPerformanceTest(config, path_to_file):
- # Bisect script expects to be run from src
- os.chdir(os.path.join(path_to_file, '..'))
-
- bisect_utils.OutputAnnotationStepStart('Building With Patch')
-
- opts = _CreateBisectOptionsFromConfig(config)
- b = bisect.BisectPerformanceMetrics(None, opts)
-
- if bisect_utils.RunGClient(['runhooks']):
- raise RuntimeError('Failed to run gclient runhooks')
-
- if not b.BuildCurrentRevision('chromium'):
- raise RuntimeError('Patched version failed to build.')
-
- bisect_utils.OutputAnnotationStepClosed()
- bisect_utils.OutputAnnotationStepStart('Running With Patch')
-
- results_with_patch = b.RunPerformanceTestAndParseResults(
- opts.command, opts.metric, reset_on_first_run=True, results_label='Patch')
-
- if results_with_patch[1]:
- raise RuntimeError('Patched version failed to run performance test.')
-
- bisect_utils.OutputAnnotationStepClosed()
-
- bisect_utils.OutputAnnotationStepStart('Reverting Patch')
- if bisect_utils.RunGClient(['revert']):
- raise RuntimeError('Failed to run gclient runhooks')
- bisect_utils.OutputAnnotationStepClosed()
-
- bisect_utils.OutputAnnotationStepStart('Building Without Patch')
-
- if bisect_utils.RunGClient(['runhooks']):
- raise RuntimeError('Failed to run gclient runhooks')
-
- if not b.BuildCurrentRevision('chromium'):
- raise RuntimeError('Unpatched version failed to build.')
-
- bisect_utils.OutputAnnotationStepClosed()
- bisect_utils.OutputAnnotationStepStart('Running Without Patch')
-
- results_without_patch = b.RunPerformanceTestAndParseResults(
- opts.command, opts.metric, upload_on_last_run=True, results_label='ToT')
-
- if results_without_patch[1]:
- raise RuntimeError('Unpatched version failed to run performance test.')
-
- # Find the link to the cloud stored results file.
- output = results_without_patch[2]
- cloud_file_link = [t for t in output.splitlines()
- if 'storage.googleapis.com/chromium-telemetry/html-results/' in t]
- if cloud_file_link:
- # What we're getting here is basically "View online at http://..." so parse
- # out just the url portion.
- cloud_file_link = cloud_file_link[0]
- cloud_file_link = [t for t in cloud_file_link.split(' ')
- if 'storage.googleapis.com/chromium-telemetry/html-results/' in t]
- assert cloud_file_link, "Couldn't parse url from output."
- cloud_file_link = cloud_file_link[0]
- else:
- cloud_file_link = ''
-
- # Calculate the % difference in the means of the 2 runs.
- percent_diff_in_means = (results_with_patch[0]['mean'] /
- max(0.0001, results_without_patch[0]['mean'])) * 100.0 - 100.0
- std_err = bisect.CalculatePooledStandardError(
- [results_with_patch[0]['values'], results_without_patch[0]['values']])
-
- bisect_utils.OutputAnnotationStepClosed()
- bisect_utils.OutputAnnotationStepStart('Results - %.02f +- %0.02f delta' %
- (percent_diff_in_means, std_err))
- print ' %s %s %s' % (''.center(10, ' '), 'Mean'.center(20, ' '),
- 'Std. Error'.center(20, ' '))
- print ' %s %s %s' % ('Patch'.center(10, ' '),
- ('%.02f' % results_with_patch[0]['mean']).center(20, ' '),
- ('%.02f' % results_with_patch[0]['std_err']).center(20, ' '))
- print ' %s %s %s' % ('No Patch'.center(10, ' '),
- ('%.02f' % results_without_patch[0]['mean']).center(20, ' '),
- ('%.02f' % results_without_patch[0]['std_err']).center(20, ' '))
- if cloud_file_link:
- bisect_utils.OutputAnnotationStepLink('HTML Results', cloud_file_link)
- bisect_utils.OutputAnnotationStepClosed()
-
-
-def _SetupAndRunPerformanceTest(config, path_to_file, path_to_goma):
- """Attempts to build and run the current revision with and without the
- current patch, with the parameters passed in.
-
- Args:
- config: The config read from run-perf-test.cfg.
- path_to_file: Path to the bisect-perf-regression.py script.
- path_to_goma: Path to goma directory.
-
- Returns:
- 0 on success, otherwise 1.
- """
- try:
- with Goma(path_to_goma) as goma:
- config['use_goma'] = bool(path_to_goma)
- _RunPerformanceTest(config, path_to_file)
- return 0
- except RuntimeError, e:
- bisect_utils.OutputAnnotationStepClosed()
- _OutputFailedResults('Error: %s' % e.message)
- return 1
-
-
-def _RunBisectionScript(config, working_directory, path_to_file, path_to_goma,
- path_to_extra_src, dry_run):
- """Attempts to execute src/tools/bisect-perf-regression.py with the parameters
- passed in.
-
- Args:
- config: A dict containing the parameters to pass to the script.
- working_directory: A working directory to provide to the
- bisect-perf-regression.py script, where it will store it's own copy of
- the depot.
- path_to_file: Path to the bisect-perf-regression.py script.
- path_to_goma: Path to goma directory.
- path_to_extra_src: Path to extra source file.
- dry_run: Do a dry run, skipping sync, build, and performance testing steps.
-
- Returns:
- 0 on success, otherwise 1.
- """
- bisect_utils.OutputAnnotationStepStart('Config')
- print
- for k, v in config.iteritems():
- print ' %s : %s' % (k, v)
- print
- bisect_utils.OutputAnnotationStepClosed()
-
- cmd = ['python', os.path.join(path_to_file, 'bisect-perf-regression.py'),
- '-c', config['command'],
- '-g', config['good_revision'],
- '-b', config['bad_revision'],
- '-m', config['metric'],
- '--working_directory', working_directory,
- '--output_buildbot_annotations']
-
- if config['repeat_count']:
- cmd.extend(['-r', config['repeat_count']])
-
- if config['truncate_percent']:
- cmd.extend(['-t', config['truncate_percent']])
-
- if config['max_time_minutes']:
- cmd.extend(['--max_time_minutes', config['max_time_minutes']])
-
- cmd.extend(['--build_preference', 'ninja'])
-
- if '--browser=cros' in config['command']:
- cmd.extend(['--target_platform', 'cros'])
-
- if os.environ[CROS_BOARD_ENV] and os.environ[CROS_IP_ENV]:
- cmd.extend(['--cros_board', os.environ[CROS_BOARD_ENV]])
- cmd.extend(['--cros_remote_ip', os.environ[CROS_IP_ENV]])
- else:
- print 'Error: Cros build selected, but BISECT_CROS_IP or'\
- 'BISECT_CROS_BOARD undefined.'
- print
- return 1
-
- if 'android' in config['command']:
- if 'android-chrome' in config['command']:
- cmd.extend(['--target_platform', 'android-chrome'])
- else:
- cmd.extend(['--target_platform', 'android'])
-
- if path_to_goma:
- cmd.append('--use_goma')
-
- if path_to_extra_src:
- cmd.extend(['--extra_src', path_to_extra_src])
-
- if dry_run:
- cmd.extend(['--debug_ignore_build', '--debug_ignore_sync',
- '--debug_ignore_perf_test'])
- cmd = [str(c) for c in cmd]
-
- with Goma(path_to_goma) as goma:
- return_code = subprocess.call(cmd)
-
- if return_code:
- print 'Error: bisect-perf-regression.py returned with error %d' %\
- return_code
- print
-
- return return_code
-
-
-def main():
-
- usage = ('%prog [options] [-- chromium-options]\n'
- 'Used by a trybot to run the bisection script using the parameters'
- ' provided in the run-bisect-perf-regression.cfg file.')
-
- parser = optparse.OptionParser(usage=usage)
- parser.add_option('-w', '--working_directory',
- type='str',
- help='A working directory to supply to the bisection '
- 'script, which will use it as the location to checkout '
- 'a copy of the chromium depot.')
- parser.add_option('-p', '--path_to_goma',
- type='str',
- help='Path to goma directory. If this is supplied, goma '
- 'builds will be enabled.')
- parser.add_option('--extra_src',
- type='str',
- help='Path to extra source file. If this is supplied, '
- 'bisect script will use this to override default behavior.')
- parser.add_option('--dry_run',
- action="store_true",
- help='The script will perform the full bisect, but '
- 'without syncing, building, or running the performance '
- 'tests.')
- (opts, args) = parser.parse_args()
-
- path_to_current_directory = os.path.abspath(os.path.dirname(sys.argv[0]))
- path_to_bisect_cfg = os.path.join(path_to_current_directory,
- 'run-bisect-perf-regression.cfg')
-
- config = _LoadConfigFile(path_to_bisect_cfg)
-
- # Check if the config is empty
- config_has_values = [v for v in config.values() if v]
-
- if config and config_has_values:
- if not opts.working_directory:
- print 'Error: missing required parameter: --working_directory'
- print
- parser.print_help()
- return 1
-
- return _RunBisectionScript(config, opts.working_directory,
- path_to_current_directory, opts.path_to_goma, opts.extra_src,
- opts.dry_run)
- else:
- perf_cfg_files = ['run-perf-test.cfg', os.path.join('..', 'third_party',
- 'WebKit', 'Tools', 'run-perf-test.cfg')]
-
- for current_perf_cfg_file in perf_cfg_files:
- path_to_perf_cfg = os.path.join(
- os.path.abspath(os.path.dirname(sys.argv[0])), current_perf_cfg_file)
-
- config = _LoadConfigFile(path_to_perf_cfg)
- config_has_values = [v for v in config.values() if v]
-
- if config and config_has_values:
- return _SetupAndRunPerformanceTest(config, path_to_current_directory,
- opts.path_to_goma)
-
- print 'Error: Could not load config file. Double check your changes to '\
- 'run-bisect-perf-regression.cfg/run-perf-test.cfg for syntax errors.'
- print
- return 1
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/run-perf-test.cfg b/chromium/tools/run-perf-test.cfg
deleted file mode 100644
index 02c8d8cea83..00000000000
--- a/chromium/tools/run-perf-test.cfg
+++ /dev/null
@@ -1,77 +0,0 @@
-# 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.
-
-"""Config file for Run Performance Test Bot
-
-This script is intended for use by anyone that wants to run a remote performance
-test. Modify the config below and add the command to run the performance test,
-the metric you're interested in, and repeat/discard parameters. You can then
-run a git try <bot>.
-
-Changes to this file should never be submitted.
-
-Args:
- 'command': This is the full command line to pass to the
- bisect-perf-regression.py script in order to execute the test.
- 'metric': The name of the metric to parse out from the results of the
- performance test. You can retrieve the metric by looking at the stdio of
- the performance test. Look for lines of the format:
-
- RESULT <graph>: <trace>= <value> <units>
-
- The metric name is "<graph>/<trace>".
- 'repeat_count': The number of times to repeat the performance test.
- 'max_time_minutes': The script will attempt to run the performance test
- "repeat_count" times, unless it exceeds "max_time_minutes".
- 'truncate_percent': Discard the highest/lowest % values from performance test.
-
-Sample config:
-
-config = {
- 'command': './tools/perf/run_measurement --browser=release blink_perf third_party/WebKit/PerformanceTests/Layout/floats_50_100.html',
- 'metric': 'floats_50_100/floats_50_100',
- 'repeat_count': '20',
- 'max_time_minutes': '20',
- 'truncate_percent': '25',
-}
-
-On Windows:
- - If you're calling a python script you will need to add "python" to
-the command:
-
-config = {
- 'command': 'python tools/perf/run_measurement -v --browser=release kraken',
- 'metric': 'Total/Total',
- 'repeat_count': '20',
- 'max_time_minutes': '20',
- 'truncate_percent': '25',
-}
-
-
-On ChromeOS:
- - Script accepts either ChromeOS versions, or unix timestamps as revisions.
- - You don't need to specify --identity and --remote, they will be added to
- the command using the bot's BISECT_CROS_IP and BISECT_CROS_BOARD values.
-
-config = {
- 'command': './tools/perf/run_measurement -v '\
- '--browser=cros-chrome-guest '\
- 'dromaeo tools/perf/page_sets/dromaeo/jslibstylejquery.json',
- 'metric': 'jslib/jslib',
- 'repeat_count': '20',
- 'max_time_minutes': '20',
- 'truncate_percent': '25',
-}
-
-"""
-
-config = {
- 'command': '',
- 'metric': '',
- 'repeat_count': '',
- 'max_time_minutes': '',
- 'truncate_percent': '',
-}
-
-# Workaround git try issue, see crbug.com/257689
diff --git a/chromium/tools/safely-roll-blink.py b/chromium/tools/safely-roll-blink.py
deleted file mode 100755
index 581aecd5c6b..00000000000
--- a/chromium/tools/safely-roll-blink.py
+++ /dev/null
@@ -1,127 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-"""Generate a CL to roll Blink to the specified revision number and post
-it to Rietveld so that the CL will land automatically if it passes the
-commit-queue's checks.
-"""
-
-import logging
-import optparse
-import os
-import re
-import sys
-
-import find_depot_tools
-import scm
-import subprocess2
-
-
-def die_with_error(msg):
- print >> sys.stderr, msg
- sys.exit(1)
-
-
-def process_deps(path, new_rev, is_dry_run):
- """Update webkit_revision to |new_issue|.
-
- A bit hacky, could it be made better?
- """
- content = open(path).read()
- old_line = r'(\s+)"webkit_revision": "(\d+)",'
- new_line = r'\1"webkit_revision": "%d",' % new_rev
- new_content = re.sub(old_line, new_line, content, 1)
- old_rev = re.search(old_line, content).group(2)
- if not old_rev or new_content == content:
- die_with_error('Failed to update the DEPS file')
-
- if not is_dry_run:
- open(path, 'w').write(new_content)
- return old_rev
-
-
-def main():
- tool_dir = os.path.dirname(os.path.abspath(__file__))
- parser = optparse.OptionParser(usage='%prog [options] <new blink rev>')
- parser.add_option('-v', '--verbose', action='count', default=0)
- parser.add_option('--dry-run', action='store_true')
- parser.add_option('--commit', action='store_true', default=True,
- help='(default) Put change in commit queue on upload.')
- parser.add_option('--no-commit', action='store_false', dest='commit',
- help='Don\'t put change in commit queue on upload.')
- parser.add_option('-r', '--reviewers', default='',
- help='Add given users as either reviewers or TBR as'
- ' appropriate.')
- parser.add_option('--upstream', default='origin/master',
- help='(default "%default") Use given start point for change'
- ' to upload. For instance, if you use the old git workflow,'
- ' you might set it to "origin/trunk".')
- parser.add_option('--cc', help='CC email addresses for issue.')
-
- options, args = parser.parse_args()
- logging.basicConfig(
- level=
- [logging.WARNING, logging.INFO, logging.DEBUG][
- min(2, options.verbose)])
- if len(args) != 1:
- parser.print_help()
- exit(0)
-
- root_dir = os.path.dirname(tool_dir)
- os.chdir(root_dir)
-
- new_rev = int(args[0])
-
- # Silence the editor.
- os.environ['EDITOR'] = 'true'
-
- old_branch = scm.GIT.GetBranch(root_dir)
- if old_branch == 'blink_roll':
- parser.error(
- 'Please delete the branch blink_roll and move to a different branch')
-
- if not options.dry_run:
- subprocess2.check_output(
- ['git', 'checkout', '-b', 'blink_roll', options.upstream])
-
- try:
- old_rev = int(process_deps(os.path.join(root_dir, 'DEPS'), new_rev,
- options.dry_run))
- print 'Blink roll %s:%s' % (old_rev, new_rev)
-
- review_field = 'TBR' if options.commit else 'R'
- commit_msg = ('Blink roll %s:%s\n'
- '\n'
- 'http://build.chromium.org/f/chromium/perf/dashboard/ui/'
- 'changelog_blink.html?url=/trunk&range=%s:%s&mode=html'
- '\n'
- '%s=%s\n' % (old_rev, new_rev,
- old_rev+1, new_rev,
- review_field,
- options.reviewers))
-
- if options.dry_run:
- print 'Commit message: ' + commit_msg
- return 0
-
- subprocess2.check_output(['git', 'commit', '-m', commit_msg, 'DEPS'])
- subprocess2.check_call(['git', 'diff', options.upstream])
- upload_cmd = ['git', 'cl', 'upload']
- if options.commit:
- upload_cmd.append('--use-commit-queue')
- if options.reviewers:
- upload_cmd.append('--send-mail')
- if options.cc:
- upload_cmd.extend(['--cc', options.cc])
- subprocess2.check_call(upload_cmd)
- finally:
- if not options.dry_run:
- subprocess2.check_output(['git', 'checkout', old_branch])
- subprocess2.check_output(['git', 'branch', '-D', 'blink_roll'])
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/set_default_handler/DEPS b/chromium/tools/set_default_handler/DEPS
deleted file mode 100644
index 12a2df7a3fd..00000000000
--- a/chromium/tools/set_default_handler/DEPS
+++ /dev/null
@@ -1,4 +0,0 @@
-include_rules = [
- "+ui",
- "+win8/test",
-]
diff --git a/chromium/tools/set_default_handler/set_default_handler.gyp b/chromium/tools/set_default_handler/set_default_handler.gyp
index 64e5d3e364e..84c637ed353 100644
--- a/chromium/tools/set_default_handler/set_default_handler.gyp
+++ b/chromium/tools/set_default_handler/set_default_handler.gyp
@@ -11,9 +11,10 @@
'type': 'executable',
'dependencies': [
'../../base/base.gyp:base',
- '../../win8/win8.gyp:test_support_win8',
+ '../../ui/base/ui_base.gyp:ui_base',
'../../ui/gfx/gfx.gyp:gfx',
- '../../ui/ui.gyp:ui',
+ '../../ui/gfx/gfx.gyp:gfx_geometry',
+ '../../win8/win8.gyp:test_support_win8',
],
'include_dirs': [
'../..',
diff --git a/chromium/tools/set_default_handler/set_default_handler_main.cc b/chromium/tools/set_default_handler/set_default_handler_main.cc
deleted file mode 100644
index 98e50a985ee..00000000000
--- a/chromium/tools/set_default_handler/set_default_handler_main.cc
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright (c) 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.
-
-// Makes a given program ("Google Chrome" by default) the default handler for
-// some URL protocol ("http" by default) on Windows 8. These defaults can be
-// overridden via the --program and --protocol command line switches.
-
-#include <windows.h>
-
-#include "base/at_exit.h"
-#include "base/command_line.h"
-#include "base/logging.h"
-#include "base/strings/string16.h"
-#include "base/strings/string_util.h"
-#include "ui/base/win/atl_module.h"
-#include "win8/test/open_with_dialog_controller.h"
-
-namespace {
-
-const char kSwitchProgram[] = "program";
-const char kSwitchProtocol[] = "protocol";
-const wchar_t kDefaultProgram[] = L"Google Chrome";
-const wchar_t kDefaultProtocol[] = L"http";
-
-} // namespace
-
-extern "C"
-int wmain(int argc, wchar_t* argv[]) {
- // Initialize the commandline singleton from the environment.
- CommandLine::Init(0, NULL);
- // The exit manager is in charge of calling the dtors of singletons.
- base::AtExitManager exit_manager;
- logging::LoggingSettings settings;
- settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
- settings.dcheck_state =
- logging::ENABLE_DCHECK_FOR_NON_OFFICIAL_RELEASE_BUILDS;
- logging::InitLogging(settings);
- logging::SetMinLogLevel(logging::LOG_VERBOSE);
-
- ui::win::CreateATLModuleIfNeeded();
-
- CommandLine* command_line = CommandLine::ForCurrentProcess();
- string16 protocol(command_line->GetSwitchValueNative(kSwitchProtocol));
- if (protocol.empty())
- protocol = kDefaultProtocol;
-
- string16 program(command_line->GetSwitchValueNative(kSwitchProgram));
- if (program.empty())
- program = kDefaultProgram;
-
- std::vector<string16> choices;
- HRESULT result = S_OK;
- win8::OpenWithDialogController controller;
- result = controller.RunSynchronously(NULL, protocol, program, &choices);
-
- if (SUCCEEDED(result)) {
- printf("success\n");
- } else if (!choices.empty()) {
- printf("failed to set program. possible choices: %ls\n",
- JoinString(choices, L", ").c_str());
- } else {
- printf("failed with HRESULT: %0x08X\n", result);
- }
-
- return FAILED(result);
-}
diff --git a/chromium/tools/site_compare/command_line.py b/chromium/tools/site_compare/command_line.py
deleted file mode 100755
index de93d18ce0a..00000000000
--- a/chromium/tools/site_compare/command_line.py
+++ /dev/null
@@ -1,802 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""Parse a command line, retrieving a command and its arguments.
-
-Supports the concept of command line commands, each with its own set
-of arguments. Supports dependent arguments and mutually exclusive arguments.
-Basically, a better optparse. I took heed of epg's WHINE() in gvn.cmdline
-and dumped optparse in favor of something better.
-"""
-
-import os.path
-import re
-import string
-import sys
-import textwrap
-import types
-
-
-def IsString(var):
- """Little helper function to see if a variable is a string."""
- return type(var) in types.StringTypes
-
-
-class ParseError(Exception):
- """Encapsulates errors from parsing, string arg is description."""
- pass
-
-
-class Command(object):
- """Implements a single command."""
-
- def __init__(self, names, helptext, validator=None, impl=None):
- """Initializes Command from names and helptext, plus optional callables.
-
- Args:
- names: command name, or list of synonyms
- helptext: brief string description of the command
- validator: callable for custom argument validation
- Should raise ParseError if it wants
- impl: callable to be invoked when command is called
- """
- self.names = names
- self.validator = validator
- self.helptext = helptext
- self.impl = impl
- self.args = []
- self.required_groups = []
- self.arg_dict = {}
- self.positional_args = []
- self.cmdline = None
-
- class Argument(object):
- """Encapsulates an argument to a command."""
- VALID_TYPES = ['string', 'readfile', 'int', 'flag', 'coords']
- TYPES_WITH_VALUES = ['string', 'readfile', 'int', 'coords']
-
- def __init__(self, names, helptext, type, metaname,
- required, default, positional):
- """Command-line argument to a command.
-
- Args:
- names: argument name, or list of synonyms
- helptext: brief description of the argument
- type: type of the argument. Valid values include:
- string - a string
- readfile - a file which must exist and be available
- for reading
- int - an integer
- flag - an optional flag (bool)
- coords - (x,y) where x and y are ints
- metaname: Name to display for value in help, inferred if not
- specified
- required: True if argument must be specified
- default: Default value if not specified
- positional: Argument specified by location, not name
-
- Raises:
- ValueError: the argument name is invalid for some reason
- """
- if type not in Command.Argument.VALID_TYPES:
- raise ValueError("Invalid type: %r" % type)
-
- if required and default is not None:
- raise ValueError("required and default are mutually exclusive")
-
- if required and type == 'flag':
- raise ValueError("A required flag? Give me a break.")
-
- if metaname and type not in Command.Argument.TYPES_WITH_VALUES:
- raise ValueError("Type %r can't have a metaname" % type)
-
- # If no metaname is provided, infer it: use the alphabetical characters
- # of the last provided name
- if not metaname and type in Command.Argument.TYPES_WITH_VALUES:
- metaname = (
- names[-1].lstrip(string.punctuation + string.whitespace).upper())
-
- self.names = names
- self.helptext = helptext
- self.type = type
- self.required = required
- self.default = default
- self.positional = positional
- self.metaname = metaname
-
- self.mutex = [] # arguments that are mutually exclusive with
- # this one
- self.depends = [] # arguments that must be present for this
- # one to be valid
- self.present = False # has this argument been specified?
-
- def AddDependency(self, arg):
- """Makes this argument dependent on another argument.
-
- Args:
- arg: name of the argument this one depends on
- """
- if arg not in self.depends:
- self.depends.append(arg)
-
- def AddMutualExclusion(self, arg):
- """Makes this argument invalid if another is specified.
-
- Args:
- arg: name of the mutually exclusive argument.
- """
- if arg not in self.mutex:
- self.mutex.append(arg)
-
- def GetUsageString(self):
- """Returns a brief string describing the argument's usage."""
- if not self.positional:
- string = self.names[0]
- if self.type in Command.Argument.TYPES_WITH_VALUES:
- string += "="+self.metaname
- else:
- string = self.metaname
-
- if not self.required:
- string = "["+string+"]"
-
- return string
-
- def GetNames(self):
- """Returns a string containing a list of the arg's names."""
- if self.positional:
- return self.metaname
- else:
- return ", ".join(self.names)
-
- def GetHelpString(self, width=80, indent=5, names_width=20, gutter=2):
- """Returns a help string including help for all the arguments."""
- names = [" "*indent + line +" "*(names_width-len(line)) for line in
- textwrap.wrap(self.GetNames(), names_width)]
-
- helpstring = textwrap.wrap(self.helptext, width-indent-names_width-gutter)
-
- if len(names) < len(helpstring):
- names += [" "*(indent+names_width)]*(len(helpstring)-len(names))
-
- if len(helpstring) < len(names):
- helpstring += [""]*(len(names)-len(helpstring))
-
- return "\n".join([name_line + " "*gutter + help_line for
- name_line, help_line in zip(names, helpstring)])
-
- def __repr__(self):
- if self.present:
- string = '= %r' % self.value
- else:
- string = "(absent)"
-
- return "Argument %s '%s'%s" % (self.type, self.names[0], string)
-
- # end of nested class Argument
-
- def AddArgument(self, names, helptext, type="string", metaname=None,
- required=False, default=None, positional=False):
- """Command-line argument to a command.
-
- Args:
- names: argument name, or list of synonyms
- helptext: brief description of the argument
- type: type of the argument
- metaname: Name to display for value in help, inferred if not
- required: True if argument must be specified
- default: Default value if not specified
- positional: Argument specified by location, not name
-
- Raises:
- ValueError: the argument already exists or is invalid
-
- Returns:
- The newly-created argument
- """
- if IsString(names): names = [names]
-
- names = [name.lower() for name in names]
-
- for name in names:
- if name in self.arg_dict:
- raise ValueError("%s is already an argument"%name)
-
- if (positional and required and
- [arg for arg in self.args if arg.positional] and
- not [arg for arg in self.args if arg.positional][-1].required):
- raise ValueError(
- "A required positional argument may not follow an optional one.")
-
- arg = Command.Argument(names, helptext, type, metaname,
- required, default, positional)
-
- self.args.append(arg)
-
- for name in names:
- self.arg_dict[name] = arg
-
- return arg
-
- def GetArgument(self, name):
- """Return an argument from a name."""
- return self.arg_dict[name.lower()]
-
- def AddMutualExclusion(self, args):
- """Specifies that a list of arguments are mutually exclusive."""
- if len(args) < 2:
- raise ValueError("At least two arguments must be specified.")
-
- args = [arg.lower() for arg in args]
-
- for index in xrange(len(args)-1):
- for index2 in xrange(index+1, len(args)):
- self.arg_dict[args[index]].AddMutualExclusion(self.arg_dict[args[index2]])
-
- def AddDependency(self, dependent, depends_on):
- """Specifies that one argument may only be present if another is.
-
- Args:
- dependent: the name of the dependent argument
- depends_on: the name of the argument on which it depends
- """
- self.arg_dict[dependent.lower()].AddDependency(
- self.arg_dict[depends_on.lower()])
-
- def AddMutualDependency(self, args):
- """Specifies that a list of arguments are all mutually dependent."""
- if len(args) < 2:
- raise ValueError("At least two arguments must be specified.")
-
- args = [arg.lower() for arg in args]
-
- for (arg1, arg2) in [(arg1, arg2) for arg1 in args for arg2 in args]:
- if arg1 == arg2: continue
- self.arg_dict[arg1].AddDependency(self.arg_dict[arg2])
-
- def AddRequiredGroup(self, args):
- """Specifies that at least one of the named arguments must be present."""
- if len(args) < 2:
- raise ValueError("At least two arguments must be in a required group.")
-
- args = [self.arg_dict[arg.lower()] for arg in args]
-
- self.required_groups.append(args)
-
- def ParseArguments(self):
- """Given a command line, parse and validate the arguments."""
-
- # reset all the arguments before we parse
- for arg in self.args:
- arg.present = False
- arg.value = None
-
- self.parse_errors = []
-
- # look for arguments remaining on the command line
- while len(self.cmdline.rargs):
- try:
- self.ParseNextArgument()
- except ParseError, e:
- self.parse_errors.append(e.args[0])
-
- # after all the arguments are parsed, check for problems
- for arg in self.args:
- if not arg.present and arg.required:
- self.parse_errors.append("'%s': required parameter was missing"
- % arg.names[0])
-
- if not arg.present and arg.default:
- arg.present = True
- arg.value = arg.default
-
- if arg.present:
- for mutex in arg.mutex:
- if mutex.present:
- self.parse_errors.append(
- "'%s', '%s': arguments are mutually exclusive" %
- (arg.argstr, mutex.argstr))
-
- for depend in arg.depends:
- if not depend.present:
- self.parse_errors.append("'%s': '%s' must be specified as well" %
- (arg.argstr, depend.names[0]))
-
- # check for required groups
- for group in self.required_groups:
- if not [arg for arg in group if arg.present]:
- self.parse_errors.append("%s: at least one must be present" %
- (", ".join(["'%s'" % arg.names[-1] for arg in group])))
-
- # if we have any validators, invoke them
- if not self.parse_errors and self.validator:
- try:
- self.validator(self)
- except ParseError, e:
- self.parse_errors.append(e.args[0])
-
- # Helper methods so you can treat the command like a dict
- def __getitem__(self, key):
- arg = self.arg_dict[key.lower()]
-
- if arg.type == 'flag':
- return arg.present
- else:
- return arg.value
-
- def __iter__(self):
- return [arg for arg in self.args if arg.present].__iter__()
-
- def ArgumentPresent(self, key):
- """Tests if an argument exists and has been specified."""
- return key.lower() in self.arg_dict and self.arg_dict[key.lower()].present
-
- def __contains__(self, key):
- return self.ArgumentPresent(key)
-
- def ParseNextArgument(self):
- """Find the next argument in the command line and parse it."""
- arg = None
- value = None
- argstr = self.cmdline.rargs.pop(0)
-
- # First check: is this a literal argument?
- if argstr.lower() in self.arg_dict:
- arg = self.arg_dict[argstr.lower()]
- if arg.type in Command.Argument.TYPES_WITH_VALUES:
- if len(self.cmdline.rargs):
- value = self.cmdline.rargs.pop(0)
-
- # Second check: is this of the form "arg=val" or "arg:val"?
- if arg is None:
- delimiter_pos = -1
-
- for delimiter in [':', '=']:
- pos = argstr.find(delimiter)
- if pos >= 0:
- if delimiter_pos < 0 or pos < delimiter_pos:
- delimiter_pos = pos
-
- if delimiter_pos >= 0:
- testarg = argstr[:delimiter_pos]
- testval = argstr[delimiter_pos+1:]
-
- if testarg.lower() in self.arg_dict:
- arg = self.arg_dict[testarg.lower()]
- argstr = testarg
- value = testval
-
- # Third check: does this begin an argument?
- if arg is None:
- for key in self.arg_dict.iterkeys():
- if (len(key) < len(argstr) and
- self.arg_dict[key].type in Command.Argument.TYPES_WITH_VALUES and
- argstr[:len(key)].lower() == key):
- value = argstr[len(key):]
- argstr = argstr[:len(key)]
- arg = self.arg_dict[argstr]
-
- # Fourth check: do we have any positional arguments available?
- if arg is None:
- for positional_arg in [
- testarg for testarg in self.args if testarg.positional]:
- if not positional_arg.present:
- arg = positional_arg
- value = argstr
- argstr = positional_arg.names[0]
- break
-
- # Push the retrieved argument/value onto the largs stack
- if argstr: self.cmdline.largs.append(argstr)
- if value: self.cmdline.largs.append(value)
-
- # If we've made it this far and haven't found an arg, give up
- if arg is None:
- raise ParseError("Unknown argument: '%s'" % argstr)
-
- # Convert the value, if necessary
- if arg.type in Command.Argument.TYPES_WITH_VALUES and value is None:
- raise ParseError("Argument '%s' requires a value" % argstr)
-
- if value is not None:
- value = self.StringToValue(value, arg.type, argstr)
-
- arg.argstr = argstr
- arg.value = value
- arg.present = True
-
- # end method ParseNextArgument
-
- def StringToValue(self, value, type, argstr):
- """Convert a string from the command line to a value type."""
- try:
- if type == 'string':
- pass # leave it be
-
- elif type == 'int':
- try:
- value = int(value)
- except ValueError:
- raise ParseError
-
- elif type == 'readfile':
- if not os.path.isfile(value):
- raise ParseError("'%s': '%s' does not exist" % (argstr, value))
-
- elif type == 'coords':
- try:
- value = [int(val) for val in
- re.match("\(\s*(\d+)\s*\,\s*(\d+)\s*\)\s*\Z", value).
- groups()]
- except AttributeError:
- raise ParseError
-
- else:
- raise ValueError("Unknown type: '%s'" % type)
-
- except ParseError, e:
- # The bare exception is raised in the generic case; more specific errors
- # will arrive with arguments and should just be reraised
- if not e.args:
- e = ParseError("'%s': unable to convert '%s' to type '%s'" %
- (argstr, value, type))
- raise e
-
- return value
-
- def SortArgs(self):
- """Returns a method that can be passed to sort() to sort arguments."""
-
- def ArgSorter(arg1, arg2):
- """Helper for sorting arguments in the usage string.
-
- Positional arguments come first, then required arguments,
- then optional arguments. Pylint demands this trivial function
- have both Args: and Returns: sections, sigh.
-
- Args:
- arg1: the first argument to compare
- arg2: the second argument to compare
-
- Returns:
- -1 if arg1 should be sorted first, +1 if it should be sorted second,
- and 0 if arg1 and arg2 have the same sort level.
- """
- return ((arg2.positional-arg1.positional)*2 +
- (arg2.required-arg1.required))
- return ArgSorter
-
- def GetUsageString(self, width=80, name=None):
- """Gets a string describing how the command is used."""
- if name is None: name = self.names[0]
-
- initial_indent = "Usage: %s %s " % (self.cmdline.prog, name)
- subsequent_indent = " " * len(initial_indent)
-
- sorted_args = self.args[:]
- sorted_args.sort(self.SortArgs())
-
- return textwrap.fill(
- " ".join([arg.GetUsageString() for arg in sorted_args]), width,
- initial_indent=initial_indent,
- subsequent_indent=subsequent_indent)
-
- def GetHelpString(self, width=80):
- """Returns a list of help strings for all this command's arguments."""
- sorted_args = self.args[:]
- sorted_args.sort(self.SortArgs())
-
- return "\n".join([arg.GetHelpString(width) for arg in sorted_args])
-
- # end class Command
-
-
-class CommandLine(object):
- """Parse a command line, extracting a command and its arguments."""
-
- def __init__(self):
- self.commands = []
- self.cmd_dict = {}
-
- # Add the help command to the parser
- help_cmd = self.AddCommand(["help", "--help", "-?", "-h"],
- "Displays help text for a command",
- ValidateHelpCommand,
- DoHelpCommand)
-
- help_cmd.AddArgument(
- "command", "Command to retrieve help for", positional=True)
- help_cmd.AddArgument(
- "--width", "Width of the output", type='int', default=80)
-
- self.Exit = sys.exit # override this if you don't want the script to halt
- # on error or on display of help
-
- self.out = sys.stdout # override these if you want to redirect
- self.err = sys.stderr # output or error messages
-
- def AddCommand(self, names, helptext, validator=None, impl=None):
- """Add a new command to the parser.
-
- Args:
- names: command name, or list of synonyms
- helptext: brief string description of the command
- validator: method to validate a command's arguments
- impl: callable to be invoked when command is called
-
- Raises:
- ValueError: raised if command already added
-
- Returns:
- The new command
- """
- if IsString(names): names = [names]
-
- for name in names:
- if name in self.cmd_dict:
- raise ValueError("%s is already a command"%name)
-
- cmd = Command(names, helptext, validator, impl)
- cmd.cmdline = self
-
- self.commands.append(cmd)
- for name in names:
- self.cmd_dict[name.lower()] = cmd
-
- return cmd
-
- def GetUsageString(self):
- """Returns simple usage instructions."""
- return "Type '%s help' for usage." % self.prog
-
- def ParseCommandLine(self, argv=None, prog=None, execute=True):
- """Does the work of parsing a command line.
-
- Args:
- argv: list of arguments, defaults to sys.args[1:]
- prog: name of the command, defaults to the base name of the script
- execute: if false, just parse, don't invoke the 'impl' member
-
- Returns:
- The command that was executed
- """
- if argv is None: argv = sys.argv[1:]
- if prog is None: prog = os.path.basename(sys.argv[0]).split('.')[0]
-
- # Store off our parameters, we may need them someday
- self.argv = argv
- self.prog = prog
-
- # We shouldn't be invoked without arguments, that's just lame
- if not len(argv):
- self.out.writelines(self.GetUsageString())
- self.Exit()
- return None # in case the client overrides Exit
-
- # Is it a valid command?
- self.command_string = argv[0].lower()
- if not self.command_string in self.cmd_dict:
- self.err.write("Unknown command: '%s'\n\n" % self.command_string)
- self.out.write(self.GetUsageString())
- self.Exit()
- return None # in case the client overrides Exit
-
- self.command = self.cmd_dict[self.command_string]
-
- # "rargs" = remaining (unparsed) arguments
- # "largs" = already parsed, "left" of the read head
- self.rargs = argv[1:]
- self.largs = []
-
- # let the command object do the parsing
- self.command.ParseArguments()
-
- if self.command.parse_errors:
- # there were errors, output the usage string and exit
- self.err.write(self.command.GetUsageString()+"\n\n")
- self.err.write("\n".join(self.command.parse_errors))
- self.err.write("\n\n")
-
- self.Exit()
-
- elif execute and self.command.impl:
- self.command.impl(self.command)
-
- return self.command
-
- def __getitem__(self, key):
- return self.cmd_dict[key]
-
- def __iter__(self):
- return self.cmd_dict.__iter__()
-
-
-def ValidateHelpCommand(command):
- """Checks to make sure an argument to 'help' is a valid command."""
- if 'command' in command and command['command'] not in command.cmdline:
- raise ParseError("'%s': unknown command" % command['command'])
-
-
-def DoHelpCommand(command):
- """Executed when the command is 'help'."""
- out = command.cmdline.out
- width = command['--width']
-
- if 'command' not in command:
- out.write(command.GetUsageString())
- out.write("\n\n")
-
- indent = 5
- gutter = 2
-
- command_width = (
- max([len(cmd.names[0]) for cmd in command.cmdline.commands]) + gutter)
-
- for cmd in command.cmdline.commands:
- cmd_name = cmd.names[0]
-
- initial_indent = (" "*indent + cmd_name + " "*
- (command_width+gutter-len(cmd_name)))
- subsequent_indent = " "*(indent+command_width+gutter)
-
- out.write(textwrap.fill(cmd.helptext, width,
- initial_indent=initial_indent,
- subsequent_indent=subsequent_indent))
- out.write("\n")
-
- out.write("\n")
-
- else:
- help_cmd = command.cmdline[command['command']]
-
- out.write(textwrap.fill(help_cmd.helptext, width))
- out.write("\n\n")
- out.write(help_cmd.GetUsageString(width=width))
- out.write("\n\n")
- out.write(help_cmd.GetHelpString(width=width))
- out.write("\n")
-
- command.cmdline.Exit()
-
-
-def main():
- # If we're invoked rather than imported, run some tests
- cmdline = CommandLine()
-
- # Since we're testing, override Exit()
- def TestExit():
- pass
- cmdline.Exit = TestExit
-
- # Actually, while we're at it, let's override error output too
- cmdline.err = open(os.path.devnull, "w")
-
- test = cmdline.AddCommand(["test", "testa", "testb"], "test command")
- test.AddArgument(["-i", "--int", "--integer", "--optint", "--optionalint"],
- "optional integer parameter", type='int')
- test.AddArgument("--reqint", "required integer parameter", type='int',
- required=True)
- test.AddArgument("pos1", "required positional argument", positional=True,
- required=True)
- test.AddArgument("pos2", "optional positional argument", positional=True)
- test.AddArgument("pos3", "another optional positional arg",
- positional=True)
-
- # mutually dependent arguments
- test.AddArgument("--mutdep1", "mutually dependent parameter 1")
- test.AddArgument("--mutdep2", "mutually dependent parameter 2")
- test.AddArgument("--mutdep3", "mutually dependent parameter 3")
- test.AddMutualDependency(["--mutdep1", "--mutdep2", "--mutdep3"])
-
- # mutually exclusive arguments
- test.AddArgument("--mutex1", "mutually exclusive parameter 1")
- test.AddArgument("--mutex2", "mutually exclusive parameter 2")
- test.AddArgument("--mutex3", "mutually exclusive parameter 3")
- test.AddMutualExclusion(["--mutex1", "--mutex2", "--mutex3"])
-
- # dependent argument
- test.AddArgument("--dependent", "dependent argument")
- test.AddDependency("--dependent", "--int")
-
- # other argument types
- test.AddArgument("--file", "filename argument", type='readfile')
- test.AddArgument("--coords", "coordinate argument", type='coords')
- test.AddArgument("--flag", "flag argument", type='flag')
-
- test.AddArgument("--req1", "part of a required group", type='flag')
- test.AddArgument("--req2", "part 2 of a required group", type='flag')
-
- test.AddRequiredGroup(["--req1", "--req2"])
-
- # a few failure cases
- exception_cases = """
- test.AddArgument("failpos", "can't have req'd pos arg after opt",
- positional=True, required=True)
-+++
- test.AddArgument("--int", "this argument already exists")
-+++
- test.AddDependency("--int", "--doesntexist")
-+++
- test.AddMutualDependency(["--doesntexist", "--mutdep2"])
-+++
- test.AddMutualExclusion(["--doesntexist", "--mutex2"])
-+++
- test.AddArgument("--reqflag", "required flag", required=True, type='flag')
-+++
- test.AddRequiredGroup(["--req1", "--doesntexist"])
-"""
- for exception_case in exception_cases.split("+++"):
- try:
- exception_case = exception_case.strip()
- exec exception_case # yes, I'm using exec, it's just for a test.
- except ValueError:
- # this is expected
- pass
- except KeyError:
- # ...and so is this
- pass
- else:
- print ("FAILURE: expected an exception for '%s'"
- " and didn't get it" % exception_case)
-
- # Let's do some parsing! first, the minimal success line:
- MIN = "test --reqint 123 param1 --req1 "
-
- # tuples of (command line, expected error count)
- test_lines = [
- ("test --int 3 foo --req1", 1), # missing required named parameter
- ("test --reqint 3 --req1", 1), # missing required positional parameter
- (MIN, 0), # success!
- ("test param1 --reqint 123 --req1", 0), # success, order shouldn't matter
- ("test param1 --reqint 123 --req2", 0), # success, any of required group ok
- (MIN+"param2", 0), # another positional parameter is okay
- (MIN+"param2 param3", 0), # and so are three
- (MIN+"param2 param3 param4", 1), # but four are just too many
- (MIN+"--int", 1), # where's the value?
- (MIN+"--int 456", 0), # this is fine
- (MIN+"--int456", 0), # as is this
- (MIN+"--int:456", 0), # and this
- (MIN+"--int=456", 0), # and this
- (MIN+"--file c:\\windows\\system32\\kernel32.dll", 0), # yup
- (MIN+"--file c:\\thisdoesntexist", 1), # nope
- (MIN+"--mutdep1 a", 2), # no!
- (MIN+"--mutdep2 b", 2), # also no!
- (MIN+"--mutdep3 c", 2), # dream on!
- (MIN+"--mutdep1 a --mutdep2 b", 2), # almost!
- (MIN+"--mutdep1 a --mutdep2 b --mutdep3 c", 0), # yes
- (MIN+"--mutex1 a", 0), # yes
- (MIN+"--mutex2 b", 0), # yes
- (MIN+"--mutex3 c", 0), # fine
- (MIN+"--mutex1 a --mutex2 b", 1), # not fine
- (MIN+"--mutex1 a --mutex2 b --mutex3 c", 3), # even worse
- (MIN+"--dependent 1", 1), # no
- (MIN+"--dependent 1 --int 2", 0), # ok
- (MIN+"--int abc", 1), # bad type
- (MIN+"--coords abc", 1), # also bad
- (MIN+"--coords (abc)", 1), # getting warmer
- (MIN+"--coords (abc,def)", 1), # missing something
- (MIN+"--coords (123)", 1), # ooh, so close
- (MIN+"--coords (123,def)", 1), # just a little farther
- (MIN+"--coords (123,456)", 0), # finally!
- ("test --int 123 --reqint=456 foo bar --coords(42,88) baz --req1", 0)
- ]
-
- badtests = 0
-
- for (test, expected_failures) in test_lines:
- cmdline.ParseCommandLine([x.strip() for x in test.strip().split(" ")])
-
- if not len(cmdline.command.parse_errors) == expected_failures:
- print "FAILED:\n issued: '%s'\n expected: %d\n received: %d\n\n" % (
- test, expected_failures, len(cmdline.command.parse_errors))
- badtests += 1
-
- print "%d failed out of %d tests" % (badtests, len(test_lines))
-
- cmdline.ParseCommandLine(["help", "test"])
-
-
-if __name__ == "__main__":
- sys.exit(main())
diff --git a/chromium/tools/site_compare/commands/__init__.py b/chromium/tools/site_compare/commands/__init__.py
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/chromium/tools/site_compare/commands/__init__.py
+++ /dev/null
diff --git a/chromium/tools/site_compare/commands/compare2.py b/chromium/tools/site_compare/commands/compare2.py
deleted file mode 100644
index 7e15559badb..00000000000
--- a/chromium/tools/site_compare/commands/compare2.py
+++ /dev/null
@@ -1,170 +0,0 @@
-# Copyright (c) 2011 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.
-
-"""SiteCompare command to invoke the same page in two versions of a browser.
-
-Does the easiest compatibility test: equality comparison between two different
-versions of the same browser. Invoked with a series of command line options
-that specify which URLs to check, which browser to use, where to store results,
-etc.
-"""
-
-import os # Functions for walking the directory tree
-import tempfile # Get a temporary directory to hold intermediates
-
-import command_line
-import drivers # Functions for driving keyboard/mouse/windows, OS-specific
-import operators # Functions that, given two bitmaps as input, produce
- # output depending on the performance of an operation
-import scrapers # Functions that know how to capture a render from
- # particular browsers
-
-
-def CreateCommand(cmdline):
- """Inserts the command and arguments into a command line for parsing."""
- cmd = cmdline.AddCommand(
- ["compare2"],
- "Compares the output of two browsers on the same URL or list of URLs",
- ValidateCompare2,
- ExecuteCompare2)
-
- cmd.AddArgument(
- ["-b1", "--browser1"], "Full path to first browser's executable",
- type="readfile", metaname="PATH", required=True)
- cmd.AddArgument(
- ["-b2", "--browser2"], "Full path to second browser's executable",
- type="readfile", metaname="PATH", required=True)
- cmd.AddArgument(
- ["-b", "--browser"], "Which browser to use", type="string",
- default="chrome")
- cmd.AddArgument(
- ["-b1v", "--browser1ver"], "Version of first browser", metaname="VERSION")
- cmd.AddArgument(
- ["-b2v", "--browser2ver"], "Version of second browser", metaname="VERSION")
- cmd.AddArgument(
- ["-b1n", "--browser1name"], "Optional name for first browser (used in "
- "directory to hold intermediate files)", metaname="NAME")
- cmd.AddArgument(
- ["-b2n", "--browser2name"], "Optional name for second browser (used in "
- "directory to hold intermediate files)", metaname="NAME")
- cmd.AddArgument(
- ["-o", "--outdir"], "Directory to store scrape files", metaname="DIR")
- cmd.AddArgument(
- ["-u", "--url"], "URL to compare")
- cmd.AddArgument(
- ["-l", "--list"], "List of URLs to compare", type="readfile")
- cmd.AddMutualExclusion(["--url", "--list"])
- cmd.AddArgument(
- ["-s", "--startline"], "First line of URL list", type="int")
- cmd.AddArgument(
- ["-e", "--endline"], "Last line of URL list (exclusive)", type="int")
- cmd.AddArgument(
- ["-c", "--count"], "Number of lines of URL file to use", type="int")
- cmd.AddDependency("--startline", "--list")
- cmd.AddRequiredGroup(["--url", "--list"])
- cmd.AddDependency("--endline", "--list")
- cmd.AddDependency("--count", "--list")
- cmd.AddMutualExclusion(["--count", "--endline"])
- cmd.AddDependency("--count", "--startline")
- cmd.AddArgument(
- ["-t", "--timeout"], "Amount of time (seconds) to wait for browser to "
- "finish loading",
- type="int", default=60)
- cmd.AddArgument(
- ["-log", "--logfile"], "File to write output", type="string", required=True)
- cmd.AddArgument(
- ["-sz", "--size"], "Browser window size", default=(800, 600), type="coords")
- cmd.AddArgument(
- ["-m", "--maskdir"], "Path that holds masks to use for comparison")
- cmd.AddArgument(
- ["-d", "--diffdir"], "Path to hold the difference of comparisons that fail")
-
-
-def ValidateCompare2(command):
- """Validate the arguments to compare2. Raises ParseError if failed."""
- executables = [".exe", ".com", ".bat"]
- if (os.path.splitext(command["--browser1"])[1].lower() not in executables or
- os.path.splitext(command["--browser2"])[1].lower() not in executables):
- raise command_line.ParseError("Browser filename must be an executable")
-
-
-def ExecuteCompare2(command):
- """Executes the Compare2 command."""
- if command["--url"]:
- url_list = [command["--url"]]
- else:
- startline = command["--startline"]
- if command["--count"]:
- endline = startline+command["--count"]
- else:
- endline = command["--endline"]
- url_list = [url.strip() for url in
- open(command["--list"], "r").readlines()[startline:endline]]
-
- log_file = open(command["--logfile"], "w")
-
- outdir = command["--outdir"]
- if not outdir: outdir = tempfile.gettempdir()
-
- scrape_info_list = []
-
- class ScrapeInfo(object):
- """Helper class to hold information about a scrape."""
- __slots__ = ["browser_path", "scraper", "outdir", "result"]
-
- for index in xrange(1, 3):
- scrape_info = ScrapeInfo()
- scrape_info.browser_path = command["--browser%d" % index]
- scrape_info.scraper = scrapers.GetScraper(
- (command["--browser"], command["--browser%dver" % index]))
-
- if command["--browser%dname" % index]:
- scrape_info.outdir = os.path.join(outdir,
- command["--browser%dname" % index])
- else:
- scrape_info.outdir = os.path.join(outdir, str(index))
-
- drivers.windowing.PreparePath(scrape_info.outdir)
- scrape_info_list.append(scrape_info)
-
- compare = operators.GetOperator("equals_with_mask")
-
- for url in url_list:
- success = True
-
- for scrape_info in scrape_info_list:
- scrape_info.result = scrape_info.scraper.Scrape(
- [url], scrape_info.outdir, command["--size"], (0, 0),
- command["--timeout"], path=scrape_info.browser_path)
-
- if not scrape_info.result:
- scrape_info.result = "success"
- else:
- success = False
-
- result = "unknown"
-
- if success:
- result = "equal"
-
- file1 = drivers.windowing.URLtoFilename(
- url, scrape_info_list[0].outdir, ".bmp")
- file2 = drivers.windowing.URLtoFilename(
- url, scrape_info_list[1].outdir, ".bmp")
-
- comparison_result = compare.Compare(file1, file2,
- maskdir=command["--maskdir"])
-
- if comparison_result is not None:
- result = "not-equal"
-
- if command["--diffdir"]:
- comparison_result[1].save(
- drivers.windowing.URLtoFilename(url, command["--diffdir"], ".bmp"))
-
- # TODO(jhaas): maybe use the logging module rather than raw file writes
- log_file.write("%s %s %s %s\n" % (url,
- scrape_info_list[0].result,
- scrape_info_list[1].result,
- result))
diff --git a/chromium/tools/site_compare/commands/maskmaker.py b/chromium/tools/site_compare/commands/maskmaker.py
deleted file mode 100644
index 8aeefcbf005..00000000000
--- a/chromium/tools/site_compare/commands/maskmaker.py
+++ /dev/null
@@ -1,272 +0,0 @@
-# Copyright (c) 2011 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.
-
-"""Component for automatically creating masks of changing areas of a website.
-
-Works by repeated invokation of a browser and scraping of the resulting page.
-Areas that differ will be added to the auto-generated mask. The mask generator
-considers the mask complete when further scrapes fail to produce any differences
-in the mask.
-"""
-
-import os # Functions for walking the directory tree
-import tempfile # Get a temporary directory to hold intermediates
-import time # Used for sleep() and naming masks by time
-
-import command_line
-import drivers
-from PIL import Image
-from PIL import ImageChops
-import scrapers
-
-
-def CreateCommand(cmdline):
- """Inserts the command and arguments into a command line for parsing."""
- cmd = cmdline.AddCommand(
- ["maskmaker"],
- "Automatically generates a mask from a list of URLs",
- ValidateMaskmaker,
- ExecuteMaskmaker)
-
- cmd.AddArgument(
- ["-bp", "--browserpath"], "Full path to browser's executable",
- type="readfile", metaname="PATH")
- cmd.AddArgument(
- ["-b", "--browser"], "Which browser to use", type="string",
- default="chrome")
- cmd.AddArgument(
- ["-bv", "--browserver"], "Version of the browser", metaname="VERSION")
- cmd.AddArgument(
- ["-o", "--outdir"], "Directory to store generated masks", metaname="DIR",
- required=True)
- cmd.AddArgument(
- ["-u", "--url"], "URL to compare")
- cmd.AddArgument(
- ["-l", "--list"], "List of URLs to compare", type="readfile")
- cmd.AddMutualExclusion(["--url", "--list"])
- cmd.AddArgument(
- ["-s", "--startline"], "First line of URL list", type="int")
- cmd.AddArgument(
- ["-e", "--endline"], "Last line of URL list (exclusive)", type="int")
- cmd.AddArgument(
- ["-c", "--count"], "Number of lines of URL file to use", type="int")
- cmd.AddDependency("--startline", "--list")
- cmd.AddRequiredGroup(["--url", "--list"])
- cmd.AddDependency("--endline", "--list")
- cmd.AddDependency("--count", "--list")
- cmd.AddMutualExclusion(["--count", "--endline"])
- cmd.AddDependency("--count", "--startline")
- cmd.AddArgument(
- ["-t", "--timeout"], "Amount of time (seconds) to wait for browser to "
- "finish loading",
- type="int", default=60)
- cmd.AddArgument(
- ["-w", "--wait"],
- "Amount of time (in seconds) to wait between successive scrapes",
- type="int", default=60)
- cmd.AddArgument(
- ["-sc", "--scrapes"],
- "Number of successive scrapes which must result in no change to a mask "
- "before mask creation is considered complete", type="int", default=10)
- cmd.AddArgument(
- ["-sz", "--size"], "Browser window size", default=(800, 600), type="coords")
- cmd.AddArgument(["-sd", "--scrapedir"], "Directory to store scrapes")
- cmd.AddArgument(
- ["-gu", "--giveup"],
- "Number of times to scrape before giving up", type="int", default=50)
- cmd.AddArgument(
- ["-th", "--threshhold"],
- "Percentage of different pixels (0-100) above which the scrape will be"
- "discarded and the mask not updated.", type="int", default=100)
- cmd.AddArgument(
- ["--er", "--errors"],
- "Number of times a scrape can fail before giving up on the URL.",
- type="int", default=1)
-
-
-def ValidateMaskmaker(command):
- """Validate the arguments to maskmaker. Raises ParseError if failed."""
- executables = [".exe", ".com", ".bat"]
- if command["--browserpath"]:
- if os.path.splitext(command["--browserpath"])[1].lower() not in executables:
- raise command_line.ParseError("Browser filename must be an executable")
-
-
-def ExecuteMaskmaker(command):
- """Performs automatic mask generation."""
-
- # Get the list of URLs to generate masks for
- class MaskmakerURL(object):
- """Helper class for holding information about a URL passed to maskmaker."""
- __slots__ = ['url', 'consecutive_successes', 'errors']
- def __init__(self, url):
- self.url = url
- self.consecutive_successes = 0
- self.errors = 0
-
- if command["--url"]:
- url_list = [MaskmakerURL(command["--url"])]
- else:
- startline = command["--startline"]
- if command["--count"]:
- endline = startline+command["--count"]
- else:
- endline = command["--endline"]
- url_list = [MaskmakerURL(url.strip()) for url in
- open(command["--list"], "r").readlines()[startline:endline]]
-
- complete_list = []
- error_list = []
-
- outdir = command["--outdir"]
- scrapes = command["--scrapes"]
- errors = command["--errors"]
- size = command["--size"]
- scrape_pass = 0
-
- scrapedir = command["--scrapedir"]
- if not scrapedir: scrapedir = tempfile.gettempdir()
-
- # Get the scraper
- scraper = scrapers.GetScraper((command["--browser"], command["--browserver"]))
-
- # Repeatedly iterate through the list of URLs until either every URL has
- # a successful mask or too many errors, or we've exceeded the giveup limit
- while url_list and scrape_pass < command["--giveup"]:
- # Scrape each URL
- for url in url_list:
- print "Processing %r..." % url.url
- mask_filename = drivers.windowing.URLtoFilename(url.url, outdir, ".bmp")
-
- # Load the existing mask. This is in a loop so we can try to recover
- # from error conditions
- while True:
- try:
- mask = Image.open(mask_filename)
- if mask.size != size:
- print " %r already exists and is the wrong size! (%r vs %r)" % (
- mask_filename, mask.size, size)
- mask_filename = "%s_%r%s" % (
- mask_filename[:-4], size, mask_filename[-4:])
- print " Trying again as %r..." % mask_filename
- continue
- break
- except IOError:
- print " %r does not exist, creating" % mask_filename
- mask = Image.new("1", size, 1)
- mask.save(mask_filename)
-
- # Find the stored scrape path
- mask_scrape_dir = os.path.join(
- scrapedir, os.path.splitext(os.path.basename(mask_filename))[0])
- drivers.windowing.PreparePath(mask_scrape_dir)
-
- # Find the baseline image
- mask_scrapes = os.listdir(mask_scrape_dir)
- mask_scrapes.sort()
-
- if not mask_scrapes:
- print " No baseline image found, mask will not be updated"
- baseline = None
- else:
- baseline = Image.open(os.path.join(mask_scrape_dir, mask_scrapes[0]))
-
- mask_scrape_filename = os.path.join(mask_scrape_dir,
- time.strftime("%y%m%d-%H%M%S.bmp"))
-
- # Do the scrape
- result = scraper.Scrape(
- [url.url], mask_scrape_dir, size, (0, 0),
- command["--timeout"], path=command["--browserpath"],
- filename=mask_scrape_filename)
-
- if result:
- # Return value other than None means an error
- print " Scrape failed with error '%r'" % result
- url.errors += 1
- if url.errors >= errors:
- print " ** Exceeded maximum error count for this URL, giving up"
- continue
-
- # Load the new scrape
- scrape = Image.open(mask_scrape_filename)
-
- # Calculate the difference between the new scrape and the baseline,
- # subject to the current mask
- if baseline:
- diff = ImageChops.multiply(ImageChops.difference(scrape, baseline),
- mask.convert(scrape.mode))
-
- # If the difference is none, there's nothing to update
- if max(diff.getextrema()) == (0, 0):
- print " Scrape identical to baseline, no change in mask"
- url.consecutive_successes += 1
- if url.consecutive_successes >= scrapes:
- print " ** No change for %r scrapes, done!" % scrapes
- else:
- # convert the difference to black and white, then change all
- # black pixels (where the scrape and the baseline were identical)
- # to white, all others (where the scrape and the baseline differed)
- # to black.
- #
- # Since the below command is a little unclear, here's how it works.
- # 1. convert("L") converts the RGB image to grayscale
- # 2. point() maps grayscale values (or the individual channels)
- # of an RGB image) to different ones. Because it operates on
- # individual channels, the grayscale conversion from step 1
- # is necessary.
- # 3. The "1" second parameter to point() outputs the result as
- # a monochrome bitmap. If the original RGB image were converted
- # directly to monochrome, PIL would dither it.
- diff = diff.convert("L").point([255]+[0]*255, "1")
-
- # count the number of different pixels
- diff_pixels = diff.getcolors()[0][0]
-
- # is this too much?
- diff_pixel_percent = diff_pixels * 100.0 / (mask.size[0]*mask.size[1])
- if diff_pixel_percent > command["--threshhold"]:
- print (" Scrape differed from baseline by %.2f percent, ignoring"
- % diff_pixel_percent)
- else:
- print " Scrape differed in %d pixels, updating mask" % diff_pixels
- mask = ImageChops.multiply(mask, diff)
- mask.save(mask_filename)
-
- # reset the number of consecutive "good" scrapes
- url.consecutive_successes = 0
-
- # Remove URLs whose mask is deemed done
- complete_list.extend(
- [url for url in url_list if url.consecutive_successes >= scrapes])
- error_list.extend(
- [url for url in url_list if url.errors >= errors])
- url_list = [
- url for url in url_list if
- url.consecutive_successes < scrapes and
- url.errors < errors]
-
- scrape_pass += 1
- print "**Done with scrape pass %d\n" % scrape_pass
-
- if scrape_pass >= command["--giveup"]:
- print "**Exceeded giveup threshhold. Giving up."
- else:
- print "Waiting %d seconds..." % command["--wait"]
- time.sleep(command["--wait"])
-
- print
- print "*** MASKMAKER COMPLETE ***"
- print "Summary report:"
- print " %d masks successfully generated" % len(complete_list)
- for url in complete_list:
- print " ", url.url
- print " %d masks failed with too many errors" % len(error_list)
- for url in error_list:
- print " ", url.url
- if scrape_pass >= command["--giveup"]:
- print (" %d masks were not completed before "
- "reaching the giveup threshhold" % len(url_list))
- for url in url_list:
- print " ", url.url
diff --git a/chromium/tools/site_compare/commands/measure.py b/chromium/tools/site_compare/commands/measure.py
deleted file mode 100644
index 2bd71f56034..00000000000
--- a/chromium/tools/site_compare/commands/measure.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright (c) 2011 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.
-
-"""Command for measuring how long pages take to load in a browser.
-
-Prerequisites:
- 1. The command_line package from tools/site_compare
- 2. Either the IE BHO or Firefox extension (or both)
-
-Installation:
- 1. Build the IE BHO, or call regsvr32 on a prebuilt binary
- 2. Add a file called "measurepageloadtimeextension@google.com" to
- the default Firefox profile directory under extensions, containing
- the path to the Firefox extension root
-
-Invoke with the command line arguments as documented within
-the command line.
-"""
-
-import command_line
-import win32process
-
-from drivers import windowing
-from utils import browser_iterate
-
-def CreateCommand(cmdline):
- """Inserts the command and arguments into a command line for parsing."""
- cmd = cmdline.AddCommand(
- ["measure"],
- "Measures how long a series of URLs takes to load in one or more browsers.",
- None,
- ExecuteMeasure)
-
- browser_iterate.SetupIterationCommandLine(cmd)
- cmd.AddArgument(
- ["-log", "--logfile"], "File to write output", type="string", required=True)
-
-
-def ExecuteMeasure(command):
- """Executes the Measure command."""
-
- def LogResult(url, proc, wnd, result):
- """Write the result of the browse to the log file."""
- log_file.write(result)
-
- log_file = open(command["--logfile"], "w")
-
- browser_iterate.Iterate(command, LogResult)
-
- # Close the log file and return. We're done.
- log_file.close()
diff --git a/chromium/tools/site_compare/commands/scrape.py b/chromium/tools/site_compare/commands/scrape.py
deleted file mode 100644
index 8fee5a3b3ba..00000000000
--- a/chromium/tools/site_compare/commands/scrape.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# Copyright (c) 2011 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.
-
-"""Command for scraping images from a URL or list of URLs.
-
-Prerequisites:
- 1. The command_line package from tools/site_compare
- 2. Either the IE BHO or Firefox extension (or both)
-
-Installation:
- 1. Build the IE BHO, or call regsvr32 on a prebuilt binary
- 2. Add a file called "measurepageloadtimeextension@google.com" to
- the default Firefox profile directory under extensions, containing
- the path to the Firefox extension root
-
-Invoke with the command line arguments as documented within
-the command line.
-"""
-
-import command_line
-
-from drivers import windowing
-from utils import browser_iterate
-
-def CreateCommand(cmdline):
- """Inserts the command and arguments into a command line for parsing."""
- cmd = cmdline.AddCommand(
- ["scrape"],
- "Scrapes an image from a URL or series of URLs.",
- None,
- ExecuteScrape)
-
- browser_iterate.SetupIterationCommandLine(cmd)
- cmd.AddArgument(
- ["-log", "--logfile"], "File to write text output", type="string")
- cmd.AddArgument(
- ["-out", "--outdir"], "Directory to store scrapes", type="string", required=True)
-
-
-def ExecuteScrape(command):
- """Executes the Scrape command."""
-
- def ScrapeResult(url, proc, wnd, result):
- """Capture and save the scrape."""
- if log_file: log_file.write(result)
-
- # Scrape the page
- image = windowing.ScrapeWindow(wnd)
- filename = windowing.URLtoFilename(url, command["--outdir"], ".bmp")
- image.save(filename)
-
- if command["--logfile"]: log_file = open(command["--logfile"], "w")
- else: log_file = None
-
- browser_iterate.Iterate(command, ScrapeResult)
-
- # Close the log file and return. We're done.
- if log_file: log_file.close()
diff --git a/chromium/tools/site_compare/commands/timeload.py b/chromium/tools/site_compare/commands/timeload.py
deleted file mode 100644
index f34ee1dfeb5..00000000000
--- a/chromium/tools/site_compare/commands/timeload.py
+++ /dev/null
@@ -1,144 +0,0 @@
-# Copyright (c) 2011 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.
-
-"""SiteCompare command to time page loads
-
-Loads a series of URLs in a series of browsers (and browser versions)
-and measures how long the page takes to load in each. Outputs a
-comma-delimited file. The first line is "URL,[browser names", each
-additional line is a URL follored by comma-delimited times (in seconds),
-or the string "timeout" or "crashed".
-
-"""
-
-import os # Functions for walking the directory tree
-import tempfile # Get a temporary directory to hold intermediates
-
-import command_line
-import drivers # Functions for driving keyboard/mouse/windows, OS-specific
-import operators # Functions that, given two bitmaps as input, produce
- # output depending on the performance of an operation
-import scrapers # Functions that know how to capture a render from
- # particular browsers
-
-
-def CreateCommand(cmdline):
- """Inserts the command and arguments into a command line for parsing."""
- cmd = cmdline.AddCommand(
- ["timeload"],
- "Measures how long a series of URLs takes to load in one or more browsers.",
- None,
- ExecuteTimeLoad)
-
- cmd.AddArgument(
- ["-b", "--browsers"], "List of browsers to use. Comma-separated",
- type="string", required=True)
- cmd.AddArgument(
- ["-bp", "--browserpaths"], "List of paths to browsers. Comma-separated",
- type="string", required=False)
- cmd.AddArgument(
- ["-bv", "--browserversions"],
- "List of versions of browsers. Comma-separated",
- type="string", required=False)
- cmd.AddArgument(
- ["-u", "--url"], "URL to time")
- cmd.AddArgument(
- ["-l", "--list"], "List of URLs to time", type="readfile")
- cmd.AddMutualExclusion(["--url", "--list"])
- cmd.AddArgument(
- ["-s", "--startline"], "First line of URL list", type="int")
- cmd.AddArgument(
- ["-e", "--endline"], "Last line of URL list (exclusive)", type="int")
- cmd.AddArgument(
- ["-c", "--count"], "Number of lines of URL file to use", type="int")
- cmd.AddDependency("--startline", "--list")
- cmd.AddRequiredGroup(["--url", "--list"])
- cmd.AddDependency("--endline", "--list")
- cmd.AddDependency("--count", "--list")
- cmd.AddMutualExclusion(["--count", "--endline"])
- cmd.AddDependency("--count", "--startline")
- cmd.AddArgument(
- ["-t", "--timeout"], "Amount of time (seconds) to wait for browser to "
- "finish loading",
- type="int", default=60)
- cmd.AddArgument(
- ["-log", "--logfile"], "File to write output", type="string", required=True)
- cmd.AddArgument(
- ["-sz", "--size"], "Browser window size", default=(800, 600), type="coords")
-
-
-def ExecuteTimeLoad(command):
- """Executes the TimeLoad command."""
- browsers = command["--browsers"].split(",")
- num_browsers = len(browsers)
-
- if command["--browserversions"]:
- browser_versions = command["--browserversions"].split(",")
- else:
- browser_versions = [None] * num_browsers
-
- if command["--browserpaths"]:
- browser_paths = command["--browserpaths"].split(",")
- else:
- browser_paths = [None] * num_browsers
-
- if len(browser_versions) != num_browsers:
- raise ValueError(
- "--browserversions must be same length as --browser_paths")
- if len(browser_paths) != num_browsers:
- raise ValueError(
- "--browserversions must be same length as --browser_paths")
-
- if [b for b in browsers if b not in ["chrome", "ie", "firefox"]]:
- raise ValueError("unknown browsers: %r" % b)
-
- scraper_list = []
-
- for b in xrange(num_browsers):
- version = browser_versions[b]
- if not version: version = None
-
- scraper = scrapers.GetScraper( (browsers[b], version) )
- if not scraper:
- raise ValueError("could not find scraper for (%r, %r)" %
- (browsers[b], version))
- scraper_list.append(scraper)
-
- if command["--url"]:
- url_list = [command["--url"]]
- else:
- startline = command["--startline"]
- if command["--count"]:
- endline = startline+command["--count"]
- else:
- endline = command["--endline"]
- url_list = [url.strip() for url in
- open(command["--list"], "r").readlines()[startline:endline]]
-
- log_file = open(command["--logfile"], "w")
-
- log_file.write("URL")
- for b in xrange(num_browsers):
- log_file.write(",%s" % browsers[b])
-
- if browser_versions[b]: log_file.write(" %s" % browser_versions[b])
- log_file.write("\n")
-
- results = {}
- for url in url_list:
- results[url] = [None] * num_browsers
-
- for b in xrange(num_browsers):
- result = scraper_list[b].Time(url_list, command["--size"],
- command["--timeout"],
- path=browser_paths[b])
-
- for (url, time) in result:
- results[url][b] = time
-
- # output the results
- for url in url_list:
- log_file.write(url)
- for b in xrange(num_browsers):
- log_file.write(",%r" % results[url][b])
diff --git a/chromium/tools/site_compare/drivers/__init__.py b/chromium/tools/site_compare/drivers/__init__.py
deleted file mode 100644
index 9b46261b3bb..00000000000
--- a/chromium/tools/site_compare/drivers/__init__.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2011 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.
-
-"""Imports a set of drivers appropriate to the current OS."""
-
-import sys
-
-platform_dir = sys.platform
-
-keyboard = __import__(platform_dir+".keyboard", globals(), locals(), [''])
-mouse = __import__(platform_dir+".mouse", globals(), locals(), [''])
-windowing = __import__(platform_dir+".windowing", globals(), locals(), [''])
diff --git a/chromium/tools/site_compare/drivers/win32/__init__.py b/chromium/tools/site_compare/drivers/win32/__init__.py
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/chromium/tools/site_compare/drivers/win32/__init__.py
+++ /dev/null
diff --git a/chromium/tools/site_compare/drivers/win32/keyboard.py b/chromium/tools/site_compare/drivers/win32/keyboard.py
deleted file mode 100755
index e3410e1ab77..00000000000
--- a/chromium/tools/site_compare/drivers/win32/keyboard.py
+++ /dev/null
@@ -1,201 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""SiteCompare module for simulating keyboard input.
-
-This module contains functions that can be used to simulate a user
-pressing keys on a keyboard. Support is provided for formatted strings
-including special characters to represent modifier keys like CTRL and ALT
-"""
-
-import time # for sleep
-import win32api # for keybd_event and VkKeyCode
-import win32con # Windows constants
-
-# TODO(jhaas): Ask the readability guys if this would be acceptable:
-#
-# from win32con import VK_SHIFT, VK_CONTROL, VK_MENU, VK_LWIN, KEYEVENTF_KEYUP
-#
-# This is a violation of the style guide but having win32con. everywhere
-# is just plain ugly, and win32con is a huge import for just a handful of
-# constants
-
-
-def PressKey(down, key):
- """Presses or unpresses a key.
-
- Uses keybd_event to simulate either depressing or releasing
- a key
-
- Args:
- down: Whether the key is to be pressed or released
- key: Virtual key code of key to press or release
- """
-
- # keybd_event injects key events at a very low level (it's the
- # Windows API keyboard device drivers call) so this is a very
- # reliable way of simulating user input
- win32api.keybd_event(key, 0, (not down) * win32con.KEYEVENTF_KEYUP)
-
-
-def TypeKey(key, keystroke_time=0):
- """Simulate a keypress of a virtual key.
-
- Args:
- key: which key to press
- keystroke_time: length of time (in seconds) to "hold down" the key
- Note that zero works just fine
-
- Returns:
- None
- """
-
- # This just wraps a pair of PressKey calls with an intervening delay
- PressKey(True, key)
- time.sleep(keystroke_time)
- PressKey(False, key)
-
-
-def TypeString(string_to_type,
- use_modifiers=False,
- keystroke_time=0,
- time_between_keystrokes=0):
- """Simulate typing a string on the keyboard.
-
- Args:
- string_to_type: the string to print
- use_modifiers: specifies whether the following modifier characters
- should be active:
- {abc}: type characters with ALT held down
- [abc]: type characters with CTRL held down
- \ escapes {}[] and treats these values as literal
- standard escape sequences are valid even if use_modifiers is false
- \p is "pause" for one second, useful when driving menus
- \1-\9 is F-key, \0 is F10
-
- TODO(jhaas): support for explicit control of SHIFT, support for
- nonprintable keys (F-keys, ESC, arrow keys, etc),
- support for explicit control of left vs. right ALT or SHIFT,
- support for Windows key
-
- keystroke_time: length of time (in secondes) to "hold down" the key
- time_between_keystrokes: length of time (seconds) to pause between keys
-
- Returns:
- None
- """
-
- shift_held = win32api.GetAsyncKeyState(win32con.VK_SHIFT ) < 0
- ctrl_held = win32api.GetAsyncKeyState(win32con.VK_CONTROL) < 0
- alt_held = win32api.GetAsyncKeyState(win32con.VK_MENU ) < 0
-
- next_escaped = False
- escape_chars = {
- 'a': '\a', 'b': '\b', 'f': '\f', 'n': '\n', 'r': '\r', 't': '\t', 'v': '\v'}
-
- for char in string_to_type:
- vk = None
- handled = False
-
- # Check to see if this is the start or end of a modified block (that is,
- # {abc} for ALT-modified keys or [abc] for CTRL-modified keys
- if use_modifiers and not next_escaped:
- handled = True
- if char == "{" and not alt_held:
- alt_held = True
- PressKey(True, win32con.VK_MENU)
- elif char == "}" and alt_held:
- alt_held = False
- PressKey(False, win32con.VK_MENU)
- elif char == "[" and not ctrl_held:
- ctrl_held = True
- PressKey(True, win32con.VK_CONTROL)
- elif char == "]" and ctrl_held:
- ctrl_held = False
- PressKey(False, win32con.VK_CONTROL)
- else:
- handled = False
-
- # If this is an explicitly-escaped character, replace it with the
- # appropriate code
- if next_escaped and char in escape_chars: char = escape_chars[char]
-
- # If this is \p, pause for one second.
- if next_escaped and char == 'p':
- time.sleep(1)
- next_escaped = False
- handled = True
-
- # If this is \(d), press F key
- if next_escaped and char.isdigit():
- fkey = int(char)
- if not fkey: fkey = 10
- next_escaped = False
- vk = win32con.VK_F1 + fkey - 1
-
- # If this is the backslash, the next character is escaped
- if not next_escaped and char == "\\":
- next_escaped = True
- handled = True
-
- # If we make it here, it's not a special character, or it's an
- # escaped special character which should be treated as a literal
- if not handled:
- next_escaped = False
- if not vk: vk = win32api.VkKeyScan(char)
-
- # VkKeyScan() returns the scan code in the low byte. The upper
- # byte specifies modifiers necessary to produce the given character
- # from the given scan code. The only one we're concerned with at the
- # moment is Shift. Determine the shift state and compare it to the
- # current state... if it differs, press or release the shift key.
- new_shift_held = bool(vk & (1<<8))
-
- if new_shift_held != shift_held:
- PressKey(new_shift_held, win32con.VK_SHIFT)
- shift_held = new_shift_held
-
- # Type the key with the specified length, then wait the specified delay
- TypeKey(vk & 0xFF, keystroke_time)
- time.sleep(time_between_keystrokes)
-
- # Release the modifier keys, if held
- if shift_held: PressKey(False, win32con.VK_SHIFT)
- if ctrl_held: PressKey(False, win32con.VK_CONTROL)
- if alt_held: PressKey(False, win32con.VK_MENU)
-
-
-def main():
- # We're being invoked rather than imported. Let's do some tests
-
- # Press command-R to bring up the Run dialog
- PressKey(True, win32con.VK_LWIN)
- TypeKey(ord('R'))
- PressKey(False, win32con.VK_LWIN)
-
- # Wait a sec to make sure it comes up
- time.sleep(1)
-
- # Invoke Notepad through the Run dialog
- TypeString("wordpad\n")
-
- # Wait another sec, then start typing
- time.sleep(1)
- TypeString("This is a test of SiteCompare's Keyboard.py module.\n\n")
- TypeString("There should be a blank line above and below this one.\n\n")
- TypeString("This line has control characters to make "
- "[b]boldface text[b] and [i]italic text[i] and normal text.\n\n",
- use_modifiers=True)
- TypeString(r"This line should be typed with a visible delay between "
- "characters. When it ends, there should be a 3-second pause, "
- "then the menu will select File/Exit, then another 3-second "
- "pause, then No to exit without saving. Ready?\p\p\p{f}x\p\p\pn",
- use_modifiers=True,
- keystroke_time=0.05,
- time_between_keystrokes=0.05)
-
-
-if __name__ == "__main__":
- sys.exit(main())
diff --git a/chromium/tools/site_compare/drivers/win32/mouse.py b/chromium/tools/site_compare/drivers/win32/mouse.py
deleted file mode 100755
index 0096af987ca..00000000000
--- a/chromium/tools/site_compare/drivers/win32/mouse.py
+++ /dev/null
@@ -1,222 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""SiteCompare module for simulating mouse input.
-
-This module contains functions that can be used to simulate a user
-navigating using a pointing device. This includes mouse movement,
-clicking with any button, and dragging.
-"""
-
-import time # for sleep
-
-import win32api # for mouse_event
-import win32con # Windows constants
-import win32gui # for window functions
-
-
-def ScreenToMouse(pt):
- """Convert a value in screen coordinates to mouse coordinates.
-
- Mouse coordinates are specified as a percentage of screen dimensions,
- normalized to 16 bits. 0 represents the far left/top of the screen,
- 65535 represents the far right/bottom. This function assumes that
- the size of the screen is fixed at module load time and does not change
-
- Args:
- pt: the point of the coords to convert
-
- Returns:
- the converted point
- """
-
- # Initialize the screen dimensions on first execution. Note that this
- # function assumes that the screen dimensions do not change during run.
- if not ScreenToMouse._SCREEN_DIMENSIONS:
- desktop = win32gui.GetClientRect(win32gui.GetDesktopWindow())
- ScreenToMouse._SCREEN_DIMENSIONS = (desktop[2], desktop[3])
-
- return ((65535 * pt[0]) / ScreenToMouse._SCREEN_DIMENSIONS[0],
- (65535 * pt[1]) / ScreenToMouse._SCREEN_DIMENSIONS[1])
-
-ScreenToMouse._SCREEN_DIMENSIONS = None
-
-
-def PressButton(down, button='left'):
- """Simulate a mouse button press or release at the current mouse location.
-
- Args:
- down: whether the button is pressed or released
- button: which button is pressed
-
- Returns:
- None
- """
-
- # Put the mouse_event flags in a convenient dictionary by button
- flags = {
- 'left': (win32con.MOUSEEVENTF_LEFTUP, win32con.MOUSEEVENTF_LEFTDOWN),
- 'middle': (win32con.MOUSEEVENTF_MIDDLEUP, win32con.MOUSEEVENTF_MIDDLEDOWN),
- 'right': (win32con.MOUSEEVENTF_RIGHTUP, win32con.MOUSEEVENTF_RIGHTDOWN)
- }
-
- # hit the button
- win32api.mouse_event(flags[button][down], 0, 0)
-
-
-def ClickButton(button='left', click_time=0):
- """Press and release a mouse button at the current mouse location.
-
- Args:
- button: which button to click
- click_time: duration between press and release
-
- Returns:
- None
- """
- PressButton(True, button)
- time.sleep(click_time)
- PressButton(False, button)
-
-
-def DoubleClickButton(button='left', click_time=0, time_between_clicks=0):
- """Double-click a mouse button at the current mouse location.
-
- Args:
- button: which button to click
- click_time: duration between press and release
- time_between_clicks: time to pause between clicks
-
- Returns:
- None
- """
- ClickButton(button, click_time)
- time.sleep(time_between_clicks)
- ClickButton(button, click_time)
-
-
-def MoveToLocation(pos, duration=0, tick=0.01):
- """Move the mouse cursor to a specified location, taking the specified time.
-
- Args:
- pos: position (in screen coordinates) to move to
- duration: amount of time the move should take
- tick: amount of time between successive moves of the mouse
-
- Returns:
- None
- """
- # calculate the number of moves to reach the destination
- num_steps = (duration/tick)+1
-
- # get the current and final mouse position in mouse coords
- current_location = ScreenToMouse(win32gui.GetCursorPos())
- end_location = ScreenToMouse(pos)
-
- # Calculate the step size
- step_size = ((end_location[0]-current_location[0])/num_steps,
- (end_location[1]-current_location[1])/num_steps)
- step = 0
-
- while step < num_steps:
- # Move the mouse one step
- current_location = (current_location[0]+step_size[0],
- current_location[1]+step_size[1])
-
- # Coerce the coords to int to avoid a warning from pywin32
- win32api.mouse_event(
- win32con.MOUSEEVENTF_MOVE|win32con.MOUSEEVENTF_ABSOLUTE,
- int(current_location[0]), int(current_location[1]))
-
- step += 1
- time.sleep(tick)
-
-
-def ClickAtLocation(pos, button='left', click_time=0):
- """Simulate a mouse click in a particular location, in screen coordinates.
-
- Args:
- pos: position in screen coordinates (x,y)
- button: which button to click
- click_time: duration of the click
-
- Returns:
- None
- """
- MoveToLocation(pos)
- ClickButton(button, click_time)
-
-
-def ClickInWindow(hwnd, offset=None, button='left', click_time=0):
- """Simulate a user mouse click in the center of a window.
-
- Args:
- hwnd: handle of the window to click in
- offset: where to click, defaults to dead center
- button: which button to click
- click_time: duration of the click
-
- Returns:
- Nothing
- """
-
- rect = win32gui.GetClientRect(hwnd)
- if offset is None: offset = (rect[2]/2, rect[3]/2)
-
- # get the screen coordinates of the window's center
- pos = win32gui.ClientToScreen(hwnd, offset)
-
- ClickAtLocation(pos, button, click_time)
-
-
-def DoubleClickInWindow(
- hwnd, offset=None, button='left', click_time=0, time_between_clicks=0.1):
- """Simulate a user mouse double click in the center of a window.
-
- Args:
- hwnd: handle of the window to click in
- offset: where to click, defaults to dead center
- button: which button to click
- click_time: duration of the clicks
- time_between_clicks: length of time to pause between clicks
-
- Returns:
- Nothing
- """
- ClickInWindow(hwnd, offset, button, click_time)
- time.sleep(time_between_clicks)
- ClickInWindow(hwnd, offset, button, click_time)
-
-
-def main():
- # We're being invoked rather than imported. Let's do some tests
-
- screen_size = win32gui.GetClientRect(win32gui.GetDesktopWindow())
- screen_size = (screen_size[2], screen_size[3])
-
- # move the mouse (instantly) to the upper right corner
- MoveToLocation((screen_size[0], 0))
-
- # move the mouse (over five seconds) to the lower left corner
- MoveToLocation((0, screen_size[1]), 5)
-
- # click the left mouse button. This will open up the Start menu
- # if the taskbar is at the bottom
-
- ClickButton()
-
- # wait a bit, then click the right button to open the context menu
- time.sleep(3)
- ClickButton('right')
-
- # move the mouse away and then click the left button to dismiss the
- # context menu
- MoveToLocation((screen_size[0]/2, screen_size[1]/2), 3)
- MoveToLocation((0, 0), 3)
- ClickButton()
-
-
-if __name__ == "__main__":
- sys.exit(main())
diff --git a/chromium/tools/site_compare/drivers/win32/windowing.py b/chromium/tools/site_compare/drivers/win32/windowing.py
deleted file mode 100755
index 47d63f02272..00000000000
--- a/chromium/tools/site_compare/drivers/win32/windowing.py
+++ /dev/null
@@ -1,366 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""SiteCompare module for invoking, locating, and manipulating windows.
-
-This module is a catch-all wrapper for operating system UI functionality
-that doesn't belong in other modules. It contains functions for finding
-particular windows, scraping their contents, and invoking processes to
-create them.
-"""
-
-import os
-import string
-import time
-
-import PIL.ImageGrab
-import pywintypes
-import win32event
-import win32gui
-import win32process
-
-
-def FindChildWindows(hwnd, path):
- """Find a set of windows through a path specification.
-
- Args:
- hwnd: Handle of the parent window
- path: Path to the window to find. Has the following form:
- "foo/bar/baz|foobar/|foobarbaz"
- The slashes specify the "path" to the child window.
- The text is the window class, a pipe (if present) is a title.
- * is a wildcard and will find all child windows at that level
-
- Returns:
- A list of the windows that were found
- """
- windows_to_check = [hwnd]
-
- # The strategy will be to take windows_to_check and use it
- # to find a list of windows that match the next specification
- # in the path, then repeat with the list of found windows as the
- # new list of windows to check
- for segment in path.split("/"):
- windows_found = []
- check_values = segment.split("|")
-
- # check_values is now a list with the first element being
- # the window class, the second being the window caption.
- # If the class is absent (or wildcarded) set it to None
- if check_values[0] == "*" or not check_values[0]: check_values[0] = None
-
- # If the window caption is also absent, force it to None as well
- if len(check_values) == 1: check_values.append(None)
-
- # Loop through the list of windows to check
- for window_check in windows_to_check:
- window_found = None
- while window_found != 0: # lint complains, but 0 != None
- if window_found is None: window_found = 0
- try:
- # Look for the next sibling (or first sibling if window_found is 0)
- # of window_check with the specified caption and/or class
- window_found = win32gui.FindWindowEx(
- window_check, window_found, check_values[0], check_values[1])
- except pywintypes.error, e:
- # FindWindowEx() raises error 2 if not found
- if e[0] == 2:
- window_found = 0
- else:
- raise e
-
- # If FindWindowEx struck gold, add to our list of windows found
- if window_found: windows_found.append(window_found)
-
- # The windows we found become the windows to check for the next segment
- windows_to_check = windows_found
-
- return windows_found
-
-
-def FindChildWindow(hwnd, path):
- """Find a window through a path specification.
-
- This method is a simple wrapper for FindChildWindows() for the
- case (the majority case) where you expect to find a single window
-
- Args:
- hwnd: Handle of the parent window
- path: Path to the window to find. See FindChildWindows()
-
- Returns:
- The window that was found
- """
- return FindChildWindows(hwnd, path)[0]
-
-
-def ScrapeWindow(hwnd, rect=None):
- """Scrape a visible window and return its contents as a bitmap.
-
- Args:
- hwnd: handle of the window to scrape
- rect: rectangle to scrape in client coords, defaults to the whole thing
- If specified, it's a 4-tuple of (left, top, right, bottom)
-
- Returns:
- An Image containing the scraped data
- """
- # Activate the window
- SetForegroundWindow(hwnd)
-
- # If no rectangle was specified, use the fill client rectangle
- if not rect: rect = win32gui.GetClientRect(hwnd)
-
- upper_left = win32gui.ClientToScreen(hwnd, (rect[0], rect[1]))
- lower_right = win32gui.ClientToScreen(hwnd, (rect[2], rect[3]))
- rect = upper_left+lower_right
-
- return PIL.ImageGrab.grab(rect)
-
-
-def SetForegroundWindow(hwnd):
- """Bring a window to the foreground."""
- win32gui.SetForegroundWindow(hwnd)
-
-
-def InvokeAndWait(path, cmdline="", timeout=10, tick=1.):
- """Invoke an application and wait for it to bring up a window.
-
- Args:
- path: full path to the executable to invoke
- cmdline: command line to pass to executable
- timeout: how long (in seconds) to wait before giving up
- tick: length of time to wait between checks
-
- Returns:
- A tuple of handles to the process and the application's window,
- or (None, None) if it timed out waiting for the process
- """
-
- def EnumWindowProc(hwnd, ret):
- """Internal enumeration func, checks for visibility and proper PID."""
- if win32gui.IsWindowVisible(hwnd): # don't bother even checking hidden wnds
- pid = win32process.GetWindowThreadProcessId(hwnd)[1]
- if pid == ret[0]:
- ret[1] = hwnd
- return 0 # 0 means stop enumeration
- return 1 # 1 means continue enumeration
-
- # We don't need to change anything about the startupinfo structure
- # (the default is quite sufficient) but we need to create it just the
- # same.
- sinfo = win32process.STARTUPINFO()
-
- proc = win32process.CreateProcess(
- path, # path to new process's executable
- cmdline, # application's command line
- None, # process security attributes (default)
- None, # thread security attributes (default)
- False, # inherit parent's handles
- 0, # creation flags
- None, # environment variables
- None, # directory
- sinfo) # default startup info
-
- # Create process returns (prochandle, pid, threadhandle, tid). At
- # some point we may care about the other members, but for now, all
- # we're after is the pid
- pid = proc[2]
-
- # Enumeration APIs can take an arbitrary integer, usually a pointer,
- # to be passed to the enumeration function. We'll pass a pointer to
- # a structure containing the PID we're looking for, and an empty out
- # parameter to hold the found window ID
- ret = [pid, None]
-
- tries_until_timeout = timeout/tick
- num_tries = 0
-
- # Enumerate top-level windows, look for one with our PID
- while num_tries < tries_until_timeout and ret[1] is None:
- try:
- win32gui.EnumWindows(EnumWindowProc, ret)
- except pywintypes.error, e:
- # error 0 isn't an error, it just meant the enumeration was
- # terminated early
- if e[0]: raise e
-
- time.sleep(tick)
- num_tries += 1
-
- # TODO(jhaas): Should we throw an exception if we timeout? Or is returning
- # a window ID of None sufficient?
- return (proc[0], ret[1])
-
-
-def WaitForProcessExit(proc, timeout=None):
- """Waits for a given process to terminate.
-
- Args:
- proc: handle to process
- timeout: timeout (in seconds). None = wait indefinitely
-
- Returns:
- True if process ended, False if timed out
- """
- if timeout is None:
- timeout = win32event.INFINITE
- else:
- # convert sec to msec
- timeout *= 1000
-
- return (win32event.WaitForSingleObject(proc, timeout) ==
- win32event.WAIT_OBJECT_0)
-
-
-def WaitForThrobber(hwnd, rect=None, timeout=20, tick=0.1, done=10):
- """Wait for a browser's "throbber" (loading animation) to complete.
-
- Args:
- hwnd: window containing the throbber
- rect: rectangle of the throbber, in client coords. If None, whole window
- timeout: if the throbber is still throbbing after this long, give up
- tick: how often to check the throbber
- done: how long the throbber must be unmoving to be considered done
-
- Returns:
- Number of seconds waited, -1 if timed out
- """
- if not rect: rect = win32gui.GetClientRect(hwnd)
-
- # last_throbber will hold the results of the preceding scrape;
- # we'll compare it against the current scrape to see if we're throbbing
- last_throbber = ScrapeWindow(hwnd, rect)
- start_clock = time.clock()
- timeout_clock = start_clock + timeout
- last_changed_clock = start_clock;
-
- while time.clock() < timeout_clock:
- time.sleep(tick)
-
- current_throbber = ScrapeWindow(hwnd, rect)
- if current_throbber.tostring() != last_throbber.tostring():
- last_throbber = current_throbber
- last_changed_clock = time.clock()
- else:
- if time.clock() - last_changed_clock > done:
- return last_changed_clock - start_clock
-
- return -1
-
-
-def MoveAndSizeWindow(wnd, position=None, size=None, child=None):
- """Moves and/or resizes a window.
-
- Repositions and resizes a window. If a child window is provided,
- the parent window is resized so the child window has the given size
-
- Args:
- wnd: handle of the frame window
- position: new location for the frame window
- size: new size for the frame window (or the child window)
- child: handle of the child window
-
- Returns:
- None
- """
- rect = win32gui.GetWindowRect(wnd)
-
- if position is None: position = (rect[0], rect[1])
- if size is None:
- size = (rect[2]-rect[0], rect[3]-rect[1])
- elif child is not None:
- child_rect = win32gui.GetWindowRect(child)
- slop = (rect[2]-rect[0]-child_rect[2]+child_rect[0],
- rect[3]-rect[1]-child_rect[3]+child_rect[1])
- size = (size[0]+slop[0], size[1]+slop[1])
-
- win32gui.MoveWindow(wnd, # window to move
- position[0], # new x coord
- position[1], # new y coord
- size[0], # new width
- size[1], # new height
- True) # repaint?
-
-
-def EndProcess(proc, code=0):
- """Ends a process.
-
- Wraps the OS TerminateProcess call for platform-independence
-
- Args:
- proc: process ID
- code: process exit code
-
- Returns:
- None
- """
- win32process.TerminateProcess(proc, code)
-
-
-def URLtoFilename(url, path=None, extension=None):
- """Converts a URL to a filename, given a path.
-
- This in theory could cause collisions if two URLs differ only
- in unprintable characters (eg. http://www.foo.com/?bar and
- http://www.foo.com/:bar. In practice this shouldn't be a problem.
-
- Args:
- url: The URL to convert
- path: path to the directory to store the file
- extension: string to append to filename
-
- Returns:
- filename
- """
- trans = string.maketrans(r'\/:*?"<>|', '_________')
-
- if path is None: path = ""
- if extension is None: extension = ""
- if len(path) > 0 and path[-1] != '\\': path += '\\'
- url = url.translate(trans)
- return "%s%s%s" % (path, url, extension)
-
-
-def PreparePath(path):
- """Ensures that a given path exists, making subdirectories if necessary.
-
- Args:
- path: fully-qualified path of directory to ensure exists
-
- Returns:
- None
- """
- try:
- os.makedirs(path)
- except OSError, e:
- if e[0] != 17: raise e # error 17: path already exists
-
-
-def main():
- PreparePath(r"c:\sitecompare\scrapes\ie7")
- # We're being invoked rather than imported. Let's do some tests
-
- # Hardcode IE's location for the purpose of this test
- (proc, wnd) = InvokeAndWait(
- r"c:\program files\internet explorer\iexplore.exe")
-
- # Find the browser pane in the IE window
- browser = FindChildWindow(
- wnd, "TabWindowClass/Shell DocObject View/Internet Explorer_Server")
-
- # Move and size the window
- MoveAndSizeWindow(wnd, (0, 0), (1024, 768), browser)
-
- # Take a screenshot
- i = ScrapeWindow(browser)
-
- i.show()
-
- EndProcess(proc, 0)
-
-
-if __name__ == "__main__":
- sys.exit(main())
diff --git a/chromium/tools/site_compare/operators/__init__.py b/chromium/tools/site_compare/operators/__init__.py
deleted file mode 100644
index 5d6ffd7555a..00000000000
--- a/chromium/tools/site_compare/operators/__init__.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (c) 2011 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.
-
-"""Selects the appropriate operator."""
-
-
-def GetOperator(operator):
- """Given an operator by name, returns its module.
-
- Args:
- operator: string describing the comparison
-
- Returns:
- module
- """
-
- # TODO(jhaas): come up with a happy way of integrating multiple operators
- # with different, possibly divergent and possibly convergent, operators.
-
- module = __import__(operator, globals(), locals(), [''])
-
- return module
diff --git a/chromium/tools/site_compare/operators/equals.py b/chromium/tools/site_compare/operators/equals.py
deleted file mode 100644
index 311f530a059..00000000000
--- a/chromium/tools/site_compare/operators/equals.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright (c) 2011 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.
-
-"""Compare two images for equality."""
-
-from PIL import Image
-from PIL import ImageChops
-
-
-def Compare(file1, file2, **kwargs):
- """Compares two images to see if they're identical.
-
- Args:
- file1: path to first image to compare
- file2: path to second image to compare
- kwargs: unused for this operator
-
- Returns:
- None if the images are identical
- A tuple of (errorstring, image) if they're not
- """
- kwargs = kwargs # unused parameter
-
- im1 = Image.open(file1)
- im2 = Image.open(file2)
-
- if im1.size != im2.size:
- return ("The images are of different size (%s vs %s)" %
- (im1.size, im2.size), im1)
-
- diff = ImageChops.difference(im1, im2)
-
- if max(diff.getextrema()) != (0, 0):
- return ("The images differ", diff)
- else:
- return None
diff --git a/chromium/tools/site_compare/operators/equals_with_mask.py b/chromium/tools/site_compare/operators/equals_with_mask.py
deleted file mode 100644
index e42f7e16a91..00000000000
--- a/chromium/tools/site_compare/operators/equals_with_mask.py
+++ /dev/null
@@ -1,57 +0,0 @@
-# Copyright (c) 2011 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.
-
-"""Compare two images for equality, subject to a mask."""
-
-from PIL import Image
-from PIL import ImageChops
-
-import os.path
-
-
-def Compare(file1, file2, **kwargs):
- """Compares two images to see if they're identical subject to a mask.
-
- An optional directory containing masks is supplied. If a mask exists
- which matches file1's name, areas under the mask where it's black
- are ignored.
-
- Args:
- file1: path to first image to compare
- file2: path to second image to compare
- kwargs: ["maskdir"] contains the directory holding the masks
-
- Returns:
- None if the images are identical
- A tuple of (errorstring, image) if they're not
- """
-
- maskdir = None
- if "maskdir" in kwargs:
- maskdir = kwargs["maskdir"]
-
- im1 = Image.open(file1)
- im2 = Image.open(file2)
-
- if im1.size != im2.size:
- return ("The images are of different size (%r vs %r)" %
- (im1.size, im2.size), im1)
-
- diff = ImageChops.difference(im1, im2)
-
- if maskdir:
- maskfile = os.path.join(maskdir, os.path.basename(file1))
- if os.path.exists(maskfile):
- mask = Image.open(maskfile)
-
- if mask.size != im1.size:
- return ("The mask is of a different size than the images (%r vs %r)" %
- (mask.size, im1.size), mask)
-
- diff = ImageChops.multiply(diff, mask.convert(diff.mode))
-
- if max(diff.getextrema()) != (0, 0):
- return ("The images differ", diff)
- else:
- return None
diff --git a/chromium/tools/site_compare/scrapers/__init__.py b/chromium/tools/site_compare/scrapers/__init__.py
deleted file mode 100755
index 5f6d77885b7..00000000000
--- a/chromium/tools/site_compare/scrapers/__init__.py
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""Selects the appropriate scraper for a given browser and version."""
-
-import types
-
-# TODO(jhaas): unify all optional scraper parameters into kwargs
-
-def GetScraper(browser):
- """Given a browser and an optional version, returns the scraper module.
-
- Args:
- browser: either a string (browser name) or a tuple (name, version)
-
- Returns:
- module
- """
-
- if type(browser) == types.StringType: browser = (browser, None)
-
- package = __import__(browser[0], globals(), locals(), [''])
- module = package.GetScraper(browser[1])
- if browser[1] is not None: module.version = browser[1]
-
- return module
-
-
-# if invoked rather than imported, do some tests
-if __name__ == "__main__":
- print GetScraper("IE")
diff --git a/chromium/tools/site_compare/scrapers/chrome/__init__.py b/chromium/tools/site_compare/scrapers/chrome/__init__.py
deleted file mode 100755
index 587a50db735..00000000000
--- a/chromium/tools/site_compare/scrapers/chrome/__init__.py
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""Selects the appropriate scraper for Chrome."""
-
-
-def GetScraper(version):
- """Returns the scraper module for the given version.
-
- Args:
- version: version string of Chrome, or None for most recent
-
- Returns:
- scrape module for given version
- """
- if version is None:
- version = "0.1.101.0"
-
- parsed_version = [int(x) for x in version.split(".")]
-
- if (parsed_version[0] > 0 or
- parsed_version[1] > 1 or
- parsed_version[2] > 97 or
- parsed_version[3] > 0):
- scraper_version = "chrome011010"
- else:
- scraper_version = "chrome01970"
-
- return __import__(scraper_version, globals(), locals(), [''])
-
-
-# if invoked rather than imported, test
-if __name__ == "__main__":
- print GetScraper("0.1.101.0").version
diff --git a/chromium/tools/site_compare/scrapers/chrome/chrome011010.py b/chromium/tools/site_compare/scrapers/chrome/chrome011010.py
deleted file mode 100644
index 6f0dfb4bf7c..00000000000
--- a/chromium/tools/site_compare/scrapers/chrome/chrome011010.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (c) 2011 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.
-
-"""Does scraping for versions of Chrome from 0.1.101.0 up."""
-
-from drivers import windowing
-
-import chromebase
-
-# Default version
-version = "0.1.101.0"
-
-
-def GetChromeRenderPane(wnd):
- return windowing.FindChildWindow(wnd, "Chrome_TabContents")
-
-
-def Scrape(urls, outdir, size, pos, timeout=20, **kwargs):
- """Invoke a browser, send it to a series of URLs, and save its output.
-
- Args:
- urls: list of URLs to scrape
- outdir: directory to place output
- size: size of browser window to use
- pos: position of browser window
- timeout: amount of time to wait for page to load
- kwargs: miscellaneous keyword args
-
- Returns:
- None if succeeded, else an error code
- """
- chromebase.GetChromeRenderPane = GetChromeRenderPane
-
- return chromebase.Scrape(urls, outdir, size, pos, timeout, kwargs)
-
-
-def Time(urls, size, timeout, **kwargs):
- """Forwards the Time command to chromebase."""
- chromebase.GetChromeRenderPane = GetChromeRenderPane
-
- return chromebase.Time(urls, size, timeout, kwargs)
diff --git a/chromium/tools/site_compare/scrapers/chrome/chrome01970.py b/chromium/tools/site_compare/scrapers/chrome/chrome01970.py
deleted file mode 100644
index 2f237fa4df4..00000000000
--- a/chromium/tools/site_compare/scrapers/chrome/chrome01970.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (c) 2011 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.
-
-"""Does scraping for versions of Chrome up to 0.1.97.0."""
-
-from drivers import windowing
-
-import chromebase
-
-# Default version
-version = "0.1.97.0"
-
-
-def GetChromeRenderPane(wnd):
- return windowing.FindChildWindow(wnd, "Chrome_BrowserWindow")
-
-
-def Scrape(urls, outdir, size, pos, timeout=20, **kwargs):
- """Invoke a browser, send it to a series of URLs, and save its output.
-
- Args:
- urls: list of URLs to scrape
- outdir: directory to place output
- size: size of browser window to use
- pos: position of browser window
- timeout: amount of time to wait for page to load
- kwargs: miscellaneous keyword args
-
- Returns:
- None if succeeded, else an error code
- """
- chromebase.GetChromeRenderPane = GetChromeRenderPane
-
- return chromebase.Scrape(urls, outdir, size, pos, timeout, kwargs)
-
-
-def Time(urls, size, timeout, **kwargs):
- """Forwards the Time command to chromebase."""
- chromebase.GetChromeRenderPane = GetChromeRenderPane
-
- return chromebase.Time(urls, size, timeout, kwargs)
diff --git a/chromium/tools/site_compare/scrapers/chrome/chromebase.py b/chromium/tools/site_compare/scrapers/chrome/chromebase.py
deleted file mode 100755
index 2b8f1774cc4..00000000000
--- a/chromium/tools/site_compare/scrapers/chrome/chromebase.py
+++ /dev/null
@@ -1,199 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""Does scraping for all currently-known versions of Chrome"""
-
-import pywintypes
-import types
-
-from drivers import keyboard
-from drivers import mouse
-from drivers import windowing
-
-
-# TODO: this has moved, use some logic to find it. For now,
-# expects a subst k:.
-DEFAULT_PATH = r"k:\chrome.exe"
-
-
-def InvokeBrowser(path):
- """Invoke the Chrome browser.
-
- Args:
- path: full path to browser
-
- Returns:
- A tuple of (main window, process handle, address bar, render pane)
- """
-
- # Reuse an existing instance of the browser if we can find one. This
- # may not work correctly, especially if the window is behind other windows.
-
- # TODO(jhaas): make this work with Vista
- wnds = windowing.FindChildWindows(0, "Chrome_XPFrame")
- if len(wnds):
- wnd = wnds[0]
- proc = None
- else:
- # Invoke Chrome
- (proc, wnd) = windowing.InvokeAndWait(path)
-
- # Get windows we'll need
- address_bar = windowing.FindChildWindow(wnd, "Chrome_AutocompleteEdit")
- render_pane = GetChromeRenderPane(wnd)
-
- return (wnd, proc, address_bar, render_pane)
-
-
-def Scrape(urls, outdir, size, pos, timeout, kwargs):
- """Invoke a browser, send it to a series of URLs, and save its output.
-
- Args:
- urls: list of URLs to scrape
- outdir: directory to place output
- size: size of browser window to use
- pos: position of browser window
- timeout: amount of time to wait for page to load
- kwargs: miscellaneous keyword args
-
- Returns:
- None if success, else an error string
- """
- if "path" in kwargs and kwargs["path"]: path = kwargs["path"]
- else: path = DEFAULT_PATH
-
- (wnd, proc, address_bar, render_pane) = InvokeBrowser(path)
-
- # Resize and reposition the frame
- windowing.MoveAndSizeWindow(wnd, pos, size, render_pane)
-
- # Visit each URL we're given
- if type(urls) in types.StringTypes: urls = [urls]
-
- timedout = False
-
- for url in urls:
- # Double-click in the address bar, type the name, and press Enter
- mouse.ClickInWindow(address_bar)
- keyboard.TypeString(url, 0.1)
- keyboard.TypeString("\n")
-
- # Wait for the page to finish loading
- load_time = windowing.WaitForThrobber(wnd, (20, 16, 36, 32), timeout)
- timedout = load_time < 0
-
- if timedout:
- break
-
- # Scrape the page
- image = windowing.ScrapeWindow(render_pane)
-
- # Save to disk
- if "filename" in kwargs:
- if callable(kwargs["filename"]):
- filename = kwargs["filename"](url)
- else:
- filename = kwargs["filename"]
- else:
- filename = windowing.URLtoFilename(url, outdir, ".bmp")
- image.save(filename)
-
- if proc:
- windowing.SetForegroundWindow(wnd)
-
- # Send Alt-F4, then wait for process to end
- keyboard.TypeString(r"{\4}", use_modifiers=True)
- if not windowing.WaitForProcessExit(proc, timeout):
- windowing.EndProcess(proc)
- return "crashed"
-
- if timedout:
- return "timeout"
-
- return None
-
-
-def Time(urls, size, timeout, kwargs):
- """Measure how long it takes to load each of a series of URLs
-
- Args:
- urls: list of URLs to time
- size: size of browser window to use
- timeout: amount of time to wait for page to load
- kwargs: miscellaneous keyword args
-
- Returns:
- A list of tuples (url, time). "time" can be "crashed" or "timeout"
- """
- if "path" in kwargs and kwargs["path"]: path = kwargs["path"]
- else: path = DEFAULT_PATH
- proc = None
-
- # Visit each URL we're given
- if type(urls) in types.StringTypes: urls = [urls]
-
- ret = []
- for url in urls:
- try:
- # Invoke the browser if necessary
- if not proc:
- (wnd, proc, address_bar, render_pane) = InvokeBrowser(path)
-
- # Resize and reposition the frame
- windowing.MoveAndSizeWindow(wnd, (0,0), size, render_pane)
-
- # Double-click in the address bar, type the name, and press Enter
- mouse.ClickInWindow(address_bar)
- keyboard.TypeString(url, 0.1)
- keyboard.TypeString("\n")
-
- # Wait for the page to finish loading
- load_time = windowing.WaitForThrobber(wnd, (20, 16, 36, 32), timeout)
-
- timedout = load_time < 0
-
- if timedout:
- load_time = "timeout"
-
- # Send an alt-F4 to make the browser close; if this times out,
- # we've probably got a crash
- windowing.SetForegroundWindow(wnd)
-
- keyboard.TypeString(r"{\4}", use_modifiers=True)
- if not windowing.WaitForProcessExit(proc, timeout):
- windowing.EndProcess(proc)
- load_time = "crashed"
- proc = None
- except pywintypes.error:
- proc = None
- load_time = "crashed"
-
- ret.append( (url, load_time) )
-
- if proc:
- windowing.SetForegroundWindow(wnd)
- keyboard.TypeString(r"{\4}", use_modifiers=True)
- if not windowing.WaitForProcessExit(proc, timeout):
- windowing.EndProcess(proc)
-
- return ret
-
-
-def main():
- # We're being invoked rather than imported, so run some tests
- path = r"c:\sitecompare\scrapes\chrome\0.1.97.0"
- windowing.PreparePath(path)
-
- # Scrape three sites and save the results
- Scrape([
- "http://www.microsoft.com",
- "http://www.google.com",
- "http://www.sun.com"],
- path, (1024, 768), (0, 0))
- return 0
-
-
-if __name__ == "__main__":
- sys.exit(main())
diff --git a/chromium/tools/site_compare/scrapers/firefox/__init__.py b/chromium/tools/site_compare/scrapers/firefox/__init__.py
deleted file mode 100755
index 34c0699f072..00000000000
--- a/chromium/tools/site_compare/scrapers/firefox/__init__.py
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""Selects the appropriate scraper for Firefox."""
-
-
-def GetScraper(version):
- """Returns the scraper module for the given version.
-
- Args:
- version: version string of IE, or None for most recent
-
- Returns:
- scrape module for given version
- """
-
- # Pychecker will warn that the parameter is unused; we only
- # support one version of Firefox at this time
-
- # We only have one version of the Firefox scraper for now
- return __import__("firefox2", globals(), locals(), [''])
-
-
-# if invoked rather than imported, test
-if __name__ == "__main__":
- print GetScraper("2.0.0.6").version
diff --git a/chromium/tools/site_compare/scrapers/firefox/firefox2.py b/chromium/tools/site_compare/scrapers/firefox/firefox2.py
deleted file mode 100755
index 2181f588f81..00000000000
--- a/chromium/tools/site_compare/scrapers/firefox/firefox2.py
+++ /dev/null
@@ -1,249 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""Does scraping for Firefox 2.0."""
-
-import pywintypes
-import time
-import types
-
-from drivers import keyboard
-from drivers import mouse
-from drivers import windowing
-
-# Default version
-version = "2.0.0.6"
-
-DEFAULT_PATH = r"c:\program files\mozilla firefox\firefox.exe"
-
-# TODO(jhaas): the Firefox scraper is a bit rickety at the moment. Known
-# issues: 1) won't work if the default profile puts toolbars in different
-# locations, 2) uses sleep() statements rather than more robust checks,
-# 3) fails badly if an existing Firefox window is open when the scrape
-# is invoked. This needs to be fortified at some point.
-
-def GetBrowser(path):
- """Invoke the Firefox browser and return the process and window.
-
- Args:
- path: full path to browser
-
- Returns:
- A tuple of (process handle, render pane)
- """
- if not path: path = DEFAULT_PATH
-
- # Invoke Firefox
- (proc, wnd) = windowing.InvokeAndWait(path)
-
- # Get the content pane
- render_pane = windowing.FindChildWindow(
- wnd,
- "MozillaWindowClass/MozillaWindowClass/MozillaWindowClass")
-
- return (proc, wnd, render_pane)
-
-
-def InvokeBrowser(path):
- """Invoke the Firefox browser.
-
- Args:
- path: full path to browser
-
- Returns:
- A tuple of (main window, process handle, render pane)
- """
- # Reuse an existing instance of the browser if we can find one. This
- # may not work correctly, especially if the window is behind other windows.
- wnds = windowing.FindChildWindows(0, "MozillaUIWindowClass")
- if len(wnds):
- wnd = wnds[0]
- proc = None
- else:
- # Invoke Firefox
- (proc, wnd) = windowing.InvokeAndWait(path)
-
- # Get the content pane
- render_pane = windowing.FindChildWindow(
- wnd,
- "MozillaWindowClass/MozillaWindowClass/MozillaWindowClass")
-
- return (wnd, proc, render_pane)
-
-
-def Scrape(urls, outdir, size, pos, timeout=20, **kwargs):
- """Invoke a browser, send it to a series of URLs, and save its output.
-
- Args:
- urls: list of URLs to scrape
- outdir: directory to place output
- size: size of browser window to use
- pos: position of browser window
- timeout: amount of time to wait for page to load
- kwargs: miscellaneous keyword args
-
- Returns:
- None if success, else an error string
- """
- if "path" in kwargs and kwargs["path"]: path = kwargs["path"]
- else: path = DEFAULT_PATH
-
- (wnd, proc, render_pane) = InvokeBrowser(path)
-
- # Resize and reposition the frame
- windowing.MoveAndSizeWindow(wnd, pos, size, render_pane)
-
- time.sleep(3)
-
- # Firefox is a bit of a pain: it doesn't use standard edit controls,
- # and it doesn't display a throbber when there's no tab. Let's make
- # sure there's at least one tab, then select the first one
-
- mouse.ClickInWindow(wnd)
- keyboard.TypeString("[t]", True)
- mouse.ClickInWindow(wnd, (30, 115))
- time.sleep(2)
-
- timedout = False
-
- # Visit each URL we're given
- if type(urls) in types.StringTypes: urls = [urls]
-
- for url in urls:
-
- # Use keyboard shortcuts
- keyboard.TypeString("{d}", True)
- keyboard.TypeString(url)
- keyboard.TypeString("\n")
-
- # Wait for the page to finish loading
- load_time = windowing.WaitForThrobber(wnd, (10, 96, 26, 112), timeout)
- timedout = load_time < 0
-
- if timedout:
- break
-
- # Scrape the page
- image = windowing.ScrapeWindow(render_pane)
-
- # Save to disk
- if "filename" in kwargs:
- if callable(kwargs["filename"]):
- filename = kwargs["filename"](url)
- else:
- filename = kwargs["filename"]
- else:
- filename = windowing.URLtoFilename(url, outdir, ".bmp")
- image.save(filename)
-
- # Close all the tabs, cheesily
- mouse.ClickInWindow(wnd)
-
- while len(windowing.FindChildWindows(0, "MozillaUIWindowClass")):
- keyboard.TypeString("[w]", True)
- time.sleep(1)
-
- if timedout:
- return "timeout"
-
-
-def Time(urls, size, timeout, **kwargs):
- """Measure how long it takes to load each of a series of URLs
-
- Args:
- urls: list of URLs to time
- size: size of browser window to use
- timeout: amount of time to wait for page to load
- kwargs: miscellaneous keyword args
-
- Returns:
- A list of tuples (url, time). "time" can be "crashed" or "timeout"
- """
- if "path" in kwargs and kwargs["path"]: path = kwargs["path"]
- else: path = DEFAULT_PATH
- proc = None
-
- # Visit each URL we're given
- if type(urls) in types.StringTypes: urls = [urls]
-
- ret = []
- for url in urls:
- try:
- # Invoke the browser if necessary
- if not proc:
- (wnd, proc, render_pane) = InvokeBrowser(path)
-
- # Resize and reposition the frame
- windowing.MoveAndSizeWindow(wnd, (0,0), size, render_pane)
-
- time.sleep(3)
-
- # Firefox is a bit of a pain: it doesn't use standard edit controls,
- # and it doesn't display a throbber when there's no tab. Let's make
- # sure there's at least one tab, then select the first one
-
- mouse.ClickInWindow(wnd)
- keyboard.TypeString("[t]", True)
- mouse.ClickInWindow(wnd, (30, 115))
- time.sleep(2)
-
- # Use keyboard shortcuts
- keyboard.TypeString("{d}", True)
- keyboard.TypeString(url)
- keyboard.TypeString("\n")
-
- # Wait for the page to finish loading
- load_time = windowing.WaitForThrobber(wnd, (10, 96, 26, 112), timeout)
- timedout = load_time < 0
-
- if timedout:
- load_time = "timeout"
-
- # Try to close the browser; if this fails it's probably a crash
- mouse.ClickInWindow(wnd)
-
- count = 0
- while (len(windowing.FindChildWindows(0, "MozillaUIWindowClass"))
- and count < 5):
- keyboard.TypeString("[w]", True)
- time.sleep(1)
- count = count + 1
-
- if len(windowing.FindChildWindows(0, "MozillaUIWindowClass")):
- windowing.EndProcess(proc)
- load_time = "crashed"
-
- proc = None
- except pywintypes.error:
- proc = None
- load_time = "crashed"
-
- ret.append( (url, load_time) )
-
- if proc:
- count = 0
- while (len(windowing.FindChildWindows(0, "MozillaUIWindowClass"))
- and count < 5):
- keyboard.TypeString("[w]", True)
- time.sleep(1)
- count = count + 1
- return ret
-
-
-def main():
- # We're being invoked rather than imported, so run some tests
- path = r"c:\sitecompare\scrapes\Firefox\2.0.0.6"
- windowing.PreparePath(path)
-
- # Scrape three sites and save the results
- Scrape(
- ["http://www.microsoft.com", "http://www.google.com",
- "http://www.sun.com"],
- path, (1024, 768), (0, 0))
- return 0
-
-
-if __name__ == "__main__":
- sys.exit(main())
diff --git a/chromium/tools/site_compare/scrapers/ie/__init__.py b/chromium/tools/site_compare/scrapers/ie/__init__.py
deleted file mode 100755
index b4dab09e4c2..00000000000
--- a/chromium/tools/site_compare/scrapers/ie/__init__.py
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""Selects the appropriate scraper for Internet Explorer."""
-
-
-def GetScraper(version):
- """Returns the scraper module for the given version.
-
- Args:
- version: version string of IE, or None for most recent
-
- Returns:
- scrape module for given version
- """
-
- # Pychecker will warn that the parameter is unused; we only
- # support one version of IE at this time
-
- # We only have one version of the IE scraper for now
- return __import__("ie7", globals(), locals(), [''])
-
-
-# if invoked rather than imported, test
-if __name__ == "__main__":
- print GetScraper("7.0.5370.1").version
diff --git a/chromium/tools/site_compare/scrapers/ie/ie7.py b/chromium/tools/site_compare/scrapers/ie/ie7.py
deleted file mode 100755
index dcb83ca238f..00000000000
--- a/chromium/tools/site_compare/scrapers/ie/ie7.py
+++ /dev/null
@@ -1,210 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""Does scraping for all known versions of IE."""
-
-import pywintypes
-import time
-import types
-
-from drivers import keyboard
-from drivers import mouse
-from drivers import windowing
-
-# Default version
-version = "7.0.5730.1"
-
-DEFAULT_PATH = r"c:\program files\internet explorer\iexplore.exe"
-
-def GetBrowser(path):
- """Invoke the IE browser and return the process, frame, and content window.
-
- Args:
- path: full path to browser
-
- Returns:
- A tuple of (process handle, render pane)
- """
- if not path: path = DEFAULT_PATH
-
- (iewnd, ieproc, address_bar, render_pane, tab_window) = InvokeBrowser(path)
- return (ieproc, iewnd, render_pane)
-
-
-def InvokeBrowser(path):
- """Invoke the IE browser.
-
- Args:
- path: full path to browser
-
- Returns:
- A tuple of (main window, process handle, address bar,
- render_pane, tab_window)
- """
- # Invoke IE
- (ieproc, iewnd) = windowing.InvokeAndWait(path)
-
- # Get windows we'll need
- for tries in xrange(10):
- try:
- address_bar = windowing.FindChildWindow(
- iewnd, "WorkerW|Navigation Bar/ReBarWindow32/"
- "Address Band Root/ComboBoxEx32/ComboBox/Edit")
- render_pane = windowing.FindChildWindow(
- iewnd, "TabWindowClass/Shell DocObject View")
- tab_window = windowing.FindChildWindow(
- iewnd, "CommandBarClass/ReBarWindow32/TabBandClass/DirectUIHWND")
- except IndexError:
- time.sleep(1)
- continue
- break
-
- return (iewnd, ieproc, address_bar, render_pane, tab_window)
-
-
-def Scrape(urls, outdir, size, pos, timeout=20, **kwargs):
- """Invoke a browser, send it to a series of URLs, and save its output.
-
- Args:
- urls: list of URLs to scrape
- outdir: directory to place output
- size: size of browser window to use
- pos: position of browser window
- timeout: amount of time to wait for page to load
- kwargs: miscellaneous keyword args
-
- Returns:
- None if success, else an error string
- """
- path = r"c:\program files\internet explorer\iexplore.exe"
-
- if "path" in kwargs and kwargs["path"]: path = kwargs["path"]
-
- (iewnd, ieproc, address_bar, render_pane, tab_window) = (
- InvokeBrowser(path) )
-
- # Resize and reposition the frame
- windowing.MoveAndSizeWindow(iewnd, pos, size, render_pane)
-
- # Visit each URL we're given
- if type(urls) in types.StringTypes: urls = [urls]
-
- timedout = False
-
- for url in urls:
-
- # Double-click in the address bar, type the name, and press Enter
- mouse.DoubleClickInWindow(address_bar)
- keyboard.TypeString(url)
- keyboard.TypeString("\n")
-
- # Wait for the page to finish loading
- load_time = windowing.WaitForThrobber(
- tab_window, (6, 8, 22, 24), timeout)
- timedout = load_time < 0
-
- if timedout:
- break
-
- # Scrape the page
- image = windowing.ScrapeWindow(render_pane)
-
- # Save to disk
- if "filename" in kwargs:
- if callable(kwargs["filename"]):
- filename = kwargs["filename"](url)
- else:
- filename = kwargs["filename"]
- else:
- filename = windowing.URLtoFilename(url, outdir, ".bmp")
- image.save(filename)
-
- windowing.EndProcess(ieproc)
-
- if timedout:
- return "timeout"
-
-
-def Time(urls, size, timeout, **kwargs):
- """Measure how long it takes to load each of a series of URLs
-
- Args:
- urls: list of URLs to time
- size: size of browser window to use
- timeout: amount of time to wait for page to load
- kwargs: miscellaneous keyword args
-
- Returns:
- A list of tuples (url, time). "time" can be "crashed" or "timeout"
- """
- if "path" in kwargs and kwargs["path"]: path = kwargs["path"]
- else: path = DEFAULT_PATH
- proc = None
-
- # Visit each URL we're given
- if type(urls) in types.StringTypes: urls = [urls]
-
- ret = []
- for url in urls:
- try:
- # Invoke the browser if necessary
- if not proc:
- (wnd, proc, address_bar, render_pane, tab_window) = InvokeBrowser(path)
-
- # Resize and reposition the frame
- windowing.MoveAndSizeWindow(wnd, (0,0), size, render_pane)
-
- # Double-click in the address bar, type the name, and press Enter
- mouse.DoubleClickInWindow(address_bar)
- keyboard.TypeString(url)
- keyboard.TypeString("\n")
-
- # Wait for the page to finish loading
- load_time = windowing.WaitForThrobber(
- tab_window, (6, 8, 22, 24), timeout)
- timedout = load_time < 0
-
- if timedout:
- load_time = "timeout"
-
- # Send an alt-F4 to make the browser close; if this times out,
- # we've probably got a crash
- keyboard.TypeString(r"{\4}", use_modifiers=True)
- if not windowing.WaitForProcessExit(proc, timeout):
- windowing.EndProcess(proc)
- load_time = "crashed"
- proc = None
- except pywintypes.error:
- load_time = "crashed"
- proc = None
-
- ret.append( (url, load_time) )
-
- # Send an alt-F4 to make the browser close; if this times out,
- # we've probably got a crash
- if proc:
- keyboard.TypeString(r"{\4}", use_modifiers=True)
- if not windowing.WaitForProcessExit(proc, timeout):
- windowing.EndProcess(proc)
-
- return ret
-
-
-def main():
- # We're being invoked rather than imported, so run some tests
- path = r"c:\sitecompare\scrapes\ie7\7.0.5380.11"
- windowing.PreparePath(path)
-
- # Scrape three sites and save the results
- Scrape(
- ["http://www.microsoft.com",
- "http://www.google.com",
- "http://www.sun.com"],
- path, (1024, 768), (0, 0))
- return 0
-
-
-if __name__ == "__main__":
- sys.exit(main())
diff --git a/chromium/tools/site_compare/site_compare.py b/chromium/tools/site_compare/site_compare.py
deleted file mode 100755
index db9216f2d0c..00000000000
--- a/chromium/tools/site_compare/site_compare.py
+++ /dev/null
@@ -1,176 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""SiteCompare component to handle bulk scrapes.
-
-Invokes a list of browsers and sends them to a list of URLs,
-saving the rendered results to a specified directory, then
-performs comparison operations on the resulting bitmaps and
-saves the results
-"""
-
-
-# This line is necessary to work around a QEMU bug
-import _imaging
-
-import os # Functions for walking the directory tree
-import types # Runtime type-checking
-
-import command_line # command-line parsing
-import drivers # Functions for driving keyboard/mouse/windows, OS-specific
-import operators # Functions that, given two bitmaps as input, produce
- # output depending on the performance of an operation
-import scrapers # Functions that know how to capture a render from
- # particular browsers
-
-import commands.compare2 # compare one page in two versions of same browser
-import commands.maskmaker # generate a mask based on repeated scrapes
-import commands.measure # measure length of time a page takes to load
-import commands.scrape # scrape a URL or series of URLs to a bitmap
-
-# The timeload command is obsolete (too flaky); it may be reinstated
-# later but for now it's been superceded by "measure"
-# import commands.timeload # measure length of time a page takes to load
-
-def Scrape(browsers, urls, window_size=(1024, 768),
- window_pos=(0, 0), timeout=20, save_path=None, **kwargs):
- """Invoke one or more browsers over one or more URLs, scraping renders.
-
- Args:
- browsers: browsers to invoke with optional version strings
- urls: URLs to visit
- window_size: size of the browser window to display
- window_pos: location of browser window
- timeout: time (in seconds) to wait for page to load
- save_path: root of save path, automatically appended with browser and
- version
- kwargs: miscellaneous keyword args, passed to scraper
- Returns:
- None
-
- @TODO(jhaas): more parameters, or perhaps an indefinite dictionary
- parameter, for things like length of time to wait for timeout, speed
- of mouse clicks, etc. Possibly on a per-browser, per-URL, or
- per-browser-per-URL basis
- """
-
- if type(browsers) in types.StringTypes: browsers = [browsers]
-
- if save_path is None:
- # default save path is "scrapes" off the current root
- save_path = os.path.join(os.path.split(__file__)[0], "Scrapes")
-
- for browser in browsers:
- # Browsers should be tuples of (browser, version)
- if type(browser) in types.StringTypes: browser = (browser, None)
- scraper = scrapers.GetScraper(browser)
-
- full_path = os.path.join(save_path, browser[0], scraper.version)
- drivers.windowing.PreparePath(full_path)
-
- scraper.Scrape(urls, full_path, window_size, window_pos, timeout, kwargs)
-
-
-def Compare(base, compare, ops, root_path=None, out_path=None):
- """Compares a series of scrapes using a series of operators.
-
- Args:
- base: (browser, version) tuple of version to consider the baseline
- compare: (browser, version) tuple of version to compare to
- ops: list of operators plus operator arguments
- root_path: root of the scrapes
- out_path: place to put any output from the operators
-
- Returns:
- None
-
- @TODO(jhaas): this method will likely change, to provide a robust and
- well-defined way of chaining operators, applying operators conditionally,
- and full-featured scripting of the operator chain. There also needs
- to be better definition of the output; right now it's to stdout and
- a log.txt file, with operator-dependent images saved for error output
- """
- if root_path is None:
- # default save path is "scrapes" off the current root
- root_path = os.path.join(os.path.split(__file__)[0], "Scrapes")
-
- if out_path is None:
- out_path = os.path.join(os.path.split(__file__)[0], "Compares")
-
- if type(base) in types.StringTypes: base = (base, None)
- if type(compare) in types.StringTypes: compare = (compare, None)
- if type(ops) in types.StringTypes: ops = [ops]
-
- base_dir = os.path.join(root_path, base[0])
- compare_dir = os.path.join(root_path, compare[0])
-
- if base[1] is None:
- # base defaults to earliest capture
- base = (base[0], max(os.listdir(base_dir)))
-
- if compare[1] is None:
- # compare defaults to latest capture
- compare = (compare[0], min(os.listdir(compare_dir)))
-
- out_path = os.path.join(out_path, base[0], base[1], compare[0], compare[1])
- drivers.windowing.PreparePath(out_path)
-
- # TODO(jhaas): right now we're just dumping output to a log file
- # (and the console), which works as far as it goes but isn't nearly
- # robust enough. Change this after deciding exactly what we want to
- # change it to.
- out_file = open(os.path.join(out_path, "log.txt"), "w")
- description_string = ("Comparing %s %s to %s %s" %
- (base[0], base[1], compare[0], compare[1]))
- out_file.write(description_string)
- print description_string
-
- base_dir = os.path.join(base_dir, base[1])
- compare_dir = os.path.join(compare_dir, compare[1])
-
- for filename in os.listdir(base_dir):
- out_file.write("%s: " % filename)
-
- if not os.path.isfile(os.path.join(compare_dir, filename)):
- out_file.write("Does not exist in target directory\n")
- print "File %s does not exist in target directory" % filename
- continue
-
- base_filename = os.path.join(base_dir, filename)
- compare_filename = os.path.join(compare_dir, filename)
-
- for op in ops:
- if type(op) in types.StringTypes: op = (op, None)
-
- module = operators.GetOperator(op[0])
-
- ret = module.Compare(base_filename, compare_filename)
- if ret is None:
- print "%s: OK" % (filename,)
- out_file.write("OK\n")
- else:
- print "%s: %s" % (filename, ret[0])
- out_file.write("%s\n" % (ret[0]))
- ret[1].save(os.path.join(out_path, filename))
-
- out_file.close()
-
-
-def main():
- """Main executable. Parse the command line and invoke the command."""
- cmdline = command_line.CommandLine()
-
- # The below two commands are currently unstable so have been disabled
- # commands.compare2.CreateCommand(cmdline)
- # commands.maskmaker.CreateCommand(cmdline)
- commands.measure.CreateCommand(cmdline)
- commands.scrape.CreateCommand(cmdline)
-
- cmdline.ParseCommandLine()
- return 0
-
-
-if __name__ == "__main__":
- sys.exit(main())
diff --git a/chromium/tools/site_compare/utils/__init__.py b/chromium/tools/site_compare/utils/__init__.py
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/chromium/tools/site_compare/utils/__init__.py
+++ /dev/null
diff --git a/chromium/tools/site_compare/utils/browser_iterate.py b/chromium/tools/site_compare/utils/browser_iterate.py
deleted file mode 100644
index 596b475cdcb..00000000000
--- a/chromium/tools/site_compare/utils/browser_iterate.py
+++ /dev/null
@@ -1,199 +0,0 @@
-# Copyright (c) 2011 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.
-
-"""Utility to use a browser to visit multiple URLs.
-
-Prerequisites:
- 1. The command_line package from tools/site_compare
- 2. Either the IE BHO or Firefox extension (or both)
-
-Installation:
- 1. Build the IE BHO, or call regsvr32 on a prebuilt binary
- 2. Add a file called "measurepageloadtimeextension@google.com" to
- the default Firefox profile directory under extensions, containing
- the path to the Firefox extension root
-
-Invoke with the command line arguments as documented within
-the command line.
-"""
-
-import command_line
-import scrapers
-import socket
-import time
-
-from drivers import windowing
-
-# Constants
-MAX_URL = 1024
-PORT = 42492
-
-def SetupIterationCommandLine(cmd):
- """Adds the necessary flags for iteration to a command.
-
- Args:
- cmd: an object created by cmdline.AddCommand
- """
- cmd.AddArgument(
- ["-b", "--browser"], "Browser to use (ie, firefox, chrome)",
- type="string", required=True)
- cmd.AddArgument(
- ["-b1v", "--browserver"], "Version of browser", metaname="VERSION")
- cmd.AddArgument(
- ["-p", "--browserpath"], "Path to browser.",
- type="string", required=False)
- cmd.AddArgument(
- ["-u", "--url"], "URL to visit")
- cmd.AddArgument(
- ["-l", "--list"], "File containing list of URLs to visit", type="readfile")
- cmd.AddMutualExclusion(["--url", "--list"])
- cmd.AddArgument(
- ["-s", "--startline"], "First line of URL list", type="int")
- cmd.AddArgument(
- ["-e", "--endline"], "Last line of URL list (exclusive)", type="int")
- cmd.AddArgument(
- ["-c", "--count"], "Number of lines of URL file to use", type="int")
- cmd.AddDependency("--startline", "--list")
- cmd.AddRequiredGroup(["--url", "--list"])
- cmd.AddDependency("--endline", "--list")
- cmd.AddDependency("--count", "--list")
- cmd.AddMutualExclusion(["--count", "--endline"])
- cmd.AddDependency("--count", "--startline")
- cmd.AddArgument(
- ["-t", "--timeout"], "Amount of time (seconds) to wait for browser to "
- "finish loading",
- type="int", default=300)
- cmd.AddArgument(
- ["-sz", "--size"], "Browser window size", default=(800, 600), type="coords")
-
-
-def Iterate(command, iteration_func):
- """Iterates over a list of URLs, calling a function on each.
-
- Args:
- command: the command line containing the iteration flags
- iteration_func: called for each URL with (proc, wnd, url, result)
- """
-
- # Retrieve the browser scraper to use to invoke the browser
- scraper = scrapers.GetScraper((command["--browser"], command["--browserver"]))
-
- def AttachToBrowser(path, timeout):
- """Invoke the browser process and connect to the socket."""
- (proc, frame, wnd) = scraper.GetBrowser(path)
-
- if not wnd: raise ValueError("Could not invoke browser.")
-
- # Try to connect the socket. If it fails, wait and try
- # again. Do this for ten seconds
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)
-
- for attempt in xrange(10):
- try:
- s.connect(("localhost", PORT))
- except socket.error:
- time.sleep(1)
- continue
- break
-
- try:
- s.getpeername()
- except socket.error:
- raise ValueError("Could not connect to browser")
-
- if command["--size"]:
- # Resize and reposition the frame
- windowing.MoveAndSizeWindow(frame, (0, 0), command["--size"], wnd)
-
- s.settimeout(timeout)
-
- Iterate.proc = proc
- Iterate.wnd = wnd
- Iterate.s = s
-
- def DetachFromBrowser():
- """Close the socket and kill the process if necessary."""
- if Iterate.s:
- Iterate.s.close()
- Iterate.s = None
-
- if Iterate.proc:
- if not windowing.WaitForProcessExit(Iterate.proc, 0):
- try:
- windowing.EndProcess(Iterate.proc)
- windowing.WaitForProcessExit(Iterate.proc, 0)
- except pywintypes.error:
- # Exception here most likely means the process died on its own
- pass
- Iterate.proc = None
-
- if command["--browserpath"]:
- browser = command["--browserpath"]
- else:
- browser = None
-
- # Read the URLs from the file
- if command["--url"]:
- url_list = [command["--url"]]
- else:
- startline = command["--startline"]
- if command["--count"]:
- endline = startline+command["--count"]
- else:
- endline = command["--endline"]
-
- url_list = []
- file = open(command["--list"], "r")
-
- for line in xrange(startline-1):
- file.readline()
-
- for line in xrange(endline-startline):
- url_list.append(file.readline().strip())
-
- timeout = command["--timeout"]
-
- # Loop through the URLs and send them through the socket
- Iterate.s = None
- Iterate.proc = None
- Iterate.wnd = None
-
- for url in url_list:
- # Invoke the browser if necessary
- if not Iterate.proc:
- AttachToBrowser(browser, timeout)
- # Send the URL and wait for a response
- Iterate.s.send(url + "\n")
-
- response = ""
-
- while (response.find("\n") < 0):
-
- try:
- recv = Iterate.s.recv(MAX_URL)
- response = response + recv
-
- # Workaround for an oddity: when Firefox closes
- # gracefully, somehow Python doesn't detect it.
- # (Telnet does)
- if not recv:
- raise socket.error
-
- except socket.timeout:
- response = url + ",hang\n"
- DetachFromBrowser()
- except socket.error:
- # If there was a socket error, it's probably a crash
- response = url + ",crash\n"
- DetachFromBrowser()
-
- # If we received a timeout response, restart the browser
- if response[-9:] == ",timeout\n":
- DetachFromBrowser()
-
- # Invoke the iteration function
- iteration_func(url, Iterate.proc, Iterate.wnd, response)
-
- # We're done
- DetachFromBrowser()
diff --git a/chromium/tools/sort-headers.py b/chromium/tools/sort-headers.py
deleted file mode 100755
index 42a8be8e52b..00000000000
--- a/chromium/tools/sort-headers.py
+++ /dev/null
@@ -1,185 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-"""Given a filename as an argument, sort the #include/#imports in that file.
-
-Shows a diff and prompts for confirmation before doing the deed.
-Works great with tools/git/for-all-touched-files.py.
-"""
-
-import optparse
-import os
-import sys
-
-
-def YesNo(prompt):
- """Prompts with a yes/no question, returns True if yes."""
- print prompt,
- sys.stdout.flush()
- # http://code.activestate.com/recipes/134892/
- if sys.platform == 'win32':
- import msvcrt
- ch = msvcrt.getch()
- else:
- import termios
- import tty
- fd = sys.stdin.fileno()
- old_settings = termios.tcgetattr(fd)
- ch = 'n'
- try:
- tty.setraw(sys.stdin.fileno())
- ch = sys.stdin.read(1)
- finally:
- termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
- print ch
- return ch in ('Y', 'y')
-
-
-def IncludeCompareKey(line):
- """Sorting comparator key used for comparing two #include lines.
- Returns the filename without the #include/#import prefix.
- """
- for prefix in ('#include ', '#import '):
- if line.startswith(prefix):
- line = line[len(prefix):]
- break
-
- # The win32 api has all sorts of implicit include order dependencies :-/
- # Give a few headers special sort keys that make sure they appear before all
- # other headers.
- if line.startswith('<windows.h>'): # Must be before e.g. shellapi.h
- return '0'
- if line.startswith('<atlbase.h>'): # Must be before atlapp.h.
- return '1' + line
- if line.startswith('<unknwn.h>'): # Must be before e.g. intshcut.h
- return '1' + line
-
- # C++ system headers should come after C system headers.
- if line.startswith('<'):
- if line.find('.h>') != -1:
- return '2' + line.lower()
- else:
- return '3' + line.lower()
-
- return '4' + line
-
-
-def IsInclude(line):
- """Returns True if the line is an #include/#import line."""
- return line.startswith('#include ') or line.startswith('#import ')
-
-
-def SortHeader(infile, outfile):
- """Sorts the headers in infile, writing the sorted file to outfile."""
- for line in infile:
- if IsInclude(line):
- headerblock = []
- while IsInclude(line):
- infile_ended_on_include_line = False
- headerblock.append(line)
- # Ensure we don't die due to trying to read beyond the end of the file.
- try:
- line = infile.next()
- except StopIteration:
- infile_ended_on_include_line = True
- break
- for header in sorted(headerblock, key=IncludeCompareKey):
- outfile.write(header)
- if infile_ended_on_include_line:
- # We already wrote the last line above; exit to ensure it isn't written
- # again.
- return
- # Intentionally fall through, to write the line that caused
- # the above while loop to exit.
- outfile.write(line)
-
-
-def FixFileWithConfirmFunction(filename, confirm_function,
- perform_safety_checks):
- """Creates a fixed version of the file, invokes |confirm_function|
- to decide whether to use the new file, and cleans up.
-
- |confirm_function| takes two parameters, the original filename and
- the fixed-up filename, and returns True to use the fixed-up file,
- false to not use it.
-
- If |perform_safety_checks| is True, then the function checks whether it is
- unsafe to reorder headers in this file and skips the reorder with a warning
- message in that case.
- """
- if perform_safety_checks and IsUnsafeToReorderHeaders(filename):
- print ('Not reordering headers in %s as the script thinks that the '
- 'order of headers in this file is semantically significant.'
- % (filename))
- return
- fixfilename = filename + '.new'
- infile = open(filename, 'rb')
- outfile = open(fixfilename, 'wb')
- SortHeader(infile, outfile)
- infile.close()
- outfile.close() # Important so the below diff gets the updated contents.
-
- try:
- if confirm_function(filename, fixfilename):
- if sys.platform == 'win32':
- os.unlink(filename)
- os.rename(fixfilename, filename)
- finally:
- try:
- os.remove(fixfilename)
- except OSError:
- # If the file isn't there, we don't care.
- pass
-
-
-def DiffAndConfirm(filename, should_confirm, perform_safety_checks):
- """Shows a diff of what the tool would change the file named
- filename to. Shows a confirmation prompt if should_confirm is true.
- Saves the resulting file if should_confirm is false or the user
- answers Y to the confirmation prompt.
- """
- def ConfirmFunction(filename, fixfilename):
- diff = os.system('diff -u %s %s' % (filename, fixfilename))
- if sys.platform != 'win32':
- diff >>= 8
- if diff == 0: # Check exit code.
- print '%s: no change' % filename
- return False
-
- return (not should_confirm or YesNo('Use new file (y/N)?'))
-
- FixFileWithConfirmFunction(filename, ConfirmFunction, perform_safety_checks)
-
-def IsUnsafeToReorderHeaders(filename):
- # *_message_generator.cc is almost certainly a file that generates IPC
- # definitions. Changes in include order in these files can result in them not
- # building correctly.
- if filename.find("message_generator.cc") != -1:
- return True
- return False
-
-def main():
- parser = optparse.OptionParser(usage='%prog filename1 filename2 ...')
- parser.add_option('-f', '--force', action='store_false', default=True,
- dest='should_confirm',
- help='Turn off confirmation prompt.')
- parser.add_option('--no_safety_checks',
- action='store_false', default=True,
- dest='perform_safety_checks',
- help='Do not perform the safety checks via which this '
- 'script refuses to operate on files for which it thinks '
- 'the include ordering is semantically significant.')
- opts, filenames = parser.parse_args()
-
- if len(filenames) < 1:
- parser.print_help()
- return 1
-
- for filename in filenames:
- DiffAndConfirm(filename, opts.should_confirm, opts.perform_safety_checks)
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/stats_viewer/OpenDialog.Designer.cs b/chromium/tools/stats_viewer/OpenDialog.Designer.cs
deleted file mode 100644
index 96f01f53e80..00000000000
--- a/chromium/tools/stats_viewer/OpenDialog.Designer.cs
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright (c) 2012 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.
-
-namespace StatsViewer
-{
- partial class OpenDialog
- {
- /// <summary>
- /// Required designer variable.
- /// </summary>
- private System.ComponentModel.IContainer components = null;
-
- /// <summary>
- /// Clean up any resources being used.
- /// </summary>
- /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- /// <summary>
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- /// </summary>
- private void InitializeComponent()
- {
- this.name_box_ = new System.Windows.Forms.TextBox();
- this.label1 = new System.Windows.Forms.Label();
- this.button1 = new System.Windows.Forms.Button();
- this.SuspendLayout();
- //
- // name_box_
- //
- this.name_box_.Location = new System.Drawing.Point(108, 25);
- this.name_box_.Name = "name_box_";
- this.name_box_.Size = new System.Drawing.Size(180, 20);
- this.name_box_.TabIndex = 0;
- this.name_box_.KeyUp += new System.Windows.Forms.KeyEventHandler(this.OnKeyUp);
- //
- // label1
- //
- this.label1.AutoSize = true;
- this.label1.Location = new System.Drawing.Point(12, 28);
- this.label1.Name = "label1";
- this.label1.Size = new System.Drawing.Size(91, 13);
- this.label1.TabIndex = 1;
- this.label1.Text = "Stats File to Open";
- //
- // button1
- //
- this.button1.Location = new System.Drawing.Point(108, 61);
- this.button1.Name = "button1";
- this.button1.Size = new System.Drawing.Size(75, 23);
- this.button1.TabIndex = 2;
- this.button1.Text = "OK";
- this.button1.UseVisualStyleBackColor = true;
- this.button1.Click += new System.EventHandler(this.button1_Click);
- //
- // OpenDialog
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(303, 94);
- this.Controls.Add(this.button1);
- this.Controls.Add(this.label1);
- this.Controls.Add(this.name_box_);
- this.Name = "OpenDialog";
- this.Text = "OpenDialog";
- this.ResumeLayout(false);
- this.PerformLayout();
-
- }
-
- #endregion
-
- private System.Windows.Forms.TextBox name_box_;
- private System.Windows.Forms.Label label1;
- private System.Windows.Forms.Button button1;
- }
-}
diff --git a/chromium/tools/stats_viewer/OpenDialog.cs b/chromium/tools/stats_viewer/OpenDialog.cs
deleted file mode 100644
index 05ca03934fe..00000000000
--- a/chromium/tools/stats_viewer/OpenDialog.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (c) 2012 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.
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Text;
-using System.Windows.Forms;
-
-namespace StatsViewer
-{
- public partial class OpenDialog : Form
- {
- public OpenDialog()
- {
- InitializeComponent();
- }
-
- /// <summary>
- /// Get the user selected filename
- /// </summary>
- public string FileName
- {
- get {
- return this.name_box_.Text;
- }
- }
-
- private void button1_Click(object sender, EventArgs e)
- {
- this.Close();
- }
-
- private void OnKeyUp(object sender, KeyEventArgs e)
- {
- if (e.KeyCode == Keys.Enter)
- {
- this.Close();
- }
- }
- }
-}
diff --git a/chromium/tools/stats_viewer/OpenDialog.resx b/chromium/tools/stats_viewer/OpenDialog.resx
deleted file mode 100644
index ff31a6db56e..00000000000
--- a/chromium/tools/stats_viewer/OpenDialog.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
- <!--
- Microsoft ResX Schema
-
- Version 2.0
-
- The primary goals of this format is to allow a simple XML format
- that is mostly human readable. The generation and parsing of the
- various data types are done through the TypeConverter classes
- associated with the data types.
-
- Example:
-
- ... ado.net/XML headers & schema ...
- <resheader name="resmimetype">text/microsoft-resx</resheader>
- <resheader name="version">2.0</resheader>
- <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
- <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
- <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
- <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
- <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
- <value>[base64 mime encoded serialized .NET Framework object]</value>
- </data>
- <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
- <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
- <comment>This is a comment</comment>
- </data>
-
- There are any number of "resheader" rows that contain simple
- name/value pairs.
-
- Each data row contains a name, and value. The row also contains a
- type or mimetype. Type corresponds to a .NET class that support
- text/value conversion through the TypeConverter architecture.
- Classes that don't support this are serialized and stored with the
- mimetype set.
-
- The mimetype is used for serialized objects, and tells the
- ResXResourceReader how to depersist the object. This is currently not
- extensible. For a given mimetype the value must be set accordingly:
-
- Note - application/x-microsoft.net.object.binary.base64 is the format
- that the ResXResourceWriter will generate, however the reader can
- read any of the formats listed below.
-
- mimetype: application/x-microsoft.net.object.binary.base64
- value : The object must be serialized with
- : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
- : and then encoded with base64 encoding.
-
- mimetype: application/x-microsoft.net.object.soap.base64
- value : The object must be serialized with
- : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
- : and then encoded with base64 encoding.
-
- mimetype: application/x-microsoft.net.object.bytearray.base64
- value : The object must be serialized into a byte array
- : using a System.ComponentModel.TypeConverter
- : and then encoded with base64 encoding.
- -->
- <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
- <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
- <xsd:element name="root" msdata:IsDataSet="true">
- <xsd:complexType>
- <xsd:choice maxOccurs="unbounded">
- <xsd:element name="metadata">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" />
- </xsd:sequence>
- <xsd:attribute name="name" use="required" type="xsd:string" />
- <xsd:attribute name="type" type="xsd:string" />
- <xsd:attribute name="mimetype" type="xsd:string" />
- <xsd:attribute ref="xml:space" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="assembly">
- <xsd:complexType>
- <xsd:attribute name="alias" type="xsd:string" />
- <xsd:attribute name="name" type="xsd:string" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="data">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
- <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
- <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
- <xsd:attribute ref="xml:space" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="resheader">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" use="required" />
- </xsd:complexType>
- </xsd:element>
- </xsd:choice>
- </xsd:complexType>
- </xsd:element>
- </xsd:schema>
- <resheader name="resmimetype">
- <value>text/microsoft-resx</value>
- </resheader>
- <resheader name="version">
- <value>2.0</value>
- </resheader>
- <resheader name="reader">
- <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </resheader>
- <resheader name="writer">
- <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </resheader>
-</root> \ No newline at end of file
diff --git a/chromium/tools/stats_viewer/Properties/AssemblyInfo.cs b/chromium/tools/stats_viewer/Properties/AssemblyInfo.cs
deleted file mode 100644
index 8ffae142df5..00000000000
--- a/chromium/tools/stats_viewer/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("StatsViewer")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Google")]
-[assembly: AssemblyProduct("StatsViewer")]
-[assembly: AssemblyCopyright("Copyright © Google 2007")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("0c5760e1-3ada-48e2-800d-5b104bef4a95")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/chromium/tools/stats_viewer/Properties/Resources.Designer.cs b/chromium/tools/stats_viewer/Properties/Resources.Designer.cs
deleted file mode 100644
index 4195c5f0de3..00000000000
--- a/chromium/tools/stats_viewer/Properties/Resources.Designer.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-//------------------------------------------------------------------------------
-// <auto-generated>
-// This code was generated by a tool.
-// Runtime Version:2.0.50727.832
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-namespace StatsViewer.Properties
-{
-
-
- /// <summary>
- /// A strongly-typed resource class, for looking up localized strings, etc.
- /// </summary>
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources
- {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources()
- {
- }
-
- /// <summary>
- /// Returns the cached ResourceManager instance used by this class.
- /// </summary>
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager
- {
- get
- {
- if ((resourceMan == null))
- {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("StatsViewer.Properties.Resources", typeof(Resources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- /// <summary>
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- /// </summary>
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture
- {
- get
- {
- return resourceCulture;
- }
- set
- {
- resourceCulture = value;
- }
- }
- }
-}
diff --git a/chromium/tools/stats_viewer/Properties/Resources.resx b/chromium/tools/stats_viewer/Properties/Resources.resx
deleted file mode 100644
index ffecec851ab..00000000000
--- a/chromium/tools/stats_viewer/Properties/Resources.resx
+++ /dev/null
@@ -1,117 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
- <!--
- Microsoft ResX Schema
-
- Version 2.0
-
- The primary goals of this format is to allow a simple XML format
- that is mostly human readable. The generation and parsing of the
- various data types are done through the TypeConverter classes
- associated with the data types.
-
- Example:
-
- ... ado.net/XML headers & schema ...
- <resheader name="resmimetype">text/microsoft-resx</resheader>
- <resheader name="version">2.0</resheader>
- <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
- <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
- <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
- <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
- <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
- <value>[base64 mime encoded serialized .NET Framework object]</value>
- </data>
- <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
- <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
- <comment>This is a comment</comment>
- </data>
-
- There are any number of "resheader" rows that contain simple
- name/value pairs.
-
- Each data row contains a name, and value. The row also contains a
- type or mimetype. Type corresponds to a .NET class that support
- text/value conversion through the TypeConverter architecture.
- Classes that don't support this are serialized and stored with the
- mimetype set.
-
- The mimetype is used for serialized objects, and tells the
- ResXResourceReader how to depersist the object. This is currently not
- extensible. For a given mimetype the value must be set accordingly:
-
- Note - application/x-microsoft.net.object.binary.base64 is the format
- that the ResXResourceWriter will generate, however the reader can
- read any of the formats listed below.
-
- mimetype: application/x-microsoft.net.object.binary.base64
- value : The object must be serialized with
- : System.Serialization.Formatters.Binary.BinaryFormatter
- : and then encoded with base64 encoding.
-
- mimetype: application/x-microsoft.net.object.soap.base64
- value : The object must be serialized with
- : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
- : and then encoded with base64 encoding.
-
- mimetype: application/x-microsoft.net.object.bytearray.base64
- value : The object must be serialized into a byte array
- : using a System.ComponentModel.TypeConverter
- : and then encoded with base64 encoding.
- -->
- <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
- <xsd:element name="root" msdata:IsDataSet="true">
- <xsd:complexType>
- <xsd:choice maxOccurs="unbounded">
- <xsd:element name="metadata">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" />
- <xsd:attribute name="type" type="xsd:string" />
- <xsd:attribute name="mimetype" type="xsd:string" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="assembly">
- <xsd:complexType>
- <xsd:attribute name="alias" type="xsd:string" />
- <xsd:attribute name="name" type="xsd:string" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="data">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
- <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
- <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="resheader">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" use="required" />
- </xsd:complexType>
- </xsd:element>
- </xsd:choice>
- </xsd:complexType>
- </xsd:element>
- </xsd:schema>
- <resheader name="resmimetype">
- <value>text/microsoft-resx</value>
- </resheader>
- <resheader name="version">
- <value>2.0</value>
- </resheader>
- <resheader name="reader">
- <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </resheader>
- <resheader name="writer">
- <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </resheader>
-</root> \ No newline at end of file
diff --git a/chromium/tools/stats_viewer/Properties/Settings.Designer.cs b/chromium/tools/stats_viewer/Properties/Settings.Designer.cs
deleted file mode 100644
index 221765adcf5..00000000000
--- a/chromium/tools/stats_viewer/Properties/Settings.Designer.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-//------------------------------------------------------------------------------
-// <auto-generated>
-// This code was generated by a tool.
-// Runtime Version:2.0.50727.832
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-namespace StatsViewer.Properties
-{
-
-
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")]
- internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
- {
-
- private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-
- public static Settings Default
- {
- get
- {
- return defaultInstance;
- }
- }
- }
-}
diff --git a/chromium/tools/stats_viewer/Properties/Settings.settings b/chromium/tools/stats_viewer/Properties/Settings.settings
deleted file mode 100644
index abf36c5d3d7..00000000000
--- a/chromium/tools/stats_viewer/Properties/Settings.settings
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version='1.0' encoding='utf-8'?>
-<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
- <Profiles>
- <Profile Name="(Default)" />
- </Profiles>
- <Settings />
-</SettingsFile>
diff --git a/chromium/tools/stats_viewer/Resources.Designer.cs b/chromium/tools/stats_viewer/Resources.Designer.cs
deleted file mode 100644
index 2d915e07da8..00000000000
--- a/chromium/tools/stats_viewer/Resources.Designer.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-//------------------------------------------------------------------------------
-// <auto-generated>
-// This code was generated by a tool.
-// Runtime Version:2.0.50727.832
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-namespace StatsViewer {
- using System;
-
-
- /// <summary>
- /// A strongly-typed resource class, for looking up localized strings, etc.
- /// </summary>
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources() {
- }
-
- /// <summary>
- /// Returns the cached ResourceManager instance used by this class.
- /// </summary>
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("StatsViewer.Resources", typeof(Resources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- /// <summary>
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- /// </summary>
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
-
- internal static System.Drawing.Bitmap kitten {
- get {
- object obj = ResourceManager.GetObject("kitten", resourceCulture);
- return ((System.Drawing.Bitmap)(obj));
- }
- }
-
- internal static System.Drawing.Bitmap kittenbackground {
- get {
- object obj = ResourceManager.GetObject("kittenbackground", resourceCulture);
- return ((System.Drawing.Bitmap)(obj));
- }
- }
- }
-}
diff --git a/chromium/tools/stats_viewer/Resources.resx b/chromium/tools/stats_viewer/Resources.resx
deleted file mode 100644
index 9486b218055..00000000000
--- a/chromium/tools/stats_viewer/Resources.resx
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
- <!--
- Microsoft ResX Schema
-
- Version 2.0
-
- The primary goals of this format is to allow a simple XML format
- that is mostly human readable. The generation and parsing of the
- various data types are done through the TypeConverter classes
- associated with the data types.
-
- Example:
-
- ... ado.net/XML headers & schema ...
- <resheader name="resmimetype">text/microsoft-resx</resheader>
- <resheader name="version">2.0</resheader>
- <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
- <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
- <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
- <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
- <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
- <value>[base64 mime encoded serialized .NET Framework object]</value>
- </data>
- <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
- <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
- <comment>This is a comment</comment>
- </data>
-
- There are any number of "resheader" rows that contain simple
- name/value pairs.
-
- Each data row contains a name, and value. The row also contains a
- type or mimetype. Type corresponds to a .NET class that support
- text/value conversion through the TypeConverter architecture.
- Classes that don't support this are serialized and stored with the
- mimetype set.
-
- The mimetype is used for serialized objects, and tells the
- ResXResourceReader how to depersist the object. This is currently not
- extensible. For a given mimetype the value must be set accordingly:
-
- Note - application/x-microsoft.net.object.binary.base64 is the format
- that the ResXResourceWriter will generate, however the reader can
- read any of the formats listed below.
-
- mimetype: application/x-microsoft.net.object.binary.base64
- value : The object must be serialized with
- : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
- : and then encoded with base64 encoding.
-
- mimetype: application/x-microsoft.net.object.soap.base64
- value : The object must be serialized with
- : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
- : and then encoded with base64 encoding.
-
- mimetype: application/x-microsoft.net.object.bytearray.base64
- value : The object must be serialized into a byte array
- : using a System.ComponentModel.TypeConverter
- : and then encoded with base64 encoding.
- -->
- <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
- <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
- <xsd:element name="root" msdata:IsDataSet="true">
- <xsd:complexType>
- <xsd:choice maxOccurs="unbounded">
- <xsd:element name="metadata">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" />
- </xsd:sequence>
- <xsd:attribute name="name" use="required" type="xsd:string" />
- <xsd:attribute name="type" type="xsd:string" />
- <xsd:attribute name="mimetype" type="xsd:string" />
- <xsd:attribute ref="xml:space" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="assembly">
- <xsd:complexType>
- <xsd:attribute name="alias" type="xsd:string" />
- <xsd:attribute name="name" type="xsd:string" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="data">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
- <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
- <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
- <xsd:attribute ref="xml:space" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="resheader">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" use="required" />
- </xsd:complexType>
- </xsd:element>
- </xsd:choice>
- </xsd:complexType>
- </xsd:element>
- </xsd:schema>
- <resheader name="resmimetype">
- <value>text/microsoft-resx</value>
- </resheader>
- <resheader name="version">
- <value>2.0</value>
- </resheader>
- <resheader name="reader">
- <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </resheader>
- <resheader name="writer">
- <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </resheader>
- <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
- <data name="kitten" type="System.Resources.ResXFileRef, System.Windows.Forms">
- <value>Resources\kitten.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
- </data>
- <data name="kittenbackground" type="System.Resources.ResXFileRef, System.Windows.Forms">
- <value>Resources\kittenbackground.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
- </data>
-</root> \ No newline at end of file
diff --git a/chromium/tools/stats_viewer/Resources/kitten.png b/chromium/tools/stats_viewer/Resources/kitten.png
deleted file mode 100644
index 51cc9b8f51e..00000000000
--- a/chromium/tools/stats_viewer/Resources/kitten.png
+++ /dev/null
Binary files differ
diff --git a/chromium/tools/stats_viewer/Resources/kittenbackground.png b/chromium/tools/stats_viewer/Resources/kittenbackground.png
deleted file mode 100644
index 09a72687fd6..00000000000
--- a/chromium/tools/stats_viewer/Resources/kittenbackground.png
+++ /dev/null
Binary files differ
diff --git a/chromium/tools/stats_viewer/program.cs b/chromium/tools/stats_viewer/program.cs
deleted file mode 100644
index d6a2b928624..00000000000
--- a/chromium/tools/stats_viewer/program.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) 2012 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.
-
-using System;
-using System.Windows.Forms;
-
-namespace StatsViewer
-{
- static class Program
- {
- /// <summary>
- /// The main entry point for the application.
- /// </summary>
- [STAThread]
- static void Main()
- {
- Application.EnableVisualStyles();
- Application.SetCompatibleTextRenderingDefault(false);
- Application.Run(new StatsViewer());
- }
- }
-}
diff --git a/chromium/tools/stats_viewer/stats_table.cs b/chromium/tools/stats_viewer/stats_table.cs
deleted file mode 100644
index e5d0894e37c..00000000000
--- a/chromium/tools/stats_viewer/stats_table.cs
+++ /dev/null
@@ -1,546 +0,0 @@
-// Copyright (c) 2012 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.
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Runtime.InteropServices;
-using System.Text;
-
-namespace StatsViewer
-{
- /// <summary>
- /// The stats table shared memory segment contains this
- /// header structure.
- /// </summary>
- [StructLayout(LayoutKind.Sequential)]
- internal struct StatsFileHeader {
- public int version;
- public int size;
- public int max_counters;
- public int max_threads;
- };
-
- /// <summary>
- /// An entry in the StatsTable.
- /// </summary>
- class StatsTableEntry {
- public StatsTableEntry(int id, string name, StatsTable table) {
- id_ = id;
- name_ = name;
- table_ = table;
- }
-
- /// <summary>
- /// The unique id for this entry
- /// </summary>
- public int id { get { return id_; } }
-
- /// <summary>
- /// The name for this entry.
- /// </summary>
- public string name { get { return name_; } }
-
- /// <summary>
- /// The value of this entry now.
- /// </summary>
- public int GetValue(int filter_pid) {
- return table_.GetValue(id_, filter_pid);
- }
-
- private int id_;
- private string name_;
- private StatsTable table_;
- }
-
- // An interface for StatsCounters
- interface IStatsCounter {
- // The name of the counter
- string name { get; }
- }
-
- // A counter.
- class StatsCounter : IStatsCounter {
- public StatsCounter(StatsTableEntry entry) {
- entry_ = entry;
- }
-
- public string name {
- get {
- return entry_.name;
- }
- }
-
- public int GetValue(int filter_pid) {
- return entry_.GetValue(filter_pid);
- }
-
- private StatsTableEntry entry_;
- }
-
- // A timer.
- class StatsTimer : IStatsCounter {
- public StatsTimer(StatsTableEntry entry)
- {
- entry_ = entry;
- }
-
- public string name {
- get {
- return entry_.name;
- }
- }
-
- public int GetValue(int filter_pid) {
- return entry_.GetValue(filter_pid);
- }
-
- private StatsTableEntry entry_;
- }
-
- // A rate.
- class StatsCounterRate : IStatsCounter
- {
- public StatsCounterRate(StatsCounter counter, StatsTimer timer) {
- counter_ = counter;
- timer_ = timer;
- }
-
- public string name { get { return counter_.name; } }
-
- public int GetCount(int filter_pid) {
- return counter_.GetValue(filter_pid);
- }
-
- public int GetTime(int filter_pid) {
- return timer_.GetValue(filter_pid);
- }
-
- private StatsCounter counter_;
- private StatsTimer timer_;
- }
-
- /// <summary>
- /// This is a C# reader for the chrome stats_table.
- /// </summary>
- class StatsTable {
- internal const int kMaxThreadNameLength = 32;
- internal const int kMaxCounterNameLength = 32;
-
- /// <summary>
- /// Open a StatsTable
- /// </summary>
- public StatsTable() {
- }
-
- #region Public Properties
- /// <summary>
- /// Get access to the counters in the table.
- /// </summary>
- public StatsTableCounters Counters() {
- return new StatsTableCounters(this);
- }
-
- /// <summary>
- /// Get access to the processes in the table
- /// </summary>
- public ICollection Processes {
- get {
- return new StatsTableProcesses(this);
- }
- }
- #endregion
-
- #region Internal Properties
- //
- // The internal methods are accessible to the enumerators
- // and helper classes below.
- //
-
- /// <summary>
- /// Access to the table header
- /// </summary>
- internal StatsFileHeader Header {
- get { return header_; }
- }
-
- /// <summary>
- /// Get the offset of the ThreadName table
- /// </summary>
- internal long ThreadNamesOffset {
- get {
- return memory_.ToInt64() + Marshal.SizeOf(typeof(StatsFileHeader));
- }
- }
-
- /// <summary>
- /// Get the offset of the PIDs table
- /// </summary>
- internal long PidsOffset {
- get {
- long offset = ThreadNamesOffset;
- // Thread names table
- offset += AlignedSize(header_.max_threads * kMaxThreadNameLength * 2);
- // Thread TID table
- offset += AlignedSize(header_.max_threads *
- Marshal.SizeOf(typeof(int)));
- return offset;
- }
- }
-
- /// <summary>
- /// Get the offset of the CounterName table
- /// </summary>
- internal long CounterNamesOffset {
- get {
- long offset = PidsOffset;
- // Thread PID table
- offset += AlignedSize(header_.max_threads *
- Marshal.SizeOf(typeof(int)));
- return offset;
- }
- }
-
- /// <summary>
- /// Get the offset of the Data table
- /// </summary>
- internal long DataOffset {
- get {
- long offset = CounterNamesOffset;
- // Counter names table
- offset += AlignedSize(header_.max_counters *
- kMaxCounterNameLength * 2);
- return offset;
- }
- }
- #endregion
-
- #region Public Methods
- /// <summary>
- /// Opens the memory map
- /// </summary>
- /// <returns></returns>
- /// <param name="name">The name of the file to open</param>
- public bool Open(string name) {
- map_handle_ =
- Win32.OpenFileMapping((int)Win32.MapAccess.FILE_MAP_WRITE, false,
- name);
- if (map_handle_ == IntPtr.Zero)
- return false;
-
- memory_ =
- Win32.MapViewOfFile(map_handle_, (int)Win32.MapAccess.FILE_MAP_WRITE,
- 0,0, 0);
- if (memory_ == IntPtr.Zero) {
- Win32.CloseHandle(map_handle_);
- return false;
- }
-
- header_ = (StatsFileHeader)Marshal.PtrToStructure(memory_, header_.GetType());
- return true;
- }
-
- /// <summary>
- /// Close the mapped file.
- /// </summary>
- public void Close() {
- Win32.UnmapViewOfFile(memory_);
- Win32.CloseHandle(map_handle_);
- }
-
- /// <summary>
- /// Zero out the stats file.
- /// </summary>
- public void Zero() {
- long offset = DataOffset;
- for (int threads = 0; threads < header_.max_threads; threads++) {
- for (int counters = 0; counters < header_.max_counters; counters++) {
- Marshal.WriteInt32((IntPtr) offset, 0);
- offset += Marshal.SizeOf(typeof(int));
- }
- }
- }
-
- /// <summary>
- /// Get the value for a StatsCounterEntry now.
- /// </summary>
- /// <returns></returns>
- /// <param name="filter_pid">If a specific PID is being queried, filter to this PID. 0 means use all data.</param>
- /// <param name="id">The id of the CounterEntry to get the value for.</param>
- public int GetValue(int id, int filter_pid) {
- long pid_offset = PidsOffset;
- long data_offset = DataOffset;
- data_offset += id * (Header.max_threads *
- Marshal.SizeOf(typeof(int)));
- int rv = 0;
- for (int cols = 0; cols < Header.max_threads; cols++)
- {
- int pid = Marshal.ReadInt32((IntPtr)pid_offset);
- if (filter_pid == 0 || filter_pid == pid)
- {
- rv += Marshal.ReadInt32((IntPtr)data_offset);
- }
- data_offset += Marshal.SizeOf(typeof(int));
- pid_offset += Marshal.SizeOf(typeof(int));
- }
- return rv;
- }
- #endregion
-
- #region Private Methods
- /// <summary>
- /// Align to 4-byte boundaries
- /// </summary>
- /// <param name="size"></param>
- /// <returns></returns>
- private long AlignedSize(long size) {
- Debug.Assert(sizeof(int) == 4);
- return size + (sizeof(int) - (size % sizeof(int))) % sizeof(int);
- }
- #endregion
-
- #region Private Members
- private IntPtr memory_;
- private IntPtr map_handle_;
- private StatsFileHeader header_;
- #endregion
- }
-
- /// <summary>
- /// Enumerable list of Counters in the StatsTable
- /// </summary>
- class StatsTableCounters : ICollection {
- /// <summary>
- /// Create the list of counters
- /// </summary>
- /// <param name="table"></param>
- /// pid</param>
- public StatsTableCounters(StatsTable table) {
- table_ = table;
- counter_hi_water_mark_ = -1;
- counters_ = new List<IStatsCounter>();
- FindCounters();
- }
-
- /// <summary>
- /// Scans the table for new entries.
- /// </summary>
- public void Update() {
- FindCounters();
- }
-
- #region IEnumerable Members
- public IEnumerator GetEnumerator() {
- return counters_.GetEnumerator();
- }
- #endregion
-
- #region ICollection Members
- public void CopyTo(Array array, int index) {
- throw new Exception("The method or operation is not implemented.");
- }
-
- public int Count {
- get {
- return counters_.Count;
- }
- }
-
- public bool IsSynchronized {
- get {
- throw new Exception("The method or operation is not implemented.");
- }
- }
-
- public object SyncRoot {
- get {
- throw new Exception("The method or operation is not implemented.");
- }
- }
- #endregion
-
- #region Private Methods
- /// <summary>
- /// Create a counter based on an entry
- /// </summary>
- /// <param name="id"></param>
- /// <param name="name"></param>
- /// <returns></returns>
- private IStatsCounter NameToCounter(int id, string name)
- {
- IStatsCounter rv = null;
-
- // check if the name has a type encoded
- if (name.Length > 2 && name[1] == ':')
- {
- StatsTableEntry entry = new StatsTableEntry(id, name.Substring(2), table_);
- switch (name[0])
- {
- case 't':
- rv = new StatsTimer(entry);
- break;
- case 'c':
- rv = new StatsCounter(entry);
- break;
- }
- }
- else
- {
- StatsTableEntry entry = new StatsTableEntry(id, name, table_);
- rv = new StatsCounter(entry);
- }
-
- return rv;
- }
-
- // If we have two StatsTableEntries with the same name,
- // attempt to upgrade them to a higher level type.
- // Example: A counter + a timer == a rate!
- private void UpgradeCounter(IStatsCounter old_counter, IStatsCounter counter)
- {
- if (old_counter is StatsCounter && counter is StatsTimer)
- {
- StatsCounterRate rate = new StatsCounterRate(old_counter as StatsCounter,
- counter as StatsTimer);
- counters_.Remove(old_counter);
- counters_.Add(rate);
- }
- else if (old_counter is StatsTimer && counter is StatsCounter)
- {
- StatsCounterRate rate = new StatsCounterRate(counter as StatsCounter,
- old_counter as StatsTimer);
- counters_.Remove(old_counter);
- counters_.Add(rate);
- }
- }
-
- /// <summary>
- /// Find the counters in the table and insert into the counters_
- /// hash table.
- /// </summary>
- private void FindCounters()
- {
- Debug.Assert(table_.Header.max_counters > 0);
-
- int index = counter_hi_water_mark_;
-
- do
- {
- // Find an entry in the table.
- index++;
- long offset = table_.CounterNamesOffset +
- (index * StatsTable.kMaxCounterNameLength * 2);
- string name = Marshal.PtrToStringUni((IntPtr)offset);
- if (name.Length == 0)
- continue;
-
- // Record that we've already looked at this StatsTableEntry.
- counter_hi_water_mark_ = index;
-
- IStatsCounter counter = NameToCounter(index, name);
-
- if (counter != null)
- {
- IStatsCounter old_counter = FindExistingCounter(counter.name);
- if (old_counter != null)
- UpgradeCounter(old_counter, counter);
- else
- counters_.Add(counter);
- }
- } while (index < table_.Header.max_counters - 1);
- }
-
- /// <summary>
- /// Find an existing counter in our table
- /// </summary>
- /// <param name="name"></param>
- private IStatsCounter FindExistingCounter(string name) {
- foreach (IStatsCounter ctr in counters_)
- {
- if (ctr.name == name)
- return ctr;
- }
- return null;
- }
- #endregion
-
- #region Private Members
- private StatsTable table_;
- private List<IStatsCounter> counters_;
- // Highest index of counters processed.
- private int counter_hi_water_mark_;
- #endregion
- }
-
- /// <summary>
- /// A collection of processes
- /// </summary>
- class StatsTableProcesses : ICollection
- {
- /// <summary>
- /// Constructor
- /// </summary>
- /// <param name="table"></param>
- public StatsTableProcesses(StatsTable table) {
- table_ = table;
- pids_ = new List<int>();
- Initialize();
- }
-
- #region ICollection Members
- public void CopyTo(Array array, int index) {
- throw new Exception("The method or operation is not implemented.");
- }
-
- public int Count {
- get {
- return pids_.Count;
- }
- }
-
- public bool IsSynchronized {
- get {
- throw new Exception("The method or operation is not implemented.");
- }
- }
-
- public object SyncRoot {
- get {
- throw new Exception("The method or operation is not implemented.");
- }
- }
- #endregion
-
- #region IEnumerable Members
- public IEnumerator GetEnumerator() {
- return pids_.GetEnumerator();
- }
- #endregion
-
- /// <summary>
- /// Initialize the pid list.
- /// </summary>
- private void Initialize() {
- long offset = table_.ThreadNamesOffset;
-
- for (int index = 0; index < table_.Header.max_threads; index++) {
- string thread_name = Marshal.PtrToStringUni((IntPtr)offset);
- if (thread_name.Length > 0) {
- long pidOffset = table_.PidsOffset + index *
- Marshal.SizeOf(typeof(int));
- int pid = Marshal.ReadInt32((IntPtr)pidOffset);
- if (!pids_.Contains(pid))
- pids_.Add(pid);
- }
- offset += StatsTable.kMaxThreadNameLength * 2;
- }
- }
-
- #region Private Members
- private StatsTable table_;
- private List<int> pids_;
- #endregion
- }
-}
diff --git a/chromium/tools/stats_viewer/stats_viewer.Designer.cs b/chromium/tools/stats_viewer/stats_viewer.Designer.cs
deleted file mode 100644
index 34a54c9b032..00000000000
--- a/chromium/tools/stats_viewer/stats_viewer.Designer.cs
+++ /dev/null
@@ -1,392 +0,0 @@
-// Copyright (c) 2012 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.
-
-namespace StatsViewer
-{
- partial class StatsViewer
- {
- /// <summary>
- /// Required designer variable.
- /// </summary>
- private System.ComponentModel.IContainer components = null;
-
- /// <summary>
- /// Clean up any resources being used.
- /// </summary>
- /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- /// <summary>
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- /// </summary>
- private void InitializeComponent()
- {
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(StatsViewer));
- this.listViewCounters = new System.Windows.Forms.ListView();
- this.columnHeaderName = new System.Windows.Forms.ColumnHeader();
- this.columnHeaderValue = new System.Windows.Forms.ColumnHeader();
- this.columnHeaderDelta = new System.Windows.Forms.ColumnHeader();
- this.pictureBoxTitle = new System.Windows.Forms.PictureBox();
- this.panelHeader = new System.Windows.Forms.Panel();
- this.labelKills = new System.Windows.Forms.Label();
- this.label1 = new System.Windows.Forms.Label();
- this.labelInterval = new System.Windows.Forms.Label();
- this.comboBoxFilter = new System.Windows.Forms.ComboBox();
- this.panelControls = new System.Windows.Forms.Panel();
- this.buttonExport = new System.Windows.Forms.Button();
- this.buttonZero = new System.Windows.Forms.Button();
- this.comboBoxInterval = new System.Windows.Forms.ComboBox();
- this.labelFilter = new System.Windows.Forms.Label();
- this.saveFileDialogExport = new System.Windows.Forms.SaveFileDialog();
- this.menuStrip1 = new System.Windows.Forms.MenuStrip();
- this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.closeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.quitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.listViewRates = new System.Windows.Forms.ListView();
- this.columnHeaderRateName = new System.Windows.Forms.ColumnHeader();
- this.columnHeaderRateCount = new System.Windows.Forms.ColumnHeader();
- this.columnHeaderRateTotaltime = new System.Windows.Forms.ColumnHeader();
- this.columnHeaderRateAvgTime = new System.Windows.Forms.ColumnHeader();
- this.splitContainer1 = new System.Windows.Forms.SplitContainer();
- ((System.ComponentModel.ISupportInitialize)(this.pictureBoxTitle)).BeginInit();
- this.panelHeader.SuspendLayout();
- this.panelControls.SuspendLayout();
- this.menuStrip1.SuspendLayout();
- this.splitContainer1.Panel1.SuspendLayout();
- this.splitContainer1.Panel2.SuspendLayout();
- this.splitContainer1.SuspendLayout();
- this.SuspendLayout();
- //
- // listViewCounters
- //
- this.listViewCounters.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
- this.columnHeaderName,
- this.columnHeaderValue,
- this.columnHeaderDelta});
- this.listViewCounters.Dock = System.Windows.Forms.DockStyle.Fill;
- this.listViewCounters.FullRowSelect = true;
- this.listViewCounters.Location = new System.Drawing.Point(0, 0);
- this.listViewCounters.Name = "listViewCounters";
- this.listViewCounters.Size = new System.Drawing.Size(505, 221);
- this.listViewCounters.Sorting = System.Windows.Forms.SortOrder.Descending;
- this.listViewCounters.TabIndex = 0;
- this.listViewCounters.UseCompatibleStateImageBehavior = false;
- this.listViewCounters.View = System.Windows.Forms.View.Details;
- this.listViewCounters.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.column_Click);
- //
- // columnHeaderName
- //
- this.columnHeaderName.Text = "Counter Name";
- this.columnHeaderName.Width = 203;
- //
- // columnHeaderValue
- //
- this.columnHeaderValue.Text = "Value";
- this.columnHeaderValue.Width = 69;
- //
- // columnHeaderDelta
- //
- this.columnHeaderDelta.Text = "Delta";
- this.columnHeaderDelta.Width = 86;
- //
- // pictureBoxTitle
- //
- this.pictureBoxTitle.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.pictureBoxTitle.BackColor = System.Drawing.Color.Transparent;
- this.pictureBoxTitle.Image = ((System.Drawing.Image)(resources.GetObject("pictureBoxTitle.Image")));
- this.pictureBoxTitle.Location = new System.Drawing.Point(257, 0);
- this.pictureBoxTitle.Name = "pictureBoxTitle";
- this.pictureBoxTitle.Size = new System.Drawing.Size(248, 86);
- this.pictureBoxTitle.TabIndex = 1;
- this.pictureBoxTitle.TabStop = false;
- //
- // panelHeader
- //
- this.panelHeader.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("panelHeader.BackgroundImage")));
- this.panelHeader.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
- this.panelHeader.Controls.Add(this.labelKills);
- this.panelHeader.Controls.Add(this.label1);
- this.panelHeader.Controls.Add(this.pictureBoxTitle);
- this.panelHeader.Dock = System.Windows.Forms.DockStyle.Top;
- this.panelHeader.Location = new System.Drawing.Point(0, 24);
- this.panelHeader.Name = "panelHeader";
- this.panelHeader.Size = new System.Drawing.Size(505, 86);
- this.panelHeader.TabIndex = 2;
- //
- // labelKills
- //
- this.labelKills.AutoSize = true;
- this.labelKills.BackColor = System.Drawing.Color.Transparent;
- this.labelKills.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.labelKills.Location = new System.Drawing.Point(12, 33);
- this.labelKills.Name = "labelKills";
- this.labelKills.Size = new System.Drawing.Size(280, 16);
- this.labelKills.TabIndex = 3;
- this.labelKills.Text = "During the World Wide Wait, God Kills Kittens.";
- //
- // label1
- //
- this.label1.AutoSize = true;
- this.label1.BackColor = System.Drawing.Color.Transparent;
- this.label1.Font = new System.Drawing.Font("Arial", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.label1.Location = new System.Drawing.Point(12, 9);
- this.label1.Name = "label1";
- this.label1.Size = new System.Drawing.Size(140, 24);
- this.label1.TabIndex = 2;
- this.label1.Text = "Chrome Varz";
- //
- // labelInterval
- //
- this.labelInterval.AutoSize = true;
- this.labelInterval.Location = new System.Drawing.Point(11, 9);
- this.labelInterval.Name = "labelInterval";
- this.labelInterval.Size = new System.Drawing.Size(73, 13);
- this.labelInterval.TabIndex = 3;
- this.labelInterval.Text = "Interval (secs)";
- //
- // comboBoxFilter
- //
- this.comboBoxFilter.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.comboBoxFilter.FormattingEnabled = true;
- this.comboBoxFilter.Location = new System.Drawing.Point(302, 5);
- this.comboBoxFilter.Name = "comboBoxFilter";
- this.comboBoxFilter.Size = new System.Drawing.Size(121, 21);
- this.comboBoxFilter.TabIndex = 5;
- this.comboBoxFilter.SelectedIndexChanged += new System.EventHandler(this.filter_changed);
- this.comboBoxFilter.DropDownClosed += new System.EventHandler(this.mouse_Leave);
- this.comboBoxFilter.DropDown += new System.EventHandler(this.mouse_Enter);
- //
- // panelControls
- //
- this.panelControls.Controls.Add(this.buttonExport);
- this.panelControls.Controls.Add(this.buttonZero);
- this.panelControls.Controls.Add(this.comboBoxInterval);
- this.panelControls.Controls.Add(this.labelFilter);
- this.panelControls.Controls.Add(this.comboBoxFilter);
- this.panelControls.Controls.Add(this.labelInterval);
- this.panelControls.Dock = System.Windows.Forms.DockStyle.Top;
- this.panelControls.Location = new System.Drawing.Point(0, 110);
- this.panelControls.Name = "panelControls";
- this.panelControls.Size = new System.Drawing.Size(505, 32);
- this.panelControls.TabIndex = 6;
- //
- // buttonExport
- //
- this.buttonExport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.buttonExport.Location = new System.Drawing.Point(187, 4);
- this.buttonExport.Name = "buttonExport";
- this.buttonExport.Size = new System.Drawing.Size(75, 23);
- this.buttonExport.TabIndex = 9;
- this.buttonExport.Text = "Export";
- this.buttonExport.UseVisualStyleBackColor = true;
- this.buttonExport.Click += new System.EventHandler(this.buttonExport_Click);
- //
- // buttonZero
- //
- this.buttonZero.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.buttonZero.Location = new System.Drawing.Point(427, 4);
- this.buttonZero.Name = "buttonZero";
- this.buttonZero.Size = new System.Drawing.Size(75, 23);
- this.buttonZero.TabIndex = 8;
- this.buttonZero.Text = "Clear All";
- this.buttonZero.UseVisualStyleBackColor = true;
- this.buttonZero.Click += new System.EventHandler(this.buttonZero_Click);
- //
- // comboBoxInterval
- //
- this.comboBoxInterval.FormattingEnabled = true;
- this.comboBoxInterval.Items.AddRange(new object[] {
- "1",
- "2",
- "5",
- "10",
- "30",
- "60"});
- this.comboBoxInterval.Location = new System.Drawing.Point(84, 6);
- this.comboBoxInterval.Name = "comboBoxInterval";
- this.comboBoxInterval.Size = new System.Drawing.Size(55, 21);
- this.comboBoxInterval.TabIndex = 7;
- this.comboBoxInterval.Text = "1";
- this.comboBoxInterval.SelectedIndexChanged += new System.EventHandler(this.interval_changed);
- this.comboBoxInterval.DropDownClosed += new System.EventHandler(this.mouse_Leave);
- this.comboBoxInterval.DropDown += new System.EventHandler(this.mouse_Enter);
- //
- // labelFilter
- //
- this.labelFilter.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.labelFilter.AutoSize = true;
- this.labelFilter.Location = new System.Drawing.Point(268, 9);
- this.labelFilter.Name = "labelFilter";
- this.labelFilter.Size = new System.Drawing.Size(29, 13);
- this.labelFilter.TabIndex = 6;
- this.labelFilter.Text = "Filter";
- //
- // saveFileDialogExport
- //
- this.saveFileDialogExport.FileName = "results.txt";
- //
- // menuStrip1
- //
- this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.fileToolStripMenuItem});
- this.menuStrip1.Location = new System.Drawing.Point(0, 0);
- this.menuStrip1.Name = "menuStrip1";
- this.menuStrip1.Size = new System.Drawing.Size(505, 24);
- this.menuStrip1.TabIndex = 7;
- this.menuStrip1.Text = "menuStrip1";
- //
- // fileToolStripMenuItem
- //
- this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.openToolStripMenuItem,
- this.closeToolStripMenuItem,
- this.quitToolStripMenuItem});
- this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
- this.fileToolStripMenuItem.Size = new System.Drawing.Size(35, 20);
- this.fileToolStripMenuItem.Text = "File";
- //
- // openToolStripMenuItem
- //
- this.openToolStripMenuItem.Name = "openToolStripMenuItem";
- this.openToolStripMenuItem.Size = new System.Drawing.Size(111, 22);
- this.openToolStripMenuItem.Text = "Open";
- this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click);
- //
- // closeToolStripMenuItem
- //
- this.closeToolStripMenuItem.Name = "closeToolStripMenuItem";
- this.closeToolStripMenuItem.Size = new System.Drawing.Size(111, 22);
- this.closeToolStripMenuItem.Text = "Close";
- this.closeToolStripMenuItem.Click += new System.EventHandler(this.closeToolStripMenuItem_Click);
- //
- // quitToolStripMenuItem
- //
- this.quitToolStripMenuItem.Name = "quitToolStripMenuItem";
- this.quitToolStripMenuItem.Size = new System.Drawing.Size(111, 22);
- this.quitToolStripMenuItem.Text = "Quit";
- this.quitToolStripMenuItem.Click += new System.EventHandler(this.quitToolStripMenuItem_Click);
- //
- // listViewRates
- //
- this.listViewRates.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
- this.columnHeaderRateName,
- this.columnHeaderRateCount,
- this.columnHeaderRateTotaltime,
- this.columnHeaderRateAvgTime});
- this.listViewRates.Dock = System.Windows.Forms.DockStyle.Fill;
- this.listViewRates.FullRowSelect = true;
- this.listViewRates.Location = new System.Drawing.Point(0, 0);
- this.listViewRates.Name = "listViewRates";
- this.listViewRates.Size = new System.Drawing.Size(505, 270);
- this.listViewRates.Sorting = System.Windows.Forms.SortOrder.Descending;
- this.listViewRates.TabIndex = 8;
- this.listViewRates.UseCompatibleStateImageBehavior = false;
- this.listViewRates.View = System.Windows.Forms.View.Details;
- //
- // columnHeaderRateName
- //
- this.columnHeaderRateName.Text = "Rate Name";
- this.columnHeaderRateName.Width = 205;
- //
- // columnHeaderRateCount
- //
- this.columnHeaderRateCount.Text = "Count";
- //
- // columnHeaderRateTotaltime
- //
- this.columnHeaderRateTotaltime.Text = "Total Time (ms)";
- this.columnHeaderRateTotaltime.Width = 100;
- //
- // columnHeaderRateAvgTime
- //
- this.columnHeaderRateAvgTime.Text = "Average Time (ms)";
- this.columnHeaderRateAvgTime.Width = 110;
- //
- // splitContainer1
- //
- this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
- this.splitContainer1.Location = new System.Drawing.Point(0, 142);
- this.splitContainer1.Name = "splitContainer1";
- this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
- //
- // splitContainer1.Panel1
- //
- this.splitContainer1.Panel1.Controls.Add(this.listViewCounters);
- //
- // splitContainer1.Panel2
- //
- this.splitContainer1.Panel2.Controls.Add(this.listViewRates);
- this.splitContainer1.Size = new System.Drawing.Size(505, 495);
- this.splitContainer1.SplitterDistance = 221;
- this.splitContainer1.TabIndex = 9;
- //
- // StatsViewer
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(505, 637);
- this.Controls.Add(this.splitContainer1);
- this.Controls.Add(this.panelControls);
- this.Controls.Add(this.panelHeader);
- this.Controls.Add(this.menuStrip1);
- this.DoubleBuffered = true;
- this.Name = "StatsViewer";
- this.Text = "Chrome Varz";
- ((System.ComponentModel.ISupportInitialize)(this.pictureBoxTitle)).EndInit();
- this.panelHeader.ResumeLayout(false);
- this.panelHeader.PerformLayout();
- this.panelControls.ResumeLayout(false);
- this.panelControls.PerformLayout();
- this.menuStrip1.ResumeLayout(false);
- this.menuStrip1.PerformLayout();
- this.splitContainer1.Panel1.ResumeLayout(false);
- this.splitContainer1.Panel2.ResumeLayout(false);
- this.splitContainer1.ResumeLayout(false);
- this.ResumeLayout(false);
- this.PerformLayout();
-
- }
-
- #endregion
-
- private System.Windows.Forms.ListView listViewCounters;
- private System.Windows.Forms.ColumnHeader columnHeaderName;
- private System.Windows.Forms.ColumnHeader columnHeaderValue;
- private System.Windows.Forms.ColumnHeader columnHeaderDelta;
- private System.Windows.Forms.PictureBox pictureBoxTitle;
- private System.Windows.Forms.Panel panelHeader;
- private System.Windows.Forms.Label label1;
- private System.Windows.Forms.Label labelInterval;
- private System.Windows.Forms.ComboBox comboBoxFilter;
- private System.Windows.Forms.Panel panelControls;
- private System.Windows.Forms.Label labelFilter;
- private System.Windows.Forms.ComboBox comboBoxInterval;
- private System.Windows.Forms.Label labelKills;
- private System.Windows.Forms.Button buttonZero;
- private System.Windows.Forms.Button buttonExport;
- private System.Windows.Forms.SaveFileDialog saveFileDialogExport;
- private System.Windows.Forms.MenuStrip menuStrip1;
- private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem closeToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem quitToolStripMenuItem;
- private System.Windows.Forms.ListView listViewRates;
- private System.Windows.Forms.ColumnHeader columnHeaderRateName;
- private System.Windows.Forms.ColumnHeader columnHeaderRateCount;
- private System.Windows.Forms.ColumnHeader columnHeaderRateTotaltime;
- private System.Windows.Forms.ColumnHeader columnHeaderRateAvgTime;
- private System.Windows.Forms.SplitContainer splitContainer1;
- }
-}
diff --git a/chromium/tools/stats_viewer/stats_viewer.cs b/chromium/tools/stats_viewer/stats_viewer.cs
deleted file mode 100644
index eebb882c540..00000000000
--- a/chromium/tools/stats_viewer/stats_viewer.cs
+++ /dev/null
@@ -1,510 +0,0 @@
-// Copyright (c) 2012 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.
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Diagnostics;
-using System.Drawing;
-using System.Text;
-using System.Windows.Forms;
-using System.IO;
-
-namespace StatsViewer {
- public partial class StatsViewer : Form {
- /// <summary>
- /// Create a StatsViewer.
- /// </summary>
- public StatsViewer() {
- InitializeComponent();
- }
-
- #region Protected Methods
- /// <summary>
- /// Callback when the form loads.
- /// </summary>
- /// <param name="e"></param>
- protected override void OnLoad(EventArgs e) {
- base.OnLoad(e);
-
- timer_ = new Timer();
- timer_.Interval = kPollInterval;
- timer_.Tick += new EventHandler(PollTimerTicked);
- timer_.Start();
- }
- #endregion
-
- #region Private Methods
- /// <summary>
- /// Attempt to open the stats file.
- /// Return true on success, false otherwise.
- /// </summary>
- private bool OpenStatsFile() {
- StatsTable table = new StatsTable();
- if (table.Open(kStatsTableName)) {
- stats_table_ = table;
- return true;
- }
- return false;
- }
-
- /// <summary>
- /// Close the open stats file.
- /// </summary>
- private void CloseStatsFile() {
- if (this.stats_table_ != null)
- {
- this.stats_table_.Close();
- this.stats_table_ = null;
- this.listViewCounters.Items.Clear();
- }
- }
-
- /// <summary>
- /// Updates the process list in the UI.
- /// </summary>
- private void UpdateProcessList() {
- int current_pids = comboBoxFilter.Items.Count;
- int table_pids = stats_table_.Processes.Count;
- if (current_pids != table_pids + 1) // Add one because of the "all" entry.
- {
- int selected_index = this.comboBoxFilter.SelectedIndex;
- this.comboBoxFilter.Items.Clear();
- this.comboBoxFilter.Items.Add(kStringAllProcesses);
- foreach (int pid in stats_table_.Processes)
- this.comboBoxFilter.Items.Add(kStringProcess + pid.ToString());
- this.comboBoxFilter.SelectedIndex = selected_index;
- }
- }
-
- /// <summary>
- /// Updates the UI for a counter.
- /// </summary>
- /// <param name="counter"></param>
- private void UpdateCounter(IStatsCounter counter) {
- ListView view;
-
- // Figure out which list this counter goes into.
- if (counter is StatsCounterRate)
- view = listViewRates;
- else if (counter is StatsCounter || counter is StatsTimer)
- view = listViewCounters;
- else
- return; // Counter type not supported yet.
-
- // See if the counter is already in the list.
- ListViewItem item = view.Items[counter.name];
- if (item != null)
- {
- // Update an existing counter.
- Debug.Assert(item is StatsCounterListViewItem);
- StatsCounterListViewItem counter_item = item as StatsCounterListViewItem;
- counter_item.Update(counter, filter_pid_);
- }
- else
- {
- // Create a new counter
- StatsCounterListViewItem new_item = null;
- if (counter is StatsCounterRate)
- new_item = new RateListViewItem(counter, filter_pid_);
- else if (counter is StatsCounter || counter is StatsTimer)
- new_item = new CounterListViewItem(counter, filter_pid_);
- Debug.Assert(new_item != null);
- view.Items.Add(new_item);
- }
- }
-
- /// <summary>
- /// Sample the data and update the UI
- /// </summary>
- private void SampleData() {
- // If the table isn't open, try to open it again.
- if (stats_table_ == null)
- if (!OpenStatsFile())
- return;
-
- if (stats_counters_ == null)
- stats_counters_ = stats_table_.Counters();
-
- if (pause_updates_)
- return;
-
- stats_counters_.Update();
-
- UpdateProcessList();
-
- foreach (IStatsCounter counter in stats_counters_)
- UpdateCounter(counter);
- }
-
- /// <summary>
- /// Set the background color based on the value
- /// </summary>
- /// <param name="item"></param>
- /// <param name="value"></param>
- private void ColorItem(ListViewItem item, int value)
- {
- if (value < 0)
- item.ForeColor = Color.Red;
- else if (value > 0)
- item.ForeColor = Color.DarkGreen;
- else
- item.ForeColor = Color.Black;
- }
-
- /// <summary>
- /// Called when the timer fires.
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- void PollTimerTicked(object sender, EventArgs e) {
- SampleData();
- }
-
- /// <summary>
- /// Called when the interval is changed by the user.
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void interval_changed(object sender, EventArgs e) {
- int interval = 1;
- if (int.TryParse(comboBoxInterval.Text, out interval)) {
- if (timer_ != null) {
- timer_.Stop();
- timer_.Interval = interval * 1000;
- timer_.Start();
- }
- } else {
- comboBoxInterval.Text = timer_.Interval.ToString();
- }
- }
-
- /// <summary>
- /// Called when the user changes the filter
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void filter_changed(object sender, EventArgs e) {
- // While in this event handler, don't allow recursive events!
- this.comboBoxFilter.SelectedIndexChanged -= new System.EventHandler(this.filter_changed);
- if (this.comboBoxFilter.Text == kStringAllProcesses)
- filter_pid_ = 0;
- else
- int.TryParse(comboBoxFilter.Text.Substring(kStringProcess.Length), out filter_pid_);
- SampleData();
- this.comboBoxFilter.SelectedIndexChanged += new System.EventHandler(this.filter_changed);
- }
-
- /// <summary>
- /// Callback when the mouse enters a control
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void mouse_Enter(object sender, EventArgs e) {
- // When the dropdown is expanded, we pause
- // updates, as it messes with the UI.
- pause_updates_ = true;
- }
-
- /// <summary>
- /// Callback when the mouse leaves a control
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void mouse_Leave(object sender, EventArgs e) {
- pause_updates_ = false;
- }
-
- /// <summary>
- /// Called when the user clicks the zero-stats button.
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void buttonZero_Click(object sender, EventArgs e) {
- this.stats_table_.Zero();
- SampleData();
- }
-
- /// <summary>
- /// Called when the user clicks a column heading.
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void column_Click(object sender, ColumnClickEventArgs e) {
- if (e.Column != sort_column_) {
- sort_column_ = e.Column;
- this.listViewCounters.Sorting = SortOrder.Ascending;
- } else {
- if (this.listViewCounters.Sorting == SortOrder.Ascending)
- this.listViewCounters.Sorting = SortOrder.Descending;
- else
- this.listViewCounters.Sorting = SortOrder.Ascending;
- }
-
- this.listViewCounters.ListViewItemSorter =
- new ListViewItemComparer(e.Column, this.listViewCounters.Sorting);
- this.listViewCounters.Sort();
- }
-
- /// <summary>
- /// Called when the user clicks the button "Export".
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void buttonExport_Click(object sender, EventArgs e) {
- //Have to pick a textfile to export to.
- //Saves what is shown in listViewStats in the format: function value
- //(with a tab in between), so that it is easy to copy paste into a spreadsheet.
- //(Does not save the delta values.)
- TextWriter tw = null;
- try {
- saveFileDialogExport.CheckFileExists = false;
- saveFileDialogExport.ShowDialog();
- tw = new StreamWriter(saveFileDialogExport.FileName);
-
- for (int i = 0; i < listViewCounters.Items.Count; i++) {
- tw.Write(listViewCounters.Items[i].SubItems[0].Text + "\t");
- tw.WriteLine(listViewCounters.Items[i].SubItems[1].Text);
- }
- }
- catch (IOException ex) {
- MessageBox.Show(string.Format("There was an error while saving your results file. The results might not have been saved correctly.: {0}", ex.Message));
- }
- finally{
- if (tw != null) tw.Close();
- }
- }
-
- #endregion
-
- class ListViewItemComparer : IComparer {
- public ListViewItemComparer() {
- this.col_ = 0;
- this.order_ = SortOrder.Ascending;
- }
-
- public ListViewItemComparer(int column, SortOrder order) {
- this.col_ = column;
- this.order_ = order;
- }
-
- public int Compare(object x, object y) {
- int return_value = -1;
-
- object x_tag = ((ListViewItem)x).SubItems[col_].Tag;
- object y_tag = ((ListViewItem)y).SubItems[col_].Tag;
-
- if (Comparable(x_tag, y_tag))
- return_value = ((IComparable)x_tag).CompareTo(y_tag);
- else
- return_value = String.Compare(((ListViewItem)x).SubItems[col_].Text,
- ((ListViewItem)y).SubItems[col_].Text);
-
- if (order_ == SortOrder.Descending)
- return_value *= -1;
-
- return return_value;
- }
-
- #region Private Methods
- private bool Comparable(object x, object y) {
- if (x == null || y == null)
- return false;
-
- return x is IComparable && y is IComparable;
- }
- #endregion
-
- #region Private Members
- private int col_;
- private SortOrder order_;
- #endregion
- }
-
- #region Private Members
- private const string kStringAllProcesses = "All Processes";
- private const string kStringProcess = "Process ";
- private const int kPollInterval = 1000; // 1 second
- private const string kStatsTableName = "ChromeStats";
- private StatsTable stats_table_;
- private StatsTableCounters stats_counters_;
- private Timer timer_;
- private int filter_pid_;
- private bool pause_updates_;
- private int sort_column_ = -1;
- #endregion
-
- #region Private Event Callbacks
- private void openToolStripMenuItem_Click(object sender, EventArgs e)
- {
- OpenDialog dialog = new OpenDialog();
- dialog.ShowDialog();
-
- CloseStatsFile();
-
- StatsTable table = new StatsTable();
- bool rv = table.Open(dialog.FileName);
- if (!rv)
- {
- MessageBox.Show("Could not open statsfile: " + dialog.FileName);
- }
- else
- {
- stats_table_ = table;
- }
- }
-
- private void closeToolStripMenuItem_Click(object sender, EventArgs e)
- {
- CloseStatsFile();
- }
-
- private void quitToolStripMenuItem_Click(object sender, EventArgs e)
- {
- Application.Exit();
- }
- #endregion
- }
-
- /// <summary>
- /// Base class for counter list view items.
- /// </summary>
- internal class StatsCounterListViewItem : ListViewItem
- {
- /// <summary>
- /// Create the ListViewItem
- /// </summary>
- /// <param name="text"></param>
- public StatsCounterListViewItem(string text) : base(text) { }
-
- /// <summary>
- /// Update the ListViewItem given a new counter value.
- /// </summary>
- /// <param name="counter"></param>
- /// <param name="filter_pid"></param>
- public virtual void Update(IStatsCounter counter, int filter_pid) { }
-
- /// <summary>
- /// Set the background color based on the value
- /// </summary>
- /// <param name="value"></param>
- protected void ColorItem(int value)
- {
- if (value < 0)
- ForeColor = Color.Red;
- else if (value > 0)
- ForeColor = Color.DarkGreen;
- else
- ForeColor = Color.Black;
- }
-
- /// <summary>
- /// Create a new subitem with a zeroed Tag.
- /// </summary>
- /// <returns></returns>
- protected ListViewSubItem NewSubItem()
- {
- ListViewSubItem item = new ListViewSubItem();
- item.Tag = -1; // Arbitrarily initialize to -1.
- return item;
- }
-
- /// <summary>
- /// Set the value for a subitem.
- /// </summary>
- /// <param name="item"></param>
- /// <param name="val"></param>
- /// <returns>True if the value changed, false otherwise</returns>
- protected bool SetSubItem(ListViewSubItem item, int val)
- {
- // The reason for doing this extra compare is because
- // we introduce flicker if we unnecessarily update the
- // subitems. The UI is much less likely to cause you
- // a seizure when we do this.
- if (val != (int)item.Tag)
- {
- item.Text = val.ToString();
- item.Tag = val;
- return true;
- }
- return false;
- }
- }
-
- /// <summary>
- /// A listview item which contains a rate.
- /// </summary>
- internal class RateListViewItem : StatsCounterListViewItem
- {
- public RateListViewItem(IStatsCounter ctr, int filter_pid) :
- base(ctr.name)
- {
- StatsCounterRate rate = ctr as StatsCounterRate;
- Name = rate.name;
- SubItems.Add(NewSubItem());
- SubItems.Add(NewSubItem());
- SubItems.Add(NewSubItem());
- Update(ctr, filter_pid);
- }
-
- public override void Update(IStatsCounter counter, int filter_pid)
- {
- Debug.Assert(counter is StatsCounterRate);
-
- StatsCounterRate new_rate = counter as StatsCounterRate;
- int new_count = new_rate.GetCount(filter_pid);
- int new_time = new_rate.GetTime(filter_pid);
- int old_avg = Tag != null ? (int)Tag : 0;
- int new_avg = new_count > 0 ? (new_time / new_count) : 0;
- int delta = new_avg - old_avg;
-
- SetSubItem(SubItems[column_count_index], new_count);
- SetSubItem(SubItems[column_time_index], new_time);
- if (SetSubItem(SubItems[column_avg_index], new_avg))
- ColorItem(delta);
- Tag = new_avg;
- }
-
- private const int column_count_index = 1;
- private const int column_time_index = 2;
- private const int column_avg_index = 3;
- }
-
- /// <summary>
- /// A listview item which contains a counter.
- /// </summary>
- internal class CounterListViewItem : StatsCounterListViewItem
- {
- public CounterListViewItem(IStatsCounter ctr, int filter_pid) :
- base(ctr.name)
- {
- Name = ctr.name;
- SubItems.Add(NewSubItem());
- SubItems.Add(NewSubItem());
- Update(ctr, filter_pid);
- }
-
- public override void Update(IStatsCounter counter, int filter_pid) {
- Debug.Assert(counter is StatsCounter || counter is StatsTimer);
-
- int new_value = 0;
- if (counter is StatsCounter)
- new_value = ((StatsCounter)counter).GetValue(filter_pid);
- else if (counter is StatsTimer)
- new_value = ((StatsTimer)counter).GetValue(filter_pid);
-
- int old_value = Tag != null ? (int)Tag : 0;
- int delta = new_value - old_value;
- SetSubItem(SubItems[column_value_index], new_value);
- if (SetSubItem(SubItems[column_delta_index], delta))
- ColorItem(delta);
- Tag = new_value;
- }
-
- private const int column_value_index = 1;
- private const int column_delta_index = 2;
- }
-}
diff --git a/chromium/tools/stats_viewer/stats_viewer.csproj b/chromium/tools/stats_viewer/stats_viewer.csproj
deleted file mode 100644
index 2b6fa6c8305..00000000000
--- a/chromium/tools/stats_viewer/stats_viewer.csproj
+++ /dev/null
@@ -1,107 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>8.0.50727</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{41735CD9-3E35-47F7-9FD1-4A9950B6B131}</ProjectGuid>
- <OutputType>WinExe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>StatsViewer</RootNamespace>
- <AssemblyName>stats_viewer</AssemblyName>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>$(SolutionDir)$(Configuration)</OutputPath>
- <DefineConstants>DEBUG;TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>pdbonly</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>$(SolutionDir)$(Configuration)</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Data" />
- <Reference Include="System.Deployment" />
- <Reference Include="System.Drawing" />
- <Reference Include="System.Windows.Forms" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="OpenDialog.cs">
- <SubType>Form</SubType>
- </Compile>
- <Compile Include="OpenDialog.Designer.cs">
- <DependentUpon>OpenDialog.cs</DependentUpon>
- </Compile>
- <Compile Include="Resources.Designer.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Resources.resx</DependentUpon>
- </Compile>
- <Compile Include="stats_viewer.cs">
- <SubType>Form</SubType>
- </Compile>
- <Compile Include="stats_viewer.Designer.cs">
- <DependentUpon>stats_viewer.cs</DependentUpon>
- </Compile>
- <Compile Include="Program.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- <EmbeddedResource Include="OpenDialog.resx">
- <SubType>Designer</SubType>
- <DependentUpon>OpenDialog.cs</DependentUpon>
- </EmbeddedResource>
- <EmbeddedResource Include="Resources.resx">
- <SubType>Designer</SubType>
- <Generator>ResXFileCodeGenerator</Generator>
- <LastGenOutput>Resources.Designer.cs</LastGenOutput>
- </EmbeddedResource>
- <EmbeddedResource Include="stats_viewer.resx">
- <SubType>Designer</SubType>
- <DependentUpon>stats_viewer.cs</DependentUpon>
- </EmbeddedResource>
- <EmbeddedResource Include="Properties\Resources.resx">
- <Generator>ResXFileCodeGenerator</Generator>
- <LastGenOutput>Resources.Designer.cs</LastGenOutput>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- <Compile Include="Properties\Resources.Designer.cs">
- <AutoGen>True</AutoGen>
- <DependentUpon>Resources.resx</DependentUpon>
- </Compile>
- <None Include="Properties\Settings.settings">
- <Generator>SettingsSingleFileGenerator</Generator>
- <LastGenOutput>Settings.Designer.cs</LastGenOutput>
- </None>
- <Compile Include="Properties\Settings.Designer.cs">
- <AutoGen>True</AutoGen>
- <DependentUpon>Settings.settings</DependentUpon>
- <DesignTimeSharedInput>True</DesignTimeSharedInput>
- </Compile>
- <Compile Include="stats_table.cs" />
- <Compile Include="win32.cs" />
- </ItemGroup>
- <ItemGroup>
- <None Include="Resources\kitten.png" />
- </ItemGroup>
- <ItemGroup>
- <None Include="Resources\kittenbackground.png" />
- </ItemGroup>
- <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->
-</Project> \ No newline at end of file
diff --git a/chromium/tools/stats_viewer/stats_viewer.resx b/chromium/tools/stats_viewer/stats_viewer.resx
deleted file mode 100644
index 117f3891aba..00000000000
--- a/chromium/tools/stats_viewer/stats_viewer.resx
+++ /dev/null
@@ -1,1129 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
- <!--
- Microsoft ResX Schema
-
- Version 2.0
-
- The primary goals of this format is to allow a simple XML format
- that is mostly human readable. The generation and parsing of the
- various data types are done through the TypeConverter classes
- associated with the data types.
-
- Example:
-
- ... ado.net/XML headers & schema ...
- <resheader name="resmimetype">text/microsoft-resx</resheader>
- <resheader name="version">2.0</resheader>
- <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
- <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
- <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
- <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
- <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
- <value>[base64 mime encoded serialized .NET Framework object]</value>
- </data>
- <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
- <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
- <comment>This is a comment</comment>
- </data>
-
- There are any number of "resheader" rows that contain simple
- name/value pairs.
-
- Each data row contains a name, and value. The row also contains a
- type or mimetype. Type corresponds to a .NET class that support
- text/value conversion through the TypeConverter architecture.
- Classes that don't support this are serialized and stored with the
- mimetype set.
-
- The mimetype is used for serialized objects, and tells the
- ResXResourceReader how to depersist the object. This is currently not
- extensible. For a given mimetype the value must be set accordingly:
-
- Note - application/x-microsoft.net.object.binary.base64 is the format
- that the ResXResourceWriter will generate, however the reader can
- read any of the formats listed below.
-
- mimetype: application/x-microsoft.net.object.binary.base64
- value : The object must be serialized with
- : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
- : and then encoded with base64 encoding.
-
- mimetype: application/x-microsoft.net.object.soap.base64
- value : The object must be serialized with
- : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
- : and then encoded with base64 encoding.
-
- mimetype: application/x-microsoft.net.object.bytearray.base64
- value : The object must be serialized into a byte array
- : using a System.ComponentModel.TypeConverter
- : and then encoded with base64 encoding.
- -->
- <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
- <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
- <xsd:element name="root" msdata:IsDataSet="true">
- <xsd:complexType>
- <xsd:choice maxOccurs="unbounded">
- <xsd:element name="metadata">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" />
- </xsd:sequence>
- <xsd:attribute name="name" use="required" type="xsd:string" />
- <xsd:attribute name="type" type="xsd:string" />
- <xsd:attribute name="mimetype" type="xsd:string" />
- <xsd:attribute ref="xml:space" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="assembly">
- <xsd:complexType>
- <xsd:attribute name="alias" type="xsd:string" />
- <xsd:attribute name="name" type="xsd:string" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="data">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
- <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
- <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
- <xsd:attribute ref="xml:space" />
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="resheader">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
- </xsd:sequence>
- <xsd:attribute name="name" type="xsd:string" use="required" />
- </xsd:complexType>
- </xsd:element>
- </xsd:choice>
- </xsd:complexType>
- </xsd:element>
- </xsd:schema>
- <resheader name="resmimetype">
- <value>text/microsoft-resx</value>
- </resheader>
- <resheader name="version">
- <value>2.0</value>
- </resheader>
- <resheader name="reader">
- <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </resheader>
- <resheader name="writer">
- <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </resheader>
- <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
- <data name="pictureBoxTitle.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
- <value>
- iVBORw0KGgoAAAANSUhEUgAAAPgAAABWCAIAAABtpczCAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAOxAAA
- DsQBlSsOGwAA4PdJREFUeF5k/QVAXNf2/4GmdnutvZV4gjPu7oN70KBBEggJcScBgru7u7u7u2sggQTi
- JLgmaa/1tnnrDGl///de++3umTMDDMPnfGfttdde81nzg+B3vz3/+edf9n3++W+f7fvss88+//zzfb99
- /O3jr3C07+PHj8g5yR2f/fb5Z59JTnzc93Ef/PPZ55J/4d59+3777TfkzGdwz8fPP/8CTsMDkX8+R87v
- g9OS7yF5DIzwGORbwQ+AB38BP0jyGPhayXeAx8AT2PspyH/wUyRPA77H3j/IwyR3Sb7hp/8kj5b8VHi4
- 5CnDEdyUPAz53faeMzJ8hGe79+sgPwueC/JbID9xHzxbyZcgD5c8FeSLkV9Y8v0k5yRPDHk94IuQZ/L7
- k/r03H5/Wnsvx96vtfddfn8FkG+GvFx7J+CZSJ6G5Bf6DXkCezf++CLJzb1fcu8l3btr74X69KrBr7f3
- 6/8G3wN+H+R3/PRg+LWQ7yn5Q8Idn++9QvDCS37ZvdcE+Ta//iZ5QSS/oOQvgbzMkh8gOUBuw13Ic4Xv
- uPc67/0PeSmQZ4P8ADiBfIu9v7Hkzr0fIXll954sPDP4ayLfU/JtADXJS4N829/gGcIvAH8deMrwf+Rb
- 7n255IF7Z/aQkPxR4FXc+xGffl/kYb/uIbv35fCH3vfZF5/99uvHfakdJ2MGyQFteL9Ogm8nyb+bEtBL
- Deym+HcTA3pIAd1k5EwPJbCHGtxHCRmkhgyQQwaIIQMkRIPk0CFK2DA1bIgiOaCEjyCKGKNHTjAixkH0
- yEl61BSIGjFNi5qhg2IegWhxcyBqwiw1ZZ6ZscBOf8pJf8pKf8rMeM7KeM5Mf0FPe0ZLe05LfUZNXqCk
- PqOlv2CkP2ekP6NlPKNmvKBmvqBmvaJlv6LnLIIYuYv03EVaziI1RzLmvqHkviXnviXlL5Hyl4mgvE83
- KfnL5PwVcv4yKX+FULJOLt4gF6+TSzZoJZuM4i0acnODVLJJKtkil21RyjYpZRtUicifhJyhlK6Ty7eo
- lds0UPUOtWaHujfW7tD+UN07Wu07hkT0PdW9p9f/xATBQcMOo36b0bjDaH7Han7PbHxHb3xPh7HhHa3h
- HbXxPa3hPbXuHaVuV6J3lPr31IYPyMkGyV3I+IGGnJScb/qZ3vgTPIZY/wFf/wFb/wHXgIhQjwhuous/
- YGrfYepA7/HIw96R6t6R63ZItdvEmm1i3TtS7S6hegdX+45Q+55QvYuv2sFVvsNX7hAqdwmVO8SKbVLF
- NgXRFrVskwq/fskqsXiVhGiFXLwKrwmtZI0KByUrlOIVSukqtWSFWrRMLl6BA3rJMr1wiZq3TM1foecv
- M/KXmHlvmXlv2Dmv2Vkv4C/OyHjBTH/KSF2gpy0wUhYYSXP0xFl6/ENK3Aw5bpoc+4AU84AYOYGPGMdG
- TeAix0FYuBk+hgsZwoQM40KHCcFDhOBBfFA/IbCXENiHC+jDBvRi/bqxfl24gF6ibydhX3aPTXAL1r0S
- 5VaDca3DuNZi79fjPOpw9+sw9+sxHg0Ej0aiRyPBswnv3ULwbsX7tOK8WzFeLYjgwKcN69eO92nD+bbj
- /ToI/p1E/05CQDcpoIcMo38XXC3kwD5iUB8+cIAYNEgKHSKFj5BBEaPksCFC+DA+ZpwcP0GNm6AkTCGK
- nSLFTBJiQVOE2GlC7ANi9CQ+ZgIXN0WMBU0S4idxCQ/widOIkmbwKY+IEhFSHuGTH+JSHkk0iwWlPsal
- PcamPcakP4ERhMuYJ6Q/wafP49KeYDIWMNnPcVnPEGU/J2S/IGY9J2S9wGU+hfOY3Jf43JeEvJfE/Jek
- /BfEvBf4vJcSvcDnvyLkwk04eEnIf4kvfIUreo0vfI2HsfgVvmRPrwkli4TiRbxEcEAofg0ilr4hl70l
- ly6SS16R9lS+SC1/A6KUL5LL4d5FYvlbUsVbMowlyDfEgeCg9A2h7C2hdBFXuoj/fYQDfBnoDaFiiVD+
- Fu5Cl75Blb5RLHuLKl9Cly9hyt5iyt6gy94iZ+A8cu8inMGCSt/gSl/DN8cUvcSUvMYWv0IVvFIsWkQX
- vkYXvlIseKmQD2deo/NfofNeYnJfYHKf40A58Io9x8MrBq9exgI+Yx6fuUDIeorPfkbKfkbOWiBlzRMz
- nxBgzHhMTHuMz3hCSn9CTp0jpsziUx6TUh9TUh9TU2apSbO0xIeMhGla3BQ1dpIaM0GLHCWHDxMjhknh
- Q+TgPmJIPymoFx/QjduTfxfWp13Ru03Bt0MRDnzaFbzbFL1aFTya5T2aFT2aFD0a0e6NCLFuwG0dyr0O
- eFZ0q1J0QcBGu1Zh9uX02oa24z1rMO71kscB3I0470a8ZyPWoxHr1UzwbiEB5V4I6DivFiyQ7d2G8W5D
- +7Zj/DvhGcDzIAT2EGEEBfUR4ZIK6iUF91IQ9ZFD+smhg/DsEb4jJIoao0SNkSJHiDFjhPgJcuw4MWGK
- nDRNTZgixU0SEmdICaBpQsJDYvwMPu4BHo4TZ4hJM6Skh6TkhyTAOn2WlDEHryAIXk1C6hw+ZRaBO3UO
- yAbh058A0IQMeNEX4C8B7GIzFrAZ8wA6PuspIec5CcjOegZAY4H1nBf4nBcEEMCd9wqPUP4CU/CaACp8
- RSx4RYKx6BUeEQD9+wgHCOKv/sAOOAN0sKWvsABQ2Wtc+Rt8+VtsxRts+Vt8xRsQoRyIBIiXyJVvyBWL
- VFDlW3r1Eq16CRkr31Ar31CQB7whVL4lgsoXCeWLeBAcVy2RqpfJ1ctEUJVk/ENVS4TKJULVErFyCVvx
- Fl25hNkbK5exlZInADd/F6b8DRzDGTiPA5W9xoDKF+E5IxdJGXJtoIvfoIpeK5bAmUVMySKu8DW24BW2
- 4CU2H7ns4eKHF4qQ/RxeKEL2MyIIeT2fEbOekhDoF/BAeTYQ/5SUPk/InCenz5OTHxOS5wipQPwTaupj
- WsocLekRNWGGnjBNj38AYsRNMqNGqQBJBAQFg8AMKbiPFNJHDgSvBN/sIvh3433a0d7tKJ92lHebvFer
- PIDu2Yxyb5T3aEJ5NiOsArfuDXi3OpxrDcatGuNaiXatxLhUYO7XEl0r8fty+2zDOvFedRjPBuTR7o04
- gNu3mejdDJTjfFqJXs14j0bwbzByrGczxrcd69eJCK6zwB5AHBFcgkG9YNvE0CEksAkeIIUOUCQihw3C
- sydFjVKiEb4RgYXHjpMkfJMSp8gJk8SkaQCdnDBFiJvAA+iJj0iJDwlJswA6Lv4BBmw7aYaQAog/JKbM
- EJIf4lMf4tJmcRlA8xw+bRabPodD9BhBGcjOWgC+4UVHXmvAOusp4tnAetZTbPYzfM5zct4rSu5LIvCN
- OPQrQv4rIggx71fg1rh8+KO+hr8uYtIFr/AFL8G5cUUv0EUv0TAWvkAVvgRfxJW9QRAHDiQGKRkXJfQs
- 4irf4Kvf4muWCDXLWERL+JplXN0ysQZgfUMEVb0hVb2lggDxulVG7Qq9eplWtUSpekupfEsG0CVCWN8T
- UF61RK5ZIdWsEiUiwFiLiFS7BifhB+FrVgjVKzjguwr4BsqXsNUr+KolXOVbOAln9gQ3kbv2BPdKcEeu
- h/I3mKoVXNUqvmIZW74Mro8qhysEfq+3WPD7olc45Ap/RYALO/8FIQ95iyPmviAVvKSC8p6TEWsHE4FX
- Hv4EwPcCUfLmCXCTUh6Tk+dISWDqjyXHs5SkR5SEGQrYeTwCOlDOiB5jRo7QwgaBFiowE9JPCewmBnaT
- A7pIvu0QLODAXr1a0J4t4OLA9ycjd29E3a8H1sGaEZt2q4cwBO9Wi3OrxrtVEO6V4p2LsbcL0a4VRJdy
- 4r78AbuIbqJPA9a3Ge/djJO4OMQnYOQYwBoOfJCIBX4S8vMgPgHzDgLP7gHbxgf3AeIgfEg/IWyQiNj2
- MGBNBsEb0J4kFk6OmaDGTlBiwb8nwLaJ8ZOkxGmwZ0rSDDnxAbg1OQk8exoOgGN4myOkPSalPZa83z3E
- AtNpc3h4KwSlPsKlPsSmPpLADazP4jLnsJmPsZlPEGXN47Ln8dkL8E6KOE32U0LuM0Ie6Dkh5xkW3nbz
- XkCwQSl4SUZ8+jWxAFCGkGORWLRIKgL/XgQLlwQhb/DFb/GlICRUwJYgAm9Dlb0GoUHli+CaYNVgkMAN
- kISrAG7eYqvfSsYlXO0yoW4FX7eCrl1B1S6japYxcLN+lVC7BALiidUS1S6T61aptSuUmmVyzTIJVP2W
- WP2WUA0O/RZfvYSvAoKXgWMQPBhfu0aoXSPWrQPfxD0B5bXrJDhTBwcr+Opl4BsHrMNYs4pHWF/GIZcB
- IlzNiuTCQ87gqiWgS94K4A0Ewb0KuSDhJlwe+Oo3+MpFQpXkkoN3p+KX2OKXuJIX+JIXhKKXpMKX1MKX
- tKKXjOJXrKKXrLyn1KwnpOwnxJwFcuY8CQwI/nZpc3t/RErqLC31ETXlERxQkKDlES3hIT1umh47SYsb
- Z8SN0aNH6JEjjPAhKvAd0gdRAFBO9u8AL4eR7NuGBMwQSniB8wKTTWjAGuRWh3apRrnWIvG2cxXqXhXa
- pRLjVkW4X0lwLcPfLcY7F+Ju56Nv5CneKcLcLcLvKxiyjeol+DVifMG/94ITCMTbEP8GAdlw81P83YUP
- 6AIXxwHZiPpxoQP40AFC2BAR+IZoBBQxQoweB8+mIuY9ivh39DhQToqdBKAhBCclTBERsqdJqchvToY4
- ZM+wkx9CkE1InSWmzhIgDoGABCIQiEPS5zCIVQPKEs/IeAKGAc5ByF4g5s6Tc+fhxSVkz2OzFzCAct5T
- XC4Ct8RvnuOB8oIX5MKXYDxwgC98AX8wYjFExq/JJa+JEEMj8S6Eqm/wZcD0G0LJW4mQm7jyJVz5Mhbw
- rUBiAAzic0hIgKl8g6l+C0JwAar+QAogQ0CUMFS7BP6Na1jFNayj69dQ9WvoulVs/Rq+YY0Iql8FkepW
- ENWvkhvWKKC947pVcu0yqX55716wbUS1q3DBIKqHEb52jdSwToJxT7UrBDjZACdXCXAhwcNqJV8FAtYl
- uMPJvasOB08DeSYwrsCliNsDHd4ogHUIruBaqlsh1rxFVPuWXPOWUg1vL29J8MoUvoIgHignFj8nFb2g
- FL1mlLxhFb9i5z9n5D1nwFjwggljzgIta4EGQXnaHIiS8ZiW8YSRNktPfQis09Me0mFMesiIf8iMfcCM
- mWDGjjJiRxjRw/SIIXpoPzUIpnPdJEiEBHRS/Tsofu1U/3aabxvFq5mIBM/NIIIkwJaEKLU4l2qwcIJL
- Le5OJfZOOfZeGe5+BdmtjHi3AHcrFwu6k4+9U4C7mYe6mqW4r3DILroX79eA8mnCeDfvzS//j/IAyMN0
- EiAhgwTivbjAXmxgLyaoDxPcjw0dxIcPw2ySGDFCiBwFvkkQk0SNEWPgYIIMN4H76AlyzCQpbooUP00G
- C0fi7BkiePZeqA1Yg3nDJFLCNzF1Dt7siMj73Rzu92gbmwFWPf9JWQtYCAFznoE9IzTnv6DkQYD4FJ/z
- FKZKGAgw8p7j8yA4gXvh7RX4RsJrECH/Ba7wBRbmiGUwHUREKH0N0zjEkmGWVraIhvfuqhVC1Rqxco0I
- iAPflcu4yhVkBBqqIR5YkTC9jK0FLUmEAI0YZO0qrm4N3BovQZkAONav4OpXsAA6IF6/pli3CiMcI/cC
- c3A9wAhY71HeuA6gwzECOsL6CqkBoEe4J9aBea+RYES+5yqhYQ/o/xNyEx4GF0/jBtAP3xNXt4KgXLuG
- q13/XXCdAOur8G6Aq13F1Kyia1ZAmOrlvfci8G8ChPu1qxAakashOgLQ3xBrl8hVSzCFoJQvUUqXyMib
- 3hty8WsKUF4I3vGaVvKWWbTIArjzXzDznjH2lPuMmf2UlfGEnv6Ymj5Hz3zCyHjCTJtlpj1kpjwCMZJh
- AjrDiHvAiJ6gR48zIodpgHj4IFBOgxkdBCoBncA3xb+DCnx7t1C8m6ieTRSPRtL9eoJbHZImAb5da3D3
- qjDOFWjnCuzdCtzNMsz1YtTNYsytQrRzEe5eMf52Pv5mNv5mDgh3Ixt3LRt9KR0B3TaqBy9xdKwEdCwk
- T8DCfTvAv5F5QCAyy8QH9eLAwoP70cH9qNBBdOggJnwYGzGKjxzFRY7hosZx0RP46EkCkiGZxEcjNyFz
- QkLyJFP4eJhZQmQi8ey99IgkMYLfAxq0N3dE8iGI4CY2/QmkSjAZ85gsyI08xUmEBSERCIIycib3OQJ0
- 7jNczjNMznN0/kts3gsITrCQEoEQvOA1Gf42EJAgs6hnqKLnMOVC3oglMzwcTL8k0zJU2Vv58jcKlcvo
- qlV09Rq2Zg1cEMJcdDWcWcIA4ojeoqqR8ANVs6QI0Uj9CkYioBkBq34N07CObVhDnBLgbgSt4WFsWMPU
- rQLlChC9wAMa1+E8Yrp7yDauI8bcuEZCDiQ2j9wEre7pE9O/P4wIX9u0ToARrpY9waW1d9C0RmzeBNbh
- R8AzwTRuYOpXUXXwTrKBrV/H1K1h9qCvWcPUrMHviJIcYKtXkSAeYn2gHEy9bo1SAxEUaIlS85YMXi6Z
- GVMrlully1TklVykFr2iQcRS+JKS/5Kc/4KW95Ke94KZ+4yV+5SV+5wNB9kLrMwn7IzHADct5SE1BTFy
- ZspDVso0K3mGlfSQlTDDigMvn6RHjlIjhmlhQ7SQfmpILy24hwYu7ttG9muj+bZSvZop3ohoHvUUd0RU
- 1xqCcwXmbiUIB+Z9sxh1owh1vRB9tQB1vRhztRB9OVfxSrbitRzU9Sz0jSzcrRzi9Sz8lXTM5TTU5Qz0
- 5XTMvsJh29gBUmArHlLpvhCIQ0K9g4AkCiFQgbRON04Si+NC+nEhA5iQQcXQIcWwYVTEKDpiFBMFec1x
- GBFFT2Bjp3CxU9iYSWzMBCbuASH+ASFuCpcwjUucgSkmLvkRZi8x8in3NwfHIAyMvyMO6SokPQIJPkme
- BJ25gMp+is59DgTjc18g6S04Bklw38MaDy6OJL9eYPJewjxyTxB5kwoXScVvSUVIXg9b/AJV8hJdsYhk
- P6reIuEvRNKVS6iqZUVQ5ZI8omWF6hXFmlVU7aoksF5ByK5Fgmx07ZJi7YoCUFu/gmpcQTetYprXME2r
- 2EYIA1YQyiWQIZw1rmGa17EtG/iWDVzTOqZpHQ1qXMO2bOJbNolN6ySAEgR8N20galxHiEcE5+HeDVIz
- CO5FHkluWqc0bZDh3qZ1YvMGoWWD0LwOWOOb1/BNq3g4aFpHxuY1uAvftIFp2kA3rqP34qWGdeQaq1tT
- rF9HS0CXUA52voauWUeuZ8klDaAjoQuwXgkTg2UI/Wm1a/TqFZgZw1yZXvWWUblEL12kFL4kFr2kFL+k
- Fz+nF72g578CxEGMvBec3GecnAU2KHuelfmYnfmYmzHHSXvETJ6hJ88wUmaAcnbyA07SNDdxmhf3gBMz
- yYoeZ0YgU09aWD89pJce0EUP6KAD4j6tVJ8Wuk8Lw6Oe6tFA9Wpk3K+lu9XQXaupzuWEWyXY26U4GG8U
- Ya4XYq4VYK7kKl7IVrxagLuci3bKVLicibqShbmSgbqagb6WibmUqngpReEiKE3BKUV+X/GIXfwQOagN
- F9iG9+/AI5lvMHIkYwjhOFZi5PgQiMUHscEDqNAhhdBhhbBhBSA7cgwNY8wkIA4jNvYBpAKxcVOo+Ck0
- KOEBVpLnxiXP4JIeYhNnUEkPFVNmMZL0H5LVTp1D/57hRvLcv+cBMVnPIOUHggNU9nP07xADx9g9gXlL
- sMb+jvUffOMKIBH2GkYcZEsKJZnskje4kjeY0tcYyWQL0hcwBUSmepJZI6pqSbF6WaHqrXzlW/maFVTd
- KgrxQuTNHQ7QDYgw9YiRy1cvy9SvKjSto5pXFFvXMO0buNZ1YBpMGtgCwjDNm0AzrmUT27aFb93Ete1p
- C9+2CTcJbVvE1g1iyzqhZY2IaJ3cuiXRJqKWTRIIUAa1bpLaNkitG5SWDXLzOqV5A0RGvhAunnX4oYja
- Nwjt64S2dXzbOg4ZN/Dtm4SWTXgOmJYtbDOCO0wMgHIFGBs20HXr2Dqw9k+CwAaZqsKkYi80ql2lAOhI
- ngden1Vq1Qq1cpla/ZZW84ZZvcgof00tfkGWiFr6gl7ynFH0glkAE9BnzLyn7LynPFDOPCf7CSfrMRsQ
- z5jjp8ywk6clLv6AlTjJTpzgJoxzY8e4MeO8mDFO9Cg7eoQVMcQM62cEddMDu1iBnayADpZvKxMQ92pk
- ejYw3esYrtU0lyqqSxX9bjnjdin5egH2ah7qWgEWUT72Si72Ujb6QibKKQN1MQtzPhN9Hg7SFC+moi6n
- oa+koy6lyjslyZxPlAVdSJU/nyyzr2jENm4QH9CCDmjHBiJzTcioECGpgqwt9WACesHFCaHDxJAhWIVC
- h42gwsfAzhWjxlCRYygJ4ujoKVTsA0zcNDYGKH+gmPAAnTgNOUFcChKrwCIONvEhOvkROmUWlToH+oNv
- dPo8Gll3mEfWbiRGjpXktveEzgGf/p3mPcT3yP6Dckkme08wW0IEee4iWKB5gytCEn/IsghMJSExXPoW
- VQGh9gqEoZSqZTKoGtILMJtcgT85GolbVsDwMODiQHkdBLJwAKwvo+uWUaDaZfmaVan6NdnGdYWmVbmW
- NVQbWPWqYhP4t8RHAfSWDTByRK1bgB2+YxPftU3o2CJ0bBKBSxiRg01S+8YntW0SgM52OLlNbNsiwE1E
- W8jDQG2b5LYNSusmrWWT2roJB3AG37GB21PnJr5zU3L8x8lNuKLgp8PTQHBHnhJY+5oiEA8RVMM6vmEd
- ZsaIGjdw9es4JOxBgiUygF6zCuE4JPgJFfDKrFArliiwblX5llb1hlHxmlb6iloMXv4KQnNK4XNq0TNa
- ISD+jJO7wM1d4Oc9FeYtCHOe8EHZT3hg56kPuUnA9xQzaZKVOMGOH+PGjfDiRvjRw4LIIV54PzuslxnW
- Sw/toYd2MwPbmf5tLL92tm8r27uJ5dXIcq9jutcy3aoZd8upd8oot0upN4to1wtIV/Nwl3PAwhHEr+Ti
- LmRizqejHFMVz6bIO6YpOqQqOCTLOybJn0uUO58ofyEZKJc9lyB9Nk7aIUbqXKLs2XhpCF1s4oYIga2Y
- gDbMJ9AhI46so2ID+zBB/VhYWQ0dIoQNE8JGcOEQkU9ARA5ejihmCowcRnTcNA5Aj55UiH+gAOYNcEsC
- cXwyZAPnYJESghY0QvljRVDaExSQvUe5JETZAx0sHBZuYJESsXPEy19iQX8gvnewRzkCPbKqRyhBRIT1
- xeKXsMpIhFxK6SIBMtxlr5GsdjkSgsOioGL5MrpiBV+5SqoEx1qmwvtyDdgYhKeQgFvFISO8j69BvgJJ
- wNVCQLKOBxeEGAYicjB1IKZ2DUCXalyTbViVbVlTaN1EIdCvoVoRvP5PretYBMQtAqhrm9i5BSJJ2CV1
- bZM7QVsgCjIisOK74GF7ktxEwN0EwwbBOwC1bYvWtklt26R0IBcAAnfnJlYyfhJ8IfJVG9iOLRw8k+Z1
- 9B7ryLNCrB3TtAnEQwSFxPf/j5DYCea7tSBJgrIKEi/L5MoVsHZaxRK1DFh/Sy97Qy9ZpBW/pUAQWLhI
- zn9FzX1BzQM9YwLiufOC3CfC3CeinMfCrFl+1iwva5aTMQuxODPxATNhihE/wYob48QMc2OGBDFD4qhB
- cXi/MKKHF9bFCumgB4PamQEtTJ8mpk8zx7uJ49nA8mxg30coZ7pUMu+U0m4WUa7nk67mEq/mEq7mES5l
- Y4H1i9mYCxmYcymKDklyoNMJMqeTZO0SZc4kyDgkyJyNlzkbJ+OISNohVto+WtY+WsYhVvZMtPS+omGb
- eCgV6MQHdmBhoTUQmXdKcuT92BBAfBApIUAOgPURHDL7HIdJJzZ6Ah09CXxj46Yxv9s5OmpSIWFaMfkh
- BviG1XhkQX4WUoRIljD1MQQtKED8/x90YH1PMIPMf02C5UkAHew8X5Lk3tOekYMgtQLZbmTZ8iXkCiWg
- I4gjKgMh6+cgWLKR5M6WYfVbofSNfDlkCVeIVTDTWmXWrbBr37LqV1h1y3TIoMHaTfVbUu0SBVS/RKlb
- JtcvExtWyY1rZJgRQijcDHHwJrZxU6ZpU6YZtCHXsqnQto1u2UQ1b6CQ4EQSn0hCFBx4+R7lEhG7NkGk
- TqB8i9S9Te7eQg6Q4y1S7xZxTz1/aJPQs0XoRi4P+FpS+xa1Y4vWvgmigPfDBdC5iekGbWH31LOF7d3G
- 92zhujfRnRuY9i2IlHDt2/B8cIiv7wnimQ0gHkL8T5JE/zDZJTesQDYTWW9CTH2NVAHRC2RaVmgVK7Ty
- ZWrxG0rRIhnh+y05Z5GQ84qY85qS84qWAxPQBXb+nFLBnFLeQ3HujChnRpg1zc+a5mbNcDOmOckPICLn
- Jk5y4sbY4OVRA9zIfkFkn1J4ryi8RxDeww/tZAe10YJa6UEtTP9mllcd06eR59XIvV/DvF/DcqlkOJfR
- 7pTQbhSQr+QQL2cTLsGcModwOQcHUYpTOupcqoJjsvzZZHn7BDn7BPnT8bK2CTK2cdK2sVKn46TsY6XO
- REudiTxmF3HMJvyYbZiUXYTs6Sh52wjZfYUjVnEj2BAEcUxAD9YfwpUeTFAvNqgPEizYkAEcpBGhKCV0
- EBc6hGRaosYJUZNg6sA6zDhxSGg+BeE41J9g4qdQiTMQnaOTZrAgSeUJHlk4gOVfZHEeyaWkPUZL0imS
- ueZTcHEwdWQEIwc7z4MVylewRI/MPoteE4tfwzoOTCgheQJL8TigHPiG4BsJwSFd+BJX+pJYArHjS2r5
- a1LlK1wlrGYjC+8I4rWQD1km1L4hVy9S616zml4K2p6Lu1+odS5odcxpdsxqtk+rtU2pto4rt4wptU0o
- tY+Lu8ZEnQ9E3XMqPfOqfaCnot5XvK4lZhuE1JuYtm1U67Z867ZM67Zsx65i+za2cxt8mgLO3QWOu0Vs
- g9AZiNwm7glCl27QFhEZt/F7Y88OAdS7S+jfJQzsEPq3CX2fROzbJvbsEHt2ST3bFFD3Nq1ri9aDjHBt
- wPsDrnsbBw/uBW3he7eRxw/skvp34GrBd2/CvciPg+8AY9s6FiYSrWt4ZGIAQiJ4eItAZgItm5TmdTLM
- dBvXKPWwVgWzz1UK+HoVsrRErl6lA+UlS5RiJJkIaURy/htqLrjPC1LeAqPwibB4RrVsUqdyxKhi2LB0
- WL94SLdoSLdgULtoWLtoSCtnUDN1QD21XyOlTzWpWzmhWymmSxTZJYroVgrtEYaAuoWB7Vz/FqZ3I9W3
- kerXzPauY3nV89xreeDi9yoYt4qpEKhcyyNfziZdSCc6pRHPp+LPpWIdU9AOyQpnkxXsE+XOJMrZJyqe
- SVCwjZW1i5a2jZGxjZK2jjhuHX7MJuKoTcQx2/CjdqFHbEOO2IBCj9lGSJ0KObqvaPRU7DAmpAsd2IOB
- cCWgF+3fgwroQQX2ooL7P+XLJSlzKLiBZCIe8oaRE0iyJWYSB6mVOMgeTuEkoAPuGBDgvsf6XvQCC0Bp
- c8g62e95Q2y6JCgHC98LxyWTTrBwJGiRVJsgNSeQ+QbDBhWCkOBbsmaJ1JkggTgsXkKpUxnkwl/B0g+9
- +BWt7DVBspQDGXHEuSEfXL9EbX7Nbnkuan6i2jKt0T6m09Gv09mp096k21yr1Vip2VSq2Vyi1VSk2VSg
- 3lKk0Vyk3lKo1lyq0lGv1d2s292s1duu0T+k1jut1LXA71pkdq/SumAKuKHQtiXXtgMjqmOH1L1D3iOs
- e5uEOPE2oXOX2P2OhGiX2LtLAiH4ItpDHE4iGkREGtwhDe2QJAfk/h1y3w4ZAR1GhHUqqHcHRrLk+8CX
- 4/t3gGx4NyDsHYAAd7jZs0f5Flw2yM0uiKCQOSsEPJT2LRKE/ogkE1+I+CGx07SOvGXVr8BCFRVWqWrW
- kFR6JRThLNHLlhglb+nFizTIrhS+YBS95BY85xbPC0oeqJYN6ZV3m1S3Wtc3nKmrt6tpsK2st65oOFVW
- b1HRYFnRaFXaaFnYaFXYaJnfYJpbb5TZcCK1SSe+WTO6WS28RSW0WTm4SSmgQeTfyPOuZ3jWUj3rYd7J
- 8gDKKzh3Shg3i6jX8iBQIV3OJl/KpDilURyTiWeTcA6JWPsE9Ol48G95gNs2VsYuVt4mWu5UpLRNJFAu
- axclax0uZRV61DL4qFXIUZuwY3ZhQPlh65Ajp2AMO2wZdHhf6aRt/CguqBMqtFCAOEI5eHkfgK64tzC0
- Z+oAeuQoIWqMEIWELjigHBLkUHGFzEcnINmCiZv85OWJ04id71H+/w06ZA+hQAUqUjAZkgSiJBxHJqAg
- AB0pCXxFKFgEUwfzxha9wBU9xxUgaz0QjuP3qv9KFpEVTajmQwr63kI4DssZUAVKK4HpFCwEwnLgMrV2
- mdv0RqnlmWrbjHrroHZLm25DlV5DoV595onaOO3KYLWKAOVKf9Uqf40aP81qH41qX80aP40qP80qX60K
- f/WqUPW6CM3GKI3mePXWLI2Ocq3OFs2eMZWheZXhN6LeVXonEiEotmzKtW0rdm5jwGjBZft2CH27hN4d
- fA8Q+Y6IaBfgllC7uycSMiJniD1gxtvkwW3y0A55eIcytEMd3KHAmf5tYJ0kEaVvG0Tu3Sb1wsldOEPs
- 3SEM7ML1gMD9ifItxNcRuBGB00tA38T3bkA8g0MCpy2I7yltyFwW3nBILeskSTIHyV02rhDrl/B1S8ga
- Vs0KEVZAyxappW8YpW9YJYus4kVWwQte0TOlsqdaZY9OVI4bV3WbVdVZ15Sebci71Jp1rSXzSmv21eac
- K825VxrzLjfmXarPu1ib41SXd7Gx4FJd4fmKgjMlhacKSi2zy81Sy42SyvTjSvWiS3TCy7SCKlX9qoUe
- lZJApQJiFdbtIsaNAtrVXMTIL2dTJF5OOp9KcUgknInHnIlH2cWCf8vZxcnZxMhYR0oD4lYRMlYR0tYS
- 0AF3i5Cj5iFHLIIR1k+FHgW+rYIPWQUfsQw6YhF00Dzg4L7SqdPxIxCjQ50WGDkaKA/qBy9H9EfcIqmn
- hRVQxNEjxwDu/wM9agITO4kFyuMmETvf0x9xC9j5nqNDpSEU+kB1G+Lr83uUw7IOVA5CHdwnL8+H+ATm
- PW9IBYtIYSACN1JNBSO+5CWsZRLLFpEoHKabEuFhrb4USl6B8mVy6SqhbAUHqYPaRWbTS5X2af3GLt3a
- crXqNNXycNUSH41SV62y2zolV7VKnVTLHFXKz6tXOmnVOOlUOGpVnNOucNKuvKBXdcm46rJh5RXd6qva
- dTd06m9rN7rrNPrrNkVrtxVq9LfrjD/QHX2t0r/O6NrGtu3IdbyT7dqV793B9u/iB97hBnbhQKJ3+D7Q
- LqBPAvUijAKvyNi3C9SS+3cBcdrQNnV4mzK8TYZxaIcCpj4A2v1/RQGbB8HJPiB+C2IViuQYgXvP2vfc
- Hbk24IxECOgSdW/AHJcM6lgnIBlJmOCug0gta+RmCeh1klIFWKmFDHr5ErlkkVLyllayyCh6xSh8xS54
- Ji55ol31yLRm2Kau9Uxj+fnmrGsdSfd6Yu/3Rd3vjbzfH+PeH+veH+fel3C/O96tPc6lI/Zud9y9rljn
- joRbrYnXm1Iu1aU5VWaeK892LMs+U5Rlk5N9Ki3XKjbfKLhIw6tIcK+QdbuAeT2fcS2XfiWbeimTfDGD
- DIifSwEjJ5xNJNnH4+1iUbYx8qci5WyiZa2jZKwipazCpS3CpD4p9LhF6HGzoCOmAYfMgemQo8C6ZAS+
- D5sHHbYIPGIZeNjM7+C+4onTMUO4oA6MfxfGrxsFoYtk+VNRErpgkYIWSYz+B+jg6LD2idg51ItPIY4O
- oMdPYiB02eP7/4fyPdAznpAlFYVAPNTKgoUD3EjBt6SKEBkhOv9/QCdCcILYNtD8e2oFWbpfJJa9+T/Q
- IRwvg0qMt6TiN/iCRagoxNa+YrQ8FTePatSV6JREK+V7cAqu83LP8bJPi/Lt1AptNIpOaRRYKOWfFBSY
- ikosVMos1QtNVfJNVQvM1YottcosT5Rbnai00a2y0ym306k4o13jpFt9Savqhmq1j0pzkkZfve7QhObI
- a9HABrVnF931TrrnvSyQPbCLG3iHGdzFDEnGwXdYhPt3eLgAJNcAAdEuYEocfE9C9I488o4yvEsd3aGO
- bJNHgfVd0hDQ/44Mdw2+ow69p0qIB6wRwZl+xOPhCz+Bvsf3H6BDpP7/A3rPhgT0DWLnOqLfk5vEtrXf
- QYfKlk+gQ8oFybSUSF7M0jeUkpfU4mfcoseq5dP6VcOWdS32LeWXujJv9sa5Dkf6DYf6D4Z4DYd6j4SD
- fIbDvQbCPHpD3XtC3fvC3QfC7w9EuPWHu/SEO/dEOXfH3umIv92RcLs94WZL3NX6hMvlKRezUu1i0439
- 09Xc0nl3MjjXM5mXMhkX0qnnU0iOyXiHRNzZRIJDAvFMHNEuBmcbgzoVKW8eKmUZLmUZJmUOZMMYJmUW
- chxkGnzsZNBR44BDpoFHzAKOmAUeNQ86ZhZ89GTQYZOAgyb+B0z8DpgFHDT1PbCvZNwueggb2ImsDfl3
- IdF5UB8qpE8hqO9T6PL/gA41LeDokGGE5U8kdEEWQcHOIUZ/AHzD8hAC+h/ai1v2xvTHJKSubR5qxHFQ
- N7tXBf475aQ8KPV8CaWzJMi67Jk6xOVg5ODf4OKS0pRPiMN2hDJIIMIyPpTXvYVlDqjeRs5AuWzNa1rL
- glLLiHpFgSjPhZvhSEu1Iqeb0DONOZkmomxTlXQjcbohP8OYk2HIAmUZc7KN+ekGnBR9dqoBL91QkKUv
- zj4hzDUSZxkrpxkppZkoZ1uoFp4Sl50WlV0Qld8T1McotVerDT1QH3krHtqk9W4r9u4o9O2Al0Pogh7a
- lWgHNQi4S1jvf4fph4P3mMH3ONAe/Yh28UO7xJFd0sgOaXQHGUfekYbfkYfek4c+UP6gfOg9IL5n8Aju
- QPb/G7oA9H9YO4COGD84PXj8JrZ3E9e7iZh9F0yOIYv/KZFPhiw+TKzBzptWSODojQjrUAIABS0wASUX
- vyVCTVvZa2r5c1bFE+XKqRPVg2bVzbb1Jec6sm/1JroORniMhPgNBfv2h3oMhHoMhtwfDL4/EHy/J9Cl
- K/BeZ6Bzd/C93tC7QHl/6L3+kHsDIa6DYfeHwu4Ph7sPR7r3h7l0h99ribxTEX0xK9YmMk7PK07pbjzv
- SiLzfAr9fArVMYmMxCoJuNNxuNOxBJB1JPpUBMoqQl4C9BHT4KMSuI9Kbh4/GXTMJBAoP2Lod8jE/8jJ
- gCMn/cHaj5oGHjUKOGzoe9DI54CRz35g3cRn/76icZuIAZR/O0xGocQcKMeEDGBDwdQBdziQ2PmeIHRB
- YvQxyDBCygWRZD6KZF0kM9FPXr4H+qeIBQo155CCxPQ5qN6EqmUoU4atD7BFBQnNP3n5C0jQ0vYEleL5
- rykFi5QiJDWO5MiLXkIZNJREwz6aPUcnSOoNoU4a1jjIVYvkmjdQxk2G2u7G1/z2ae3aCtVUd0rsSVy8
- Lj5OkxijTo3VYMfpCaJPCCK0OZG6jHh9avwJSrwuOVGflmzIiD9Bi9GlxurS4/WYSTrMBC16uBrFW0S5
- r0S7r0T3UaHG6DLyzAXFtqJ8e06RM782TrW3SWd63mhmXWtsi923BhNBiBzIfVu4gR3MMCI04usI6IA4
- GjT4ATP0AS8B/Xd3f4cfekcYlmjkHXn0PWXkA23kAx2c+5OL74C7U8H74a1g8D1i85IEy/9NQPeg3wtg
- EPrhMpBcCRC6wDMBQeaxewvy9JCYR5alICnUDjNRJEyHlIuklmaF2CCpcqlYphS/pRa+IcDSBGwxKXnG
- LplVKh/Xq+owr6i2Kc85W5VwuT7yTlPQ3VZf13af+21+ri0Bd1oDbrf73en0d+7wu9Pqc7PZ52aT363W
- wDttwbc7Q+72hbkOhroPhXiMhnmPh3hPhPpOhPuOhnoNhnj2BLk1Bd4oCbFPCjMOjFC/Hym+GstxTKKf
- TaTaxxNPx+JPx+FtozE2UZhTEWiLUEXLMEWLMLmTQVImQUD5MdMQCd8Bx4wDjhkFHDX2P2LoewhAN/Q7
- DDLyPWTse9jE/6iR31FDn0NGPgcNvQ8Y+R4w8gbQJ20ih1B+bQr+nYoB3ejgXmz4AD6sH9KLSOgCi/97
- lP/fZBRAn8DC+v8e6JLJ6N5MFMm6/GHnn0BH8i17+gN0ZOcVgJ75FL23DSLnOfUP5b4gg/JekgtfEIue
- E4pfwL4HZG8LbEUreYPMRKFktPgtDtY+YfZZukQqh1JSycYcWMZrfK5U26mWEkjzM5cNUJIJV8aGKpP9
- RRRPIc1VTL0nIrsokf20mFF6jGgdWrg6KVqLGqfHjNVhRGjSwjXoUZqMWB1ahBbtDht9Gi/vwKSd57Ev
- sUjeYmq6kSjfQpRnxc93UipxV69O0Gip0xyZ059c1R5aF3RuQm6EhoTX27iRHezwDqp/BzUAAcwnCwcv
- Jwx9gKAFyQZK7JkED4asy9B70sgudWSXNvIOEKcNvWMMf2APvGMMbFGG39FGP9CHweDhYe9IoEHw7O3/
- Yx2YBkf/HX1JukZCOTymbwffu4Xr2sB0bGLaN7HtSKYfybq0IJQTm5FKGyiHJELuFWp3q1cIZcvkwjfk
- 3EV8DpK0ZZU+Vi8Y1c9rMM1Jt0gLs0r1dshwuZxz51rWtUuZV51yblzMu32pwPlSyd3LFc5Xq+9eq3W5
- Xn3vWo3LjWq3W/Wedxp9bjf7OncF3e8L9ewP8RwJ952I9J+KDJyICRiJ8B0O8e73d2/3vl3j75QTYhUd
- ru8drnktimcfTz0TTzkdS7SNxgHl1pEoq3BEFqEoixAFs2AZ0yAp02CIVaSAcmP/Y0Z+xwx9jxj4HzX0
- O3rC+yAcG/oeNfA5ou992NDnsLHPESNvyehzWN/zgIH3fgOvH/YVTVgD6P7tCn5dKP8uAB0X3o8PR2rN
- gfK9Wlxi+AgUmpMg6yIRODom+pOpwwEmdgoJ0EHxD9AJ0yBMImRdJNNQSR4dAT39MZTkU/ccPROqbRFH
- h/kolB9SQDnPqDnP6DDC2hso/xU4OqX4BQnWPvfyiUA5sF70Gtb2sYWLGGRf4yK2aIkIb7iwzFG2SK54
- yayaEeUWcYMuK7qqH/USyAaIsF48/F024RwRZY2TtyUpOtCxzmJ6sAY7UosTqkoPVaJGqTKi1VnhyoxQ
- JVaEGidSix6oznAio3WlpI0J1DN8ZUcm8w6bGqPFzzTiZZ3k59qpFtzQyvFQTguhxsdLV7bTRpY0+zY4
- PZv0vi0KJMWHd3HDu+gBRBjJ3BQsHIAmD3+gSsJrEHg2BNzgwSQIUUY+MAZ3GcPv2EPvuEPvhaP/VB58
- LxjYZgy/h/MQw8BjSMMfIKohDkJW5/f04h7fiKNDmmULMfU90GHW27ODgyWkLkB8A90OuX9J7Q1SabOF
- FIRBWSXUh4GdS6qFkYL18hVcMewTB9CRpToIzcVFDwySG00i441DnA28HPU8rU/6mFv7m9r4nbT0MTP1
- tjTxszYNs7OMOWObaH865cyZdHv7DAeHbKfzeVcul9y6UX77RvmdG/Xud5u8Xdp83Xohmo/wHY8KGIsL
- HIzxHwjzAdA7vG41+F4uDjqdEG7qG6p9JYx3JppsG0O0icKfisRYRYCFy5uHyFuEKsB4MlD2ZJA0gG4S
- cNwkQGLVCNYQrhzR8zmo531Q3/ewvvehPel5HTTwOmjkfcTA84i+5yGJDhh47dfzBNDHTkUPogPbMX7t
- GF+I1LtxIT3YsD4slCvCTFTi6PjIYULUMDF6hBg1QgLFjMKOZgKiMXzsGC4OHH0KYhh07LRi3Aw6bgaW
- S/GwHS55lpw0C7unSCmwZoRs39wLXWBfLfr3zZpQNQ6g7zk6DVjPfU6H4s+C14yC1zBSkCLE18RCSMIs
- wvoormBxr2wLNnTCHl4srGggk6dl2DVMqnrKrehVSolm+lrLuyhJuQkVvUUEdzb+KhFtdPyI+rFjxnj8
- GTrtCovmKqQGaHBC1FmBInKAkBSoRA5WpoUoMSJUWZEazEAV9jUq+cQRKZWDx4xRuNME3C06MVyVmaJH
- TzdgZ1qJ0pxEMZfIkdeOR7v8kBFzfHhSY3ZLZ2Rd1LUMKzvEvg8QroCdK/bvKEJE3vMO1wvhygfSwAck
- 0zIIgoDkHQ0gBoceekfs/0Dpf88a+6f62Dvttpfiuse8nhXVoV3R6C4LJqY97/A9PwHrlFHEy3Hd77CQ
- yUFmtO/gy+G6IiMLq8giFL7nHZK77NqF5Sp8xza4OKZ1Cym/Qcq8NnHNG3hQ0wbUukC1OlKejmw8XSKW
- LRGB8qK31ILXUHNLzXvKKJlTz+kyCEzUdrmh7Wypd+WExiUtzavq2jfUdG6oaV9V14Sbl7U1buhoOOtq
- u+npeZw44amn7613ws/IMMjMLOyUVaSNTezp00ln7dOdHHOuOJXcvlrnfqfNz609yLMz3Ae47/R3bfa5
- 3eh7o8rvfH6oTUS4gXOo8Hw4zTaSYBWJtY5AnQpDmYYonAyRMwcjDzxuFHTMEGJukP8RA7/D+n5HDIBs
- 38MwnvA6qOuxX9fzgI77j3Cg53kAxhOeB/S9EOKRuzwO6CHjDzoeP+wrHjsVC6C3YfzasL5QBdCJCexE
- BfegYYMFrB8hFV2DuPAhHLJaBLuHRsgxyL4hUgxsqoDNFiP4mFFcNBLGYGIeoGJmUDEPMXEzuNgZQsIj
- ctIcJXEW2S8IG2PTnsA+QpiM7oEOK0TIOigSoyOxCuVT6IKAzsh/ycx/xUAKQV9T8l6R9jbkwmb7vYou
- SXEiwnrha1zpKwri9EsQwROr5/llLUpxPhQPQ1kXgYybAO0lJLqziOfQ8io//sj68YAWCm1LZV6kM5x5
- FG8VZoAqK0CJ6i0keArxfsrkQBVasBI1WJkapMJ25TLtFFEGR48ZHjvmgJHz4dPjNNgpuowcI262hSDx
- NCP2HCbx0vGMWwfT7h8caFF9+Ex/5KX64Ipy9waz9z2x/z26fxfVt4OFzDeQ2gv5lg/kvvdInnEvdAHK
- IWU+tEmE9HnvNmvsJ63JHZOSXrpb5N9u+f05t5Uwsq46scUb2KZ2vCe0Q8CzRR7foAxtk5Dvhpg6rKdK
- QhSgHFwc1qd28d07+K5dYscOlIXh27axrRIB2U1QPLyG1McjdV0bSGlXzSpsK4GVY1jwJ8GbZOFbqNqn
- FYC5vGAUzPPyxtVii1WdXTgXLYWXdbWdNDQcVVXPqaheUNG4oKxxXqzmqKLmqKbqqKJ0TlnpgpLKJSXl
- K8qqV5RUrquo3VRTv6mheUtT+66OrtsJfS9DAz8To2BLszh728xL5/NvXyt3d27wvNfo7dzg69zgc7vB
- 91pFyPmkSAuPcNULoVSrUIx5mOKpcNSpEMWTQXJGQTInA46Z+B82CDx6IuCofgBEKQD6kRM+R/W8D+t5
- H9L1PKjneUjHfb+m6w/abgA64L4fpAfnvQ7pehzUcYczgP4BPS/kAthXNmadMIgJgdLFTmSnHIAe1AlZ
- F4jRoagLSnMRR4c9RNCXAvYTRUgaEsBN5Aw4/SA2YgTqdSFkR0VNKkZOKUZNo6OhugtqYKAGfZaUOEtM
- miMkPSakwJ78T6DjJfVbku33yDZyUs5zAF3COoQu4Ogv6DArzX9Jhc2dEKwj3SYQ7bEOVS571S/I5uWS
- l0RItxcuomEjY9UjXnGNMOouyVVN6g7l2F2mgicPf59DtMfIKu3/nvb9d+Ljxy0I5EsMmiuH5MkHkX3E
- FC8x0UOI9xTgvYUkPyHRX0z0V6Z6iRl3ubSrDNIVCsaNRYxX5WVo8TP0OHnG/BwLXpodI+8qvcaNXn+f
- UOAsleEtNTZ4cv71mdEXJ4bXVPrWaX1beIhhBnepfbv03neUXpgpvqeCkPQ5ZAl3KbAAhETkEJ9sC6d2
- DaY3bLLKKV7e/7h34yuXy1/FRR0eeqzyYE1teIvb9Z7W+YHav0UdWacNb9KRVdJdYB0H601/qAtBHN/5
- Dg+UQ6ELUsu1CRWUuNZtKNEhNG1AuIJs2kC2q6592ksKTQRgeaj8DYCObJaF7UKwiwI2B+U/FmX0qgQl
- CK5doF8w5F1S13RU07BX0zitom6vrO4oVndUUnNUVnNUVXNQVT2rrOIoVj4nVDrLE5/li51EKhfEqheU
- 1C4qa1xS0bisqn5VDaR6XUPdWUfLw8gg2MYq4eK5gtvXK1xvV7k713rerve+WRl0OSPawS9K9yKAHoIx
- hXAlWNYyWM44SE4/UBos3AgB/diJgOMQjgPlBhCR+xzT8zqi53lY1+OwjvtBLbcDWm77YdS+f0DT9UcQ
- HOh6AOh/6LCE+0MAum3iEC60AxfcRQiGfhXduOBudCgSuuCDYL8FUomOA8rD4DFQ7oKUeUGBF3IGEeL0
- 2PBRTNgolO8qhk+iIh9goqYRRU+j4x7i4qBGdw6b/ASfOg/dVJCd4RCjI50nJKxL2oPA/nxi5jNSJnQF
- eUbOBtzhRX8J6ZdPAtx/Zx3KXSC/LglmECEpyIKXEMagSl+Qqh/wC4v4oZdwLjyp25jjt8iyrmzUPRbm
- AgVlgpLWkD2mryh/lkp1ZjN8uWQfNs6ViXJhodx4GC8RwUuA9xLg/MTEIDEpQEz0E5N9RBQfFVqQGjNC
- jZWkxsrU4KbpsHONBXkW/FRLcr4TudWF3e3Kar5Hy7+LL4kTPRhxnJyzHn+lP/RWMLhKH9hk9G9x+3cE
- fTucnm1m9xazd4fds8Pq3mb27LB7d9kDO9zhTeHouu7kW+u6Nl3vu4cCrxxKuSWdfv1YTRRh5aXN8xXj
- kRVx7zte93tG3zZtYAOuH0b3Dq1jB9e+hYWl2c4tPFJusA0jrn0H375LQLQjAX0L1wT7PCAo3yQ1bpIb
- Nsj1kj2mdetEmHpWLkM5LkziySVvYIUIiuHIhVCW+IyeNc/OnlFOalLzCuBfOcW4rC26qKJ1RknTWlXT
- Wk3LRkXTXlnTUVXzvLL6WWVVexVVB2UVeyVlB5HSab6SPU/sKFJ1UtJwUtZ0UtW6qKbtpKZ5QU3zvIrq
- eWXl80riCypK17S1PMxNE5zO5ty8WuRys9Ltdp3HrUq/K1lhjn5huk6BJIsglGmwnFmgtFmgjEGQzIlA
- KcOA40b+xwwDpPR9j+v7HAMv1/c+putxRPv+IZ37APoRbbdDmi4A+kFN1wPaMEqO4QAZ7x+CA8kjD2m7
- H9S5Dyujo7ZJQ/iwdmxwBy6oC4QJ7saE9GBC+5BN0AA6TEmDB6AWAI3MTaG6CxFi82GDOKAfWA8bwoQO
- o8KB9UnMH6DHzKBjH6JjZxQToEZ3/g/Q91iHcheo6PpUtAhJmIynRETQGwRYf0HJfknNeQmFcrTcV2Dt
- e6Ajo2TrPlJptKcCCeiFr1EVL8j106LCfEHIeZwbV9YFJ3eTLHWLIXOHIXeDhb7IwjnQcedpxLtsuheb
- GsQlBnAJHmwMXAn3eWgfEc5XhPMRYf3F+EABIURIChOTQ1TJIRrUcC1GtCYjXo2eoslKPcHNNORlmXET
- zQiptpiqS5SuO4JeN7UaN+UQJ2xmmPDtK9epecux51rjb1WHl5X7VtUGN3X61jV619RBPevqvZvq3Rsq
- XesQ4ah0rygNLWk/XD9T06rjdv2Ar8PB7Kvo5nvEfndKrz/+bZ/J7tr50Zeavevi7m1O9xa9CyoZdyit
- u5Q2KE7cxkMiBSiHcBwqFsHFwbz3LLxlG9e0hWncxDTAjqdNAmwkrYeK83UoZZH0yVghVq6QkLh8kVj8
- BkrlKAXPSYXPiQXPqdkL9Iw5XtqoalSxuus9wWVj7hU1NUeRpjlHyYCrZChSM1PSsFbSsFfWcBSrAtxn
- xOIzIkSnhcLTArG9UPmsUMVRpHZeSd1RWf2cioajiuZZFQ0HseoZoZIdl2vL5doJBZe01f0sTePOn8m8
- eakY0jX3b1T5XM4MsPf21z7rQzD1ByOXMg04bhoopR94XC8IAd3Q75iB7/ET3uDiR3U9j+p5HAV2tVwP
- /iGNe/vV7/4II5yBEdAHSe6FUXLgcgi+BK6BT6CHtEHEggnuwgZ3oUNhMgpJxj5cGDSxGEBidITyfgyQ
- HQ55RqSSUZJZH8BDIjIc0jII8RjYXxc+jomYQkU9gOgFoTxmWiFuRjHpMZg6JhnZCQqUQ6MVctZTABrp
- GQQLRrA4ivQPQvY7Qx8cpBVOLggC9+eU3OdQ/UzLgx3QLxDQC16BIJIBxCl7Qvb2w+701+iql5SGaXFe
- DjfQAePKlbtHVLxBlb7FPH6XLX2XLX+HjbnFxt9h4iFk92MR/JkYbw7Wkw8ujvfm47zYaD8Ed4jp0f4C
- YpCAEiqihqlQwzQYYZqMCC1GjBYzUYcLGcYsY1G6KTfekhxjhco5Q6i+yK6+Iiq8phxzmRt8hVKcrNnf
- bT49Zzn72vLBG4vJJeuRt9Y9LyxAA4tWnc+Mu1+ZDq5YDq5a9Lw1GVg2f7Bk3zVq6e5y/J7tj1lXCa13
- qJNutNcB3Hl/2kQCe3PO6clb+8G3hn3r6l2bvJZtav07Yv0uoRmi8B0iCAlUdpANTZBOadnCN28C4p/U
- sIWt38bXbZKgDYYEcXIVUogPQTm+dAl2pRBgp3Mh7I57TYXd5fkvSDlPyZmPaZmPhCn9moHpajcvCa7o
- K19S0bJiK2sQWAIsXUzl6HCUTvKVrQXKAO5ZschBLDgjFJwW8O34fFs+HCvbC1UcBCoOItXTIhUboYqN
- QNmKKz7FU7bmK1mxeafYXCse96yq0l0D3UBb86QrZwvvXK5yu1LlcynT387DR83eG2cWIA+gnww8ZhYk
- rR8opRd43CAAKD+m74OArut5RMf9sK474uJ7KAO7GvcOqN/dr+b8I4yaLgD6AYAb7tW5f0Tn/jFdd9Bx
- 5MDjqJbb4X3FwzYJULbVig5uxwR3YkI60eHdmIgebHgPLmKAGNGPjxzARQ7iIkADgD4IGzYANwmRg8TI
- QZJkJCC4I3ulMZHjKGQfxgwGMjAxD+TiHyokz6GTZlHJyCY6KOqCdivI7BNJlkMJ6GvSXq3iXv+33w/g
- GpC0zkJS7Ajl0LtCYuef4vU/QIfCxoKX6OJFTNUrSt2UIDOD7mUn7cyRvktWvMkAvmXvMaXcWLJubJQb
- C+vGxHmwcL48oicbf4+NdRUQIUHuL6IF8ilBYkqAOtVHg+YP2RhNQZS2OEZbFK0jCtXkhmgyI7TZUZrM
- BB12hqEg1ZQfd4oRboWLMkfFGCtEmWLDrWkhZ9ne9mS3s/LjnZfnJq90thvPzF6cenK1oEYnp1y7oFov
- v1o7s1ytoF6ncciqbdK2esC4bdK6d8zey1Pxut3BpBv02jvsgdvUl16cD2HKSwGCkWDBu1nP5c2gJ5v3
- prfO9a/rNW5wqnfINbuExm1S8zapZZvQukNELBy27W2TWrdITZvEhi0CqHGb0LBNqN8i1m4Qa9YJ1cD6
- OgVAr1iFZQdk/UGSwoLKOdhIQcmBN88XFKQuA1pTzIhSuvV8E9SvnhNf0FE9I1DXpwkFGBpFjkCVJ4oI
- TEO2yJIntuUL7UUggZ2AZ8vn2ggE1gLhaXBusfppoRrIiq9szBLpUXhaBLYOiW1EF5gxBBYsviVXcFqk
- dFVD3cPUIPKcTeb1syXOTuXeFzL87O77qJ7xxZsC6MFSJ4OPWQTLGARK6QYc10eS5ccNfKUN/aT1vYDa
- I7ruR2EEyhGa3Q5ruhzSuAd8A/Tg2YiFa7vBY46d8Dx+wlNK30vawFsGxhNex/U8j8KeUdt4SJkD6G2o
- 4A7FsE50RDcmshsb3o2L6MWH92AjejERYOe94PRocHrE7BH6iVFA+QApauAT63AlhA3Djmk0bK6Le4CK
- nZKPBdBn5JJmFGD7HOww2gMdci/AumQOiti5BG4csmnoxafNRHvHSFcWsPZn5L2mUL+D/sfcFAJ02MUI
- 3Vowe6DXPuBn5tB9HWWdxVLONPlbNEVnurwrTcabqejHxnowwcLJfhrsAG2+v66Sv6F6iKlOjKl+uoVx
- ka1lmZNd8bXTOTfO5N46V+p8qc7lRtPdm023rxY52sYaqYVrciPVGAlqtMwTvDRTQbQlK8iS4Gck76V1
- zF1P5p6B4n1Lkrc9654t/lGX98KwT2IgLzlCnBijHuQnCPTkezhTPe5RAnw4Pl700DBecCgrIpqflaMT
- GEC9fvZ4+A1Ozg1R2TlC/yX86/ucDwFqT+6wR4JO/Hsx95//rd/5X8mbnyNG1xwalpWrN+i1W8T6TVLD
- FrkR9llvwUYKyBjim7fIsIEa6fSygUThtRv42g1czTpsmMJVruEr14lVG+SKVWLZMq7oDbrgFfRSxEJx
- KKSzcl6RM16QUp4S06Cr1hwtY0qU1Kp7P1zN0VZor6VmLdTQpgu5OAZRnkCQxnBQ5BMMnjlXYMXl2CB8
- 8234/FN8gZVQfEqsaiNWtxFp2Ai1rISahhwVDTJfhGFx5Wk8Oao6gWtAF5mxlC05yjZcZZizOp/Q9bc1
- T7x4Ov+WY5H7+TT/Mx7+Wvb+ZOMAOaNgaVj4NAs6bhQoDWG6of9xI18pI39pY39ZA/B1r6P6XkDwMV2g
- 3PUg6PcABvg+DOjDNQCxjYG3lKGPjKGPrJGvHAgOjP1glEFAj4PirWZUcKticJtieAc6qgsb3YWL7MaF
- d2LCOlHh3ajQbsWwHlRYNzrsU1QjAb2fCFdCZC8+oo8QAXNWJIhXCBtRjBxXjJ5UjJ2Ui5uUjXsgkzAt
- B7tFJfugJc0QoU0c0iyOiKwWfQIdyMbkS7S3DpoP0CMdWoh5zyCS2WvnCdG5JFx59X/oF72AanVorIOu
- fEmufyTMLWYFXFFwVpNyZincpqLuUORdKXLedJQ3C1aOyGEGapkXrUpcLjYGunfFhgwmR0+lJCykpjyN
- iZmPiXydn7bUVPy2veJVZf7r/Kx3ZWU/1dYspiWXOdiEKLGiVVnp6uxcfRGUvsRY8n1NSW4n5O5pSTnr
- yV7Xk719Eu9hz/U8y+kuurc0mRR5T3zJ7Pg1W3RqiHnADVXPC7wQZ9WUQGN/Z8FFG+nbF7Aet2jBnsLb
- FzDuTpTwC7wEG3KuqVynPXr2Km3hMqPfgfos5+ZvO52/fZz578fR3V8qHm24tb01rF8T1G3Sajcp9VuU
- hi1S4xaxCeaa0DJgk9q4QYFAvG6TXLsB/k1AEIcc4hq2YhWPtKmBus5laMwEqxCwOxGV8wqd8wqTDdu4
- XhLTn5MSnxKTF4jQnSJtTBTfqOMapH7aSminoXZKSVObJebjWQwUlY2mqZA4hkyBGYdvwWZZ8tiWPL6l
- QGQuVDIXKVuK1ayUtKyVdK1EOid5WjosFRGBz1RgUWToNGmaGMvToYmNmCqmTJVTLJVzfJWbmtoe5saR
- DtYZV+2z751N9bH3CtRzCKKeDFI0CZWGmi3zECmTUFnjUHmTIBnjAGkjkJ80Yu0+iGA+qu959AS4+/3D
- MNGUCAlpQHANwJVg6CNt5Atwy5v4K5wMUASZBaFM/OX3lY7YJsAGiyb5kFb5sHbFqE5sfA8pvpsc00OM
- 6MKGQyTTBR6PjurFRPfho/oQssP7CRDSIOojhIN6CRDShA4oBg/Kho7IQ/QSNQn7phXipuTip2STZuTT
- 5hQy5tAZj/GZT4jZ86Qc0FMitNSC9izQwQL2WBQ8wxS+QJQP7VlgVyi0+US6tUCrLUnDreeQW0RCl73o
- BWnnAmcgA4OU8mJKXmIrX1JqHvFyKhh+N2VvqB68TpW6TpW5Q5N1oyjcpyrcY2IDdZVr7t98XpK91Vq/
- 29b4U1fbL+NDvz4Y/62raz0m4ekd13cxMR9bGz72df2UnfX89t0dD9+PmVn/io9ptrUIZZFjhMw0NX62
- vlK2hUaCtbKPOeOGnuJFdamLasev6CpcNSW6OvCDb2rmR54dawhJ9DZxO8t1OcPxdlK5bycKvKDlfVYU
- cEnZ/5L4mgXuojnG44ooxOWEq6PA11GQeFE525ZWZKLQYoXutEK1W8i3nmdudsR8fD/18ZcXv/z67J//
- G3zzLql/0b5pRbN+Q9CwzqzfoNZDIgV8fZvauElr2qQ2bVIk2RVa3TpVwjqxcpVQvoovByNfIZctU5CC
- ROj88ZaQDYi/xmQvYgH0nBekzOeUlAVyyhNyykNG6ohabI2hi6+Og4WKrZqqlVjdgK+sQeerEnmaVLEe
- S9mYq2TGEVpxOJZsjgWPb8EXmgnEZkIlM6GqhUjDSknXQqB1kq91gq0uJApoaA5ZgUmVo4twHC2qQI/G
- g3gGTP20UOWimpqL0YkQW/M4J5vk22eSPc74+J84H8I4FaxoHnrULOywefgxs1DZk8EKxsHyJiFykIo5
- GShjEiAFK/+GvrD4fxxGA29w96Pg8RIdQ+iXIC6hHBLwcib+IHmg3DQQkjko0yD0vvJhm+R+TGizXGir
- fOge6L3EhB5ydDcBHD2iCxPViwXKI7pQENIA69G9QLkE9D5cVB8hEny9jwTohw0ohgzKhQ3LIzn1CVT0
- uELMBJi6JHSZVUybVcyYxWc9JmZDk755aCKHz0a6JaKhyVb+c1zRM2SbRcFzdN5zVB5si36GlrQrgi5F
- cDEgoEP0skc5HMB5OAldFCV2DsJVvCRXz7Fza2n+zjLXVA5cIh6+TD5+kyrrQgVTV7hHw0SeUJsK9//Y
- 1faxq/N9UupKcNj/Sss/tnf8lpn77NS5XopgVtPg57tuv/gGL546209gTRBZb7UN5vUNKtnMGBw6jk1J
- UOEk6whTTVXjrFVcDMkO6tJnNKRtxUfOays4n+a5X1CN8TIvT7tZn+tSmnTN+6q68xneDSvWZWO61znN
- aydp10zJbg788HsGd+y5QfcMEgJOB9464WnPD7Vj5tgzq+woJQbSBVoHu85S+9y0dkezP75/+PG/b3/9
- beV/H+fe/7fy0frdjmXjhhWl+jVW3RpCM/h33QalFoEeKKc0SUCvX6PWrJOq1wiV0CsUYZ0EoJcuU0uR
- bluUoiVyzms8KOsVIeslZLdomc/pqc/IafP09IeCzBG92LKT99z0HE4q2ygrWYpUTETKBhyxPl1syFQx
- 5Kgac5VN2HxzFseSxTXnCMy5IjO+khlfxZSnasZXM+Wqm3HUzfgaBmxVZQqfQ+Sy8FwuhqOC5+mQ+fpU
- 7kmmyJytZCNQOa+qfldfP8DaKvr86bgbpxPdzwQEG12O4NiFoa0ijllEH7WIOm4ZIWsRLm8WLmseLmsR
- CrUAcuYhslDxchKSj8FypkGyxv6IzUuiGhkjfxkYIbw5GQAuLmcaqGAWhLi4RBjzYIxlGNYiBLevYsQ2
- bQAX3qIQ1qYQ1o6K6EBHd2NjIXSR2LnEy7HRfVg4COuCYxy09YJ5aiQQ30+I7iNE9xKj+ylR/RCvY8MG
- 5RHQR1FRY4rRY/Ix4wjoiQ8UUx8ppj1CZTzCZT0mZAPrj/HZjzHZj1HZT1C5C5jC57hiYB3xdXQeCAEd
- GikiNP8Beu5zJEyXdFRE0EdAf06Ewi+kmhfabkELtWfMojZmiLvCDbVDl0nHLpGPXwHWiVL3SLKeFFQ4
- h9Jrb/ufqMhf/IIeaxr3ELkvjaz+dfXOO4szs/LU0T8fHv/u2AKWvEjiPTqCGvvL/omvf5j+9vDg/mNV
- R49nKcimsEhxquwEPUG8iTjCUnxDB2clOmKhfMz9nEqCp3Woi6nXdb1o71PRftZ+dw1crmoYqUvZm1LO
- nqSYKEnfPqPkfkHL55rOVRv2ZRuWy2U150tqgW4nwz1M75/lwUQ2y4lXepaRbSCdpnmw3oE+FGS2Opr2
- 67vJX/75+tf/rX387flvH3vW/x0zsnq6aVG1fpVTu0qvXafUbFCqNwBrcHEaeHzjJnUP9No1sgR0AsTl
- Fauk8mUokSDDOj/sTYGlfqgMzXtNzX5FyXpBy3rBTn/BSn1By3jKzXqglt1jHJtlce+WnoOBsrVIbCkU
- nxSKTbhiE7aSMVPZkCmGyagJi2fO5JgzuaYsoRlHyYIHlCubwAXAUTblqJixVU6ylQ3YYngfUKIJlKgi
- FSJfiygwoAiN6XwTmtCMqWwrVD+vpnNTx8jD1DLEwS7ymm2Mm51/qPHVGJ59JN46WsYqTsoathHFKljH
- yJ2KkbKEbRYRsGVOHip1AXeofkHKvEIVTYOgBgYhHsY/ZB6iaB6CsghGI2MIxioUZx1OBNlEEq3C8fsq
- hqzT+rERLYrhCOgKYZ2KEd2oqG50ZBdMSdHRfZiYfkw0xC092OheHHRpjOohRPbgYwaI0PYofoAU10eO
- 7aPEDJCiB3GRA4oRQ3JRo0C5Ysy4QvyEYvykfNKUYtpDDCjrES57Fpczh8+ZhQN0zhwq7wk6/ym24Cm2
- 8Bmu8Dm+8Dk2H1ooIgG6pDUXwjRxD+u9cGVvVvopdIGOuC8haicWvkEXQ9fPl9SKfk5UIPam5sEr1GNX
- KDI3qHIwK/Wko0Np2HisXA2ZNCtUeUEXTO6XH/jLocn90nNSqPnDcs+//uHt59+9/tPfn/3pry+/+Obl
- l9+++urvb7785uXn30x/9W3b9/sL5Y+lsYlxGpx4fUGciTjwpOCSBuYk/7Ch6Og9J/Xc2Jup4ZfuXdK6
- dFpw+azIzBCvrnyUgv9aT0ORTf5WmbXfQhdnpU+6eV5dR+mYuuDwGSuWrQX91iX1YHfjGHejpDtaiY7s
- fEd2oS01zVAhxUihzd9061H+L9sjv/z86tf/rH383+uPH4d/+jXz4daVtrc6jeuChg1Wwxa9bptRu82q
- 3WLWbTDrN+l1G1TE6ZE2pbDTGfY4k6rWoJ8HBTpYIKCvUgqXaIWwdWiRWfyGkQ+fCPKanvWSk/6Cm/qc
- m/ZInNajlVxmEhJqcuustr222FogMOPxjbhcxMLZIjOm2IQuMGbwjRkcUwbLjAn2LDDliMz5yic5ImO4
- GHhKJ3liM67YmCXQZ/G0mFx1pkCdIdaii09AgE4VnqSDBBZsJWsBrK3qXNYwdNY39bKxCrxoGeZi5Rds
- eD2ady6GZBenaJ0gZ5uIsotH28LeuTgZ6xhp2BtqG6NoE614KgKEsgxDW4ZhrMLBp4F44B7qeOEkcnwq
- AnsqAncqHJF1BB74tosi2UbB7g1kBNBPJfeiw5sVwlohTJcNbpMO65QN75IL75CP7EbF9gPo6KgeVHQP
- Jr6PGNtHAEcH1mP68HH9hIQBUsIA4E4G6GMHcVEA+qBc1Ihi3Dg6YQKbALW7k4rJD1CpM5iMR9ish/ic
- R7jcR8iY/QiTM4fOm8fmLWDy5jEFC3ug4wB0CNCh3ZwkNAfKIVABX5fE67+z/snRIZh5DcXrxLzXirBm
- VP2SVj0siI8k3tY7dIV2+DpZ5hZN3oWp6MvAJjOIZVhU04FDo3/7YfZP3z/+6vv5r75//OU3j7746/yX
- f1n57Ovdz75e//zL5c+/2Nj31drnf1r76uvVz79a2ff108//2v33bwql9qcwMHFqrBhtzh7odnxpDco/
- bA0BX41b5zWvOapePCMy1EWfc1A2MaaQyd9gcX/W1MQQCN8I2Af1tbFGJ0hWpkwy/q+qIiljfbz5SfIF
- e4H3be2cSPvqaMesW5p5F8U5pzmRJxQ8xQfybmn+d7nx40+Tv354+uvPbyBS//hxaOd/mQ+2r7Yt6TZt
- CJu3eI077MZddsMOp26bU7/Frt9k1kJ0Dlv6V6n160A8dPVA+m9BcznYJ162QilZpRctM4tgM+hbdulb
- eglUn7+GOgtu9oI4c049pV8rqkgrIFTH/eaJG5baDmpiax7XjMsx4nJM2dxTHJEdR+UMX81BrGHHV7Fh
- C62R3AukGkVmPJEJh2/M5ZvwBSY8vgmXb8zmGjBZOky2NpuvBUlGprIBQ2xIE5owhKYMgTlbCMnHM0pa
- TuonbpwwcTE3dT9r4n/H1C9I/06M8HIc1SEBY5eCPpNKsE8mOySRYKsRbPWHDdGwZ/R0LMomCoS1jsTa
- ROGgztE6EgrWYfPRXkGvItSv20Yjd9lG4+2iiadjSGdiKTDaxRDt48n2cZR9lSPWKX2K4c1yIa1ywW0y
- Qa3HgzukQtqPh7ZLR/UoxPYrxvShIrsVIroUYvvwsX3EiE4IabBREN70YRIHcImDxIRBUsIQKX4IGzWs
- GDkgHzWkkDCOTZrEJk5gkqYwiVOo5AfojEeErIe4nBl83kNC7iw+G3Cfw+U+wQLlwHr+Aq7gKR6UD14O
- O6ahx8sn0AlAOTTR3YN7T59idKQJDAjplFvyjNT4XFQ/qJYSyXAzkb7FOX6HInOLLO1MlfWnodOouHpF
- hYHvfpz/6m9Ln/996ctvlj//29Jnf3rz+ddLX/xp+7Ovft735e5nX21+/uXO519vf/n16pdfAPebn339
- 6vO/Df3t24qjBzMpigkqjBhNVoyRMMhCbME7JiT81VQH63iKb2lIUeEfNjEg2lrzHR01beyUeUIZedSf
- lVRRLN5RJuugtjbO+pRYUwPP4xzXUscYnoBHck5bMS5a03yuqGT7W9WGnKl0O5lwiumtIXtX+Uium8F/
- lxp/We/5ZWvq47v5X39+9M//dLx4HzOwdr5lSad5DUDnN+9wW3Y5Ddvsuk2gHAEdCWBWIXShIwHMOoJ7
- PRLVMGpWadCqpWyFUbbCKV3hlS2zkHgddpS/ZJcsKBXM6KR26oXmarp6K107J75hrX3DRO+cuoodn3dK
- KDATCKw4/NNM0XUl3QATu4SzN2JOX/I3POVpYO5ldsrT7NRdw5MXNXTOIqUvamdUVGyVxNZ8oQVHYMjk
- 6jC4J1gifZbYgCHSp/MNGXwTJt+MLbDgia1FqvbKWpe1DW4aGzrbGrhfNvTx0b8fp3onhXcpneSYiT+X
- TXXKZF1IZzul0s+l4hxToJELyiEJtkhjTsciO4/OwOaMWJxdLAZ22cGOUkQxqDNxuDPxcB4LB7CBwyGB
- Cjs5QI6JNKc0hlMqA0C3SumTC2uSDm6WCWiWDmg+FtR6NLT9WHgngC77u+QBdCR6gQC9AxPegYrqQccN
- oBMG0fEDmLgBXOwANnYIFTOsCGPsMCp+FJM4jk0YRydOoBMn0SnT2PSH+OxpYu5DUt5DUs4jAoCeDbjP
- YbMfYwH3/Hl83jwODD73KQamp5I20IiL72H9/w/63ty0ADpfPiNXPOfUPRY3P9CpbdBO8mHfN5R34cu6
- MuRvQRUAWdqPgYDeoCA/+v2Pz77668rnf1n7/M8A8da+r9Y//2rji6/fffb1T/v+tPvZnzY+//PGvj+v
- f/7n1T99vf7VX1a//NvTL7/p+8u3VYcP5pPRaWqsRD1+pLHQx1Jor4c31UXbWDANdDCayjKaajIn9HBm
- ZqxTNkqnz2pr6FLkMH9ncqV0YcVFJCsQyIqV0ATCfl1t2gldqqEe8ZyD2M6CdsYEd0ZfwcNRUOBrU+Bq
- 6n+SfEP5mAPnh/g7urtPq9+/bPrPyuDHdw9//Wly50PD9HJAxxv75hW91jVR6yavdZvbvMNp2GJBGNO0
- xWnaZjduMpvWGQ3A+jq1AShfgyYWIKCfAZ+oUb3KqFrjVqzyy9ZY0J+ocpFV/Uy1Ysogp9U4NFn3lrPo
- jCXbTld0WV/3qp6Oo7KSLZ9jIxSc4otsGPxzFKGHyKDkvMtkcPqgV0yp/a2yc3f6A2JGwpOa3AOzLtxI
- drySfuV26uWb0Q5Ofma2rgaWN3RNTitrm/PUTrKUDGl8AxpPH8IeltCULTzJEVgKlOyUNM6r617Q0b1i
- rHvnjIGni5FPtK5nhurtXMblPMKFfJJTDu1yFvNKFuNSFhFaK17MxDql4c4l4/c2TSObSpPwjsk4x2Ss
- ZNwT4VwKAbacOibBAflcChUZkylOqTTYjQqdM/ZVjlqk9MuGNh0PapIKaDoe0HQksPlwSNvRiC7pyG6Z
- 8E4pUGS3bHinPEQvMb2EyE5IsWNi+tBx/YpxAyAUKGZAMXpIIWZIPm5QMRY0oAAHCSOoRIhhxhWTJtGp
- M7jsaVLeDDn3ESXnESkbDP4RPmsOn/UE0i/4vMcEwD0Hpqfz6OwFNLSBzoauRpKIRdIT/f/L0fc+QAsW
- jIpekMsXGHWzStX9asUVKumRvEAH3F1lqXssGVem7E2a1E1YMGKhUxm4OkX5wR9/fPz1X15/+ae3X3wJ
- iG9+9tXaZ18uf/blBkL53zbB6b/45s3n37z98u9v//S3V1/97emf/j7z9x9av/2+6OD+XCImQ4WdoMsP
- NuL62avdv6F79ZqGmSVVU0PG3IRsZ8szNqFo6eBO2ala22mctFTiCBWk5f/GYEsRiT+IRCgU+gcMZr+p
- icDhtMalcxq25nR7S9ql0+zzluQrlpTQa5qJt/TvGeLPCg9bcr+PcTV5t9j+01LP+zfdPy/1/bTZu7JZ
- Pv7aq3PRoXPVsH1d3L7Ba93iNG+xGjcBdHbTFrd5m928xWzaYALoiNapjev0xjUQo3GN2bTGbFxn1q5x
- gPWydWYlHC+Jauf085vNIuMN7t1QtTVkGvHolnyVC1oGl7R0HZTEdgKOLdg5U2hH4l1E89wIqgWGFybv
- RPVf9CvVP9d+5t5OUsWvxR1PgtKaLnv2uIa9Sq9Yya+fisxsuBdUeS+wwiMk+dr9O0Y21hw1YwrXmMoz
- pPGMGEIjupIhQ2AKpQFQLCDWPi1SP62ieslEz+3GyYAIE98MTbci7t0K6o0K0rUSCrRcvFVEu1FIvJYP
- /eigZRcJOr1czIBmL6RzqYTzaQSndPyFdDyMTum482k46JBxMYN0ARoewV1p5AvpSFsY0MUM2kWkRQwJ
- 0oumib1SwQ1HA+qP+jccDWw6GtB0OLj5cFjnsfBuqZCOowA9uHtYh2xkFzqmBx/dDTE6JqpPMbZfIW5I
- MW5QIW5AIWZQIWpQPnJANnpQIXpAIbJPJqpPFohPGEUnjCpCDJPygJA1Tc6ZoeQ+pGY/ImfPkrJmiZkA
- OiRh5om5SB4GmzWHyXqCzgLQod5rHp31BAsfWYHE6OD0kHGH9v5P4UNaAHH43BwyfMBI+VN67SNhZac4
- I4MVdp/gZiN7RXjoEvHALfLRe3Spmwzpm2x5Tx46kYMvx8h3Htw/8dc/z//5q+dffvnmM9BXL7/60/O/
- /PXln/725otvXn357bO//vD6B6nXB6Qf//3H6b99//i43FMqvQuPz5I9nohVSBTSYrU54ebi0GsGrs76
- TtfUDSzIxhBtX1C7cFHT6CRd34R+9aaFiblYU4dhbq0uh/qHlOyfFdF/JZMPMJnSp6w0zE2Vrl8+ee/G
- yfO2MG0V3r6seuOc0NGMdNWUHHnzRJCTyjUjvI3KkfQwx1/+Nfuv3cnV561PJopePC5+vZz3YNF/4O3l
- 3nXTjhVh5wavfYvdssFoBjtfZzVtgoBywJrZuEprXKM1roPgXmbzOlNykoJ0cVln1WxwKtc5NSvC2mfa
- RV1G0ckGztdUzxnyjThUTTzNhC46p6YHoch5VRV7pJRFdIaldI4guCzNvnuME4nTLOBZ5tBNUjDa1SK7
- 59ci1zwz+qzd8lTtWu1cd5JqfivpfRqY3XTBu88j7mVW7URSUcI5ZyeBriVFcBIBnWNAExhQlfWpIiOW
- EGrFLDmq5gwxRO32mtq3zxr5+xoHJOr4FIk8ahl3q/G3K/F3yknOZeRbJcSbxaRbRdTreZSrudDeiH4l
- h3olm3Ilm4Q0rMuBUXKQTbyaQ76eT72WS72aS7maQ72aQ5eIcT2PdaOAAWf2Fffpx7YdDKo7FgBqPAaU
- BzYfCm45HNC2P6jjUFDH4aD2Y6EdMqEdcpBKj+0lQKQe3asg4Vgufkg+YVg+fkguFhpJDypEDsjBZBQU
- PiAb2S8X0Y9wHz+GSX5ATHtIznxEzZ1j5s8yc2dpObPUnFlKNrQGmCNkPgZBYyNM2hPoVofKeAKmjs2B
- SOYJvmAeOqGR8+cJhQu4oqeEwqdQcMcoekovnCeUL5Ab50R1nao5iZyw6xgXYxknrpQd+qgD6sAN0gE3
- 2vHb9OPX2dJuQnS0kJRPxjTJSI8dP/ZSXv7FwaPP/vLDk28PL+BJL5XEzynMme+Pjv39x2cE6k9GVu/M
- bGeFqoMs3vJp+397uj92csji0iLICnHKsIGaFWkpjr5tcvOKhrkt+6Qd395J+8pNk7NXdTWMKCIt/C03
- B11DPp0j5+x6VkuPgcF/iyH+DYX/i72j5vXrZkyG9I0rloHeTrcuG9y6rO1yXcv1qsYVW85ZQ4L/VZ30
- gNPJPqfi3E3bK/3/+5+Zd9sTa4t9M2O5C7PZm9vlz9YThpddepZt+lZU+9b5PZvMrnVaJ7RSWoV2eXSk
- yxw03V1ntW0wkP5EiOCA3bLOal6lNq1B70Vc0xqrcUXUvKTW8vREVZ95fLKhxx21i6aCU0K+HpWmSiAa
- cBkO2spOmmrnVJQdhKKzAuXzHJWLeMFNKfb9/ayg79lx+wVJ3/OSv+XmHFapp1i0sO0KUSeSj6sU08xm
- zvgt3orvMr2TybWoM7/51D9jyjslxezyVaaGNVl4EqIXBt+AzjeiCA0oXCMm7yRXpM8Q6JE5JkyBvZqW
- s8WJkLtGkZEnQ7N1/Mr57jUk+GQ5tzqSaw3NtZp+r4LiXEa5VUQCd4eGdbeKabcLqXcKabcKocsuBVo0
- wmUA3o+omHq7hHobRuSA7lzKdC5l3ynh3C1jQ4+kfUU9+jGtBwOqjvjXgpcfDWg+FNhyKLj1cGD7Qf/2
- gwHth4Pajga1HQ/rQEIXJNMySIgfRsUC3AMy8UOySaMKCcNyMUMyYOdAdlifdGifdDg4er8cKH4YnTRB
- SJ4ipc1QsmcZBU84hU84+Y9ZEtYp2XMI6Olz8PktmIwniqlz8qmP5dOfyIOp5y9gC+ZxBfOE/AUi4F4w
- jy9YgNkq1JSSixZo5U9p9fPsukF+dgbTx0nuls7hi9yDp7EHreWO2CsevU485sqQBdCv0Y85M+WC2fg0
- OqmKRl3Q1//v5Ss7p07PctUeKult33H7X0Lyvzz859QMhxmizYs3Pmbmfyyp2I2KWfIL+KW48GNXy7uc
- pEpboygxNVaNBh0Ewi1F/hc1HWzYBmbk05e1brjZ3HY/fcnV3Payrv4p0W1PJ0t7XRUdWmDk7Ys3TNR1
- cWzBIRb/YFDohYsX9Gjkw8G+133uO9pZCK9f0Az0tIzyt/O+pX/3vIr7BbW0oDOVqbfaSrzmRtN/+e/4
- Pz9Mba0OPX5Q9GQ6c3O94s1OzvR60MjG5ZFNw75VUe8Gqw/aMq5Re9bones0SYd1Sscmq2OL3grN1Deh
- tzqzZZ2DaIMOe6KhsWjLsqBzSbsNGhJ1a6Vn6nncUr1ozrPRYJrwGHockqEy+bSR4KKZ+nldNQdl5dMC
- 4Rm+2JGtfAEvuC3F8fqRFfotJ/4bfsrfeGl/4Wb9hZv7V37uXwVZf+Wn/ZWb+Z2oGm1cT7bMk9GJPihK
- xxvUaJ4v0DjrT9e7hBHaEHimNL4hEyJ1vjGVb0SFGIZnxOLrUDlaJIYxU+Cooe1mpR99yyQ+2Dw6VT+8
- TCWwnuHbSPRqIns00t0bmG610CidcqeMdKeMeK+Cerec5lxGvVvGuFfOdC6jQ9NdGPf6NkJ3UrgLRmg5
- fa+C5lrFcaviulZyXKtB3H0lfUax7Uf9q4/61R72azjo37Q/sGl/cPOBoLZDfi0HA1uPAOWQignrkIvu
- QcX1Y2CXRuKoYvyITOzg8YQRmaQxoFkmevB49LBs1KAsIB7WKx3eIx3ZKwuxTcooPm2SnDJBSp+kZD2g
- 5j9iFs6xCsDUJQGMJHqBj72FShj59Dm5tFmZtDnpjHmZrCdyeQuKBQvoQknmseApCQR5mGxYMX2mWLRA
- qpnn1o7y8goIAXekr2gevMA47ID/0UL676ZH/2ErdeQKVvY2TeYGODr1+G2SlC8VE0mnlGprrgT6f6yt
- /a2yajc+dScp47f2ro8PZj52D36IzVj2CP5PfunHicmPc3Mfxyd+7ev5daT/p46Gx4mhBQ4no7V5sRqM
- 6BOsEAvBNRO6yQm0ngnJ4doJt4AL93yd7vifveHtcMfvgn+s6xWXM2evmQTH3LnuYm5oQdeGOastPyPT
- /cZ1E2MDTlKcp4eL/eVzuq7OpjFhTplJt6L9T4e4nrx3Tux5TS3ez7Imx/nJZNr/fhl+vz20s9L//FH5
- k8mspZelWx+qXn5Im1y/N7FtPbih0b3O6tkk926Q+tZoPev0jg1a+wa1ewv6hyGtd1u3aK0brOY1AJ3d
- tsFq3aQ3rzE73mh2z5+saddNSxb7OQsvm/OtVZkGXMIJMeaUCdH5lqrPfeO7Fw3PG2raKinZQaG5WOkM
- R+yE598+yvb5jhX1DT/pr4LUPwvSvuJlfc4p2Mcu+oxb8Dkv/0te3he83K/5mV/z0r7iJP6ZE/+tMP6A
- SshBoesR7lUFvh2eZ0rhGTKQMN2Ewjeh8owZXH06T4vE1ibQYXn1mqFx4BmL+GtmqX4WGSknU0q0ous4
- Ya3UgHaqZzvNvYUGH31xv57iWk12raFKPgCDIfkMDBiZrlXQYJrhVoW04YVmvG5VDNcquIvmVk2DPuue
- 9VzPBp5HLYxcz3revpIBk5i2Y/7VR/zqDvs27A9o+iGw8fvg5h+Dmg/CrDSo5Xhwi3Rwi0xIK0xM5WL7
- UYnD6IQx2biR43HDx+KGjsYNHYuH4xHphAmFWCh0QYxcNrJHJqZXPmkAkzFOzpth5k4zciZp2VOU3AfU
- nAeU3GmI1CnZj4hZyEcoolJn5dMfyWTOIcp6IpM9L4uMEtbz51EFsHT6lJj3lAIfWJz+VC5rQa58nlwz
- zs8poYa6St02/OEa/9hlguxZhaMWx78zPvh388M/OKKO36TL3mHK3aEr3CXLeVDRARxqroXJfHzUf7rb
- Pk4MfBzu+Tjc93Fu8n9Ppv4zPPBTRcVqatpifu5Cfc1CQ/2LhvqFipKH6SmdPm55DhZxhurQBSBBi5lg
- xA024V7Uwaty9/OVjp2/aXTxjpWZg7a6GY+piedqUyydjFwCbwTFuwXG3LrkbGJgTrO04dxzs0hKdQ2P
- vBUZ4ZKfG52RHlSQH5aT7VNU4NtUF1WQfi/K3/rGWbbTKaLrFVG4p9Fge8j//ju09qZ9823fq7maJ+PZ
- zx7mbe/Urf4z/9GGz+TmuaENg951HrRl7N8kDGyQ+9eBdVrXJoBOhhbsEtDhswOYwHr7BqNzk9G2QW9d
- EbTPG9R1mGXE6/hfF1w349qpsU8KyAZKGFsboneQOKfcKivf3tfd3MlM10ZVxU4ZEiPKpzliCF3uHeEG
- /IMb+2dB0pf89C+FmV8K8j4XlH4uKvtMWPa5qPRzYclnwoLP+NmfcTM/52R9JUz9nJ/wOTv8TyzP79k3
- ZLj2WL45GDmTawSgk3gwNz3J5BvS+bpkrh6RZSNSdbU6FXvRPv2aTa6ndVG8VUGhfka9OKaDGdRL9e6j
- +nTT4MOMvJpI8KlGHo0gqnsD/X497X4dHT4Vw70WPvsFPgcG+YQM9zq6Rx1y7FEPIx0+FgZ6rvu28Hyb
- eYEdAv82AYB+Mqb9OIDuX3/It/HHwOYfglu+C275Ibj1UAjk1EEt0mFtciFtshCpQ3YlYRSVMCaTMC6V
- NCaVOAqUH00ck06eUoCFodhRCMpl4yDJ2C+fOIDNHqcWzLCLZ7mls/zSOV7RI2buFDV7kpzzgJzzkJQ9
- S4DZZ/qcQuojmYyH0llA+Zxs9hOZ3HnZ7MfAulyuxNRBeQv43AXYVArbMtAF8+jyCWpBNT3MS97N7NhN
- 0SFnltx1nMI5eTlLqUOGR/5mcvyv54iH7jDlnanyt4hy9+io+2yMt4gUbaxWcf38cLjvbEbEQnb005zY
- ucL4yazIoUivHs+bTVCge/VMzrXz2dec8q9dyHFySLU2izPQCtcQRqrzYlTZ8er0WB16pAnPWZ+mQvmG
- iP8zVyyroksxtlHH8eSPEg8cIRxUZMkpGwjCkn0iUj2uuViaWvPOXtTyDjqXkuWdlO7n6GRuYKxqdFLV
- /ryRT+ClmLjbpcWBrQ1RiVGOV88ynWyJN84x7l7hD3aE//rv8fdrwz9vTL1727v4qOzJRObyYtHm+7wX
- OyFjKxcGlo0GtsRDu9CXFDe0iR9cJ/Wtk3vWyd2b0HYdQIfG0ERoDN2+QemGXmKbjJ4Nbttrtao+g6RE
- A59rGjdOCu01OFZqNCs93HlHim+USmGrQfPkqaIGm4AAswtWOrYaKnYqynZiZXum6DKG73qEF/QNN/Zr
- QdLn/IwvhNlfifO+EJV8ISr7QglAL/tcDGPx56KiL0RwARR8Kcr9jJe5j534FTfoO+4dKZ4jTmBJExgz
- eSZ0rgmJa0LlQDbdhAF1AXxDKu+0WM3dyirxyrnCO+dLvBzKo2wrCkxz6tVjOjjB/VT/EVrgAN2vleLT
- TPRtJQPuno0kD+RD6ijuDfAJXmDb4Pd0ryamRwMNPtDLu5nu28L0bWX5trH9/k+coG5+UBd/X/GAWUyH
- dEDtMb+6A951/who+geAHtr6Y2j70VBk5UgqpE0uvFMxpF0uuEMappuxo/Ipk/LpM6i0BwppU/KpU3Jp
- Uwqp06iESYXYUZnYYbmEYVTiICZthJQ3ySp7JKiYFZU9FFQ+EVY94RfOMHKmKDkPSLkzpJw5AhQCZD6S
- zZyVzXwknfVQKvuRVPacVO6cdM5j6ZwnsjkL8rlPFfLnFSG/nj9Pyn9KKlwgls/QSproMaEoV+vDd5Tk
- nNkyd6hSV1DS9nIypjIHDBT/bMv55rrqobscqdsU6ZtEmbsMlAsH5SZAeSkRwnUEySc1Mmx0s+30888a
- 5547mXnWOMVaO8FEJUZfGKrNCtVghWlyIrWFYWq8ICVmkJgeqgL9XtiRyowYZXK0KilSnx18SuyggxMy
- f6TS99uf17vt4YjhyCowZGVpsnI0WVmS1C2vyzGpvm7e5x0v6V+/axkef7ewKv6Gi8P+49+gCDJEJkpV
- n6usSzlpwb1yVTcz7XZ22lX3O6pXz1JtT8oEe5/YXGr477vRf21Nf/z3SyjtWpmvnhlKer2Qtb2TtfQu
- fGLpyuCS6eCWMnQkHdnFjGxihtbx/esEpGGY5OMGoCMXfB4B8sEb68S+DebwOn/gjWrdiGZShobLNeWL
- JqLTQLk61cGCfPceNSpDubTXuHX+RNu8XkmHaUCwsZOV2mlNpdMqamcEqueZSlcxvLuHWd5/YYR/zYn/
- kyDxS17ql/zsLwWFXwhKvwTEBRVfiCo+E5WDvhQXfQHWzsvbx8nex0n6kh38D85dGcFZgtACCl0YvJN0
- vilNYM4UQG7RkqdiDKUvDCFsMPWzsU65er7Q+UK5l1NNlGNVrlVurU5CtyBsiB48Rg0Zood0UQLbSUHt
- JP9WENkPPtCr9dMnM/o007ybQFTfFqpfKw3k38aAT0QK7uKGdCMK7mIHdbLD+rmhvdx9hQMnozuPB9Qe
- 8as/4NvwXVDrP0JavwdHD2k/Etp5PKhNOqhNLrhdIahdNgiSjP0y0cNyKZPojBlc2gN0+gNFYD1tShFA
- jx+XixmViRlCQE8bI2ZP0AumuOWPxBUPxSVTvLIZbuVjXskjdt4DGoCe84iIVLw8ks96KAOIZz48mjlz
- OOvh4ZzZI3lzR3OfHM+dl8p6IpU5L53/FIle8h9jCmbxZdP0qn5+djrd3+nYbbUDd9goFyb6DknqouIx
- K7nDBqg/W4q+9rmCCr1CuKd29Br14A2y1E2SrDND3oUr58aV9+bhAoSUQBV6kCozWJ0drsOP0OWH6/BC
- NdkBKjQ/JUKwEj5EiRCiTAlWpgRCDwxlSog6I0iDDmeQrIsKOVybGmGj5HNO44Kd0P6s6sXrhq7+54lC
- +e+k/3wcf+h7mW+/OfpXC3ujqEQf/6Dr125aePg6ZRYEx6X6ssX4/VLfMkVkRYqMQJtK5B6/cM3gyvUT
- erqyVuZYQ50jBpo/nFD7tqLozsf/Tf53d/S/7x799q/nH3+eXZ6vmR5IWlzI2drKXP8pemH73tSm7TCA
- vk0a3cWObaGH17FDG7jBTTx0v4DO0V3IdmmkGR1MVYdXlYYXtdtHdXOztf3uKV+2FNrpsKx0iGetia5e
- 9MQiXvWYVucL/c43wtYX4pIuo6AQw4unlOy1BA6w51+oeZGjehnLu3WMef87RsC3rPBvuWF/YUZ9zUz6
- EzvzSw5E50Vf8Eu/FFR8KSz/QljylbDgS17WF+z0L1hpn7Pi/8QI+pFzR17gQBZYQgUYW2jGEkKtixVP
- 2VasbivWtOFr2As07ugahp2xS710Lu/G+fL7F+rCnaoybApq9FN7VGJHODHj9KhhanQfLaKHEtZNDe0C
- 0YI7qP5tEMHTAiUKaKUFwudndNCD2uEuRlgPO6qfG9HHj+jjRfbxIvrgGD5bhh81wN9X0G8c1XE0oA5m
- ogcCW/aHdx0I7zwQ3PpjcPuhkM7jge1SAa2ygW3ygeDosH40CDQrJE9i06eJaZOY1AnFlEmFzBlM5iwu
- cVIhekQ6alAGQpf0cVLOBLPwAb90WlQ+LSqb5JY+4JTP8Upm2QUPAXRi1gw25xE6d1Y+55FM9syRrIcH
- sh7uz5r5IefRj7lzB/KfHsl7djRz/nDG/NFcBHRU0RNU+SyxapSTV8qKvI/2MD7szD98B9yagblNkHdC
- yVig95txvrrrdKgkW60wUcPjlOwl7vcwGb1FlL9Nlr3HkoMIxxXZKkrxUaaBfIFmdUaoGogZog59i6jQ
- BcBfieiLdLygBKhQA9WoAaoUP2Wijwo+QIkQrUyNU2dG6DJCzPlBl7TdbujdczMzPyM0tOEZ2SpRxHKK
- tCNS+APHsQcNzdX8Am/5+lx1dz8bFnEzuyD46i1LWdR3f//hc3ncEXni4WPYb4Ta2KzCwMwcT3t7trmp
- 4ilTBauTUvduCF4tlH787cE/t/r+uT3167+effz3439u9r9+VPRkInH5Tcr7/yav/tf3yQeHkU3loW3y
- 2C52fBsztoEd3cQMb2MGdnDQ7rR7G4v0a98kDa7yR9/odz0wKi06EXtP19Va7cIJvt0J0vkzBK8AdmqF
- cvWkSveiWteSoGOF2LHIL+02DA4xuGItdNTknFPSPC/Uu8BVuYDjXpNh3pfmRuG0Ugknoo6KQv7BiP2O
- m/6jUtZ34uy/C7K+5ub9hZ//F0Hm15yMP7FT/8JJ/Asj8U/06L/R/Q9xbqB4p6lCS47YggMpc7EVX8Va
- pALLog5qeufVDK9rmHiftI5zdMy+dqns7vXq+1erA85VpFgXVBmld6snD/OSRxkJQ7T4AXpsPz2qlxGJ
- iBnWTQ/uBDHgs77gs5BCOuAyYIV3M8O6GFH97OhP4kf18qP6+NH93OgBbjzyaWECcHSTmK7jIU0Qjh8O
- bPkxtPNAeMeB0Lb9IV1HQnukg7tkA8HOO1AhsMmoTyFiAGhGJU3g0x6Q0iZwKePo1El09kNC5iwBidHH
- IEYH0FGpE6TcKVbJQ1HptLhyRlT9UFT5SFg2yy+aZRXOMvMeUrKmMJkP5LNmpHNmjuc8PJQ9+332o28R
- zf4jb25/wbODuc8PZC78mLlwOHNeLmdOvuwJtvoBtbiBHh2M8bKVvq9y/D5b1pmucIescBMv74g+Zkn5
- xtHkbwlx+K5+w5pqbb+r8peV/nGTfhz2j94hKdxlKN6gyd1ioO9xSO5CgrsID+1coLNFmDI1WIkSICYh
- jS5EJF9lKrQX9VOi+YkpkqYXRG8h1k8ZF6JKiFKhxGqxIg3ZAebc8NtGAV6W3iH2Z2+dIIsOm9qLnX0c
- bro7XLhprWss4omwV66a+3g5Bfo6xUTfjE9wsbASaenQOAK0PHa/NOZbEvfwbQ+rnBJ/ZxfDgACLwrzr
- mclnwv1ODHSG/PqvoY//Gvmw0fVudfB/H+Y+/ufxx38/WJ6v7Kr3mpsO+9d/M1f/6TO3dWZqW2N8lzG2
- gxvfwYxto8e2FIe3FQclPXv7oV/SDnFwkzH8VrVn2rC8Rj/eXzvo9AkXE80rJtyb55mhkaL8Bs3GGS2A
- u3eN3b1G6VrDdL3hVvaeCAvTuWrLO6fJdRJrOwlPnOcrnSNxL2O4EaKTbWfvj1wOKFQ/HaaolEEzaNG5
- 2KBknymvGfMdO+OIShnGIF9eO/5HXtg3jIjvmTHfs0P+QXc/zLyC4doyRJZcJZAFV/mUUBX23dkpazlp
- Gl7VNnYzsgi1PZPodC77xqUS56vl9y5VeJ+rSLArLjPL6dTOGOKnjTCSB6lJQ4zEYWb8IDNukBEzyIzu
- Z0b1siL62FGgXmZEDz28ixbeTYvuY8UMsGMHWbEDzOg+TkyvIK5fEDfAjxvgJY0JEkf4+4oGT8b1SgPo
- Ia1HwdGD234M7TgQ1n4oFOjvlgrqlAuEAL0bFd6HDh9Ah/ejogawcSOE5AlIGpJTJwhpE4QMWA+axidP
- YePH5WOHZBJH0WkTkGzhFj8UlUwD4kp1j5Vr58Rlj7gFD1l5DxlZU8S0CVTqpHTm9NGshwezH32fNff3
- zCd/yZn/W/bsd3mPD+fM789+/l3mi+8ynx/OXpAtnMPVznDLmzlp0QT/s8c8NaV8eRg/FsmVoXCLLHMF
- f/g08e/2Wn/29jxe1sbtWVCv7WNFeErdUv/HLcqx23i5mxRAHB6pcIeCdmHiXdlYFzbmPhvryyUGCamB
- fLI/nxwIferENB8x1UeA3ITzEOR4C3BeQmywKjlMlRSqig/XpoUYcoLtNSI9bdy9re1v6lpd0dS34Yi1
- FJ2uGoRF3Y2OvW93WofDlL54Ts/H/XSgr0Nk2CUfrzPqqlgXlzMFhVFRsS7uPmdcvazOXVG2O0dzvqea
- l32pofJebpJNdf6lD2t1H/83/tvPE+9X+j6sDvz6fvrjP2H7xaN3y629Td7Tw/4/76SvbvnOr519uKUz
- scMY3sUMv1MY2ZUb3ZEZ2ZUeeCcHzU0Ht/Bj2/TJNcHAQ9XKKs24YA1vJ1UXC1XnUwLvm/z4RJXKLt2u
- Z9p9q4LudfjkI+Sjv7pW8b1v+XWDarFxStftOWc1RU7KJ86LdB0EMB8V3ORrFF+8+yaj/H1xy+D98AyT
- s82X7q/GFz0PSC3Rc4giqJdrnH54OWDY/n46Gzb38CMImil0w1C06m1pzgU835atYs5TsRSoQU2vpVAF
- tqJCGcwFzRM3dHW8LY0iz1nFOFnFOVklXbLOvG6f7+pYGHa6tMCirMMgd1gpdZSZMEJOHCElj1GSxmiJ
- w9T4QVr8ID1hkJUwzI4fBLLB46nh3WSIbaL76bFD8Hg2KH6QkzDATxriJ40IQKnjopRR4b6SYbPEfrlQ
- yCG2Hg1uO4hQ3nkgqudoeO/x0G6p4A6YgyKgh/WiwvpQoT2ocNiHMUhIHCXDj08ZI6WNE9OmCKlTeIhn
- 4kZhiVQWQE+BGH2SWTAtKJ4WQYxe80hYNcsvmeUWPEJAT5vAJo7Kpk1JZT08kvXoR4A7a+7b7Cd/zVv4
- W87jH3IeH86a/xFAz3nxY86zYyVPCfWPBTXdStnx9IhLir76x7zF0j5sBW822oUte4Mu5Ujaf07pH+43
- jhTWMboWVHoWRY3jzJQoRRf9H26QDl3HHr9Glr5Olb1NUnAmoe/S0XeZaFcW1pWJ9eGRg0T0ICE9AMGa
- 5i+m+4ppvkIqwr2IEiim+oqIPkJcqDIpXJUUooYP1qb6GXIjr50M83O87mKmZ8fRs+NanFfhqcmINRTO
- OGpeuWpibMQ5aci+4qR39+bJAO8zEUGO7nfNdNWxVy8YlJdEFhcFJSZev+Osa2wqd/E6s6jkRkeLd3Xx
- lcpcx9nR8J/Wan7799BvP4//a33kP1tj/4PddP+a/fi/Jz9vdPU1eT8aCfzl54Kf/h33Zuf6ow3dyV36
- 2AfU0AfZoV3pYURSA7vS/ZvyIwD6BmP8laC5i58YzfS4zLlhwb55iul7h5edqdk6qD/wQntoTTy4w4SW
- 013Qa3cD3bVG7FsStkxoJKer3D7PO6sldlLWO6ekc1osPisUu50wKrvr/jS7eKOqaSYxq9Mv/El60X9b
- h95Xdgx6RFTZ35zyiv5fWftWRmXDOeckPesKhzt9t4KKza/eZ2mdp4ptuAjl1kLIwcKmOxUbsaa9ig5U
- 1Dgb6QY5mMRet4q6bBRgr+VroxVibxB96WSKp2le+snSdsO8IdX0MW7KOB3BbJwGSh6jQzCTPMpMHWen
- jnOSR1mJw3RAP26AGjdASxhiJo7ABcCKHwL7ZyUOciD4SR0TpI4J08eFcACObp7QrxDRLg85lojuY5E9
- hyN6DsYPHo8ZlInolQkB0JGZqGIgPAB2SfcgXV+iYdfFINTlEpNHyRlTlPRJYjJUn4/KxwxJxw7JQi1X
- 0gguY4xW9FBY8UStdkG1bl6p+rGw6BErZ5qWOUWExdT44eMpE0cyZw5mzEDQ8o/sx99lP/l77pNvsud+
- yHp8MOfZgdznP+Q/O1z2DFs3C5SL89J4MdeIQYYofyV5b66MO+PofajF5R6/CEtF3B9czklnF9G6F0R9
- K9zuZW7bnCAvm+hlfeA67YeruCPXKdI3qDK3SfK3CQq3KQrOTBSY+j0m2oNDCBDRA8V0PwHFh0/yEVD8
- hTQ/IfBN9oMARkQJUCIHignhyqQodWqwBtFXhxZkoxF577TbPdsr96zOuZraXdezuaRhcpqrb8k4e0X7
- 2m3TS1cMoSjX1kp4xUnX9Y6ph7Ox5x1T56uGNy7oet41c7IXWJpiLM0VLl2iJyRZl5Rey844Ex2s29vs
- +nIuaett6W//6v/t35O//fTw44fp394/QED/7+x7cPRG74WJiI//rfrvr1kr7+8+3jZ48I429pPc8M/H
- hz9IDb+XBUcf3j46uCE9vk2cWucMPOYWlZN83eRv2ZFu2tC979KzMlW6hk9MLUOfRx7Sq/onOrSohqZ5
- 8AGlnWsEcPT2aZ30XLW7l3jndAUXVLUdVbRsxCJ7ZfFNXd1gG7vsm3cqPXwqvf2qfQM6o5MmM4sfZJX2
- hCe1+IQ/TM5/39SzVds+HJFU7xk4kZq7WFLXGxAbYnz6PF/DGuJyoboNX82MIzaFzjBizbNq2ld0dFzM
- T4RdNk2+b5Xobhx4Te2uDfe2OdfdTinojnpignZh84m8QdXMEU7GBDNjkpk+AeYIYqZNsEAZkxxQ+gQ7
- bZyVOsZMGWWkjDLTxrlpY5yUEU7SECthgJU0wE4e5KQMc1OGeJkTgoxxwb6CPtO4bvnIDlR4l2xE3/Ho
- /iOxA0eShqUSRuSSRjAJg1CDToiEDl6tChCsB3YA6/joPmLcADlhiJwyRsmYoqWOExKQAl3Z2CHpOPgq
- cPQRfM4ko2pepeW1XueSQfuiduNz1aI5eIpwbaDih6Uh+548cTD9wY+ZD78D0DNnv8t+/G3e/Hc5T/Zn
- LxzKfnYgf+FA2YJ89QN6VRM/E7z8Bt7XCO0P80I+wY+L8WHLe3DlrrGPOnJ+uGqyPyGW2Dwh7Fliwbyq
- c4Xe80pUWccMvX7stvDHK8RDV8hHrxCP3STI3iJA7a4cgH4XkeJ9Lg5aLgLW3gIiNGr0EZDA2n1FFC8R
- yQu8XESCrEuwEilSmQqt0321yf7mwmyfS1E+V+1O6xrbadhcNTx7y+iah4VLiL2z/+krLqbnr524dddS
- W5vAYhw6oU00M6CcMqZcP6eek+wSFXguKtghyNfishP7khMtOso0IdH8vhs/LtJwoMPj6XT0aLfvyqui
- j7+M/PbLzP/ezfxvZ+ojhC4/P/z470fvl9r6G/2m+wL/tVX408/pK7v3F3ZMpnapw++ODL7/cfinI8Mf
- ZAd3jw/tHBzcPDq6iZraYPZBTVE52t9LyuM6IcCDmV3A7xjRnHyjPr3LGnuPGfsZM/4v2sh7zsB7Vtc7
- UtcGqXeZ1zKlnpat5HKFfU6P46QKDRY1bJUhQ6Jkrwy7PNUua2pf19N3NjF1tbD0Ou0QfOFa9HXnmCu3
- Yy/fyr7rWR0U3hod3xQZ2xAd05eVNZ5f0BASEWzj6CjWtBao2IjUrflq5lxlc4GqnZL6eXWtmyd0PG1O
- RNw0Tg8yz0u0SI028HcROTsy7jjQ799mRcaJcps0ioaVCyd4eVOc7GlO1gN25iTAwwLiQYA+HGdOsLIn
- 2NkTnKwJdtY4jJzMMW7GGCdjlJM+zEkdYqcNsVMH2SmDcC8vc4y3r6DXNKZTNqIdQId1TZm4EanEkWOp
- o9Lp44rZk6SCGV7+tDh9hBPZhQ9oVvBtAneHLXbE+H5K0hA1EXbTDeJi+hSje2Uie6XihuWSxtEp47js
- SUrZnKDuqVrzM62O17rtL7UaFsTg6OnjuIRBmfjBo4mjRySgf58z+0PO7HdpD7/NnvtH/vwPeQsHcp4d
- znp2sODxkYpJbFEdJT2YGHpBweukjIuqrLsQ48mFJkQkfw7Zk0W4zDx+Qe0foR6y9V28vlfC7lV6xzKx
- 8y2p6zWjdZifEUJw1zlylXrwEunwZfyRGzjpWwTYXKdwjwU9GSG5jnbn47zFJD9lqq+Y7MUn+PCJ/jyS
- j5DoKSJ6KZF8xEhH6VAVSqQ6M0iT7mHETrvvUJMZ4uFy3tRGW8NEaHRGw9xR/fR1XddwJ/+EG9c9T111
- MfMNuXTmrKa83F+OH/lSTupPZNzfr1/SLi3wDQ2wj4m60NQYXFfrXVZ2p6z8Rmq6TXnp5fYm16mBwKaK
- qzkp1lPD0f/7z8jH3578d3fmX+tj4Oi//TTz8d8PP6x0DDT699TcXXwc99//FO78M2huzXRiiz767vjw
- ++9Hfzow/P5o3/bB/t0f+ncODm1KjW3gBl6SGgcIBeWE3Fx2aRWv64HwwZLKzDZ38h1h/ANq4p/YiX9R
- xn5iwkcP9EJz6k1qH4A+qZKWI3K9yjp/gnVeVXxOVcteVdNGDG23YKOnpOEWD2lgZMUX26ponFHXPauh
- e17rxEUdg6snjO6cNHe3sfV3dAy5dDHq+tWYa9cCzjjc0DWwg35dfKVTQrVTADpE6iK1M8rqlzTUXUx0
- A88axrga5ySaVZZbllSapGbphIQIvbyYfsGMuBxeboeocJRXNMkpnObkPeTlTHOzp1hZU6yMCXrGBC1z
- kpE5xcieYEBmL3eSnTPBzhnn5I5zc8Z5OWO8rFFuxiAnbYANSh/kpA6ws0Z5mSMI6Cax4OXtqNBOuahB
- ueRx+ZQxmewpxcKH5KIZZtkjpao5nYJJ1eQ+Vngb3q8J5dOICmmFxi8EYD2mlxjaLhvaLgXF69H9suDr
- yWP4jEly8SN2/YJq84JG02O1jmeaoBb4TJzHvLxpctqoQtLw8eSxw+kPDmY9OpD/5ADE6GmPvs15/I+8
- J9/lLuzPeX4k7/mx0kdyJe245ChUqK2sp/YxNw2puyqyLsoKHkrQJ5HizaK5UPHXhdIe9kdLCkkD87yB
- ZRbSoXyJ0r0CFSCU/nmlsnROgJnsHc6xW0zYVidzhyTnTFGALrsubLQrB+PGxXoICD5KkECk+ojJ3nyC
- Nxfvw4EmdQQvJbKvKjVQlR6sQgtVp4dqM/0MOH7nTiQGXg30vmRpq61mKGCqECkiBZqSLE8HY+CgfNXb
- 9l6w470AB7+Iy2HRN41MOAf3f3Zg/2fm5ryiIv+cXI/snPtFpd7jD3KfPC/tH41vbPEpKLjU0eoz1BMc
- FaB73lrG7SanrvzeTzt9H39d+OXdo39tTfwGM9H/PPrtnxPLCxV9db4tJTemhwL+90v5f35Lfb5xbmpV
- NLGDGn1/aOTdj8O7+4d2f+zb/b5v98eB7cMj2zIj65jBV8SBeXr/HH9wgTu1ynywSZ/aok7tkh78RHrw
- M3nqZ8rUz7TR97ShD7ThXcbomrDroVpOvtL968zz+qzzasoX1XXPq+rZK2nZCSH8ULXiKkOK0IwtQips
- +ciKD9y04gH9kFERW3KF1gIxspgKTaWh9a6Sqp1QbCtQOiWAZAtsyFK24CvDNmoLoaqDitp1bQ1P8xPh
- F0ySfE4W5JiWNxoWtWsUdGjn1mullqiklAuymnn5A+yCMXrxFKPwASsfWH/AyZ2CZXVGNhSSTFJzpiBD
- TcudokPUkDvBzB5n5oyzcsYAdEHOiCB9kJvax07pZaX2cdL7eTAC93BmX1G/YWyPdChsi+6Sh80TyeOK
- qWPyBQ+J5bOMqllR3ZxW7aMTJaPqmf38mHZKcAvOvxEd1IiKaMPG9hKhTYA/7NhoOR7WLh3fj4rrU4jr
- Q2dN0mDNv2lBvffliYGX+mOLRhOLRiOv9dtfqdfO84pnyNmTChmTxzKmDmbPHsiDWOXJ99nz3+fOf5f7
- +B+Qb8l5fiz/qXTJqGJmDirw0lFvzeOeIhlPFcX7yoruKoreahhvZcCRDF2K3IyP58ZQByfEEyucwTVK
- 9xKpe4WC5BCg2ukpvzSDHmghc48n7cyWvwtrRlTUXZr8HYY8YucS1t2h/aKQCJT7CEnePLwvl+DLwXtx
- 8eDofioUoDxQDD11Ke7qJD9b9ZSI2/Fxbnfunz1/08rC0UDHTKRIPXgU85djxL/9gPmT+CTFOejMbV9b
- Z1/b+35nHC/qUBgHBEqy971OxSZdj066Ghl/KSX31sBkev9ESnLOFVcf3WvX+R5uGpHBJ/NTHCN8T+Qm
- n337tOzX/0x//OXpx38/+/VnyC0++vjL7L93BqcH0uqL7jYUXH82nfDr/xp/+1i+/sHv4fLJyVXm5K7C
- 2O7B8d0fx94fGHq3f2Dnh8Ht/cM7R0e3ZUY35ad2sDPvSNM7+Jkd3PQ2bmaX8vAdDdF7xsMP9Ec/06d/
- Zkz+xJr+wJnZVhmY084vUvG4wUZAV1W5oKpzXlkXtkfYCTQsIepgI4lwc4Cbq2wN3swWWyALQCJzKC5n
- CUyhiRcLtoQKzJg8CzhgwZZqZIeoJH0O1edCKN4y5ypZCVTPKave0dXyszSIuXoyI8S8qORkaYdOXj8/
- Z4RfOKRSPKBSPCTMH2bkT1CKpqklMwA6M38aWGflP2DmPaDnTgHfNDgAwZn8SWbOGC17lJ41zMga5mSP
- 8LKG+Km9nJQedjKMvdy0fl5aHz99kJfcy9pXMmgU13s8GNb5e1HRg6iEEcWkIbnscWzJFK1iUlD3SKd2
- Wr9iTDd/SDW+nRHWTApuwgU3osJboKEXDvrA+DVJ+TUcC22TSehDR0Pw0yGXOkSsmlPqeXVi/K3pzJLF
- 3Krl4xWr2RWLkRWDjteq9Quc0jli3kO5rOnD2Y8O5D4+gLj4s/05C//Iffz/aeotoNpOu7fd/nXmnZlO
- FXeXBAhxwb20FChaSmmhSt3djVLaUtzd3d2dACEkgUCE4E4I7uR3Hub9znfOWs/KIim0a9E7O/ez5dqH
- kwZEE7nSySz51HqVsB8KH1ylXxnIvyaqfNCHvSepf9BT+2yi9t5E6bWx0ptTimEvNFtqLJgTlt18dOu8
- etOsRv0MrHJSpRponYPPikV8cpR+iJbcD+cI+afaSo8BFwCtAGjRz7GqQO5A6yCoA5sObqJvcRpA5R+w
- AESq9hLcAfRhnwAxnQR/a6zzzFo39JVXUWFUbPqv97+ePvp44+5Lr5sP3WycSQgDOTnUkSNq/yOl8y9z
- F6077xzvvXO4ct/ilLM2HH2IZCrjedPg4evTLz85+gV7ZZd+TC988+WX+7X7JAtbyRMnJV2dVFwdFF89
- MM6Ov1uS8XykPxva7Nufht4aFG72QztMSMhcnq1vrQ6I+eWZHHpxdCAO2muAoIqN3TjuzC3KqAl1Dk4V
- SFEXj3UtHe9YEm3lH21bOE5ZkupakukUyFCWpXrWJGkrMvQF5V6Bev8ynLmszVxC9C7q9i4h+ldRfWsY
- xhqudxnXyzdu77dKTjV+fRd7zQZ32cT4irGlp6GFh74ZILGAsA3QRaC6CZR9Fqfvjjc8hwPoUAAkMtjX
- Ona/JHQWb+iMNwB0AAeMngMYmcMbAHG7YA1AWdQFBXQPRA8QAMbexiavbE9+93AIve8S/8M1Lcc+s8ki
- gYyK7IQldCHTqLgUKjKxB5bI0Ejp1U6loVOoIHeHSqWDR3Qy0Df1/zspQOgUJBB6Yicqvh0b04KObcHG
- NOEj6tGhtdjwekJEAymyUQ8coHXwdF/owU1SXyplvtaDUQkwRaEU3CgfWq+Y1ITIJRtUMuzKe+yLqXYZ
- HZaR9fhfVYhv5Ro+JQq+ZYrfq1V8qxR9KmQ+lUr4VsoEADJjpcKPKqVYsm4ew7CRZ0OfdGNNuXOnz/Om
- 3Qdn3ajTDk2jVpWDegUc3Uww/L/f0CKRxBZP5IgkgRwL53By/+HkgeNJXIl0tmJarVrgR9k3ZyRf6Mm/
- xqmCnPdnHMyHoPnVSO2juexba+mwu1o1WQa8QUcO/xR1AU8GSyDmQUpYtWJSqXpKo3EAmxGn9d5J7B5K
- 5L6O7ENwB9VSeopUeoZRfopWAecJRvU5Xh0E9TdEOPD9r9Cqb9Cqb9FqL1DKL7CqH4gwH3A3BZdUY50X
- tthE/4eFFQkxuSEfgl88eH/V87bdaSeCnYu+pQNWnSRxRO2/DyockNH5XwM7Ra8HRvfenrp4W8/xIsrG
- DebgqX3jmem3kItZJe+Scp55PzCwcVK0c1U97aBsbi5uaiRibSLifELyspPKm7vGKRH3J7iVkHBUuDUk
- 3GJBe0DrvYKZekpzRHTApfDvZ+ktATur9YB+IYQqpxe/MUad6JNoBl+JsShJXZTsFEi2zR/t4B+jLkt1
- L8l0L0lTlsS6V0Roy1K9C6oDi5qsRThnRZezguxf0u1b1B1YxvStYBmrWMYSto9v1DlwIjXF+M1d3PXT
- +EuAGW18AnBDz+ubuJGA8TBwxJMAtAgMPp/F6rkBWeP0XTD7Egcx2xG8TjAA3+NCNHTe514Y7tNgCIaO
- BPAJoO8Kvg1JdEGBRgBDD6IpWA7zycku5Kpb7ONzqYHnsvLt0xuNYtrhoPIYS4HFUeDxVNj++HwvLBEM
- XnYjk7pBRNdNoSNT6ciUHiQQ/f970Kl0DIjoiV2oxE5sHBkb2YwCdiW8HhNcg/pVgQqpxofX64WBHGst
- Mbxh//FAVod9QJPExzJJn3q5Hy0KYNYzuEElsEw1rgJTTLZuYrg001xqehxyyJYxTYSQBuTPGs2vpXK+
- ZfL71ADw9qgS86k6/rVa8nu18tcSZWBp4snYHKpB/cDJ3gkgcS/e5IWRafexOXfurDt1wr5h2Lh0GJsN
- NuhyFBPY0ols0STOkbTBw+mcY6kDx5PZx5OHRHN4SnkApOEr98b52Btjmff6Kp+IGj54rR9GiG9m6p9O
- SgdeVqmNMx/jOCysnB0W2FDnSO1zyKYpjdop1app5dpJ9WYWOiVR5ZXboVvIQ3fgUvfgAAqg8ASpAjLo
- z3DqgKb7BKv2gqgBhP4Sr/4So/ISpfwKHLTKC7TKa6zGJwLcj6Tlb6T70VT3tS0+5vv9+OyArxEfH364
- deH2aduzWMtTCBMLhJk1AmUkd1D+P/+UPSCP/BfBWsrGQ/X6M9Ljzyfe/XJ59cP59S8X36gLHwIdnn60
- uuiNOuOqbntGze6MuqmplDbsvwnI386Yi9w9r/7YC/7urp7/O2dObx4EjQi3R/Y2OdDOvtBnRsorCr8G
- fHUP++beXPpFMFEG7TIhiLGxXTgleMqZNh2YhfXxVWgLql182Y6FY52CI50LYpRF2Z5lmZ5FSdqiNGNR
- mSmADSzA2QIEbwk9uIRlC9DMBWTfEpq2iKIt6/YtYQf4JhSmdUaK2Zu7+KunCV6mppeMTlzUM/MgmgBZ
- 73eqACuCA84E2JL9+O2K1XdEEcGwsxPgdeH1HUHwJhr+I3QDJ3CIQOWG4MX9p+DH0fpOSD1XlIEnASzA
- sPjoYhty7Wzcs3PZYecLis9kNAFImGZkp2pMlyYQOmjkTqIhk+ioZODCu3USuhH/CF03la6bTkemgy96
- dFOp4KDSqci0LmQiGRnbho5sQUY2IyOaUGH16KBq9K9yTGAFPriKEFyND64hhNYRQmrwB3K6zoB84scK
- Cd9GWf82ENFVgupU/EtUo0uxeU1WVR22jT1ONT1nsvdtOj6yGR3SpO1XCYQu/aUMNDZK/6iX/l4n/rVK
- wqdE+kuxgn8VLLoFk9WpX8WwpnBdB0YvsscucoHip9wHZ9wZE/YtwybVo4QCMNrMAW2J0iBxHs/8O5l9
- OJUtksoSSwX5Fp5oFle2EHTzJqj73BJ/d1LqvaniB0NVHwPYN1P4F0sFv/PyBb8Mx6hX1pYuLW64ja3Y
- 0vmGHbPopilY3ZRazZxq/ZxGMxeVmqz8/Nyf11B/emuI3VCXugWXuYdQfIhUfYxVfYJTBVkXsO7iFVH9
- BfgarfQUpfQMpfQcqfQcowrSjh8Imt/04P6myI/mup/PGmeFv0nOCw1I+PHc54HHjVMXrpmdv2h20gZn
- 44CzOKMjofGbmMZ/GToqOXnr2l1ROu0l6/EAWHarxz4nn361ufPG2OW6+ik3GXt3lbMXtJxcNM1MxEm4
- v62Mxb+8OlmYfKsi/WZp0tWytLttld/441XCnQHhHkAXDYDi/7qgqYccGx95x+etffj38xXZL8aY6Xur
- PcLdfghqXdsOGuO7cOcwrH0Xrt4tUKQsi1NWRDoXJLsXFWnLCrRFGZpAniFQYy5qshe1BpeRw8uYoSUM
- G6icrwOCOl2A6FnUZS7hWHxTCvNkRqrp6zv4qzZELxOLy0bWnkDoJHANNQSR23HfeQPUFngEhgTEacBp
- Ie7zuv4tdODC9wFG+1+DL8AB4RzMy4HXHYCDRxNB0+JZrMFFkvFdS4sPbvbBN88lvruYG3uhoMI+s40U
- 3wGL6lQDET2Bqg16/lIY2NReTBoDxGzUvsQZuml03TSaTgYdkUnTzWSgshiYLAYuh4bNoqKS2pExLcio
- 5n+E3owKqUUGVaKCqvCBFYSgSkJQFeFXBfZXJSqgCgMWAdgGNIp8KBP1qZP60bI/FvQD9G/lKwYXIOPL
- 9NMrjYtbrAvbT6Q0G0Q1Y2LaURFtWj8A5Khyv0kdTEz71YD5I9HP5aKfikQ+FkgGVMESWgnZnYbFneaV
- ndYN3fbkPmcaz405do47da5/0r5t2Lh6BFM4rJ3BVUliSsQzQIYR3EGPJLNEU1mSacC3DEukc6Xy+tTz
- 6nUiApW/XpV/Yyf11krqk6Wij7XCd1e5lI/IvsZzm4uPd3a8BZtuUxsO3GWLXgGhY067cVq9jq8OthC2
- DWMz0tWee+wL/ZqG2BU1iUtqElc1ZLzhcre1wDip/L/vo+AAs/5AV+Gejtx98DbQVX6AVn2AUnkOyEd4
- 1Y966m9MtV+dIUb53kvICg6I//n4450bT1zcLhna2OranMacu2jk6kVUw/6JsxK999nyyhuMwy2Z01fF
- nG4qetzTcr+pc+GWrvsNuPNVVWs3ydNucm5eMHcPmJO93M1LiJyEm8tT2cKVgq25lNXppLW5nJ2V2p2V
- tt3Nvr3dwa016gq/brA/pabCNz76jt8nJ//PTqkRV4B72VpoEW4B+07d2c2cXbrHnTVhLWgzlzV6llWB
- KaesiVOWZLsEit0CeapAtge48wWN/iUN7qr28BpydA0zvILmLugOzGsPLOj0LugwljH9SwQQ0aks65ws
- s7cPwGWUcMnE8pIBELrp+X2hGwGPvp88AYEcWBHQtQJsNyB1oYhAxP9/cf9b8fsHr/9vlZ/BEO2ReHtd
- vBOKCDw92BFw94TVx/NOofc8Er545qR45NfaZoJsCRUW3wNPpIEshTaonWcM4DP7cVn/52Cy+zFZTFQm
- UDkDkduLBpDNwn5C8QAJ1MvzevFpnZj4VuDO0RFNuiH1iIBK7cAKVHAVCOfE0Bq94Griz3KMfwXKvxwF
- aLo2P2sPvy8+6lMr+b1FDkz+fymR+pwr/6sAFVmsF1esn1xulFprHN9IDGvQiWjXjiTDg5tUgpvVwtq1
- AgFqtE7Jt0r2SzkYUBL9WiIT2YTM6jYp6DEv7DAtaDYtabWuptg19Tl2j7gNTLsyZ+xbx4zLeLp5XM0M
- jhJoyk1gioCyfzz7WBJHLJUjlcaVTB+SACeLJZtH08iu0UmORga/VvG5IvHVXTL4imKeL55R6bQ0fWtn
- ++7WztWVzfPzm45jq5bcRRJ1RrtlSrWBDxZ8apPHCNnZmi8v/n0VffCapsRVdZnLGjJXNeSuqslcURX1
- 1pS8qwPErXRHW+mWlqK3pvxVddkr6nKXNBSvaClfhSve1JJ9jlF8jJS9hZa/Yqj5/fW19MKY4IRf9155
- O3iY2DggrE9qOTgSLlw2druEMbYRufOWFFvq+SaS6PFGwuHuUdd7cm631S/e1rl6D3n5AcLthpqNh5TD
- RXmPKxqXLmm8eIiLD3ai1DwfofsujoXuLMRDq1nQRvl+WXSHIdzlCoW83Q3q1Gg+tTOkvORTTOStHz7n
- Pr+2DfSxbyh5uTpdBa337V9bhU3rOyHD8+f6ZzHMJa2eFY3OZemuVYnOZZmuRUWKQL57QZa+qNq3qNm/
- pMZZhvOA1ld1h1aQg0sI9oIWOEy+du8SqncBw5zT6+GZF5aYfHyOvG6PvWxq6WVwwhOgufRMgMpBBzkQ
- +r7hBpkT0KEFhP7viA4yKv/E7/8b1x2wAFW3H+b3YzmWBM4ZMAqNwoOczDmi0SUT80c2p30unAUQ3YRv
- F/OzLpa0nsmnEdMY2qm9iPQ+VFovKnsAn8cl5bHBIeSx8HksXD4bm8/C5PWh8vuQhUxMETh92BImvqSf
- WNhHyuzGJ5FxsS0gmYgKr0eF1aLDqnEhVYSQalJojX5IDSmkhhhaRwyswgKPbhfcIvGpTPRrvZRfsyxo
- zf1UIu1TqPKjEB1apBdXYZJcZZZcZxJejflRphbcqBHVqRVB1oroQMR0o0LJCADu8qtS8SmT+1IsE9YA
- z2EYlbNPVrJOllGtClrNC5otc5vMC8iWdSx7ysQZysypujH9fC4YoVBJ5ijFMqVimWIxAyLR7GPxXLFE
- tngKkDtPNHVIJHNYOpenXNivU9pOKiolpkRrJX3XrIzW5zW5bYzfEm7c2t29urPjtb59XrDhML1uNbps
- 0DuDaBlXrZ9WAdM3HaOEnGz4q4tHrmMOe8NlvGGKN3RUbumo3oQpXVGXuqwqcV1DzltT4aq6vKey3Dl5
- GScpCTuxY/bSom4aCu4wuUta0k+JqvfQMhd0JG7ZEONDPuRXpHwN/uh+zemsl/l5LyMnF7zbOYPLN8y9
- buIu3FKJzHFo4N5Ob7d5Favi8fLwuQeSZ28pX7qvc+sZ0uu+xtkbig6XZR0uyly9DXv0QOfTC0xeghOb
- /Hii7+0s9+u2IH5nOVu4WSfcogn3RiDhFASNC3d7B/oSigtfpKc9jgy78+PrxddPT318YZafcm1uMOef
- 7oABaJe+JyycX3/DmT3ZNw+yhHDqqjxlXaprRZaypEhdluteku1ZVO5dVO8VAJuuxlqC8dZ0h9dQvGUk
- d1GXvaADhA7cC30B0Qt+fNywqtng2xetm67aly2MvMBl1MgcXEZBqsSNaALS5yCJvm9aQOIF2PT9rOL+
- TRRo2uEfTe8HbzBGBGSNIQFK0b8V74DZH7lwwhDd8AYX9E2vm1s/t3fwv+QR+fhC0g+P4sKLlZ0O5Uyj
- vH5kFlM3dwCTz8YXcojFXL1iLqmYSwCnhIsr4WJLONgyDq6cjavk4KvYhMp+XFkfpqyfWMQk5dKJqZ34
- +FZMbBMqphEd00iIqidF1OiFVpFCqojhtaSIuv3ES0gNDkT0M2HtciAqg5RLYIeKX4PC53L5ryUaX/N0
- f+YRoitMEmssYqqN/UuQvsVqYS06caD3oAtUYtExVCB07e91ar5lKj8q1EMaEIndpPw+k5rBU02jZxo5
- Z6rotgXtVmkNxmktxrndpqX9JmWDBvk8dBpHI3ZAIXpALqxXMowhGsEUixwQieWIx3PEkgfFknkiqcOi
- WWOymSOKWRz1kgFsLdOwvsuI3GI5TD+7Mn5ld+mqcMNzZ/Pczvb51Q3n2ZWTY4vGPAGRMaNDnlRvmlZr
- mdcmDxNzcrTeeB0FXek3dGRu6ijcRinfQqrcRChd1Za+DJO8oil9Ha5wWUPeQ0n2jKSo+d9/6f/xv6ai
- fzjBpVwRkucRxx8aKdwhSV01VAx5d7UwNzQuK+D2y2tOnjZnL1u4eJCcXHAuZ/W871rffGLw8huuuMOj
- e/ZK+4xzVpf+uxgFrxciDtdEvR6o33uL9Lyv5Hxd0vW67AVvpYePETHhduTae9yup1N9T5eGP2/Ohws3
- c4XbtXs7VGhvFBIKoL1FCJpbXe0qLnz11cfW39/j+/dLr185Pbpn/vqZcXrMxaGeqM25RtCqDu2yIGHb
- ljB+ZvlO37QZdUGHvqrasyZHXZHvXlagrsh2L0t3L8nTllToC6o9c8r0eXX2CmJwFc1dwQyuYNhLKOYC
- gr6IoC8h6AJd0CHTyCCFR2o9vq51zYZ0CWxdBHUfQ9PzIMNoYO5KNAF9tgA4ChyI2z9yB6IHYR6kXPb1
- jSHaofC2KLw9inBmnz5H+PeL+7pHE10whHM4PVAl9TY78drBIfCye+Qjl/ifDkVlZ2vpjvVci0ousewf
- NQOyQ8UgqWbEsHoIzIIQKwfxVYM4cGp4+LphPdDZ0Thq2DJq3DRkUM3CVbDwIK4XguG1Hr00UBNtQcc0
- oGIacLENetF1+hGVxNAKXFSdXkyDflyzPkgYHshsdw5rVflWpfQdGJIuTVA2+lKm+LlY810m7FMG4kcO
- 9nsm2jcL+aMEHVCNDGtGRu830KCiuhERXZohZMCVVvIpVfpephHWiEmmGObRTGs5dh0T5zpGz1XR7Uqp
- 9mW9ToV99vn9p3L7jbPZhFSOLqBZRPTLhzNlg+mSgT2iIQyxiD4wYyEVx5FKGBRP4omnDEqmcGVTuEpp
- bFjBAKaGa9gxYt03ZDc84jg/47q24ra15bq15bS16SpYsR3hG7PmCH1z6O4ZbfKUJsi9tM4iWodxWXmw
- t1ePXSceuqItclVbzBstdQMjcwMj7U2QuEGQvIGRuo1TuI1R9kYqnlWVsBT90+DIfxlL/5cj+qiHoYiX
- 4aEnpyQfWIvfd1bPSnxeUBIQnPjp1stL52862LnrO5zDO7riz3mY3H/mcuOJ4csfuHKqW++Cew/fijxl
- UUoz8UvWvvFO5uZ7tfs+upefKbndlDh/Q+bxS2R2ltdgny8Q9+qoz+rY5/Wpn7vLqdB2LbRH2xMOC6EF
- IbQBCdcgiL+y3JmVde/RY9zjJ6b3H1jduml2/57Jp/fWhZl3xwZidgRV0Cb1H6H3QlDVxk4Qb/Z8zwyu
- dwnOWFWhrah0LykBp74vdBDXBSo9C2o9fDXagiZzBTmwimWtYdlruIEVbO8imiZAdi/odM3DO+cQLRxc
- RgHu0yv0LWfCFUuTi8Ym5w3AqITJOcD5J5ruC/0f0wLCORD6fqkIpw8iN9A0eARCP62LBYBFB7QeEPd+
- gEfhz6DAKDT+H6GT3Il6NyzNP7ieCbruGP7sVEKIVXGdfT3Lvp5nVs0hVA8CKZMaRvSbx4xaxo2aRvXr
- eYR6Hq5hCA9O8wixddSgZcSwZcyobcy4dRQkrwm1HFw1m1QxYFjWb5JPN0wl45JaMMnNxKQm/fhavehq
- UlQVIbqGEFNHSGgmxDXiDmSR3cPAjsVK0Iur9L1Z2Qe0K1apfS6GvcnQeJ2i+Toe9ipG/V0y/Fsxxr8S
- HVSnGwWyOR2I8C5YRDeYklb4Xi/1pUzWp1g5sAaR1GGQSzGvYzlQJi+2cFyr6I7NQ1dap25Uj3kVDzvn
- 8ixT2fgElnZUv3IIQzqEJh1Clw7qFg/tkYjqlY0ZUIjnKSQMySbywPicAhiCTuPopPWj8miEqn6zlkGr
- Do4ZbdBsePrkwoqdYO3k8sbJlXW7aYFV/zShe0qXPA1vndJomdJsmFBvnkM0DqMzi+Ef7opcMzp4Sffw
- Zd0j1/DHrxFEvEkid8xEH1lJPTCVfGwm98xM5ZGxymW0lJPKYWuF/z2l/R8eZodvOog9dhP9fFnmzQWJ
- Tw908wsfZ1V8Dkl5f/u116UHLm7XLM644Z3OkryuWN996nzpnoHHfbnQHDxr2a1v0Ygxb8CYt61k2ITm
- El6GaD0JRN/z1b71Wu3VF1xJ+Z3VpQxoK2tXELY75789/WtrLhraLId2qXvCkV2Ivwet70Fb4BGC5tfX
- qVnZd69eV3M9p3z2HOLmbdO3b0798DuTm/WA1x++Op+9u94A7fYLhWwI6oCEuQurz/tnTelzIDZr0pZg
- Pcsa1GWFfwudIlCmLqjTBHD6MoKxgmauE/rXicw1fO8aFvR4dc9jO8Fa6hmNzjntzgliVbt5eJDpk0tG
- 3qfNL5mbexiZnDMwddMzc8ED97If0cE11BVDArdSQMcFqRjgT/6/iI7E/Z+IjtqP6KBc6rgf0XFA6O44
- vfP6pJunTD+62wTdson+YJmebFnafqqWa13DM6rnEZuHiO3jBuRx47YRw7ZRg7YRUtsQoX0E3zqKbxnG
- twwR2kb0W4fBHxm1jBi0jOq3juo1DOLruXq1bKPKAeNihlEGGZvSgk5tJiTXE+NriLHgVBNiawhxtbiE
- RmxcPRZEdLegRmWfcmXQi/seVH+qFb7Vwb+Uwj/mab3PgL9N0vTNRIVVmgZXGfiVIH5VaUW2ISP2e9AB
- 71wpolv6e73op1KpN3myviXqkQ24jHazOo5r5+TlSoZjLet8x/TdxokbZcMXi4ZcsrgW8X2YqF4Y2GoU
- SJUK7JYK7pYJ6pQK7JQK61GIYirHcVTiuIpJQ8opPFXAlY6nA14AOouiV8owL+sxqWYYtrGNacPGnCmj
- Eb7+1JLR1KI5e4bUNqJVPaRaOapSPaFeP61dN6NVO6NdMaiTXq7x6YWo98k/rxgd9rYUvW593NP0jxun
- /n5+QfTdFamX58VenpUAHIE7ViKepL/OYv5wxv2Ph/V/P7oi8u6+5K83CnG+GmEflJLCjCqrH8RmPQhJ
- efvmx/1L913Oe5+4cN383EVTzyvWN+7bnr2MNHc++PqXxsia5+SW9fiG4ciKFXPWsa7PLqJI72Mc5sUv
- 3UcfteNSzwoEadBWIZ8X1FPr3dd8a4H3U7heKNxqFgo5QmhmD1regzaFwi2hEAh9mr9Ym5l/7fINGTvn
- Yx6XYU9fWn74aPv1q31C3LX66rc9ZL+JobSt9U4IGhAKu/drpXu/hhddaFO4nnkt+rJW7zqCvgbrWVGi
- ArMuUO7ha/YsaNMWEbRFJH0JQ1vCdi+iu5dQFD66axZNnkc0zmk2zWu2TGOraObRsZbPb5hdtzW9bGlx
- wRSsFzU7a2DuQjB1JZiAdYr7SxXx+mdB9hBYlP37qD4ohe6j09EgqAOvQnJAkc4gcWdQ+9P+oPgPRkWB
- p/cg6IOt6ndszT9csA57dioz4nRFjW01w6qKY1g5TGoa1ydPGJDH9NuGSe3DJPIIsWP0nzNGII8DuRPa
- ePhWHrF1iEQeNmgeJDUPkVqGiQ0cXDPPoJFrVNVvXNZnlNOJT2lGpzThk+sIibWk5Hq9lAa9pHpiYi0u
- qQGTUI8+kN5xJrAJJMXlP1cpvS+V+QAQLgAjWof4Xo74VqgVWILJJJ+q414q7XeNbzEIrFIPbgEYaLVY
- ukICTTKy87hv1ZH3xZIv8+ReZyt8K4IltpoW9DqWc9yLel0rBz3rJq6V8jwK2GfzOU7pLNNYOiaCBg+i
- Kv6kyP7skv7VIePfJve9STawUzGCoR7dr7Evd7YKIC3GMjViehExoD+zg5DQTkpuIeV1GVb3mjX167ey
- 0V3D2rQxbeqoTusIrISrmN4vkcGRLhhTKxrXKJ6AFY5qFgzAkytUPn86dsv99xvux+7fkLl187iX5389
- uPvHJ5/jfj/EfX1EfN6LvH8qcvvibxcd/uOiw39e9/jtyZODfj/FY2MVC3IQDRXE+jIiucmpo+VRaITn
- z6iHH389uvHY49Yj10s3T7pfNPO4ZHnjnvXFa2ijE78FROqt7Dxc2TmzuGWwsGU0tWrLnnVrYTnlNlvH
- 5p3yC7ZoankLQbULY7G9TW87y2+0Fl9itL7d3QBZ826hcHgP4guhFQjEcuE2tLsICfv5S1m17d5v/NQ8
- bx+9clf2wXPU01dmHz+fiYq6lJF6vyT3RQ85cHY8b2u1RbhDhqCaHSh2avVm77QpnY/oWdLoWdGirSBB
- CKcvqtAESowFOEOgwxAgaAu61HlE1zzYua7TNodom9ECH4PNsxrVcyrls6DWhsqj6PkG4a6cR7qZYd0N
- 9d0MjV0NwD4ji7Ogs5wA2gFM3PX392G46QGDDkRMcgGlIlAbAnLHGpxB69uj9PfdCwprj0bbYwF6ztiJ
- YH4Wb3pJz+SOmdXTMzafrtlE+dqVlzi39Tk2AdPCAygOXMOEQduEUdsoEDqRPIwnD2M7RnDto7jWMSx5
- FN8BXuHhWjiYdh6+a0SvlUvYP4PEFi54Vxg3cw3rBwwrew2yydjUJmxaMzGxHptQi0+t00ttIKXU45Nr
- sakNqOQ63QMZnacDmsQ+lUp/rlT4UCb7qkD8Y5l8cAsmqA4TVIlJI5u3DF/om7vdM+tdzXOMbNL+WScb
- RlGIp8sndItHtBz9VnbkfZHkmwLFF5myb7MVgqqw4bX6kQ0miWTbApZHyeDFApZbAcctj+2Q0msY24OO
- 6UOE09V+dEj7tkn4tUl9bwZwL4XgLrUIOtiNBgunK4OFR0k87bRhbOqgXkKffkQ7MagGHVymCz6Dctr1
- yumE2gHd2gHlaqZ0zYBMOUc2my2R0HcMpCnTuLJpHDnwmMqWS6Mrx1XIfwk48ujJn89eib3xk3v1U/y5
- 718+YUdDs6USypRSy1SSCpWj0xR9A0Wefzr40uewb6h0eLpyWplmfSexl2PNG7IbH3GanrjJY72Njrnw
- 5tuFl1+u3X527tp9e09vkHgxvuxtfcnb5Pod0mmXYzEplpt7z9d2nJY2DJd3TGc3To8uuXEFl1j828zx
- tyGRdj9+nOyj+i+MpSzw4oX8lFnur+byJysLpTvb3cC37EFLwLQIoc19g743KtxrnFsMHhi9V9J80i9C
- 8+5LsWv3pW491H71zvy7v2NkuFdO+sPmuk8sWujwQOrKQhUkrBdCqQsbL1lztvR5VPeCWhdfjbKg07N/
- 0dTsWdz3LYwFLTpfi8rX6ZrT6prTbp2GN03CmibVmiaU6qeUy8flSydUysF2gFrUg5cqNpayVih1W6Qu
- APvb4vUcwE2UAFptzcFilvNGpu6GYN+isTuA7hqTzhnhXA0wznpYJ+J+f4stWv80GhDncLZYzGk8wY5o
- 7Gxodd4QjHFY3La0fOxo9cHbMi7YtrndnTbq0j5hUTtKrB4l1o8bto0bkceN2kdAzAbK/rfQ8a1jOBDO
- wSttPFwzFwvieseIQdsgsZ23H9rJI8YdY6atw8YNbP2KXhAHsZltQOj4hDpsYi3QNzGlnphaT0iuxaU1
- oveFDjjZoW2iPuWSH8uk3pVJv8wXe50vEdCICK7HRtTiM9qN2gZdeYu32Ys36wbto5u1/SokA5rEI9pE
- o1uOpXbLJ3Vpfq9UfJMj8yZP/mWWzIs0mVdpiq/TNb+V6EW2nE6hOmf1uWYxHVJolmDWFQxqxDFRkQy4
- P1nep0nCt1n2B9hBAJrJyGpBVM2IXq2IXgBhVM+YABhvg8xRkzSORWKPZXi9vn+x7s98eEQFLK1dq4Cu
- VsSUKWeLlw2K5oAWduaR+L5jcX3HQYtYElMsBeieKRbXLRVRK+WfIe4TJ/49Xd6/SMm/RDqgSCSqWiyB
- LJ5Bky3qVynqU82lqCTUy4VWSAdVycQ2q2Z2wEoYOh2j+pzZE2Pzp6dnHfhz11cE38srn7z8cvbRuwt3
- Xpy9dMfK85bp+StGnlctPK+ZXLyGuXJbPafYeXX76dKG48qO5eKOxeSq1dDiGa7g3Mz209F5n0fPEEaG
- v3ueU4oPvdRZ78vu/jEzGDk9lLI4V7q327OzMwrsyp5QuAdt7EGzwIrs7CRP85+N8C+xpt0aek7G5aJ9
- gtXf+iLe+Rp89LX8FeSalHStpPBhU82b5qov49x0aLcOEmZv7PmNCNx7ptDdc6oUvkr3Apy2pNO9oN4x
- p0yZ06DyYdR5GE2gQ11AUOZ12mdg4NbeNKPWPKvcOKVUPixfzlMvYiCD0uCXvGXNDWUNtVRM1TWMNWAG
- GjpmOngblJE9WKGIM3EkGrvombobmV06YXzL2ej+ef277sTLZ/AuplhbAsEaTTyBJpzCEU7h8dY4gjVY
- 9qJv7mpg7m5gAtZGAwzBy2t6SdGn2qlnaRNn2ifN6sf068YMGieM2oHKR4F2/6/QsW0j+OZhXMswrnkI
- 0zSIbuSgmwexwMC08Ihtw3odo4aUKQvKlCV5zKRxkFQ9QKgA85ZUfFozNrmJkFRPSKjBJtUBiRNTGvCp
- TZjEOsSBUuaZRLrMj1rp90Vi74uk3hRIvM4T96/X+lWtG1qtm95KbOg7wZ69wOF71bCsQkBDS6mYf+2x
- sIajuQw12uIp5qpbQZ+JT77Cx0LFt/nyT9PEn6XJPM9Q/ViE/w6cfcOJ2E6bpG7rGLJBeKtuZIduAhMb
- 34+OoGvtQ3ebQb8k/Fu92rcWlZ8Ae0SDRTA0ADE9ZxKfO2WQMWyYxjFLZ9rEdloEVGP9imG/ylWjW1RS
- aXI5A2JFQyL5g4fSmH/E0f6I7v47rvtoCk0svU88pV8kue94AkMqmiwV06YY0aYc1qkUDnad0qQiKSJx
- PccT+45msI+XTshWTiqUDMvnchRT+xXi+mTi++TSmapFPKAAdO+80YjAem7ZaW39FiQMY/T6v/p8/t7L
- 83dfnL9408rD28Tjqtk5T+DUjV3OI67eUiupOr+y/Wxx03Vx5+TMuvnYiiVvyYYjcJjdfjgj+HHthipC
- +4CZ4dHXj09FBl5Lir5KafZbmSlfX6wX7tJ2tof3dtcg4S4ELQoh9q6wdGX949TCxbElO57gFHf+TCfP
- przTqrDBIaPsfGi8y49gR/+AM6HBdjHhTrkptwYZsdA26PQq2hUGz65eZ04Te2aVuvmgLKpCW4RRF9Qo
- 86o9ApAv1+nhawHr0s3X7piBk2fgLTMwQIMhCzRaZjUqB5WLaOpptTqfAtQveCqfMIUZ6MAN1DRwSmpI
- RTWsqraeBtpQA2cCJ5rrGliijECY9zil9/SGyc9P1qE/7d4/NXOx0TJGq+tr6Rhqoc0QODNdnIE2xhCB
- M0frnUIDP6PnSiRdssa9uaOXlnKyjX6mZ/xkx4Rxy7g+yLG0jhu3jukD2902TCCPEsEdFJyWYWz9IKZ+
- EF3HRdZydOs4qIZBTOMgtnmI0DpMAlrvnDTtmDAHd9P6QXw1B2QbcflUdHobOKQUoPU6TGoDPr2ZmNyI
- TWpCxtVpH6gccErrU/CvlflYLPWuQPpltsTLHPHARu3vFbAfxWpJDcjCdnw1xaBlwKqSaRpUIf8p73BA
- 7fEsuhpVcIIPXV+FHvcveEZUaH7Ok/lULPsmX+J5lviTTPkPJdivFfrfKg3DWs2TqCeSuk0TqHoJNGIC
- A580QIyk6X5vVP7eoPazSftLrcqXevkfAKZOUY+ggU0v8IJJbOGUXgaPmMrSTx+wTKSbhbbgghoQwc2a
- UV2KCQyJlIFDmUN/Zg/+kdb/RyL1r3jykYJe5eYJbPOkbhlPoYArk8mWS2bKJferxLFUIthyoSzxMNbx
- cOaxWObRVNbRwhGxxgVF8opG6yK8ZgZWOKaRATbNshRSOeq5w/DKCWTXvNHYmsPq3uXdvWcQFMfsD3n4
- yvnW4/PX77udu2rldevkhWunznpYXbhk7XmFdMb1SEK6xbLwpWD3/OyOzX6ZVmDZy7dgzFmPrt6YFPh5
- XlfD4f/l7oa8dsn03ctzfr4XUuLuzQ+V7K627m50QbvDwp2Ff6w5Twg1bexG81duTCzaji6ZDgqMeEuW
- nKXTfbPOwAWx5z/Udj/9GWn38Dn6yXPdN69xUSFnGR1B0HotJCzdE0YINu5y541p04qMBdneRSX6ggp7
- HcHdwHDXSdw10sASjikAExgIIPT2ac22GVj7PLydDwwMvIShnFGvEpuj8/Yz/JInws4KY4xE6Gtp6+lo
- Y+CaMCVFLSVlhJImUlkHrYZFq6NJWlp2llrPHhFj42yyc51/+hu7OMoZEqSI2ip4VU19DYQ+DEmCofS0
- MUYIrAWAo6OIrkSDKzakD4+MMjNOtjNsKWPmHRP6beN67WOGLSP6DcOEpiFi8wihZQTfNkZoHsHVDaKr
- OchKFqJsQLuCjajiIGu4qFoepmEEJBz3047t4H0yZlQ/TKgbwtUMYkr7ASwfk0PFpbVj0lpxqa24tBZc
- Wis+qQmV2KQT2wA/UEJzTOiS/VEp97lYEXiPu3FHHiYdBdt0/WvgH7OkwipUM5p181sxJV16hT2gzqTy
- Me9v/6ojBQOI7oXTMztXN6EnvJkLeU3o6BqNn2Uyb3IPPc86/Cxb8lOlzucqjG8VIaLNNJlqmUazyGSa
- Z7IsEuj6sTR8NBWwCuB+9Zq+NbD3pUrvAYOgVh5sEAjvVEzuVy+eQJdMEnJ4YM8OIYNjnNxvGNODi+xG
- RgLyEVM5gSWWNHgwY+SPLO7vKbR/FbJk28aJQysO87vnJ7fP9C3oN43DS4dVC0bUc0ZhqSPqMYOyof1H
- g/sORfQfix84nsMWqZ2S716BMzdQA+vEniX95jm96mlS9iAyqV87m6dbMoprm7YcWXNb3vXeFb6CoEQK
- xe/uU/s7Ty/cfHTxgret5007Zw8LeyfjU7YYI1MxktGBmBT9DejZ/J7r6JZVv8CEOmvUMWPUNWPOXLgw
- tvI1q/S2lzfaxELK0lLN1ZXo7W356b0roz12dri4ozGUP9kI7Q5BewMQ1Ly1l8xffz27dn5i7QRvSY+7
- qMdZMhpYMusTnGAK3NnLj2sZd3zDza/cU716R+neA5jvF8vCzAcTnIS97UIIStjYezOycGpgVou7rM5b
- hY9uoCZ3iBObhlNbVjO7Jye3LEfWjVmLhJ5ZXfIUDAT1znntdkCuG4MXd6sll6sGx8CevYRfuYB0sESf
- IKIsiSgbC5yFiTYSIaEDE0PC5BDqqnAVuKaSBlpb4dQJ+RdvdPPK7erIrlGJerfuyJ89q3jSVFUfrkxS
- VyJoqOprwwzROsYYHXO0zikM+qwB6ao94cNTvYwsi9beE+3Dhq0jhMYhTCMPU81Bl3NQVVxMFRdVztau
- 4OiUs3TKBhBFTK2CXlh+r1bxAKKcjawE0ueiKtg6Zf1a5WyduiFM/Qi+ZhhTwwM/i6rg7BebipnEjA5k
- OhmZ0YFJa0cntejGN2jFNmpG16sdyG2zj2iQ8i2U8ylU/1qCeJ2l/CDx2LcKlbAW5Ndi+Z/F8omN2sDm
- F/YY5dP1Yls0flaJ/6oTSelWL2EQKBybmdnLXK4TjXWSOnoqs0PLp/jQp5Ij+6vtGmA+NVq+VboRbQap
- PRZZvdYZvZaZA1apfWaRHdjoLlxIG+prtcaHMtV3xcqfy5W/1agGNqpFtCnFUwAvV7N4BFU8Qiwc1c/i
- EVPYuCQWLpGNje3XjmMpx7JE4zh/JnJ/S+3/PYt5tHkSO7Fzfgt6sAs92ISuzW+7MPkGILTXTCLLJpEF
- E1qpPPmYvmORjEOx/ccS+48VcEVb55QH1nXHt0nTu5bj27asVXvqol3VmHlKLzaThS8e1GsZPzm0cn5+
- /cq28DUExbe0vPG+b3r1rv2lW45eN+0ueNucdjU4aY/FEkVUYQfMTv5HaaONALo2sm05sErqmMM2TuEb
- pvUap4xoAmfO6iva6M9vYa5wzH/iDcT0DOUMTeRcXBGBvp6FWe9uXyXmZb6BIKpQWL22FTu38mZ8+crU
- luPkjhVv1YC9qN+/ZNC/ot8jIJGnTTqnXXNand4HE7zuK1+8KX/lhtLzF6Rgf6eqoierixkQlL0L+U8v
- XhieNxpfIsyukxZ3zPgbFkvbp9cg11Whq2DXfmbr5Oiq2YCAQJ3T7ZrV6ZyDt02pNw6pl/ZoJJWpfwtW
- ffRY9fJ5uIO55ik9DScL7WsX9S556jo5y7m7q3t6YJ3tiUQsXENFCoMSdXGR+xVGIDPODoy5Vzebh0Yg
- XrxU83CVNydK6CNEidri+hhZUyMVc1NVCwPlEyQ1VwuEtxvy/WvdxGxcNV0flHuquEig17IBeEm/dtEA
- ohAoe0CrsB+Wx9TM6dXI64Pn9MKy6LBsOrygX7eEg67gYSuHMCUD8CKmeiFTrYwNqxlC1A6jKrn7b4Oq
- IWLNiH45h5jbg8ihIvLpILqjk9uBytVjGlWiGpUOgC0fgWWSX/MUf5ajk8GARb8TGCP6XCQf1AD/WaX6
- uUAysFItrgmVTTXKZxql94BxD614mmpcp0p6q05dp/EY79zskNv8zDnBzmXqrHVyt0pgk1hQq7w/oB01
- gdW7OkEgi9lhlNN7MrnbLJFqmkI3C2zQDWgAg9VY/waEbzX8SyXMt1Lbv0YnuA4e3aIW1SwVT5bO7lMv
- 4mLyuLgUlk7igE4SC5XIQceztaMGFCKZxyOZ/4pi/k/OiGjzEoq9ZS+AbkMQUOQ7CHq0Dl2e2LDrAbzZ
- GUCiIlVPY8qntHIHZRLA/DXjYGLfwfzBw218Bdaa1tQ2aQk6LYDOjm64sdfc22ccc0GNjW1cNmjSOmrD
- E7jPrnourt+HoIiC4iv65oc9rhvdeOR49cEZrzsn3a6YuFzE65kewxn9x8efcPqYJ2vJmraMoKwAtKd2
- 5f57DFM+gWudP8lYvl/LfPI57KSe9UGimQhM9y9Ftf82MpO8epng6YFyc9FsafaHoMaljWjO1P2BaQ+u
- wGFo3WpwzZC9QurlE3vm8MxVPHlOq35Mq3HcLKXB7FUQ0uuR6sXbKp7Xle89xHz+ZBkd4TLMC4egMvCe
- XN16PrfsOr98cnn95NqG7ca6496uuxDy2hZ6rO+dXdw6Ay7KvBXwKUGi8tGgY6JlVKGGJV9IUU4sU/se
- rv7iJczLTcXWSNLWQPq6K/zbB6vgIKuIKPP0DJfM9Mv+39zPOevhUJLGBqIPHyGKK+0GJy9M8F36uTbV
- tUaRYfC7NySszQ9aGB4yMzpmYipqbSdrf1bZzlHJ5oSc82nF614q77+ox+TB8ik6hf3wvAF4Th8sp08j
- p1czu1czk6EB/tOzgcpZ8EymRipDLZWmlk6DZfXqFrIwxSDq87DVo7hyHqKUAysaUCseUC3jqFcOalUO
- IisGMTXDejXDpFIWuqBPu5CJKB7AFPZhMijaMc0qkQ3yUY1yB9LrnL9kinzKUPpehAmqMQZJksgmfb9S
- Vd8K+c+lsu/zJH9WakY14+Ja8VkMowKWccGgYQoTFdUKS6lDVzeZj3M9l8eurMxeXN+5NrbuWjkE6ALy
- YWRZv0bJL7UgqQL/Wasb2oBLp1lHtxqFNhCi20jhoNeMjI2m4EPb0CC986Nex7cM7lcKi2hApnZiE1s0
- I2tkEtuUMnpgyVS1BIZaMgueykEARHpsv1p0r3QU/WgE/fdoxm8lE7LUTaPBHdfxtev8pXtrq0+3t+5v
- 711d2HblCix6Z0275y3IcyZdi8YdAlLdlFbFmHIhT6Z0UIw8p8hcVR/a0p2DzGeF9sObzqw11/YZu1Ku
- RfmQdc3IqdZR297pM0MLjuwx56HRu9V1164/1Pa6Rbj52Mbr7gm3G0bnb5rYnYMRTP/75mNZ5vCN0VVP
- 2hy+U6AKWFkAk1I+iSgaRxaPoeumzdpnL+R1nXsdgne/rXj5LsraXlEX9S93D/ibdza/fl1sbw8Da0TX
- NjJ50y8ZE+69fLu+RYv+ddP+NQPmMomxQKDMosiz8NoxxbpxzYZxk+RGsxfB2peeKl97CLtyS+PuA+Sb
- 10a/fpyidH4T7lVDUO7O9s+VpXsrS17raxe31j13Ny7tbl/eE16FoCt70MX1XefpFcvhZSPWMpE8CW/g
- yTVwJauZEkUdMmmVKtEZut9/YS55SNqa/O11RubLE0xuolNTnVc3xbuf8ay77WVOyvXn94ztrSQ8XMUj
- Igx7es9Nz5+bX7AfGT5B6TTKToe9fnX8nNvvzk4H7Z2OnnQ85OApcumB8pV7aq7npV1cJG7ekfsaqhZT
- oZrSpZzGUE4Dau7VSOtVT2eop9PBo2b6/lONtP79k0hTTaJpZPQhQLNXAQdXyMGUAqGP46vGUKWDmoVs
- lUKWStGAeglbq5KHqx7Sr+DqlbBwRUxkGQdVxgWBHwWe5vdhEtrVI5rkIppkDuS3ef7Ik/2YpvwpS+tV
- knpojVFkg+HPMtjnMplX+aDFXO57OSy8ARtWh4prI+SzrPM41gk0/dBq1K8kzaRkHKXJhd5iPz7otr19
- a37Do3XCNIepE0OR+1Z/7G3psW/1YNk0yrcUHliN8StFfi/VDalDRbYCeDQ+loIKbdUKaoEHNmt/K1X/
- Xgz6t2zIUxeq++2z2/UyO1DJHWox7TKJdOX0/Y0XsES2ahygS/eIx1KPhHb8bxTl9+Ih+Y5FfQr/VBPb
- prTBoKaOxOacWl4/t7LpNDpnzpm14C7aDq47je6cm4Y8xoUu7A1rKl+PPArvmlalr6j0bqqyd1GsTQPm
- mlUX36p21KhiyLScd6Jy8FTLhC119lT3uGkH06yl9dTg4LOxudBn74yMToidOqtu6qSIPyGprfff9u5/
- 1DQ78te9p9Yd2CsE2rJGmwDwgMB1FlE2gSofx9ZOmTVN2Rb32n5N1L3wQNzrtrL3be1LXqpv35mEx3iQ
- OwL3dluhvfrllYSRuefMORfKvCFliUhdM6KvGtAExO55ZPssrHZCuZSnWDUGrxs1S2ywfBagceGBxOV7
- StfuaNx/iHz1Uu/Te+Pc7Nvz89kQBBoKEnZXv2+vvN3bfgPtvtrbfgL6mXf2vIV713Z3PFY27KaWjHlL
- hD4+aAdSbOBKtwxJtQ7K1PbIVrRrljcZRCdhrl3728P5rw9PtdKjrbrqL42wHk8Mvh5jfRns+dpc/jD2
- 18kPj9UCvqnX1pgPDTssLNgtzVlP8czpXaSiIrUfv449ePyX9+1DF24edbz6l/uDw/e/yD/xUb3yQPL8
- 5aMPnssEJGskNGkk9Mgn9MmD1eHxdKX4HoVEcKjKiT1q/xyV+G75eKpCbJdSUg8sg4nK6kfngk5dNqZ4
- CFc1pVc5iSnkaeSylXIHVIG9ye/TLWERytiABkfIpaFBH2/FIBFIv4SFLOXgCweIaVREHFk5vEX2QBHZ
- C9w4P2cqvk1VepGk5FcMxjGw38EQdIXyhyKZwDrEz3JYUJVWYIVGQLlaOtU4hWoc2UoMLMN+DFd9/k7s
- 0wfxkADZ4hIMk2vHnnZoHDYp6AdkArCDV+xjudinMgDS0P5RpuNfjvQp1PpWph1Qgwit106n66fRAUUS
- GBjAh0H+LNYIKtGmzlwXCH34m58nV1/SZi4W0oiJZKVEhkIa2MbIUo7pl4+mS0dRxKKpIgFt/wrtPJg+
- IFs+hqoeMc7pIAQmiYfGHW7vwcwt28ysWnH5BtxFq/Et56ldj9kdrxUI/M0XR9ftWAIT+iyia1YJzA6T
- BdLkecWOaa3OKVLLmGHNoEH1kFk527So17CGY9I2YkodNWdwbZhMV/7cy10opqTy2inHg1izA9iTB7RN
- D1x5olza5Dy9fGtuzX164/TwGom9odu3ju5axjTOI6umdSqndGumAW3Gon7cNqP1xItfmudvSly8Ku/p
- Je91RenyDdWIqAtzs0XAtwiFORtC/4nN67R5064FfOciiTyPbZ3VaZ7RqJtWLpuQLRlTqJqC1YKI3mT6
- +Kfi2VtHLt6WvX5H4+59nQcPdJ49QX7xMe2ift93L3vJwp0w4Q6wQz8h6Ack/ArtvRPuPRDu3Njevriw
- ajMkIPULkLQ5DfKYQueYHH1GuXdalcpT6+FiKQNmOSWYtx+Of/4on51s1VJ9Yaj/4fz4G/7Ep7kRv9nB
- n0PU95Rq76YSR3LjaTbLbnzSep5vtsQ3mxo2onfjKqo0ouIlP347/uS9iPfLY+cf/Xn5zaEXIQrvQlUf
- fpa+9uDvpx9FQ7NVUsiqSQzpWIZENEM6hi4bA/ibPdLxNPl4muL+6ZGL7ZaK7hSP7ZZPpmum0hFpfahs
- Fi6XjSsawldPGVZO4AuGtHLZatlMtX0Hz9DJZ+LzGficHiwQenE/vopHAm6+hIMqZeML+vHpNFR8h2pY
- i9yBiu6rsfUaPjmyr9Ok3mWr/KzC/KrDfavS8avQ+FamHtEMyAFIvxKFj1kiX/MlIxu1w+oQvyrQfrmo
- 91Ga996L3Xj8+6svhyLTVau6jOr6zHIpmCwaKp2hG94GdgfIvi+U/lioFFSNCa0n+pXr/qpF+lfCkjoJ
- 7QtnG6cdMhkGUW3I2Hbsr0LNyGLM6BLw2dEgnQdBUYu7nzvHzhX3EXO4YG+6CmDqhvdJB1NEwyhiUXSp
- n60HgzqPRNEkwjulASsmqV0nIOt4ZPbf5H7tEYE+m48BtCrqvB5TcGJoyXl69cLq7tXlLY/JFduhFRPG
- knbrrHTjvFgTX6J2TLx+WJk8QeiYMOuYPNE5Y9cxfbpxxLSWRWrlGvWOn+aMOk9OXtzaAElGv/Utv4rG
- s1FZZiFZRr4JKMqIN3/v4diiMyj4z2xYTWzoj2/heZt45hqBsoZtXoJXz6lVTmvVzeLaFiybJhwjS0hX
- nom6XDns4nnc8dyRW/fVq2peb23VQVCdUJi5CwWtCp9NrJ/tE5i2zeKbJpENE5p1s8pVc3IlM9KlM4qV
- 8/C6aYPMDoOXoXKut/865y1x8Zri5evK3jeV79xVufdAPb/42tZ2CiSMgYShQmHgHhQohIIgcIDWtx/t
- rl9b3zg3tWI5sIACbYxUvnLPnEL/gurQMmx0UXtyETu1aDQ2a9kFQJllWuWV+J5OVx7z9tz4c8H069X5
- r+vzAatT/osjPnzuq1nenYnh8+NjpyemjGbm9RaXjKenDei9qOpGjZR8Of9Y8XdBIve+/n310++3f/71
- Nk7sY7zUi2CROx/+9/WvPyPLpNN65JKY4jHM41GgPbtPLIx+LKLnWAxdHBBn/zli0d3HIjqPxlKlkuhK
- gAgAuFfZLEIeh1Q4pF85YVwxpl86gisYBMN16kmdaikUeAYNlU1D5/Sg/xE6rm7EoGoIV8zSLWHji1mk
- zB50HFktokn+QCPjZgmDGF6l8TFbxqdYI6xVL7LDADAtwpsB6whMQyNCG7XeZR95mfrbtyLRiAZ1/1KV
- 9+nK75I1PiZpvwpXfeIv/SFSJixPI6+dVEw1TG7FRDVp7QOW6ADgq+FbpfI8XTygGhXZZhTYiA9uQH8r
- VspjGA9BN3vXPSu4J1IppMQ2QkwltrTDbnnzBwQlQVAaBCULofBB/oNqllXhMDJlUDW6Xz6IKva16a8f
- bYeCuo9/afzta8vvfu1/fmk4GNwhF9WuFFl7PK3xSA1dqp2n2Daq3DipWT+m0zSEZ0ydHJp3nl9x5687
- T22cGtk2Afz8wsGDpZNHqxckKiYla8fVKHxD+sIp5qITa+XcwKpz79IpyrRp97gVY9SOO+4qWLyyu3dn
- T3h3R/hgRfhgdO0mY86TuXSlX+DBW3IZX7MfW7OY2jKb3TWe3zUa3ySywFz9JpK8rl4jkKuel29c0mxf
- wZEXLUqZpu8iZD3u/+589bfL98XTc8+vreeCNhXhXikEpUNQyB70YXXvFk9g3z6q3zSMbRiG104qV83L
- lS/IVvCVqgHnf55YxjIMKoBff3fcxfuoo6fI2UuSF69IXr8p+/qdVmEZaFr2E+79EAq/QJCPEPoKCX2h
- 3W/Q5ivh8pV1gcvcoiUH5NHBGPWCHBg+Ygjkh1Y15jbRixv4zW2T7W2L1Q3Lab7p8KjxEM90ctiFP3Zr
- afrx6uzrDb7f1kLwjiB8eyFwa953Y+Hl7JQnb9h6eMJgdBY/No/jTuM7WToVnaqp1TKh+eJ+6cdfx/z9
- JPqPZ/G/v884+DX7yMeUQ69j/sc3/Y/YZtEUulgSSySOcyyKdTyk93AA/e9g2t+h1EORPUej6ceie49G
- Uv8Kp/wV1S0S1SUVSVZKooKIrlfIMykdNS8dNSnk6RcMEnJYANOlHktWS+iAJXVpp/cgcxiYXDq6qB9b
- P2ZYN0Ks5uLqeYa1PLMqjnFhHza9U+tAE927nm2U2oz2y1faxxp16Ee3E32KlOM79eI69AJqNL+Xy77K
- /P1L0aHwFqWMXkJgjfqrFLkP6Zo+2chPGTpfMrX8C7SCSjQTGkHyUg+ANX5WwMOadVNZxuGdup8rFF/k
- SP6oQUaQTcBb6Hul1qvk42ntOM7W1d4lj5rBk3m9JsnthJwOM9rEjbkVn9WVkLWFyL3NRJAVnlh6Vc08
- lcvBZvJ0Y5lq/p1i39uOBFOPh/eKhPYeD+47+q7xPz81/SugSyyCIpnSI1Y8IFrJFqlkiZazpSpG1KpH
- EbU8LHXqxOjK2ZkNt9F1G+6GKYD1lI9KJ/X+Dsi9WWPHCiakamY12xaIrdOGNIEtd819YPUMdcGMMmfa
- M2NDHbFljTuubV3dhS6vbDksbNrObtt1TxiA9v/OeRvmmhNn2WFo1XZ4w3Jq12oeslqAzCa3iexVBH0d
- 1rGu3Lgs07om17Wt0rGu1rEM+qgMSnv0gkDz8y/piDQ9Fg/kiLIgKAeCQGYwFoJ+CaFPmztPJvie/ZMO
- AzO21Am95jH12mnZqnmZqnmFmln1VgGudc6kpN/kZybi+lupM5cPOnkdcvb86+od8ZRs65Gpuxs7L3f3
- Hu1Bd/f27gih+9DeA2jrgXD16ta83TLfbJwPhv+VugQSbYvHyQsiPQKpkQ3Y0iZhY9NQuGUObZrvbpps
- rBuvrZisCsxX5+zXprxWJ2+uTj9bm/HdEoRB64nCjfi9jUjh9s/1tacTU659g/oUjlb3qHbHqE4tR6OI
- rpjeLh3bIB5Sfdyv5IhPyaGPRX/4lP75o/LvnxUHAyoPhjYfius5ltR/PGVQFOA1IwaO/qL//ZN2MJB+
- MKT7j+DuP8Jof0bQ/4yg/RFG+TOk/XBg87HABpnodp30Pr2iYfPiEctCnmkuWy9rACzGAjAjrYRu7aRu
- nZRuxL7Q6SDfgitkYisH9ZtGjGizp3rnHemzzn38s8wF565JmwN1lCuVvXpxNTo/C1QT2w2imvAxbfjg
- OlhUCzq0QTuwFuCKJN/nH/atEI3q0MhmGYY3677NkH+brvwmTeV1qpJfkfbPUs1fZWpB5WphNYiQWuKP
- cvT3Kt0oil7agGlAs9bbAtkvFfBoikVYq75PkeqbFNEMMr5nzq1z0rGCaZZHN4xu1E1v1+8c8+zheTe1
- exUVOdN7n67thvIEz0rpJ/LZ+gVjBtG9moFdUvFspbQh5WSebPqEQvyw1Lu6Az4tfwVQxCLp4hks0SLe
- kdKhIyWDogVsqcw+0NelkD+g3TF7Ymj73OiuW/ecUc2IVuWoej5XLoryt1/Lf/t3/Z7IEauYh9XPo8qH
- dVpmjegCu65Zi6ZxYs0QoXHYFKDWKUPWM2vnFredxlf0mbMw2qxGw5hq9TiyVWDas3aaseRAm7ftXbYa
- 3DoxsWs1um0wtIVhbQLgm1rbqmLzsmz7uhx1V4GyLt29okhf1mXwTVvYFuUdJi29ztOCV1u7Pzd3fmzu
- +G7tft6DPu4K32xtvdjcerm283J999Hi9oWhFWMqH3SkyNTPyDbOqrUvojuXDVrmTuTRzL+lIa59EPV6
- fujqi79ffpdrpjuv7Hkv71xY3nRe2bKfX7RcXjm9s+a0t+y4y7ddnTJdWdCfWtTqF0h1LB5q4P/ROHew
- gy/KXladXcWsrhntbVhCGxZ7q/pbK4SNZdLmouEW/8TWnMvatBd/+AZ/7PWGIES4mSTcSRHuJQNjuQd9
- XVm7xx492TqAqB/UrOCpFXKVsvtlM3plUmhS8d0SoWSRgNZjfk2H/Br+9G/6I4T8d3QPwD0AlYuCA/qR
- kthS0UzxgO5DPykHAyl/hVD+COr6PZT6r32h0/8MpfwV0HrYv0kEjOpHk5HJdL08rnke1zSbZZA1QARo
- gGQa2AMHYF3IZCoirQeZSUdl0pC5DExeL6Z4AExpWPTPOQ7Mn2PPewwJLo0uew0tnD9Q2nYhqx0ZWKT+
- LVctoAwZUoOMaUMnUTDfimU+5Ij7lsq/zhb5WAhWp8v4lMtFtKCC6pAf85RfZyg8jBG9EXzwVYrUp2zZ
- kCpYYKmGfwk8ttUqpNbkWzHqVxU6m3Minop/ny/7IksuGKQsq1DvsxX88pQqmJbdk851LPMsMiaZjPEv
- UwooU44BcxvVpNgC0s8YnaRCs67hmy2889mdBoWDxmXT5vFMeBhVNm1IPWNYNYkjnT2plMST/VD7L58m
- kbAeJVC9T2Mfyx78V+Ho36C8n8WRBtedmG7pJLpq5bgRdcWxd9WZPGNZyNDKpqnn9KnHdcm+Lv7tWcl/
- BHYfyh1XrAYLaSdhZTx4BRezf2HnAuKkTjYdVUDDVvRi65hoyii+l49sn5RqmBCpmpQpn4HVLhKbl82b
- pk81jts2T1u3zZp2zBOpoDN2A07bUCWvKjYK5Bv48u1LQOWylGXR3lVpzjocVGqY0xbcORdA/hid8xyZ
- 8RgYcWBwTw5OOArWrm5sP9jdBd28fiC6QxCwH/dWheATA0WZl2mflyUvqJEFOuQVQuuiWe3EiRy6aWQN
- KrxCO7oCltOGo0xYc1Ys+vmE/lkd+phKz6DS4ITO3Ize6qTx6qjxwrDhyqzB3DKCtSTTNv9X3dzvdfMH
- G2eOkqel+uc1JpYIq6vmOxvmexuG2+v49WXcmoC0sWC6wbdZmXMVTF8VzDzdXvOH9mKApYSgFCB0IeS7
- B72aWznPmDZuHNPN5SpmceUyWNIZbOkUlnTigFRsv1QoXfRHx2Hf5j++t/we3PVXVN/h2P6jgLaZ2CuV
- yVZO61OMp0pFkEWDWo+Edx0L6/orjPJXRM9fUfSDEbQ/QygHA9pEAJ85olM7tgsX0wny0chYQOSiIOMo
- OrFdsMQe7RQaMo0G1gcBlaNz+nFA6+mALQegnxzD1jEAz3Kmj7vRR90Gxj1G+V7gV30gs8EpvEr5Z5Hm
- lxyND9lqwXUoQG2M74T5FIu9SD30PPXo4+Sjb/NlQGB+nScd1ID2LdP6Uqb5pVTjWbLEg6jDr5JFP6RL
- BFVoRtWjA0oR8S3W4bUWAWWkgHJUYhdxP7XSjnqTKRNYi4voMHqXLf89X7F6wJI+51zHNslo1wmqVPhW
- IuVbIuFfLhdYqhJejoipJEWWETLbzTM7jdIpuOx+bEqfVnSPUkSPDGi9SmHJgl9Wzrgi2Ob1qfL4zxaV
- aLp2xjCseEa2ZOZQyfTfBVOiOWNyWcPKGUPqKRyNfND2ueLAWDnLXr1In3Upo5OyOrUS2tX8aiTflv3x
- tfG31EGJ0mn54lGZHKZUUpdkcrdiKgOWRNdK6tHO6kOUczFNI4TOaSJIZrfMS9QtHCubl8ifVSxd1q3b
- MKqds66bdKyetC3m6RcOagIAAXlDsXVNqmlJumZOtmpCrmUOzG7KM9YlBrdlpiGtuV2DuU2QFHKdFDhN
- LNoMz5sxhtFtfSq0IcTEovXa9pV/al4gYRLxT87k8S7kxN/FDG0rM7cV6VsqXeuwzk1C64pB7Zxh5ZRx
- 5YRB06xB+wKJzMeQBcjaKeXGGfnWKcnGoaN1/YfoI8p8gcHu8gkQ0bfmnbaXbBZWcGyBbPvcX/Vzv9Xx
- /6ydO9Q0J9a9qDy0iuGvG21vm0GQKSQkbW5gNleJW2umK6tma2sOezu3drae721/3lz7srX2HdoNgaBg
- CPoEQc+3oMsj61bgXy8cVcocks4akswalkoblk4dkU4Zl0sekw8bEP/RdfB7x+/+lN9C6L9H0v9M7BMr
- HdchL5p2CMyap/RqR7GVw+jiEVg8QySqByz2AdSTY8DYJLBATkYhsgcWS0Mn0QhxFHRQo5p/rWJQk3J4
- m0osRSO1X2c/89iHyWZicgYweWxcLqBi9KKyerGFHNAAY9055tA9eraL69I34jGzdG1i1uNAVrObf5HC
- +1TlT5mw95nq30o0I1p1AmoVPhdJPE87/DT5yMsMcdCT+CJT5mWW4utMtceJCh8KYN/KEa8z5D9lK7xL
- k3yTLPo9TzGqBhVUovstE/M1Ax9cZuxXgPhWoprWq5/LNv+UB4ZKAYbO7mO+8rsU8YxWbB3bIp+CSm6F
- BVXL+ZVLgdbfoHqFgCp5/xKliFpsRA0hsh4X24EDNXlw7/5Wefhn4/HIHvmYHtlUllwiUxz0nQe1ir3O
- FfWtAts1dDIHkVUL8BqBeOH47wXjoqUz8NIZdP4EGmzijWeo5XEAa9dxcvvFCvRtRPCIMnq2mG4c1aj+
- vea4T/X/hHcezGJLgD6wnH7phC7xJKpiVr8uqFMkUtSA82meIA2snBzasqXOY+onpavmjhfOHk8bE8sY
- Vyzl4xuX7Jv4Z8vGbHI5hAyQ1h2WLpuVqOCLlc9KlE7KFA3JVI/Ldy6q9q4qD22q8iH0OmS6Bzlv751f
- 3nBa2LCYXiWyZjQoI9Kdw/LsedzitssedAeCQEeADyj0CqHr25DtGkSYgTSYmzLUNTnKBqx1BV09iyqe
- QJVNYeoFuI41dNeGduOSXMmUSPbokeKpY2Xjh0rZv1f1/UUbUeEvWUC7HtD2LWjnCbR3c23Tjjuv1T52
- tGb09/LR30pH/6qbkeha0GAv4WfXTLd3rCHIQrhDWltFrazg1zeNljdNBGs2S+sXBEs3Bgc9u9rPdLc7
- jbG8N5efQ8JHQujmmtCdu2rSPAMvHJVLAVgetnjaoFTqsEzaqEzKiEzqmHIMV96/+9i39j/82n8LoPwe
- 0f0XYN5TViwnII9Z6NLk7oXhddeRnXN9m6dKRjSTesWTB8QzhqSzxxTTeCopLHhCLyqOhomjYMLbdb7X
- KvlUSvk3A/q+WlSHShwF1E11s3sJQOuZTGQaA5ECEF9dyOgWncQOTCHNpIxqnt1IyqkjNFKt2GMunCGH
- /wd6M4989rNkxAAAAABJRU5ErkJggg==
-</value>
- </data>
- <data name="panelHeader.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
- <value>
- iVBORw0KGgoAAAANSUhEUgAAAAcAAABWCAIAAACM4hvWAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAOxAAA
- DsQBlSsOGwAABnlJREFUSEstlFlvG9cVx6/0Bbxq4b7NcBZKceA4TRAkafoBnMiy5TayaCMFWqDoQ4H2
- KZZkiZydiyQuWl03iR2L2i2JywxnOCuHHJKS7TZp2iBAP0Qf8hQgyJUT4GCA+5v//M85c++5fdI/+f//
- +L/vv/8B9Pf/2Af6+vr6+/vBhnoz136NUUhKiyW1Udq4wlivg8/NKb6Ozxyg94+wT8vYp8f4dIUAX1jx
- VIN8cITNVLDpCna/gs3WCPC4GU9r5FwZe1DFZ2v4TI2Yk2Lgy9bdrDGSqOJJiZyXCPhiTiLBUye+aMWo
- GpaUiESdmKvjCZkEm87dJYukqmhCxOYlbF7GEgoBaXzRJF9p8VcUp9QY2OzE861RViZhyUmFSMLCId3q
- 3i06r3EKwSokrZK0PsLoMVDqxgttkqlHmQbO6gRrxjhzBDpMFZwYK2OMgv1CrRFQ6kwVOzFeI1kVp3Wc
- NUjOgtm6Hxe6uHC2xhgTp034xECpN5nvYIIeZU2MbeKMFaVNFOy8iBd7BKdhtIbCNQymGQU7L+8Vu9AX
- pzSUMaMQcTYKtp7fyzkEp2K0jlEGCh14Owq2T+8uOTir4ZxF0DqUo1wTBaXTqWwLpRswG84YEGFCCwel
- F1MLDkopEVpDGCPKW3imRYLS8zuQ0o0IpaO0DimRsSE9mVxqR9kGRjWwJHQ3CMHEwdbJZB5SBaMUPAmb
- 1jBWQ8HuyZ3lNibAH6aRjE5Ayr2i8RWHSKkEr8d4IwYdeAP21ouvOmS6gfMqwekwMN7AfqGCAj/EeB3n
- 9WjqLFtnarlFpOQo38B4DRO0aAZqt7rxYgsXIFVQXkXSWjT7My3YOC+hvIzwCpJRo4s6Dna68WUb48Ww
- IIfTDWRRw4vmKNjrTK3ZWEoKpeRw6mcKd3O/G3/YIjL1SFqJpBtoVo0uGTjYd+48tPFsHcmc0UhaQ7IG
- CunkmhXNSJG0DK2DvOJPa0Fw0L2z3kQyUkiQQ7wS4GQvr/og/Xi9GUqLfl4KMJKfkTyc7AYHvd+u28GU
- 6OVEHyN6GdHFSsOwslsrlo+vupmKm666WdHNiMNgq3k9rwxyZQ8Do+aBiJWGQMm8npMHmWcu+hiq3Iw0
- xNaHwHZzLN9w04du6niYqg7S4mVWvAy2W+M5xUMfuqjycLJ6mREvsrULkN7MNbyQ0pWhZO0SK13k6+fB
- Vmsip/qZYw9VHpgvn2PEc2d0s3VzSfMyxy6qMpCsnufkc4J8ATy1byyqbqYMUw2w9csZfSCjDUDteE73
- CqKXl4fZ+qWUNpBRB0CpfbNg+SEVZDfU8sqlFKTbnYkVO5Sq+3nZzSuDEKWhQ6l9e9mOZBvhlOrLGp4F
- czhrDoKnzVsFI7ygohk9mG16l2xXvuUCT61bOS2YbUAaXrADha5vpeuBdDwPVQ00pYUW26G10/D6SQCU
- 7I/ypj8F91EPLzmRtVNk4yQMtttjBcvLK6GMhS610eUusuqEzmix6WFlH2+Esna46ESKVhDs9m7kmi5K
- dHNGINsKFdpIEc7x/uk4LIWquwTLv+hALVrQ4XT3PspZA0lxkNM92VYwf9ZRCJ7J6wva+UTlIqe5M61A
- xvCxVQ/0HSu2XLQ4yBuetO0XNC9d9ULt+GonICh+WEC+h6bNECMFwU7n9mobTSmRTBMtnpKwF1YMg93u
- 1GqLFGREMCIZG+FUeAbhZHUmCxbCSQjXQBJ1H90IpfQRsNUbzze9rBhklEii5kvWA4JGgO2TD3PNIbrm
- ZeRQUvTPHA1TYhDsv/xwxRnkJDcleuZF7/Th0OyhC9T+M/74K19W8ybKQ4my58GRa/bZMJC/nSh9E1rU
- fFTFM3/knd5zTe8Pg+q/bn1x6s/KAaYSnt71/eWzC397chEcODfWTY9wHOCOcb76+uwu8tfHl0BJH8uL
- bv5ZeEG69uXLse3/TqSlUbCl32Z3BujtSKb8ZkH9ze43v9tovgcOnU+yz/xUCaF3R2ee4CvqBxvmr0G5
- +/tVeH3vhOc2I/efRNKVN3LKr0D9xR//YRDcvn+25JnfQxeUN5f0t4D19Z+rX7+zphDUno+rEKvtdzd6
- 74PmV38yvvtg076WPoxsNN961Hvv7513gP78D/K/3/1MvbJwFH3cef9h8+1Hztug5tzb7VzNl/HUAZYT
- ry6rVx8518COObGmIAtlkt0nkntYUX/j89NrYNeeXCyHEpsIvRNL7OCpKrnevvITI0lytudA8kUAAAAA
- SUVORK5CYII=
-</value>
- </data>
- <metadata name="saveFileDialogExport.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
- <value>17, 17</value>
- </metadata>
- <metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
- <value>171, 17</value>
- </metadata>
-</root> \ No newline at end of file
diff --git a/chromium/tools/stats_viewer/win32.cs b/chromium/tools/stats_viewer/win32.cs
deleted file mode 100644
index 18c4a8d4792..00000000000
--- a/chromium/tools/stats_viewer/win32.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright (c) 2012 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.
-
-using System;
-using System.Collections.Generic;
-using System.Runtime.InteropServices;
-using System.Text;
-
-namespace StatsViewer {
- /// <summary>
- /// Win32 API constants, structs, and wrappers for access via C#.
- /// </summary>
- class Win32 {
- #region Constants
- public enum MapAccess {
- FILE_MAP_COPY = 0x0001,
- FILE_MAP_WRITE = 0x0002,
- FILE_MAP_READ = 0x0004,
- FILE_MAP_ALL_ACCESS = 0x001f,
- }
-
- public const int GENERIC_READ = unchecked((int)0x80000000);
- public const int GENERIC_WRITE = unchecked((int)0x40000000);
- public const int OPEN_ALWAYS = 4;
- public static readonly IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1);
- #endregion
-
- [DllImport("kernel32", SetLastError=true, CharSet=CharSet.Auto)]
- public static extern IntPtr CreateFile (
- String lpFileName, int dwDesiredAccess, int dwShareMode,
- IntPtr lpSecurityAttributes, int dwCreationDisposition,
- int dwFlagsAndAttributes, IntPtr hTemplateFile);
-
- [DllImport("kernel32", SetLastError=true)]
- public static extern IntPtr MapViewOfFile (
- IntPtr hFileMappingObject, int dwDesiredAccess, int dwFileOffsetHigh,
- int dwFileOffsetLow, int dwNumBytesToMap);
-
- [DllImport("kernel32", SetLastError=true, CharSet=CharSet.Auto)]
- public static extern IntPtr OpenFileMapping (
- int dwDesiredAccess, bool bInheritHandle, String lpName);
-
- [DllImport("kernel32", SetLastError=true)]
- public static extern bool UnmapViewOfFile (IntPtr lpBaseAddress);
-
- [DllImport("kernel32", SetLastError = true)]
- public static extern bool CloseHandle(IntPtr handle);
- }
-}
diff --git a/chromium/tools/swarming_client/example/payload/hello_world.isolate b/chromium/tools/swarming_client/example/payload/hello_world.isolate
new file mode 100644
index 00000000000..808b805f69b
--- /dev/null
+++ b/chromium/tools/swarming_client/example/payload/hello_world.isolate
@@ -0,0 +1,49 @@
+# Copyright 2012 The Swarming Authors. All rights reserved.
+# Use of this source code is governed under the Apache License, Version 2.0 that
+# can be found in the LICENSE file.
+{
+ 'variables': {
+ 'isolate_dependency_tracked': [
+ 'hello_world.py',
+ ],
+ },
+ #
+ 'conditions': [
+ ['OS=="Linux"', {
+ 'variables': {
+ 'command': [
+ 'python',
+ 'hello_world.py',
+ 'Linux',
+ ],
+ },
+ }],
+ ['OS=="Mac"', {
+ 'variables': {
+ 'command': [
+ 'python',
+ 'hello_world.py',
+ 'OSX',
+ ],
+ },
+ }],
+ ['OS=="Yours"', {
+ 'variables': {
+ 'command': [
+ 'python',
+ 'hello_world.py',
+ 'your OS is the best',
+ ],
+ },
+ }],
+ ['OS=="Windows"', {
+ 'variables': {
+ 'command': [
+ 'python',
+ 'hello_world.py',
+ 'Windows',
+ ],
+ },
+ }],
+ ],
+}
diff --git a/chromium/tools/swarming_client/googletest/tests/isolate_test_cases/gtest_fake_pass.isolate b/chromium/tools/swarming_client/googletest/tests/isolate_test_cases/gtest_fake_pass.isolate
new file mode 100644
index 00000000000..b89f0e3ba50
--- /dev/null
+++ b/chromium/tools/swarming_client/googletest/tests/isolate_test_cases/gtest_fake_pass.isolate
@@ -0,0 +1,13 @@
+# Copyright 2013 The Swarming Authors. All rights reserved.
+# Use of this source code is governed under the Apache License, Version 2.0 that
+# can be found in the LICENSE file.
+{
+ 'variables': {
+ 'command': [
+ '../gtest_fake/gtest_fake_pass.py',
+ ],
+ 'isolate_dependency_tracked': [
+ '../gtest_fake/gtest_fake_pass.py',
+ ],
+ },
+}
diff --git a/chromium/tools/swarming_client/tests/isolate/all_items_invalid.isolate b/chromium/tools/swarming_client/tests/isolate/all_items_invalid.isolate
new file mode 100644
index 00000000000..c79750b9ea9
--- /dev/null
+++ b/chromium/tools/swarming_client/tests/isolate/all_items_invalid.isolate
@@ -0,0 +1,25 @@
+# Copyright 2012 The Swarming Authors. All rights reserved.
+# Use of this source code is governed under the Apache License, Version 2.0 that
+# can be found in the LICENSE file.
+{
+ 'variables': {
+ 'command' : [
+ 'python',
+ 'empty.py',
+ ],
+ 'isolate_dependency_tracked': [
+ # A single valid file so the command is valid and exits without an error.
+ 'empty.py',
+ # File doesn't exist.
+ 'A_file_that_does_not_exist',
+ ],
+ 'isolate_dependency_untracked': [
+ # Directory missing trailing slash.
+ 'files1',
+ ],
+ 'isolate_dependency_touched': [
+ # File doesn't exist.
+ 'A_file_that_does_not_exist_either',
+ ],
+ },
+}
diff --git a/chromium/tools/swarming_client/tests/isolate/fail.isolate b/chromium/tools/swarming_client/tests/isolate/fail.isolate
new file mode 100644
index 00000000000..b06fdb85995
--- /dev/null
+++ b/chromium/tools/swarming_client/tests/isolate/fail.isolate
@@ -0,0 +1,18 @@
+# Copyright 2012 The Swarming Authors. All rights reserved.
+# Use of this source code is governed under the Apache License, Version 2.0 that
+# can be found in the LICENSE file.
+{
+ 'conditions': [
+ ['(OS=="linux" and chromeos==1) or ((OS=="mac" or OS=="win") and chromeos==0)', {
+ 'variables': {
+ 'command': [
+ 'python',
+ 'fail.py',
+ ],
+ 'isolate_dependency_tracked': [
+ 'fail.py',
+ ],
+ },
+ }],
+ ],
+}
diff --git a/chromium/tools/swarming_client/tests/isolate/missing_trailing_slash.isolate b/chromium/tools/swarming_client/tests/isolate/missing_trailing_slash.isolate
new file mode 100644
index 00000000000..c05d8c7a38a
--- /dev/null
+++ b/chromium/tools/swarming_client/tests/isolate/missing_trailing_slash.isolate
@@ -0,0 +1,11 @@
+# Copyright 2012 The Swarming Authors. All rights reserved.
+# Use of this source code is governed under the Apache License, Version 2.0 that
+# can be found in the LICENSE file.
+{
+ 'variables': {
+ 'isolate_dependency_untracked': [
+ # Directory missing trailing slash.
+ 'files1',
+ ],
+ },
+}
diff --git a/chromium/tools/swarming_client/tests/isolate/no_run.isolate b/chromium/tools/swarming_client/tests/isolate/no_run.isolate
new file mode 100644
index 00000000000..20f3e636b81
--- /dev/null
+++ b/chromium/tools/swarming_client/tests/isolate/no_run.isolate
@@ -0,0 +1,14 @@
+# Copyright 2012 The Swarming Authors. All rights reserved.
+# Use of this source code is governed under the Apache License, Version 2.0 that
+# can be found in the LICENSE file.
+{
+ 'variables': {
+ 'isolate_dependency_tracked': [
+ # Includes itself.
+ 'no_run.isolate',
+ ],
+ 'isolate_dependency_untracked': [
+ 'files1/',
+ ],
+ },
+}
diff --git a/chromium/tools/swarming_client/tests/isolate/non_existent.isolate b/chromium/tools/swarming_client/tests/isolate/non_existent.isolate
new file mode 100644
index 00000000000..34b5fcdeee0
--- /dev/null
+++ b/chromium/tools/swarming_client/tests/isolate/non_existent.isolate
@@ -0,0 +1,10 @@
+# Copyright 2012 The Swarming Authors. All rights reserved.
+# Use of this source code is governed under the Apache License, Version 2.0 that
+# can be found in the LICENSE file.
+{
+ 'variables': {
+ 'isolate_dependency_tracked': [
+ 'A_file_that_do_not_exist',
+ ],
+ },
+}
diff --git a/chromium/tools/swarming_client/tests/isolate/simple.isolate b/chromium/tools/swarming_client/tests/isolate/simple.isolate
new file mode 100644
index 00000000000..8dad62259e2
--- /dev/null
+++ b/chromium/tools/swarming_client/tests/isolate/simple.isolate
@@ -0,0 +1,18 @@
+# Copyright 2012 The Swarming Authors. All rights reserved.
+# Use of this source code is governed under the Apache License, Version 2.0 that
+# can be found in the LICENSE file.
+{
+ 'conditions': [
+ ['OS=="linux" or OS=="mac" or OS=="win"', {
+ 'variables': {
+ 'command': [
+ 'python',
+ 'simple.py',
+ ],
+ 'isolate_dependency_tracked': [
+ 'simple.py',
+ ],
+ },
+ }],
+ ],
+}
diff --git a/chromium/tools/swarming_client/tests/isolate/split.isolate b/chromium/tools/swarming_client/tests/isolate/split.isolate
new file mode 100644
index 00000000000..ad967731082
--- /dev/null
+++ b/chromium/tools/swarming_client/tests/isolate/split.isolate
@@ -0,0 +1,16 @@
+# Copyright 2012 The Swarming Authors. All rights reserved.
+# Use of this source code is governed under the Apache License, Version 2.0 that
+# can be found in the LICENSE file.
+{
+ 'variables': {
+ 'command': [
+ 'python',
+ 'split.py',
+ ],
+ 'isolate_dependency_tracked': [
+ '<(DEPTH)/split.py',
+ '<(PRODUCT_DIR)/subdir/42.txt',
+ 'test/data/foo.txt',
+ ],
+ },
+}
diff --git a/chromium/tools/swarming_client/tests/isolate/symlink_full.isolate b/chromium/tools/swarming_client/tests/isolate/symlink_full.isolate
new file mode 100644
index 00000000000..a7a0ef5cc11
--- /dev/null
+++ b/chromium/tools/swarming_client/tests/isolate/symlink_full.isolate
@@ -0,0 +1,21 @@
+# Copyright 2012 The Swarming Authors. All rights reserved.
+# Use of this source code is governed under the Apache License, Version 2.0 that
+# can be found in the LICENSE file.
+{
+ 'conditions': [
+ ['(OS=="linux" and chromeos==1) or ((OS=="mac" or OS=="win") and chromeos==0)', {
+ 'variables': {
+ 'command': [
+ 'python',
+ 'symlink_full.py',
+ ],
+ 'isolate_dependency_tracked': [
+ 'symlink_full.py',
+ ],
+ 'isolate_dependency_untracked': [
+ 'files2/',
+ ],
+ },
+ }],
+ ],
+}
diff --git a/chromium/tools/swarming_client/tests/isolate/symlink_outside_build_root.isolate b/chromium/tools/swarming_client/tests/isolate/symlink_outside_build_root.isolate
new file mode 100644
index 00000000000..8995d8979ad
--- /dev/null
+++ b/chromium/tools/swarming_client/tests/isolate/symlink_outside_build_root.isolate
@@ -0,0 +1,21 @@
+# Copyright (c) 2013 The Chromium Authors. All rights reserved.
+# Use of this source code is governed under the Apache License, Version 2.0 that
+# can be found in the LICENSE file.
+{
+ 'conditions': [
+ ['(OS=="linux" and chromeos==1) or ((OS=="mac" or OS=="win") and chromeos==0)', {
+ 'variables': {
+ 'command': [
+ 'python',
+ 'symlink_outside_build_root.py',
+ ],
+ 'isolate_dependency_tracked': [
+ 'symlink_outside_build_root.py',
+ ],
+ 'isolate_dependency_untracked': [
+ 'link_outside_build_root/',
+ ],
+ },
+ }],
+ ],
+}
diff --git a/chromium/tools/swarming_client/tests/isolate/symlink_partial.isolate b/chromium/tools/swarming_client/tests/isolate/symlink_partial.isolate
new file mode 100644
index 00000000000..f9deab2bbd5
--- /dev/null
+++ b/chromium/tools/swarming_client/tests/isolate/symlink_partial.isolate
@@ -0,0 +1,21 @@
+# Copyright 2012 The Swarming Authors. All rights reserved.
+# Use of this source code is governed under the Apache License, Version 2.0 that
+# can be found in the LICENSE file.
+{
+ 'conditions': [
+ ['(OS=="linux" and chromeos==1) or ((OS=="mac" or OS=="win") and chromeos==0)', {
+ 'variables': {
+ 'command': [
+ 'python',
+ 'symlink_partial.py',
+ ],
+ 'isolate_dependency_tracked': [
+ 'symlink_partial.py',
+ ],
+ 'isolate_dependency_untracked': [
+ 'files2/test_file2.txt',
+ ],
+ },
+ }],
+ ],
+}
diff --git a/chromium/tools/swarming_client/tests/isolate/touch_only.isolate b/chromium/tools/swarming_client/tests/isolate/touch_only.isolate
new file mode 100644
index 00000000000..5aad82684db
--- /dev/null
+++ b/chromium/tools/swarming_client/tests/isolate/touch_only.isolate
@@ -0,0 +1,18 @@
+# Copyright 2012 The Swarming Authors. All rights reserved.
+# Use of this source code is governed under the Apache License, Version 2.0 that
+# can be found in the LICENSE file.
+{
+ 'variables': {
+ 'command': [
+ 'python',
+ 'touch_only.py',
+ '<(FLAG)',
+ ],
+ 'isolate_dependency_tracked': [
+ 'touch_only.py',
+ ],
+ 'isolate_dependency_touched': [
+ 'files1/test_file1.txt',
+ ],
+ },
+}
diff --git a/chromium/tools/swarming_client/tests/isolate/touch_root.isolate b/chromium/tools/swarming_client/tests/isolate/touch_root.isolate
new file mode 100644
index 00000000000..47260014185
--- /dev/null
+++ b/chromium/tools/swarming_client/tests/isolate/touch_root.isolate
@@ -0,0 +1,19 @@
+# Copyright 2012 The Swarming Authors. All rights reserved.
+# Use of this source code is governed under the Apache License, Version 2.0 that
+# can be found in the LICENSE file.
+{
+ 'conditions': [
+ ['(OS=="linux" and chromeos==1) or ((OS=="mac" or OS=="win") and chromeos==0)', {
+ 'variables': {
+ 'command': [
+ 'python',
+ 'touch_root.py',
+ ],
+ 'isolate_dependency_tracked': [
+ '../../isolate.py',
+ 'touch_root.py',
+ ],
+ },
+ }],
+ ],
+}
diff --git a/chromium/tools/swarming_client/tests/isolate/with_flag.isolate b/chromium/tools/swarming_client/tests/isolate/with_flag.isolate
new file mode 100644
index 00000000000..a83ae667bc3
--- /dev/null
+++ b/chromium/tools/swarming_client/tests/isolate/with_flag.isolate
@@ -0,0 +1,22 @@
+# Copyright 2012 The Swarming Authors. All rights reserved.
+# Use of this source code is governed under the Apache License, Version 2.0 that
+# can be found in the LICENSE file.
+{
+ 'conditions': [
+ ['(OS=="linux" and chromeos==1) or ((OS=="mac" or OS=="win") and chromeos==0)', {
+ 'variables': {
+ 'command': [
+ 'python',
+ 'with_flag.py',
+ '<(FLAG)',
+ ],
+ 'isolate_dependency_tracked': [
+ 'with_flag.py',
+ ],
+ 'isolate_dependency_untracked': [
+ 'files1/',
+ ],
+ },
+ }],
+ ],
+}
diff --git a/chromium/tools/swig/swig.py b/chromium/tools/swig/swig.py
deleted file mode 100755
index 8f4babb98ae..00000000000
--- a/chromium/tools/swig/swig.py
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-"""Wrapper around swig.
-
-Sets the SWIG_LIB environment var to point to Lib dir
-and defers control to the platform-specific swig binary.
-
-Depends on swig binaries being available at ../../third_party/swig.
-"""
-
-import os
-import subprocess
-import sys
-
-
-def main():
- swig_dir = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]),
- os.pardir, os.pardir, 'third_party', 'swig'))
- lib_dir = os.path.join(swig_dir, "Lib")
- os.putenv("SWIG_LIB", lib_dir)
- dir_map = {
- 'darwin': 'mac',
- 'linux2': 'linux',
- 'linux3': 'linux',
- 'win32': 'win',
- }
- # Swig documentation lies that platform macros are provided to swig
- # preprocessor. Provide them ourselves.
- platform_flags = {
- 'darwin': '-DSWIGMAC',
- 'linux2': '-DSWIGLINUX',
- 'linux3': '-DSWIGLINUX',
- 'win32': '-DSWIGWIN',
- }
- swig_bin = os.path.join(swig_dir, dir_map[sys.platform], 'swig')
- args = [swig_bin, platform_flags[sys.platform]] + sys.argv[1:]
- args = [x.replace('/', os.sep) for x in args]
- return subprocess.call(args)
-
-
-if __name__ == "__main__":
- sys.exit(main())
diff --git a/chromium/tools/symsrc/COPYING-pefile b/chromium/tools/symsrc/COPYING-pefile
deleted file mode 100644
index 70ca49f5d2e..00000000000
--- a/chromium/tools/symsrc/COPYING-pefile
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) 2004, 2005, 2006 Ero Carrera <ero@dkbza.org>. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation
-and/or other materials provided with the distribution.
-
-3. The name of the author may not be used to endorse or promote products
-derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
-OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
-IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
-OF SUCH DAMAGE.
-
-
diff --git a/chromium/tools/symsrc/README.chromium b/chromium/tools/symsrc/README.chromium
deleted file mode 100644
index 0398fe0c89f..00000000000
--- a/chromium/tools/symsrc/README.chromium
+++ /dev/null
@@ -1,14 +0,0 @@
-These files are related to the symbol and source server.
-
-This requires some Microsoft utilities. From a 32-bit WinDbg installation with
-source server support, copy the following files to this directory:
- dbghelp.dll
- pdbstr.exe
- srctool.exe
-
-The follow files were copied from the BSD licensed pefile-1.2.9.1:
- COPYING-pefile
- pefile.py
-
-pefile is available from:
- http://code.google.com/p/pefile/
diff --git a/chromium/tools/symsrc/img_fingerprint.py b/chromium/tools/symsrc/img_fingerprint.py
deleted file mode 100755
index c4b6395b87f..00000000000
--- a/chromium/tools/symsrc/img_fingerprint.py
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""Retrieves an image's "fingerprint".
-
-This is used when retrieving the image from the symbol server. The .dll (or cab
-compressed .dl_) or .exe is expected at a path like:
- foo.dll/FINGERPRINT/foo.dll
-"""
-
-import sys
-import pefile
-
-
-def GetImgFingerprint(filename):
- """Returns the fingerprint for an image file"""
- pe = pefile.PE(filename)
- return "%08X%06x" % (
- pe.FILE_HEADER.TimeDateStamp, pe.OPTIONAL_HEADER.SizeOfImage)
-
-
-def main():
- if len(sys.argv) != 2:
- print "usage: file.dll"
- return 1
-
- print GetImgFingerprint(sys.argv[1])
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/symsrc/pdb_fingerprint_from_img.py b/chromium/tools/symsrc/pdb_fingerprint_from_img.py
deleted file mode 100755
index e99447541a7..00000000000
--- a/chromium/tools/symsrc/pdb_fingerprint_from_img.py
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""This will retrieve a PDBs "fingerprint" from it's corresponding executable
-image (.dll or .exe). This is used when retrieving the PDB from the symbol
-server. The .pdb (or cab compressed .pd_) is expected at a path like:
- foo.pdb/FINGERPRINT/foo.pdb
-
-We can retrieve the same information from the .PDB file itself, but this file
-format is much more difficult and undocumented. Instead, we can look at the
-DLL's reference to the PDB, and use that to retrieve the information."""
-
-import sys
-import pefile
-
-
-__CV_INFO_PDB70_format__ = ('CV_INFO_PDB70',
- ('4s,CvSignature', '16s,Signature', 'L,Age'))
-
-__GUID_format__ = ('GUID',
- ('L,Data1', 'H,Data2', 'H,Data3', '8s,Data4'))
-
-
-def GetPDBInfoFromImg(filename):
- """Returns the PDB fingerprint and the pdb filename given an image file"""
-
- pe = pefile.PE(filename)
-
- for dbg in pe.DIRECTORY_ENTRY_DEBUG:
- if dbg.struct.Type == 2: # IMAGE_DEBUG_TYPE_CODEVIEW
- off = dbg.struct.AddressOfRawData
- size = dbg.struct.SizeOfData
- data = pe.get_memory_mapped_image()[off:off+size]
-
- cv = pefile.Structure(__CV_INFO_PDB70_format__)
- cv.__unpack__(data)
- cv.PdbFileName = data[cv.sizeof():]
- guid = pefile.Structure(__GUID_format__)
- guid.__unpack__(cv.Signature)
- guid.Data4_0 = ''.join("%02X" % ord(x) for x in guid.Data4[0:2])
- guid.Data4_1 = ''.join("%02X" % ord(x) for x in guid.Data4[2:])
-
- return ("%08X%04X%04X%s%s%d" % (
- guid.Data1, guid.Data2, guid.Data3,
- guid.Data4_0, guid.Data4_1, cv.Age),
- cv.PdbFileName.split('\x00', 1)[0])
-
- break
-
-
-def main():
- if len(sys.argv) != 2:
- print "usage: file.dll"
- return 1
-
- (fingerprint, filename) = GetPDBInfoFromImg(sys.argv[1])
- print "%s %s" % (fingerprint, filename)
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/symsrc/pefile.py b/chromium/tools/symsrc/pefile.py
deleted file mode 100644
index e22fd1ae245..00000000000
--- a/chromium/tools/symsrc/pefile.py
+++ /dev/null
@@ -1,3729 +0,0 @@
-# -*- coding: Latin-1 -*-
-"""pefile, Portable Executable reader module
-
-
-All the PE file basic structures are available with their default names
-as attributes of the instance returned.
-
-Processed elements such as the import table are made available with lowercase
-names, to differentiate them from the upper case basic structure names.
-
-pefile has been tested against the limits of valid PE headers, that is, malware.
-Lots of packed malware attempt to abuse the format way beyond its standard use.
-To the best of my knowledge most of the abuses are handled gracefully.
-
-Copyright (c) 2005, 2006, 2007, 2008 Ero Carrera <ero@dkbza.org>
-
-All rights reserved.
-
-For detailed copyright information see the file COPYING in
-the root of the distribution archive.
-"""
-
-__author__ = 'Ero Carrera'
-__version__ = '1.2.9.1'
-__contact__ = 'ero@dkbza.org'
-
-
-import os
-import struct
-import time
-import math
-import re
-import exceptions
-import string
-import array
-
-sha1, sha256, sha512, md5 = None, None, None, None
-
-try:
- import hashlib
- sha1 = hashlib.sha1
- sha256 = hashlib.sha256
- sha512 = hashlib.sha512
- md5 = hashlib.md5
-except ImportError:
- try:
- import sha
- sha1 = sha.new
- except ImportError:
- pass
- try:
- import md5
- md5 = md5.new
- except ImportError:
- pass
-
-
-fast_load = False
-
-IMAGE_DOS_SIGNATURE = 0x5A4D
-IMAGE_OS2_SIGNATURE = 0x454E
-IMAGE_OS2_SIGNATURE_LE = 0x454C
-IMAGE_VXD_SIGNATURE = 0x454C
-IMAGE_NT_SIGNATURE = 0x00004550
-IMAGE_NUMBEROF_DIRECTORY_ENTRIES= 16
-IMAGE_ORDINAL_FLAG = 0x80000000L
-IMAGE_ORDINAL_FLAG64 = 0x8000000000000000L
-OPTIONAL_HEADER_MAGIC_PE = 0x10b
-OPTIONAL_HEADER_MAGIC_PE_PLUS = 0x20b
-
-
-directory_entry_types = [
- ('IMAGE_DIRECTORY_ENTRY_EXPORT', 0),
- ('IMAGE_DIRECTORY_ENTRY_IMPORT', 1),
- ('IMAGE_DIRECTORY_ENTRY_RESOURCE', 2),
- ('IMAGE_DIRECTORY_ENTRY_EXCEPTION', 3),
- ('IMAGE_DIRECTORY_ENTRY_SECURITY', 4),
- ('IMAGE_DIRECTORY_ENTRY_BASERELOC', 5),
- ('IMAGE_DIRECTORY_ENTRY_DEBUG', 6),
- ('IMAGE_DIRECTORY_ENTRY_COPYRIGHT', 7),
- ('IMAGE_DIRECTORY_ENTRY_GLOBALPTR', 8),
- ('IMAGE_DIRECTORY_ENTRY_TLS', 9),
- ('IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG', 10),
- ('IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT', 11),
- ('IMAGE_DIRECTORY_ENTRY_IAT', 12),
- ('IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT', 13),
- ('IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR',14),
- ('IMAGE_DIRECTORY_ENTRY_RESERVED', 15) ]
-
-DIRECTORY_ENTRY = dict([(e[1], e[0]) for e in directory_entry_types]+directory_entry_types)
-
-
-image_characteristics = [
- ('IMAGE_FILE_RELOCS_STRIPPED', 0x0001),
- ('IMAGE_FILE_EXECUTABLE_IMAGE', 0x0002),
- ('IMAGE_FILE_LINE_NUMS_STRIPPED', 0x0004),
- ('IMAGE_FILE_LOCAL_SYMS_STRIPPED', 0x0008),
- ('IMAGE_FILE_AGGRESIVE_WS_TRIM', 0x0010),
- ('IMAGE_FILE_LARGE_ADDRESS_AWARE', 0x0020),
- ('IMAGE_FILE_16BIT_MACHINE', 0x0040),
- ('IMAGE_FILE_BYTES_REVERSED_LO', 0x0080),
- ('IMAGE_FILE_32BIT_MACHINE', 0x0100),
- ('IMAGE_FILE_DEBUG_STRIPPED', 0x0200),
- ('IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP', 0x0400),
- ('IMAGE_FILE_NET_RUN_FROM_SWAP', 0x0800),
- ('IMAGE_FILE_SYSTEM', 0x1000),
- ('IMAGE_FILE_DLL', 0x2000),
- ('IMAGE_FILE_UP_SYSTEM_ONLY', 0x4000),
- ('IMAGE_FILE_BYTES_REVERSED_HI', 0x8000) ]
-
-IMAGE_CHARACTERISTICS = dict([(e[1], e[0]) for e in
- image_characteristics]+image_characteristics)
-
-
-section_characteristics = [
- ('IMAGE_SCN_CNT_CODE', 0x00000020),
- ('IMAGE_SCN_CNT_INITIALIZED_DATA', 0x00000040),
- ('IMAGE_SCN_CNT_UNINITIALIZED_DATA', 0x00000080),
- ('IMAGE_SCN_LNK_OTHER', 0x00000100),
- ('IMAGE_SCN_LNK_INFO', 0x00000200),
- ('IMAGE_SCN_LNK_REMOVE', 0x00000800),
- ('IMAGE_SCN_LNK_COMDAT', 0x00001000),
- ('IMAGE_SCN_MEM_FARDATA', 0x00008000),
- ('IMAGE_SCN_MEM_PURGEABLE', 0x00020000),
- ('IMAGE_SCN_MEM_16BIT', 0x00020000),
- ('IMAGE_SCN_MEM_LOCKED', 0x00040000),
- ('IMAGE_SCN_MEM_PRELOAD', 0x00080000),
- ('IMAGE_SCN_ALIGN_1BYTES', 0x00100000),
- ('IMAGE_SCN_ALIGN_2BYTES', 0x00200000),
- ('IMAGE_SCN_ALIGN_4BYTES', 0x00300000),
- ('IMAGE_SCN_ALIGN_8BYTES', 0x00400000),
- ('IMAGE_SCN_ALIGN_16BYTES', 0x00500000),
- ('IMAGE_SCN_ALIGN_32BYTES', 0x00600000),
- ('IMAGE_SCN_ALIGN_64BYTES', 0x00700000),
- ('IMAGE_SCN_ALIGN_128BYTES', 0x00800000),
- ('IMAGE_SCN_ALIGN_256BYTES', 0x00900000),
- ('IMAGE_SCN_ALIGN_512BYTES', 0x00A00000),
- ('IMAGE_SCN_ALIGN_1024BYTES', 0x00B00000),
- ('IMAGE_SCN_ALIGN_2048BYTES', 0x00C00000),
- ('IMAGE_SCN_ALIGN_4096BYTES', 0x00D00000),
- ('IMAGE_SCN_ALIGN_8192BYTES', 0x00E00000),
- ('IMAGE_SCN_ALIGN_MASK', 0x00F00000),
- ('IMAGE_SCN_LNK_NRELOC_OVFL', 0x01000000),
- ('IMAGE_SCN_MEM_DISCARDABLE', 0x02000000),
- ('IMAGE_SCN_MEM_NOT_CACHED', 0x04000000),
- ('IMAGE_SCN_MEM_NOT_PAGED', 0x08000000),
- ('IMAGE_SCN_MEM_SHARED', 0x10000000),
- ('IMAGE_SCN_MEM_EXECUTE', 0x20000000),
- ('IMAGE_SCN_MEM_READ', 0x40000000),
- ('IMAGE_SCN_MEM_WRITE', 0x80000000L) ]
-
-SECTION_CHARACTERISTICS = dict([(e[1], e[0]) for e in
- section_characteristics]+section_characteristics)
-
-
-debug_types = [
- ('IMAGE_DEBUG_TYPE_UNKNOWN', 0),
- ('IMAGE_DEBUG_TYPE_COFF', 1),
- ('IMAGE_DEBUG_TYPE_CODEVIEW', 2),
- ('IMAGE_DEBUG_TYPE_FPO', 3),
- ('IMAGE_DEBUG_TYPE_MISC', 4),
- ('IMAGE_DEBUG_TYPE_EXCEPTION', 5),
- ('IMAGE_DEBUG_TYPE_FIXUP', 6),
- ('IMAGE_DEBUG_TYPE_OMAP_TO_SRC', 7),
- ('IMAGE_DEBUG_TYPE_OMAP_FROM_SRC', 8),
- ('IMAGE_DEBUG_TYPE_BORLAND', 9),
- ('IMAGE_DEBUG_TYPE_RESERVED10', 10) ]
-
-DEBUG_TYPE = dict([(e[1], e[0]) for e in debug_types]+debug_types)
-
-
-subsystem_types = [
- ('IMAGE_SUBSYSTEM_UNKNOWN', 0),
- ('IMAGE_SUBSYSTEM_NATIVE', 1),
- ('IMAGE_SUBSYSTEM_WINDOWS_GUI', 2),
- ('IMAGE_SUBSYSTEM_WINDOWS_CUI', 3),
- ('IMAGE_SUBSYSTEM_OS2_CUI', 5),
- ('IMAGE_SUBSYSTEM_POSIX_CUI', 7),
- ('IMAGE_SUBSYSTEM_WINDOWS_CE_GUI', 9),
- ('IMAGE_SUBSYSTEM_EFI_APPLICATION', 10),
- ('IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER', 11),
- ('IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER', 12),
- ('IMAGE_SUBSYSTEM_EFI_ROM', 13),
- ('IMAGE_SUBSYSTEM_XBOX', 14)]
-
-SUBSYSTEM_TYPE = dict([(e[1], e[0]) for e in subsystem_types]+subsystem_types)
-
-
-machine_types = [
- ('IMAGE_FILE_MACHINE_UNKNOWN', 0),
- ('IMAGE_FILE_MACHINE_AM33', 0x1d3),
- ('IMAGE_FILE_MACHINE_AMD64', 0x8664),
- ('IMAGE_FILE_MACHINE_ARM', 0x1c0),
- ('IMAGE_FILE_MACHINE_EBC', 0xebc),
- ('IMAGE_FILE_MACHINE_I386', 0x14c),
- ('IMAGE_FILE_MACHINE_IA64', 0x200),
- ('IMAGE_FILE_MACHINE_MR32', 0x9041),
- ('IMAGE_FILE_MACHINE_MIPS16', 0x266),
- ('IMAGE_FILE_MACHINE_MIPSFPU', 0x366),
- ('IMAGE_FILE_MACHINE_MIPSFPU16',0x466),
- ('IMAGE_FILE_MACHINE_POWERPC', 0x1f0),
- ('IMAGE_FILE_MACHINE_POWERPCFP',0x1f1),
- ('IMAGE_FILE_MACHINE_R4000', 0x166),
- ('IMAGE_FILE_MACHINE_SH3', 0x1a2),
- ('IMAGE_FILE_MACHINE_SH3DSP', 0x1a3),
- ('IMAGE_FILE_MACHINE_SH4', 0x1a6),
- ('IMAGE_FILE_MACHINE_SH5', 0x1a8),
- ('IMAGE_FILE_MACHINE_THUMB', 0x1c2),
- ('IMAGE_FILE_MACHINE_WCEMIPSV2',0x169),
- ]
-
-MACHINE_TYPE = dict([(e[1], e[0]) for e in machine_types]+machine_types)
-
-
-relocation_types = [
- ('IMAGE_REL_BASED_ABSOLUTE', 0),
- ('IMAGE_REL_BASED_HIGH', 1),
- ('IMAGE_REL_BASED_LOW', 2),
- ('IMAGE_REL_BASED_HIGHLOW', 3),
- ('IMAGE_REL_BASED_HIGHADJ', 4),
- ('IMAGE_REL_BASED_MIPS_JMPADDR', 5),
- ('IMAGE_REL_BASED_SECTION', 6),
- ('IMAGE_REL_BASED_REL', 7),
- ('IMAGE_REL_BASED_MIPS_JMPADDR16', 9),
- ('IMAGE_REL_BASED_IA64_IMM64', 9),
- ('IMAGE_REL_BASED_DIR64', 10),
- ('IMAGE_REL_BASED_HIGH3ADJ', 11) ]
-
-RELOCATION_TYPE = dict([(e[1], e[0]) for e in relocation_types]+relocation_types)
-
-
-dll_characteristics = [
- ('IMAGE_DLL_CHARACTERISTICS_RESERVED_0x0001', 0x0001),
- ('IMAGE_DLL_CHARACTERISTICS_RESERVED_0x0002', 0x0002),
- ('IMAGE_DLL_CHARACTERISTICS_RESERVED_0x0004', 0x0004),
- ('IMAGE_DLL_CHARACTERISTICS_RESERVED_0x0008', 0x0008),
- ('IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE', 0x0040),
- ('IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY', 0x0080),
- ('IMAGE_DLL_CHARACTERISTICS_NX_COMPAT', 0x0100),
- ('IMAGE_DLL_CHARACTERISTICS_NO_ISOLATION', 0x0200),
- ('IMAGE_DLL_CHARACTERISTICS_NO_SEH', 0x0400),
- ('IMAGE_DLL_CHARACTERISTICS_NO_BIND', 0x0800),
- ('IMAGE_DLL_CHARACTERISTICS_RESERVED_0x1000', 0x1000),
- ('IMAGE_DLL_CHARACTERISTICS_WDM_DRIVER', 0x2000),
- ('IMAGE_DLL_CHARACTERISTICS_TERMINAL_SERVER_AWARE', 0x8000) ]
-
-DLL_CHARACTERISTICS = dict([(e[1], e[0]) for e in dll_characteristics]+dll_characteristics)
-
-
-# Resource types
-resource_type = [
- ('RT_CURSOR', 1),
- ('RT_BITMAP', 2),
- ('RT_ICON', 3),
- ('RT_MENU', 4),
- ('RT_DIALOG', 5),
- ('RT_STRING', 6),
- ('RT_FONTDIR', 7),
- ('RT_FONT', 8),
- ('RT_ACCELERATOR', 9),
- ('RT_RCDATA', 10),
- ('RT_MESSAGETABLE', 11),
- ('RT_GROUP_CURSOR', 12),
- ('RT_GROUP_ICON', 14),
- ('RT_VERSION', 16),
- ('RT_DLGINCLUDE', 17),
- ('RT_PLUGPLAY', 19),
- ('RT_VXD', 20),
- ('RT_ANICURSOR', 21),
- ('RT_ANIICON', 22),
- ('RT_HTML', 23),
- ('RT_MANIFEST', 24) ]
-
-RESOURCE_TYPE = dict([(e[1], e[0]) for e in resource_type]+resource_type)
-
-
-# Language definitions
-lang = [
- ('LANG_NEUTRAL', 0x00),
- ('LANG_INVARIANT', 0x7f),
- ('LANG_AFRIKAANS', 0x36),
- ('LANG_ALBANIAN', 0x1c),
- ('LANG_ARABIC', 0x01),
- ('LANG_ARMENIAN', 0x2b),
- ('LANG_ASSAMESE', 0x4d),
- ('LANG_AZERI', 0x2c),
- ('LANG_BASQUE', 0x2d),
- ('LANG_BELARUSIAN', 0x23),
- ('LANG_BENGALI', 0x45),
- ('LANG_BULGARIAN', 0x02),
- ('LANG_CATALAN', 0x03),
- ('LANG_CHINESE', 0x04),
- ('LANG_CROATIAN', 0x1a),
- ('LANG_CZECH', 0x05),
- ('LANG_DANISH', 0x06),
- ('LANG_DIVEHI', 0x65),
- ('LANG_DUTCH', 0x13),
- ('LANG_ENGLISH', 0x09),
- ('LANG_ESTONIAN', 0x25),
- ('LANG_FAEROESE', 0x38),
- ('LANG_FARSI', 0x29),
- ('LANG_FINNISH', 0x0b),
- ('LANG_FRENCH', 0x0c),
- ('LANG_GALICIAN', 0x56),
- ('LANG_GEORGIAN', 0x37),
- ('LANG_GERMAN', 0x07),
- ('LANG_GREEK', 0x08),
- ('LANG_GUJARATI', 0x47),
- ('LANG_HEBREW', 0x0d),
- ('LANG_HINDI', 0x39),
- ('LANG_HUNGARIAN', 0x0e),
- ('LANG_ICELANDIC', 0x0f),
- ('LANG_INDONESIAN', 0x21),
- ('LANG_ITALIAN', 0x10),
- ('LANG_JAPANESE', 0x11),
- ('LANG_KANNADA', 0x4b),
- ('LANG_KASHMIRI', 0x60),
- ('LANG_KAZAK', 0x3f),
- ('LANG_KONKANI', 0x57),
- ('LANG_KOREAN', 0x12),
- ('LANG_KYRGYZ', 0x40),
- ('LANG_LATVIAN', 0x26),
- ('LANG_LITHUANIAN', 0x27),
- ('LANG_MACEDONIAN', 0x2f),
- ('LANG_MALAY', 0x3e),
- ('LANG_MALAYALAM', 0x4c),
- ('LANG_MANIPURI', 0x58),
- ('LANG_MARATHI', 0x4e),
- ('LANG_MONGOLIAN', 0x50),
- ('LANG_NEPALI', 0x61),
- ('LANG_NORWEGIAN', 0x14),
- ('LANG_ORIYA', 0x48),
- ('LANG_POLISH', 0x15),
- ('LANG_PORTUGUESE', 0x16),
- ('LANG_PUNJABI', 0x46),
- ('LANG_ROMANIAN', 0x18),
- ('LANG_RUSSIAN', 0x19),
- ('LANG_SANSKRIT', 0x4f),
- ('LANG_SERBIAN', 0x1a),
- ('LANG_SINDHI', 0x59),
- ('LANG_SLOVAK', 0x1b),
- ('LANG_SLOVENIAN', 0x24),
- ('LANG_SPANISH', 0x0a),
- ('LANG_SWAHILI', 0x41),
- ('LANG_SWEDISH', 0x1d),
- ('LANG_SYRIAC', 0x5a),
- ('LANG_TAMIL', 0x49),
- ('LANG_TATAR', 0x44),
- ('LANG_TELUGU', 0x4a),
- ('LANG_THAI', 0x1e),
- ('LANG_TURKISH', 0x1f),
- ('LANG_UKRAINIAN', 0x22),
- ('LANG_URDU', 0x20),
- ('LANG_UZBEK', 0x43),
- ('LANG_VIETNAMESE', 0x2a),
- ('LANG_GAELIC', 0x3c),
- ('LANG_MALTESE', 0x3a),
- ('LANG_MAORI', 0x28),
- ('LANG_RHAETO_ROMANCE',0x17),
- ('LANG_SAAMI', 0x3b),
- ('LANG_SORBIAN', 0x2e),
- ('LANG_SUTU', 0x30),
- ('LANG_TSONGA', 0x31),
- ('LANG_TSWANA', 0x32),
- ('LANG_VENDA', 0x33),
- ('LANG_XHOSA', 0x34),
- ('LANG_ZULU', 0x35),
- ('LANG_ESPERANTO', 0x8f),
- ('LANG_WALON', 0x90),
- ('LANG_CORNISH', 0x91),
- ('LANG_WELSH', 0x92),
- ('LANG_BRETON', 0x93) ]
-
-LANG = dict(lang+[(e[1], e[0]) for e in lang])
-
-
-# Sublanguage definitions
-sublang = [
- ('SUBLANG_NEUTRAL', 0x00),
- ('SUBLANG_DEFAULT', 0x01),
- ('SUBLANG_SYS_DEFAULT', 0x02),
- ('SUBLANG_ARABIC_SAUDI_ARABIA', 0x01),
- ('SUBLANG_ARABIC_IRAQ', 0x02),
- ('SUBLANG_ARABIC_EGYPT', 0x03),
- ('SUBLANG_ARABIC_LIBYA', 0x04),
- ('SUBLANG_ARABIC_ALGERIA', 0x05),
- ('SUBLANG_ARABIC_MOROCCO', 0x06),
- ('SUBLANG_ARABIC_TUNISIA', 0x07),
- ('SUBLANG_ARABIC_OMAN', 0x08),
- ('SUBLANG_ARABIC_YEMEN', 0x09),
- ('SUBLANG_ARABIC_SYRIA', 0x0a),
- ('SUBLANG_ARABIC_JORDAN', 0x0b),
- ('SUBLANG_ARABIC_LEBANON', 0x0c),
- ('SUBLANG_ARABIC_KUWAIT', 0x0d),
- ('SUBLANG_ARABIC_UAE', 0x0e),
- ('SUBLANG_ARABIC_BAHRAIN', 0x0f),
- ('SUBLANG_ARABIC_QATAR', 0x10),
- ('SUBLANG_AZERI_LATIN', 0x01),
- ('SUBLANG_AZERI_CYRILLIC', 0x02),
- ('SUBLANG_CHINESE_TRADITIONAL', 0x01),
- ('SUBLANG_CHINESE_SIMPLIFIED', 0x02),
- ('SUBLANG_CHINESE_HONGKONG', 0x03),
- ('SUBLANG_CHINESE_SINGAPORE', 0x04),
- ('SUBLANG_CHINESE_MACAU', 0x05),
- ('SUBLANG_DUTCH', 0x01),
- ('SUBLANG_DUTCH_BELGIAN', 0x02),
- ('SUBLANG_ENGLISH_US', 0x01),
- ('SUBLANG_ENGLISH_UK', 0x02),
- ('SUBLANG_ENGLISH_AUS', 0x03),
- ('SUBLANG_ENGLISH_CAN', 0x04),
- ('SUBLANG_ENGLISH_NZ', 0x05),
- ('SUBLANG_ENGLISH_EIRE', 0x06),
- ('SUBLANG_ENGLISH_SOUTH_AFRICA', 0x07),
- ('SUBLANG_ENGLISH_JAMAICA', 0x08),
- ('SUBLANG_ENGLISH_CARIBBEAN', 0x09),
- ('SUBLANG_ENGLISH_BELIZE', 0x0a),
- ('SUBLANG_ENGLISH_TRINIDAD', 0x0b),
- ('SUBLANG_ENGLISH_ZIMBABWE', 0x0c),
- ('SUBLANG_ENGLISH_PHILIPPINES', 0x0d),
- ('SUBLANG_FRENCH', 0x01),
- ('SUBLANG_FRENCH_BELGIAN', 0x02),
- ('SUBLANG_FRENCH_CANADIAN', 0x03),
- ('SUBLANG_FRENCH_SWISS', 0x04),
- ('SUBLANG_FRENCH_LUXEMBOURG', 0x05),
- ('SUBLANG_FRENCH_MONACO', 0x06),
- ('SUBLANG_GERMAN', 0x01),
- ('SUBLANG_GERMAN_SWISS', 0x02),
- ('SUBLANG_GERMAN_AUSTRIAN', 0x03),
- ('SUBLANG_GERMAN_LUXEMBOURG', 0x04),
- ('SUBLANG_GERMAN_LIECHTENSTEIN', 0x05),
- ('SUBLANG_ITALIAN', 0x01),
- ('SUBLANG_ITALIAN_SWISS', 0x02),
- ('SUBLANG_KASHMIRI_SASIA', 0x02),
- ('SUBLANG_KASHMIRI_INDIA', 0x02),
- ('SUBLANG_KOREAN', 0x01),
- ('SUBLANG_LITHUANIAN', 0x01),
- ('SUBLANG_MALAY_MALAYSIA', 0x01),
- ('SUBLANG_MALAY_BRUNEI_DARUSSALAM', 0x02),
- ('SUBLANG_NEPALI_INDIA', 0x02),
- ('SUBLANG_NORWEGIAN_BOKMAL', 0x01),
- ('SUBLANG_NORWEGIAN_NYNORSK', 0x02),
- ('SUBLANG_PORTUGUESE', 0x02),
- ('SUBLANG_PORTUGUESE_BRAZILIAN', 0x01),
- ('SUBLANG_SERBIAN_LATIN', 0x02),
- ('SUBLANG_SERBIAN_CYRILLIC', 0x03),
- ('SUBLANG_SPANISH', 0x01),
- ('SUBLANG_SPANISH_MEXICAN', 0x02),
- ('SUBLANG_SPANISH_MODERN', 0x03),
- ('SUBLANG_SPANISH_GUATEMALA', 0x04),
- ('SUBLANG_SPANISH_COSTA_RICA', 0x05),
- ('SUBLANG_SPANISH_PANAMA', 0x06),
- ('SUBLANG_SPANISH_DOMINICAN_REPUBLIC', 0x07),
- ('SUBLANG_SPANISH_VENEZUELA', 0x08),
- ('SUBLANG_SPANISH_COLOMBIA', 0x09),
- ('SUBLANG_SPANISH_PERU', 0x0a),
- ('SUBLANG_SPANISH_ARGENTINA', 0x0b),
- ('SUBLANG_SPANISH_ECUADOR', 0x0c),
- ('SUBLANG_SPANISH_CHILE', 0x0d),
- ('SUBLANG_SPANISH_URUGUAY', 0x0e),
- ('SUBLANG_SPANISH_PARAGUAY', 0x0f),
- ('SUBLANG_SPANISH_BOLIVIA', 0x10),
- ('SUBLANG_SPANISH_EL_SALVADOR', 0x11),
- ('SUBLANG_SPANISH_HONDURAS', 0x12),
- ('SUBLANG_SPANISH_NICARAGUA', 0x13),
- ('SUBLANG_SPANISH_PUERTO_RICO', 0x14),
- ('SUBLANG_SWEDISH', 0x01),
- ('SUBLANG_SWEDISH_FINLAND', 0x02),
- ('SUBLANG_URDU_PAKISTAN', 0x01),
- ('SUBLANG_URDU_INDIA', 0x02),
- ('SUBLANG_UZBEK_LATIN', 0x01),
- ('SUBLANG_UZBEK_CYRILLIC', 0x02),
- ('SUBLANG_DUTCH_SURINAM', 0x03),
- ('SUBLANG_ROMANIAN', 0x01),
- ('SUBLANG_ROMANIAN_MOLDAVIA', 0x02),
- ('SUBLANG_RUSSIAN', 0x01),
- ('SUBLANG_RUSSIAN_MOLDAVIA', 0x02),
- ('SUBLANG_CROATIAN', 0x01),
- ('SUBLANG_LITHUANIAN_CLASSIC', 0x02),
- ('SUBLANG_GAELIC', 0x01),
- ('SUBLANG_GAELIC_SCOTTISH', 0x02),
- ('SUBLANG_GAELIC_MANX', 0x03) ]
-
-SUBLANG = dict(sublang+[(e[1], e[0]) for e in sublang])
-
-
-class UnicodeStringWrapperPostProcessor:
- """This class attemps to help the process of identifying strings
- that might be plain Unicode or Pascal. A list of strings will be
- wrapped on it with the hope the overlappings will help make the
- decission about their type."""
-
- def __init__(self, pe, rva_ptr):
- self.pe = pe
- self.rva_ptr = rva_ptr
- self.string = None
-
-
- def get_rva(self):
- """Get the RVA of the string."""
-
- return self.rva_ptr
-
-
- def __str__(self):
- """Return the escaped ASCII representation of the string."""
-
- def convert_char(char):
- if char in string.printable:
- return char
- else:
- return r'\x%02x' % ord(char)
-
- if self.string:
- return ''.join([convert_char(c) for c in self.string])
-
- return ''
-
-
- def invalidate(self):
- """Make this instance None, to express it's no known string type."""
-
- self = None
-
-
- def render_pascal_16(self):
-
- self.string = self.pe.get_string_u_at_rva(
- self.rva_ptr+2,
- max_length=self.__get_pascal_16_length())
-
-
- def ask_pascal_16(self, next_rva_ptr):
- """The next RVA is taken to be the one immediately following this one.
-
- Such RVA could indicate the natural end of the string and will be checked
- with the possible length contained in the first word.
- """
-
- length = self.__get_pascal_16_length()
-
- if length == (next_rva_ptr - (self.rva_ptr+2)) / 2:
- self.length = length
- return True
-
- return False
-
-
- def __get_pascal_16_length(self):
-
- return self.__get_word_value_at_rva(self.rva_ptr)
-
-
- def __get_word_value_at_rva(self, rva):
-
- try:
- data = self.pe.get_data(self.rva_ptr, 2)
- except PEFormatError, e:
- return False
-
- if len(data)<2:
- return False
-
- return struct.unpack('<H', data)[0]
-
-
- #def render_pascal_8(self):
- # """"""
-
-
- def ask_unicode_16(self, next_rva_ptr):
- """The next RVA is taken to be the one immediately following this one.
-
- Such RVA could indicate the natural end of the string and will be checked
- to see if there's a Unicode NULL character there.
- """
-
- if self.__get_word_value_at_rva(next_rva_ptr-2) == 0:
- self.length = next_rva_ptr - self.rva_ptr
- return True
-
- return False
-
-
- def render_unicode_16(self):
- """"""
-
- self.string = self.pe.get_string_u_at_rva(self.rva_ptr)
-
-
-class PEFormatError(Exception):
- """Generic PE format error exception."""
-
- def __init__(self, value):
- self.value = value
-
- def __str__(self):
- return repr(self.value)
-
-
-class Dump:
- """Convenience class for dumping the PE information."""
-
- def __init__(self):
- self.text = ''
-
-
- def add_lines(self, txt, indent=0):
- """Adds a list of lines.
-
- The list can be indented with the optional argument 'indent'.
- """
- for line in txt:
- self.add_line(line, indent)
-
-
- def add_line(self, txt, indent=0):
- """Adds a line.
-
- The line can be indented with the optional argument 'indent'.
- """
-
- self.add(txt+'\n', indent)
-
-
- def add(self, txt, indent=0):
- """Adds some text, no newline will be appended.
-
- The text can be indented with the optional argument 'indent'.
- """
-
- if isinstance(txt, unicode):
- s = []
- for c in txt:
- try:
- s.append(str(c))
- except UnicodeEncodeError, e:
- s.append(repr(c))
-
- txt = ''.join(s)
-
- self.text += ' '*indent+txt
-
-
- def add_header(self, txt):
- """Adds a header element."""
-
- self.add_line('-'*10+txt+'-'*10+'\n')
-
-
- def add_newline(self):
- """Adds a newline."""
-
- self.text += '\n'
-
-
- def get_text(self):
- """Get the text in its current state."""
-
- return self.text
-
-
-
-class Structure:
- """Prepare structure object to extract members from data.
-
- Format is a list containing definitions for the elements
- of the structure.
- """
-
-
- def __init__(self, format, name=None, file_offset=None):
- # Format is forced little endian, for big endian non Intel platforms
- self.__format__ = '<'
- self.__keys__ = []
-# self.values = {}
- self.__format_length__ = 0
- self.__set_format__(format[1])
- self._all_zeroes = False
- self.__unpacked_data_elms__ = None
- self.__file_offset__ = file_offset
- if name:
- self.name = name
- else:
- self.name = format[0]
-
-
- def __get_format__(self):
- return self.__format__
-
-
- def get_file_offset(self):
- return self.__file_offset__
-
- def set_file_offset(self, offset):
- self.__file_offset__ = offset
-
- def all_zeroes(self):
- """Returns true is the unpacked data is all zeroes."""
-
- return self._all_zeroes
-
-
- def __set_format__(self, format):
-
- for elm in format:
- if ',' in elm:
- elm_type, elm_name = elm.split(',', 1)
- self.__format__ += elm_type
-
- elm_names = elm_name.split(',')
- names = []
- for elm_name in elm_names:
- if elm_name in self.__keys__:
- search_list = [x[:len(elm_name)] for x in self.__keys__]
- occ_count = search_list.count(elm_name)
- elm_name = elm_name+'_'+str(occ_count)
- names.append(elm_name)
- # Some PE header structures have unions on them, so a certain
- # value might have different names, so each key has a list of
- # all the possible members referring to the data.
- self.__keys__.append(names)
-
- self.__format_length__ = struct.calcsize(self.__format__)
-
-
- def sizeof(self):
- """Return size of the structure."""
-
- return self.__format_length__
-
-
- def __unpack__(self, data):
-
- if len(data)>self.__format_length__:
- data = data[:self.__format_length__]
-
- # OC Patch:
- # Some malware have incorrect header lengths.
- # Fail gracefully if this occurs
- # Buggy malware: a29b0118af8b7408444df81701ad5a7f
- #
- elif len(data)<self.__format_length__:
- raise PEFormatError('Data length less than expected header length.')
-
-
- if data.count(chr(0)) == len(data):
- self._all_zeroes = True
-
- self.__unpacked_data_elms__ = struct.unpack(self.__format__, data)
- for i in xrange(len(self.__unpacked_data_elms__)):
- for key in self.__keys__[i]:
-# self.values[key] = self.__unpacked_data_elms__[i]
- setattr(self, key, self.__unpacked_data_elms__[i])
-
-
- def __pack__(self):
-
- new_values = []
-
- for i in xrange(len(self.__unpacked_data_elms__)):
-
- for key in self.__keys__[i]:
- new_val = getattr(self, key)
- old_val = self.__unpacked_data_elms__[i]
-
- # In the case of Unions, when the first changed value
- # is picked the loop is exited
- if new_val != old_val:
- break
-
- new_values.append(new_val)
-
- return struct.pack(self.__format__, *new_values)
-
-
- def __str__(self):
- return '\n'.join( self.dump() )
-
- def __repr__(self):
- return '<Structure: %s>' % (' '.join( [' '.join(s.split()) for s in self.dump()] ))
-
-
- def dump(self, indentation=0):
- """Returns a string representation of the structure."""
-
- dump = []
-
- dump.append('[%s]' % self.name)
-
- # Refer to the __set_format__ method for an explanation
- # of the following construct.
- for keys in self.__keys__:
- for key in keys:
-
- val = getattr(self, key)
- if isinstance(val, int) or isinstance(val, long):
- val_str = '0x%-8X' % (val)
- if key == 'TimeDateStamp' or key == 'dwTimeStamp':
- try:
- val_str += ' [%s UTC]' % time.asctime(time.gmtime(val))
- except exceptions.ValueError, e:
- val_str += ' [INVALID TIME]'
- else:
- val_str = ''.join(filter(lambda c:c != '\0', str(val)))
-
- dump.append('%-30s %s' % (key+':', val_str))
-
- return dump
-
-
-
-class SectionStructure(Structure):
- """Convenience section handling class."""
-
- def get_data(self, start, length=None):
- """Get data chunk from a section.
-
- Allows to query data from the section by passing the
- addresses where the PE file would be loaded by default.
- It is then possible to retrieve code and data by its real
- addresses as it would be if loaded.
- """
-
- offset = start - self.VirtualAddress
-
- if length:
- end = offset+length
- else:
- end = len(self.data)
-
- return self.data[offset:end]
-
-
- def get_rva_from_offset(self, offset):
- return offset - self.PointerToRawData + self.VirtualAddress
-
-
- def get_offset_from_rva(self, rva):
- return (rva - self.VirtualAddress) + self.PointerToRawData
-
-
- def contains_offset(self, offset):
- """Check whether the section contains the file offset provided."""
-
- if not self.PointerToRawData:
- # bss and other sections containing only uninitialized data must have 0
- # and do not take space in the file
- return False
- return self.PointerToRawData <= offset < self.VirtualAddress + self.SizeOfRawData
-
-
- def contains_rva(self, rva):
- """Check whether the section contains the address provided."""
-
- # PECOFF documentation v8 says:
- # The total size of the section when loaded into memory.
- # If this value is greater than SizeOfRawData, the section is zero-padded.
- # This field is valid only for executable images and should be set to zero
- # for object files.
-
- if len(self.data) < self.SizeOfRawData:
- size = self.Misc_VirtualSize
- else:
- size = max(self.SizeOfRawData, self.Misc_VirtualSize)
-
- return self.VirtualAddress <= rva < self.VirtualAddress + size
-
- def contains(self, rva):
- #print "DEPRECATION WARNING: you should use contains_rva() instead of contains()"
- return self.contains_rva(rva)
-
-
- def set_data(self, data):
- """Set the data belonging to the section."""
-
- self.data = data
-
-
- def get_entropy(self):
- """Calculate and return the entropy for the section."""
-
- return self.entropy_H( self.data )
-
-
- def get_hash_sha1(self):
- """Get the SHA-1 hex-digest of the section's data."""
-
- if sha1 is not None:
- return sha1( self.data ).hexdigest()
-
-
- def get_hash_sha256(self):
- """Get the SHA-256 hex-digest of the section's data."""
-
- if sha256 is not None:
- return sha256( self.data ).hexdigest()
-
-
- def get_hash_sha512(self):
- """Get the SHA-512 hex-digest of the section's data."""
-
- if sha512 is not None:
- return sha512( self.data ).hexdigest()
-
-
- def get_hash_md5(self):
- """Get the MD5 hex-digest of the section's data."""
-
- if md5 is not None:
- return md5( self.data ).hexdigest()
-
-
- def entropy_H(self, data):
- """Calculate the entropy of a chunk of data."""
-
- if len(data) == 0:
- return 0.0
-
- occurences = array.array('L', [0]*256)
-
- for x in data:
- occurences[ord(x)] += 1
-
- entropy = 0
- for x in occurences:
- if x:
- p_x = float(x) / len(data)
- entropy -= p_x*math.log(p_x, 2)
-
- return entropy
-
-
-
-class DataContainer:
- """Generic data container."""
-
- def __init__(self, **args):
- for key, value in args.items():
- setattr(self, key, value)
-
-
-
-class ImportDescData(DataContainer):
- """Holds import descriptor information.
-
- dll: name of the imported DLL
- imports: list of imported symbols (ImportData instances)
- struct: IMAGE_IMPORT_DESCRIPTOR sctruture
- """
-
-class ImportData(DataContainer):
- """Holds imported symbol's information.
-
- ordinal: Ordinal of the symbol
- name: Name of the symbol
- bound: If the symbol is bound, this contains
- the address.
- """
-
-class ExportDirData(DataContainer):
- """Holds export directory information.
-
- struct: IMAGE_EXPORT_DIRECTORY structure
- symbols: list of exported symbols (ExportData instances)
-"""
-
-class ExportData(DataContainer):
- """Holds exported symbols' information.
-
- ordinal: ordinal of the symbol
- address: address of the symbol
- name: name of the symbol (None if the symbol is
- exported by ordinal only)
- forwarder: if the symbol is forwarded it will
- contain the name of the target symbol,
- None otherwise.
- """
-
-
-class ResourceDirData(DataContainer):
- """Holds resource directory information.
-
- struct: IMAGE_RESOURCE_DIRECTORY structure
- entries: list of entries (ResourceDirEntryData instances)
- """
-
-class ResourceDirEntryData(DataContainer):
- """Holds resource directory entry data.
-
- struct: IMAGE_RESOURCE_DIRECTORY_ENTRY structure
- name: If the resource is identified by name this
- attribute will contain the name string. None
- otherwise. If identified by id, the id is
- availabe at 'struct.Id'
- id: the id, also in struct.Id
- directory: If this entry has a lower level directory
- this attribute will point to the
- ResourceDirData instance representing it.
- data: If this entry has no futher lower directories
- and points to the actual resource data, this
- attribute will reference the corresponding
- ResourceDataEntryData instance.
- (Either of the 'directory' or 'data' attribute will exist,
- but not both.)
- """
-
-class ResourceDataEntryData(DataContainer):
- """Holds resource data entry information.
-
- struct: IMAGE_RESOURCE_DATA_ENTRY structure
- lang: Primary language ID
- sublang: Sublanguage ID
- """
-
-class DebugData(DataContainer):
- """Holds debug information.
-
- struct: IMAGE_DEBUG_DIRECTORY structure
- """
-
-class BaseRelocationData(DataContainer):
- """Holds base relocation information.
-
- struct: IMAGE_BASE_RELOCATION structure
- entries: list of relocation data (RelocationData instances)
- """
-
-class RelocationData(DataContainer):
- """Holds relocation information.
-
- type: Type of relocation
- The type string is can be obtained by
- RELOCATION_TYPE[type]
- rva: RVA of the relocation
- """
-
-class TlsData(DataContainer):
- """Holds TLS information.
-
- struct: IMAGE_TLS_DIRECTORY structure
- """
-
-class BoundImportDescData(DataContainer):
- """Holds bound import descriptor data.
-
- This directory entry will provide with information on the
- DLLs this PE files has been bound to (if bound at all).
- The structure will contain the name and timestamp of the
- DLL at the time of binding so that the loader can know
- whether it differs from the one currently present in the
- system and must, therefore, re-bind the PE's imports.
-
- struct: IMAGE_BOUND_IMPORT_DESCRIPTOR structure
- name: DLL name
- entries: list of entries (BoundImportRefData instances)
- the entries will exist if this DLL has forwarded
- symbols. If so, the destination DLL will have an
- entry in this list.
- """
-
-class BoundImportRefData(DataContainer):
- """Holds bound import forwader reference data.
-
- Contains the same information as the bound descriptor but
- for forwarded DLLs, if any.
-
- struct: IMAGE_BOUND_FORWARDER_REF structure
- name: dll name
- """
-
-
-class PE:
- """A Portable Executable representation.
-
- This class provides access to most of the information in a PE file.
-
- It expects to be supplied the name of the file to load or PE data
- to process and an optional argument 'fast_load' (False by default)
- which controls whether to load all the directories information,
- which can be quite time consuming.
-
- pe = pefile.PE('module.dll')
- pe = pefile.PE(name='module.dll')
-
- would load 'module.dll' and process it. If the data would be already
- available in a buffer the same could be achieved with:
-
- pe = pefile.PE(data=module_dll_data)
-
- The "fast_load" can be set to a default by setting its value in the
- module itself by means,for instance, of a "pefile.fast_load = True".
- That will make all the subsequent instances not to load the
- whole PE structure. The "full_load" method can be used to parse
- the missing data at a later stage.
-
- Basic headers information will be available in the attributes:
-
- DOS_HEADER
- NT_HEADERS
- FILE_HEADER
- OPTIONAL_HEADER
-
- All of them will contain among their attrbitues the members of the
- corresponding structures as defined in WINNT.H
-
- The raw data corresponding to the header (from the beginning of the
- file up to the start of the first section) will be avaiable in the
- instance's attribute 'header' as a string.
-
- The sections will be available as a list in the 'sections' attribute.
- Each entry will contain as attributes all the structure's members.
-
- Directory entries will be available as attributes (if they exist):
- (no other entries are processed at this point)
-
- DIRECTORY_ENTRY_IMPORT (list of ImportDescData instances)
- DIRECTORY_ENTRY_EXPORT (ExportDirData instance)
- DIRECTORY_ENTRY_RESOURCE (ResourceDirData instance)
- DIRECTORY_ENTRY_DEBUG (list of DebugData instances)
- DIRECTORY_ENTRY_BASERELOC (list of BaseRelocationData instances)
- DIRECTORY_ENTRY_TLS
- DIRECTORY_ENTRY_BOUND_IMPORT (list of BoundImportData instances)
-
- The following dictionary attributes provide ways of mapping different
- constants. They will accept the numeric value and return the string
- representation and the opposite, feed in the string and get the
- numeric constant:
-
- DIRECTORY_ENTRY
- IMAGE_CHARACTERISTICS
- SECTION_CHARACTERISTICS
- DEBUG_TYPE
- SUBSYSTEM_TYPE
- MACHINE_TYPE
- RELOCATION_TYPE
- RESOURCE_TYPE
- LANG
- SUBLANG
- """
-
- #
- # Format specifications for PE structures.
- #
-
- __IMAGE_DOS_HEADER_format__ = ('IMAGE_DOS_HEADER',
- ('H,e_magic', 'H,e_cblp', 'H,e_cp',
- 'H,e_crlc', 'H,e_cparhdr', 'H,e_minalloc',
- 'H,e_maxalloc', 'H,e_ss', 'H,e_sp', 'H,e_csum',
- 'H,e_ip', 'H,e_cs', 'H,e_lfarlc', 'H,e_ovno', '8s,e_res',
- 'H,e_oemid', 'H,e_oeminfo', '20s,e_res2',
- 'L,e_lfanew'))
-
- __IMAGE_FILE_HEADER_format__ = ('IMAGE_FILE_HEADER',
- ('H,Machine', 'H,NumberOfSections',
- 'L,TimeDateStamp', 'L,PointerToSymbolTable',
- 'L,NumberOfSymbols', 'H,SizeOfOptionalHeader',
- 'H,Characteristics'))
-
- __IMAGE_DATA_DIRECTORY_format__ = ('IMAGE_DATA_DIRECTORY',
- ('L,VirtualAddress', 'L,Size'))
-
-
- __IMAGE_OPTIONAL_HEADER_format__ = ('IMAGE_OPTIONAL_HEADER',
- ('H,Magic', 'B,MajorLinkerVersion',
- 'B,MinorLinkerVersion', 'L,SizeOfCode',
- 'L,SizeOfInitializedData', 'L,SizeOfUninitializedData',
- 'L,AddressOfEntryPoint', 'L,BaseOfCode', 'L,BaseOfData',
- 'L,ImageBase', 'L,SectionAlignment', 'L,FileAlignment',
- 'H,MajorOperatingSystemVersion', 'H,MinorOperatingSystemVersion',
- 'H,MajorImageVersion', 'H,MinorImageVersion',
- 'H,MajorSubsystemVersion', 'H,MinorSubsystemVersion',
- 'L,Reserved1', 'L,SizeOfImage', 'L,SizeOfHeaders',
- 'L,CheckSum', 'H,Subsystem', 'H,DllCharacteristics',
- 'L,SizeOfStackReserve', 'L,SizeOfStackCommit',
- 'L,SizeOfHeapReserve', 'L,SizeOfHeapCommit',
- 'L,LoaderFlags', 'L,NumberOfRvaAndSizes' ))
-
-
- __IMAGE_OPTIONAL_HEADER64_format__ = ('IMAGE_OPTIONAL_HEADER64',
- ('H,Magic', 'B,MajorLinkerVersion',
- 'B,MinorLinkerVersion', 'L,SizeOfCode',
- 'L,SizeOfInitializedData', 'L,SizeOfUninitializedData',
- 'L,AddressOfEntryPoint', 'L,BaseOfCode',
- 'Q,ImageBase', 'L,SectionAlignment', 'L,FileAlignment',
- 'H,MajorOperatingSystemVersion', 'H,MinorOperatingSystemVersion',
- 'H,MajorImageVersion', 'H,MinorImageVersion',
- 'H,MajorSubsystemVersion', 'H,MinorSubsystemVersion',
- 'L,Reserved1', 'L,SizeOfImage', 'L,SizeOfHeaders',
- 'L,CheckSum', 'H,Subsystem', 'H,DllCharacteristics',
- 'Q,SizeOfStackReserve', 'Q,SizeOfStackCommit',
- 'Q,SizeOfHeapReserve', 'Q,SizeOfHeapCommit',
- 'L,LoaderFlags', 'L,NumberOfRvaAndSizes' ))
-
-
- __IMAGE_NT_HEADERS_format__ = ('IMAGE_NT_HEADERS', ('L,Signature',))
-
- __IMAGE_SECTION_HEADER_format__ = ('IMAGE_SECTION_HEADER',
- ('8s,Name', 'L,Misc,Misc_PhysicalAddress,Misc_VirtualSize',
- 'L,VirtualAddress', 'L,SizeOfRawData', 'L,PointerToRawData',
- 'L,PointerToRelocations', 'L,PointerToLinenumbers',
- 'H,NumberOfRelocations', 'H,NumberOfLinenumbers',
- 'L,Characteristics'))
-
- __IMAGE_DELAY_IMPORT_DESCRIPTOR_format__ = ('IMAGE_DELAY_IMPORT_DESCRIPTOR',
- ('L,grAttrs', 'L,szName', 'L,phmod', 'L,pIAT', 'L,pINT',
- 'L,pBoundIAT', 'L,pUnloadIAT', 'L,dwTimeStamp'))
-
- __IMAGE_IMPORT_DESCRIPTOR_format__ = ('IMAGE_IMPORT_DESCRIPTOR',
- ('L,OriginalFirstThunk,Characteristics',
- 'L,TimeDateStamp', 'L,ForwarderChain', 'L,Name', 'L,FirstThunk'))
-
- __IMAGE_EXPORT_DIRECTORY_format__ = ('IMAGE_EXPORT_DIRECTORY',
- ('L,Characteristics',
- 'L,TimeDateStamp', 'H,MajorVersion', 'H,MinorVersion', 'L,Name',
- 'L,Base', 'L,NumberOfFunctions', 'L,NumberOfNames',
- 'L,AddressOfFunctions', 'L,AddressOfNames', 'L,AddressOfNameOrdinals'))
-
- __IMAGE_RESOURCE_DIRECTORY_format__ = ('IMAGE_RESOURCE_DIRECTORY',
- ('L,Characteristics',
- 'L,TimeDateStamp', 'H,MajorVersion', 'H,MinorVersion',
- 'H,NumberOfNamedEntries', 'H,NumberOfIdEntries'))
-
- __IMAGE_RESOURCE_DIRECTORY_ENTRY_format__ = ('IMAGE_RESOURCE_DIRECTORY_ENTRY',
- ('L,Name',
- 'L,OffsetToData'))
-
- __IMAGE_RESOURCE_DATA_ENTRY_format__ = ('IMAGE_RESOURCE_DATA_ENTRY',
- ('L,OffsetToData', 'L,Size', 'L,CodePage', 'L,Reserved'))
-
- __VS_VERSIONINFO_format__ = ( 'VS_VERSIONINFO',
- ('H,Length', 'H,ValueLength', 'H,Type' ))
-
- __VS_FIXEDFILEINFO_format__ = ( 'VS_FIXEDFILEINFO',
- ('L,Signature', 'L,StrucVersion', 'L,FileVersionMS', 'L,FileVersionLS',
- 'L,ProductVersionMS', 'L,ProductVersionLS', 'L,FileFlagsMask', 'L,FileFlags',
- 'L,FileOS', 'L,FileType', 'L,FileSubtype', 'L,FileDateMS', 'L,FileDateLS'))
-
- __StringFileInfo_format__ = ( 'StringFileInfo',
- ('H,Length', 'H,ValueLength', 'H,Type' ))
-
- __StringTable_format__ = ( 'StringTable',
- ('H,Length', 'H,ValueLength', 'H,Type' ))
-
- __String_format__ = ( 'String',
- ('H,Length', 'H,ValueLength', 'H,Type' ))
-
- __Var_format__ = ( 'Var', ('H,Length', 'H,ValueLength', 'H,Type' ))
-
- __IMAGE_THUNK_DATA_format__ = ('IMAGE_THUNK_DATA',
- ('L,ForwarderString,Function,Ordinal,AddressOfData',))
-
- __IMAGE_THUNK_DATA64_format__ = ('IMAGE_THUNK_DATA',
- ('Q,ForwarderString,Function,Ordinal,AddressOfData',))
-
- __IMAGE_DEBUG_DIRECTORY_format__ = ('IMAGE_DEBUG_DIRECTORY',
- ('L,Characteristics', 'L,TimeDateStamp', 'H,MajorVersion',
- 'H,MinorVersion', 'L,Type', 'L,SizeOfData', 'L,AddressOfRawData',
- 'L,PointerToRawData'))
-
- __IMAGE_BASE_RELOCATION_format__ = ('IMAGE_BASE_RELOCATION',
- ('L,VirtualAddress', 'L,SizeOfBlock') )
-
- __IMAGE_TLS_DIRECTORY_format__ = ('IMAGE_TLS_DIRECTORY',
- ('L,StartAddressOfRawData', 'L,EndAddressOfRawData',
- 'L,AddressOfIndex', 'L,AddressOfCallBacks',
- 'L,SizeOfZeroFill', 'L,Characteristics' ) )
-
- __IMAGE_TLS_DIRECTORY64_format__ = ('IMAGE_TLS_DIRECTORY',
- ('Q,StartAddressOfRawData', 'Q,EndAddressOfRawData',
- 'Q,AddressOfIndex', 'Q,AddressOfCallBacks',
- 'L,SizeOfZeroFill', 'L,Characteristics' ) )
-
- __IMAGE_BOUND_IMPORT_DESCRIPTOR_format__ = ('IMAGE_BOUND_IMPORT_DESCRIPTOR',
- ('L,TimeDateStamp', 'H,OffsetModuleName', 'H,NumberOfModuleForwarderRefs'))
-
- __IMAGE_BOUND_FORWARDER_REF_format__ = ('IMAGE_BOUND_FORWARDER_REF',
- ('L,TimeDateStamp', 'H,OffsetModuleName', 'H,Reserved') )
-
-
- def __init__(self, name=None, data=None, fast_load=None):
-
- self.sections = []
-
- self.__warnings = []
-
- self.PE_TYPE = None
-
- if not name and not data:
- return
-
- # This list will keep track of all the structures created.
- # That will allow for an easy iteration through the list
- # in order to save the modifications made
- self.__structures__ = []
-
- if not fast_load:
- fast_load = globals()['fast_load']
- self.__parse__(name, data, fast_load)
-
-
-
- def __unpack_data__(self, format, data, file_offset):
- """Apply structure format to raw data.
-
- Returns and unpacked structure object if successful, None otherwise.
- """
-
- structure = Structure(format, file_offset=file_offset)
- #if len(data) < structure.sizeof():
- # return None
-
- try:
- structure.__unpack__(data)
- except PEFormatError, err:
- self.__warnings.append(
- 'Corrupt header "%s" at file offset %d. Exception: %s' % (
- format[0], file_offset, str(err)) )
- return None
-
- self.__structures__.append(structure)
-
- return structure
-
-
-
- def __parse__(self, fname, data, fast_load):
- """Parse a Portable Executable file.
-
- Loads a PE file, parsing all its structures and making them available
- through the instance's attributes.
- """
-
- if fname:
- fd = file(fname, 'rb')
- self.__data__ = fd.read()
- fd.close()
- elif data:
- self.__data__ = data
-
-
- self.DOS_HEADER = self.__unpack_data__(
- self.__IMAGE_DOS_HEADER_format__,
- self.__data__, file_offset=0)
-
- if not self.DOS_HEADER or self.DOS_HEADER.e_magic != IMAGE_DOS_SIGNATURE:
- raise PEFormatError('DOS Header magic not found.')
-
- # OC Patch:
- # Check for sane value in e_lfanew
- #
- if self.DOS_HEADER.e_lfanew > len(self.__data__):
- raise PEFormatError('Invalid e_lfanew value, probably not a PE file')
-
- nt_headers_offset = self.DOS_HEADER.e_lfanew
-
- self.NT_HEADERS = self.__unpack_data__(
- self.__IMAGE_NT_HEADERS_format__,
- self.__data__[nt_headers_offset:],
- file_offset = nt_headers_offset)
-
- # We better check the signature right here, before the file screws
- # around with sections:
- # OC Patch:
- # Some malware will cause the Signature value to not exist at all
- if not self.NT_HEADERS or not self.NT_HEADERS.Signature:
- raise PEFormatError('NT Headers not found.')
-
- if self.NT_HEADERS.Signature != IMAGE_NT_SIGNATURE:
- raise PEFormatError('Invalid NT Headers signature.')
-
- self.FILE_HEADER = self.__unpack_data__(
- self.__IMAGE_FILE_HEADER_format__,
- self.__data__[nt_headers_offset+4:],
- file_offset = nt_headers_offset+4)
- image_flags = self.retrieve_flags(IMAGE_CHARACTERISTICS, 'IMAGE_FILE_')
-
- if not self.FILE_HEADER:
- raise PEFormatError('File Header missing')
-
- # Set the image's flags according the the Characteristics member
- self.set_flags(self.FILE_HEADER, self.FILE_HEADER.Characteristics, image_flags)
-
- optional_header_offset = \
- nt_headers_offset+4+self.FILE_HEADER.sizeof()
-
- # Note: location of sections can be controlled from PE header:
- sections_offset = optional_header_offset + self.FILE_HEADER.SizeOfOptionalHeader
-
- self.OPTIONAL_HEADER = self.__unpack_data__(
- self.__IMAGE_OPTIONAL_HEADER_format__,
- self.__data__[optional_header_offset:],
- file_offset = optional_header_offset)
-
- # According to solardesigner's findings for his
- # Tiny PE project, the optional header does not
- # need fields beyond "Subsystem" in order to be
- # loadable by the Windows loader (given that zeroes
- # are acceptable values and the header is loaded
- # in a zeroed memory page)
- # If trying to parse a full Optional Header fails
- # we try to parse it again with some 0 padding
- #
- MINIMUM_VALID_OPTIONAL_HEADER_RAW_SIZE = 69
-
- if ( self.OPTIONAL_HEADER is None and
- len(self.__data__[optional_header_offset:])
- >= MINIMUM_VALID_OPTIONAL_HEADER_RAW_SIZE ):
-
- # Add enough zeroes to make up for the unused fields
- #
- padding_length = 128
-
- # Create padding
- #
- padded_data = self.__data__[optional_header_offset:] + (
- '\0' * padding_length)
-
- self.OPTIONAL_HEADER = self.__unpack_data__(
- self.__IMAGE_OPTIONAL_HEADER_format__,
- padded_data,
- file_offset = optional_header_offset)
-
-
- # Check the Magic in the OPTIONAL_HEADER and set the PE file
- # type accordingly
- #
- if self.OPTIONAL_HEADER is not None:
-
- if self.OPTIONAL_HEADER.Magic == OPTIONAL_HEADER_MAGIC_PE:
-
- self.PE_TYPE = OPTIONAL_HEADER_MAGIC_PE
-
- elif self.OPTIONAL_HEADER.Magic == OPTIONAL_HEADER_MAGIC_PE_PLUS:
-
- self.PE_TYPE = OPTIONAL_HEADER_MAGIC_PE_PLUS
-
- self.OPTIONAL_HEADER = self.__unpack_data__(
- self.__IMAGE_OPTIONAL_HEADER64_format__,
- self.__data__[optional_header_offset:],
- file_offset = optional_header_offset)
-
- # Again, as explained above, we try to parse
- # a reduced form of the Optional Header which
- # is still valid despite not including all
- # structure members
- #
- MINIMUM_VALID_OPTIONAL_HEADER_RAW_SIZE = 69+4
-
- if ( self.OPTIONAL_HEADER is None and
- len(self.__data__[optional_header_offset:])
- >= MINIMUM_VALID_OPTIONAL_HEADER_RAW_SIZE ):
-
- padding_length = 128
- padded_data = self.__data__[optional_header_offset:] + (
- '\0' * padding_length)
- self.OPTIONAL_HEADER = self.__unpack_data__(
- self.__IMAGE_OPTIONAL_HEADER64_format__,
- padded_data,
- file_offset = optional_header_offset)
-
-
- if not self.FILE_HEADER:
- raise PEFormatError('File Header missing')
-
-
- # OC Patch:
- # Die gracefully if there is no OPTIONAL_HEADER field
- # 975440f5ad5e2e4a92c4d9a5f22f75c1
- if self.PE_TYPE is None or self.OPTIONAL_HEADER is None:
- raise PEFormatError("No Optional Header found, invalid PE32 or PE32+ file")
-
- dll_characteristics_flags = self.retrieve_flags(DLL_CHARACTERISTICS, 'IMAGE_DLL_CHARACTERISTICS_')
-
- # Set the Dll Characteristics flags according the the DllCharacteristics member
- self.set_flags(
- self.OPTIONAL_HEADER,
- self.OPTIONAL_HEADER.DllCharacteristics,
- dll_characteristics_flags)
-
-
- self.OPTIONAL_HEADER.DATA_DIRECTORY = []
- #offset = (optional_header_offset + self.FILE_HEADER.SizeOfOptionalHeader)
- offset = (optional_header_offset + self.OPTIONAL_HEADER.sizeof())
-
-
- self.NT_HEADERS.FILE_HEADER = self.FILE_HEADER
- self.NT_HEADERS.OPTIONAL_HEADER = self.OPTIONAL_HEADER
-
-
- # The NumberOfRvaAndSizes is sanitized to stay within
- # reasonable limits so can be casted to an int
- #
- if self.OPTIONAL_HEADER.NumberOfRvaAndSizes > 0x10:
- self.__warnings.append(
- 'Suspicious NumberOfRvaAndSizes in the Optional Header. ' +
- 'Normal values are never larger than 0x10, the value is: 0x%x' %
- self.OPTIONAL_HEADER.NumberOfRvaAndSizes )
-
- for i in xrange(int(0x7fffffffL & self.OPTIONAL_HEADER.NumberOfRvaAndSizes)):
-
- if len(self.__data__[offset:]) == 0:
- break
-
- if len(self.__data__[offset:]) < 8:
- data = self.__data__[offset:]+'\0'*8
- else:
- data = self.__data__[offset:]
-
- dir_entry = self.__unpack_data__(
- self.__IMAGE_DATA_DIRECTORY_format__,
- data,
- file_offset = offset)
-
- if dir_entry is None:
- break
-
- # Would fail if missing an entry
- # 1d4937b2fa4d84ad1bce0309857e70ca offending sample
- try:
- dir_entry.name = DIRECTORY_ENTRY[i]
- except (KeyError, AttributeError):
- break
-
- offset += dir_entry.sizeof()
-
- self.OPTIONAL_HEADER.DATA_DIRECTORY.append(dir_entry)
-
- # If the offset goes outside the optional header,
- # the loop is broken, regardless of how many directories
- # NumberOfRvaAndSizes says there are
- #
- # We assume a normally sized optional header, hence that we do
- # a sizeof() instead of reading SizeOfOptionalHeader.
- # Then we add a default number of drectories times their size,
- # if we go beyond that, we assume the number of directories
- # is wrong and stop processing
- if offset >= (optional_header_offset +
- self.OPTIONAL_HEADER.sizeof() + 8*16) :
-
- break
-
-
- offset = self.parse_sections(sections_offset)
-
- # OC Patch:
- # There could be a problem if there are no raw data sections
- # greater than 0
- # fc91013eb72529da005110a3403541b6 example
- # Should this throw an exception in the minimum header offset
- # can't be found?
- #
- rawDataPointers = [
- s.PointerToRawData for s in self.sections if s.PointerToRawData>0]
-
- if len(rawDataPointers) > 0:
- lowest_section_offset = min(rawDataPointers)
- else:
- lowest_section_offset = None
-
- if not lowest_section_offset or lowest_section_offset<offset:
- self.header = self.__data__[:offset]
- else:
- self.header = self.__data__[:lowest_section_offset]
-
-
- # Check whether the entry point lies within a section
- #
- if self.get_section_by_rva(self.OPTIONAL_HEADER.AddressOfEntryPoint) is not None:
-
- # Check whether the entry point lies within the file
- #
- ep_offset = self.get_offset_from_rva(self.OPTIONAL_HEADER.AddressOfEntryPoint)
- if ep_offset > len(self.__data__):
-
- self.__warnings.append(
- 'Possibly corrupt file. AddressOfEntryPoint lies outside the file. ' +
- 'AddressOfEntryPoint: 0x%x' %
- self.OPTIONAL_HEADER.AddressOfEntryPoint )
-
- else:
-
- self.__warnings.append(
- 'AddressOfEntryPoint lies outside the sections\' boundaries. ' +
- 'AddressOfEntryPoint: 0x%x' %
- self.OPTIONAL_HEADER.AddressOfEntryPoint )
-
-
- if not fast_load:
- self.parse_data_directories()
-
-
- def get_warnings(self):
- """Return the list of warnings.
-
- Non-critical problems found when parsing the PE file are
- appended to a list of warnings. This method returns the
- full list.
- """
-
- return self.__warnings
-
-
- def show_warnings(self):
- """Print the list of warnings.
-
- Non-critical problems found when parsing the PE file are
- appended to a list of warnings. This method prints the
- full list to standard output.
- """
-
- for warning in self.__warnings:
- print '>', warning
-
-
- def full_load(self):
- """Process the data directories.
-
- This mathod will load the data directories which might not have
- been loaded if the "fast_load" option was used.
- """
-
- self.parse_data_directories()
-
-
- def write(self, filename=None):
- """Write the PE file.
-
- This function will process all headers and components
- of the PE file and include all changes made (by just
- assigning to attributes in the PE objects) and write
- the changes back to a file whose name is provided as
- an argument. The filename is optional.
- The data to be written to the file will be returned
- as a 'str' object.
- """
-
- file_data = list(self.__data__)
- for struct in self.__structures__:
-
- struct_data = list(struct.__pack__())
- offset = struct.get_file_offset()
-
- file_data[offset:offset+len(struct_data)] = struct_data
-
- if hasattr(self, 'VS_VERSIONINFO'):
- if hasattr(self, 'FileInfo'):
- for entry in self.FileInfo:
- if hasattr(entry, 'StringTable'):
- for st_entry in entry.StringTable:
- for key, entry in st_entry.entries.items():
-
- offsets = st_entry.entries_offsets[key]
- lengths = st_entry.entries_lengths[key]
-
- if len( entry ) > lengths[1]:
-
- uc = zip(
- list(entry[:lengths[1]]), ['\0'] * lengths[1] )
- l = list()
- map(l.extend, uc)
-
- file_data[
- offsets[1] : offsets[1] + lengths[1]*2 ] = l
-
- else:
-
- uc = zip(
- list(entry), ['\0'] * len(entry) )
- l = list()
- map(l.extend, uc)
-
- file_data[
- offsets[1] : offsets[1] + len(entry)*2 ] = l
-
- remainder = lengths[1] - len(entry)
- file_data[
- offsets[1] + len(entry)*2 :
- offsets[1] + lengths[1]*2 ] = [
- u'\0' ] * remainder*2
-
- new_file_data = ''.join( [ chr(ord(c)) for c in file_data ] )
-
- if filename:
- f = file(filename, 'wb+')
- f.write(new_file_data)
- f.close()
-
- return new_file_data
-
-
-
- def parse_sections(self, offset):
- """Fetch the PE file sections.
-
- The sections will be readily available in the "sections" attribute.
- Its attributes will contain all the section information plus "data"
- a buffer containing the section's data.
-
- The "Characteristics" member will be processed and attributes
- representing the section characteristics (with the 'IMAGE_SCN_'
- string trimmed from the constant's names) will be added to the
- section instance.
-
- Refer to the SectionStructure class for additional info.
- """
-
- self.sections = []
-
- for i in xrange(self.FILE_HEADER.NumberOfSections):
- section = SectionStructure(self.__IMAGE_SECTION_HEADER_format__)
- if not section:
- break
- section_offset = offset + section.sizeof() * i
- section.set_file_offset(section_offset)
- section.__unpack__(self.__data__[section_offset:])
- self.__structures__.append(section)
-
- if section.SizeOfRawData > len(self.__data__):
- self.__warnings.append(
- ('Error parsing section %d. ' % i) +
- 'SizeOfRawData is larger than file.')
-
- if section.PointerToRawData > len(self.__data__):
- self.__warnings.append(
- ('Error parsing section %d. ' % i) +
- 'PointerToRawData points beyond the end of the file.')
-
- if section.Misc_VirtualSize > 0x10000000:
- self.__warnings.append(
- ('Suspicious value found parsing section %d. ' % i) +
- 'VirtualSize is extremely large > 256MiB.')
-
- if section.VirtualAddress > 0x10000000:
- self.__warnings.append(
- ('Suspicious value found parsing section %d. ' % i) +
- 'VirtualAddress is beyond 0x10000000.')
-
- #
- # Some packer used a non-aligned PointerToRawData in the sections,
- # which causes several common tools not to load the section data
- # properly as they blindly read from the indicated offset.
- # It seems that Windows will round the offset down to the largest
- # offset multiple of FileAlignment which is smaller than
- # PointerToRawData. The following code will do the same.
- #
-
- #alignment = self.OPTIONAL_HEADER.FileAlignment
- section_data_start = section.PointerToRawData
-
- if ( self.OPTIONAL_HEADER.FileAlignment != 0 and
- (section.PointerToRawData % self.OPTIONAL_HEADER.FileAlignment) != 0):
- self.__warnings.append(
- ('Error parsing section %d. ' % i) +
- 'Suspicious value for FileAlignment in the Optional Header. ' +
- 'Normally the PointerToRawData entry of the sections\' structures ' +
- 'is a multiple of FileAlignment, this might imply the file ' +
- 'is trying to confuse tools which parse this incorrectly')
-
- section_data_end = section_data_start+section.SizeOfRawData
- section.set_data(self.__data__[section_data_start:section_data_end])
-
- section_flags = self.retrieve_flags(SECTION_CHARACTERISTICS, 'IMAGE_SCN_')
-
- # Set the section's flags according the the Characteristics member
- self.set_flags(section, section.Characteristics, section_flags)
-
- if ( section.__dict__.get('IMAGE_SCN_MEM_WRITE', False) and
- section.__dict__.get('IMAGE_SCN_MEM_EXECUTE', False) ):
-
- self.__warnings.append(
- ('Suspicious flags set for section %d. ' % i) +
- 'Both IMAGE_SCN_MEM_WRITE and IMAGE_SCN_MEM_EXECUTE are set.' +
- 'This might indicate a packed executable.')
-
- self.sections.append(section)
-
- if self.FILE_HEADER.NumberOfSections > 0 and self.sections:
- return offset + self.sections[0].sizeof()*self.FILE_HEADER.NumberOfSections
- else:
- return offset
-
-
- def retrieve_flags(self, flag_dict, flag_filter):
- """Read the flags from a dictionary and return them in a usable form.
-
- Will return a list of (flag, value) for all flags in "flag_dict"
- matching the filter "flag_filter".
- """
-
- return [(f[0], f[1]) for f in flag_dict.items() if
- isinstance(f[0], str) and f[0].startswith(flag_filter)]
-
-
- def set_flags(self, obj, flag_field, flags):
- """Will process the flags and set attributes in the object accordingly.
-
- The object "obj" will gain attritutes named after the flags provided in
- "flags" and valued True/False, matching the results of applyin each
- flag value from "flags" to flag_field.
- """
-
- for flag in flags:
- if flag[1] & flag_field:
- setattr(obj, flag[0], True)
- else:
- setattr(obj, flag[0], False)
-
-
-
- def parse_data_directories(self):
- """Parse and process the PE file's data directories."""
-
- directory_parsing = (
- ('IMAGE_DIRECTORY_ENTRY_IMPORT', self.parse_import_directory),
- ('IMAGE_DIRECTORY_ENTRY_EXPORT', self.parse_export_directory),
- ('IMAGE_DIRECTORY_ENTRY_RESOURCE', self.parse_resources_directory),
- ('IMAGE_DIRECTORY_ENTRY_DEBUG', self.parse_debug_directory),
- ('IMAGE_DIRECTORY_ENTRY_BASERELOC', self.parse_relocations_directory),
- ('IMAGE_DIRECTORY_ENTRY_TLS', self.parse_directory_tls),
- ('IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT', self.parse_delay_import_directory),
- ('IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT', self.parse_directory_bound_imports) )
-
- for entry in directory_parsing:
- # OC Patch:
- #
- try:
- dir_entry = self.OPTIONAL_HEADER.DATA_DIRECTORY[
- DIRECTORY_ENTRY[entry[0]]]
- except IndexError:
- break
- if dir_entry.VirtualAddress:
- value = entry[1](dir_entry.VirtualAddress, dir_entry.Size)
- if value:
- setattr(self, entry[0][6:], value)
-
-
- def parse_directory_bound_imports(self, rva, size):
- """"""
-
- bnd_descr = Structure(self.__IMAGE_BOUND_IMPORT_DESCRIPTOR_format__)
- bnd_descr_size = bnd_descr.sizeof()
- start = rva
-
- bound_imports = []
- while True:
-
- bnd_descr = self.__unpack_data__(
- self.__IMAGE_BOUND_IMPORT_DESCRIPTOR_format__,
- self.__data__[rva:rva+bnd_descr_size],
- file_offset = rva)
- if bnd_descr is None:
- # If can't parse directory then silently return.
- # This directory does not necesarily have to be valid to
- # still have a valid PE file
-
- self.__warnings.append(
- 'The Bound Imports directory exists but can\'t be parsed.')
-
- return
-
- if bnd_descr.all_zeroes():
- break
-
- rva += bnd_descr.sizeof()
-
- forwarder_refs = []
- for idx in xrange(bnd_descr.NumberOfModuleForwarderRefs):
- # Both structures IMAGE_BOUND_IMPORT_DESCRIPTOR and
- # IMAGE_BOUND_FORWARDER_REF have the same size.
- bnd_frwd_ref = self.__unpack_data__(
- self.__IMAGE_BOUND_FORWARDER_REF_format__,
- self.__data__[rva:rva+bnd_descr_size],
- file_offset = rva)
- # OC Patch:
- if not bnd_frwd_ref:
- raise PEFormatError(
- "IMAGE_BOUND_FORWARDER_REF cannot be read")
- rva += bnd_frwd_ref.sizeof()
-
- name_str = self.get_string_from_data(
- start+bnd_frwd_ref.OffsetModuleName, self.__data__)
-
- if not name_str:
- break
- forwarder_refs.append(BoundImportRefData(
- struct = bnd_frwd_ref,
- name = name_str))
-
- name_str = self.get_string_from_data(
- start+bnd_descr.OffsetModuleName, self.__data__)
-
- if not name_str:
- break
- bound_imports.append(
- BoundImportDescData(
- struct = bnd_descr,
- name = name_str,
- entries = forwarder_refs))
-
- return bound_imports
-
-
- def parse_directory_tls(self, rva, size):
- """"""
-
- if self.PE_TYPE == OPTIONAL_HEADER_MAGIC_PE:
- format = self.__IMAGE_TLS_DIRECTORY_format__
-
- elif self.PE_TYPE == OPTIONAL_HEADER_MAGIC_PE_PLUS:
- format = self.__IMAGE_TLS_DIRECTORY64_format__
-
- tls_struct = self.__unpack_data__(
- format,
- self.get_data(rva),
- file_offset = self.get_offset_from_rva(rva))
-
- if not tls_struct:
- return None
-
- return TlsData( struct = tls_struct )
-
-
- def parse_relocations_directory(self, rva, size):
- """"""
-
- rlc = Structure(self.__IMAGE_BASE_RELOCATION_format__)
- rlc_size = rlc.sizeof()
- end = rva+size
-
- relocations = []
- while rva<end:
-
- # OC Patch:
- # Malware that has bad rva entries will cause an error.
- # Just continue on after an exception
- #
- try:
- rlc = self.__unpack_data__(
- self.__IMAGE_BASE_RELOCATION_format__,
- self.get_data(rva, rlc_size),
- file_offset = self.get_offset_from_rva(rva) )
- except PEFormatError:
- self.__warnings.append(
- 'Invalid relocation information. Can\'t read ' +
- 'data at RVA: 0x%x' % rva)
- rlc = None
-
- if not rlc:
- break
-
- reloc_entries = self.parse_relocations(
- rva+rlc_size, rlc.VirtualAddress, rlc.SizeOfBlock-rlc_size)
-
- relocations.append(
- BaseRelocationData(
- struct = rlc,
- entries = reloc_entries))
-
- if not rlc.SizeOfBlock:
- break
- rva += rlc.SizeOfBlock
-
- return relocations
-
-
- def parse_relocations(self, data_rva, rva, size):
- """"""
-
- data = self.get_data(data_rva, size)
-
- entries = []
- for idx in xrange(len(data)/2):
- word = struct.unpack('<H', data[idx*2:(idx+1)*2])[0]
- reloc_type = (word>>12)
- reloc_offset = (word&0x0fff)
- entries.append(
- RelocationData(
- type = reloc_type,
- rva = reloc_offset+rva))
-
- return entries
-
-
- def parse_debug_directory(self, rva, size):
- """"""
-
- dbg = Structure(self.__IMAGE_DEBUG_DIRECTORY_format__)
- dbg_size = dbg.sizeof()
-
- debug = []
- for idx in xrange(size/dbg_size):
- try:
- data = self.get_data(rva+dbg_size*idx, dbg_size)
- except PEFormatError, e:
- self.__warnings.append(
- 'Invalid debug information. Can\'t read ' +
- 'data at RVA: 0x%x' % rva)
- return None
-
- dbg = self.__unpack_data__(
- self.__IMAGE_DEBUG_DIRECTORY_format__,
- data, file_offset = self.get_offset_from_rva(rva+dbg_size*idx))
-
- if not dbg:
- return None
-
- debug.append(
- DebugData(
- struct = dbg))
-
- return debug
-
-
- def parse_resources_directory(self, rva, size=0, base_rva = None, level = 0):
- """Parse the resources directory.
-
- Given the rva of the resources directory, it will process all
- its entries.
-
- The root will have the corresponding member of its structure,
- IMAGE_RESOURCE_DIRECTORY plus 'entries', a list of all the
- entries in the directory.
-
- Those entries will have, correspondingly, all the structure's
- members (IMAGE_RESOURCE_DIRECTORY_ENTRY) and an additional one,
- "directory", pointing to the IMAGE_RESOURCE_DIRECTORY structure
- representing upper layers of the tree. This one will also have
- an 'entries' attribute, pointing to the 3rd, and last, level.
- Another directory with more entries. Those last entries will
- have a new atribute (both 'leaf' or 'data_entry' can be used to
- access it). This structure finally points to the resource data.
- All the members of this structure, IMAGE_RESOURCE_DATA_ENTRY,
- are available as its attributes.
- """
-
- # OC Patch:
- original_rva = rva
-
- if base_rva is None:
- base_rva = rva
-
- resources_section = self.get_section_by_rva(rva)
-
- try:
- # If the RVA is invalid all would blow up. Some EXEs seem to be
- # specially nasty and have an invalid RVA.
- data = self.get_data(rva)
- except PEFormatError, e:
- self.__warnings.append(
- 'Invalid resources directory. Can\'t read ' +
- 'directory data at RVA: 0x%x' % rva)
- return None
-
- # Get the resource directory structure, that is, the header
- # of the table preceding the actual entries
- #
- resource_dir = self.__unpack_data__(
- self.__IMAGE_RESOURCE_DIRECTORY_format__, data,
- file_offset = self.get_offset_from_rva(rva) )
- if resource_dir is None:
- # If can't parse resources directory then silently return.
- # This directory does not necesarily have to be valid to
- # still have a valid PE file
- self.__warnings.append(
- 'Invalid resources directory. Can\'t parse ' +
- 'directory data at RVA: 0x%x' % rva)
- return None
-
- dir_entries = []
-
- # Advance the rva to the positon immediately following the directory
- # table header and pointing to the first entry in the table
- #
- rva += resource_dir.sizeof()
-
- number_of_entries = (
- resource_dir.NumberOfNamedEntries +
- resource_dir.NumberOfIdEntries )
-
- strings_to_postprocess = list()
-
- for idx in xrange(number_of_entries):
-
- res = self.parse_resource_entry(rva)
- if res is None:
- self.__warnings.append(
- 'Error parsing the resources directory, ' +
- 'Entry %d is invalid, RVA = 0x%x. ' %
- (idx, rva) )
- break
-
-
- entry_name = None
- entry_id = None
-
- # If all named entries have been processed, only Id ones
- # remain
-
- if idx >= resource_dir.NumberOfNamedEntries:
- entry_id = res.Name
- else:
- ustr_offset = base_rva+res.NameOffset
- try:
- #entry_name = self.get_string_u_at_rva(ustr_offset, max_length=16)
- entry_name = UnicodeStringWrapperPostProcessor(self, ustr_offset)
- strings_to_postprocess.append(entry_name)
-
- except PEFormatError, excp:
- self.__warnings.append(
- 'Error parsing the resources directory, ' +
- 'attempting to read entry name. ' +
- 'Can\'t read unicode string at offset 0x%x' %
- (ustr_offset) )
-
-
- if res.DataIsDirectory:
- # OC Patch:
- #
- # One trick malware can do is to recursively reference
- # the next directory. This causes hilarity to ensue when
- # trying to parse everything correctly.
- # If the original RVA given to this function is equal to
- # the next one to parse, we assume that it's a trick.
- # Instead of raising a PEFormatError this would skip some
- # reasonable data so we just break.
- #
- # 9ee4d0a0caf095314fd7041a3e4404dc is the offending sample
- if original_rva == (base_rva + res.OffsetToDirectory):
-
- break
-
- else:
- entry_directory = self.parse_resources_directory(
- base_rva+res.OffsetToDirectory,
- base_rva=base_rva, level = level+1)
-
- if not entry_directory:
- break
- dir_entries.append(
- ResourceDirEntryData(
- struct = res,
- name = entry_name,
- id = entry_id,
- directory = entry_directory))
-
- else:
- struct = self.parse_resource_data_entry(
- base_rva + res.OffsetToDirectory)
-
- if struct:
- entry_data = ResourceDataEntryData(
- struct = struct,
- lang = res.Name & 0xff,
- sublang = (res.Name>>8) & 0xff)
-
- dir_entries.append(
- ResourceDirEntryData(
- struct = res,
- name = entry_name,
- id = entry_id,
- data = entry_data))
-
- else:
- break
-
-
-
- # Check if this entry contains version information
- #
- if level == 0 and res.Id == RESOURCE_TYPE['RT_VERSION']:
- if len(dir_entries)>0:
- last_entry = dir_entries[-1]
-
- rt_version_struct = None
- try:
- rt_version_struct = last_entry.directory.entries[0].directory.entries[0].data.struct
- except:
- # Maybe a malformed directory structure...?
- # Lets ignore it
- pass
-
- if rt_version_struct is not None:
- self.parse_version_information(rt_version_struct)
-
- rva += res.sizeof()
-
-
- string_rvas = [s.get_rva() for s in strings_to_postprocess]
- string_rvas.sort()
-
- for idx, s in enumerate(strings_to_postprocess):
- s.render_pascal_16()
-
-
- resource_directory_data = ResourceDirData(
- struct = resource_dir,
- entries = dir_entries)
-
- return resource_directory_data
-
-
- def parse_resource_data_entry(self, rva):
- """Parse a data entry from the resources directory."""
-
- try:
- # If the RVA is invalid all would blow up. Some EXEs seem to be
- # specially nasty and have an invalid RVA.
- data = self.get_data(rva)
- except PEFormatError, excp:
- self.__warnings.append(
- 'Error parsing a resource directory data entry, ' +
- 'the RVA is invalid: 0x%x' % ( rva ) )
- return None
-
- data_entry = self.__unpack_data__(
- self.__IMAGE_RESOURCE_DATA_ENTRY_format__, data,
- file_offset = self.get_offset_from_rva(rva) )
-
- return data_entry
-
-
- def parse_resource_entry(self, rva):
- """Parse a directory entry from the resources directory."""
-
- resource = self.__unpack_data__(
- self.__IMAGE_RESOURCE_DIRECTORY_ENTRY_format__, self.get_data(rva),
- file_offset = self.get_offset_from_rva(rva) )
-
- if resource is None:
- return None
-
- #resource.NameIsString = (resource.Name & 0x80000000L) >> 31
- resource.NameOffset = resource.Name & 0x7FFFFFFFL
-
- resource.__pad = resource.Name & 0xFFFF0000L
- resource.Id = resource.Name & 0x0000FFFFL
-
- resource.DataIsDirectory = (resource.OffsetToData & 0x80000000L) >> 31
- resource.OffsetToDirectory = resource.OffsetToData & 0x7FFFFFFFL
-
- return resource
-
-
- def parse_version_information(self, version_struct):
- """Parse version information structure.
-
- The date will be made available in three attributes of the PE object.
-
- VS_VERSIONINFO will contain the first three fields of the main structure:
- 'Length', 'ValueLength', and 'Type'
-
- VS_FIXEDFILEINFO will hold the rest of the fields, accessible as sub-attributes:
- 'Signature', 'StrucVersion', 'FileVersionMS', 'FileVersionLS',
- 'ProductVersionMS', 'ProductVersionLS', 'FileFlagsMask', 'FileFlags',
- 'FileOS', 'FileType', 'FileSubtype', 'FileDateMS', 'FileDateLS'
-
- FileInfo is a list of all StringFileInfo and VarFileInfo structures.
-
- StringFileInfo structures will have a list as an attribute named 'StringTable'
- containing all the StringTable structures. Each of those structures contains a
- dictionary 'entries' with all the key/value version information string pairs.
-
- VarFileInfo structures will have a list as an attribute named 'Var' containing
- all Var structures. Each Var structure will have a dictionary as an attribute
- named 'entry' which will contain the name and value of the Var.
- """
-
-
- # Retrieve the data for the version info resource
- #
- start_offset = self.get_offset_from_rva( version_struct.OffsetToData )
- raw_data = self.__data__[ start_offset : start_offset+version_struct.Size ]
-
-
- # Map the main structure and the subsequent string
- #
- versioninfo_struct = self.__unpack_data__(
- self.__VS_VERSIONINFO_format__, raw_data,
- file_offset = start_offset )
-
- if versioninfo_struct is None:
- return
-
- ustr_offset = version_struct.OffsetToData + versioninfo_struct.sizeof()
- try:
- versioninfo_string = self.get_string_u_at_rva( ustr_offset )
- except PEFormatError, excp:
- self.__warnings.append(
- 'Error parsing the version information, ' +
- 'attempting to read VS_VERSION_INFO string. Can\'t ' +
- 'read unicode string at offset 0x%x' % (
- ustr_offset ) )
-
- versioninfo_string = None
-
- # If the structure does not contain the expected name, it's assumed to be invalid
- #
- if versioninfo_string != u'VS_VERSION_INFO':
-
- self.__warnings.append('Invalid VS_VERSION_INFO block')
- return
-
-
- # Set the PE object's VS_VERSIONINFO to this one
- #
- self.VS_VERSIONINFO = versioninfo_struct
-
- # The the Key attribute to point to the unicode string identifying the structure
- #
- self.VS_VERSIONINFO.Key = versioninfo_string
-
-
- # Process the fixed version information, get the offset and structure
- #
- fixedfileinfo_offset = self.dword_align(
- versioninfo_struct.sizeof() + 2 * (len(versioninfo_string) + 1),
- version_struct.OffsetToData)
- fixedfileinfo_struct = self.__unpack_data__(
- self.__VS_FIXEDFILEINFO_format__,
- raw_data[fixedfileinfo_offset:],
- file_offset = start_offset+fixedfileinfo_offset )
-
- if not fixedfileinfo_struct:
- return
-
-
- # Set the PE object's VS_FIXEDFILEINFO to this one
- #
- self.VS_FIXEDFILEINFO = fixedfileinfo_struct
-
-
- # Start parsing all the StringFileInfo and VarFileInfo structures
- #
-
- # Get the first one
- #
- stringfileinfo_offset = self.dword_align(
- fixedfileinfo_offset + fixedfileinfo_struct.sizeof(),
- version_struct.OffsetToData)
- original_stringfileinfo_offset = stringfileinfo_offset
-
-
- # Set the PE object's attribute that will contain them all.
- #
- self.FileInfo = list()
-
-
- while True:
-
- # Process the StringFileInfo/VarFileInfo struct
- #
- stringfileinfo_struct = self.__unpack_data__(
- self.__StringFileInfo_format__,
- raw_data[stringfileinfo_offset:],
- file_offset = start_offset+stringfileinfo_offset )
-
- if stringfileinfo_struct is None:
- self.__warnings.append(
- 'Error parsing StringFileInfo/VarFileInfo struct' )
- return None
-
- # Get the subsequent string defining the structure.
- #
- ustr_offset = ( version_struct.OffsetToData +
- stringfileinfo_offset + versioninfo_struct.sizeof() )
- try:
- stringfileinfo_string = self.get_string_u_at_rva( ustr_offset )
- except PEFormatError, excp:
- self.__warnings.append(
- 'Error parsing the version information, ' +
- 'attempting to read StringFileInfo string. Can\'t ' +
- 'read unicode string at offset 0x%x' % ( ustr_offset ) )
- break
-
- # Set such string as the Key attribute
- #
- stringfileinfo_struct.Key = stringfileinfo_string
-
-
- # Append the structure to the PE object's list
- #
- self.FileInfo.append(stringfileinfo_struct)
-
-
- # Parse a StringFileInfo entry
- #
- if stringfileinfo_string == u'StringFileInfo':
-
- if stringfileinfo_struct.Type == 1 and stringfileinfo_struct.ValueLength == 0:
-
- stringtable_offset = self.dword_align(
- stringfileinfo_offset + stringfileinfo_struct.sizeof() +
- 2*(len(stringfileinfo_string)+1),
- version_struct.OffsetToData)
-
- stringfileinfo_struct.StringTable = list()
-
- # Process the String Table entries
- #
- while True:
- stringtable_struct = self.__unpack_data__(
- self.__StringTable_format__,
- raw_data[stringtable_offset:],
- file_offset = start_offset+stringtable_offset )
-
- if not stringtable_struct:
- break
-
- ustr_offset = ( version_struct.OffsetToData + stringtable_offset +
- stringtable_struct.sizeof() )
- try:
- stringtable_string = self.get_string_u_at_rva( ustr_offset )
- except PEFormatError, excp:
- self.__warnings.append(
- 'Error parsing the version information, ' +
- 'attempting to read StringTable string. Can\'t ' +
- 'read unicode string at offset 0x%x' % ( ustr_offset ) )
- break
-
- stringtable_struct.LangID = stringtable_string
- stringtable_struct.entries = dict()
- stringtable_struct.entries_offsets = dict()
- stringtable_struct.entries_lengths = dict()
- stringfileinfo_struct.StringTable.append(stringtable_struct)
-
- entry_offset = self.dword_align(
- stringtable_offset + stringtable_struct.sizeof() +
- 2*(len(stringtable_string)+1),
- version_struct.OffsetToData)
-
- # Process all entries in the string table
- #
-
- while entry_offset < stringtable_offset + stringtable_struct.Length:
-
- string_struct = self.__unpack_data__(
- self.__String_format__, raw_data[entry_offset:],
- file_offset = start_offset+entry_offset )
-
- if not string_struct:
- break
-
- ustr_offset = ( version_struct.OffsetToData + entry_offset +
- string_struct.sizeof() )
- try:
- key = self.get_string_u_at_rva( ustr_offset )
- key_offset = self.get_offset_from_rva( ustr_offset )
- except PEFormatError, excp:
- self.__warnings.append(
- 'Error parsing the version information, ' +
- 'attempting to read StringTable Key string. Can\'t ' +
- 'read unicode string at offset 0x%x' % ( ustr_offset ) )
- break
-
- value_offset = self.dword_align(
- 2*(len(key)+1) + entry_offset + string_struct.sizeof(),
- version_struct.OffsetToData)
-
- ustr_offset = version_struct.OffsetToData + value_offset
- try:
- value = self.get_string_u_at_rva( ustr_offset,
- max_length = string_struct.ValueLength )
- value_offset = self.get_offset_from_rva( ustr_offset )
- except PEFormatError, excp:
- self.__warnings.append(
- 'Error parsing the version information, ' +
- 'attempting to read StringTable Value string. ' +
- 'Can\'t read unicode string at offset 0x%x' % (
- ustr_offset ) )
- break
-
- if string_struct.Length == 0:
- entry_offset = stringtable_offset + stringtable_struct.Length
- else:
- entry_offset = self.dword_align(
- string_struct.Length+entry_offset, version_struct.OffsetToData)
-
- key_as_char = []
- for c in key:
- if ord(c)>128:
- key_as_char.append('\\x%02x' %ord(c))
- else:
- key_as_char.append(c)
-
- key_as_char = ''.join(key_as_char)
-
- setattr(stringtable_struct, key_as_char, value)
- stringtable_struct.entries[key] = value
- stringtable_struct.entries_offsets[key] = (key_offset, value_offset)
- stringtable_struct.entries_lengths[key] = (len(key), len(value))
-
-
- stringtable_offset = self.dword_align(
- stringtable_struct.Length + stringtable_offset,
- version_struct.OffsetToData)
- if stringtable_offset >= stringfileinfo_struct.Length:
- break
-
- # Parse a VarFileInfo entry
- #
- elif stringfileinfo_string == u'VarFileInfo':
-
- varfileinfo_struct = stringfileinfo_struct
- varfileinfo_struct.name = 'VarFileInfo'
-
- if varfileinfo_struct.Type == 1 and varfileinfo_struct.ValueLength == 0:
-
- var_offset = self.dword_align(
- stringfileinfo_offset + varfileinfo_struct.sizeof() +
- 2*(len(stringfileinfo_string)+1),
- version_struct.OffsetToData)
-
- varfileinfo_struct.Var = list()
-
- # Process all entries
- #
-
- while True:
- var_struct = self.__unpack_data__(
- self.__Var_format__,
- raw_data[var_offset:],
- file_offset = start_offset+var_offset )
-
- if not var_struct:
- break
-
- ustr_offset = ( version_struct.OffsetToData + var_offset +
- var_struct.sizeof() )
- try:
- var_string = self.get_string_u_at_rva( ustr_offset )
- except PEFormatError, excp:
- self.__warnings.append(
- 'Error parsing the version information, ' +
- 'attempting to read VarFileInfo Var string. ' +
- 'Can\'t read unicode string at offset 0x%x' % (ustr_offset))
- break
-
-
- varfileinfo_struct.Var.append(var_struct)
-
- varword_offset = self.dword_align(
- 2*(len(var_string)+1) + var_offset + var_struct.sizeof(),
- version_struct.OffsetToData)
- orig_varword_offset = varword_offset
-
- while varword_offset < orig_varword_offset + var_struct.ValueLength:
- word1 = self.get_word_from_data(
- raw_data[varword_offset:varword_offset+2], 0)
- word2 = self.get_word_from_data(
- raw_data[varword_offset+2:varword_offset+4], 0)
- varword_offset += 4
-
- var_struct.entry = {var_string: '0x%04x 0x%04x' % (word1, word2)}
-
- var_offset = self.dword_align(
- var_offset+var_struct.Length, version_struct.OffsetToData)
-
- if var_offset <= var_offset+var_struct.Length:
- break
-
-
-
- # Increment and align the offset
- #
- stringfileinfo_offset = self.dword_align(
- stringfileinfo_struct.Length+stringfileinfo_offset,
- version_struct.OffsetToData)
-
- # Check if all the StringFileInfo and VarFileInfo items have been processed
- #
- if stringfileinfo_struct.Length == 0 or stringfileinfo_offset >= versioninfo_struct.Length:
- break
-
-
-
- def parse_export_directory(self, rva, size):
- """Parse the export directory.
-
- Given the rva of the export directory, it will process all
- its entries.
-
- The exports will be made available through a list "exports"
- containing a tuple with the following elements:
-
- (ordinal, symbol_address, symbol_name)
-
- And also through a dicionary "exports_by_ordinal" whose keys
- will be the ordinals and the values tuples of the from:
-
- (symbol_address, symbol_name)
-
- The symbol addresses are relative, not absolute.
- """
-
- try:
- export_dir = self.__unpack_data__(
- self.__IMAGE_EXPORT_DIRECTORY_format__, self.get_data(rva),
- file_offset = self.get_offset_from_rva(rva) )
- except PEFormatError:
- self.__warnings.append(
- 'Error parsing export directory at RVA: 0x%x' % ( rva ) )
- return
-
- if not export_dir:
- return
-
- try:
- address_of_names = self.get_data(
- export_dir.AddressOfNames, export_dir.NumberOfNames*4)
- address_of_name_ordinals = self.get_data(
- export_dir.AddressOfNameOrdinals, export_dir.NumberOfNames*4)
- address_of_functions = self.get_data(
- export_dir.AddressOfFunctions, export_dir.NumberOfFunctions*4)
- except PEFormatError:
- self.__warnings.append(
- 'Error parsing export directory at RVA: 0x%x' % ( rva ) )
- return
-
- exports = []
-
- for i in xrange(export_dir.NumberOfNames):
-
-
- symbol_name = self.get_string_at_rva(
- self.get_dword_from_data(address_of_names, i))
-
- symbol_ordinal = self.get_word_from_data(
- address_of_name_ordinals, i)
-
-
- if symbol_ordinal*4<len(address_of_functions):
- symbol_address = self.get_dword_from_data(
- address_of_functions, symbol_ordinal)
- else:
- # Corrupt? a bad pointer... we assume it's all
- # useless, no exports
- return None
-
- # If the funcion's rva points within the export directory
- # it will point to a string with the forwarded symbol's string
- # instead of pointing the the function start address.
-
- if symbol_address>=rva and symbol_address<rva+size:
- forwarder_str = self.get_string_at_rva(symbol_address)
- else:
- forwarder_str = None
-
-
- exports.append(
- ExportData(
- ordinal = export_dir.Base+symbol_ordinal,
- address = symbol_address,
- name = symbol_name,
- forwarder = forwarder_str))
-
- ordinals = [exp.ordinal for exp in exports]
-
- for idx in xrange(export_dir.NumberOfFunctions):
-
- if not idx+export_dir.Base in ordinals:
- symbol_address = self.get_dword_from_data(
- address_of_functions,
- idx)
-
- #
- # Checking for forwarder again.
- #
- if symbol_address>=rva and symbol_address<rva+size:
- forwarder_str = self.get_string_at_rva(symbol_address)
- else:
- forwarder_str = None
-
- exports.append(
- ExportData(
- ordinal = export_dir.Base+idx,
- address = symbol_address,
- name = None,
- forwarder = forwarder_str))
-
- return ExportDirData(
- struct = export_dir,
- symbols = exports)
-
-
- def dword_align(self, offset, base):
- offset += base
- return (offset+3) - ((offset+3)%4) - base
-
-
-
- def parse_delay_import_directory(self, rva, size):
- """Walk and parse the delay import directory."""
-
- import_descs = []
- while True:
- try:
- # If the RVA is invalid all would blow up. Some PEs seem to be
- # specially nasty and have an invalid RVA.
- data = self.get_data(rva)
- except PEFormatError, e:
- self.__warnings.append(
- 'Error parsing the Delay import directory at RVA: 0x%x' % ( rva ) )
- break
-
- import_desc = self.__unpack_data__(
- self.__IMAGE_DELAY_IMPORT_DESCRIPTOR_format__,
- data, file_offset = self.get_offset_from_rva(rva) )
-
-
- # If the structure is all zeores, we reached the end of the list
- if not import_desc or import_desc.all_zeroes():
- break
-
-
- rva += import_desc.sizeof()
-
- try:
- import_data = self.parse_imports(
- import_desc.pINT,
- import_desc.pIAT,
- None)
- except PEFormatError, e:
- self.__warnings.append(
- 'Error parsing the Delay import directory. ' +
- 'Invalid import data at RVA: 0x%x' % ( rva ) )
- break
-
- if not import_data:
- continue
-
-
- dll = self.get_string_at_rva(import_desc.szName)
- if dll:
- import_descs.append(
- ImportDescData(
- struct = import_desc,
- imports = import_data,
- dll = dll))
-
- return import_descs
-
-
-
- def parse_import_directory(self, rva, size):
- """Walk and parse the import directory."""
-
- import_descs = []
- while True:
- try:
- # If the RVA is invalid all would blow up. Some EXEs seem to be
- # specially nasty and have an invalid RVA.
- data = self.get_data(rva)
- except PEFormatError, e:
- self.__warnings.append(
- 'Error parsing the Import directory at RVA: 0x%x' % ( rva ) )
- break
-
- import_desc = self.__unpack_data__(
- self.__IMAGE_IMPORT_DESCRIPTOR_format__,
- data, file_offset = self.get_offset_from_rva(rva) )
-
- # If the structure is all zeores, we reached the end of the list
- if not import_desc or import_desc.all_zeroes():
- break
-
- rva += import_desc.sizeof()
-
- try:
- import_data = self.parse_imports(
- import_desc.OriginalFirstThunk,
- import_desc.FirstThunk,
- import_desc.ForwarderChain)
- except PEFormatError, excp:
- self.__warnings.append(
- 'Error parsing the Import directory. ' +
- 'Invalid Import data at RVA: 0x%x' % ( rva ) )
- break
- #raise excp
-
- if not import_data:
- continue
-
- dll = self.get_string_at_rva(import_desc.Name)
- if dll:
- import_descs.append(
- ImportDescData(
- struct = import_desc,
- imports = import_data,
- dll = dll))
-
- return import_descs
-
-
-
- def parse_imports(self, original_first_thunk, first_thunk, forwarder_chain):
- """Parse the imported symbols.
-
- It will fill a list, which will be avalable as the dictionary
- attribute "imports". Its keys will be the DLL names and the values
- all the symbols imported from that object.
- """
-
- imported_symbols = []
- imports_section = self.get_section_by_rva(first_thunk)
- if not imports_section:
- raise PEFormatError, 'Invalid/corrupt imports.'
-
-
- # Import Lookup Table. Contains ordinals or pointers to strings.
- ilt = self.get_import_table(original_first_thunk)
- # Import Address Table. May have identical content to ILT if
- # PE file is not bounded, Will contain the address of the
- # imported symbols once the binary is loaded or if it is already
- # bound.
- iat = self.get_import_table(first_thunk)
-
- # OC Patch:
- # Would crash if iat or ilt had None type
- if not iat and not ilt:
- raise PEFormatError(
- 'Invalid Import Table information. ' +
- 'Both ILT and IAT appear to be broken.')
-
- if not iat and ilt:
- table = ilt
- elif iat and not ilt:
- table = iat
- elif ilt and ((len(ilt) and len(iat)==0) or (len(ilt) == len(iat))):
- table = ilt
- elif (ilt and len(ilt))==0 and (iat and len(iat)):
- table = iat
- else:
- return None
-
- for idx in xrange(len(table)):
-
- imp_ord = None
- imp_hint = None
- imp_name = None
- hint_name_table_rva = None
-
- if table[idx].AddressOfData:
-
- if self.PE_TYPE == OPTIONAL_HEADER_MAGIC_PE:
- ordinal_flag = IMAGE_ORDINAL_FLAG
- elif self.PE_TYPE == OPTIONAL_HEADER_MAGIC_PE_PLUS:
- ordinal_flag = IMAGE_ORDINAL_FLAG64
-
- # If imported by ordinal, we will append the ordinal number
- #
- if table[idx].AddressOfData & ordinal_flag:
- import_by_ordinal = True
- imp_ord = table[idx].AddressOfData & 0xffff
- imp_name = None
- else:
- import_by_ordinal = False
- try:
- hint_name_table_rva = table[idx].AddressOfData & 0x7fffffff
- data = self.get_data(hint_name_table_rva, 2)
- # Get the Hint
- imp_hint = self.get_word_from_data(data, 0)
- imp_name = self.get_string_at_rva(table[idx].AddressOfData+2)
- except PEFormatError, e:
- pass
-
- imp_address = first_thunk+self.OPTIONAL_HEADER.ImageBase+idx*4
-
- if iat and ilt and ilt[idx].AddressOfData != iat[idx].AddressOfData:
- imp_bound = iat[idx].AddressOfData
- else:
- imp_bound = None
-
- if imp_name != '' and (imp_ord or imp_name):
- imported_symbols.append(
- ImportData(
- import_by_ordinal = import_by_ordinal,
- ordinal = imp_ord,
- hint = imp_hint,
- name = imp_name,
- bound = imp_bound,
- address = imp_address,
- hint_name_table_rva = hint_name_table_rva))
-
- return imported_symbols
-
-
-
- def get_import_table(self, rva):
-
- table = []
-
- while True and rva:
- try:
- data = self.get_data(rva)
- except PEFormatError, e:
- self.__warnings.append(
- 'Error parsing the import table. ' +
- 'Invalid data at RVA: 0x%x' % ( rva ) )
- return None
-
- if self.PE_TYPE == OPTIONAL_HEADER_MAGIC_PE:
- format = self.__IMAGE_THUNK_DATA_format__
- elif self.PE_TYPE == OPTIONAL_HEADER_MAGIC_PE_PLUS:
- format = self.__IMAGE_THUNK_DATA64_format__
-
- thunk_data = self.__unpack_data__(
- format, data, file_offset=self.get_offset_from_rva(rva) )
-
- if not thunk_data or thunk_data.all_zeroes():
- break
-
- rva += thunk_data.sizeof()
-
- table.append(thunk_data)
-
- return table
-
-
- def get_memory_mapped_image(self, max_virtual_address=0x10000000, ImageBase=None):
- """Returns the data corresponding to the memory layout of the PE file.
-
- The data includes the PE header and the sections loaded at offsets
- corresponding to their relative virtual addresses. (the VirtualAddress
- section header member).
- Any offset in this data corresponds to the absolute memory address
- ImageBase+offset.
-
- The optional argument 'max_virtual_address' provides with means of limiting
- which section are processed.
- Any section with their VirtualAddress beyond this value will be skipped.
- Normally, sections with values beyond this range are just there to confuse
- tools. It's a common trick to see in packed executables.
-
- If the 'ImageBase' optional argument is supplied, the file's relocations
- will be applied to the image by calling the 'relocate_image()' method.
- """
-
- # Collect all sections in one code block
- data = self.header
- for section in self.sections:
-
- # Miscellanous integrity tests.
- # Some packer will set these to bogus values to
- # make tools go nuts.
- #
- if section.Misc_VirtualSize == 0 or section.SizeOfRawData == 0:
- continue
-
- if section.SizeOfRawData > len(self.__data__):
- continue
-
- if section.PointerToRawData > len(self.__data__):
- continue
-
- if section.VirtualAddress >= max_virtual_address:
- continue
-
- padding_length = section.VirtualAddress - len(data)
-
- if padding_length>0:
- data += '\0'*padding_length
- elif padding_length<0:
- data = data[:padding_length]
-
- data += section.data
-
- return data
-
-
- def get_data(self, rva, length=None):
- """Get data regardless of the section where it lies on.
-
- Given a rva and the size of the chunk to retrieve, this method
- will find the section where the data lies and return the data.
- """
-
- s = self.get_section_by_rva(rva)
-
- if not s:
- if rva<len(self.header):
- if length:
- end = rva+length
- else:
- end = None
- return self.header[rva:end]
-
- raise PEFormatError, 'data at RVA can\'t be fetched. Corrupt header?'
-
- return s.get_data(rva, length)
-
-
- def get_rva_from_offset(self, offset):
- """Get the rva corresponding to this file offset. """
-
- s = self.get_section_by_offset(offset)
- if not s:
- raise PEFormatError("specified offset (0x%x) doesn't belong to any section." % offset)
- return s.get_rva_from_offset(offset)
-
- def get_offset_from_rva(self, rva):
- """Get the file offset corresponding to this rva.
-
- Given a rva , this method will find the section where the
- data lies and return the offset within the file.
- """
-
- s = self.get_section_by_rva(rva)
- if not s:
-
- raise PEFormatError, 'data at RVA can\'t be fetched. Corrupt header?'
-
- return s.get_offset_from_rva(rva)
-
-
- def get_string_at_rva(self, rva):
- """Get an ASCII string located at the given address."""
-
- s = self.get_section_by_rva(rva)
- if not s:
- if rva<len(self.header):
- return self.get_string_from_data(rva, self.header)
- return None
-
- return self.get_string_from_data(rva-s.VirtualAddress, s.data)
-
-
- def get_string_from_data(self, offset, data):
- """Get an ASCII string from within the data."""
-
- # OC Patch
- b = None
-
- try:
- b = data[offset]
- except IndexError:
- return ''
-
- s = ''
- while ord(b):
- s += b
- offset += 1
- try:
- b = data[offset]
- except IndexError:
- break
-
- return s
-
-
- def get_string_u_at_rva(self, rva, max_length = 2**16):
- """Get an Unicode string located at the given address."""
-
- try:
- # If the RVA is invalid all would blow up. Some EXEs seem to be
- # specially nasty and have an invalid RVA.
- data = self.get_data(rva, 2)
- except PEFormatError, e:
- return None
-
- #length = struct.unpack('<H', data)[0]
-
- s = u''
- for idx in xrange(max_length):
- try:
- uchr = struct.unpack('<H', self.get_data(rva+2*idx, 2))[0]
- except struct.error:
- break
-
- if unichr(uchr) == u'\0':
- break
- s += unichr(uchr)
-
- return s
-
-
- def get_section_by_offset(self, offset):
- """Get the section containing the given file offset."""
-
- sections = [s for s in self.sections if s.contains_offset(offset)]
-
- if sections:
- return sections[0]
-
- return None
-
-
- def get_section_by_rva(self, rva):
- """Get the section containing the given address."""
-
- sections = [s for s in self.sections if s.contains_rva(rva)]
-
- if sections:
- return sections[0]
-
- return None
-
- def __str__(self):
- return self.dump_info()
-
-
- def print_info(self):
- """Print all the PE header information in a human readable from."""
- print self.dump_info()
-
-
- def dump_info(self, dump=None):
- """Dump all the PE header information into human readable string."""
-
-
- if dump is None:
- dump = Dump()
-
- warnings = self.get_warnings()
- if warnings:
- dump.add_header('Parsing Warnings')
- for warning in warnings:
- dump.add_line(warning)
- dump.add_newline()
-
-
- dump.add_header('DOS_HEADER')
- dump.add_lines(self.DOS_HEADER.dump())
- dump.add_newline()
-
- dump.add_header('NT_HEADERS')
- dump.add_lines(self.NT_HEADERS.dump())
- dump.add_newline()
-
- dump.add_header('FILE_HEADER')
- dump.add_lines(self.FILE_HEADER.dump())
-
- image_flags = self.retrieve_flags(IMAGE_CHARACTERISTICS, 'IMAGE_FILE_')
-
- dump.add('Flags: ')
- flags = []
- for flag in image_flags:
- if getattr(self.FILE_HEADER, flag[0]):
- flags.append(flag[0])
- dump.add_line(', '.join(flags))
- dump.add_newline()
-
- if hasattr(self, 'OPTIONAL_HEADER') and self.OPTIONAL_HEADER is not None:
- dump.add_header('OPTIONAL_HEADER')
- dump.add_lines(self.OPTIONAL_HEADER.dump())
-
- dll_characteristics_flags = self.retrieve_flags(DLL_CHARACTERISTICS, 'IMAGE_DLL_CHARACTERISTICS_')
-
- dump.add('DllCharacteristics: ')
- flags = []
- for flag in dll_characteristics_flags:
- if getattr(self.OPTIONAL_HEADER, flag[0]):
- flags.append(flag[0])
- dump.add_line(', '.join(flags))
- dump.add_newline()
-
-
- dump.add_header('PE Sections')
-
- section_flags = self.retrieve_flags(SECTION_CHARACTERISTICS, 'IMAGE_SCN_')
-
- for section in self.sections:
- dump.add_lines(section.dump())
- dump.add('Flags: ')
- flags = []
- for flag in section_flags:
- if getattr(section, flag[0]):
- flags.append(flag[0])
- dump.add_line(', '.join(flags))
- dump.add_line('Entropy: %f (Min=0.0, Max=8.0)' % section.get_entropy() )
- if md5 is not None:
- dump.add_line('MD5 hash: %s' % section.get_hash_md5() )
- if sha1 is not None:
- dump.add_line('SHA-1 hash: %s' % section.get_hash_sha1() )
- if sha256 is not None:
- dump.add_line('SHA-256 hash: %s' % section.get_hash_sha256() )
- if sha512 is not None:
- dump.add_line('SHA-512 hash: %s' % section.get_hash_sha512() )
- dump.add_newline()
-
-
-
- if (hasattr(self, 'OPTIONAL_HEADER') and
- hasattr(self.OPTIONAL_HEADER, 'DATA_DIRECTORY') ):
-
- dump.add_header('Directories')
- for idx in xrange(len(self.OPTIONAL_HEADER.DATA_DIRECTORY)):
- directory = self.OPTIONAL_HEADER.DATA_DIRECTORY[idx]
- dump.add_lines(directory.dump())
- dump.add_newline()
-
-
- if hasattr(self, 'VS_VERSIONINFO'):
- dump.add_header('Version Information')
- dump.add_lines(self.VS_VERSIONINFO.dump())
- dump.add_newline()
-
- if hasattr(self, 'VS_FIXEDFILEINFO'):
- dump.add_lines(self.VS_FIXEDFILEINFO.dump())
- dump.add_newline()
-
- if hasattr(self, 'FileInfo'):
- for entry in self.FileInfo:
- dump.add_lines(entry.dump())
- dump.add_newline()
-
- if hasattr(entry, 'StringTable'):
- for st_entry in entry.StringTable:
- [dump.add_line(' '+line) for line in st_entry.dump()]
- dump.add_line(' LangID: '+st_entry.LangID)
- dump.add_newline()
- for str_entry in st_entry.entries.items():
- dump.add_line(' '+str_entry[0]+': '+str_entry[1])
- dump.add_newline()
-
- elif hasattr(entry, 'Var'):
- for var_entry in entry.Var:
- if hasattr(var_entry, 'entry'):
- [dump.add_line(' '+line) for line in var_entry.dump()]
- dump.add_line(
- ' ' + var_entry.entry.keys()[0] +
- ': ' + var_entry.entry.values()[0])
-
- dump.add_newline()
-
-
-
- if hasattr(self, 'DIRECTORY_ENTRY_EXPORT'):
- dump.add_header('Exported symbols')
- dump.add_lines(self.DIRECTORY_ENTRY_EXPORT.struct.dump())
- dump.add_newline()
- dump.add_line('%-10s %-10s %s' % ('Ordinal', 'RVA', 'Name'))
- for export in self.DIRECTORY_ENTRY_EXPORT.symbols:
- dump.add('%-10d 0x%08Xh %s' % (
- export.ordinal, export.address, export.name))
- if export.forwarder:
- dump.add_line(' forwarder: %s' % export.forwarder)
- else:
- dump.add_newline()
-
- dump.add_newline()
-
- if hasattr(self, 'DIRECTORY_ENTRY_IMPORT'):
- dump.add_header('Imported symbols')
- for module in self.DIRECTORY_ENTRY_IMPORT:
- dump.add_lines(module.struct.dump())
- dump.add_newline()
- for symbol in module.imports:
-
- if symbol.import_by_ordinal is True:
- dump.add('%s Ordinal[%s] (Imported by Ordinal)' % (
- module.dll, str(symbol.ordinal)))
- else:
- dump.add('%s.%s Hint[%s]' % (
- module.dll, symbol.name, str(symbol.hint)))
-
- if symbol.bound:
- dump.add_line(' Bound: 0x%08X' % (symbol.bound))
- else:
- dump.add_newline()
- dump.add_newline()
-
-
- if hasattr(self, 'DIRECTORY_ENTRY_BOUND_IMPORT'):
- dump.add_header('Bound imports')
- for bound_imp_desc in self.DIRECTORY_ENTRY_BOUND_IMPORT:
-
- dump.add_lines(bound_imp_desc.struct.dump())
- dump.add_line('DLL: %s' % bound_imp_desc.name)
- dump.add_newline()
-
- for bound_imp_ref in bound_imp_desc.entries:
- dump.add_lines(bound_imp_ref.struct.dump(), 4)
- dump.add_line('DLL: %s' % bound_imp_ref.name, 4)
- dump.add_newline()
-
-
- if hasattr(self, 'DIRECTORY_ENTRY_DELAY_IMPORT'):
- dump.add_header('Delay Imported symbols')
- for module in self.DIRECTORY_ENTRY_DELAY_IMPORT:
-
- dump.add_lines(module.struct.dump())
- dump.add_newline()
-
- for symbol in module.imports:
- if symbol.import_by_ordinal is True:
- dump.add('%s Ordinal[%s] (Imported by Ordinal)' % (
- module.dll, str(symbol.ordinal)))
- else:
- dump.add('%s.%s Hint[%s]' % (
- module.dll, symbol.name, str(symbol.hint)))
-
- if symbol.bound:
- dump.add_line(' Bound: 0x%08X' % (symbol.bound))
- else:
- dump.add_newline()
- dump.add_newline()
-
-
- if hasattr(self, 'DIRECTORY_ENTRY_RESOURCE'):
- dump.add_header('Resource directory')
-
- dump.add_lines(self.DIRECTORY_ENTRY_RESOURCE.struct.dump())
-
- for resource_type in self.DIRECTORY_ENTRY_RESOURCE.entries:
-
- if resource_type.name is not None:
- dump.add_line('Name: [%s]' % resource_type.name, 2)
- else:
- dump.add_line('Id: [0x%X] (%s)' % (
- resource_type.struct.Id, RESOURCE_TYPE.get(
- resource_type.struct.Id, '-')),
- 2)
-
- dump.add_lines(resource_type.struct.dump(), 2)
-
- if hasattr(resource_type, 'directory'):
-
- dump.add_lines(resource_type.directory.struct.dump(), 4)
-
- for resource_id in resource_type.directory.entries:
-
- if resource_id.name is not None:
- dump.add_line('Name: [%s]' % resource_id.name, 6)
- else:
- dump.add_line('Id: [0x%X]' % resource_id.struct.Id, 6)
-
- dump.add_lines(resource_id.struct.dump(), 6)
-
- if hasattr(resource_id, 'directory'):
- dump.add_lines(resource_id.directory.struct.dump(), 8)
-
- for resource_lang in resource_id.directory.entries:
- # dump.add_line('\\--- LANG [%d,%d][%s]' % (
- # resource_lang.data.lang,
- # resource_lang.data.sublang,
- # LANG[resource_lang.data.lang]), 8)
- dump.add_lines(resource_lang.struct.dump(), 10)
- dump.add_lines(resource_lang.data.struct.dump(), 12)
- dump.add_newline()
-
- dump.add_newline()
-
-
- if ( hasattr(self, 'DIRECTORY_ENTRY_TLS') and
- self.DIRECTORY_ENTRY_TLS and
- self.DIRECTORY_ENTRY_TLS.struct ):
-
- dump.add_header('TLS')
- dump.add_lines(self.DIRECTORY_ENTRY_TLS.struct.dump())
- dump.add_newline()
-
-
- if hasattr(self, 'DIRECTORY_ENTRY_DEBUG'):
- dump.add_header('Debug information')
- for dbg in self.DIRECTORY_ENTRY_DEBUG:
- dump.add_lines(dbg.struct.dump())
- try:
- dump.add_line('Type: '+DEBUG_TYPE[dbg.struct.Type])
- except KeyError:
- dump.add_line('Type: 0x%x(Unknown)' % dbg.struct.Type)
- dump.add_newline()
-
-
- if hasattr(self, 'DIRECTORY_ENTRY_BASERELOC'):
- dump.add_header('Base relocations')
- for base_reloc in self.DIRECTORY_ENTRY_BASERELOC:
- dump.add_lines(base_reloc.struct.dump())
- for reloc in base_reloc.entries:
- try:
- dump.add_line('%08Xh %s' % (
- reloc.rva, RELOCATION_TYPE[reloc.type][16:]), 4)
- except KeyError:
- dump.add_line('0x%08X 0x%x(Unknown)' % (
- reloc.rva, reloc.type), 4)
- dump.add_newline()
-
-
- return dump.get_text()
-
- # OC Patch
- def get_physical_by_rva(self, rva):
- """Gets the physical address in the PE file from an RVA value."""
- try:
- return self.get_offset_from_rva(rva)
- except Exception:
- return None
-
-
- ##
- # Double-Word get/set
- ##
-
- def get_data_from_dword(self, dword):
- """Return a four byte string representing the double word value. (little endian)."""
- return struct.pack('<L', dword)
-
-
- def get_dword_from_data(self, data, offset):
- """Convert four bytes of data to a double word (little endian)
-
- 'offset' is assumed to index into a dword array. So setting it to
- N will return a dword out of the data sarting at offset N*4.
-
- Returns None if the data can't be turned into a double word.
- """
-
- if (offset+1)*4 > len(data):
- return None
-
- return struct.unpack('<L', data[offset*4:(offset+1)*4])[0]
-
-
- def get_dword_at_rva(self, rva):
- """Return the double word value at the given RVA.
-
- Returns None if the value can't be read, i.e. the RVA can't be mapped
- to a file offset.
- """
-
- try:
- return self.get_dword_from_data(self.get_data(rva)[:4], 0)
- except PEFormatError:
- return None
-
-
- def get_dword_from_offset(self, offset):
- """Return the double word value at the given file offset. (little endian)"""
-
- if offset+4 > len(self.__data__):
- return None
-
- return self.get_dword_from_data(self.__data__[offset:offset+4], 0)
-
-
- def set_dword_at_rva(self, rva, dword):
- """Set the double word value at the file offset corresponding to the given RVA."""
- return self.set_bytes_at_rva(rva, self.get_data_from_dword(dword))
-
-
- def set_dword_at_offset(self, offset, dword):
- """Set the double word value at the given file offset."""
- return self.set_bytes_at_offset(offset, self.get_data_from_dword(dword))
-
-
-
- ##
- # Word get/set
- ##
-
- def get_data_from_word(self, word):
- """Return a two byte string representing the word value. (little endian)."""
- return struct.pack('<H', word)
-
-
- def get_word_from_data(self, data, offset):
- """Convert two bytes of data to a word (little endian)
-
- 'offset' is assumed to index into a word array. So setting it to
- N will return a dword out of the data sarting at offset N*2.
-
- Returns None if the data can't be turned into a word.
- """
-
- if (offset+1)*2 > len(data):
- return None
-
- return struct.unpack('<H', data[offset*2:(offset+1)*2])[0]
-
-
- def get_word_at_rva(self, rva):
- """Return the word value at the given RVA.
-
- Returns None if the value can't be read, i.e. the RVA can't be mapped
- to a file offset.
- """
-
- try:
- return self.get_word_from_data(self.get_data(rva)[:2], 0)
- except PEFormatError:
- return None
-
-
- def get_word_from_offset(self, offset):
- """Return the word value at the given file offset. (little endian)"""
-
- if offset+2 > len(self.__data__):
- return None
-
- return self.get_word_from_data(self.__data__[offset:offset+2], 0)
-
-
- def set_word_at_rva(self, rva, word):
- """Set the word value at the file offset corresponding to the given RVA."""
- return self.set_bytes_at_rva(rva, self.get_data_from_word(word))
-
-
- def set_word_at_offset(self, offset, word):
- """Set the word value at the given file offset."""
- return self.set_bytes_at_offset(offset, self.get_data_from_word(word))
-
-
- ##
- # Quad-Word get/set
- ##
-
- def get_data_from_qword(self, word):
- """Return a eight byte string representing the quad-word value. (little endian)."""
- return struct.pack('<Q', word)
-
-
- def get_qword_from_data(self, data, offset):
- """Convert eight bytes of data to a word (little endian)
-
- 'offset' is assumed to index into a word array. So setting it to
- N will return a dword out of the data sarting at offset N*8.
-
- Returns None if the data can't be turned into a quad word.
- """
-
- if (offset+1)*8 > len(data):
- return None
-
- return struct.unpack('<Q', data[offset*8:(offset+1)*8])[0]
-
-
- def get_qword_at_rva(self, rva):
- """Return the quad-word value at the given RVA.
-
- Returns None if the value can't be read, i.e. the RVA can't be mapped
- to a file offset.
- """
-
- try:
- return self.get_qword_from_data(self.get_data(rva)[:8], 0)
- except PEFormatError:
- return None
-
-
- def get_qword_from_offset(self, offset):
- """Return the quad-word value at the given file offset. (little endian)"""
-
- if offset+8 > len(self.__data__):
- return None
-
- return self.get_qword_from_data(self.__data__[offset:offset+8], 0)
-
-
- def set_qword_at_rva(self, rva, qword):
- """Set the quad-word value at the file offset corresponding to the given RVA."""
- return self.set_bytes_at_rva(rva, self.get_data_from_qword(qword))
-
-
- def set_qword_at_offset(self, offset, qword):
- """Set the quad-word value at the given file offset."""
- return self.set_bytes_at_offset(offset, self.get_data_from_qword(qword))
-
-
-
- ##
- # Set bytes
- ##
-
-
- def set_bytes_at_rva(self, rva, data):
- """Overwrite, with the given string, the bytes at the file offset corresponding to the given RVA.
-
- Return True if successful, False otherwise. It can fail if the
- offset is outside the file's boundaries.
- """
-
- offset = self.get_physical_by_rva(rva)
- if not offset:
- raise False
-
- return self.set_bytes_at_offset(offset, data)
-
-
- def set_bytes_at_offset(self, offset, data):
- """Overwrite the bytes at the given file offset with the given string.
-
- Return True if successful, False otherwise. It can fail if the
- offset is outside the file's boundaries.
- """
-
- if not isinstance(data, str):
- raise TypeError('data should be of type: str')
-
- if offset >= 0 and offset < len(self.__data__):
- self.__data__ = ( self.__data__[:offset] +
- data +
- self.__data__[offset+len(data):] )
- else:
- return False
-
- # Refresh the section's data with the modified information
- #
- for section in self.sections:
- section_data_start = section.PointerToRawData
- section_data_end = section_data_start+section.SizeOfRawData
- section.data = self.__data__[section_data_start:section_data_end]
-
- return True
-
-
-
- def relocate_image(self, new_ImageBase):
- """Apply the relocation information to the image using the provided new image base.
-
- This method will apply the relocation information to the image. Given the new base,
- all the relocations will be processed and both the raw data and the section's data
- will be fixed accordingly.
- The resulting image can be retrieved as well through the method:
-
- get_memory_mapped_image()
-
- In order to get something that would more closely match what could be found in memory
- once the Windows loader finished its work.
- """
-
- relocation_difference = new_ImageBase - self.OPTIONAL_HEADER.ImageBase
-
-
- for reloc in self.DIRECTORY_ENTRY_BASERELOC:
-
- virtual_address = reloc.struct.VirtualAddress
- size_of_block = reloc.struct.SizeOfBlock
-
- # We iterate with an index because if the relocation is of type
- # IMAGE_REL_BASED_HIGHADJ we need to also process the next entry
- # at once and skip it for the next interation
- #
- entry_idx = 0
- while entry_idx<len(reloc.entries):
-
- entry = reloc.entries[entry_idx]
- entry_idx += 1
-
- if entry.type == RELOCATION_TYPE['IMAGE_REL_BASED_ABSOLUTE']:
- # Nothing to do for this type of relocation
- pass
-
- elif entry.type == RELOCATION_TYPE['IMAGE_REL_BASED_HIGH']:
- # Fix the high 16bits of a relocation
- #
- # Add high 16bits of relocation_difference to the
- # 16bit value at RVA=entry.rva
-
- self.set_word_at_rva(
- entry.rva,
- ( self.get_word_at_rva(entry.rva) + relocation_difference>>16)&0xffff )
-
- elif entry.type == RELOCATION_TYPE['IMAGE_REL_BASED_LOW']:
- # Fix the low 16bits of a relocation
- #
- # Add low 16 bits of relocation_difference to the 16bit value
- # at RVA=entry.rva
-
- self.set_word_at_rva(
- entry.rva,
- ( self.get_word_at_rva(entry.rva) + relocation_difference)&0xffff)
-
- elif entry.type == RELOCATION_TYPE['IMAGE_REL_BASED_HIGHLOW']:
- # Handle all high and low parts of a 32bit relocation
- #
- # Add relocation_difference to the value at RVA=entry.rva
-
- self.set_dword_at_rva(
- entry.rva,
- self.get_dword_at_rva(entry.rva)+relocation_difference)
-
- elif entry.type == RELOCATION_TYPE['IMAGE_REL_BASED_HIGHADJ']:
- # Fix the high 16bits of a relocation and adjust
- #
- # Add high 16bits of relocation_difference to the 32bit value
- # composed from the (16bit value at RVA=entry.rva)<<16 plus
- # the 16bit value at the next relocation entry.
- #
-
- # If the next entry is beyond the array's limits,
- # abort... the table is corrupt
- #
- if entry_idx == len(reloc.entries):
- break
-
- next_entry = reloc.entries[entry_idx]
- entry_idx += 1
- self.set_word_at_rva( entry.rva,
- ((self.get_word_at_rva(entry.rva)<<16) + next_entry.rva +
- relocation_difference & 0xffff0000) >> 16 )
-
- elif entry.type == RELOCATION_TYPE['IMAGE_REL_BASED_DIR64']:
- # Apply the difference to the 64bit value at the offset
- # RVA=entry.rva
-
- self.set_qword_at_rva(
- entry.rva,
- self.get_qword_at_rva(entry.rva) + relocation_difference)
-
-
- def verify_checksum(self):
-
- return self.OPTIONAL_HEADER.CheckSum == self.generate_checksum()
-
-
- def generate_checksum(self):
-
- # Get the offset to the CheckSum field in the OptionalHeader
- #
- checksum_offset = self.OPTIONAL_HEADER.__file_offset__ + 0x40 # 64
-
- checksum = 0
-
- for i in range( len(self.__data__) / 4 ):
-
- # Skip the checksum field
- #
- if i == checksum_offset / 4:
- continue
-
- dword = struct.unpack('L', self.__data__[ i*4 : i*4+4 ])[0]
- checksum = (checksum & 0xffffffff) + dword + (checksum>>32)
- if checksum > 2**32:
- checksum = (checksum & 0xffffffff) + (checksum >> 32)
-
- checksum = (checksum & 0xffff) + (checksum >> 16)
- checksum = (checksum) + (checksum >> 16)
- checksum = checksum & 0xffff
-
- return checksum + len(self.__data__)
diff --git a/chromium/tools/symsrc/source_index.py b/chromium/tools/symsrc/source_index.py
deleted file mode 100755
index 76b04892b0d..00000000000
--- a/chromium/tools/symsrc/source_index.py
+++ /dev/null
@@ -1,226 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""Usage: <win-path-to-pdb.pdb>
-This tool will take a PDB on the command line, extract the source files that
-were used in building the PDB, query SVN for which repository and revision
-these files are at, and then finally write this information back into the PDB
-in a format that the debugging tools understand. This allows for automatic
-source debugging, as all of the information is contained in the PDB, and the
-debugger can go out and fetch the source files via SVN.
-
-You most likely want to run these immediately after a build, since the source
-input files need to match the generated PDB, and we want the correct SVN
-revision information for the exact files that were used for the build.
-
-The following files from a windbg + source server installation are expected
-to reside in the same directory as this python script:
- dbghelp.dll
- pdbstr.exe
- srctool.exe
-
-NOTE: Expected to run under a native win32 python, NOT cygwin. All paths are
-dealt with as win32 paths, since we have to interact with the Microsoft tools.
-"""
-
-import sys
-import os
-import time
-import subprocess
-import tempfile
-
-# This serves two purposes. First, it acts as a whitelist, and only files
-# from repositories listed here will be source indexed. Second, it allows us
-# to map from one SVN URL to another, so we can map to external SVN servers.
-REPO_MAP = {
- "svn://chrome-svn/blink": "http://src.chromium.org/blink",
- "svn://chrome-svn/chrome": "http://src.chromium.org/chrome",
- "svn://chrome-svn/multivm": "http://src.chromium.org/multivm",
- "svn://chrome-svn/native_client": "http://src.chromium.org/native_client",
- "svn://chrome-svn.corp.google.com/blink": "http://src.chromium.org/blink",
- "svn://chrome-svn.corp.google.com/chrome": "http://src.chromium.org/chrome",
- "svn://chrome-svn.corp.google.com/multivm": "http://src.chromium.org/multivm",
- "svn://chrome-svn.corp.google.com/native_client":
- "http://src.chromium.org/native_client",
- "svn://svn-mirror.golo.chromium.org/blink": "http://src.chromium.org/blink",
- "svn://svn-mirror.golo.chromium.org/chrome": "http://src.chromium.org/chrome",
- "svn://svn-mirror.golo.chromium.org/multivm":
- "http://src.chromium.org/multivm",
- "svn://svn-mirror.golo.chromium.org/native_client":
- "http://src.chromium.org/native_client",
- "http://v8.googlecode.com/svn": None,
- "http://google-breakpad.googlecode.com/svn": None,
- "http://googletest.googlecode.com/svn": None,
- "http://open-vcdiff.googlecode.com/svn": None,
- "http://google-url.googlecode.com/svn": None,
-}
-
-
-def FindFile(filename):
- """Return the full windows path to a file in the same dir as this code."""
- thisdir = os.path.dirname(os.path.join(os.path.curdir, __file__))
- return os.path.abspath(os.path.join(thisdir, filename))
-
-
-def ExtractSourceFiles(pdb_filename):
- """Extract a list of local paths of the source files from a PDB."""
- srctool = subprocess.Popen([FindFile('srctool.exe'), '-r', pdb_filename],
- stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- filelist = srctool.stdout.read()
- res = srctool.wait()
- if res != 0 or filelist.startswith("srctool: "):
- raise "srctool failed: " + filelist
- return [x for x in filelist.split('\r\n') if len(x) != 0]
-
-
-def ReadSourceStream(pdb_filename):
- """Read the contents of the source information stream from a PDB."""
- srctool = subprocess.Popen([FindFile('pdbstr.exe'),
- '-r', '-s:srcsrv',
- '-p:%s' % pdb_filename],
- stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- data = srctool.stdout.read()
- res = srctool.wait()
-
- if (res != 0 and res != -1) or data.startswith("pdbstr: "):
- raise "pdbstr failed: " + data
- return data
-
-
-def WriteSourceStream(pdb_filename, data):
- """Write the contents of the source information stream to a PDB."""
- # Write out the data to a temporary filename that we can pass to pdbstr.
- (f, fname) = tempfile.mkstemp()
- f = os.fdopen(f, "wb")
- f.write(data)
- f.close()
-
- srctool = subprocess.Popen([FindFile('pdbstr.exe'),
- '-w', '-s:srcsrv',
- '-i:%s' % fname,
- '-p:%s' % pdb_filename],
- stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- data = srctool.stdout.read()
- res = srctool.wait()
-
- if (res != 0 and res != -1) or data.startswith("pdbstr: "):
- raise "pdbstr failed: " + data
-
- os.unlink(fname)
-
-
-# TODO for performance, we should probably work in directories instead of
-# files. I'm scared of DEPS and generated files, so for now we query each
-# individual file, and don't make assumptions that all files in the same
-# directory are part of the same repository or at the same revision number.
-def ExtractSvnInfo(local_filename):
- """Calls svn info to extract the repository, path, and revision."""
- # We call svn.bat to make sure and get the depot tools SVN and not cygwin.
- srctool = subprocess.Popen(['svn.bat', 'info', local_filename],
- stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- info = srctool.stdout.read()
- res = srctool.wait()
- if res != 0:
- return None
- # Hack up into a dictionary of the fields printed by svn info.
- vals = dict((y.split(': ', 2) for y in info.split('\r\n') if y))
-
- root = vals['Repository Root']
- if not vals['URL'].startswith(root):
- raise "URL is not inside of the repository root?!?"
- path = vals['URL'][len(root):]
- rev = int(vals['Revision'])
-
- return [root, path, rev]
-
-
-def UpdatePDB(pdb_filename, verbose=False):
- """Update a pdb file with source information."""
- dir_blacklist = { }
- # TODO(deanm) look into "compressing" our output, by making use of vars
- # and other things, so we don't need to duplicate the repo path and revs.
- lines = [
- 'SRCSRV: ini ------------------------------------------------',
- 'VERSION=1',
- 'INDEXVERSION=2',
- 'VERCTRL=Subversion',
- 'DATETIME=%s' % time.asctime(),
- 'SRCSRV: variables ------------------------------------------',
- 'SVN_EXTRACT_TARGET_DIR=%targ%\%fnbksl%(%var3%)\%var4%',
- 'SVN_EXTRACT_TARGET=%svn_extract_target_dir%\%fnfile%(%var1%)',
- 'SVN_EXTRACT_CMD=cmd /c mkdir "%svn_extract_target_dir%" && cmd /c svn cat "%var2%%var3%@%var4%" --non-interactive > "%svn_extract_target%"',
- 'SRCSRVTRG=%SVN_extract_target%',
- 'SRCSRVCMD=%SVN_extract_cmd%',
- 'SRCSRV: source files ---------------------------------------',
- ]
-
- if ReadSourceStream(pdb_filename):
- raise "PDB already has source indexing information!"
-
- filelist = ExtractSourceFiles(pdb_filename)
- for filename in filelist:
- filedir = os.path.dirname(filename)
-
- if verbose:
- print "Processing: %s" % filename
- # This directory is blacklisted, either because it's not part of the SVN
- # repository, or from one we're not interested in indexing.
- if dir_blacklist.get(filedir, False):
- if verbose:
- print " skipping, directory is blacklisted."
- continue
-
- info = ExtractSvnInfo(filename)
-
- # Skip the file if it's not under an svn repository. To avoid constantly
- # querying SVN for files outside of SVN control (for example, the CRT
- # sources), check if the directory is outside of SVN and blacklist it.
- if not info:
- if not ExtractSvnInfo(filedir):
- dir_blacklist[filedir] = True
- if verbose:
- print " skipping, file is not in an SVN repository"
- continue
-
- root = info[0]
- path = info[1]
- rev = info[2]
-
- # Check if file was from a svn repository we don't know about, or don't
- # want to index. Blacklist the entire directory.
- if not REPO_MAP.has_key(info[0]):
- if verbose:
- print " skipping, file is from an unknown SVN repository %s" % root
- dir_blacklist[filedir] = True
- continue
-
- # We might want to map an internal repository URL to an external repository.
- if REPO_MAP[root]:
- root = REPO_MAP[root]
-
- lines.append('%s*%s*%s*%s' % (filename, root, path, rev))
- if verbose:
- print " indexed file."
-
- lines.append('SRCSRV: end ------------------------------------------------')
-
- WriteSourceStream(pdb_filename, '\r\n'.join(lines))
-
-
-def main():
- if len(sys.argv) < 2 or len(sys.argv) > 3:
- print "usage: file.pdb [-v]"
- return 1
-
- verbose = False
- if len(sys.argv) == 3:
- verbose = (sys.argv[2] == '-v')
-
- UpdatePDB(sys.argv[1], verbose=verbose)
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/sync-webkit-git.py b/chromium/tools/sync-webkit-git.py
deleted file mode 100755
index 3c7c5484c7d..00000000000
--- a/chromium/tools/sync-webkit-git.py
+++ /dev/null
@@ -1,221 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""Update third_party/WebKit using git.
-
-Under the assumption third_party/WebKit is a clone of git.webkit.org,
-we can use git commands to make it match the version requested by DEPS.
-
-See http://code.google.com/p/chromium/wiki/UsingWebKitGit for details on
-how to use this.
-"""
-
-import logging
-import optparse
-import os
-import re
-import subprocess
-import sys
-import urllib
-
-
-def RunGit(command):
- """Run a git subcommand, returning its output."""
- # On Windows, use shell=True to get PATH interpretation.
- command = ['git'] + command
- logging.info(' '.join(command))
- shell = (os.name == 'nt')
- proc = subprocess.Popen(command, shell=shell, stdout=subprocess.PIPE)
- out = proc.communicate()[0].strip()
- logging.info('Returned "%s"' % out)
- return out
-
-
-def GetOverrideShortBranchName():
- """Returns the user-configured override branch name, if any."""
- override_config_name = 'chromium.sync-branch'
- return RunGit(['config', '--get', override_config_name])
-
-
-def GetGClientBranchName():
- """Returns the name of the magic branch that lets us know that DEPS is
- managing the update cycle."""
- # Is there an override branch specified?
- override_branch_name = GetOverrideShortBranchName()
- if not override_branch_name:
- return 'refs/heads/gclient' # No override, so return the default branch.
-
- # Verify that the branch from config exists.
- ref_branch = 'refs/heads/' + override_branch_name
- current_head = RunGit(['show-ref', '--hash', ref_branch])
- if current_head:
- return ref_branch
-
- # Inform the user about the problem and how to fix it.
- print ("The specified override branch ('%s') doesn't appear to exist." %
- override_branch_name)
- print "Please fix your git config value '%s'." % overide_config_name
- sys.exit(1)
-
-
-def GetWebKitRev():
- """Extract the 'webkit_revision' variable out of DEPS."""
- locals = {'Var': lambda _: locals["vars"][_],
- 'From': lambda *args: None}
- execfile('DEPS', {}, locals)
- return locals['vars']['webkit_revision']
-
-
-def GetWebKitRevFromTarball(version):
- """Extract the 'webkit_revision' variable out of tarball DEPS."""
- deps_url = "http://src.chromium.org/svn/releases/" + version + "/DEPS"
- f = urllib.urlopen(deps_url)
- s = f.read()
- m = re.search('(?<=/Source@)\w+', s)
- return m.group(0)
-
-
-def FindSVNRev(branch_name, target_rev):
- """Map an SVN revision to a git hash.
- Like 'git svn find-rev' but without the git-svn bits."""
-
- # We iterate through the commit log looking for "git-svn-id" lines,
- # which contain the SVN revision of that commit. We can stop once
- # we've found our target (or hit a revision number lower than what
- # we're looking for, indicating not found).
-
- target_rev = int(target_rev)
-
- # regexp matching the "commit" line from the log.
- commit_re = re.compile(r'^commit ([a-f\d]{40})$')
- # regexp matching the git-svn line from the log.
- git_svn_re = re.compile(r'^\s+git-svn-id: [^@]+@(\d+) ')
- if not branch_name:
- branch_name = 'origin/master'
- cmd = ['git', 'log', '--no-color', '--first-parent', '--pretty=medium',
- branch_name]
- logging.info(' '.join(cmd))
- log = subprocess.Popen(cmd, shell=(os.name == 'nt'), stdout=subprocess.PIPE)
- # Track whether we saw a revision *later* than the one we're seeking.
- saw_later = False
- for line in log.stdout:
- match = commit_re.match(line)
- if match:
- commit = match.group(1)
- continue
- match = git_svn_re.match(line)
- if match:
- rev = int(match.group(1))
- if rev <= target_rev:
- log.stdout.close() # Break pipe.
- if rev < target_rev:
- if not saw_later:
- return None # Can't be sure whether this rev is ok.
- print ("WARNING: r%d not found, so using next nearest earlier r%d" %
- (target_rev, rev))
- return commit
- else:
- saw_later = True
-
- print "Error: reached end of log without finding commit info."
- print "Something has likely gone horribly wrong."
- return None
-
-
-def GetRemote():
- branch = GetOverrideShortBranchName()
- if not branch:
- branch = 'gclient'
-
- remote = RunGit(['config', '--get', 'branch.' + branch + '.remote'])
- if remote:
- return remote
- return 'origin'
-
-
-def UpdateGClientBranch(branch_name, webkit_rev, magic_gclient_branch):
- """Update the magic gclient branch to point at |webkit_rev|.
-
- Returns: true if the branch didn't need changes."""
- target = FindSVNRev(branch_name, webkit_rev)
- if not target:
- print "r%s not available; fetching." % webkit_rev
- subprocess.check_call(['git', 'fetch', GetRemote()],
- shell=(os.name == 'nt'))
- target = FindSVNRev(branch_name, webkit_rev)
- if not target:
- print "ERROR: Couldn't map r%s to a git revision." % webkit_rev
- sys.exit(1)
-
- current = RunGit(['show-ref', '--hash', magic_gclient_branch])
- if current == target:
- return False # No change necessary.
-
- subprocess.check_call(['git', 'update-ref', '-m', 'gclient sync',
- magic_gclient_branch, target],
- shell=(os.name == 'nt'))
- return True
-
-
-def UpdateCurrentCheckoutIfAppropriate(magic_gclient_branch):
- """Reset the current gclient branch if that's what we have checked out."""
- branch = RunGit(['symbolic-ref', '-q', 'HEAD'])
- if branch != magic_gclient_branch:
- print "We have now updated the 'gclient' branch, but third_party/WebKit"
- print "has some other branch ('%s') checked out." % branch
- print "Run 'git checkout gclient' under third_party/WebKit if you want"
- print "to switch it to the version requested by DEPS."
- return 1
-
- if subprocess.call(['git', 'diff-index', '--exit-code', '--shortstat',
- 'HEAD'], shell=(os.name == 'nt')):
- print "Resetting tree state to new revision."
- subprocess.check_call(['git', 'reset', '--hard'], shell=(os.name == 'nt'))
-
-
-def main():
- parser = optparse.OptionParser()
- parser.add_option('-v', '--verbose', action='store_true')
- parser.add_option('-r', '--revision', help="switch to desired revision")
- parser.add_option('-t', '--tarball', help="switch to desired tarball release")
- parser.add_option('-b', '--branch', help="branch name that gclient generate")
- options, args = parser.parse_args()
- if options.verbose:
- logging.basicConfig(level=logging.INFO)
- if not os.path.exists('third_party/WebKit/.git'):
- if os.path.exists('third_party/WebKit'):
- print "ERROR: third_party/WebKit appears to not be under git control."
- else:
- print "ERROR: third_party/WebKit could not be found."
- print "Did you run this script from the right directory?"
-
- print "See http://code.google.com/p/chromium/wiki/UsingWebKitGit for"
- print "setup instructions."
- return 1
-
- if options.revision:
- webkit_rev = options.revision
- if options.tarball:
- print "WARNING: --revision is given, so ignore --tarball"
- else:
- if options.tarball:
- webkit_rev = GetWebKitRevFromTarball(options.tarball)
- else:
- webkit_rev = GetWebKitRev()
-
- print 'Desired revision: r%s.' % webkit_rev
- os.chdir('third_party/WebKit')
- magic_gclient_branch = GetGClientBranchName()
- changed = UpdateGClientBranch(options.branch, webkit_rev,
- magic_gclient_branch)
- if changed:
- return UpdateCurrentCheckoutIfAppropriate(magic_gclient_branch)
- else:
- print "Already on correct revision."
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/tcmalloc/print-live-objects.py b/chromium/tools/tcmalloc/print-live-objects.py
deleted file mode 100755
index dfed9c60999..00000000000
--- a/chromium/tools/tcmalloc/print-live-objects.py
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-"""Symbolizes and prints live objects as recorded by tcmalloc's
-HeapProfilerDumpLiveObjects.
-"""
-
-import os
-import re
-import subprocess
-import sys
-import tempfile
-
-def usage():
- print """\
-Usage:
- tools/tcmalloc/print-live-objects.py out/Debug/chrome leaks.dmp
-"""
-
-def LoadDump(dump_file):
- result = []
- leakfmt = re.compile(
- r"^\s*1:\s*(\d+)\s*\[\s*1:\s*\d+\]\s*@(0x[a-f0-9]+)((\s+0x[a-f0-9]+)*)$")
- line_no = 0
- with open(dump_file) as f:
- for line in f:
- line_no = line_no + 1
- matches = leakfmt.match(line)
- if not matches:
- print "%s: could not parse line %d, skipping" % (dump_file, line_no)
- else:
- trace = { "size": int(matches.group(1)),
- "address": matches.group(2),
- "frames": matches.group(3).strip().split(" ")}
- result.append(trace)
- return result
-
-
-def Symbolize(binary, traces):
- addresses = set()
- for trace in traces:
- for frame in trace["frames"]:
- addresses.add(frame)
- addr_file, addr_filename = tempfile.mkstemp()
- for addr in addresses:
- os.write(addr_file, "%s\n" % addr)
- os.close(addr_file)
- syms = subprocess.Popen([
- "addr2line", "-f", "-C", "-e", binary, "@%s" % addr_filename],
- stdout=subprocess.PIPE).communicate()[0].strip().split("\n")
- table = {}
- cwd = os.getcwd()
- for address, symbol, location in zip(addresses, syms[::2], syms[1::2]):
- if location != "??:0":
- filename, line = location.split(":")
- filename = os.path.realpath(filename)[len(cwd)+1:]
- location = "%s:%s" % (filename, line)
- table[address] = { "name": symbol, "location": location }
- for trace in traces:
- frames = []
- for frame in trace["frames"]:
- frames.append(table[frame])
- trace["frames"] = frames
-
-
-def Main(argv):
- if sys.platform != 'linux2':
- print 'print-live-objects.py requires addr2line only present on Linux.'
- sys.exit(1)
-
- if len(argv) != 3:
- usage()
- sys.exit(1)
-
- traces = LoadDump(argv[2])
- Symbolize(argv[1], traces)
-
- if not traces:
- print "No leaks found!"
-
- for trace in sorted(traces, key=lambda x: -x["size"]):
- print "Leak of %d bytes at address %s" % (trace["size"], trace["address"])
- for frame in trace["frames"]:
- print " %s (%s)" % (frame["name"], frame["location"])
- print ""
-
-
-if __name__ == '__main__':
- Main(sys.argv)
diff --git a/chromium/tools/telemetry/telemetry.gyp b/chromium/tools/telemetry/telemetry.gyp
new file mode 100644
index 00000000000..150f76c231b
--- /dev/null
+++ b/chromium/tools/telemetry/telemetry.gyp
@@ -0,0 +1,16 @@
+# Copyright 2014 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.
+
+{
+ 'targets': [
+ {
+ 'target_name': 'bitmaptools',
+ 'type': 'executable',
+ 'sources': [
+ 'telemetry/core/bitmaptools.cc',
+ ],
+ 'toolsets': ['host'],
+ },
+ ],
+}
diff --git a/chromium/tools/trace/trace.html b/chromium/tools/trace/trace.html
deleted file mode 100644
index e14bbaef686..00000000000
--- a/chromium/tools/trace/trace.html
+++ /dev/null
@@ -1,287 +0,0 @@
-<html>
-<head>
-<title>
-Trace Events
-</title>
-<style>
-body {
- font-family: "Courier New";
- font-size: 9pt;
-}
-
-#header {
- position: absolute;
- top: 0px;
- left: 0px;
- border-bottom: 1px dashed black;
- background-color: #F0F0F0;
- z-index: 3;
-}
-
-#outer {
- position: relative;
- height: 200px;
-}
-
-#time_scale {
- height: 15px;
- width: 100%;
-}
-
-#tooltip {
- position: absolute;
- background-color: #FFFFCC;
- display: none;
- font-family: "Courier New";
- font-size: 9pt;
- padding: 5px;
- border: 1px solid #CCCC88;
- z-index: 3;
-}
-
-#legend {
- position: fixed;
- left: 10px;
- bottom: 10px;
- padding: 5px;
- border: 1px solid silver;
- z-index: 10;
- background-color: #f0f0f0;
-}
-
-h2 {
- margin: 5px;
-}
-
-#instructions {
- position: absolute;
- top:
- float: right;
- display: none;
-}
-
-li.time_tick {
- background-color: #FFFFCC;
- height: 15px;
-}
-
-li {
- background: pink;
- position: absolute;
- height: 10px;
- list-style: none;
- margin: 0px;
- padding: 0px;
- z-index: 2;
-}
-
-li:hover {
- border: 1px solid red;
-}
-
-.url {
- background-color: green;
-}
-
-.http {
- background-color: blue;
-}
-
-.socket {
- background-color: black;
-}
-
-.v8 {
- background-color: orange;
-}
-
-</style>
-
-<script src='trace_data.js'></script>
-<script>
-var scale = 100000;
-var row_height = 15;
-var trace_initial_time = 0;
-var trace_threads = {};
-var heartbeats = [];
-var trace_total_time = 0;
-
-function process_raw_events() {
- trace_initial_time = raw_trace_events[0].usec_begin;
- var stack = [];
- var e;
- for (var i in raw_trace_events) {
- e = raw_trace_events[i];
- var trace_events = trace_threads["e.tid"];
- if (!trace_events) {
- trace_events = [];
- trace_threads["e.tid"] = trace_events;
- }
- if (e.name.indexOf("heartbeat.") == 0) {
- heartbeats.push(e);
- } else if (e.type == "BEGIN") {
- trace_events.push(e);
- stack.unshift(e);
- } else if (e.type == "END") {
- for (var s in stack) {
- var begin = stack[s];
- if ((begin.id == e.id) && (begin.name == e.name) &&
- (begin.pid == e.pid) && (begin.tid == e.tid)) {
- begin.usec_end = e.usec_begin;
- begin.duration = begin.usec_end - begin.usec_begin;
- stack.splice(s, 1);
- break;
- }
- }
- } else if (e.type == "INSTANT") {
- trace_events.push(e);
- e.duration = 0;
- }
- }
- if (e.usec_end)
- trace_total_time = e.usec_end - trace_initial_time;
- else
- trace_total_time = e.usec_begin - trace_initial_time;
-}
-
-function compute_scale() {
- var outer = document.getElementById("outer");
- scale = Math.floor(trace_total_time / (outer.offsetWidth - (row_height * 2)));
-};
-
-function show_details(tid, i, event) {
- var trace_events = trace_threads["e.tid"];
- var inner = trace_events[i].name + " " +
- trace_events[i].duration / 1000 + "ms<br />" +
- trace_events[i].id + "<br />" +
- trace_events[i].extra + "<br />";
- var tooltip = document.getElementById("tooltip");
- tooltip.innerHTML = inner;
- if (window.event)
- event = window.event;
- tooltip.style.top = event.pageY + 3;
- tooltip.style.left = event.pageX + 3;
- tooltip.style.display = "block";
-};
-
-function generate_time_scale() {
- var view_size = window.clientWidth;
- var body_size = document.body.scrollWidth;
- var inner = "";
-
- var step_ms = Math.floor(scale / 10); // ms per 100px
- var pow10 = Math.pow(10, Math.floor(Math.log(step_ms) / Math.log(10)));
- var round = .5 * pow10;
- step_ms = round * (Math.floor(step_ms / round)); // round to a multiple of round
- for (var i = step_ms; i < trace_total_time / 1000; i += step_ms) {
- var x = Math.floor(i * 1000 / scale);
- inner += "<li class='time_tick' style='left: " + x + "px'>" + i + "</li>";
- }
- var time_scale = document.getElementById("time_scale");
- time_scale.innerHTML = inner;
- time_scale.style.width = document.body.scrollWidth;
-}
-
-function generate_subchart(trace_events, top) {
- var inner = "";
- var last_max_time = 0;
- var last_max_x = 0;
- for (var i in trace_events) {
- var e = trace_events[i];
- var start_time = e.usec_begin - trace_initial_time;
- var left = row_height + Math.floor(start_time / scale);
- var width = Math.floor(e.duration / scale);
- if (width == 0)
- width = 1;
- if (start_time < last_max_time)
- top += row_height;
- var style = "top: " + top + "px; left: " + left + "px; width: " + width + "px;";
- var js = 'javascript:show_details("' + e.tid + '", ' + i + ', event);';
- var cls = e.name.split('.')[0];
- inner += "<li class='" + cls + "' onmouseover='" + js + "' id='li-" + i + "' style='" + style + "'></li>\n";
- last_max_time = start_time + e.duration;
- last_max_x = left + width;
- }
- var subchart = document.createElement('div');
- subchart.setAttribute("class", "subchart");
- subchart.setAttribute("id", trace_events[0].tid);
- subchart.innerHTML = inner;
- subchart.style.height = top + row_height;
- subchart.style.width = row_height + last_max_x;
- var chart = document.getElementById("chart");
- chart.appendChild(subchart);
-
- return top;
-};
-
-function generate_chart() {
- var chart = document.getElementById("chart");
- chart.innerHTML = "";
- var top = 60;
- for (var t in trace_threads) {
- top = generate_subchart(trace_threads[t], top);
- }
- generate_time_scale();
-}
-
-function change_scale(event) {
- if (!event)
- event = window.event;
- if (!event.shiftKey)
- return;
- var delta = 0;
- if (event.wheelDelta) {
- delta = event.wheelDelta / 120;
- } else if (event.detail) {
- delta = - event.detail / 3;
- }
- if (delta) {
- var tooltip = document.getElementById("tooltip");
- tooltip.style.display = "none";
- var factor = 1.1;
- if (delta < 0)
- scale = Math.floor(scale * factor);
- else
- scale = Math.floor(scale / factor);
- if (scale > 300000)
- scale = 300000;
- generate_chart();
- if (event.preventDefault)
- event.preventDefault();
- }
- event.returnValue = false;
-};
-
-function initial_load() {
- if (window.addEventListener)
- window.addEventListener('DOMMouseScroll', change_scale, false);
- window.onmousewheel = document.onmousewheel = change_scale;
-
- process_raw_events();
- compute_scale();
- generate_chart();
-};
-
-</script>
-</head>
-<body onload='initial_load();'>
-<div id="header">
-<h2>Trace Events</h2>
-<div id="instructions">
-Use shift+mouse-wheel to zoom in and out.
-</div>
-<div id="time_scale"></div>
-</div>
-<div id="legend">
-<span class="url">&nbsp;</span> URL<br />
-<span class="http">&nbsp;</span> HTTP<br />
-<span class="socket">&nbsp;</span> Socket<br />
-<span class="v8">&nbsp;</span> V8<br />
-</div>
-<div id="chart">
-<div id="outer">
-</div>
-</div>
-<div id="tooltip" ondblclick="this.style.display = 'none';"></div>
-</body>
-</html>
diff --git a/chromium/tools/trace/trace_data.js b/chromium/tools/trace/trace_data.js
deleted file mode 100644
index 2531d3ce065..00000000000
--- a/chromium/tools/trace/trace_data.js
+++ /dev/null
@@ -1,1050 +0,0 @@
-var raw_trace_events = [
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x16e8260', 'extra':'http://mail.google.com', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_shell.cc', 'line_number':'825', 'usec_begin': 246537},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x1', 'extra':'http://mail.google.com/', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 250373},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 300584},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 301820},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 301844},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 302652},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'frame.load', 'id':'0x16e8488', 'extra':'http://mail.google.com/', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'310', 'usec_begin': 302786},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x1', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 302866},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x2', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 303348},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x17b8e60', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 304497},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x17b8e60', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 304548},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x17b8e60', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 304569},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x17b8e60', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 304627},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_host', 'id':'0x17b8e60', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'270', 'usec_begin': 304640},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_host', 'id':'0x17b8e60', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'275', 'usec_begin': 306405},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.connect', 'id':'0x17b8e60', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'279', 'usec_begin': 306425},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.connect', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'73', 'usec_begin': 306443},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.connect', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'238', 'usec_begin': 308431},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.connect', 'id':'0x17b8e60', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'284', 'usec_begin': 308477},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x17b8e60', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 308560},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 308606},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x1808ae8', 'extra':'439 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 308637},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x17b8e60', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 308651},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x17b8e60', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 308663},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 308675},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x1808ae8', 'extra':'1279 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 367678},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x17b8e60', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 368149},
-{'pid':'0x854', 'tid':'0xa20', 'type':'INSTANT', 'name':'socket.disconnect', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'113', 'usec_begin': 368763},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x2', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy&ltmpl=default&ltmplcache=2', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 368799},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy&ltmpl=default&ltmplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 368991},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy&ltmpl=default&ltmplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 369014},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy&ltmpl=default&ltmplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 369028},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy&ltmpl=default&ltmplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 369063},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_host', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy&ltmpl=default&ltmplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'270', 'usec_begin': 369130},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_host', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy&ltmpl=default&ltmplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'275', 'usec_begin': 370934},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.connect', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy&ltmpl=default&ltmplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'279', 'usec_begin': 370964},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.connect', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'73', 'usec_begin': 370996},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.connect', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'238', 'usec_begin': 372273},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 373127},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x1808ae8', 'extra':'70 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 373160},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 373185},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x1808ae8', 'extra':'1718 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 379657},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 387342},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x1808ae8', 'extra':'186 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 387405},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 387424},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x1808ae8', 'extra':'47 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 391679},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 423698},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.connect', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy&ltmpl=default&ltmplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'284', 'usec_begin': 433561},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy&ltmpl=default&ltmplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 433582},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 433661},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x1808ae8', 'extra':'628 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 433705},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy&ltmpl=default&ltmplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 433719},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy&ltmpl=default&ltmplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 433732},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 433748},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x1808ae8', 'extra':'1425 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 466568},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy&ltmpl=default&ltmplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 467724},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy&ltmpl=default&ltmplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 467913},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy&ltmpl=default&ltmplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 467931},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy&ltmpl=default&ltmplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 470106},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 470143},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x1808ae8', 'extra':'4233 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'169', 'usec_begin': 470177},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy&ltmpl=default&ltmplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 470231},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x3', 'extra':'https://mail.google.com/mail?view=page&name=browser&ver=1k96igf4806cy', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 473833},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy&ltmpl=default&ltmplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 474818},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy&ltmpl=default&ltmplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 474867},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy&ltmpl=default&ltmplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 477174},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy&ltmpl=default&ltmplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 477224},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy&ltmpl=default&ltmplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 477615},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy&ltmpl=default&ltmplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 477662},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 480476},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 480728},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 480744},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 488153},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 488720},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 489077},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 489092},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 489249},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 489309},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 489346},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 489360},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 489384},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 489544},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 489664},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 489678},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x4', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 490180},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 490442},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x3', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 490470},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 490597},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 490622},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 490636},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 490674},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_host', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'270', 'usec_begin': 490688},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x2', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 490772},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_host', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'275', 'usec_begin': 492500},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.connect', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'279', 'usec_begin': 492527},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.connect', 'id':'0x17c4d58', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'73', 'usec_begin': 492546},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.connect', 'id':'0x17c4d58', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'238', 'usec_begin': 513216},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x17c4d58', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 513450},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x17c4d58', 'extra':'70 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 513480},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x17c4d58', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 513509},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x17c4d58', 'extra':'1171 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 543672},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x17c4d58', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 545326},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x17c4d58', 'extra':'314 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 545366},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x17c4d58', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 545386},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x17c4d58', 'extra':'47 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 579036},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.connect', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'284', 'usec_begin': 579232},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 579251},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x17c4d58', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 579307},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x17c4d58', 'extra':'611 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 579341},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 579354},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 579367},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x17c4d58', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 579394},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x17c4d58', 'extra':'1425 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 604199},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 604781},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 605139},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 605157},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 605470},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x17c4d58', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 605487},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x17c4d58', 'extra':'1234 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'169', 'usec_begin': 605508},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 605550},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 605881},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 606445},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 606461},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 608174},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 612014},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 612070},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 612084},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 612669},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x5', 'extra':'https://mail.google.com/mail/help/images/logo.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 613155},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x6', 'extra':'https://mail.google.com/mail/images/corner_tl.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 614484},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 614782},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 614828},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 614842},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 614872},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x7', 'extra':'https://mail.google.com/mail/images/corner_tr.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 615312},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x8', 'extra':'https://mail.google.com/mail/images/corner_bl.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 615792},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x9', 'extra':'https://mail.google.com/mail/images/corner_br.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 616264},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 616610},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 616653},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 616667},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 616688},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0xa', 'extra':'https://mail.google.com/mail/help/images/icons/spam_new.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 617692},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0xb', 'extra':'https://mail.google.com/mail/help/images/icons/cell.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 618471},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0xc', 'extra':'https://mail.google.com/mail/help/images/icons/storage.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 619165},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 619695},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 619744},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 619758},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 619784},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 619894},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 619930},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 619944},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 619962},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 620183},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 620277},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 620292},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 620313},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0xd', 'extra':'https://www.google.com/accounts/google_transparent.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 625447},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 626010},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 626071},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 626085},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 626104},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x1844b80', 'extra':'https://www.google.com/accounts/google_transparent.gif', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 626259},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x1844b80', 'extra':'https://www.google.com/accounts/google_transparent.gif', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 626283},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x1844b80', 'extra':'https://www.google.com/accounts/google_transparent.gif', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 626296},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x1844b80', 'extra':'https://www.google.com/accounts/google_transparent.gif', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 626420},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x1844b80', 'extra':'https://www.google.com/accounts/google_transparent.gif', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 626436},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 626507},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x1808ae8', 'extra':'668 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 626554},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x1844b80', 'extra':'https://www.google.com/accounts/google_transparent.gif', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 626569},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x1844b80', 'extra':'https://www.google.com/accounts/google_transparent.gif', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 626581},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 626604},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 631563},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 631620},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 631634},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0xe', 'extra':'https://mail.google.com/mail/help/images/button_1_1.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 632318},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0xf', 'extra':'https://www.google.com/mail/help/images/clear.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 632749},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x10', 'extra':'https://mail.google.com/mail/help/images/button_1_2.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 633222},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x11', 'extra':'https://mail.google.com/mail/help/images/button_1_3.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 633704},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x12', 'extra':'https://mail.google.com/mail/help/images/button_2_1.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 634280},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x13', 'extra':'https://mail.google.com/mail/help/images/button_2_2.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 634918},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x14', 'extra':'https://mail.google.com/mail/help/images/button_2_3.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 635476},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x15', 'extra':'https://mail.google.com/mail/help/images/button_3_1.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 635969},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x16', 'extra':'https://mail.google.com/mail/help/images/button_3_2.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 636515},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x17', 'extra':'https://mail.google.com/mail/help/images/button_3_3.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 636987},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 637536},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 637742},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 637796},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 637812},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 637838},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 637905},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 637940},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 637954},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 640514},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x18', 'extra':'https://ssl.google-analytics.com/urchin.js', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 642073},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x4', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 642324},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x17c35e8', 'extra':'https://ssl.google-analytics.com/urchin.js', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 643004},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x17c35e8', 'extra':'https://ssl.google-analytics.com/urchin.js', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 643029},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x17c35e8', 'extra':'https://ssl.google-analytics.com/urchin.js', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 643042},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x17c35e8', 'extra':'https://ssl.google-analytics.com/urchin.js', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 643078},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x17c35e8', 'extra':'https://ssl.google-analytics.com/urchin.js', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 643092},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x17c4d58', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 643146},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x17c4d58', 'extra':'601 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 643196},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x17c35e8', 'extra':'https://ssl.google-analytics.com/urchin.js', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 643215},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x17c35e8', 'extra':'https://ssl.google-analytics.com/urchin.js', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 643228},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x17c4d58', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 643248},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x1808ae8', 'extra':'406 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 664360},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x1844b80', 'extra':'https://www.google.com/accounts/google_transparent.gif', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 664656},
-{'pid':'0x854', 'tid':'0xa20', 'type':'INSTANT', 'name':'socket.disconnect', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'113', 'usec_begin': 665032},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x17c4d58', 'extra':'390 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 667425},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x17c35e8', 'extra':'https://ssl.google-analytics.com/urchin.js', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 667652},
-{'pid':'0x854', 'tid':'0xa20', 'type':'INSTANT', 'name':'socket.disconnect', 'id':'0x17c4d58', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'113', 'usec_begin': 668023},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'25', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 674638},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x5', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 685812},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x6', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 692814},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x7', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 693201},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x8', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 698519},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x9', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 698776},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0xa', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 703813},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0xb', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 704060},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0xc', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 704264},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0xe', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 704483},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0xf', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 704744},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x10', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 705404},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x11', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 705684},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x12', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 705929},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x13', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 706155},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x14', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 706620},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x15', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 706805},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x16', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 707344},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x17', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 707631},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0xd', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 707885},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 708860},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 710721},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 710737},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 711495},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 711663},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 711730},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 711744},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 724816},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 724869},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 724883},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 724905},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x19', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 725598},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 726084},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 726112},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 726128},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 726168},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_host', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'270', 'usec_begin': 726185},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_host', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'275', 'usec_begin': 726504},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.connect', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'279', 'usec_begin': 726523},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.connect', 'id':'0x265a568', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'73', 'usec_begin': 726544},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x1a', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 728532},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 728968},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 728992},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 729008},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 729096},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_host', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'270', 'usec_begin': 729113},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_host', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'275', 'usec_begin': 729407},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.connect', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'279', 'usec_begin': 729426},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.connect', 'id':'0x265aeb0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'73', 'usec_begin': 729446},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 730189},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x18', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 730637},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.connect', 'id':'0x265a568', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'238', 'usec_begin': 746070},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x265a568', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 746305},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x265a568', 'extra':'70 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 746339},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x265a568', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 746360},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.connect', 'id':'0x265aeb0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'238', 'usec_begin': 749792},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x265aeb0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 750021},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x265aeb0', 'extra':'70 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 750051},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x265aeb0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 750073},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x265a568', 'extra':'1171 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 771135},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x265a568', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 772294},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x265a568', 'extra':'314 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 772351},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x265a568', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 772369},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x265aeb0', 'extra':'1171 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 775944},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x265aeb0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 776955},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x265aeb0', 'extra':'314 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 776990},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x265aeb0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 777007},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x265a568', 'extra':'47 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 804626},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.connect', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'284', 'usec_begin': 804813},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 804835},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x265a568', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 804905},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x265a568', 'extra':'1003 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 804939},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 804952},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 804968},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x265a568', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 804989},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x265aeb0', 'extra':'47 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 823698},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.connect', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'284', 'usec_begin': 823868},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 823902},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x265aeb0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 823964},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x265aeb0', 'extra':'993 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 823993},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 824006},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 824022},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x265aeb0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 824039},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x265a568', 'extra':'554 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 826462},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 827124},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 827368},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 827398},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x19', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 827721},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x265aeb0', 'extra':'551 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 847745},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 848279},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 848496},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 848542},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x1b', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 850184},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 850670},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 850693},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 850706},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 850740},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_host', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'270', 'usec_begin': 850759},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_host', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'275', 'usec_begin': 851028},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.connect', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'279', 'usec_begin': 851047},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.connect', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'73', 'usec_begin': 851062},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x1a', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 851484},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.connect', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'238', 'usec_begin': 853022},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 853209},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x26d7910', 'extra':'70 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 853244},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 853286},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26d7910', 'extra':'1719 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 855598},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 856827},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x26d7910', 'extra':'186 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 856864},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 856882},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26d7910', 'extra':'47 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 861150},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.connect', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'284', 'usec_begin': 861377},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 861394},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 861449},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x26d7910', 'extra':'582 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 861482},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 861495},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 861515},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 861534},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26d7910', 'extra':'565 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 892717},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 893171},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 893394},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 893421},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'frame.load', 'id':'0x16e8488', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy&ltmpl=default&ltmplcache=2', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'310', 'usec_begin': 893699},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x1b', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 893847},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'12', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 923735},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 1173749},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 1423773},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 1673792},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'3', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 1924790},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 2174817},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 2424843},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x1c', 'extra':'https://mail.google.com/mail?gxlu=erikkay&zx=1221584155500', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 2657744},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail?gxlu=erikkay&zx=1221584155500', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 2658189},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail?gxlu=erikkay&zx=1221584155500', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 2658239},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail?gxlu=erikkay&zx=1221584155500', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 2658254},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail?gxlu=erikkay&zx=1221584155500', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 2658292},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail?gxlu=erikkay&zx=1221584155500', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 2658306},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 2658367},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x26d7910', 'extra':'597 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 2658414},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail?gxlu=erikkay&zx=1221584155500', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 2658428},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail?gxlu=erikkay&zx=1221584155500', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 2658440},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 2658455},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 2674849},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26d7910', 'extra':'498 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 2712401},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail?gxlu=erikkay&zx=1221584155500', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 2712952},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail?gxlu=erikkay&zx=1221584155500', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 2713157},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 2713174},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 2924878},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 3175861},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 3425898},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 3675905},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 3925923},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 4175951},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 4425962},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 4675987},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 4926016},
-{'pid':'0x854', 'tid':'0xa20', 'type':'INSTANT', 'name':'socket.disconnect', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'113', 'usec_begin': 5034304},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x1d', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 5034619},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 5035008},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 5035035},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 5035049},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 5035082},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_host', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'270', 'usec_begin': 5035096},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_host', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'275', 'usec_begin': 5035375},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.connect', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'279', 'usec_begin': 5035392},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.connect', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'73', 'usec_begin': 5035409},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.connect', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'238', 'usec_begin': 5036730},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 5036969},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x26d7910', 'extra':'70 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 5037014},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5037064},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26d7910', 'extra':'1718 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 5039568},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 5040730},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x26d7910', 'extra':'186 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 5040764},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5040782},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26d7910', 'extra':'47 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 5044663},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.connect', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'284', 'usec_begin': 5044830},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 5044855},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 5044964},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x26d7910', 'extra':'1067 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 5044992},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 5045007},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_body', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'306', 'usec_begin': 5045020},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 5045043},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x26d7910', 'extra':'219 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 5045061},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_body', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'311', 'usec_begin': 5045074},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 5045087},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5045100},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26d7910', 'extra':'1425 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 5136971},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 5137031},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 5137045},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5137059},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26d7910', 'extra':'547 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'169', 'usec_begin': 5137078},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 5137821},
-{'pid':'0x854', 'tid':'0xa20', 'type':'INSTANT', 'name':'socket.disconnect', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'113', 'usec_begin': 5138262},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x1d', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail&ltmpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 5138291},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail&ltmpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 5138722},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail&ltmpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 5138744},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail&ltmpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 5138757},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail&ltmpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 5138779},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_host', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail&ltmpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'270', 'usec_begin': 5138793},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_host', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail&ltmpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'275', 'usec_begin': 5139038},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.connect', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail&ltmpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'279', 'usec_begin': 5139055},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.connect', 'id':'0x26c29a8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'73', 'usec_begin': 5139075},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.connect', 'id':'0x26c29a8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'238', 'usec_begin': 5140266},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x26c29a8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 5140480},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x26c29a8', 'extra':'70 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 5140522},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26c29a8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5140563},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26c29a8', 'extra':'1718 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 5142351},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x26c29a8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 5143531},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x26c29a8', 'extra':'186 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 5143565},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26c29a8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5143582},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26c29a8', 'extra':'47 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 5147388},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.connect', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail&ltmpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'284', 'usec_begin': 5147552},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail&ltmpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 5147586},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x26c29a8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 5147647},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x26c29a8', 'extra':'1572 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 5147681},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail&ltmpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 5147695},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail&ltmpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 5147709},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26c29a8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5147723},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 5176025},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26c29a8', 'extra':'1425 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 5179942},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail&ltmpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 5180371},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail&ltmpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 5180747},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail&ltmpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 5180766},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail&ltmpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 5180999},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26c29a8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5181037},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26c29a8', 'extra':'114 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'169', 'usec_begin': 5181057},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail&ltmpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 5181094},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5184752},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5184865},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5184880},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5185121},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'frame.load', 'id':'0x16e8488', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail&ltmpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'310', 'usec_begin': 5185249},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x1d', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 5185368},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x1e', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 5186094},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x184aed0', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 5186490},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x184aed0', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 5186836},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x184aed0', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 5186855},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x184aed0', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 5186955},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_host', 'id':'0x184aed0', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'270', 'usec_begin': 5186972},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_host', 'id':'0x184aed0', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'275', 'usec_begin': 5187271},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.connect', 'id':'0x184aed0', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'279', 'usec_begin': 5187289},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.connect', 'id':'0x26c1c50', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'73', 'usec_begin': 5187304},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.connect', 'id':'0x26c1c50', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'238', 'usec_begin': 5188602},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.connect', 'id':'0x184aed0', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'284', 'usec_begin': 5188632},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x184aed0', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 5188663},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x26c1c50', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 5188736},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x26c1c50', 'extra':'935 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 5188786},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x184aed0', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 5188799},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x184aed0', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 5188813},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26c1c50', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5188831},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 5426048},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26c1c50', 'extra':'1403 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 5448207},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x184aed0', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 5448754},
-{'pid':'0x854', 'tid':'0xa20', 'type':'INSTANT', 'name':'socket.disconnect', 'id':'0x26c1c50', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'113', 'usec_begin': 5449221},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x1e', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 5449247},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 5449521},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 5449543},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 5449565},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 5449588},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_host', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'270', 'usec_begin': 5449601},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_host', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'275', 'usec_begin': 5449875},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.connect', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'279', 'usec_begin': 5449891},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.connect', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'73', 'usec_begin': 5449919},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.connect', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'238', 'usec_begin': 5451177},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.connect', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'284', 'usec_begin': 5451207},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 5451226},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 5451267},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x183c9d0', 'extra':'1076 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 5451306},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 5451326},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 5451344},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5451377},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'4096 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 5659772},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 5660050},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 5660264},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 5660286},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 5660572},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5660590},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'194 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'169', 'usec_begin': 5660609},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 5660621},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5663002},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5663067},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5663082},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5663444},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x1f', 'extra':'http://mail.google.com/mail/?view=page&name=browser&ver=1k96igf4806cy', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 5663617},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 5664187},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5664204},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'1243 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'169', 'usec_begin': 5664228},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 5664242},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 5664497},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5664513},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5664666},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5664846},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5664861},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5666301},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5666531},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5666638},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5666653},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5669200},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5672512},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5673323},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5673340},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5673454},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x20', 'extra':'http://mail.google.com/mail/?ui=2&view=js&name=js&ver=vuagRBgWwto&am=R_E4pcQ3aAGDQefb', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 5674043},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x21', 'extra':'http://mail.google.com/mail/?ui=2&view=bsp&ver=1qygpcgurkovy', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 5674722},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x22', 'extra':'http://mail.google.com/mail/?ui=2&view=bsp&ver=1qygpcgurkovy', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 5675392},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x23', 'extra':'http://mail.google.com/mail/?ui=2&view=bsp&ver=1qygpcgurkovy', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 5676060},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x1f', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 5676230},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'3', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 5676274},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5678859},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5679537},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5679553},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5679962},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5681218},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5682436},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5682452},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5685626},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5686710},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5687420},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5687436},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5687815},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5690191},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5691313},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5691330},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5692120},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5693609},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5694734},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5694750},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5695974},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5697446},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5698579},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5698595},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5704025},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'frame.load', 'id':'0x16e8488', 'extra':'http://mail.google.com/mail/?ui=2&view=bsp&ver=1qygpcgurkovy', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'310', 'usec_begin': 5704226},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x21', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 5704446},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5707224},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5708662},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5708678},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5710175},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5711076},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5711922},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5711939},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5712496},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'frame.load', 'id':'0x16e8488', 'extra':'http://mail.google.com/mail/?ui=2&view=bsp&ver=1qygpcgurkovy', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'310', 'usec_begin': 5713037},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x22', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 5713115},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5714839},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5715817},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5715834},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5716464},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5717330},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5718018},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5718057},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5719545},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5720612},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5721545},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5721568},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x24', 'extra':'http://mail.google.com/mail/?ui=2&view=ss&ver=gh1z9bhrf433&am=R_E4pcQ3aAGDQefb', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 5725484},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5725885},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'frame.load', 'id':'0x16e8488', 'extra':'http://mail.google.com/mail/?ui=2&view=bsp&ver=1qygpcgurkovy', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'310', 'usec_begin': 5726725},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x23', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 5726810},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5728493},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5729806},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5729822},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5730693},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5731723},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5732590},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5732605},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5733440},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5734576},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5735554},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5735570},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5736975},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5739862},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5741391},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5741412},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5742147},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5744058},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5744928},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5744944},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5745594},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5746916},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5747953},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5747968},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5748623},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5749906},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5750861},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5750877},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5751605},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5753859},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5754954},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5754970},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5755731},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5760132},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5763002},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5763019},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5770324},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5771435},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5772394},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5772410},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5772744},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5774818},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5775747},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5775763},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5778463},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5780166},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5781529},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5781563},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5781924},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5782823},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5783630},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5783646},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5783866},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'12378 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 5784462},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 5784507},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5785901},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5786613},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5786637},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5786935},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5787995},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5788741},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5788757},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5788967},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5789815},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5790442},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5790458},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5790690},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5794789},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5796229},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5796246},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5797596},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x24', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 5804084},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5807913},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5809711},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5809728},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5810930},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5812241},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5813376},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5813399},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5813829},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5814801},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5815619},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5815635},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5815922},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5820052},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5821491},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5821507},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5823413},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5824726},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5825918},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5825934},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5827542},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5833240},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5838020},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5838036},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5838178},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5839050},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5839934},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5839951},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5840288},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5841576},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5842569},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5842585},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5842837},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5843917},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5844784},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5844800},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5845056},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5845915},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5846647},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5846663},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5847032},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x1e', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 5847198},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5848983},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5849929},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5849944},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5850203},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5851279},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5852131},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5852147},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5852588},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5854731},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5856045},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5856061},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5856517},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5857483},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5858279},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5858295},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5858530},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5860092},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5861295},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5861312},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5862046},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5863334},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5864083},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5864099},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5865299},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5866376},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5867211},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5867227},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5867534},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5868822},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5869580},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5869595},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5869966},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5870945},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5871949},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5871965},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5872419},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5874482},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5875635},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5875652},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5875959},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5876958},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5877753},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5877771},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5878074},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5879102},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5880039},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5880056},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5880498},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5883196},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5884790},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5884807},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5886935},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5887846},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5888900},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5888916},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5889562},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5891077},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5892318},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5892334},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5893038},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5894495},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5895265},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5895281},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5895541},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5896804},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5897890},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5897906},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5898425},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5899375},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5900216},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5900232},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5900602},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5902004},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5902825},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5902840},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5903198},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5904155},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5904843},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5904859},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5905208},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5906386},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5907352},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5907368},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5908413},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5909685},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5910618},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5910634},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5911162},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5912612},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5913905},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5913926},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5914786},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5916583},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5917588},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5917603},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5923655},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5925193},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5926428},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5926444},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5927406},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5929316},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5930373},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5930390},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5930859},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5932088},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5933072},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5933087},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5933405},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5934363},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5935105},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5935121},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5937089},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5939306},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5940982},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5940999},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5941663},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5942543},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5943167},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5943183},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5943375},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5944287},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5945048},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5945064},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5945312},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5946902},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5947689},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5947704},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5947982},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5949161},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5950128},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5950144},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5950491},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5951885},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5952879},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5952895},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5954060},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5956682},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5958366},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5958382},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5958904},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5959774},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5960572},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5960589},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5960975},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5962060},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5963319},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5963336},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5963754},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5965412},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5966375},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5966391},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5966925},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5969748},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5971857},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5971880},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5972629},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5974254},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5974979},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5974996},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5975798},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5976827},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5977665},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5977681},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5977957},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5989725},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5991102},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5991119},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5991574},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5992621},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5993420},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5993436},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5993890},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5994770},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5995430},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5995454},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5995644},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5997509},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5998368},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5998384},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5998878},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'50', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 6000447},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 6004922},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 6008518},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 6008536},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 6016226},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 6017496},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 6018313},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 6018329},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 6018656},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 6018958},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 6019128},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 6019143},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 6019395},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 6019530},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 6019634},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 6019657},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 6019730},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 6020006},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 6020069},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 6020084},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x25', 'extra':'about:blank', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6154931},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'frame.load', 'id':'0x16e8488', 'extra':'about:blank', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'310', 'usec_begin': 6155294},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x25', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6155359},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x26', 'extra':'http://mail.google.com/mail/images/cleardot.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6190721},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x27', 'extra':'http://mail.google.com/mail/rc?a=af&c=fff1a8&w=4&h=4', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6222057},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x28', 'extra':'http://mail.google.com/mail/rc?a=af&c=c3d9ff&w=4&h=4', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6223307},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x29', 'extra':'http://mail.google.com/mail/images/2/5/c/icons1c.png', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6227933},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x2a', 'extra':'http://mail.google.com/mail/images/2/icons_ns2a.png', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6229889},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x2b', 'extra':'http://mail.google.com/mail/rc?a=af&c=ccc&w=4&h=4', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6235619},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x2c', 'extra':'http://mail.google.com/mail/rc?a=af&c=c3d9ff&w=3&h=3', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6240936},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x2d', 'extra':'http://mail.google.com/mail/rc?a=af&c=b5edbc&w=3&h=3', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6241168},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x2e', 'extra':'http://mail.google.com/mail/rc?a=af&c=e0ecff&w=3&h=3', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6256964},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x2f', 'extra':'http://mail.google.com/mail/images/2/5/logo.png', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6362778},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 6474842},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'50', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 6475026},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 6640799},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 6640862},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 6640876},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 6640892},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x30', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6641172},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 6641558},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 6641587},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 6641601},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 6641640},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_host', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'270', 'usec_begin': 6641655},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_host', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'275', 'usec_begin': 6642083},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.connect', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'279', 'usec_begin': 6642103},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.connect', 'id':'0x318d410', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'73', 'usec_begin': 6642117},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.connect', 'id':'0x318d410', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'238', 'usec_begin': 6643324},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.connect', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'284', 'usec_begin': 6643353},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 6643373},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x318d410', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 6643409},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x318d410', 'extra':'648 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 6643437},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 6643451},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 6643463},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x318d410', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 6643484},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x318d410', 'extra':'530 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 6665182},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 6665381},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 6665704},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x318d410', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 6665721},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x31', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6670763},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 6671109},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 6671134},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 6671147},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 6671181},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 6671195},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 6671242},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x183c9d0', 'extra':'1237 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 6671295},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 6671309},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 6671322},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 6671346},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'4096 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 6705526},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 6705775},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 6705906},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 6705926},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x20', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6724041},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'52', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 6829332},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 6829507},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 6829528},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'145 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'169', 'usec_begin': 6829554},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 6829578},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x32', 'extra':'http://mail.google.com/mail/?ui=2&view=jsm&name=ld%2Cml&ver=vuagRBgWwto&am=R_E4pcQ3aAGDQefb', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6831901},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x26', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6836122},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x27', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6836346},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x28', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6862988},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x29', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6864446},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x2a', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6892630},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x2b', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6909888},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x2c', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6910021},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x2d', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6913268},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x2e', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6916383},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x2f', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6916484},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x31', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6926048},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x33', 'extra':'http://mail.google.com/mail/?ui=2&view=jsm&name=cv&ver=vuagRBgWwto&am=R_E4pcQ3aAGDQefb', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 7006135},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x32', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 7006601},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x34', 'extra':'http://mail.google.com/mail/?ui=2&view=jsm&name=mo%2Ccw%2Cch&ver=vuagRBgWwto&am=R_E4pcQ3aAGDQefb', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 7069712},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x33', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 7070044},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x35', 'extra':'http://mail.google.com/mail/?ui=2&view=jsm&name=cm&ver=vuagRBgWwto&am=R_E4pcQ3aAGDQefb', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 7124934},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x34', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 7125262},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'50', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 7125318},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x36', 'extra':'http://mail.google.com/mail/?ui=2&view=jsm&name=pc&ver=vuagRBgWwto&am=R_E4pcQ3aAGDQefb', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 7154226},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x35', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 7154552},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x37', 'extra':'http://mail.google.com/mail/?ui=2&view=jsm&name=ca&ver=vuagRBgWwto&am=R_E4pcQ3aAGDQefb', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 7161100},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x36', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 7161380},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x38', 'extra':'http://mail.google.com/mail/?ui=2&view=jsm&name=e&ver=vuagRBgWwto&am=R_E4pcQ3aAGDQefb', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 7167291},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x37', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 7167559},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x38', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 7217361},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x39', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1086&MODE=init&zx=gsd2cum2kqx0&t=1', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 7231075},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1086&MODE=init&zx=gsd2cum2kqx0&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 7232017},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1086&MODE=init&zx=gsd2cum2kqx0&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 7232053},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1086&MODE=init&zx=gsd2cum2kqx0&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 7232074},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1086&MODE=init&zx=gsd2cum2kqx0&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 7232126},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1086&MODE=init&zx=gsd2cum2kqx0&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 7232148},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 7232197},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x183c9d0', 'extra':'1217 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 7232247},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1086&MODE=init&zx=gsd2cum2kqx0&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 7232261},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1086&MODE=init&zx=gsd2cum2kqx0&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 7232274},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 7232301},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x3a', 'extra':'http://mail.google.com/mail/images/cleardot.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 7236419},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x3a', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 7236457},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x3b', 'extra':'http://mail.google.com/mail/images/cleardot.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 7245353},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x3b', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 7245394},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x3c', 'extra':'http://mail.google.com/mail/images/2/icons_ns2a.png', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 7247637},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x3c', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 7247672},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'597 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 7268945},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1086&MODE=init&zx=gsd2cum2kqx0&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 7269174},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1086&MODE=init&zx=gsd2cum2kqx0&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 7269424},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1086&MODE=init&zx=gsd2cum2kqx0&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 7269459},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'47', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 7375719},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x3d', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 7377167},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x39', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 7377400},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 7377570},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 7377597},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 7377618},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 7377657},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_host', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'270', 'usec_begin': 7377672},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_host', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'275', 'usec_begin': 7378021},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.connect', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'279', 'usec_begin': 7378038},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.connect', 'id':'0x2e8fea0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'73', 'usec_begin': 7378053},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.connect', 'id':'0x2e8fea0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'238', 'usec_begin': 7401287},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.connect', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'284', 'usec_begin': 7401329},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 7401345},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x2e8fea0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 7401386},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x2e8fea0', 'extra':'803 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 7401417},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 7401430},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 7401444},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x2e8fea0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 7401462},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x2e8fea0', 'extra':'544 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 7433482},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 7433788},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 7434023},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 7434055},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x3d', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 7434302},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x3e', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1291&TYPE=xmlhttp&zx=ev050ueswmrg&t=1', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 7435539},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x185c988', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1291&TYPE=xmlhttp&zx=ev050ueswmrg&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 7436159},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x185c988', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1291&TYPE=xmlhttp&zx=ev050ueswmrg&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 7436193},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x185c988', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1291&TYPE=xmlhttp&zx=ev050ueswmrg&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 7436214},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x185c988', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1291&TYPE=xmlhttp&zx=ev050ueswmrg&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 7436260},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x185c988', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1291&TYPE=xmlhttp&zx=ev050ueswmrg&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 7436282},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 7436335},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x183c9d0', 'extra':'1220 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 7436389},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x185c988', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1291&TYPE=xmlhttp&zx=ev050ueswmrg&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 7436419},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x185c988', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1291&TYPE=xmlhttp&zx=ev050ueswmrg&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 7436437},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 7436451},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'548 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 7468253},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x185c988', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1291&TYPE=xmlhttp&zx=ev050ueswmrg&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 7468524},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x185c988', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1291&TYPE=xmlhttp&zx=ev050ueswmrg&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 7468734},
-{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x185c988', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1291&TYPE=xmlhttp&zx=ev050ueswmrg&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 7468755},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x185c988', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1291&TYPE=xmlhttp&zx=ev050ueswmrg&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 7468881},
-{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 7468898},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'6', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 7626418},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 7876733},
-{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 8126490},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 8309792},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 8309858},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 8309873},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 8326339},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 8326394},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 8326477},
-{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 8326505},
-{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 8341241},
-{'pid':'0x854', 'tid':'0xa20', 'type':'INSTANT', 'name':'socket.disconnect', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'113', 'usec_begin': 8341596},
-{'pid':'0x854', 'tid':'0xa20', 'type':'INSTANT', 'name':'socket.disconnect', 'id':'0x318d410', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'113', 'usec_begin': 8341826},
-{'pid':'0x854', 'tid':'0xa20', 'type':'INSTANT', 'name':'socket.disconnect', 'id':'0x2e8fea0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'113', 'usec_begin': 8375190},
-{'pid':'0x854', 'tid':'0xa20', 'type':'INSTANT', 'name':'socket.disconnect', 'id':'0x265a568', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'113', 'usec_begin': 8375275},
-{'pid':'0x854', 'tid':'0xa20', 'type':'INSTANT', 'name':'socket.disconnect', 'id':'0x265aeb0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'113', 'usec_begin': 8375394},
-{'pid':'0x854', 'tid':'0xa20', 'type':'INSTANT', 'name':'socket.disconnect', 'id':'0x26c29a8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'113', 'usec_begin': 8375490},
-];
diff --git a/chromium/tools/traceline/svgui/README b/chromium/tools/traceline/svgui/README
deleted file mode 100644
index 1a113e281bc..00000000000
--- a/chromium/tools/traceline/svgui/README
+++ /dev/null
@@ -1,12 +0,0 @@
-This is a small "web application" to display traceline trace data. It uses
-xhtml, SVG, and JavaScript to interpret the JSON data in a timeline format.
-Events can be moused over to show details, stack traces, etc.
-
-The name of the JSON file should be supplied behind a # in the URL. Multiple
-JSON files can be listed (comma separated), allowing you to compare multiple
-sets of data. Examples:
-
-http://blah/traceline.xml#startup-release.json
-http://blah/traceline.xml#mydata1.json,mydata2.json
-
-Dean McNamee <deanm@chromium.org>
diff --git a/chromium/tools/traceline/svgui/startup-release.json b/chromium/tools/traceline/svgui/startup-release.json
deleted file mode 100644
index 37a36201da2..00000000000
--- a/chromium/tools/traceline/svgui/startup-release.json
+++ /dev/null
@@ -1,178 +0,0 @@
-parseEvents([
-{'stacktrace': [], 'thread': 3956, 'eventtype': 'EVENT_TYPE_APC', 'func_addr_name': 'ntdll.dll!LdrInitializeThunk+0x0', 'ret_addr': 2089872071, 'done': 23.106567999999999, 'func_addr': 2089816446, 'ms': 6.3611440000000004, 'cpu': 2147742720},
-{'stacktrace': [[2089816487, 'ntdll.dll!LdrpCallInitRoutine+0x14'], [2089929643, 'ntdll.dll!LdrpRunInitializeRoutines+0x1c7'], [2089917304, 'ntdll.dll!LdrpGetProcedureAddress+0x1c3'], [2089917344, 'ntdll.dll!LdrGetProcedureAddress+0x18'], [2089952052, 'ntdll.dll!LdrpInitializeProcess+0x878'], [2089948729, 'ntdll.dll!_LdrpInitialize+0x88d3'], [1717963930, 'failed']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_THREADBEGIN', 'parenteventid': 2147323904, 'startaddr': 2088763392, 'ms': 7.0830229999999998, 'cpu': 2147742720},
-{'stacktrace': [[2118314946, 'USER32.dll!_UserClientDllInitialize+0x246'], [2089816487, 'ntdll.dll!LdrpCallInitRoutine+0x14'], [2089929643, 'ntdll.dll!LdrpRunInitializeRoutines+0x1c7'], [2089948990, 'ntdll.dll!LdrpInitializeProcess+0xfffffc82'], [2089948729, 'ntdll.dll!_LdrpInitialize+0x88d3'], [1717963930, 'failed']], 'thread': 3956, 'syscall': 4316, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'gdi32.dll!NtGdiInit', 'done': 12.667252, 'ms': 11.086605, 'syscallargs': [1242536, 1243632, 2118314946], 'cpu': 2147742720},
-{'stacktrace': [[2088853969, 'kernel32.dll!CsrBasepCreateActCtx+0xa2'], [2088853339, 'kernel32.dll!BasepCreateActCtx+0x63a'], [2088851440, 'kernel32.dll!CreateActCtxW+0x394'], [2091021301, 'SHELL32.dll!SHFusionInitializeIDCC+0x6d'], [2091021175, 'SHELL32.dll!SHFusionInitializeFromModuleID+0x3a'], [2091020981, 'SHELL32.dll!_ProcessAttach+0x2f'], [2091020914, 'SHELL32.dll!DllMain+0x3fe1a'], [2090759390, 'SHELL32.dll!_DllMainCRTStartup+0x48'], [2089816487, 'ntdll.dll!LdrpCallInitRoutine+0x14'], [2089929643, 'ntdll.dll!LdrpRunInitializeRoutines+0x1c7'], [2089948990, 'ntdll.dll!LdrpInitializeProcess+0xfffffc82'], [2089948729, 'ntdll.dll!_LdrpInitialize+0x88d3'], [1717963930, 'failed']], 'thread': 3956, 'syscall': 200, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtRequestWaitReplyPort', 'done': 16.840966999999999, 'ms': 13.546135, 'syscallargs': [32, 1240476, 1240476], 'cpu': 2147742720},
-{'stacktrace': [[2088853969, 'kernel32.dll!CsrBasepCreateActCtx+0xa2'], [2088853339, 'kernel32.dll!BasepCreateActCtx+0x63a'], [2088851440, 'kernel32.dll!CreateActCtxW+0x394'], [2001057805, 'comctl32.dll!SHFusionInitializeIDCC+0x83'], [2001057855, 'comctl32.dll!SHFusionInitializeID+0x12'], [2001057879, 'comctl32.dll!SHFusionInitialize+0xf'], [2000503209, 'comctl32.dll!_ProcessAttach+0x32'], [2000503399, 'comctl32.dll!LibMain+0x21'], [2089816487, 'ntdll.dll!LdrpCallInitRoutine+0x14'], [2089929643, 'ntdll.dll!LdrpRunInitializeRoutines+0x1c7'], [2089902456, 'ntdll.dll!LdrpLoadDll+0xfffffe4f'], [2089902810, 'ntdll.dll!LdrLoadDll+0x110'], [2088770489, 'kernel32.dll!LoadLibraryExW+0xc8'], [2088808028, 'kernel32.dll!LoadLibraryW+0x11'], [2091021388, 'SHELL32.dll!SHFusionLoadLibrary+0x2a'], [2090759619, 'SHELL32.dll!DelayLoadCC+0x15']], 'thread': 3956, 'syscall': 200, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtRequestWaitReplyPort', 'done': 21.051558, 'ms': 17.985804999999999, 'syscallargs': [32, 1237992, 1237992], 'cpu': 2147742720},
-{'stacktrace': [[2089888951, 'ntdll.dll!LdrAccessResource+0x15'], [2009076731, 'VERSION.dll!GetFileVersionInfoSizeW+0x6a'], [4315331, 'chrome.exe!FileVersionInfo::CreateFileVersionInfo+0x23 [ c:\\g\\trunk\\src\\base\\file_version_info.cc:46 ]'], [4202450, "chrome.exe!`anonymous namespace'::GetCustomInfo+0x22 [ c:\\g\\trunk\\src\\chrome\\app\\breakpad.cc:63 ]"], [4204639, 'chrome.exe!InitCrashReporter+0x13f [ c:\\g\\trunk\\src\\chrome\\app\\breakpad.cc:238 ]'], [4205528, 'chrome.exe!wWinMain+0x2b8 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:95 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 178, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtQueryVirtualMemory', 'done': 24.995356000000001, 'ms': 24.501438, 'syscallargs': [4294967295, 19333120, 0], 'cpu': 2147742720},
-{'stacktrace': [[2089888951, 'ntdll.dll!LdrAccessResource+0x15'], [2009076752, 'VERSION.dll!GetFileVersionInfoSizeW+0x7f'], [4315331, 'chrome.exe!FileVersionInfo::CreateFileVersionInfo+0x23 [ c:\\g\\trunk\\src\\base\\file_version_info.cc:46 ]'], [4202450, "chrome.exe!`anonymous namespace'::GetCustomInfo+0x22 [ c:\\g\\trunk\\src\\chrome\\app\\breakpad.cc:63 ]"], [4204639, 'chrome.exe!InitCrashReporter+0x13f [ c:\\g\\trunk\\src\\chrome\\app\\breakpad.cc:238 ]'], [4205528, 'chrome.exe!wWinMain+0x2b8 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:95 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 178, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtQueryVirtualMemory', 'done': 25.491229000000001, 'ms': 24.997869999999999, 'syscallargs': [4294967295, 19333120, 0], 'cpu': 2147742720},
-{'stacktrace': [[2089888951, 'ntdll.dll!LdrAccessResource+0x15'], [2009077479, 'VERSION.dll!GetFileVersionInfoW+0x68'], [4315373, 'chrome.exe!FileVersionInfo::CreateFileVersionInfo+0x4d [ c:\\g\\trunk\\src\\base\\file_version_info.cc:54 ]'], [4202450, "chrome.exe!`anonymous namespace'::GetCustomInfo+0x22 [ c:\\g\\trunk\\src\\chrome\\app\\breakpad.cc:63 ]"], [4204639, 'chrome.exe!InitCrashReporter+0x13f [ c:\\g\\trunk\\src\\chrome\\app\\breakpad.cc:238 ]'], [4205528, 'chrome.exe!wWinMain+0x2b8 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:95 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 178, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtQueryVirtualMemory', 'done': 26.258085999999999, 'ms': 25.763888999999999, 'syscallargs': [4294967295, 19333120, 0], 'cpu': 2147742720},
-{'eventid': 1718060360, 'stacktrace': [[2088839620, 'kernel32.dll!BaseCreateThreadPoolThread+0x44'], [2089982739, 'ntdll.dll!RtlpStartThreadpoolThread+0x4e'], [2089993072, 'ntdll.dll!RtlpInitializeTimerThreadPool+0xb7'], [2089992706, 'ntdll.dll!RtlpInitializeWorkerThreadPool+0x1c'], [2089993149, 'ntdll.dll!RtlQueueWorkItem+0x4ce5'], [2088962678, 'kernel32.dll!QueueUserWorkItem+0x14'], [4204696, 'chrome.exe!InitCrashReporter+0x178 [ c:\\g\\trunk\\src\\chrome\\app\\breakpad.cc:250 ]'], [4205528, 'chrome.exe!wWinMain+0x2b8 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:95 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_CREATETHREAD', 'startaddr': 2088830553, 'ms': 26.361730000000001, 'cpu': 2147742720},
-{'stacktrace': [], 'thread': 3380, 'eventtype': 'EVENT_TYPE_THREADBEGIN', 'parenteventid': 1718060360, 'startaddr': 2089974157, 'ms': 26.482137000000002, 'cpu': 3124053392},
-{'eventid': 1718062684, 'stacktrace': [[2088839620, 'kernel32.dll!BaseCreateThreadPoolThread+0x44'], [2089982739, 'ntdll.dll!RtlpStartThreadpoolThread+0x4e'], [2089982839, 'ntdll.dll!RtlpStartWorkerThread+0x16'], [2089982906, 'ntdll.dll!RtlQueueWorkItem+0x24e2'], [2088962678, 'kernel32.dll!QueueUserWorkItem+0x14'], [4204696, 'chrome.exe!InitCrashReporter+0x178 [ c:\\g\\trunk\\src\\chrome\\app\\breakpad.cc:250 ]'], [4205528, 'chrome.exe!wWinMain+0x2b8 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:95 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_CREATETHREAD', 'startaddr': 2088830553, 'ms': 26.58634, 'cpu': 2147742720},
-{'stacktrace': [], 'thread': 2440, 'eventtype': 'EVENT_TYPE_THREADBEGIN', 'parenteventid': 1718062684, 'startaddr': 2089879392, 'ms': 26.691939999999999, 'cpu': 3124053392},
-{'stacktrace': [[2089816139, 'ntdll.dll!RtlEnterCriticalSection+0x46'], [2088809487, 'kernel32.dll!GetModuleFileNameW+0x3a'], [2089167589, 'kernel32.dll!FillUEFInfo+0x51'], [2089043624, 'kernel32.dll!SetUnhandledExceptionFilter+0x2b'], [4203570, 'chrome.exe!InitCrashReporterThread+0x1b2 [ c:\\g\\trunk\\src\\chrome\\app\\breakpad.cc:181 ]'], [2089973061, 'ntdll.dll!RtlpWorkerCallout+0x65'], [2089973123, 'ntdll.dll!RtlpExecuteWorkerRequest+0x1a'], [2089973317, 'ntdll.dll!RtlpApcCallout+0x11'], [2089973276, 'ntdll.dll!RtlpWorkerThread+0x16ebc'], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2440, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 51.803511, 'ms': 26.820167999999999, 'syscallargs': [120, 0, 0], 'cpu': 3124053392},
-{'stacktrace': [[2089934922, 'ntdll.dll!LdrpMapDll+0x1b0b'], [2089902193, 'ntdll.dll!LdrpLoadDll+0xfffffd48'], [2089902810, 'ntdll.dll!LdrLoadDll+0x110'], [2088770489, 'kernel32.dll!LoadLibraryExW+0xc8'], [4205549, 'chrome.exe!wWinMain+0x2cd [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:99 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 137, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwProtectVirtualMemory', 'done': 44.387484999999998, 'ms': 43.193758000000003, 'syscallargs': [4294967295, 1242540, 1242544], 'cpu': 2147742720},
-{'stacktrace': [[2088853969, 'kernel32.dll!CsrBasepCreateActCtx+0xa2'], [2088853339, 'kernel32.dll!BasepCreateActCtx+0x63a'], [2088851440, 'kernel32.dll!CreateActCtxW+0x394'], [2088959197, 'kernel32.dll!BasepProbeForDllManifest+0x1eacd'], [2089928717, 'ntdll.dll!LdrpWalkImportDescriptor+0x84'], [2089902276, 'ntdll.dll!LdrpLoadDll+0xfffffd9b'], [2089902810, 'ntdll.dll!LdrLoadDll+0x110'], [2088770489, 'kernel32.dll!LoadLibraryExW+0xc8'], [4205549, 'chrome.exe!wWinMain+0x2cd [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:99 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 200, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtRequestWaitReplyPort', 'done': 45.075840999999997, 'ms': 44.847599000000002, 'syscallargs': [32, 1240632, 1240632], 'cpu': 2147742720},
-{'stacktrace': [[2011010674, 'ADVAPI32.dll!GatherRandomKeyFastUserMode+0xba'], [2011006756, 'ADVAPI32.dll!RandomFillBuffer+0xa3'], [2011006564, 'ADVAPI32.dll!GenRandom+0x25'], [2011006503, 'ADVAPI32.dll!NewGenRandomEx+0x4d'], [2011006415, 'ADVAPI32.dll!NewGenRandom+0x34'], [2011006354, 'ADVAPI32.dll!SystemFunction036+0x14'], [2011652938, 'RPCRT4.dll!GenerateRandomNumber+0x2ff'], [2011652709, 'RPCRT4.dll!UuidCreate+0x11'], [2001932179, 'ole32.dll!DllMain+0x33e86'], [2001719529, 'ole32.dll!_DllMainCRTStartup+0x48'], [2089816487, 'ntdll.dll!LdrpCallInitRoutine+0x14'], [2089929643, 'ntdll.dll!LdrpRunInitializeRoutines+0x1c7'], [2089902456, 'ntdll.dll!LdrpLoadDll+0xfffffe4f'], [2089902810, 'ntdll.dll!LdrLoadDll+0x110'], [2088770489, 'kernel32.dll!LoadLibraryExW+0xc8'], [4205549, 'chrome.exe!wWinMain+0x2cd [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:99 ]']], 'thread': 3956, 'syscall': 66, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwDeviceIoControlFile', 'done': 47.469441000000003, 'ms': 47.221643999999998, 'syscallargs': [128, 0, 0], 'cpu': 2147742720},
-{'stacktrace': [[2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2440, 'syscall': 190, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwRemoveIoCompletion', 'waiting': 1, 'done': 146.87732700000001, 'ms': 51.840667000000003, 'syscallargs': [112, 13500332, 13500336], 'cpu': 3124053392},
-{'stacktrace': [[2118254284, 'USER32.dll!_CreateWindowEx+0xb1'], [2118253656, 'USER32.dll!CreateWindowExW+0x33'], [2001923724, 'ole32.dll!InitMainThreadWnd+0x3c'], [2001727537, 'ole32.dll!CoInitializeEx+0xc6'], [2001729284, 'ole32.dll!OleInitializeEx+0x12'], [2001729257, 'ole32.dll!OleInitialize+0xf'], [19354461, 'chrome.dll!ChromeMain+0x7dd [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:223 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 4439, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserCreateWindowEx', 'done': 53.857683000000002, 'ms': 53.325772000000001, 'syscallargs': [0, 49208, 49208], 'cpu': 2147742720},
-{'stacktrace': [[19417443, 'chrome.dll!PlatformThread::SetName+0x63 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:62 ]'], [20401225, 'chrome.dll!BrowserMain+0xc9 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:294 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_THREADNAME', 'threadname': 'Chromium_BrowserMain', 'ms': 54.000996999999998, 'cpu': 2147742720},
-{'eventid': 1718170996, 'stacktrace': [[2088830549, 'kernel32.dll!CreateThread+0x1e'], [19417542, 'chrome.dll!PlatformThread::Create+0x36 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:83 ]'], [23799365, 'chrome.dll!base::Thread::StartWithOptions+0xb5 [ c:\\g\\trunk\\src\\base\\thread.cc:82 ]'], [20506130, 'chrome.dll!BrowserProcessImpl::CreateFileThread+0xa2 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.cc:300 ]'], [20398585, 'chrome.dll!BrowserProcessImpl::file_thread+0x19 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.h:61 ]'], [20852807, 'chrome.dll!ProfileImpl::GetPrefs+0xc7 [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:720 ]'], [20855066, 'chrome.dll!ProfileImpl::ProfileImpl+0x12a [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:565 ]'], [20856220, 'chrome.dll!Profile::CreateProfile+0x1c [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:69 ]'], [20602496, 'chrome.dll!ProfileManager::GetDefaultProfile+0x1c0 [ c:\\g\\trunk\\src\\chrome\\browser\\profile_manager.cc:96 ]'], [20402403, 'chrome.dll!BrowserMain+0x563 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:374 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_CREATETHREAD', 'startaddr': 2088830553, 'ms': 59.869340999999999, 'cpu': 2147742720},
-{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [19495803, 'chrome.dll!base::WaitableEvent::Wait+0x1b [ c:\\g\\trunk\\src\\base\\waitable_event_win.cc:42 ]'], [23799422, 'chrome.dll!base::Thread::StartWithOptions+0xee [ c:\\g\\trunk\\src\\base\\thread.cc:91 ]'], [20506130, 'chrome.dll!BrowserProcessImpl::CreateFileThread+0xa2 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.cc:300 ]'], [20398585, 'chrome.dll!BrowserProcessImpl::file_thread+0x19 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.h:61 ]'], [20852807, 'chrome.dll!ProfileImpl::GetPrefs+0xc7 [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:720 ]'], [20855066, 'chrome.dll!ProfileImpl::ProfileImpl+0x12a [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:565 ]'], [20856220, 'chrome.dll!Profile::CreateProfile+0x1c [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:69 ]'], [20602496, 'chrome.dll!ProfileManager::GetDefaultProfile+0x1c0 [ c:\\g\\trunk\\src\\chrome\\browser\\profile_manager.cc:96 ]'], [20402403, 'chrome.dll!BrowserMain+0x563 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:374 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 60.171892999999997, 'ms': 59.965162999999997, 'syscallargs': [152, 0, 0], 'cpu': 2147742720},
-{'stacktrace': [], 'thread': 2736, 'eventtype': 'EVENT_TYPE_THREADBEGIN', 'parenteventid': 1718170996, 'startaddr': 19417280, 'ms': 60.031652000000001, 'cpu': 3124053392},
-{'stacktrace': [[19417443, 'chrome.dll!PlatformThread::SetName+0x63 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:62 ]'], [23799603, 'chrome.dll!base::Thread::ThreadMain+0x53 [ c:\\g\\trunk\\src\\base\\thread.cc:145 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2736, 'eventtype': 'EVENT_TYPE_THREADNAME', 'threadname': 'Chrome_FileThread', 'ms': 60.136972999999998, 'cpu': 3124053392},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19467175, 'chrome.dll!base::MessagePumpForUI::WaitForWork+0x27 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:408 ]'], [19470141, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0xbd [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:393 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2736, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 64.683081000000001, 'ms': 60.200668, 'syscallargs': [1, 15858672, 1], 'cpu': 3124053392},
-{'stacktrace': [[2089175867, 'kernel32.dll!CreateToolhelp32Snapshot+0x2c'], [19416396, 'chrome.dll!process_util::KillProcesses+0x6c [ c:\\g\\trunk\\src\\base\\process_util_win.cc:296 ]'], [20567056, 'chrome.dll!BrowserInit::MessageWindow::HuntForZombieChromeProcesses+0x40 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:367 ]'], [20403945, 'chrome.dll!BrowserMain+0xb69 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:444 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 173, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtQuerySystemInformation', 'done': 61.949773, 'ms': 61.741366999999997, 'syscallargs': [5, 15859712, 65536], 'cpu': 2147742720},
-{'eventid': 1718192188, 'stacktrace': [[2088830549, 'kernel32.dll!CreateThread+0x1e'], [20819991, 'chrome.dll!chrome_browser_net::DnsMaster::PreLockedCreateNewSlaveIfNeeded+0x87 [ c:\\g\\trunk\\src\\chrome\\browser\\net\\dns_master.cc:303 ]'], [20824704, 'chrome.dll!chrome_browser_net::DnsMaster::Resolve+0x30 [ c:\\g\\trunk\\src\\chrome\\browser\\net\\dns_master.cc:70 ]'], [20522363, 'chrome.dll!chrome_browser_net::DnsPrefetchHostNamesAtStartup+0x2cb [ c:\\g\\trunk\\src\\chrome\\browser\\net\\dns_global.cc:430 ]'], [20404113, 'chrome.dll!BrowserMain+0xc11 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:462 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_CREATETHREAD', 'startaddr': 2088830553, 'ms': 63.390737999999999, 'cpu': 2147742720},
-{'stacktrace': [], 'thread': 2812, 'eventtype': 'EVENT_TYPE_THREADBEGIN', 'parenteventid': 1718192188, 'startaddr': 21429184, 'ms': 63.532375999999999, 'cpu': 3124053392},
-{'stacktrace': [[19417443, 'chrome.dll!PlatformThread::SetName+0x63 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:62 ]'], [21429081, 'chrome.dll!chrome_browser_net::DnsSlave::Run+0xa9 [ c:\\g\\trunk\\src\\chrome\\browser\\net\\dns_slave.cc:57 ]'], [21429195, 'chrome.dll!chrome_browser_net::DnsSlave::ThreadStart+0xb [ c:\\g\\trunk\\src\\chrome\\browser\\net\\dns_slave.cc:45 ]'], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2812, 'eventtype': 'EVENT_TYPE_THREADNAME', 'threadname': 'dns_prefetcher_1_of_8', 'ms': 63.553328999999998, 'cpu': 3124053392},
-{'eventid': 1718197540, 'stacktrace': [[2088830549, 'kernel32.dll!CreateThread+0x1e'], [4216426, 'chrome.exe!sandbox::BrokerServicesBase::Init+0x5a [ c:\\g\\trunk\\src\\sandbox\\src\\broker_services.cc:70 ]'], [20404275, 'chrome.dll!BrowserMain+0xcb3 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:523 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_CREATETHREAD', 'startaddr': 2088830553, 'ms': 63.831575999999998, 'cpu': 2147742720},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19467175, 'chrome.dll!base::MessagePumpForUI::WaitForWork+0x27 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:408 ]'], [19470141, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0xbd [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:393 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2736, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 133.03087400000001, 'ms': 64.752364, 'syscallargs': [1, 15858672, 1], 'cpu': 3124053392},
-{'stacktrace': [], 'thread': 2428, 'eventtype': 'EVENT_TYPE_THREADBEGIN', 'parenteventid': 1718197540, 'startaddr': 4215808, 'ms': 64.816618000000005, 'cpu': 3124053392},
-{'eventid': 1718207424, 'stacktrace': [[2088830549, 'kernel32.dll!CreateThread+0x1e'], [19417542, 'chrome.dll!PlatformThread::Create+0x36 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:83 ]'], [23799365, 'chrome.dll!base::Thread::StartWithOptions+0xb5 [ c:\\g\\trunk\\src\\base\\thread.cc:82 ]'], [20505911, 'chrome.dll!BrowserProcessImpl::CreateIOThread+0xa7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.cc:287 ]'], [20398537, 'chrome.dll!BrowserProcessImpl::io_thread+0x19 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.h:54 ]'], [20576442, 'chrome.dll!InstallJankometer+0x19a [ c:\\g\\trunk\\src\\chrome\\browser\\jankometer.cc:210 ]'], [20404892, 'chrome.dll!BrowserMain+0xf1c [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:565 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_CREATETHREAD', 'startaddr': 2088830553, 'ms': 64.829469000000003, 'cpu': 2147742720},
-{'stacktrace': [[4340339, 'chrome.exe!PlatformThread::SetName+0x63 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:62 ]'], [4215848, 'chrome.exe!sandbox::BrokerServicesBase::TargetEventsThread+0x28 [ c:\\g\\trunk\\src\\sandbox\\src\\broker_services.cc:147 ]'], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2428, 'eventtype': 'EVENT_TYPE_THREADNAME', 'threadname': 'BrokerEventThread', 'ms': 64.838966999999997, 'cpu': 3124053392},
-{'stacktrace': [[4215906, 'chrome.exe!sandbox::BrokerServicesBase::TargetEventsThread+0x62 [ c:\\g\\trunk\\src\\sandbox\\src\\broker_services.cc:151 ]'], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2428, 'syscall': 190, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwRemoveIoCompletion', 'waiting': 1, 'done': 115.701297, 'ms': 64.856288000000006, 'syscallargs': [168, 17039276, 17038976], 'cpu': 3124053392},
-{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [19495803, 'chrome.dll!base::WaitableEvent::Wait+0x1b [ c:\\g\\trunk\\src\\base\\waitable_event_win.cc:42 ]'], [23799422, 'chrome.dll!base::Thread::StartWithOptions+0xee [ c:\\g\\trunk\\src\\base\\thread.cc:91 ]'], [20505911, 'chrome.dll!BrowserProcessImpl::CreateIOThread+0xa7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.cc:287 ]'], [20398537, 'chrome.dll!BrowserProcessImpl::io_thread+0x19 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.h:54 ]'], [20576442, 'chrome.dll!InstallJankometer+0x19a [ c:\\g\\trunk\\src\\chrome\\browser\\jankometer.cc:210 ]'], [20404892, 'chrome.dll!BrowserMain+0xf1c [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:565 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 65.134815000000003, 'ms': 64.898751000000004, 'syscallargs': [192, 0, 0], 'cpu': 2147742720},
-{'stacktrace': [], 'thread': 708, 'eventtype': 'EVENT_TYPE_THREADBEGIN', 'parenteventid': 1718207424, 'startaddr': 19417280, 'ms': 64.96105, 'cpu': 3124053392},
-{'stacktrace': [[19417443, 'chrome.dll!PlatformThread::SetName+0x63 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:62 ]'], [23799603, 'chrome.dll!base::Thread::ThreadMain+0x53 [ c:\\g\\trunk\\src\\base\\thread.cc:145 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'eventtype': 'EVENT_TYPE_THREADNAME', 'threadname': 'Chrome_IOThread', 'ms': 65.062179999999998, 'cpu': 3124053392},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 101.74421599999999, 'ms': 65.212478000000004, 'syscallargs': [1, 18348996, 1], 'cpu': 2147742720},
-{'stacktrace': [[2118254284, 'USER32.dll!_CreateWindowEx+0xb1'], [2118253656, 'USER32.dll!CreateWindowExW+0x33'], [27144714, 'chrome.dll!views::ContainerWin::Init+0x11a [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:161 ]'], [27116867, 'chrome.dll!views::Window::Init+0x93 [ c:\\g\\trunk\\src\\chrome\\views\\window.cc:305 ]'], [27291723, 'chrome.dll!views::CustomFrameWindow::Init+0x3b [ c:\\g\\trunk\\src\\chrome\\views\\custom_frame_window.cc:917 ]'], [23006205, 'chrome.dll!BrowserFrame::CreateForBrowserView+0x4d [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_window_factory.cc:58 ]'], [23006465, 'chrome.dll!BrowserWindow::CreateBrowserWindow+0x51 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_window_factory.cc:34 ]'], [20656275, 'chrome.dll!Browser::Browser+0x263 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:229 ]'], [20564706, 'chrome.dll!BrowserInit::LaunchWithProfile::CreateTabbedBrowser+0x52 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:489 ]'], [20567260, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0x9c [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:536 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]'], [20405083, 'chrome.dll!BrowserMain+0xfdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:579 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]']], 'thread': 3956, 'syscall': 4439, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserCreateWindowEx', 'done': 72.739132999999995, 'ms': 70.077900999999997, 'syscallargs': [0, 1241012, 1239776], 'cpu': 2147742720},
-{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [23834872, 'chrome.dll!ConditionVariable::TimedWait+0xb8 [ c:\\g\\trunk\\src\\base\\condition_variable_win.cc:66 ]'], [23834961, 'chrome.dll!ConditionVariable::Wait+0x21 [ c:\\g\\trunk\\src\\base\\condition_variable_win.cc:48 ]'], [20821313, 'chrome.dll!chrome_browser_net::DnsMaster::GetNextAssignment+0x31 [ c:\\g\\trunk\\src\\chrome\\browser\\net\\dns_master.cc:245 ]'], [21429120, 'chrome.dll!chrome_browser_net::DnsSlave::Run+0xd0 [ c:\\g\\trunk\\src\\chrome\\browser\\net\\dns_slave.cc:63 ]'], [21429195, 'chrome.dll!chrome_browser_net::DnsSlave::ThreadStart+0xb [ c:\\g\\trunk\\src\\chrome\\browser\\net\\dns_slave.cc:45 ]'], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2812, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 302.163543, 'ms': 70.703958, 'syscallargs': [232, 0, 0], 'cpu': 2147742720},
-{'stacktrace': [[2118254284, 'USER32.dll!_CreateWindowEx+0xb1'], [2118253656, 'USER32.dll!CreateWindowExW+0x33'], [27264799, 'chrome.dll!views::TooltipManager::Init+0x2f [ c:\\g\\trunk\\src\\chrome\\views\\tooltip_manager.cc:114 ]'], [27145071, 'chrome.dll!views::ContainerWin::Init+0x27f [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:187 ]'], [27116867, 'chrome.dll!views::Window::Init+0x93 [ c:\\g\\trunk\\src\\chrome\\views\\window.cc:305 ]'], [27291723, 'chrome.dll!views::CustomFrameWindow::Init+0x3b [ c:\\g\\trunk\\src\\chrome\\views\\custom_frame_window.cc:917 ]'], [23006205, 'chrome.dll!BrowserFrame::CreateForBrowserView+0x4d [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_window_factory.cc:58 ]'], [23006465, 'chrome.dll!BrowserWindow::CreateBrowserWindow+0x51 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_window_factory.cc:34 ]'], [20656275, 'chrome.dll!Browser::Browser+0x263 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:229 ]'], [20564706, 'chrome.dll!BrowserInit::LaunchWithProfile::CreateTabbedBrowser+0x52 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:489 ]'], [20567260, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0x9c [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:536 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]'], [20405083, 'chrome.dll!BrowserMain+0xfdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:579 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]']], 'thread': 3956, 'syscall': 4439, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserCreateWindowEx', 'done': 74.146016000000003, 'ms': 72.944186999999999, 'syscallargs': [32, 1240832, 1239596], 'cpu': 3124053392},
-{'stacktrace': [[2118254284, 'USER32.dll!_CreateWindowEx+0xb1'], [2118253656, 'USER32.dll!CreateWindowExW+0x33'], [27969145, 'chrome.dll!ATL::CWindowImplBaseT<ATL::CWindow,ATL::CWinTraits<47120384,0> >::Create+0xb9 [ c:\\program files\\microsoft visual studio 8\\vc\\atlmfc\\include\\atlwin.h:3139 ]'], [21304605, 'chrome.dll!ATL::CWindowImpl<AutocompleteEditView,WTL::CRichEditCtrlT<ATL::CWindow>,ATL::CWinTraits<1342177664,0> >::Create+0x6d [ c:\\program files\\microsoft visual studio 8\\vc\\atlmfc\\include\\atlwin.h:3215 ]'], [21312331, 'chrome.dll!AutocompleteEditView::AutocompleteEditView+0x2cb [ c:\\g\\trunk\\src\\chrome\\browser\\autocomplete\\autocomplete_edit.cc:694 ]'], [23005496, 'chrome.dll!LocationBarView::Init+0x168 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\location_bar_view.cc:131 ]'], [23207043, 'chrome.dll!BrowserToolbarView::CreateCenterStack+0x253 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\toolbar_view.cc:186 ]'], [23210088, 'chrome.dll!BrowserToolbarView::Init+0x18 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\toolbar_view.cc:96 ]'], [23149860, 'chrome.dll!BrowserView2::Init+0x134 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:283 ]'], [23145656, 'chrome.dll!BrowserView2::ViewHierarchyChanged+0x38 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:788 ]'], [27129880, 'chrome.dll!views::View::PropagateAddNotifications+0x88 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:674 ]'], [27131408, 'chrome.dll!views::View::AddChildView+0xb0 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:585 ]'], [27131647, 'chrome.dll!views::View::AddChildView+0x2f [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:561 ]'], [23201897, 'chrome.dll!OpaqueNonClientView::ViewHierarchyChanged+0xd9 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\opaque_non_client_view.cc:670 ]'], [27129880, 'chrome.dll!views::View::PropagateAddNotifications+0x88 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:674 ]'], [27131408, 'chrome.dll!views::View::AddChildView+0xb0 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:585 ]']], 'thread': 3956, 'syscall': 4439, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserCreateWindowEx', 'done': 88.230208000000005, 'ms': 86.457915999999997, 'syscallargs': [0, 49640, 49640], 'cpu': 2147742720},
-{'stacktrace': [[27278917, 'chrome.dll!views::HWNDView::DidChangeBounds+0x5 [ c:\\g\\trunk\\src\\chrome\\views\\hwnd_view.cc:137 ]'], [21099029, 'chrome.dll!views::View::SetBounds+0x45 [ c:\\g\\trunk\\src\\chrome\\views\\view.h:164 ]'], [23005111, 'chrome.dll!LocationBarView::DoLayout+0x227 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\location_bar_view.cc:431 ]'], [23006103, 'chrome.dll!LocationBarView::Layout+0x7 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\location_bar_view.cc:218 ]'], [21099029, 'chrome.dll!views::View::SetBounds+0x45 [ c:\\g\\trunk\\src\\chrome\\views\\view.h:164 ]'], [23203355, 'chrome.dll!BrowserToolbarView::Layout+0x20b [ c:\\g\\trunk\\src\\chrome\\browser\\views\\toolbar_view.cc:311 ]'], [27117623, 'chrome.dll!views::View::DidChangeBounds+0x7 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:192 ]'], [23143722, 'chrome.dll!BrowserView2::LayoutToolbar+0xea [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:920 ]'], [23143963, 'chrome.dll!BrowserView2::Layout+0x1b [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:768 ]'], [27117623, 'chrome.dll!views::View::DidChangeBounds+0x7 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:192 ]'], [23198989, 'chrome.dll!OpaqueNonClientView::Layout+0x4d [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\opaque_non_client_view.cc:633 ]'], [27117623, 'chrome.dll!views::View::DidChangeBounds+0x7 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:192 ]'], [27138473, 'chrome.dll!views::FillLayout::Layout+0x69 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:57 ]'], [27122596, 'chrome.dll!views::View::Layout+0x14 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:214 ]'], [27142349, 'chrome.dll!views::ContainerWin::ChangeSize+0x8d [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:815 ]'], [27141386, 'chrome.dll!views::ContainerWin::SetContentsView+0xea [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:214 ]']], 'thread': 3956, 'syscall': 4642, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserSetWindowPos', 'done': 97.329130000000006, 'ms': 96.881028000000001, 'syscallargs': [8979080, 0, 137], 'cpu': 3124053392},
-{'eventid': 1718457244, 'stacktrace': [[2088839620, 'kernel32.dll!BaseCreateThreadPoolThread+0x44'], [2089982739, 'ntdll.dll!RtlpStartThreadpoolThread+0x4e'], [2090037459, 'ntdll.dll!RtlpStartWaitThread+0x51'], [2090031864, 'ntdll.dll!RtlRegisterWait+0x105'], [2088899101, 'kernel32.dll!RegisterWaitForSingleObject+0x50'], [27049362, 'chrome.dll!WorkerThreadTicker::Start+0xc2 [ c:\\g\\trunk\\src\\chrome\\common\\worker_thread_ticker.cc:66 ]'], [20653873, 'chrome.dll!Browser::InitHangMonitor+0xd1 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1579 ]'], [20656498, 'chrome.dll!Browser::Browser+0x342 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:247 ]'], [20564706, 'chrome.dll!BrowserInit::LaunchWithProfile::CreateTabbedBrowser+0x52 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:489 ]'], [20567260, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0x9c [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:536 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]'], [20405083, 'chrome.dll!BrowserMain+0xfdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:579 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_CREATETHREAD', 'startaddr': 2088830553, 'ms': 98.261930000000007, 'cpu': 3124053392},
-{'stacktrace': [], 'thread': 3500, 'eventtype': 'EVENT_TYPE_THREADBEGIN', 'parenteventid': 1718457244, 'startaddr': 2089983918, 'ms': 98.425916999999998, 'cpu': 2147742720},
-{'stacktrace': [[2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 3500, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 103.631327, 'ms': 98.535987000000006, 'syscallargs': [2, 32505136, 1], 'cpu': 2147742720},
-{'stacktrace': [[2118254284, 'USER32.dll!_CreateWindowEx+0xb1'], [2118253656, 'USER32.dll!CreateWindowExW+0x33'], [27264799, 'chrome.dll!views::TooltipManager::Init+0x2f [ c:\\g\\trunk\\src\\chrome\\views\\tooltip_manager.cc:114 ]'], [27145071, 'chrome.dll!views::ContainerWin::Init+0x27f [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:187 ]'], [21603024, 'chrome.dll!WebContentsViewWin::CreateView+0x20 [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents_view_win.cc:61 ]'], [21357991, 'chrome.dll!TabContents::CreateWithType+0x67 [ c:\\g\\trunk\\src\\chrome\\browser\\tab_contents_factory.cc:92 ]'], [20652484, 'chrome.dll!Browser::CreateTabContentsForURL+0xb4 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1349 ]'], [20651898, 'chrome.dll!Browser::AddTabWithURL+0x12a [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1228 ]'], [20567357, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0xfd [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:540 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]'], [20405083, 'chrome.dll!BrowserMain+0xfdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:579 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]']], 'thread': 3956, 'syscall': 4439, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserCreateWindowEx', 'done': 99.715187, 'ms': 99.146679000000006, 'syscallargs': [32, 1240616, 1239380], 'cpu': 3124053392},
-{'eventid': 1718479108, 'stacktrace': [[2088830549, 'kernel32.dll!CreateThread+0x1e'], [19417542, 'chrome.dll!PlatformThread::Create+0x36 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:83 ]'], [23799365, 'chrome.dll!base::Thread::StartWithOptions+0xb5 [ c:\\g\\trunk\\src\\base\\thread.cc:82 ]'], [23799735, 'chrome.dll!base::Thread::Start+0x17 [ c:\\g\\trunk\\src\\base\\thread.cc:72 ]'], [20506336, 'chrome.dll!BrowserProcessImpl::CreateDBThread+0x90 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.cc:311 ]'], [20398633, 'chrome.dll!BrowserProcessImpl::db_thread+0x19 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.h:68 ]'], [20857407, 'chrome.dll!ProfileImpl::RequestContext::RequestContext+0x2ef [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:144 ]'], [20862571, 'chrome.dll!ProfileImpl::GetRequestContext+0x11b [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:739 ]'], [20852186, 'chrome.dll!ProfileImpl::InitializeSpellChecker+0xfa [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:929 ]'], [20852480, 'chrome.dll!ProfileImpl::GetSpellChecker+0x10 [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:960 ]'], [21339442, 'chrome.dll!RenderViewHost::CreateRenderView+0x82 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host.cc:123 ]'], [21021101, 'chrome.dll!WebContents::CreateRenderViewForRenderManager+0x2d [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:1367 ]'], [21556055, 'chrome.dll!RenderViewHostManager::Navigate+0x57 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host_manager.cc:103 ]'], [21021786, 'chrome.dll!WebContents::NavigateToPendingEntry+0x1a [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:354 ]'], [21011780, 'chrome.dll!NavigationController::NavigateToPendingEntry+0x144 [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:1040 ]'], [21012234, 'chrome.dll!NavigationController::LoadEntry+0x6a [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:276 ]']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_CREATETHREAD', 'startaddr': 2088830553, 'ms': 101.072622, 'cpu': 3124053392},
-{'stacktrace': [], 'thread': 1884, 'eventtype': 'EVENT_TYPE_THREADBEGIN', 'parenteventid': 1718479108, 'startaddr': 19417280, 'ms': 101.217613, 'cpu': 2147742720},
-{'stacktrace': [[19417443, 'chrome.dll!PlatformThread::SetName+0x63 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:62 ]'], [23799603, 'chrome.dll!base::Thread::ThreadMain+0x53 [ c:\\g\\trunk\\src\\base\\thread.cc:145 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 1884, 'eventtype': 'EVENT_TYPE_THREADNAME', 'threadname': 'Chrome_DBThread', 'ms': 101.24918099999999, 'cpu': 2147742720},
-{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [19495803, 'chrome.dll!base::WaitableEvent::Wait+0x1b [ c:\\g\\trunk\\src\\base\\waitable_event_win.cc:42 ]'], [19485939, 'chrome.dll!base::MessagePumpDefault::Run+0xc3 [ c:\\g\\trunk\\src\\base\\message_pump_default.cc:43 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 1884, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 299.45342199999999, 'ms': 101.293041, 'syscallargs': [284, 0, 0], 'cpu': 2147742720},
-{'eventid': 1718482060, 'stacktrace': [[2088830549, 'kernel32.dll!CreateThread+0x1e'], [19417542, 'chrome.dll!PlatformThread::Create+0x36 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:83 ]'], [23799365, 'chrome.dll!base::Thread::StartWithOptions+0xb5 [ c:\\g\\trunk\\src\\base\\thread.cc:82 ]'], [23799735, 'chrome.dll!base::Thread::Start+0x17 [ c:\\g\\trunk\\src\\base\\thread.cc:72 ]'], [20811109, 'chrome.dll!SafeBrowsingService::Start+0xa5 [ c:\\g\\trunk\\src\\chrome\\browser\\safe_browsing\\safe_browsing_service.cc:61 ]'], [20812754, 'chrome.dll!SafeBrowsingService::Initialize+0x72 [ c:\\g\\trunk\\src\\chrome\\browser\\safe_browsing\\safe_browsing_service.cc:54 ]'], [20696885, 'chrome.dll!ResourceDispatcherHost::Initialize+0x75 [ c:\\g\\trunk\\src\\chrome\\browser\\resource_dispatcher_host.cc:1439 ]'], [20505550, 'chrome.dll!BrowserProcessImpl::CreateResourceDispatcherHost+0xae [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.cc:263 ]'], [20398441, 'chrome.dll!BrowserProcessImpl::resource_dispatcher_host+0x19 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.h:40 ]'], [20390068, 'chrome.dll!RenderProcessHost::Init+0xa4 [ c:\\g\\trunk\\src\\chrome\\browser\\render_process_host.cc:223 ]'], [21339442, 'chrome.dll!RenderViewHost::CreateRenderView+0x82 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host.cc:123 ]'], [21021101, 'chrome.dll!WebContents::CreateRenderViewForRenderManager+0x2d [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:1367 ]'], [21556055, 'chrome.dll!RenderViewHostManager::Navigate+0x57 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host_manager.cc:103 ]'], [21021786, 'chrome.dll!WebContents::NavigateToPendingEntry+0x1a [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:354 ]'], [21011780, 'chrome.dll!NavigationController::NavigateToPendingEntry+0x144 [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:1040 ]'], [21012234, 'chrome.dll!NavigationController::LoadEntry+0x6a [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:276 ]']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_CREATETHREAD', 'startaddr': 2088830553, 'ms': 101.49222899999999, 'cpu': 3124053392},
-{'stacktrace': [], 'thread': 2136, 'eventtype': 'EVENT_TYPE_THREADBEGIN', 'parenteventid': 1718482060, 'startaddr': 19417280, 'ms': 101.625765, 'cpu': 2147742720},
-{'stacktrace': [[19417443, 'chrome.dll!PlatformThread::SetName+0x63 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:62 ]'], [23799603, 'chrome.dll!base::Thread::ThreadMain+0x53 [ c:\\g\\trunk\\src\\base\\thread.cc:145 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2136, 'eventtype': 'EVENT_TYPE_THREADNAME', 'threadname': 'Chrome_SafeBrowsingThread', 'ms': 101.65426100000001, 'cpu': 2147742720},
-{'stacktrace': [[2011711194, 'RPCRT4.dll!NMP_Open+0x122'], [2011709069, 'RPCRT4.dll!OSF_CCONNECTION::TransOpen+0x5e'], [2011710455, 'RPCRT4.dll!OSF_CCONNECTION::OpenConnectionAndBind+0x98'], [2011710849, 'RPCRT4.dll!OSF_CCALL::BindToServer+0x88'], [2011710672, 'RPCRT4.dll!OSF_BINDING_HANDLE::AllocateCCall+0x4b04'], [2011691420, 'RPCRT4.dll!OSF_BINDING_HANDLE::NegotiateTransferSyntax+0x28'], [2011664833, 'RPCRT4.dll!I_RpcGetBufferWithObject+0x48'], [2011664888, 'RPCRT4.dll!I_RpcGetBuffer+0xf'], [2011666469, 'RPCRT4.dll!NdrGetBuffer+0x28'], [2012169739, 'RPCRT4.dll!NdrClientCall2+0x13b'], [2011045072, 'ADVAPI32.dll!LsarOpenPolicy2+0x1b'], [2011044946, 'ADVAPI32.dll!LsaOpenPolicy+0x43'], [2011053296, 'ADVAPI32.dll!InitializeSidLookupTable+0xef'], [2011049382, 'ADVAPI32.dll!LocalConvertStringSDToSD_Rev1+0x7a'], [2011049228, 'ADVAPI32.dll!ConvertStringSecurityDescriptorToSecurityDescriptorW+0x2e'], [19488210, 'chrome.dll!win_util::GetLogonSessionOnlyDACL+0x1a2 [ c:\\g\\trunk\\src\\base\\win_util.cc:227 ]']], 'thread': 3956, 'syscall': 224, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwSetInformationFile', 'done': 102.443746, 'ms': 102.131416, 'syscallargs': [340, 1236548, 1236564], 'cpu': 3124053392},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 103.014769, 'ms': 102.43620300000001, 'syscallargs': [1, 18348996, 1], 'cpu': 2147742720},
-{'stacktrace': [[19462999, 'chrome.dll!file_util::ReadFile+0x77 [ c:\\g\\trunk\\src\\base\\file_util_win.cc:508 ]'], [21425417, 'chrome.dll!SafeBrowsingDatabase::LoadBloomFilter+0xe9 [ c:\\g\\trunk\\src\\chrome\\browser\\safe_browsing\\safe_browsing_database.cc:81 ]'], [21806924, 'chrome.dll!SafeBrowsingDatabaseImpl::Init+0xfc [ c:\\g\\trunk\\src\\chrome\\browser\\safe_browsing\\safe_browsing_database_impl.cc:105 ]'], [20805565, 'chrome.dll!SafeBrowsingService::GetDatabase+0x16d [ c:\\g\\trunk\\src\\chrome\\browser\\safe_browsing\\safe_browsing_service.cc:381 ]'], [20807180, 'chrome.dll!SafeBrowsingService::OnDBInitialize+0x6c [ c:\\g\\trunk\\src\\chrome\\browser\\safe_browsing\\safe_browsing_service.cc:106 ]'], [19405904, 'chrome.dll!MessageLoop::RunTask+0x80 [ c:\\g\\trunk\\src\\base\\message_loop.cc:309 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19486017, 'chrome.dll!base::MessagePumpDefault::Run+0x111 [ c:\\g\\trunk\\src\\base\\message_pump_default.cc:50 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2136, 'syscall': 183, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtReadFile', 'done': 103.483823, 'ms': 102.872013, 'syscallargs': [340, 0, 0], 'cpu': 2147742720},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 103.86767, 'ms': 103.13768899999999, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720},
-{'stacktrace': [[2118302493, 'USER32.dll!CreateDesktopW+0x42'], [20392388, 'chrome.dll!RenderProcessHost::Init+0x9b4 [ c:\\g\\trunk\\src\\chrome\\browser\\render_process_host.cc:374 ]'], [21339442, 'chrome.dll!RenderViewHost::CreateRenderView+0x82 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host.cc:123 ]'], [21021101, 'chrome.dll!WebContents::CreateRenderViewForRenderManager+0x2d [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:1367 ]'], [21556055, 'chrome.dll!RenderViewHostManager::Navigate+0x57 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host_manager.cc:103 ]'], [21021786, 'chrome.dll!WebContents::NavigateToPendingEntry+0x1a [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:354 ]'], [21011780, 'chrome.dll!NavigationController::NavigateToPendingEntry+0x144 [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:1040 ]'], [21012234, 'chrome.dll!NavigationController::LoadEntry+0x6a [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:276 ]'], [21013144, 'chrome.dll!NavigationController::LoadURL+0x28 [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:520 ]'], [20652523, 'chrome.dll!Browser::CreateTabContentsForURL+0xdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1358 ]'], [20651898, 'chrome.dll!Browser::AddTabWithURL+0x12a [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1228 ]'], [20567357, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0xfd [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:540 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]'], [20405083, 'chrome.dll!BrowserMain+0xfdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:579 ]']], 'thread': 3956, 'syscall': 4436, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserCreateDesktop', 'done': 103.842527, 'ms': 103.254464, 'syscallargs': [1239256, 0, 0], 'cpu': 2147742720},
-{'stacktrace': [[19407956, 'chrome.dll!MessageLoop::PostTask+0x14 [ c:\\g\\trunk\\src\\base\\message_loop.cc:231 ]'], [20805662, 'chrome.dll!SafeBrowsingService::GetDatabase+0x1ce [ c:\\g\\trunk\\src\\chrome\\browser\\safe_browsing\\safe_browsing_service.cc:383 ]'], [20807180, 'chrome.dll!SafeBrowsingService::OnDBInitialize+0x6c [ c:\\g\\trunk\\src\\chrome\\browser\\safe_browsing\\safe_browsing_service.cc:106 ]'], [19405904, 'chrome.dll!MessageLoop::RunTask+0x80 [ c:\\g\\trunk\\src\\base\\message_loop.cc:309 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19486017, 'chrome.dll!base::MessagePumpDefault::Run+0x111 [ c:\\g\\trunk\\src\\base\\message_pump_default.cc:50 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2136, 'syscall': 4571, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserPostMessage', 'done': 103.852026, 'ms': 103.507289, 'syscallargs': [6685238, 1025, 13825696], 'cpu': 3124053392},
-{'stacktrace': [[2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 3500, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 115.36522100000001, 'ms': 103.633562, 'syscallargs': [4, 32505136, 1], 'cpu': 3124053392},
-{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [19495803, 'chrome.dll!base::WaitableEvent::Wait+0x1b [ c:\\g\\trunk\\src\\base\\waitable_event_win.cc:42 ]'], [19485939, 'chrome.dll!base::MessagePumpDefault::Run+0xc3 [ c:\\g\\trunk\\src\\base\\message_pump_default.cc:43 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2136, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 299.48722500000002, 'ms': 103.86012700000001, 'syscallargs': [292, 0, 0], 'cpu': 3124053392},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 118.02812900000001, 'ms': 104.123289, 'syscallargs': [2, 18348996, 1], 'cpu': 3124053392},
-{'eventid': 1718553012, 'stacktrace': [[2011134008, 'ADVAPI32.dll!CreateProcessAsUserW+0xc3'], [4226929, 'chrome.exe!sandbox::TargetProcess::Create+0xe1 [ c:\\g\\trunk\\src\\sandbox\\src\\target_process.cc:158 ]'], [4215094, 'chrome.exe!sandbox::BrokerServicesBase::SpawnTarget+0x146 [ c:\\g\\trunk\\src\\sandbox\\src\\broker_services.cc:262 ]'], [20393087, 'chrome.dll!RenderProcessHost::Init+0xc6f [ c:\\g\\trunk\\src\\chrome\\browser\\render_process_host.cc:400 ]'], [21339442, 'chrome.dll!RenderViewHost::CreateRenderView+0x82 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host.cc:123 ]'], [21021101, 'chrome.dll!WebContents::CreateRenderViewForRenderManager+0x2d [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:1367 ]'], [21556055, 'chrome.dll!RenderViewHostManager::Navigate+0x57 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host_manager.cc:103 ]'], [21021786, 'chrome.dll!WebContents::NavigateToPendingEntry+0x1a [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:354 ]'], [21011780, 'chrome.dll!NavigationController::NavigateToPendingEntry+0x144 [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:1040 ]'], [21012234, 'chrome.dll!NavigationController::LoadEntry+0x6a [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:276 ]'], [21013144, 'chrome.dll!NavigationController::LoadURL+0x28 [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:520 ]'], [20652523, 'chrome.dll!Browser::CreateTabContentsForURL+0xdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1358 ]'], [20651898, 'chrome.dll!Browser::AddTabWithURL+0x12a [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1228 ]'], [20567357, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0xfd [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:540 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_CREATETHREAD', 'startaddr': 2088830565, 'ms': 109.568395, 'cpu': 3124053392},
-{'stacktrace': [[2088869567, 'kernel32.dll!CreateProcessInternalW+0x9ac'], [2011134008, 'ADVAPI32.dll!CreateProcessAsUserW+0xc3'], [4226929, 'chrome.exe!sandbox::TargetProcess::Create+0xe1 [ c:\\g\\trunk\\src\\sandbox\\src\\target_process.cc:158 ]'], [4215094, 'chrome.exe!sandbox::BrokerServicesBase::SpawnTarget+0x146 [ c:\\g\\trunk\\src\\sandbox\\src\\broker_services.cc:262 ]'], [20393087, 'chrome.dll!RenderProcessHost::Init+0xc6f [ c:\\g\\trunk\\src\\chrome\\browser\\render_process_host.cc:400 ]'], [21339442, 'chrome.dll!RenderViewHost::CreateRenderView+0x82 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host.cc:123 ]'], [21021101, 'chrome.dll!WebContents::CreateRenderViewForRenderManager+0x2d [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:1367 ]'], [21556055, 'chrome.dll!RenderViewHostManager::Navigate+0x57 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host_manager.cc:103 ]'], [21021786, 'chrome.dll!WebContents::NavigateToPendingEntry+0x1a [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:354 ]'], [21011780, 'chrome.dll!NavigationController::NavigateToPendingEntry+0x144 [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:1040 ]'], [21012234, 'chrome.dll!NavigationController::LoadEntry+0x6a [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:276 ]'], [21013144, 'chrome.dll!NavigationController::LoadURL+0x28 [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:520 ]'], [20652523, 'chrome.dll!Browser::CreateTabContentsForURL+0xdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1358 ]'], [20651898, 'chrome.dll!Browser::AddTabWithURL+0x12a [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1228 ]'], [20567357, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0xfd [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:540 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]']], 'thread': 3956, 'syscall': 200, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtRequestWaitReplyPort', 'done': 112.819925, 'ms': 109.602198, 'syscallargs': [32, 1237344, 1237344], 'cpu': 3124053392},
-{'stacktrace': [[2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 3500, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 132.609871, 'ms': 115.64011600000001, 'syscallargs': [11, 32505136, 1], 'cpu': 2147742720},
-{'stacktrace': [[4216265, 'chrome.exe!sandbox::BrokerServicesBase::TargetEventsThread+0x1c9 [ c:\\g\\trunk\\src\\sandbox\\src\\broker_services.cc:151 ]'], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2428, 'syscall': 190, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwRemoveIoCompletion', 'waiting': 1, 'done': 304.12608299999999, 'ms': 115.711634, 'syscallargs': [168, 17039276, 17038976], 'cpu': 2147742720},
-{'stacktrace': [[20454796, 'chrome.dll!VisitedLinkMaster::ReadFromFile+0x2c [ c:\\g\\trunk\\src\\chrome\\browser\\visitedlink_master.cc:966 ]'], [20463804, 'chrome.dll!VisitedLinkMaster::InitFromFile+0x18c [ c:\\g\\trunk\\src\\chrome\\browser\\visitedlink_master.cc:577 ]'], [20464344, 'chrome.dll!VisitedLinkMaster::Init+0x8 [ c:\\g\\trunk\\src\\chrome\\browser\\visitedlink_master.cc:256 ]'], [20393352, 'chrome.dll!RenderProcessHost::Init+0xd78 [ c:\\g\\trunk\\src\\chrome\\browser\\render_process_host.cc:438 ]'], [21339442, 'chrome.dll!RenderViewHost::CreateRenderView+0x82 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host.cc:123 ]'], [21021101, 'chrome.dll!WebContents::CreateRenderViewForRenderManager+0x2d [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:1367 ]'], [21556055, 'chrome.dll!RenderViewHostManager::Navigate+0x57 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host_manager.cc:103 ]'], [21021786, 'chrome.dll!WebContents::NavigateToPendingEntry+0x1a [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:354 ]'], [21011780, 'chrome.dll!NavigationController::NavigateToPendingEntry+0x144 [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:1040 ]'], [21012234, 'chrome.dll!NavigationController::LoadEntry+0x6a [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:276 ]'], [21013144, 'chrome.dll!NavigationController::LoadURL+0x28 [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:520 ]'], [20652523, 'chrome.dll!Browser::CreateTabContentsForURL+0xdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1358 ]'], [20651898, 'chrome.dll!Browser::AddTabWithURL+0x12a [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1228 ]'], [20567357, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0xfd [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:540 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]']], 'thread': 3956, 'syscall': 183, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtReadFile', 'done': 116.641361, 'ms': 115.943507, 'syscallargs': [428, 0, 0], 'cpu': 3124053392},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 126.694035, 'ms': 118.164739, 'syscallargs': [2, 18348996, 1], 'cpu': 3124053392},
-{'stacktrace': [[2118254284, 'USER32.dll!_CreateWindowEx+0xb1'], [2118253656, 'USER32.dll!CreateWindowExW+0x33'], [21895768, 'chrome.dll!RenderWidgetHostViewWin::EnsureTooltip+0x58 [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host_view_win.cc:897 ]'], [21896123, 'chrome.dll!RenderWidgetHostViewWin::SetSize+0x3b [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host_view_win.cc:140 ]'], [21021157, 'chrome.dll!WebContents::CreateRenderViewForRenderManager+0x65 [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:1374 ]'], [21556055, 'chrome.dll!RenderViewHostManager::Navigate+0x57 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host_manager.cc:103 ]'], [21021786, 'chrome.dll!WebContents::NavigateToPendingEntry+0x1a [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:354 ]'], [21011780, 'chrome.dll!NavigationController::NavigateToPendingEntry+0x144 [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:1040 ]'], [21012234, 'chrome.dll!NavigationController::LoadEntry+0x6a [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:276 ]'], [21013144, 'chrome.dll!NavigationController::LoadURL+0x28 [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:520 ]'], [20652523, 'chrome.dll!Browser::CreateTabContentsForURL+0xdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1358 ]'], [20651898, 'chrome.dll!Browser::AddTabWithURL+0x12a [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1228 ]'], [20567357, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0xfd [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:540 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]']], 'thread': 3956, 'syscall': 4439, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserCreateWindowEx', 'done': 125.14244100000001, 'ms': 124.58874, 'syscallargs': [32, 1240148, 1238912], 'cpu': 2147742720},
-{'stacktrace': [[19469642, 'chrome.dll!base::MessagePumpForIO::ProcessNextObject+0xba [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:668 ]'], [19470272, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0x70 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:537 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 127.571521, 'ms': 126.896575, 'syscallargs': [1, 18349136, 1], 'cpu': 2147742720},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 129.02449899999999, 'ms': 127.671254, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720},
-{'stacktrace': [[27279557, 'chrome.dll!views::HWNDView::Attach+0x95 [ c:\\g\\trunk\\src\\chrome\\views\\hwnd_view.cc:46 ]'], [23096819, 'chrome.dll!TabContentsContainerView::SetTabContents+0xc3 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\tab_contents_container_view.cc:83 ]'], [23148817, 'chrome.dll!BrowserView2::TabSelectedAt+0x81 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:530 ]'], [21206163, 'chrome.dll!TabStripModel::ChangeSelectedContentsFrom+0xe3 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:585 ]'], [21208866, 'chrome.dll!TabStripModel::InsertTabContentsAt+0x142 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:103 ]'], [21209292, 'chrome.dll!TabStripModel::AddTabContents+0xac [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:378 ]'], [20651916, 'chrome.dll!Browser::AddTabWithURL+0x13c [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1232 ]'], [20567357, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0xfd [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:540 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]'], [20405083, 'chrome.dll!BrowserMain+0xfdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:579 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 4642, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserSetWindowPos', 'done': 129.14797799999999, 'ms': 128.71188900000001, 'syscallargs': [24969860, 0, 5], 'cpu': 2147742720},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 147.204184, 'ms': 129.097972, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720},
-{'stacktrace': [[2088925701, 'kernel32.dll!BasepCopyFileExW+0x3f2'], [2088926059, 'kernel32.dll!CopyFileExW+0x39'], [2088958097, 'kernel32.dll!CopyFileW+0x1e'], [19457905, 'chrome.dll!base::CopyFileW+0x41 [ c:\\g\\trunk\\src\\base\\file_util_win.cc:115 ]'], [19447294, 'chrome.dll!base::CopyFileW+0x2e [ c:\\g\\trunk\\src\\base\\file_util.cc:324 ]'], [21848115, 'chrome.dll!BookmarkStorageBackend::BookmarkStorageBackend+0xc3 [ c:\\g\\trunk\\src\\chrome\\browser\\bookmarks\\bookmark_storage.cc:123 ]'], [21848622, 'chrome.dll!BookmarkStorage::BookmarkStorage+0x12e [ c:\\g\\trunk\\src\\chrome\\browser\\bookmarks\\bookmark_storage.cc:41 ]'], [21452155, 'chrome.dll!BookmarkModel::Load+0xcb [ c:\\g\\trunk\\src\\chrome\\browser\\bookmarks\\bookmark_model.cc:137 ]'], [20848903, 'chrome.dll!ProfileImpl::GetBookmarkModel+0x47 [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:853 ]'], [22957786, 'chrome.dll!BookmarkBarView::BookmarkBarView+0x13a [ c:\\g\\trunk\\src\\chrome\\browser\\views\\bookmark_bar_view.cc:692 ]'], [23141288, 'chrome.dll!BrowserView2::GetBookmarkBarView+0x48 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:444 ]'], [23147457, 'chrome.dll!BrowserView2::UpdateUIForContents+0x11 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:1020 ]'], [23148906, 'chrome.dll!BrowserView2::TabSelectedAt+0xda [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:538 ]'], [21206163, 'chrome.dll!TabStripModel::ChangeSelectedContentsFrom+0xe3 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:585 ]'], [21208866, 'chrome.dll!TabStripModel::InsertTabContentsAt+0x142 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:103 ]'], [21209292, 'chrome.dll!TabStripModel::AddTabContents+0xac [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:378 ]']], 'thread': 3956, 'syscall': 37, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtCreateFile', 'done': 132.690607, 'ms': 132.46627699999999, 'syscallargs': [1238200, 1074856064, 1237976], 'cpu': 2147742720},
-{'stacktrace': [[2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 3500, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 146.83514199999999, 'ms': 132.61238499999999, 'syscallargs': [12, 32505136, 1], 'cpu': 3124053392},
-{'stacktrace': [[19407956, 'chrome.dll!MessageLoop::PostTask+0x14 [ c:\\g\\trunk\\src\\base\\message_loop.cc:231 ]'], [21849655, 'chrome.dll!BookmarkStorage::LoadBookmarks+0x87 [ c:\\g\\trunk\\src\\chrome\\browser\\bookmarks\\bookmark_storage.cc:53 ]'], [21452202, 'chrome.dll!BookmarkModel::Load+0xfa [ c:\\g\\trunk\\src\\chrome\\browser\\bookmarks\\bookmark_model.cc:138 ]'], [20848903, 'chrome.dll!ProfileImpl::GetBookmarkModel+0x47 [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:853 ]'], [22957786, 'chrome.dll!BookmarkBarView::BookmarkBarView+0x13a [ c:\\g\\trunk\\src\\chrome\\browser\\views\\bookmark_bar_view.cc:692 ]'], [23141288, 'chrome.dll!BrowserView2::GetBookmarkBarView+0x48 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:444 ]'], [23147457, 'chrome.dll!BrowserView2::UpdateUIForContents+0x11 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:1020 ]'], [23148906, 'chrome.dll!BrowserView2::TabSelectedAt+0xda [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:538 ]'], [21206163, 'chrome.dll!TabStripModel::ChangeSelectedContentsFrom+0xe3 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:585 ]'], [21208866, 'chrome.dll!TabStripModel::InsertTabContentsAt+0x142 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:103 ]'], [21209292, 'chrome.dll!TabStripModel::AddTabContents+0xac [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:378 ]'], [20651916, 'chrome.dll!Browser::AddTabWithURL+0x13c [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1232 ]'], [20567357, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0xfd [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:540 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]']], 'thread': 3956, 'syscall': 4571, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserPostMessage', 'done': 135.53007400000001, 'ms': 133.02305200000001, 'syscallargs': [8585726, 1025, 13802976], 'cpu': 3124053392},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19467175, 'chrome.dll!base::MessagePumpForUI::WaitForWork+0x27 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:408 ]'], [19470141, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0xbd [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:393 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2736, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 220.41153299999999, 'ms': 135.494316, 'syscallargs': [1, 15858672, 1], 'cpu': 3124053392},
-{'stacktrace': [[27112751, 'chrome.dll!views::Window::Show+0xf [ c:\\g\\trunk\\src\\chrome\\views\\window.cc:93 ]'], [23139435, 'chrome.dll!BrowserView2::Show+0x1b [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:304 ]'], [20641529, 'chrome.dll!Browser::ShowAndFit+0x29 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:335 ]'], [20567444, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0x154 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:544 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]'], [20405083, 'chrome.dll!BrowserMain+0xfdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:579 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 4651, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserShowWindow', 'done': 166.489037, 'ms': 135.654112, 'syscallargs': [9961988, 10, 13830668], 'cpu': 3124053392},
-{'stacktrace': [[27287730, 'chrome.dll!views::CustomFrameWindow::OnNCActivate+0x42 [ c:\\g\\trunk\\src\\chrome\\views\\custom_frame_window.cc:1068 ]'], [23138561, 'chrome.dll!OpaqueFrame::OnNCActivate+0x21 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\opaque_frame.cc:104 ]'], [27136100, 'chrome.dll!views::ContainerWin::_ProcessWindowMessage+0x6c4 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.h:214 ]'], [27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [27112751, 'chrome.dll!views::Window::Show+0xf [ c:\\g\\trunk\\src\\chrome\\views\\window.cc:93 ]'], [23139435, 'chrome.dll!BrowserView2::Show+0x1b [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:304 ]']], 'thread': 3956, 'syscall': 4583, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserRedrawWindow', 'done': 164.93828099999999, 'ms': 137.03361699999999, 'syscallargs': [9961988, 1240560, 0], 'cpu': 2147742720},
-{'stacktrace': [[27139267, 'chrome.dll!views::ContainerWin::OnPaint+0x13 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:623 ]'], [27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [27287730, 'chrome.dll!views::CustomFrameWindow::OnNCActivate+0x42 [ c:\\g\\trunk\\src\\chrome\\views\\custom_frame_window.cc:1068 ]'], [23138561, 'chrome.dll!OpaqueFrame::OnNCActivate+0x21 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\opaque_frame.cc:104 ]'], [27136100, 'chrome.dll!views::ContainerWin::_ProcessWindowMessage+0x6c4 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.h:214 ]'], [27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]']], 'thread': 3956, 'syscall': 4404, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserBeginPaint', 'done': 147.41705999999999, 'ms': 137.187827, 'syscallargs': [9961988, 1239308, 0], 'cpu': 2147742720},
-{'stacktrace': [[2011005211, 'ADVAPI32.dll!RegEnumValueW+0x9a'], [1960473629, 'USP10.dll!CacheFontLinkingData+0x1e1'], [1960474061, 'USP10.dll!IsFontRegLinked+0x21'], [1960477397, 'USP10.dll!LoadFont+0x165'], [1960464506, 'USP10.dll!FindOrCreateFaceCache+0x9c'], [1960466474, 'USP10.dll!FindOrCreateSizeCacheWithoutRealizationID+0xc7'], [1960467102, 'USP10.dll!FindOrCreateSizeCacheUsingRealizationID+0x5d'], [1960468147, 'USP10.dll!UpdateCache+0x2c'], [1960468379, 'USP10.dll!ScriptCheckCache+0x67'], [1960460694, 'USP10.dll!ScriptStringAnalyse+0x143'], [1654409458, 'LPK.DLL!LpkStringAnalyse+0xfd'], [1654408779, 'LPK.DLL!LpkCharsetDraw+0x2f3'], [1654395497, 'LPK.DLL!LpkDrawTextEx+0x34'], [2118444036, 'USER32.dll!DT_DrawStr+0x30249'], [2118246821, 'USER32.dll!DT_DrawJustifiedLine+0x31'], [2118248132, 'USER32.dll!AddEllipsisAndDrawLine+0x5d']], 'thread': 3956, 'syscall': 73, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtEnumerateValueKey', 'done': 143.77721199999999, 'ms': 142.97459599999999, 'syscallargs': [508, 1, 1], 'cpu': 2147742720},
-{'stacktrace': [[2012320926, 'GDI32.dll!CreateFontIndirectW+0x46'], [1960473724, 'USP10.dll!CacheFontLinkingData+0x240'], [1960474061, 'USP10.dll!IsFontRegLinked+0x21'], [1960477397, 'USP10.dll!LoadFont+0x165'], [1960464506, 'USP10.dll!FindOrCreateFaceCache+0x9c'], [1960466474, 'USP10.dll!FindOrCreateSizeCacheWithoutRealizationID+0xc7'], [1960467102, 'USP10.dll!FindOrCreateSizeCacheUsingRealizationID+0x5d'], [1960468147, 'USP10.dll!UpdateCache+0x2c'], [1960468379, 'USP10.dll!ScriptCheckCache+0x67'], [1960460694, 'USP10.dll!ScriptStringAnalyse+0x143'], [1654409458, 'LPK.DLL!LpkStringAnalyse+0xfd'], [1654408779, 'LPK.DLL!LpkCharsetDraw+0x2f3'], [1654395497, 'LPK.DLL!LpkDrawTextEx+0x34'], [2118444036, 'USER32.dll!DT_DrawStr+0x30249'], [2118246821, 'USER32.dll!DT_DrawJustifiedLine+0x31'], [2118248132, 'USER32.dll!AddEllipsisAndDrawLine+0x5d']], 'thread': 3956, 'syscall': 4314, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'gdi32.dll!NtGdiHfontCreate', 'done': 145.325174, 'ms': 143.78643099999999, 'syscallargs': [1233740, 356, 0], 'cpu': 2147742720},
-{'stacktrace': [[26995006, 'chrome.dll!gfx::BitmapPlatformDeviceWin::drawToHDC+0x9e [ c:\\g\\trunk\\src\\base\\gfx\\bitmap_platform_device_win.cc:378 ]'], [21604437, 'chrome.dll!gfx::CanvasPaintT<ChromeCanvas>::~CanvasPaintT<ChromeCanvas>+0x55 [ c:\\g\\trunk\\src\\base\\gfx\\platform_canvas_win.h:127 ]'], [27136650, 'chrome.dll!views::ContainerWin::_ProcessWindowMessage+0x8ea [ c:\\g\\trunk\\src\\chrome\\views\\container_win.h:224 ]'], [27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [27139267, 'chrome.dll!views::ContainerWin::OnPaint+0x13 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:623 ]'], [27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]']], 'thread': 3956, 'syscall': 4109, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'gdi32.dll!NtGdiBitBlt', 'done': 146.987955, 'ms': 146.60997399999999, 'syscallargs': [771819156, 0, 0], 'cpu': 2147742720},
-{'stacktrace': [[2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 3500, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 214.033627, 'ms': 146.85358099999999, 'syscallargs': [12, 32505136, 1], 'cpu': 3124053392},
-{'stacktrace': [[26996791, 'chrome.dll!gfx::BitmapPlatformDeviceWin::~BitmapPlatformDeviceWin+0x37 [ c:\\g\\trunk\\src\\base\\gfx\\bitmap_platform_device_win.cc:328 ]'], [23980661, 'chrome.dll!DeviceCM::~DeviceCM+0x35 [ c:\\g\\trunk\\src\\skia\\sgl\\skcanvas.cpp:83 ]'], [23986073, 'chrome.dll!SkCanvas::~SkCanvas+0x29 [ c:\\g\\trunk\\src\\skia\\sgl\\skcanvas.cpp:410 ]'], [27136650, 'chrome.dll!views::ContainerWin::_ProcessWindowMessage+0x8ea [ c:\\g\\trunk\\src\\chrome\\views\\container_win.h:224 ]'], [27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [27139267, 'chrome.dll!views::ContainerWin::OnPaint+0x13 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:623 ]']], 'thread': 3956, 'syscall': 4218, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'gdi32.dll!DeleteObject', 'done': 147.34358700000001, 'ms': 147.01589200000001, 'syscallargs': [2181367073, 14636032, 14636232], 'cpu': 2147742720},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 149.87212099999999, 'ms': 147.65116800000001, 'syscallargs': [2, 18348996, 1], 'cpu': 3124053392},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 155.44461699999999, 'ms': 149.96458999999999, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720},
-{'stacktrace': [[26995006, 'chrome.dll!gfx::BitmapPlatformDeviceWin::drawToHDC+0x9e [ c:\\g\\trunk\\src\\base\\gfx\\bitmap_platform_device_win.cc:378 ]'], [21604437, 'chrome.dll!gfx::CanvasPaintT<ChromeCanvas>::~CanvasPaintT<ChromeCanvas>+0x55 [ c:\\g\\trunk\\src\\base\\gfx\\platform_canvas_win.h:127 ]'], [27139267, 'chrome.dll!views::ContainerWin::OnPaint+0x13 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:623 ]'], [27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [27287730, 'chrome.dll!views::CustomFrameWindow::OnNCActivate+0x42 [ c:\\g\\trunk\\src\\chrome\\views\\custom_frame_window.cc:1068 ]'], [23138561, 'chrome.dll!OpaqueFrame::OnNCActivate+0x21 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\opaque_frame.cc:104 ]']], 'thread': 3956, 'syscall': 4109, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'gdi32.dll!NtGdiBitBlt', 'done': 153.59857199999999, 'ms': 153.273112, 'syscallargs': [771819156, 0, 0], 'cpu': 3124053392},
-{'stacktrace': [[26996791, 'chrome.dll!gfx::BitmapPlatformDeviceWin::~BitmapPlatformDeviceWin+0x37 [ c:\\g\\trunk\\src\\base\\gfx\\bitmap_platform_device_win.cc:328 ]'], [23980661, 'chrome.dll!DeviceCM::~DeviceCM+0x35 [ c:\\g\\trunk\\src\\skia\\sgl\\skcanvas.cpp:83 ]'], [23986073, 'chrome.dll!SkCanvas::~SkCanvas+0x29 [ c:\\g\\trunk\\src\\skia\\sgl\\skcanvas.cpp:410 ]'], [27139267, 'chrome.dll!views::ContainerWin::OnPaint+0x13 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:623 ]'], [27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [27287730, 'chrome.dll!views::CustomFrameWindow::OnNCActivate+0x42 [ c:\\g\\trunk\\src\\chrome\\views\\custom_frame_window.cc:1068 ]']], 'thread': 3956, 'syscall': 4218, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'gdi32.dll!DeleteObject', 'done': 153.84329600000001, 'ms': 153.641594, 'syscallargs': [2198144289, 14636032, 14636144], 'cpu': 3124053392},
-{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [20447362, 'chrome.dll!RenderWidgetHelper::WaitForPaintMsg+0x102 [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_helper.cc:121 ]'], [21729909, 'chrome.dll!RenderWidgetHost::GetBackingStore+0x125 [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host.cc:742 ]'], [21898819, 'chrome.dll!RenderWidgetHostViewWin::OnPaint+0xa3 [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host_view_win.cc:402 ]'], [21900924, 'chrome.dll!RenderWidgetHostViewWin::ProcessWindowMessage+0xbc [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host_view_win.h:76 ]'], [21752349, 'chrome.dll!ATL::CWindowImplBaseT<ATL::CWindow,ATL::CWinTraits<1174405120,0> >::WindowProc+0x5d [ c:\\program files\\microsoft visual studio 8\\vc\\atlmfc\\include\\atlwin.h:3078 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13']], 'thread': 3956, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 158.746712, 'ms': 154.248096, 'syscallargs': [260, 0, 1238856], 'cpu': 3124053392},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 158.69866099999999, 'ms': 155.524236, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 162.17675700000001, 'ms': 158.787779, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720},
-{'stacktrace': [[21721107, 'chrome.dll!RenderWidgetHost::BackingStore::Refresh+0x133 [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host.cc:95 ]'], [21726483, 'chrome.dll!RenderWidgetHost::BackingStoreManager::PrepareBackingStore+0x103 [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host.cc:197 ]'], [21726586, 'chrome.dll!RenderWidgetHost::PaintRect+0x5a [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host.cc:770 ]'], [21727344, 'chrome.dll!RenderWidgetHost::OnMsgPaintRect+0x250 [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host.cc:379 ]'], [21728798, 'chrome.dll!IPC::MessageWithTuple<ViewHostMsg_PaintRect_Params>::Dispatch<RenderWidgetHost,void (__thiscall RenderWidgetHost::*)(ViewHostMs+0x3e [ c:\\g\\trunk\\src\\chrome\\common\\ipc_message_utils.h:990 ]'], [21729932, 'chrome.dll!RenderWidgetHost::GetBackingStore+0x13c [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host.cc:747 ]'], [21898819, 'chrome.dll!RenderWidgetHostViewWin::OnPaint+0xa3 [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host_view_win.cc:402 ]'], [21900924, 'chrome.dll!RenderWidgetHostViewWin::ProcessWindowMessage+0xbc [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host_view_win.h:76 ]'], [21752349, 'chrome.dll!ATL::CWindowImplBaseT<ATL::CWindow,ATL::CWinTraits<1174405120,0> >::WindowProc+0x5d [ c:\\program files\\microsoft visual studio 8\\vc\\atlmfc\\include\\atlwin.h:3078 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7']], 'thread': 3956, 'syscall': 4389, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'gdi32.dll!NtGdiStretchDIBitsInternal', 'done': 161.89711299999999, 'ms': 158.891423, 'syscallargs': [3825272163, 0, 0], 'cpu': 3124053392},
-{'stacktrace': [[21721114, 'chrome.dll!RenderWidgetHost::BackingStore::Refresh+0x13a [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host.cc:96 ]'], [21726483, 'chrome.dll!RenderWidgetHost::BackingStoreManager::PrepareBackingStore+0x103 [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host.cc:197 ]'], [21726586, 'chrome.dll!RenderWidgetHost::PaintRect+0x5a [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host.cc:770 ]'], [21727344, 'chrome.dll!RenderWidgetHost::OnMsgPaintRect+0x250 [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host.cc:379 ]'], [21728798, 'chrome.dll!IPC::MessageWithTuple<ViewHostMsg_PaintRect_Params>::Dispatch<RenderWidgetHost,void (__thiscall RenderWidgetHost::*)(ViewHostMs+0x3e [ c:\\g\\trunk\\src\\chrome\\common\\ipc_message_utils.h:990 ]'], [21729932, 'chrome.dll!RenderWidgetHost::GetBackingStore+0x13c [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host.cc:747 ]'], [21898819, 'chrome.dll!RenderWidgetHostViewWin::OnPaint+0xa3 [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host_view_win.cc:402 ]'], [21900924, 'chrome.dll!RenderWidgetHostViewWin::ProcessWindowMessage+0xbc [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host_view_win.h:76 ]'], [21752349, 'chrome.dll!ATL::CWindowImplBaseT<ATL::CWindow,ATL::CWinTraits<1174405120,0> >::WindowProc+0x5d [ c:\\program files\\microsoft visual studio 8\\vc\\atlmfc\\include\\atlwin.h:3078 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7']], 'thread': 3956, 'syscall': 267, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtUnmapViewOfSection', 'done': 162.12954400000001, 'ms': 161.902421, 'syscallargs': [4294967295, 43974656, 1239104], 'cpu': 3124053392},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 170.10988800000001, 'ms': 162.27425600000001, 'syscallargs': [2, 18348996, 1], 'cpu': 3124053392},
-{'stacktrace': [[21898949, 'chrome.dll!RenderWidgetHostViewWin::OnPaint+0x125 [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host_view_win.cc:424 ]'], [21900924, 'chrome.dll!RenderWidgetHostViewWin::ProcessWindowMessage+0xbc [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host_view_win.h:76 ]'], [21752349, 'chrome.dll!ATL::CWindowImplBaseT<ATL::CWindow,ATL::CWinTraits<1174405120,0> >::WindowProc+0x5d [ c:\\program files\\microsoft visual studio 8\\vc\\atlmfc\\include\\atlwin.h:3078 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [27287730, 'chrome.dll!views::CustomFrameWindow::OnNCActivate+0x42 [ c:\\g\\trunk\\src\\chrome\\views\\custom_frame_window.cc:1068 ]'], [23138561, 'chrome.dll!OpaqueFrame::OnNCActivate+0x21 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\opaque_frame.cc:104 ]'], [27136100, 'chrome.dll!views::ContainerWin::_ProcessWindowMessage+0x6c4 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.h:214 ]']], 'thread': 3956, 'syscall': 4109, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'gdi32.dll!NtGdiBitBlt', 'done': 164.14181099999999, 'ms': 162.369798, 'syscallargs': [3389065955, 0, 0], 'cpu': 3124053392},
-{'stacktrace': [[27151840, 'chrome.dll!views::FocusWindowCallback+0x130 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:175 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [27112751, 'chrome.dll!views::Window::Show+0xf [ c:\\g\\trunk\\src\\chrome\\views\\window.cc:93 ]'], [23139435, 'chrome.dll!BrowserView2::Show+0x1b [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:304 ]'], [20641529, 'chrome.dll!Browser::ShowAndFit+0x29 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:335 ]'], [20567444, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0x154 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:544 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]'], [20405083, 'chrome.dll!BrowserMain+0xfdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:579 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]']], 'thread': 3956, 'syscall': 4611, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserSetFocus', 'done': 166.26107500000001, 'ms': 164.97012899999999, 'syscallargs': [9961988, 9961988, 13872320], 'cpu': 3124053392},
-{'stacktrace': [[2118254284, 'USER32.dll!_CreateWindowEx+0xb1'], [2118253656, 'USER32.dll!CreateWindowExW+0x33'], [2118563099, 'USER32.dll!CreateIMEUI+0xa4'], [2118566246, 'USER32.dll!ImeSetContextHandler+0x40'], [2118567660, 'USER32.dll!ImeWndProcWorker+0x2f6'], [2118304721, 'USER32.dll!SendMessageWorker+0x10bfe'], [2118431811, 'USER32.dll!RealDefWindowProcWorker+0x3022c'], [2118235129, 'USER32.dll!RealDefWindowProcW+0x27'], [2118235027, 'USER32.dll!DefWindowProcW+0x57'], [27142877, 'chrome.dll!views::ContainerWin::WndProc+0xdd [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:918 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28']], 'thread': 3956, 'syscall': 4439, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserCreateWindowEx', 'done': 165.93449699999999, 'ms': 165.35397699999999, 'syscallargs': [0, 1238728, 1237492], 'cpu': 3124053392},
-{'stacktrace': [[27208659, 'chrome.dll!views::RootView::FocusView+0xe3 [ c:\\g\\trunk\\src\\chrome\\views\\root_view.cc:499 ]'], [27118902, 'chrome.dll!views::View::RequestFocus+0x16 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:1423 ]'], [23139435, 'chrome.dll!BrowserView2::Show+0x1b [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:304 ]'], [20641529, 'chrome.dll!Browser::ShowAndFit+0x29 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:335 ]'], [20567444, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0x154 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:544 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]'], [20405083, 'chrome.dll!BrowserMain+0xfdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:579 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 4611, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserSetFocus', 'done': 168.39933600000001, 'ms': 166.56362799999999, 'syscallargs': [8979080, 27145854, 13872320], 'cpu': 3124053392},
-{'stacktrace': [[20641581, 'chrome.dll!Browser::ShowAndFit+0x5d [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:351 ]'], [20567444, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0x154 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:544 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]'], [20405083, 'chrome.dll!BrowserMain+0xfdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:579 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 4611, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserSetFocus', 'done': 170.63230100000001, 'ms': 168.406599, 'syscallargs': [24969860, 21048886, 13857560], 'cpu': 3124053392},
-{'stacktrace': [[27208659, 'chrome.dll!views::RootView::FocusView+0xe3 [ c:\\g\\trunk\\src\\chrome\\views\\root_view.cc:499 ]'], [27146912, 'chrome.dll!views::FocusManager::OnSetFocus+0x40 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:273 ]'], [27151783, 'chrome.dll!views::FocusWindowCallback+0xf7 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:158 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [20641581, 'chrome.dll!Browser::ShowAndFit+0x5d [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:351 ]'], [20567444, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0x154 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:544 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]'], [20405083, 'chrome.dll!BrowserMain+0xfdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:579 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]']], 'thread': 3956, 'syscall': 4611, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserSetFocus', 'done': 170.61889199999999, 'ms': 169.63636399999999, 'syscallargs': [9896426, 13833040, 27145854], 'cpu': 3124053392},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 170.620847, 'ms': 170.203755, 'syscallargs': [2, 18348996, 1], 'cpu': 3124053392},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 171.51900599999999, 'ms': 170.68761499999999, 'syscallargs': [2, 18348996, 1], 'cpu': 3124053392},
-{'stacktrace': [[2118226946, 'USER32.dll!PeekMessageW+0x167'], [19465953, 'chrome.dll!base::MessagePumpWin::ProcessPumpReplacementMessage+0x21 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:307 ]'], [19466558, 'chrome.dll!base::MessagePumpWin::ProcessMessageHelper+0x3e [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:280 ]'], [19470020, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x44 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:364 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19407817, 'chrome.dll!MessageLoop::RunInternal+0xa9 [ c:\\g\\trunk\\src\\base\\message_loop.cc:192 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19409081, 'chrome.dll!MessageLoopForUI::Run+0x49 [ c:\\g\\trunk\\src\\base\\message_loop.cc:559 ]'], [20405134, 'chrome.dll!BrowserMain+0x100e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:583 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 4570, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!PeekMessageW', 'done': 171.181253, 'ms': 170.81500600000001, 'syscallargs': [1242820, 0, 0], 'cpu': 3124053392},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 181.74991499999999, 'ms': 171.734117, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720},
-{'stacktrace': [[27201618, 'chrome.dll!views::RootView::PaintNow+0x42 [ c:\\g\\trunk\\src\\chrome\\views\\root_view.cc:183 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470042, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x5a [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:369 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19407817, 'chrome.dll!MessageLoop::RunInternal+0xa9 [ c:\\g\\trunk\\src\\base\\message_loop.cc:192 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19409081, 'chrome.dll!MessageLoopForUI::Run+0x49 [ c:\\g\\trunk\\src\\base\\message_loop.cc:559 ]'], [20405134, 'chrome.dll!BrowserMain+0x100e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:583 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 4583, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserRedrawWindow', 'done': 176.42074600000001, 'ms': 171.76652300000001, 'syscallargs': [9961988, 1242600, 0], 'cpu': 3124053392},
-{'stacktrace': [[21898949, 'chrome.dll!RenderWidgetHostViewWin::OnPaint+0x125 [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host_view_win.cc:424 ]'], [21900924, 'chrome.dll!RenderWidgetHostViewWin::ProcessWindowMessage+0xbc [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host_view_win.h:76 ]'], [21752349, 'chrome.dll!ATL::CWindowImplBaseT<ATL::CWindow,ATL::CWinTraits<1174405120,0> >::WindowProc+0x5d [ c:\\program files\\microsoft visual studio 8\\vc\\atlmfc\\include\\atlwin.h:3078 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [27201618, 'chrome.dll!views::RootView::PaintNow+0x42 [ c:\\g\\trunk\\src\\chrome\\views\\root_view.cc:183 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470042, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x5a [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:369 ]']], 'thread': 3956, 'syscall': 4109, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'gdi32.dll!NtGdiBitBlt', 'done': 175.758092, 'ms': 174.02686700000001, 'syscallargs': [2231437465, 0, 0], 'cpu': 3124053392},
-{'eventid': 1718825704, 'stacktrace': [[2088830549, 'kernel32.dll!CreateThread+0x1e'], [19417542, 'chrome.dll!PlatformThread::Create+0x36 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:83 ]'], [23799365, 'chrome.dll!base::Thread::StartWithOptions+0xb5 [ c:\\g\\trunk\\src\\base\\thread.cc:82 ]'], [23799735, 'chrome.dll!base::Thread::Start+0x17 [ c:\\g\\trunk\\src\\base\\thread.cc:72 ]'], [20426734, 'chrome.dll!HistoryService::Init+0xe [ c:\\g\\trunk\\src\\chrome\\browser\\history\\history.cc:128 ]'], [20850347, 'chrome.dll!ProfileImpl::GetHistoryService+0x6b [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:752 ]'], [21456458, 'chrome.dll!BookmarkModel::LoadFavIcon+0x7a [ c:\\g\\trunk\\src\\chrome\\browser\\bookmarks\\bookmark_model.cc:685 ]'], [21457734, 'chrome.dll!BookmarkNode::GetFavIcon+0x16 [ c:\\g\\trunk\\src\\chrome\\browser\\bookmarks\\bookmark_model.cc:46 ]'], [22945986, 'chrome.dll!BookmarkBarView::CreateBookmarkButton+0x152 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\bookmark_bar_view.cc:1486 ]'], [22951285, 'chrome.dll!BookmarkBarView::Loaded+0x95 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\bookmark_bar_view.cc:1210 ]'], [21458349, 'chrome.dll!BookmarkModel::DoneLoading+0x8d [ c:\\g\\trunk\\src\\chrome\\browser\\bookmarks\\bookmark_model.cc:524 ]'], [21461574, 'chrome.dll!BookmarkModel::OnBookmarkStorageLoadedBookmarks+0x166 [ c:\\g\\trunk\\src\\chrome\\browser\\bookmarks\\bookmark_model.cc:468 ]'], [21847663, 'chrome.dll!BookmarkStorage::LoadedBookmarks+0x2f [ c:\\g\\trunk\\src\\chrome\\browser\\bookmarks\\bookmark_storage.cc:90 ]'], [21847724, 'chrome.dll!RunnableMethod<BookmarkStorage,void (__thiscall BookmarkStorage::*)(Value *,bool,bool),Tuple3<Value *,bool,bool> >::Run+0x1c [ c:\\g\\trunk\\src\\base\\task.h:313 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470042, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x5a [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:369 ]']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_CREATETHREAD', 'startaddr': 2088830553, 'ms': 177.017191, 'cpu': 3124053392},
-{'stacktrace': [], 'thread': 2688, 'eventtype': 'EVENT_TYPE_THREADBEGIN', 'parenteventid': 1718825704, 'startaddr': 19417280, 'ms': 177.216937, 'cpu': 2147742720},
-{'stacktrace': [[19417443, 'chrome.dll!PlatformThread::SetName+0x63 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:62 ]'], [23799603, 'chrome.dll!base::Thread::ThreadMain+0x53 [ c:\\g\\trunk\\src\\base\\thread.cc:145 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2688, 'eventtype': 'EVENT_TYPE_THREADNAME', 'threadname': 'Chrome_HistoryThread', 'ms': 177.250461, 'cpu': 2147742720},
-{'stacktrace': [[27392208, 'chrome.dll!winRead+0x20 [ c:\\g\\trunk\\src\\third_party\\sqlite\\os_win.c:1003 ]'], [27524918, 'chrome.dll!sqlite3OsRead+0x16 [ c:\\g\\trunk\\src\\third_party\\sqlite\\os.c:39 ]'], [27491281, 'chrome.dll!sqlite3PagerLoadall+0x71 [ c:\\g\\trunk\\src\\third_party\\sqlite\\pager.c:4512 ]'], [27324147, 'chrome.dll!sqlite3Preload+0x33 [ c:\\g\\trunk\\src\\third_party\\sqlite\\build.c:3381 ]'], [21199165, 'chrome.dll!history::HistoryDatabase::PrimeCache+0x5d [ c:\\g\\trunk\\src\\chrome\\browser\\history\\history_database.cc:106 ]'], [21200727, 'chrome.dll!history::HistoryDatabase::Init+0x117 [ c:\\g\\trunk\\src\\chrome\\browser\\history\\history_database.cc:71 ]'], [20616681, 'chrome.dll!history::HistoryBackend::InitImpl+0x1d9 [ c:\\g\\trunk\\src\\chrome\\browser\\history\\history_backend.cc:508 ]'], [20622856, 'chrome.dll!history::HistoryBackend::Init+0x8 [ c:\\g\\trunk\\src\\chrome\\browser\\history\\history_backend.cc:238 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19486017, 'chrome.dll!base::MessagePumpDefault::Run+0x111 [ c:\\g\\trunk\\src\\base\\message_pump_default.cc:50 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2688, 'syscall': 183, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtReadFile', 'done': 192.485637, 'ms': 178.359261, 'syscallargs': [512, 0, 0], 'cpu': 3124053392},
-{'stacktrace': [[21555953, 'chrome.dll!RenderViewHostManager::Shutdown+0xb1 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host_manager.cc:84 ]'], [21036462, 'chrome.dll!WebContents::Destroy+0xee [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:312 ]'], [21008223, 'chrome.dll!NavigationController::Destroy+0x2df [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:458 ]'], [21208053, 'chrome.dll!TabStripModel::InternalCloseTabContentsAt+0x175 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:560 ]'], [20661873, 'chrome.dll!Browser::CloseContents+0xa1 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:810 ]'], [21019423, 'chrome.dll!WebContents::Close+0x1f [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:836 ]'], [21356349, 'chrome.dll!RenderViewHost::OnMessageReceived+0x1fd [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host.cc:616 ]'], [20394864, 'chrome.dll!RenderProcessHost::OnMessageReceived+0x170 [ c:\\g\\trunk\\src\\chrome\\browser\\render_process_host.cc:624 ]'], [21472487, 'chrome.dll!RunnableMethod<ProfileWriter,void (__thiscall ProfileWriter::*)(std::vector<history::URLRow,std::allocator<history::URLRow> > c+0x17 [ c:\\g\\trunk\\src\\base\\task.h:312 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470042, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x5a [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:369 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19407817, 'chrome.dll!MessageLoop::RunInternal+0xa9 [ c:\\g\\trunk\\src\\base\\message_loop.cc:192 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19409081, 'chrome.dll!MessageLoopForUI::Run+0x49 [ c:\\g\\trunk\\src\\base\\message_loop.cc:559 ]'], [20405134, 'chrome.dll!BrowserMain+0x100e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:583 ]']], 'thread': 3956, 'syscall': 4451, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserDestroyWindow', 'done': 190.82481200000001, 'ms': 181.75131200000001, 'syscallargs': [9896426, 21722045, 14286272], 'cpu': 3124053392},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 182.32261399999999, 'ms': 181.84853100000001, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 182.77937600000001, 'ms': 182.413128, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 184.039592, 'ms': 182.86486099999999, 'syscallargs': [2, 18348996, 1], 'cpu': 3124053392},
-{'stacktrace': [[27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [21555953, 'chrome.dll!RenderViewHostManager::Shutdown+0xb1 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host_manager.cc:84 ]'], [21036462, 'chrome.dll!WebContents::Destroy+0xee [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:312 ]'], [21008223, 'chrome.dll!NavigationController::Destroy+0x2df [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:458 ]'], [21208053, 'chrome.dll!TabStripModel::InternalCloseTabContentsAt+0x175 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:560 ]'], [20661873, 'chrome.dll!Browser::CloseContents+0xa1 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:810 ]']], 'thread': 3956, 'syscall': 4611, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserSetFocus', 'done': 184.892214, 'ms': 183.500696, 'syscallargs': [9896426, 14286908, 27137217], 'cpu': 3124053392},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 184.75420800000001, 'ms': 184.13038499999999, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 185.30260100000001, 'ms': 185.07575700000001, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 186.651376, 'ms': 185.397865, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720},
-{'stacktrace': [[27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [21555953, 'chrome.dll!RenderViewHostManager::Shutdown+0xb1 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host_manager.cc:84 ]'], [21036462, 'chrome.dll!WebContents::Destroy+0xee [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:312 ]'], [21008223, 'chrome.dll!NavigationController::Destroy+0x2df [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:458 ]'], [21208053, 'chrome.dll!TabStripModel::InternalCloseTabContentsAt+0x175 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:560 ]'], [20661873, 'chrome.dll!Browser::CloseContents+0xa1 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:810 ]']], 'thread': 3956, 'syscall': 4611, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserSetFocus', 'done': 187.67385200000001, 'ms': 186.08454399999999, 'syscallargs': [9896426, 14286908, 27137217], 'cpu': 2147742720},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 187.526906, 'ms': 186.76451900000001, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 187.99735699999999, 'ms': 187.62943300000001, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 188.40103999999999, 'ms': 188.08507800000001, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 189.66041799999999, 'ms': 188.47507200000001, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720},
-{'stacktrace': [[27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [21555953, 'chrome.dll!RenderViewHostManager::Shutdown+0xb1 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host_manager.cc:84 ]'], [21036462, 'chrome.dll!WebContents::Destroy+0xee [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:312 ]'], [21008223, 'chrome.dll!NavigationController::Destroy+0x2df [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:458 ]'], [21208053, 'chrome.dll!TabStripModel::InternalCloseTabContentsAt+0x175 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:560 ]'], [20661873, 'chrome.dll!Browser::CloseContents+0xa1 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:810 ]']], 'thread': 3956, 'syscall': 4611, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserSetFocus', 'done': 190.59852599999999, 'ms': 189.094424, 'syscallargs': [9896426, 14286908, 27137217], 'cpu': 2147742720},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 190.48985300000001, 'ms': 189.77244300000001, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 191.10529399999999, 'ms': 190.58735100000001, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 214.03893500000001, 'ms': 191.18016399999999, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720},
-{'stacktrace': [[23141617, 'chrome.dll!BrowserView2::TabDetachedAt+0x21 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:513 ]'], [21209929, 'chrome.dll!TabStripModel::DetachTabContentsAt+0x169 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:129 ]'], [21211607, 'chrome.dll!TabStripModel::Observe+0x77 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:522 ]'], [19680002, 'chrome.dll!NotificationService::Notify+0x2c2 [ c:\\g\\trunk\\src\\chrome\\common\\notification_service.cc:94 ]'], [21045731, 'chrome.dll!TabContents::Destroy+0x73 [ c:\\g\\trunk\\src\\chrome\\browser\\tab_contents.cc:93 ]'], [21036469, 'chrome.dll!WebContents::Destroy+0xf5 [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:312 ]'], [21008223, 'chrome.dll!NavigationController::Destroy+0x2df [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:458 ]'], [21208053, 'chrome.dll!TabStripModel::InternalCloseTabContentsAt+0x175 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:560 ]'], [20661873, 'chrome.dll!Browser::CloseContents+0xa1 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:810 ]'], [21019423, 'chrome.dll!WebContents::Close+0x1f [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:836 ]'], [21356349, 'chrome.dll!RenderViewHost::OnMessageReceived+0x1fd [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host.cc:616 ]'], [20394864, 'chrome.dll!RenderProcessHost::OnMessageReceived+0x170 [ c:\\g\\trunk\\src\\chrome\\browser\\render_process_host.cc:624 ]'], [21472487, 'chrome.dll!RunnableMethod<ProfileWriter,void (__thiscall ProfileWriter::*)(std::vector<history::URLRow,std::allocator<history::URLRow> > c+0x17 [ c:\\g\\trunk\\src\\base\\task.h:312 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470042, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x5a [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:369 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]']], 'thread': 3956, 'syscall': 4651, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserShowWindow', 'done': 191.54417699999999, 'ms': 191.24218300000001, 'syscallargs': [24969860, 0, 13791504], 'cpu': 2147742720},
-{'stacktrace': [[23141617, 'chrome.dll!BrowserView2::TabDetachedAt+0x21 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:513 ]'], [21209929, 'chrome.dll!TabStripModel::DetachTabContentsAt+0x169 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:129 ]'], [21211607, 'chrome.dll!TabStripModel::Observe+0x77 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:522 ]'], [19680002, 'chrome.dll!NotificationService::Notify+0x2c2 [ c:\\g\\trunk\\src\\chrome\\common\\notification_service.cc:94 ]'], [21045731, 'chrome.dll!TabContents::Destroy+0x73 [ c:\\g\\trunk\\src\\chrome\\browser\\tab_contents.cc:93 ]'], [21036469, 'chrome.dll!WebContents::Destroy+0xf5 [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:312 ]'], [21008223, 'chrome.dll!NavigationController::Destroy+0x2df [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:458 ]'], [21208053, 'chrome.dll!TabStripModel::InternalCloseTabContentsAt+0x175 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:560 ]'], [20661873, 'chrome.dll!Browser::CloseContents+0xa1 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:810 ]'], [21019423, 'chrome.dll!WebContents::Close+0x1f [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:836 ]'], [21356349, 'chrome.dll!RenderViewHost::OnMessageReceived+0x1fd [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host.cc:616 ]'], [20394864, 'chrome.dll!RenderProcessHost::OnMessageReceived+0x170 [ c:\\g\\trunk\\src\\chrome\\browser\\render_process_host.cc:624 ]'], [21472487, 'chrome.dll!RunnableMethod<ProfileWriter,void (__thiscall ProfileWriter::*)(std::vector<history::URLRow,std::allocator<history::URLRow> > c+0x17 [ c:\\g\\trunk\\src\\base\\task.h:312 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470042, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x5a [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:369 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]']], 'thread': 3956, 'syscall': 4625, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserSetParent', 'done': 191.86209400000001, 'ms': 191.546412, 'syscallargs': [24969860, 0, 13791504], 'cpu': 2147742720},
-{'stacktrace': [[2118236921, 'USER32.dll!GetPropW+0x1e'], [27148313, 'chrome.dll!views::FocusManager::GetFocusManager+0x69 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:228 ]'], [27117841, 'chrome.dll!views::View::GetFocusManager+0x21 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:299 ]'], [27129730, 'chrome.dll!views::View::PropagateRemoveNotifications+0xb2 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:665 ]'], [27129647, 'chrome.dll!views::View::PropagateRemoveNotifications+0x5f [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:660 ]'], [27130426, 'chrome.dll!views::View::DoRemoveChildView+0x10a [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:642 ]'], [27130610, 'chrome.dll!views::View::RemoveChildView+0x12 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:604 ]'], [23146904, 'chrome.dll!BrowserView2::UpdateChildViewAndLayout+0xb8 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:1049 ]'], [23148971, 'chrome.dll!BrowserView2::TabStripEmpty+0x2b [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:545 ]'], [21209949, 'chrome.dll!TabStripModel::DetachTabContentsAt+0x17d [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:130 ]'], [21211607, 'chrome.dll!TabStripModel::Observe+0x77 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:522 ]'], [19680002, 'chrome.dll!NotificationService::Notify+0x2c2 [ c:\\g\\trunk\\src\\chrome\\common\\notification_service.cc:94 ]'], [21045731, 'chrome.dll!TabContents::Destroy+0x73 [ c:\\g\\trunk\\src\\chrome\\browser\\tab_contents.cc:93 ]'], [21036469, 'chrome.dll!WebContents::Destroy+0xf5 [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:312 ]'], [21008223, 'chrome.dll!NavigationController::Destroy+0x2df [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:458 ]'], [21208053, 'chrome.dll!TabStripModel::InternalCloseTabContentsAt+0x175 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:560 ]']], 'thread': 3956, 'syscall': 4680, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserValidateHandleSecure', 'done': 206.04797500000001, 'ms': 193.17455200000001, 'syscallargs': [9961988, 1, 0], 'cpu': 2147742720},
-{'stacktrace': [[21036469, 'chrome.dll!WebContents::Destroy+0xf5 [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:312 ]'], [21008223, 'chrome.dll!NavigationController::Destroy+0x2df [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:458 ]'], [21208053, 'chrome.dll!TabStripModel::InternalCloseTabContentsAt+0x175 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:560 ]'], [20661873, 'chrome.dll!Browser::CloseContents+0xa1 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:810 ]'], [21019423, 'chrome.dll!WebContents::Close+0x1f [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:836 ]'], [21356349, 'chrome.dll!RenderViewHost::OnMessageReceived+0x1fd [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host.cc:616 ]'], [20394864, 'chrome.dll!RenderProcessHost::OnMessageReceived+0x170 [ c:\\g\\trunk\\src\\chrome\\browser\\render_process_host.cc:624 ]'], [21472487, 'chrome.dll!RunnableMethod<ProfileWriter,void (__thiscall ProfileWriter::*)(std::vector<history::URLRow,std::allocator<history::URLRow> > c+0x17 [ c:\\g\\trunk\\src\\base\\task.h:312 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470042, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x5a [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:369 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19407817, 'chrome.dll!MessageLoop::RunInternal+0xa9 [ c:\\g\\trunk\\src\\base\\message_loop.cc:192 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19409081, 'chrome.dll!MessageLoopForUI::Run+0x49 [ c:\\g\\trunk\\src\\base\\message_loop.cc:559 ]'], [20405134, 'chrome.dll!BrowserMain+0x100e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:583 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]']], 'thread': 3956, 'syscall': 4451, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserDestroyWindow', 'done': 206.599163, 'ms': 206.26448300000001, 'syscallargs': [24969860, 14286184, 0], 'cpu': 2147742720},
-{'stacktrace': [[2118224400, 'USER32.dll!DispatchMessageW+0xf'], [27107759, 'chrome.dll!views::AcceleratorHandler::Dispatch+0x4f [ c:\\g\\trunk\\src\\chrome\\views\\accelerator_handler.cc:32 ]'], [19466592, 'chrome.dll!base::MessagePumpWin::ProcessMessageHelper+0x60 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:285 ]'], [19470020, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x44 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:364 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19407817, 'chrome.dll!MessageLoop::RunInternal+0xa9 [ c:\\g\\trunk\\src\\base\\message_loop.cc:192 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19409081, 'chrome.dll!MessageLoopForUI::Run+0x49 [ c:\\g\\trunk\\src\\base\\message_loop.cc:559 ]'], [20405134, 'chrome.dll!BrowserMain+0x100e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:583 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 4453, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserDispatchMessage', 'done': 213.76627500000001, 'ms': 207.22298499999999, 'syscallargs': [1242896, 1242896, 1242896], 'cpu': 2147742720},
-{'stacktrace': [[26995006, 'chrome.dll!gfx::BitmapPlatformDeviceWin::drawToHDC+0x9e [ c:\\g\\trunk\\src\\base\\gfx\\bitmap_platform_device_win.cc:378 ]'], [21604437, 'chrome.dll!gfx::CanvasPaintT<ChromeCanvas>::~CanvasPaintT<ChromeCanvas>+0x55 [ c:\\g\\trunk\\src\\base\\gfx\\platform_canvas_win.h:127 ]'], [27139267, 'chrome.dll!views::ContainerWin::OnPaint+0x13 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:623 ]'], [27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [2118224400, 'USER32.dll!DispatchMessageW+0xf'], [27107759, 'chrome.dll!views::AcceleratorHandler::Dispatch+0x4f [ c:\\g\\trunk\\src\\chrome\\views\\accelerator_handler.cc:32 ]']], 'thread': 3956, 'syscall': 4109, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'gdi32.dll!NtGdiBitBlt', 'done': 211.82440800000001, 'ms': 209.57859199999999, 'syscallargs': [2231437465, 5, 79], 'cpu': 2147742720},
-{'stacktrace': [[26996791, 'chrome.dll!gfx::BitmapPlatformDeviceWin::~BitmapPlatformDeviceWin+0x37 [ c:\\g\\trunk\\src\\base\\gfx\\bitmap_platform_device_win.cc:328 ]'], [23980661, 'chrome.dll!DeviceCM::~DeviceCM+0x35 [ c:\\g\\trunk\\src\\skia\\sgl\\skcanvas.cpp:83 ]'], [23986073, 'chrome.dll!SkCanvas::~SkCanvas+0x29 [ c:\\g\\trunk\\src\\skia\\sgl\\skcanvas.cpp:410 ]'], [27139267, 'chrome.dll!views::ContainerWin::OnPaint+0x13 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:623 ]'], [27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [2118224400, 'USER32.dll!DispatchMessageW+0xf']], 'thread': 3956, 'syscall': 4218, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'gdi32.dll!DeleteObject', 'done': 213.752027, 'ms': 211.89536699999999, 'syscallargs': [3875865955, 14288496, 14663680], 'cpu': 2147742720},
-{'stacktrace': [[2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 3500, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 214.63649699999999, 'ms': 214.08056099999999, 'syscallargs': [10, 32505136, 1], 'cpu': 3124053392},
-{'stacktrace': [[2089998945, 'ntdll.dll!RtlDeregisterWaitEx+0xe6'], [2088960121, 'kernel32.dll!UnregisterWaitEx+0x17'], [23815564, 'chrome.dll!base::ObjectWatcher::StopWatching+0x7c [ c:\\g\\trunk\\src\\base\\object_watcher.cc:84 ]'], [19696699, 'chrome.dll!IPC::SyncChannel::SyncContext::OnChannelClosed+0xb [ c:\\g\\trunk\\src\\chrome\\common\\ipc_sync_channel.cc:339 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470254, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0x5e [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:533 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 214.64711299999999, 'ms': 214.09145599999999, 'syscallargs': [2, 18348976, 1], 'cpu': 2147742720},
-{'stacktrace': [[27141588, 'chrome.dll!views::ContainerWin::Hide+0x14 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:350 ]'], [27116658, 'chrome.dll!views::Window::Close+0x32 [ c:\\g\\trunk\\src\\chrome\\views\\window.cc:130 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470042, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x5a [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:369 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19407817, 'chrome.dll!MessageLoop::RunInternal+0xa9 [ c:\\g\\trunk\\src\\base\\message_loop.cc:192 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19409081, 'chrome.dll!MessageLoopForUI::Run+0x49 [ c:\\g\\trunk\\src\\base\\message_loop.cc:559 ]'], [20405134, 'chrome.dll!BrowserMain+0x100e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:583 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 4642, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserSetWindowPos', 'done': 214.54654199999999, 'ms': 214.19063, 'syscallargs': [9961988, 0, 0], 'cpu': 3124053392},
-{'stacktrace': [[19405904, 'chrome.dll!MessageLoop::RunTask+0x80 [ c:\\g\\trunk\\src\\base\\message_loop.cc:309 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470042, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x5a [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:369 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19407817, 'chrome.dll!MessageLoop::RunInternal+0xa9 [ c:\\g\\trunk\\src\\base\\message_loop.cc:192 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19409081, 'chrome.dll!MessageLoopForUI::Run+0x49 [ c:\\g\\trunk\\src\\base\\message_loop.cc:559 ]'], [20405134, 'chrome.dll!BrowserMain+0x100e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:583 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 4451, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserDestroyWindow', 'done': 218.16459900000001, 'ms': 214.58872600000001, 'syscallargs': [9961988, 13966744, 0], 'cpu': 3124053392},
-{'stacktrace': [[2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 3500, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 220.37158400000001, 'ms': 214.64068800000001, 'syscallargs': [10, 32505136, 1], 'cpu': 3124053392},
-{'stacktrace': [[27117134, 'chrome.dll!views::Window::OnActivate+0xe [ c:\\g\\trunk\\src\\chrome\\views\\window.cc:364 ]'], [27134780, 'chrome.dll!views::ContainerWin::_ProcessWindowMessage+0x19c [ c:\\g\\trunk\\src\\chrome\\views\\container_win.h:184 ]'], [27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151819, 'chrome.dll!views::FocusWindowCallback+0x11b [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:173 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [19405904, 'chrome.dll!MessageLoop::RunTask+0x80 [ c:\\g\\trunk\\src\\base\\message_loop.cc:309 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470042, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x5a [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:369 ]']], 'thread': 3956, 'syscall': 4536, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserGetWindowPlacement', 'done': 215.06532300000001, 'ms': 214.72868800000001, 'syscallargs': [9961988, 1241292, 13830668], 'cpu': 2147742720},
-{'stacktrace': [[2089816330, 'ntdll.dll!RtlLeaveCriticalSection+0x1d'], [22426797, 'chrome.dll!malloc+0x7a [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\malloc.c:163 ]']], 'thread': 2688, 'syscall': 220, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtSetEventBoostPriority', 'done': 215.099684, 'ms': 214.74600799999999, 'syscallargs': [264, 4248, 45021424], 'cpu': 2147742720},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 219.80195800000001, 'ms': 214.832053, 'syscallargs': [1, 18348996, 1], 'cpu': 2147742720},
-{'stacktrace': [[19407956, 'chrome.dll!MessageLoop::PostTask+0x14 [ c:\\g\\trunk\\src\\base\\message_loop.cc:231 ]'], [27201478, 'chrome.dll!views::RootView::SchedulePaint+0xb6 [ c:\\g\\trunk\\src\\chrome\\views\\root_view.cc:109 ]'], [27119984, 'chrome.dll!views::View::SchedulePaint+0x60 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:328 ]'], [27119984, 'chrome.dll!views::View::SchedulePaint+0x60 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:328 ]'], [27119984, 'chrome.dll!views::View::SchedulePaint+0x60 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:328 ]'], [27117948, 'chrome.dll!views::View::SchedulePaint+0x2c [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:333 ]'], [27151048, 'chrome.dll!views::FocusManager::OnPostActivate+0x48 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:405 ]'], [27151840, 'chrome.dll!views::FocusWindowCallback+0x130 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:175 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [19405904, 'chrome.dll!MessageLoop::RunTask+0x80 [ c:\\g\\trunk\\src\\base\\message_loop.cc:309 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470042, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x5a [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:369 ]']], 'thread': 3956, 'syscall': 4571, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserPostMessage', 'done': 215.729094, 'ms': 215.09437700000001, 'syscallargs': [9437720, 1025, 13662856], 'cpu': 2147742720},
-{'stacktrace': [[2089910840, 'ntdll.dll!RtlpExtendHeap+0x88'], [2089884790, 'ntdll.dll!RtlAllocateHeap+0x16a2'], [22426797, 'chrome.dll!malloc+0x7a [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\malloc.c:163 ]']], 'thread': 2688, 'syscall': 17, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtAllocateVirtualMemory', 'done': 216.601551, 'ms': 215.89811, 'syscallargs': [4294967295, 45020820, 0], 'cpu': 2147742720},
-{'stacktrace': [[2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 3500, 'eventtype': 'EVENT_TYPE_APC', 'func_addr_name': 'ntdll.dll!RtlpDeregisterWait+0x0', 'ret_addr': 2089872071, 'done': 220.35901200000001, 'func_addr': 2089998983, 'ms': 217.798351, 'cpu': 3124053392},
-{'stacktrace': [[2089999079, 'ntdll.dll!RtlpDeregisterWait+0x60'], [1717963930, 'failed'], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 3500, 'syscall': 219, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtSetEvent', 'done': 220.35677699999999, 'ms': 217.836904, 'syscallargs': [256, 0, 1465296], 'cpu': 2147742720},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 285.42538200000001, 'ms': 219.85503700000001, 'syscallargs': [1, 18348996, 1], 'cpu': 3124053392},
-{'stacktrace': [[2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 3500, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 302.48732699999999, 'ms': 220.374098, 'syscallargs': [9, 32505136, 1], 'cpu': 3124053392},
-{'stacktrace': [[2089911260, 'ntdll.dll!RtlpDeCommitFreeBlock+0x672c'], [2089881290, 'ntdll.dll!RtlFreeHeap+0xa8d'], [22426564, 'chrome.dll!free+0x6e [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\free.c:110 ]'], [27028667, 'chrome.dll!PrefService::SavePersistentPrefs+0x15b [ c:\\g\\trunk\\src\\chrome\\common\\pref_service.cc:209 ]'], [20562380, 'chrome.dll!browser_shutdown::Shutdown+0x11c [ c:\\g\\trunk\\src\\chrome\\browser\\browser_shutdown.cc:118 ]'], [20405156, 'chrome.dll!BrowserMain+0x1024 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:604 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 83, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtFreeVirtualMemory', 'done': 221.13285300000001, 'ms': 220.45483400000001, 'syscallargs': [4294967295, 1242484, 1242488], 'cpu': 2147742720},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19467175, 'chrome.dll!base::MessagePumpForUI::WaitForWork+0x27 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:408 ]'], [19470141, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0xbd [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:393 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2736, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 287.21471600000001, 'ms': 221.18006600000001, 'syscallargs': [1, 15858672, 1], 'cpu': 3124053392},
-{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [19417840, 'chrome.dll!PlatformThread::Join+0x60 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:94 ]'], [23799942, 'chrome.dll!base::Thread::Stop+0xc6 [ c:\\g\\trunk\\src\\base\\thread.cc:112 ]'], [23800270, 'chrome.dll!base::Thread::~Thread+0xe [ c:\\g\\trunk\\src\\base\\thread.cc:45 ]'], [20409619, 'chrome.dll!HistoryService::Cleanup+0xc3 [ c:\\g\\trunk\\src\\chrome\\browser\\history\\history.cc:174 ]'], [20855337, 'chrome.dll!ProfileImpl::~ProfileImpl+0xc9 [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:605 ]'], [20856251, "chrome.dll!ProfileImpl::`scalar deleting destructor'+0xb"], [20599735, 'chrome.dll!ProfileManager::~ProfileManager+0x67 [ c:\\g\\trunk\\src\\chrome\\browser\\profile_manager.cc:47 ]'], [20600411, "chrome.dll!ProfileManager::`scalar deleting destructor'+0xb"], [20507748, 'chrome.dll!BrowserProcessImpl::~BrowserProcessImpl+0x64 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.cc:154 ]'], [20508459, "chrome.dll!BrowserProcessImpl::`scalar deleting destructor'+0xb"], [20562398, 'chrome.dll!browser_shutdown::Shutdown+0x12e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_shutdown.cc:119 ]'], [20405156, 'chrome.dll!BrowserMain+0x1024 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:604 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]']], 'thread': 3956, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 285.39185800000001, 'ms': 221.208282, 'syscallargs': [516, 0, 0], 'cpu': 3124053392},
-{'stacktrace': [[2088803065, 'kernel32.dll!VirtualFree+0x15'], [27491400, 'chrome.dll!sqlite3PagerLoadall+0xe8 [ c:\\g\\trunk\\src\\third_party\\sqlite\\pager.c:4532 ]'], [27324147, 'chrome.dll!sqlite3Preload+0x33 [ c:\\g\\trunk\\src\\third_party\\sqlite\\build.c:3381 ]'], [21199165, 'chrome.dll!history::HistoryDatabase::PrimeCache+0x5d [ c:\\g\\trunk\\src\\chrome\\browser\\history\\history_database.cc:106 ]'], [21200727, 'chrome.dll!history::HistoryDatabase::Init+0x117 [ c:\\g\\trunk\\src\\chrome\\browser\\history\\history_database.cc:71 ]'], [20616681, 'chrome.dll!history::HistoryBackend::InitImpl+0x1d9 [ c:\\g\\trunk\\src\\chrome\\browser\\history\\history_backend.cc:508 ]'], [20622856, 'chrome.dll!history::HistoryBackend::Init+0x8 [ c:\\g\\trunk\\src\\chrome\\browser\\history\\history_backend.cc:238 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19486017, 'chrome.dll!base::MessagePumpDefault::Run+0x111 [ c:\\g\\trunk\\src\\base\\message_pump_default.cc:50 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2688, 'syscall': 83, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtFreeVirtualMemory', 'done': 227.42667, 'ms': 226.69361599999999, 'syscallargs': [4294967295, 45021524, 45021528], 'cpu': 2147742720},
-{'stacktrace': [[27392208, 'chrome.dll!winRead+0x20 [ c:\\g\\trunk\\src\\third_party\\sqlite\\os_win.c:1003 ]'], [27524918, 'chrome.dll!sqlite3OsRead+0x16 [ c:\\g\\trunk\\src\\third_party\\sqlite\\os.c:39 ]'], [27484071, 'chrome.dll!readDbPage+0x37 [ c:\\g\\trunk\\src\\third_party\\sqlite\\pager.c:2811 ]'], [27491450, 'chrome.dll!sqlite3PagerAcquire+0x1a [ c:\\g\\trunk\\src\\third_party\\sqlite\\pager.c:3113 ]'], [27352637, 'chrome.dll!sqlite3BtreeGetPage+0x1d [ c:\\g\\trunk\\src\\third_party\\sqlite\\btree.c:938 ]'], [27358074, 'chrome.dll!moveToChild+0x2a [ c:\\g\\trunk\\src\\third_party\\sqlite\\btree.c:2971 ]'], [27358534, 'chrome.dll!moveToLeftmost+0x36 [ c:\\g\\trunk\\src\\third_party\\sqlite\\btree.c:3086 ]'], [27516795, 'chrome.dll!sqlite3VdbeExec+0x318b [ c:\\g\\trunk\\src\\third_party\\sqlite\\vdbe.c:3838 ]'], [27336190, 'chrome.dll!sqlite3Step+0x11e [ c:\\g\\trunk\\src\\third_party\\sqlite\\vdbeapi.c:247 ]'], [27336432, 'chrome.dll!sqlite3_step+0x10 [ c:\\g\\trunk\\src\\third_party\\sqlite\\vdbeapi.c:303 ]'], [27314864, 'chrome.dll!sqlite3_exec+0xb0 [ c:\\g\\trunk\\src\\third_party\\sqlite\\legacy.c:76 ]'], [21366866, 'chrome.dll!history::InMemoryDatabase::InitFromDisk+0x162 [ c:\\g\\trunk\\src\\chrome\\browser\\history\\in_memory_database.cc:82 ]'], [20617111, 'chrome.dll!history::HistoryBackend::InitImpl+0x387 [ c:\\g\\trunk\\src\\chrome\\browser\\history\\history_backend.cc:528 ]'], [20622856, 'chrome.dll!history::HistoryBackend::Init+0x8 [ c:\\g\\trunk\\src\\chrome\\browser\\history\\history_backend.cc:238 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19486017, 'chrome.dll!base::MessagePumpDefault::Run+0x111 [ c:\\g\\trunk\\src\\base\\message_pump_default.cc:50 ]']], 'thread': 2688, 'syscall': 183, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtReadFile', 'done': 257.96155700000003, 'ms': 257.69392499999998, 'syscallargs': [272, 0, 0], 'cpu': 2147742720},
-{'thread': 2688, 'eventtype': 'EVENT_TYPE_THREADEXIT', 'cpu': 2147742720, 'ms': 284.95968099999999, 'stacktrace': [[2088810121, 'kernel32.dll!BaseThreadStart+0x3d']]},
-{'stacktrace': [[19407956, 'chrome.dll!MessageLoop::PostTask+0x14 [ c:\\g\\trunk\\src\\base\\message_loop.cc:231 ]'], [20855572, 'chrome.dll!ProfileImpl::~ProfileImpl+0x1b4 [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:621 ]'], [20856251, "chrome.dll!ProfileImpl::`scalar deleting destructor'+0xb"], [20599735, 'chrome.dll!ProfileManager::~ProfileManager+0x67 [ c:\\g\\trunk\\src\\chrome\\browser\\profile_manager.cc:47 ]'], [20600411, "chrome.dll!ProfileManager::`scalar deleting destructor'+0xb"], [20507748, 'chrome.dll!BrowserProcessImpl::~BrowserProcessImpl+0x64 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.cc:154 ]'], [20508459, "chrome.dll!BrowserProcessImpl::`scalar deleting destructor'+0xb"], [20562398, 'chrome.dll!browser_shutdown::Shutdown+0x12e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_shutdown.cc:119 ]'], [20405156, 'chrome.dll!BrowserMain+0x1024 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:604 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 4571, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserPostMessage', 'done': 286.96077300000002, 'ms': 285.515897, 'syscallargs': [6685238, 1025, 13825696], 'cpu': 2147742720},
-{'stacktrace': [[19407956, 'chrome.dll!MessageLoop::PostTask+0x14 [ c:\\g\\trunk\\src\\base\\message_loop.cc:231 ]'], [27028623, 'chrome.dll!PrefService::SavePersistentPrefs+0x12f [ c:\\g\\trunk\\src\\chrome\\common\\pref_service.cc:204 ]'], [20855685, 'chrome.dll!ProfileImpl::~ProfileImpl+0x225 [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:633 ]'], [20856251, "chrome.dll!ProfileImpl::`scalar deleting destructor'+0xb"], [20599735, 'chrome.dll!ProfileManager::~ProfileManager+0x67 [ c:\\g\\trunk\\src\\chrome\\browser\\profile_manager.cc:47 ]'], [20600411, "chrome.dll!ProfileManager::`scalar deleting destructor'+0xb"], [20507748, 'chrome.dll!BrowserProcessImpl::~BrowserProcessImpl+0x64 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.cc:154 ]'], [20508459, "chrome.dll!BrowserProcessImpl::`scalar deleting destructor'+0xb"], [20562398, 'chrome.dll!browser_shutdown::Shutdown+0x12e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_shutdown.cc:119 ]'], [20405156, 'chrome.dll!BrowserMain+0x1024 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:604 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 4571, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserPostMessage', 'done': 287.78713499999998, 'ms': 287.20828999999998, 'syscallargs': [8585726, 1025, 13802976], 'cpu': 3124053392},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19467175, 'chrome.dll!base::MessagePumpForUI::WaitForWork+0x27 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:408 ]'], [19470141, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0xbd [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:393 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2736, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 287.99358599999999, 'ms': 287.77847500000001, 'syscallargs': [1, 15858672, 1], 'cpu': 3124053392},
-{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [19417840, 'chrome.dll!PlatformThread::Join+0x60 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:94 ]'], [23799942, 'chrome.dll!base::Thread::Stop+0xc6 [ c:\\g\\trunk\\src\\base\\thread.cc:112 ]'], [20503505, "chrome.dll!`anonymous namespace'::BrowserProcessSubThread::`scalar deleting destructor'+0x11"], [20507877, 'chrome.dll!BrowserProcessImpl::~BrowserProcessImpl+0xe5 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.cc:172 ]'], [20508459, "chrome.dll!BrowserProcessImpl::`scalar deleting destructor'+0xb"], [20562398, 'chrome.dll!browser_shutdown::Shutdown+0x12e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_shutdown.cc:119 ]'], [20405156, 'chrome.dll!BrowserMain+0x1024 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:604 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 300.546019, 'ms': 287.99023299999999, 'syscallargs': [196, 0, 0], 'cpu': 3124053392},
-{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19467175, 'chrome.dll!base::MessagePumpForUI::WaitForWork+0x27 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:408 ]'], [19470141, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0xbd [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:393 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2736, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 300.57563199999998, 'ms': 288.06845600000003, 'syscallargs': [1, 15858672, 1], 'cpu': 3124053392},
-{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [19417840, 'chrome.dll!PlatformThread::Join+0x60 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:94 ]'], [23799942, 'chrome.dll!base::Thread::Stop+0xc6 [ c:\\g\\trunk\\src\\base\\thread.cc:112 ]'], [23800337, "chrome.dll!base::Thread::`scalar deleting destructor'+0x11"], [20807416, 'chrome.dll!SafeBrowsingService::OnIOShutdown+0xd8 [ c:\\g\\trunk\\src\\chrome\\browser\\safe_browsing\\safe_browsing_service.cc:124 ]'], [19405904, 'chrome.dll!MessageLoop::RunTask+0x80 [ c:\\g\\trunk\\src\\base\\message_loop.cc:309 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470254, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0x5e [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:533 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 300.18396200000001, 'ms': 299.48918099999997, 'syscallargs': [288, 0, 0], 'cpu': 2147742720},
-{'thread': 2136, 'eventtype': 'EVENT_TYPE_THREADEXIT', 'cpu': 3124053392, 'ms': 299.871352, 'stacktrace': [[2088810121, 'kernel32.dll!BaseThreadStart+0x3d']]},
-{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [19495803, 'chrome.dll!base::WaitableEvent::Wait+0x1b [ c:\\g\\trunk\\src\\base\\waitable_event_win.cc:42 ]'], [19485939, 'chrome.dll!base::MessagePumpDefault::Run+0xc3 [ c:\\g\\trunk\\src\\base\\message_pump_default.cc:43 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 1884, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 301.27013299999999, 'ms': 299.88085100000001, 'syscallargs': [284, 0, 0], 'cpu': 2147742720},
-{'thread': 708, 'eventtype': 'EVENT_TYPE_THREADEXIT', 'cpu': 3124053392, 'ms': 300.33398099999999, 'stacktrace': [[2088810121, 'kernel32.dll!BaseThreadStart+0x3d']]},
-{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [19417840, 'chrome.dll!PlatformThread::Join+0x60 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:94 ]'], [23799942, 'chrome.dll!base::Thread::Stop+0xc6 [ c:\\g\\trunk\\src\\base\\thread.cc:112 ]'], [20503505, "chrome.dll!`anonymous namespace'::BrowserProcessSubThread::`scalar deleting destructor'+0x11"], [20507946, 'chrome.dll!BrowserProcessImpl::~BrowserProcessImpl+0x12a [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.cc:183 ]'], [20508459, "chrome.dll!BrowserProcessImpl::`scalar deleting destructor'+0xb"], [20562398, 'chrome.dll!browser_shutdown::Shutdown+0x12e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_shutdown.cc:119 ]'], [20405156, 'chrome.dll!BrowserMain+0x1024 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:604 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 300.95026000000001, 'ms': 300.57758699999999, 'syscallargs': [156, 0, 0], 'cpu': 2147742720},
-{'thread': 2736, 'eventtype': 'EVENT_TYPE_THREADEXIT', 'cpu': 3124053392, 'ms': 300.73039999999997, 'stacktrace': [[2088810121, 'kernel32.dll!BaseThreadStart+0x3d']]},
-{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [19417840, 'chrome.dll!PlatformThread::Join+0x60 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:94 ]'], [23799942, 'chrome.dll!base::Thread::Stop+0xc6 [ c:\\g\\trunk\\src\\base\\thread.cc:112 ]'], [20503505, "chrome.dll!`anonymous namespace'::BrowserProcessSubThread::`scalar deleting destructor'+0x11"], [20508363, 'chrome.dll!BrowserProcessImpl::~BrowserProcessImpl+0x2cb [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.cc:203 ]'], [20508459, "chrome.dll!BrowserProcessImpl::`scalar deleting destructor'+0xb"], [20562398, 'chrome.dll!browser_shutdown::Shutdown+0x12e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_shutdown.cc:119 ]'], [20405156, 'chrome.dll!BrowserMain+0x1024 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:604 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 301.49865399999999, 'ms': 301.267899, 'syscallargs': [280, 0, 0], 'cpu': 2147742720},
-{'thread': 1884, 'eventtype': 'EVENT_TYPE_THREADEXIT', 'cpu': 3124053392, 'ms': 301.33801899999997, 'stacktrace': [[2088810121, 'kernel32.dll!BaseThreadStart+0x3d']]},
-{'stacktrace': [[2088804469, 'kernel32.dll!WaitForMultipleObjects+0x18'], [20822595, 'chrome.dll!chrome_browser_net::DnsMaster::ShutdownSlaves+0x243 [ c:\\g\\trunk\\src\\chrome\\browser\\net\\dns_master.cc:358 ]'], [20522695, 'chrome.dll!chrome_browser_net::ShutdownDnsPrefetch+0x77 [ c:\\g\\trunk\\src\\chrome\\browser\\net\\dns_global.cc:372 ]'], [20405195, 'chrome.dll!BrowserMain+0x104b [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:604 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 302.38675599999999, 'ms': 302.15851500000002, 'syscallargs': [1, 1242668, 0], 'cpu': 3124053392},
-{'thread': 2812, 'eventtype': 'EVENT_TYPE_THREADEXIT', 'cpu': 2147742720, 'ms': 302.17639400000002, 'stacktrace': [[2088810121, 'kernel32.dll!BaseThreadStart+0x3d']]},
-{'stacktrace': [[2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 3500, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 324.76809200000002, 'ms': 302.48956199999998, 'syscallargs': [8, 32505136, 1], 'cpu': 3124053392},
-{'thread': 2428, 'eventtype': 'EVENT_TYPE_THREADEXIT', 'cpu': 3124053392, 'ms': 304.13334700000001, 'stacktrace': [[2088810121, 'kernel32.dll!BaseThreadStart+0x3d']]},
-{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [4226553, 'chrome.exe!sandbox::TargetProcess::~TargetProcess+0x19 [ c:\\g\\trunk\\src\\sandbox\\src\\target_process.cc:103 ]'], [4228125, 'chrome.exe!sandbox::PolicyBase::OnJobEmpty+0xdd [ c:\\g\\trunk\\src\\sandbox\\src\\sandbox_policy_base.cc:171 ]'], [4215782, 'chrome.exe!sandbox::BrokerServicesBase::FreeResources+0xc6 [ c:\\g\\trunk\\src\\sandbox\\src\\broker_services.cc:124 ]'], [4216698, 'chrome.exe!sandbox::BrokerServicesBase::~BrokerServicesBase+0xfa [ c:\\g\\trunk\\src\\sandbox\\src\\broker_services.cc:101 ]'], [4212403, 'chrome.exe!sandbox::SingletonBase<sandbox::BrokerServicesBase>::OnExit+0x13 [ c:\\g\\trunk\\src\\sandbox\\src\\win_utils.h:58 ]'], [4484605, 'chrome.exe!exit+0xd [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0dat.c:398 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 324.702721, 'ms': 304.33728300000001, 'syscallargs': [424, 0, 1244444], 'cpu': 2147742720},
-{'stacktrace': [[2088881646, 'kernel32.dll!ExitProcess+0x14'], [4484030, 'chrome.exe!__crtExitProcess+0x14 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0dat.c:683 ]'], [4484605, 'chrome.exe!exit+0xd [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0dat.c:398 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 257, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwTerminateProcess', 'done': 325.70620000000002, 'ms': 325.44387599999999, 'syscallargs': [0, 0, 241550694], 'cpu': 2147742720},
-{'thread': 3956, 'eventtype': 'EVENT_TYPE_PROCESSEXIT', 'cpu': 3124053392, 'ms': 325.70871399999999, 'stacktrace': [[2088881646, 'kernel32.dll!ExitProcess+0x14'], [4484030, 'chrome.exe!__crtExitProcess+0x14 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0dat.c:683 ]'], [4484605, 'chrome.exe!exit+0xd [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0dat.c:398 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']]},
-])
diff --git a/chromium/tools/traceline/svgui/traceline.css b/chromium/tools/traceline/svgui/traceline.css
deleted file mode 100644
index 98bf4450a77..00000000000
--- a/chromium/tools/traceline/svgui/traceline.css
+++ /dev/null
@@ -1,73 +0,0 @@
-@namespace url(http://www.w3.org/1999/xhtml);
-@namespace svg url(http://www.w3.org/2000/svg);
-
-body {
- /* Trim down the default top margin of 8px, so we have a bit more space. */
- margin-top: 4px;
-}
-
-div.threadnamediv {
- height: 16px;
-}
-div.threadnamesdiv {
- margin-right: 2px;
- position: absolute;
- font-family: monospace;
- z-index: -1;
-}
-
-/* The fakescrolldiv will have the scroll bar, the amount it scrolls is
- controlled by the size of fattydiv within it. */
-div.fakescrolldiv {
- /* This needs to be at least 16px, the height of the scrollbar, to have the
- scrollbar renderer in firefox */
- /* Making the height 16px in webkit causes the computed width to be 16px
- shorter than what we specify. 17px is enough to cause it to be correct */
- height: 17px;
- width: 1008px;
- overflow: auto;
-}
-
-div.fattydiv {
- /* the div needs to have a height for the scrollbar to render in firefox */
- height: 1px;
-}
-
-div.infoareadiv {
- margin-top: 4px;
- padding: 4px;
- border: 1px solid gray;
- height: 350px;
- overflow: auto;
- font-family: monospace;
- white-space: pre;
-}
-
-svg|rect.thread {
- /* fill: #f4f4f6; */
- fill: #efeff2;
- opacity: 0.7;
-}
-
-svg|rect.event {
- fill: #f6a120;
-}
-
-svg|rect.eventwaiting {
- fill: #62ccf3;
-}
-
-svg|rect.event:hover, svg|rect.eventwaiting:hover {
- fill: #d92129;
-}
-
-svg|line.eventline {
- stroke: #bad432;
- stroke-width: 2px;
- stroke-opacity: 0.7;
-}
-
-svg|line.eventline:hover {
- stroke: #d92129;
- stroke-opacity: 1;
-}
diff --git a/chromium/tools/traceline/svgui/traceline.js b/chromium/tools/traceline/svgui/traceline.js
deleted file mode 100644
index 33cc2dfa388..00000000000
--- a/chromium/tools/traceline/svgui/traceline.js
+++ /dev/null
@@ -1,693 +0,0 @@
-// Copyright (c) 2009 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.
-
-// TODO
-// - spacial partitioning of the data so that we don't have to scan the
-// entire scene every time we render.
-// - properly clip the SVG elements when they render, right now we are just
-// letting them go negative or off the screen. This might give us a little
-// bit better performance?
-// - make the lines for thread creation work again. Figure out a better UI
-// than these lines, because they can be a bit distracting.
-// - Implement filters, so that you can filter on specific event types, etc.
-// - Make the callstack box collapsable or scrollable or something, it takes
-// up a lot of screen realestate now.
-// - Figure out better ways to preserve screen realestate.
-// - Make the thread bar heights configurable, figure out a better way to
-// handle overlapping events (the pushdown code).
-// - "Sticky" info, so you can click on something, and it will stay. Now
-// if you need to scroll the page you usually lose the info because you
-// will mouse over something else on your way to scrolling.
-// - Help / legend
-// - Loading indicator / debug console.
-// - OH MAN BETTER COLORS PLEASE
-//
-// Dean McNamee <deanm@chromium.org>
-
-// Man... namespaces are such a pain.
-var svgNS = 'http://www.w3.org/2000/svg';
-var xhtmlNS = 'http://www.w3.org/1999/xhtml';
-
-function toHex(num) {
- var str = "";
- var table = "0123456789abcdef";
- for (var i = 0; i < 8; ++i) {
- str = table.charAt(num & 0xf) + str;
- num >>= 4;
- }
- return str;
-}
-
-// a TLThread represents information about a thread in the traceline data.
-// A thread has a list of all events that happened on that thread, the start
-// and end time of the thread, the thread id, and name, etc.
-function TLThread(id, startms, endms) {
- this.id = id;
- // Default the name to the thread id, but if the application uses
- // thread naming, we might see a THREADNAME event later and update.
- this.name = "thread_" + id;
- this.startms = startms;
- this.endms = endms;
- this.events = [ ];
-};
-
-TLThread.prototype.duration_ms =
-function() {
- return this.endms - this.startms;
-};
-
-TLThread.prototype.AddEvent =
-function(e) {
- this.events.push(e);
-};
-
-TLThread.prototype.toString =
-function() {
- var res = "TLThread -- id: " + this.id + " name: " + this.name +
- " startms: " + this.startms + " endms: " + this.endms +
- " parent: " + this.parent;
- return res;
-};
-
-// A TLEvent represents a single logged event that happened on a thread.
-function TLEvent(e) {
- this.eventtype = e['eventtype'];
- this.thread = toHex(e['thread']);
- this.cpu = toHex(e['cpu']);
- this.ms = e['ms'];
- this.done = e['done'];
- this.e = e;
-}
-
-function HTMLEscape(str) {
- return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
-}
-
-TLEvent.prototype.toString =
-function() {
- var res = "<b>ms:</b> " + this.ms + " " +
- "<b>event:</b> " + this.eventtype + " " +
- "<b>thread:</b> " + this.thread + " " +
- "<b>cpu:</b> " + this.cpu + "<br/>";
- if ('ldrinfo' in this.e) {
- res += "<b>ldrinfo:</b> " + this.e['ldrinfo'] + "<br/>";
- }
- if ('done' in this.e && this.e['done'] > 0) {
- res += "<b>done:</b> " + this.e['done'] + " ";
- res += "<b>duration:</b> " + (this.e['done'] - this.ms) + "<br/>";
- }
- if ('syscall' in this.e) {
- res += "<b>syscall:</b> " + this.e['syscall'];
- if ('syscallname' in this.e) {
- res += " <b>syscallname:</b> " + this.e['syscallname'];
- }
- if ('retval' in this.e) {
- res += " <b>retval:</b> " + this.e['retval'];
- }
- res += "<br/>"
- }
- if ('func_addr' in this.e) {
- res += "<b>func_addr:</b> " + toHex(this.e['func_addr']);
- if ('func_addr_name' in this.e) {
- res += " <b>func_addr_name:</b> " + HTMLEscape(this.e['func_addr_name']);
- }
- res += "<br/>"
- }
- if ('stacktrace' in this.e) {
- var stack = this.e['stacktrace'];
- res += "<b>stacktrace:</b><br/>";
- for (var i = 0; i < stack.length; ++i) {
- res += "0x" + toHex(stack[i][0]) + " - " +
- HTMLEscape(stack[i][1]) + "<br/>";
- }
- }
-
- return res;
-}
-
-// The trace logger dumps all log events to a simple JSON array. We delay
-// and background load the JSON, since it can be large. When the JSON is
-// loaded, parseEvents(...) is called and passed the JSON data. To make
-// things easier, we do a few passes on the data to group them together by
-// thread, gather together some useful pieces of data in a single place,
-// and form more of a structure out of the data. We also build links
-// between related events, for example a thread creating a new thread, and
-// the new thread starting to run. This structure is fairly close to what
-// we want to represent in the interface.
-
-// Delay load the JSON data. We want to display the order in the order it was
-// passed to us. Since we have no way of correlating the json callback to
-// which script element it was called on, we load them one at a time.
-
-function JSONLoader(json_urls) {
- this.urls_to_load = json_urls;
- this.script_element = null;
-}
-
-JSONLoader.prototype.IsFinishedLoading =
-function() { return this.urls_to_load.length == 0; };
-
-// Start loading of the next JSON URL.
-JSONLoader.prototype.LoadNext =
-function() {
- var sc = document.createElementNS(
- 'http://www.w3.org/1999/xhtml', 'script');
- this.script_element = sc;
-
- sc.setAttribute("src", this.urls_to_load[0]);
- document.getElementsByTagNameNS(xhtmlNS, 'body')[0].appendChild(sc);
-};
-
-// Callback counterpart to load_next, should be called when the script element
-// is finished loading. Returns the URL that was just loaded.
-JSONLoader.prototype.DoneLoading =
-function() {
- // Remove the script element from the DOM.
- this.script_element.parentNode.removeChild(this.script_element);
- this.script_element = null;
- // Return the URL that had just finished loading.
- return this.urls_to_load.shift();
-};
-
-var loader = null;
-
-function loadJSON(json_urls) {
- loader = new JSONLoader(json_urls);
- if (!loader.IsFinishedLoading())
- loader.LoadNext();
-}
-
-var traceline = new Traceline();
-
-// Called from the JSON with the log event array.
-function parseEvents(json) {
- loader.DoneLoading();
-
- var done = loader.IsFinishedLoading();
- if (!done)
- loader.LoadNext();
-
- traceline.ProcessJSON(json);
-
- if (done)
- traceline.Render();
-}
-
-// The Traceline class represents our entire state, all of the threads from
-// all sets of data, all of the events, DOM elements, etc.
-function Traceline() {
- // The array of threads that existed in the program. Hopefully in order
- // they were created. This includes all threads from all sets of data.
- this.threads = [ ];
-
- // Keep a mapping of where in the list of threads a set starts...
- this.thread_set_indexes = [ ];
-
- // Map a thread id to the index in the threads array. A thread ID is the
- // unique ID from the OS, along with our set id of which data file we were.
- this.threads_by_id = { };
-
- // The last event time of all of our events.
- this.endms = 0;
-
- // Constants for SVG rendering...
- this.kThreadHeightPx = 16;
- this.kTimelineWidthPx = 1008;
-}
-
-// Called to add another set of data into the traceline.
-Traceline.prototype.ProcessJSON =
-function(json_data) {
- // Keep track of which threads belong to which sets of data...
- var set_id = this.thread_set_indexes.length;
- this.thread_set_indexes.push(this.threads.length);
-
- // TODO make this less hacky. Used to connect related events, like creating
- // a thread and then having that thread run (two separate events which are
- // related but come in at different times, etc).
- var tiez = { };
-
- // Run over the data, building TLThread's and TLEvents, and doing some
- // processing to put things in an easier to display form...
- for (var i = 0, il = json_data.length; i < il; ++i) {
- var e = new TLEvent(json_data[i]);
-
- // Create a unique identifier for a thread by using the id of this data
- // set, so that they are isolated from other sets of data with the same
- // thread id, etc. TODO don't overwrite the original...
- e.thread = set_id + '_' + e.thread;
-
- // If this is the first event ever seen on this thread, create a new
- // thread object and add it to our lists of threads.
- if (!(e.thread in this.threads_by_id)) {
- var end_ms = e.done ? e.done : e.ms;
- var new_thread = new TLThread(e.thread, e.ms, end_ms);
- this.threads_by_id[new_thread.id] = this.threads.length;
- this.threads.push(new_thread);
- }
-
- var thread = this.threads[this.threads_by_id[e.thread]];
- thread.AddEvent(e);
-
- // Keep trace of the time of the last event seen.
- var end_ms = e.done ? e.done : e.ms;
- if (end_ms > this.endms) this.endms = end_ms;
- if (end_ms > thread.endms) thread.endms = end_ms;
-
- switch(e.eventtype) {
- case 'EVENT_TYPE_THREADNAME':
- thread.name = e.e['threadname'];
- break;
- case 'EVENT_TYPE_CREATETHREAD':
- tiez[e.e['eventid']] = e;
- break;
- case 'EVENT_TYPE_THREADBEGIN':
- var pei = e.e['parenteventid'];
- if (pei in tiez) {
- e.parentevent = tiez[pei];
- tiez[pei].childevent = e;
- }
- break;
- }
- }
-};
-
-Traceline.prototype.Render =
-function() { this.RenderSVG(); };
-
-Traceline.prototype.RenderText =
-function() {
- var z = document.getElementsByTagNameNS(xhtmlNS, 'body')[0];
- for (var i = 0, il = this.threads.length; i < il; ++i) {
- var p = document.createElementNS(
- 'http://www.w3.org/1999/xhtml', 'p');
- p.innerHTML = this.threads[i].toString();
- z.appendChild(p);
- }
-};
-
-// Oh man, so here we go. For two reasons, I implement my own scrolling
-// system. First off, is that in order to scale, we want to have as little
-// on the DOM as possible. This means not having off-screen elements in the
-// DOM, as this slows down everything. This comes at a cost of more expensive
-// scrolling performance since you have to re-render the scene. The second
-// reason is a bug I stumbled into:
-// https://bugs.webkit.org/show_bug.cgi?id=21968
-// This means that scrolling an SVG element doesn't really work properly
-// anyway. So what the code does is this. We have our layout that looks like:
-// [ thread names ] [ svg timeline ]
-// [ scroll bar ]
-// We make a fake scrollbar, which doesn't actually have the SVG inside of it,
-// we want for when this scrolls, with some debouncing, and then when it has
-// scrolled we rerender the scene. This means that the SVG element is never
-// scrolled, and coordinates are always at 0. We keep the scene in millisecond
-// units which also helps for zooming. We do our own hit testing and decide
-// what needs to be renderer, convert from milliseconds to SVG pixels, and then
-// draw the update into the static SVG element... Y coordinates are still
-// always in pixels (since we aren't paging along the Y axis), but this might
-// be something to fix up later.
-
-function SVGSceneLine(msg, klass, x1, y1, x2, y2) {
- this.type = SVGSceneLine;
- this.msg = msg;
- this.klass = klass;
-
- this.x1 = x1;
- this.y1 = y1;
- this.x2 = x2;
- this.y2 = y2;
-
- this.hittest = function(startms, dur) {
- return true;
- };
-}
-
-function SVGSceneRect(msg, klass, x, y, width, height) {
- this.type = SVGSceneRect;
- this.msg = msg;
- this.klass = klass;
-
- this.x = x;
- this.y = y;
- this.width = width;
- this.height = height;
-
- this.hittest = function(startms, dur) {
- return this.x <= (startms + dur) &&
- (this.x + this.width) >= startms;
- };
-}
-
-Traceline.prototype.RenderSVG =
-function() {
- var threadnames = this.RenderSVGCreateThreadNames();
- var scene = this.RenderSVGCreateScene();
-
- var curzoom = 8;
-
- // The height is static after we've created the scene
- var dom = this.RenderSVGCreateDOM(threadnames, scene.height);
-
- dom.zoom(curzoom);
-
- dom.attach();
-
- var draw = (function(obj) {
- return function(scroll, total) {
- var startms = (scroll / total) * obj.endms;
-
- var start = (new Date).getTime();
- var count = obj.RenderSVGRenderScene(dom, scene, startms, curzoom);
- var total = (new Date).getTime() - start;
-
- dom.infoareadiv.innerHTML =
- 'Scene render of ' + count + ' nodes took: ' + total + ' ms';
- };
- })(this, dom, scene);
-
- // Paint the initial paint with no scroll
- draw(0, 1);
-
- // Hook us up to repaint on scrolls.
- dom.redraw = draw;
-};
-
-
-// Create all of the DOM elements for the SVG scene.
-Traceline.prototype.RenderSVGCreateDOM =
-function(threadnames, svgheight) {
-
- // Total div holds the container and the info area.
- var totaldiv = document.createElementNS(xhtmlNS, 'div');
-
- // Container holds the thread names, SVG element, and fake scroll bar.
- var container = document.createElementNS(xhtmlNS, 'div');
- container.className = 'container';
-
- // This is the div that holds the thread names along the left side, this is
- // done in HTML for easier/better text support than SVG.
- var threadnamesdiv = document.createElementNS(xhtmlNS, 'div');
- threadnamesdiv.className = 'threadnamesdiv';
-
- // Add all of the names into the div, these are static and don't update.
- for (var i = 0, il = threadnames.length; i < il; ++i) {
- var div = document.createElementNS(xhtmlNS, 'div');
- div.className = 'threadnamediv';
- div.appendChild(document.createTextNode(threadnames[i]));
- threadnamesdiv.appendChild(div);
- }
-
- // SVG div goes along the right side, it holds the SVG element and our fake
- // scroll bar.
- var svgdiv = document.createElementNS(xhtmlNS, 'div');
- svgdiv.className = 'svgdiv';
-
- // The SVG element, static width, and we will update the height after we've
- // walked through how many threads we have and know the size.
- var svg = document.createElementNS(svgNS, 'svg');
- svg.setAttributeNS(null, 'height', svgheight);
- svg.setAttributeNS(null, 'width', this.kTimelineWidthPx);
-
- // The fake scroll div is an outer div with a fixed size with a scroll.
- var fakescrolldiv = document.createElementNS(xhtmlNS, 'div');
- fakescrolldiv.className = 'fakescrolldiv';
-
- // Fatty is inside the fake scroll div to give us the size we want to scroll.
- var fattydiv = document.createElementNS(xhtmlNS, 'div');
- fattydiv.className = 'fattydiv';
- fakescrolldiv.appendChild(fattydiv);
-
- var infoareadiv = document.createElementNS(xhtmlNS, 'div');
- infoareadiv.className = 'infoareadiv';
- infoareadiv.innerHTML = 'Hover an event...';
-
- // Set the SVG mouseover handler to write the data to the infoarea.
- svg.addEventListener('mouseover', (function(infoarea) {
- return function(e) {
- if ('msg' in e.target && e.target.msg) {
- infoarea.innerHTML = e.target.msg;
- }
- e.stopPropagation(); // not really needed, but might as well.
- };
- })(infoareadiv), true);
-
-
- svgdiv.appendChild(svg);
- svgdiv.appendChild(fakescrolldiv);
-
- container.appendChild(threadnamesdiv);
- container.appendChild(svgdiv);
-
- totaldiv.appendChild(container);
- totaldiv.appendChild(infoareadiv);
-
- var widthms = Math.floor(this.endms + 2);
- // Make member variables out of the things we want to 'export', things that
- // will need to be updated each time we redraw the scene.
- var obj = {
- // The root of our piece of the DOM.
- 'totaldiv': totaldiv,
- // We will want to listen for scrolling on the fakescrolldiv
- 'fakescrolldiv': fakescrolldiv,
- // The SVG element will of course need updating.
- 'svg': svg,
- // The area we update with the info on mouseovers.
- 'infoareadiv': infoareadiv,
- // Called when we detected new scroll a should redraw
- 'redraw': function() { },
- 'attached': false,
- 'attach': function() {
- document.getElementsByTagNameNS(xhtmlNS, 'body')[0].appendChild(
- this.totaldiv);
- this.attached = true;
- },
- // The fatty div will have its width adjusted based on the zoom level and
- // the duration of the graph, to get the scrolling correct for the size.
- 'zoom': function(curzoom) {
- var width = widthms * curzoom;
- fattydiv.style.width = width + 'px';
- },
- 'detach': function() {
- this.totaldiv.parentNode.removeChild(this.totaldiv);
- this.attached = false;
- },
- };
-
- // Watch when we get scroll events on the fake scrollbar and debounce. We
- // need to give it a pointer to use in the closer to call this.redraw();
- fakescrolldiv.addEventListener('scroll', (function(theobj) {
- var seqnum = 0;
- return function(e) {
- seqnum = (seqnum + 1) & 0xffff;
- window.setTimeout((function(myseqnum) {
- return function() {
- if (seqnum == myseqnum) {
- theobj.redraw(e.target.scrollLeft, e.target.scrollWidth);
- }
- };
- })(seqnum), 100);
- };
- })(obj), false);
-
- return obj;
-};
-
-Traceline.prototype.RenderSVGCreateThreadNames =
-function() {
- // This names is the list to show along the left hand size.
- var threadnames = [ ];
-
- for (var i = 0, il = this.threads.length; i < il; ++i) {
- var thread = this.threads[i];
-
- // TODO make this not so stupid...
- if (i != 0) {
- for (var j = 0; j < this.thread_set_indexes.length; j++) {
- if (i == this.thread_set_indexes[j]) {
- threadnames.push('------');
- break;
- }
- }
- }
-
- threadnames.push(thread.name);
- }
-
- return threadnames;
-};
-
-Traceline.prototype.RenderSVGCreateScene =
-function() {
- // This scene is just a list of SVGSceneRect and SVGSceneLine, in no great
- // order. In the future they should be structured to make range checking
- // faster.
- var scene = [ ];
-
- // Remember, for now, Y (height) coordinates are still in pixels, since we
- // don't zoom or scroll in this direction. X coordinates are milliseconds.
-
- var lasty = 0;
- for (var i = 0, il = this.threads.length; i < il; ++i) {
- var thread = this.threads[i];
-
- // TODO make this not so stupid...
- if (i != 0) {
- for (var j = 0; j < this.thread_set_indexes.length; j++) {
- if (i == this.thread_set_indexes[j]) {
- lasty += this.kThreadHeightPx;
- break;
- }
- }
- }
-
- // For this thread, create the background thread (blue band);
- scene.push(new SVGSceneRect(null,
- 'thread',
- thread.startms,
- 1 + lasty,
- thread.duration_ms(),
- this.kThreadHeightPx - 2));
-
- // Now create all of the events...
- var pushdown = [ 0, 0, 0, 0 ];
- for (var j = 0, jl = thread.events.length; j < jl; ++j) {
- var e = thread.events[j];
-
- var y = 2 + lasty;
-
- // TODO this is a hack just so that we know the correct why position
- // so we can create the threadline...
- if (e.childevent) {
- e.marky = y;
- }
-
- // Handle events that we want to represent as lines and not event blocks,
- // right now this is only thread creation. We map an event back to its
- // "parent" event, and now lets add a line to represent that.
- if (e.parentevent) {
- var eparent = e.parentevent;
- var msg = eparent.toString() + '<br/>' + e.toString();
- scene.push(
- new SVGSceneLine(msg, 'eventline',
- eparent.ms, eparent.marky + 5, e.ms, lasty + 5));
- }
-
- // We get negative done values (well, really, it was 0 and then made
- // relative to start time) when a syscall never returned...
- var dur = 0;
- if ('done' in e.e && e.e['done'] > 0) {
- dur = e.e['done'] - e.ms;
- }
-
- // TODO skip short events for now, but eventually we should figure out
- // a way to control this from the UI, etc.
- if (dur < 0.2)
- continue;
-
- var width = dur;
-
- // Try to find an available horizontal slot for our event.
- for (var z = 0; z < pushdown.length; ++z) {
- var found = false;
- var slot = z;
- if (pushdown[z] < e.ms) {
- found = true;
- }
- if (!found) {
- if (z != pushdown.length - 1)
- continue;
- slot = Math.floor(Math.random() * pushdown.length);
- alert('blah');
- }
-
- pushdown[slot] = e.ms + dur;
- y += slot * 4;
- break;
- }
-
-
- // Create the event
- klass = e.e.waiting ? 'eventwaiting' : 'event';
- scene.push(
- new SVGSceneRect(e.toString(), klass, e.ms, y, width, 3));
-
- // If there is a "parentevent", we want to make a line there.
- // TODO
- }
-
- lasty += this.kThreadHeightPx;
- }
-
- return {
- 'scene': scene,
- 'width': this.endms + 2,
- 'height': lasty,
- };
-};
-
-Traceline.prototype.RenderSVGRenderScene =
-function(dom, scene, startms, curzoom) {
- var stuff = scene.scene;
- var svg = dom.svg;
-
- var count = 0;
-
- // Remove everything from the DOM.
- while (svg.firstChild)
- svg.removeChild(svg.firstChild);
-
- // Don't actually need this, but you can't transform on an svg element,
- // so it's nice to have a <g> around for transforms...
- var svgg = document.createElementNS(svgNS, 'g');
-
- var dur = this.kTimelineWidthPx / curzoom;
-
- function min(a, b) {
- return a < b ? a : b;
- }
-
- function max(a, b) {
- return a > b ? a : b;
- }
-
- function timeToPixel(x) {
- // TODO(deanm): This clip is a bit shady.
- var x = min(max(Math.floor(x*curzoom), -100), 2000);
- return (x == 0 ? 1 : x);
- }
-
- for (var i = 0, il = stuff.length; i < il; ++i) {
- var thing = stuff[i];
- if (!thing.hittest(startms, startms+dur))
- continue;
-
-
- if (thing.type == SVGSceneRect) {
- var rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
- rect.setAttributeNS(null, 'class', thing.klass)
- rect.setAttributeNS(null, 'x', timeToPixel(thing.x - startms));
- rect.setAttributeNS(null, 'y', thing.y);
- rect.setAttributeNS(null, 'width', timeToPixel(thing.width));
- rect.setAttributeNS(null, 'height', thing.height);
- rect.msg = thing.msg;
- svgg.appendChild(rect);
- } else if (thing.type == SVGSceneLine) {
- var line = document.createElementNS('http://www.w3.org/2000/svg', 'line');
- line.setAttributeNS(null, 'class', thing.klass)
- line.setAttributeNS(null, 'x1', timeToPixel(thing.x1 - startms));
- line.setAttributeNS(null, 'y1', thing.y1);
- line.setAttributeNS(null, 'x2', timeToPixel(thing.x2 - startms));
- line.setAttributeNS(null, 'y2', thing.y2);
- line.msg = thing.msg;
- svgg.appendChild(line);
- }
-
- ++count;
- }
-
- // Append the 'g' element on after we've build it.
- svg.appendChild(svgg);
-
- return count;
-};
diff --git a/chromium/tools/traceline/svgui/traceline.xml b/chromium/tools/traceline/svgui/traceline.xml
deleted file mode 100644
index 375744d069b..00000000000
--- a/chromium/tools/traceline/svgui/traceline.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>Traceline SVG</title>
-
- <link href="traceline.css" rel="stylesheet" type="text/css" />
- <script src="traceline.js"></script>
-</head>
-
-<body onload="loadJSON(document.location.hash.substr(1).split(','));">
-</body>
-</html>
diff --git a/chromium/tools/traceline/traceline/Makefile b/chromium/tools/traceline/traceline/Makefile
deleted file mode 100644
index d5ac5b626a2..00000000000
--- a/chromium/tools/traceline/traceline/Makefile
+++ /dev/null
@@ -1,30 +0,0 @@
-all:
- cl \
- sidestep/ia32_modrm_map.cc \
- sidestep/ia32_opcode_map.cc \
- sidestep/mini_disassembler.cc \
- main.cc \
- /Fetraceline.exe \
- /D_WIN32_WINNT=0x0500 \
- /D_HAS_EXCEPTIONS=0 \
- "/I." \
- /Zi \
- /link \
- kernel32.lib user32.lib dbghelp.lib powrprof.lib
-
-tests:
- cl \
- assembler_unittest.cc \
- /Fassembler_unittest.exe \
- /D_WIN32_WINNT=0x0500 \
- /D_HAS_EXCEPTIONS=0 \
- /Zi \
- /link \
- kernel32.lib user32.lib dbghelp.lib powrprof.lib
-
-stubs : stubs.asm
- nasm -o stubs stubs.asm
- ndisasm -u stubs
-
-clean:
- rm -f *.obj {cpuinfo,traceline,assembler_unittest,vc80}.{exe,ilk,pdb} stubs
diff --git a/chromium/tools/traceline/traceline/README b/chromium/tools/traceline/traceline/README
deleted file mode 100644
index 97ceec8b664..00000000000
--- a/chromium/tools/traceline/traceline/README
+++ /dev/null
@@ -1,21 +0,0 @@
-Traceline is a Windows utility to intercept, time, and log system calls. This
-is achieved by injecting code into a target process, along with dynamically
-generated assembly hook stubs. One of the major goals was to skew performance
-timings as little as possible. This lead to a design in which the log buffer
-(which is called the playground) is kept within the process, and the logger
-routines use atomic instructions to log their events to this buffer. At the
-end of the processes lifetime, this buffer is pulled out of the process and
-used to generated JSON output. In addition to hooking system call activity,
-other hooks of interest have been written, including heap allocation functions.
-Symbols are supported with a command line flag. This works by capturing the
-process shutdown, and doing an intrusive symbol attach with dbghelp.dll
-
-NOTES:
- - You should copy dbghelp.dll from a windbg installation into this directory.
- The version shipped with Windows is old, and symbol support won't work.
- - You will need a bit of cygwin if you want to use the Makefile. Otherwise
- it is pretty clear how to build the files manually.
- - The output JSON data will be printed out stdout. It is likely that you
- will want to pipe the output of this program into a file.
-
-Dean McNamee <deanm@chromium.org>
diff --git a/chromium/tools/traceline/traceline/assembler.h b/chromium/tools/traceline/traceline/assembler.h
deleted file mode 100644
index 6ae69587020..00000000000
--- a/chromium/tools/traceline/traceline/assembler.h
+++ /dev/null
@@ -1,576 +0,0 @@
-// Copyright (c) 2009 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.
-
-// Copyright (c) 1994-2006 Sun Microsystems Inc.
-// All Rights Reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// - Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the following disclaimer.
-//
-// - Redistribution in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-//
-// - Neither the name of Sun Microsystems or the names of contributors may
-// be used to endorse or promote products derived from this software without
-// specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// The original source code covered by the above license above has been
-// modified significantly by Google Inc.
-// Copyright 2006-2008 the V8 project authors. All rights reserved.
-
-// This implements a C++ assembler for dynamically generating machine code.
-// It is heavily based on the v8 assembler, which has a long history of its
-// own. Relocation information has been removed, and in general things were
-// made a bit simpler (and slower). Everything is implemented inline.
-
-#ifndef TRACELINE_ASSEMBLER_H_
-#define TRACELINE_ASSEMBLER_H_
-
-#include <windows.h>
-#include <stdio.h>
-#include <string>
-
-#include "logging.h"
-
-#define ASSERT(x) CHECK(x)
-
-enum Register {
- EAX = 0,
- ECX = 1,
- EDX = 2,
- EBX = 3,
- ESP = 4,
- EBP = 5,
- ESI = 6,
- EDI = 7
-};
-
-enum Condition {
- overflow = 0,
- no_overflow = 1,
- below = 2,
- above_equal = 3,
- equal = 4,
- not_equal = 5,
- below_equal = 6,
- above = 7,
- sign = 8,
- not_sign = 9,
- parity_even = 10,
- parity_odd = 11,
- less = 12,
- greater_equal = 13,
- less_equal = 14,
- greater = 15,
-
- // aliases
- zero = equal,
- not_zero = not_equal,
- negative = sign,
- positive = not_sign
-};
-
-// Labels are used for branching, and marks an offset in the CodeBuffer.
-// A label can be in 3 states:
-// - Unused, the label has never be used in an instruction.
-// - Linked, the label has been referenced (by a jump, for example), but the
-// target is not yet known, because the label is unbound.
-// - Bound, the label has been bound so the offset is known.
-class Label {
- public:
- Label() { Unuse(); }
- ~Label() { ASSERT(!is_linked()); }
-
- void Unuse() {
- num_ = 0;
- }
-
- bool is_unused() const { return num_ == 0; }
- bool is_bound() const { return num_ == -1; }
- bool is_linked() const { return num_ > 0; }
-
- int binding_pos() const {
- ASSERT(is_bound());
- return table_[0];
- }
-
- int num_links() const {
- ASSERT(!is_bound());
- return num_; // Will return 0 if unused.
- }
-
- int link_pos(int i) const {
- ASSERT(is_linked());
- ASSERT(i < num_);
- return table_[i];
- }
-
- private:
- void bind_to(int pos) {
- ASSERT(!is_bound());
- table_[0] = pos;
- num_ = -1;
- }
- void link_to(int pos) {
- ASSERT(!is_bound());
- ASSERT(num_ < kTableSize);
-
- table_[num_] = pos;
- ++num_;
- }
-
- static const int kTableSize = 3;
-
- // We store all links in a fixed size table. When we're bound, we store the
- // binding position in the first entry of the table.
- int table_[kTableSize];
- // The number of entries in our table, if we're linked. If 0, then we're
- // unusued. If -1, then we are bound (and the pos is at table_[0]).
- int num_;
-
- friend class CodeBuffer; // For binding, linking, etc
-};
-
-
-enum ScaleFactor {
- SCALE_TIMES_1 = 0,
- SCALE_TIMES_2 = 1,
- SCALE_TIMES_4 = 2,
- SCALE_TIMES_8 = 3
-};
-
-
-class Operand {
- public:
- explicit Operand(const Operand& x) : len_(x.len_) {
- memcpy(buf_, x.buf_, sizeof(buf_));
- }
-
- // reg
- explicit Operand(Register reg) {
- Init(reg);
- }
-
- // [disp/r]
- explicit Operand(int disp) {
- Init(disp);
- }
-
- // [base + disp/r]
- Operand(Register base, int disp) {
- Init(base, disp);
- }
-
- // [base + index*scale + disp/r]
- Operand(Register base, Register index, ScaleFactor scale, int disp) {
- Init(base, index, scale, disp);
- }
-
- // [index*scale + disp/r]
- Operand(Register index, ScaleFactor scale, int disp) {
- Init(index, scale, disp);
- }
-
- void set_reg(Register reg) {
- ASSERT(len_ > 0);
- buf_[0] = (buf_[0] & ~0x38) | static_cast<char>(reg << 3);
- }
-
- char* data() { return buf_; }
- int length() { return len_; }
-
- private:
- // reg
- void Init(Register reg) {
- set_modrm(3, reg);
- }
-
- // [disp/r]
- void Init(int disp) {
- set_modrm(0, EBP);
- set_dispr(disp);
- }
-
- // [base + disp/r]
- void Init(Register base, int disp) {
- if (disp == 0) {
- // [base]
- set_modrm(0, base);
- if (base == ESP) set_sib(SCALE_TIMES_1, ESP, base);
- } else if (is_int8(disp)) {
- // [base + disp8]
- set_modrm(1, base);
- if (base == ESP) set_sib(SCALE_TIMES_1, ESP, base);
- set_disp8(disp);
- } else {
- // [base + disp/r]
- set_modrm(2, base);
- if (base == ESP) set_sib(SCALE_TIMES_1, ESP, base);
- set_dispr(disp);
- }
- }
-
- // [base + index*scale + disp/r]
- void Init(Register base,
- Register index,
- ScaleFactor scale,
- int disp) {
- ASSERT(index != ESP); // illegal addressing mode
- if (disp == 0 && base != EBP) {
- // [base + index*scale]
- set_modrm(0, ESP);
- set_sib(scale, index, base);
- } else if (is_int8(disp)) {
- // [base + index*scale + disp8]
- set_modrm(1, ESP);
- set_sib(scale, index, base);
- set_disp8(disp);
- } else {
- // [base + index*scale + disp/r]
- set_modrm(2, ESP);
- set_sib(scale, index, base);
- set_dispr(disp);
- }
- }
-
- // [index*scale + disp/r]
- void Init(Register index,
- ScaleFactor scale,
- int disp) {
- ASSERT(index != ESP); // illegal addressing mode
- // We can reduce instruction size by translating instructions of the form:
- // 8D044510000000 lea eax,[eax*2+0x10]
- // To the more concise scale=1 version:
- // 8D440010 lea eax,[eax+eax+0x10]
- if (scale == SCALE_TIMES_2) {
- Init(index, index, SCALE_TIMES_1, disp);
- } else {
- set_modrm(0, ESP);
- set_sib(scale, index, EBP);
- set_dispr(disp);
- }
- }
-
- // Returns true if this Operand is a wrapper for the specified register.
- bool is_reg(Register reg) const {
- return ((buf_[0] & 0xF8) == 0xC0) // addressing mode is register only.
- && ((buf_[0] & 0x07) == reg); // register codes match.
- }
-
- void set_modrm(int mod, Register rm) { // reg == 0
- ASSERT((mod & -4) == 0);
- buf_[0] = mod << 6 | rm;
- len_ = 1;
- }
-
- void set_sib(ScaleFactor scale, Register index, Register base) {
- ASSERT(len_ == 1);
- ASSERT((scale & -4) == 0);
- buf_[1] = scale << 6 | index << 3 | base;
- len_ = 2;
- }
-
- void set_disp8(char disp) {
- ASSERT(len_ == 1 || len_ == 2);
- *reinterpret_cast<char*>(&buf_[len_++]) = disp;
- }
-
- void set_dispr(int disp) {
- ASSERT(len_ == 1 || len_ == 2);
- *reinterpret_cast<int*>(&buf_[len_]) = disp;
- len_ += sizeof(int);
- }
-
- bool is_int8(int x) { return x >= -128 && x <= 127; }
-
- // Mutable because reg in ModR/M byte is set by Assembler via set_reg().
- char buf_[6];
- // The number of bytes in buf_.
- unsigned int len_;
-};
-
-// A convenient wrapper around a buffer for emitting code or data, etc.
-class CodeBuffer {
- public:
- // Use an externally managed buffer
- explicit CodeBuffer(char* buf) : pos_(0), buf_(buf) { }
-
- void* data() { return buf_; }
- int size() { return pos_; }
-
- void emit(unsigned char b) {
- buf_[pos_++] = b;
- }
- void emit_word(unsigned short w) {
- *reinterpret_cast<unsigned short*>(&buf_[pos_]) = w;
- pos_ += 2;
- }
- void emit_dword(unsigned int d) {
- *reinterpret_cast<unsigned int*>(&buf_[pos_]) = d;
- pos_ += 4;
- }
-
- void emit_bytes(const char* bytes, size_t size) {
- for (size_t i = 0; i < size; ++i)
- emit(bytes[i]);
- }
-
- void emit_bytes(const std::string& bytes) {
- emit_bytes(bytes.data(), bytes.size());
- }
-
- void put_dword_at(int pos, unsigned int d) {
- *reinterpret_cast<unsigned int*>(&buf_[pos]) = d;
- }
-
- // We pass by value so that we get a copy that we can modify.
- void emit_operand(Register reg, Operand operand) {
- operand.set_reg(reg);
- memcpy(&buf_[pos_], operand.data(), operand.length());
- pos_ += operand.length();
- }
-
- void bind(Label* l) {
- ASSERT(!l->is_bound());
- for (int i = 0; i < l->num_links(); ++i) {
- put_dword_at(l->link_pos(i), pos_ - (l->link_pos(i) + 4));
- }
- l->bind_to(pos_);
- }
-
- // TODO deprecate blah_imm and use blah(Immediate)
-
- void add(Register dst, Register src) {
- emit(0x01); emit(0xc0 | (src << 3) | dst);
- }
- void add_imm(Register dst, int d) {
- if (d >= -128 && d <= 127) {
- emit(0x83); emit(0xc0 | dst); emit(d & 0xff);
- } else {
- emit(0x81); emit(0xc0 | dst); emit_dword(d);
- }
- }
-
- void and_(Register r, unsigned int mask) {
- emit(0x81); emit(0xe0 | r); emit_dword(mask);
- }
-
- void call(Register r) {
- call(Operand(r));
- }
- void call(const Operand& dst) {
- emit(0xff); emit_operand(EDX, dst);
- }
-
- void cmp(Register r1, Register r2) {
- emit(0x39); emit(0xc0 | (r2 << 3) | r1);
- }
-
- void cmp_imm(Register r, int d) {
- if (d >= -128 && d <= 127) {
- emit(0x83); emit(0xf8 | r); emit(d & 0xff);
- } else {
- emit(0x81); emit(0xf8 | r); emit_dword(d);
- }
- }
-
- void fs() {
- emit(0x64);
- }
-
- // Atomically increment the dword at |mem| with the increment amount in the
- // register |inc|. Will replace |inc| with the old unincremented value.
- void inc_atomic(Register mem, Register inc) {
- // lock xadd [mem], inc
- emit(0xF0); emit(0x0F); emit(0xC1); emit((inc << 3) | mem);
- }
-
- void int3() {
- emit(0xcc);
- }
-
- void jcc(Condition cc, Label* l) {
- emit(0x0f); emit(0x80 | cc);
- if (l->is_bound()) {
- emit_dword(l->binding_pos() - (pos_ + 4));
- } else {
- // Will fix up when the label is bound.
- l->link_to(pos_);
- emit_dword(0);
- }
- }
-
- void jmp(Register r) {
- emit(0xff); emit(0xe0 | r);
- }
-
- void jmp(Label* l) {
- if (l->is_bound()) {
- jmp_rel(l->binding_pos() - (pos_ + 5));
- } else {
- // Will fix up when the label is bound.
- l->link_to(pos_ + 1);
- jmp_rel(0);
- }
- }
-
- void jmp_rel(int i) {
- emit(0xe9); emit_dword(i);
- }
-
- void jmp_rel_short(char c) {
- emit(0xeb); emit(c);
- }
-
- void lea(Register dst, const Operand& src) {
- emit(0x8d); emit_operand(dst, src);
- }
-
- void lodsb() {
- emit(0xac);
- }
- void lodsd() {
- emit(0xad);
- }
-
- void loop(Label* l) {
- ASSERT(l->is_bound());
- int pos = l->binding_pos() - (pos_ + 2);
- ASSERT(pos >= -128 && pos < 0);
-
- emit(0xe2); emit(pos & 0xff);
- }
-
- void mov(Register dst, Register src) {
- emit(0x89); emit(0xc0 | (src << 3) | dst);
- }
- void mov(Register dst, const Operand& src) {
- emit(0x8b); emit_operand(dst, src);
- }
- void mov_imm(Register r, unsigned int d) {
- emit(0xb8 | r); emit_dword(d);
- }
-
- void movsb() {
- emit(0xa4);
- }
- void movsd() {
- emit(0xa5);
- }
-
- void or_(Register r, unsigned int mask) {
- emit(0x81); emit(0xc8 | r); emit_dword(mask);
- }
-
- void pop(Register r) {
- emit(0x58 | r);
- }
- void pop(const Operand& dst) {
- emit(0x8f); emit_operand(EAX, dst);
- }
-
- void push(Register r) {
- emit(0x50 | r);
- }
- void push(const Operand& src) {
- emit(0xff); emit_operand(ESI, src);
- }
- void push_imm(int i) {
- if (i >= -128 && i <= 127) {
- emit(0x6a); emit(i & 0xff);
- } else {
- emit(0x68); emit_dword(i);
- }
- }
-
- // Puts the cycle counter into edx:eax.
- void rdtsc() {
- emit(0x0F); emit(0x31);
- }
-
- void rep() {
- emit(0xf3);
- }
-
- void ret() {
- ret(0);
- }
- void ret(short c) {
- if (c == 0) {
- emit(0xc3);
- } else {
- emit(0xc2); emit_word(c);
- }
- }
-
- void spin() {
- jmp_rel_short(-2);
- }
-
- void stosb() {
- emit(0xaa);
- }
- void stosd() {
- emit(0xab);
- }
-
- void sysenter() {
- emit(0x0f); emit(0x34);
- }
-
- // Puts a unique cpu identifier into eax, using sidt to fingerprint cores.
- void which_cpu() {
- // Make space
- push(EAX);
- push(EAX);
- // sidt [esp+2]
- emit(0x0f); emit(0x01); emit_operand(ECX, Operand(ESP, 2));
- pop(EAX);
- pop(EAX); // sidt address
- }
-
- // Puts a unique identifier for the thread we're executing on into eax.
- void which_thread() {
- // mov eax, [fs:0x24]
- emit(0x64); emit(0xa1); emit_dword(0x24);
- // TODO: We could do this but it will use an encoding that is 1 byte bigger.
- // fs(); mov(EAX, Operand(0x24));
- }
-
- void xchg(Register r1, Register r2) {
- if (r1 == EAX) {
- emit(0x90 | r2);
- } else if (r2 == EAX) {
- emit(0x90 | r1);
- } else {
- xchg(r1, Operand(r2));
- }
- }
- void xchg(Register r1, const Operand& oper) {
- emit(0x87); emit_operand(r1, oper);
- }
-
- private:
- int pos_;
- char* buf_;
-};
-
-#endif // TRACELINE_ASSEMBLER_H_
diff --git a/chromium/tools/traceline/traceline/assembler_unittest.cc b/chromium/tools/traceline/traceline/assembler_unittest.cc
deleted file mode 100644
index e2c17b66012..00000000000
--- a/chromium/tools/traceline/traceline/assembler_unittest.cc
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright (c) 2009 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.
-
-#include <stdio.h>
-
-#include "assembler.h"
-
-int main(int argc, char** argv) {
- char buf[1024];
-
- CodeBuffer cb(buf);
-
- // Branching tests first so the offsets are not always adjusting in the
- // output diassembler when we add new tests.
-
- cb.spin();
-
- cb.call(EAX);
- cb.call(Operand(EAX));
- cb.call(Operand(EDX, 15));
-
- cb.fs(); cb.mov(EAX, Operand(3));
- cb.fs(); cb.mov(EDX, Operand(0x04));
-
- cb.lea(EAX, Operand(EAX));
- cb.lea(EAX, Operand(0x12345678));
- cb.lea(EAX, Operand(EBX, 0x12345678));
- cb.lea(EAX, Operand(EBX, ECX, SCALE_TIMES_2, 0x12345678));
- cb.lea(EAX, Operand(ECX, SCALE_TIMES_2, 0x12345678));
- cb.lea(EAX, Operand(EAX, SCALE_TIMES_2, 0));
- cb.lea(EAX, Operand(EBX, SCALE_TIMES_2, 0));
- cb.lea(EBP, Operand(EBP, SCALE_TIMES_2, 1));
-
- cb.lodsb();
- cb.lodsd();
-
- cb.mov(EAX, ECX);
- cb.mov(ESI, ESP);
- cb.mov(EAX, Operand(ESP, 0x20));
- cb.mov(EAX, Operand(EBP, 8));
- cb.mov_imm(ESP, 1);
- cb.mov_imm(EAX, 0x12345678);
-
- cb.pop(EBX);
- cb.pop(Operand(EBX));
- cb.pop(Operand(EBX, 0));
- cb.pop(Operand(EBX, 12));
-
- cb.push(EBX);
- cb.push(Operand(EBX));
- cb.push(Operand(EBX, 0));
- cb.push(Operand(EDI, -4));
- cb.push(Operand(EDI, -8));
- cb.push_imm(0x12);
- cb.push_imm(0x1234);
- cb.push(Operand(EBX, 12));
- cb.push(Operand(ESP, 0x1234));
-
- cb.ret();
- cb.ret(0);
- cb.ret(12);
-
- cb.stosb();
- cb.stosd();
-
- cb.sysenter();
-
- cb.which_cpu();
- cb.which_thread();
-
- cb.xchg(EAX, EAX);
- cb.xchg(EBX, EAX);
- cb.xchg(EAX, EBX);
- cb.xchg(ECX, ESP);
- cb.xchg(ECX, Operand(ESP));
- cb.xchg(ECX, Operand(ESP, 5));
- cb.xchg(ECX, Operand(EDX, 4));
-
- fwrite(buf, 1, cb.size(), stdout);
-
- return 0;
-}
diff --git a/chromium/tools/traceline/traceline/assembler_unittest.sh b/chromium/tools/traceline/traceline/assembler_unittest.sh
deleted file mode 100755
index 6be6191bf12..00000000000
--- a/chromium/tools/traceline/traceline/assembler_unittest.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-
-# Copyright (c) 2009 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.
-
-./assembler_unittest.exe | ndisasm -u - | cut -c 11-
diff --git a/chromium/tools/traceline/traceline/assembler_unittest.sh.expected b/chromium/tools/traceline/traceline/assembler_unittest.sh.expected
deleted file mode 100644
index a0d3af30a2d..00000000000
--- a/chromium/tools/traceline/traceline/assembler_unittest.sh.expected
+++ /dev/null
@@ -1,54 +0,0 @@
-EBFE jmp short 0x0
-FFD0 call eax
-FFD0 call eax
-FF520F call dword near [edx+0xf]
-648B0503000000 mov eax,[dword fs:0x3]
-648B1504000000 mov edx,[dword fs:0x4]
-8D db 0x8D
-C08D0578563412 ror byte [ebp+0x34567805],0x12
-8D8378563412 lea eax,[ebx+0x12345678]
-8D844B78563412 lea eax,[ebx+ecx*2+0x12345678]
-8D840978563412 lea eax,[ecx+ecx+0x12345678]
-8D0400 lea eax,[eax+eax]
-8D041B lea eax,[ebx+ebx]
-8D6C2D01 lea ebp,[ebp+ebp+0x1]
-AC lodsb
-AD lodsd
-89C8 mov eax,ecx
-89E6 mov esi,esp
-8B442420 mov eax,[esp+0x20]
-8B4508 mov eax,[ebp+0x8]
-BC01000000 mov esp,0x1
-B878563412 mov eax,0x12345678
-5B pop ebx
-8FC3 pop ebx
-8F03 pop dword [ebx]
-8F430C pop dword [ebx+0xc]
-53 push ebx
-FFF3 push ebx
-FF33 push dword [ebx]
-FF77FC push dword [edi-0x4]
-FF77F8 push dword [edi-0x8]
-6A12 push byte +0x12
-6834120000 push 0x1234
-FF730C push dword [ebx+0xc]
-FFB42434120000 push dword [esp+0x1234]
-C3 ret
-C3 ret
-C20C00 ret 0xc
-AA stosb
-AB stosd
-0F34 sysenter
-50 push eax
-50 push eax
-0F014C2402 sidt [esp+0x2]
-58 pop eax
-58 pop eax
-64A124000000 mov eax,[fs:0x24]
-90 nop
-93 xchg eax,ebx
-93 xchg eax,ebx
-87CC xchg ecx,esp
-87CC xchg ecx,esp
-874C2405 xchg ecx,[esp+0x5]
-874A04 xchg ecx,[edx+0x4]
diff --git a/chromium/tools/traceline/traceline/dump_syscalls_idarub.rb b/chromium/tools/traceline/traceline/dump_syscalls_idarub.rb
deleted file mode 100755
index 6e0fb8fe9d7..00000000000
--- a/chromium/tools/traceline/traceline/dump_syscalls_idarub.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env ruby
-
-# Copyright (c) 2009 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.
-
-# This is an idarub script for extracting system call numbers from a DLL that
-# has been loaded into the IDA disassembler. The interesting system call stubs
-# are contained in ntdll.dll, user32.dll, gdi32.dll, and imm32.dll.
-
-require 'idarub'
-
-ida, = IdaRub.auto_client
-
-curea = 0
-
-filename = ida.get_root_filename
-
-while true
- curea = ida.find_binary(
- curea, ida.BADADDR, 'ba 00 03 fe 7f', 16, ida.SEARCH_DOWN)
- break if curea == ida.BADADDR
-
- raise "z" if ida.get_byte(curea - 5) != 0xb8
-
- syscall = ida.get_long(curea - 4)
- # Remove the IDA _ prefix and the @argsize trailing decorator...
- funcname = ida.get_func_name(curea).split('@', 2)[0].split('_', 2)[-1]
- puts '%d: "%s!%s",' % [syscall, filename, funcname]
-
- curea += 1
-end
diff --git a/chromium/tools/traceline/traceline/logging.h b/chromium/tools/traceline/traceline/logging.h
deleted file mode 100644
index bf2e4fa0684..00000000000
--- a/chromium/tools/traceline/traceline/logging.h
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) 2009 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.
-
-#ifndef TRACELINE_LOGGING_H_
-#define TRACELINE_LOGGING_H_
-
-#include <windows.h>
-#include <stdio.h>
-
-#define CHECK(exp, ...) \
- if (!(exp)) { \
- printf("FAILED CHECK: %s\n %s:%d\n", #exp, __FILE__, __LINE__); \
- printf("\naborted.\n"); \
- if (::IsDebuggerPresent()) __debugbreak(); \
- exit(1); \
- }
-
-#define NOTREACHED(...) \
- if (1) { \
- printf("NOTREACHED:\n %s:%d\n", __FILE__, __LINE__); \
- printf(__VA_ARGS__); \
- printf("\naborted.\n"); \
- if (::IsDebuggerPresent()) __debugbreak(); \
- exit(1); \
- }
-
-#endif // TRACELINE_LOGGING_H_
diff --git a/chromium/tools/traceline/traceline/main.cc b/chromium/tools/traceline/traceline/main.cc
deleted file mode 100644
index 11d9e52437c..00000000000
--- a/chromium/tools/traceline/traceline/main.cc
+++ /dev/null
@@ -1,1339 +0,0 @@
-// Copyright (c) 2009 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.
-
-// TODO
-// - Make capturing system call arguments optional and the number configurable.
-// - Lots of places depend on the ABI so that we can modify EAX or EDX, this
-// is safe, but these could be moved to be saved and restored anyway.
-// - Understand the loader better, and make some more meaningful hooks with
-// proper data collection and durations. Right now it's just noise.
-// - Get the returned pointer from AllocateHeap.
-
-#include <windows.h>
-
-#include <stdio.h>
-
-#include <map>
-#include <string>
-
-#include "assembler.h"
-#include "logging.h"
-#include "rdtsc.h"
-#include "sym_resolver.h"
-#include "syscall_map.h"
-
-#include "sidestep/mini_disassembler.h"
-
-namespace {
-
-std::string JSONString(const std::string& str) {
- static const char hextable[] = "0123456789abcdef";
- std::string out;
- out.push_back('"');
- for (std::string::const_iterator it = str.begin(); it != str.end(); ++it) {
- unsigned char c = static_cast<unsigned char>(*it);
- switch (c) {
- case '\\':
- case '"':
- case '\'':
- out.push_back('\\'); out.push_back(c);
- break;
- default:
- if (c < 20 || c >= 127) {
- out.push_back('\\'); out.push_back('x');
- out.push_back(hextable[c >> 4]); out.push_back(hextable[c & 0xf]);
- } else {
- // Unescaped.
- out.push_back(c);
- }
- break;
- }
- }
- out.push_back('"');
- return out;
-}
-
-} // namespace
-
-class Playground {
- public:
- static const int kPlaygroundSize = 64 * 1024 * 1024;
-
- // Encapsulate the configuration options to the playground.
- class Options {
- public:
- Options()
- : stack_unwind_depth_(0),
- log_heap_(false),
- log_lock_(false),
- vista_(false) { }
-
-
- // The maximum amount of frames we should unwind from the call stack.
- int stack_unwind_depth() { return stack_unwind_depth_; }
- void set_stack_unwind_depth(int depth) { stack_unwind_depth_ = depth; }
-
- // Whether we should log heap operations (alloc / free).
- bool log_heap() { return log_heap_; }
- void set_log_heap(bool x) { log_heap_ = x; }
-
- // Whether we should log lock (critical section) operations.
- bool log_lock() { return log_lock_; }
- void set_log_lock(bool x) { log_lock_ = x; }
-
- // Whether we are running on Vista.
- bool vista() { return vista_; }
- void set_vista(bool x) { vista_ = x; }
-
- private:
- int stack_unwind_depth_;
- bool log_heap_;
- bool log_lock_;
- bool vista_;
- };
-
- Playground(HANDLE proc, const Options& options)
- : proc_(proc),
- remote_addr_(NULL),
- resolver_("ntdll.dll"),
- options_(options) {
- // We copy the entire playground into the remote process, and we have
- // fields that we expect to be zero. TODO this could be a lot better.
- memset(buf_, 0, sizeof(buf_));
- }
-
- void AllocateInRemote() {
- // Try to get something out of the way and easy to debug.
- static void* kPlaygroundAddr = reinterpret_cast<void*>(0x66660000);
- // Allocate our playground memory in the target process. This is a big
- // slab of read/write/execute memory that we use for our code
- // instrumentation, and the memory for writing out our logging events.
- remote_addr_ = reinterpret_cast<char*>(
- VirtualAllocEx(proc_,
- kPlaygroundAddr,
- kPlaygroundSize,
- MEM_COMMIT | MEM_RESERVE,
- PAGE_EXECUTE_READWRITE));
- if (remote_addr_ == NULL || remote_addr_ != kPlaygroundAddr) {
- NOTREACHED("Falied to allocate playground: 0x%08x", remote_addr_);
- }
- }
-
- void CopyToRemote() {
- WriteProcessMemory(proc_,
- remote_addr_,
- buf_,
- sizeof(buf_),
- NULL);
- }
-
- void CopyFromRemote() {
- SIZE_T size = 0;
- ReadProcessMemory(proc_,
- remote_addr_,
- buf_,
- sizeof(buf_),
- &size);
- }
-
- enum EventRecordType {
- EVENT_TYPE_LDR = 0,
- EVENT_TYPE_THREADBEGIN = 1,
- EVENT_TYPE_THREADNAME = 2,
- EVENT_TYPE_EXCEPTION = 3,
- EVENT_TYPE_PROCESSEXIT = 4,
- EVENT_TYPE_CREATETHREAD = 5,
- EVENT_TYPE_THREADEXIT = 6,
- EVENT_TYPE_ALLOCHEAP = 7,
- EVENT_TYPE_FREEHEAP = 8,
- EVENT_TYPE_SYSCALL = 9,
- EVENT_TYPE_ENTER_CS = 10,
- EVENT_TYPE_TRYENTER_CS = 11,
- EVENT_TYPE_LEAVE_CS = 12,
- EVENT_TYPE_APC = 13
- };
-
- static const int kThreadNameBufSize = 64;
- static const int kLdrBufSize = 512; // Looks like internal buffer is 512.
-
- static const int kCodeBlockSize = 256;
-
- static const int kOffLdrCode = 0 * kCodeBlockSize;
- static const int kOffCreateThreadCode = 1 * kCodeBlockSize;
- static const int kOffThreadCode = 2 * kCodeBlockSize;
- static const int kOffExpCode = 3 * kCodeBlockSize;
- static const int kOffExitCode = 4 * kCodeBlockSize;
- static const int kOffThreadExitCode = 5 * kCodeBlockSize;
- static const int kOffAllocHeapCode = 6 * kCodeBlockSize;
- static const int kOffFreeHeapCode = 7 * kCodeBlockSize;
- static const int kOffSyscallCode = 8 * kCodeBlockSize;
- static const int kOffEnterCritSecCode = 9 * kCodeBlockSize;
- static const int kOffTryEnterCritSecCode = 10 * kCodeBlockSize;
- static const int kOffLeaveCritSecCode = 11 * kCodeBlockSize;
- static const int kOffApcDispCode = 12 * kCodeBlockSize;
-
- static const int kOffLogAreaPtr = 4096;
- static const int kOffLogAreaData = 4096 + 4;
-
- static const int kRecordHeaderSize = 8 + 4 + 4 + 4;
-
- // Given the address to the start of a function, patch the function to jump
- // to a given offset into the playground. This function will try to take
- // advantage of hotpatch code, if the function is prefixed with 5 0x90 bytes.
- // Returns a std::string of any assembly instructions that must be relocated,
- // as they were overwritten during patching.
- std::string PatchPreamble(int func_addr, int playground_off) {
- sidestep::MiniDisassembler disas;
- int stub_addr = reinterpret_cast<int>(remote_addr_ + playground_off);
-
- std::string instrs;
-
- char buf[15];
- if (ReadProcessMemory(proc_,
- reinterpret_cast<void*>(func_addr - 5),
- buf,
- sizeof(buf),
- NULL) == 0) {
- NOTREACHED("ReadProcessMemory(0x%08x) failed: %d",
- func_addr - 5, GetLastError());
- }
-
- // TODO(deanm): It seems in more recent updates the compiler is generating
- // complicated sequences for padding / alignment. For example:
- // 00000000 8DA42400000000 lea esp,[esp+0x0]
- // 00000007 8D4900 lea ecx,[ecx+0x0]
- // is used for a 16 byte alignment. We need a better way of handling this.
- if (memcmp(buf, "\x90\x90\x90\x90\x90", 5) == 0 ||
- memcmp(buf, "\x00\x8D\x64\x24\x00", 5) == 0 ||
- memcmp(buf, "\x00\x00\x8D\x49\x00", 5) == 0) {
- unsigned int instr_bytes = 0;
-
- // We might have a hotpatch no-op of mov edi, edi "\x8b\xff". It is a
- // bit of a waste to relocate it, but it makes everything simpler.
-
- while (instr_bytes < 2) {
- if (disas.Disassemble(
- reinterpret_cast<unsigned char*>(buf + 5 + instr_bytes),
- &instr_bytes) != sidestep::IT_GENERIC) {
- NOTREACHED("Could not disassemble or relocate instruction.");
- }
- // We only read 10 bytes worth of instructions.
- CHECK(instr_bytes < 10);
- }
-
- instrs.assign(buf + 5, instr_bytes);
-
- // We have a hotpatch prefix of 5 nop bytes. We can use this for our
- // long jump, and then overwrite the first 2 bytes to jump back to there.
- CodeBuffer patch(buf);
- int off = stub_addr - func_addr;
- patch.jmp_rel(off);
- patch.jmp_rel_short(-2 - 5);
- } else {
- // We need a full 5 bytes for the jump.
- unsigned int instr_bytes = 0;
- while (instr_bytes < 5) {
- if (disas.Disassemble(
- reinterpret_cast<unsigned char*>(buf + 5 + instr_bytes),
- &instr_bytes) != sidestep::IT_GENERIC) {
- NOTREACHED("Could not disassemble or relocate instruction.");
- }
- // We only read 10 bytes worth of instructions.
- CHECK(instr_bytes < 10);
- }
-
- instrs.assign(buf + 5, instr_bytes);
-
- // Overwrite the first 5 bytes with a relative jump to our stub.
- CodeBuffer patch(buf + 5);
- int off = stub_addr - (func_addr + 5);
- patch.jmp_rel(off);
- }
-
- // Write back the bytes, we are really probably writing more back than we
- // need to, but it shouldn't really matter.
- if (WriteProcessMemory(proc_,
- reinterpret_cast<void*>(func_addr - 5),
- buf,
- sizeof(buf),
- NULL) == 0) {
- NOTREACHED("WriteProcessMemory(0x%08x) failed: %d",
- func_addr - 5, GetLastError());
- }
-
- return instrs;
- }
-
- std::string PatchPreamble(const char* func_name, int playground_off) {
- return PatchPreamble(
- reinterpret_cast<int>(resolver_.Resolve(func_name)), playground_off);
- }
-
- // Restore any instructions that needed to be moved to make space for our
- // patch and jump back to the original code.
- void ResumeOriginalFunction(const char* func_name,
- const std::string& moved_instructions,
- int stub_offset,
- CodeBuffer* cb) {
- cb->emit_bytes(moved_instructions);
- int off = resolver_.Resolve(func_name) +
- moved_instructions.size() -
- (remote_addr_ + stub_offset + cb->size() + 5);
- cb->jmp_rel(off);
- }
-
- // Makes a call to NtQueryPerformanceCounter, writing the timestamp to the
- // buffer pointed to by EDI. EDI it not incremented. EAX is not preserved.
- void AssembleQueryPerformanceCounter(CodeBuffer* cb) {
- // Make a call to NtQueryPerformanceCounter and write the result into
- // the log area. The buffer we write to should be aligned, but we should
- // garantee that anyway for the logging area for performance.
- cb->push_imm(0); // PerformanceFrequency
- cb->push(EDI); // PerformanceCounter
- cb->mov_imm(EAX, reinterpret_cast<int>(
- resolver_.Resolve("ntdll!NtQueryPerformanceCounter")));
- cb->call(EAX);
- }
-
- // This is the common log setup routine. It will allocate a new log entry,
- // and write out the common log header to the event entry. The header is:
- // is [ 64bit QPC ] [ 32bit cpu id ] [ 32bit thread id ] [ 32bit rec id ]
- // EDI will be left pointing to the log entry, with |space| bytes left for
- // type specific data. All other registers should not be clobbered.
- void AssembleHeaderCode(CodeBuffer* cb, EventRecordType rt, int space) {
- cb->push(EAX);
- cb->push(EDX);
- cb->push(ECX);
- cb->push(ESI);
-
- int unwind_depth = options_.stack_unwind_depth();
-
- // Load EDI with the number of bytes we want for our log entry, this will
- // be used in the atomic increment to allocate the log entry.
- cb->mov_imm(EDI, kRecordHeaderSize + (unwind_depth * 4) + space);
- // Do the increment and have EDI point to our log entry buffer space.
- cb->mov_imm(EDX, reinterpret_cast<int>(remote_addr_ + kOffLogAreaPtr));
- cb->inc_atomic(EDX, EDI);
- // EDI is the buffer offset, make it a pointer to the record entry.
- cb->add_imm(EDI, reinterpret_cast<int>(remote_addr_ + kOffLogAreaData));
-
- AssembleQueryPerformanceCounter(cb);
- cb->add_imm(EDI, 8);
-
- cb->which_cpu();
- cb->stosd();
-
- cb->which_thread();
- cb->stosd();
-
- // Stack unwinding, follow EBP to the maximum number of frames, and make
- // sure that it stays on the stack (between ESP and TEB.StackBase).
- if (unwind_depth > 0) {
- cb->mov_imm(ECX, unwind_depth);
- cb->fs(); cb->mov(EDX, Operand(0x04)); // get TEB.StackBase
-
- // Start at EBP.
- cb->mov(EAX, EBP);
-
- Label unwind_loop, bail;
- cb->bind(&unwind_loop);
-
- // Bail if (EAX < ESP) (below the stack)
- cb->cmp(EAX, ESP);
- cb->jcc(below, &bail);
- // Bail if (EAX >= EDX) (above the stack)
- cb->cmp(EAX, EDX);
- cb->jcc(above_equal, &bail);
-
- // We have a valid stack pointer, it should point to something like:
- // [ saved frame pointer ] [ return address ] [ arguments ... ]
- cb->mov(ESI, EAX);
- cb->lodsd(); // Get the new stack pointer to follow in EAX
- cb->movsd(); // Copy the return address to the log area.
-
- cb->loop(&unwind_loop);
-
- cb->bind(&bail);
- // If we did managed to unwind to the max, fill the rest with 0 (really
- // we just want to inc EDI to the end, and this is an easy way).
- cb->mov_imm(EAX, 0); // TODO use an xor
- cb->rep(); cb->stosd();
- }
-
- // Store the type for this record entry.
- cb->mov_imm(EAX, rt);
- cb->stosd();
-
- cb->pop(ESI);
- cb->pop(ECX);
- cb->pop(EDX);
- cb->pop(EAX);
- }
-
- void PatchLoader() {
- static const EventRecordType kRecordType = EVENT_TYPE_LDR;
- static const char* kFuncName = "ntdll!DebugPrint";
- static const int kStubOffset = kOffLdrCode;
-
- std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset);
-
- // Set ShowSnaps to one to get the print routines to be called.
- char enabled = 1;
- WriteProcessMemory(
- proc_, resolver_.Resolve("ntdll!ShowSnaps"), &enabled, 1, NULL);
-
- CodeBuffer cb(buf_ + kStubOffset);
-
- cb.pop(EDX); // return address
- cb.pop(EAX); // First param in eax
- cb.push(ESI);
- cb.push(EDI);
- cb.push(EDX);
-
- cb.mov(ESI, EAX); // ESI points at the string structure.
-
- // We used to do variable length based on the length supplied in the str
- // structure, but it's easier (and sloppier) to just copy a fixed amount.
- AssembleHeaderCode(&cb, kRecordType, kLdrBufSize);
-
- cb.lodsd(); // Load the character count
- cb.lodsd(); // Load the char*
- cb.mov(ESI, EAX);
- cb.mov_imm(ECX, kLdrBufSize / 4); // load the char count as the rep count
- cb.rep(); cb.movsb(); // Copy the string to the logging buffer
-
- // Return
- cb.pop(EDX);
- cb.pop(EDI);
- cb.pop(ESI);
- cb.pop(ECX); // don't care
- cb.pop(ECX); // don't care
- cb.jmp(EDX);
- }
-
- void PatchCreateThread() {
- static const EventRecordType kRecordType = EVENT_TYPE_CREATETHREAD;
- static const char* kFuncName =
- options_.vista() ? "ntdll!NtCreateThreadEx" : "ntdll!NtCreateThread";
- static const int kStubOffset = kOffCreateThreadCode;
-
- std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset);
-
- CodeBuffer cb(buf_ + kStubOffset);
-
- cb.push(EDI);
- cb.push(ESI);
-
- AssembleHeaderCode(&cb, kRecordType, 8);
-
- cb.mov(EAX, Operand(ESP, 0x18 + 8));
-
- // Super ugly hack. To coorrelate between creating a thread and the new
- // thread running, we stash something to identify the creating event when
- // we log the created event. We just use a pointer to the event log data
- // since this will be unique and can tie the two events together. We pass
- // it by writing into the context structure, so it will be passed in ESI.
- cb.add_imm(EAX, 0xa0);
- cb.push(EDI);
- cb.mov(EDI, EAX);
- cb.pop(EAX);
- cb.push(EAX);
- cb.stosd();
-
- // Get and save CONTEXT.Eip
- cb.mov(ESI, EDI);
- cb.add_imm(ESI, 20);
- cb.pop(EDI);
- cb.mov(EAX, EDI);
- cb.stosd(); // Record the event identifier to tie together the events.
- cb.movsd(); // write Eip to the log event
-
- cb.pop(ESI);
- cb.pop(EDI);
-
- ResumeOriginalFunction(kFuncName, moved_instructions, kStubOffset, &cb);
- }
-
- void PatchThreadBegin() {
- static const EventRecordType kRecordType = EVENT_TYPE_THREADBEGIN;
- static const char* kFuncName = "ntdll!CsrNewThread";
- static const int kStubOffset = kOffThreadCode;
-
- std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset);
-
- CodeBuffer cb(buf_ + kStubOffset);
-
- cb.push(EDI);
-
- AssembleHeaderCode(&cb, kRecordType, 8);
-
- cb.mov(EAX, ESI); // We stashed the creator's eventid in the context ESI.
- cb.stosd();
-
- // TODO(deanm): The pointer is going to point into the CRT or something,
- // should we dig deeper to get more information about the real entry?
- cb.mov(EAX, Operand(EBP, 0x8));
- cb.stosd();
- cb.pop(EDI);
-
- ResumeOriginalFunction(kFuncName, moved_instructions, kStubOffset, &cb);
- }
-
- void PatchThreadBeginVista() {
- static const EventRecordType kRecordType = EVENT_TYPE_THREADBEGIN;
- static const char* kFuncName = "ntdll!_RtlUserThreadStart";
- static const int kStubOffset = kOffThreadCode;
-
- std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset);
-
- CodeBuffer cb(buf_ + kStubOffset);
-
- cb.push(EDI);
-
- AssembleHeaderCode(&cb, kRecordType, 8);
-
- cb.mov(EAX, ESI); // We stashed the creator's eventid in the context ESI.
- cb.stosd();
-
- // TODO(deanm): The pointer is going to point into the CRT or something,
- // should we dig deeper to get more information about the real entry?
- //cb.mov(EAX, Operand(EBP, 0x8));
- cb.mov_imm(EAX, 0);
- cb.stosd();
- cb.pop(EDI);
-
- ResumeOriginalFunction(kFuncName, moved_instructions, kStubOffset, &cb);
- }
-
- // Intercept exception dispatching so we can catch when threads set a thread
- // name (which is an exception with a special code). TODO it could be
- // useful to log all exceptions.
- void PatchSetThreadName() {
- static const EventRecordType kRecordType = EVENT_TYPE_THREADNAME;
- static const char* kFuncName = "ntdll!RtlDispatchException";
- static const int kStubOffset = kOffExpCode;
-
- std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset);
-
- CodeBuffer cb(buf_ + kStubOffset);
-
- cb.pop(EDX); // return address
- cb.pop(EAX); // ExceptionRecord
- cb.push(EAX);
- cb.push(EDX);
-
- cb.push(ESI);
-
- cb.mov(ESI, EAX);
- cb.lodsd();
-
- Label bail;
- // exception code
- cb.cmp_imm(EAX, 0x406D1388);
- cb.jcc(not_equal, &bail);
-
- cb.push(EDI);
-
- AssembleHeaderCode(&cb, kRecordType, kThreadNameBufSize);
-
- // Fetch the second parameter.
- for (int i = 0; i < 6; ++i) {
- cb.lodsd();
- }
-
- // TODO This is sloppy and we could run into unmapped memory...
- cb.mov(ESI, EAX);
- cb.mov_imm(ECX, kThreadNameBufSize / 4);
- cb.rep(); cb.movsd();
-
- cb.pop(EDI);
-
- cb.bind(&bail);
- cb.pop(ESI);
-
- ResumeOriginalFunction(kFuncName, moved_instructions, kStubOffset, &cb);
- }
-
-
- void PatchThreadExit() {
- static const EventRecordType kRecordType = EVENT_TYPE_THREADEXIT;
- static const char* kFuncName = "ntdll!LdrShutdownThread";
- static const int kStubOffset = kOffThreadExitCode;
-
- std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset);
- CodeBuffer cb(buf_ + kStubOffset);
-
- cb.push(EDI);
- AssembleHeaderCode(&cb, kRecordType, 0);
- cb.pop(EDI);
-
- ResumeOriginalFunction(kFuncName, moved_instructions, kStubOffset, &cb);
- }
-
- void PatchAllocateHeap() {
- static const EventRecordType kRecordType = EVENT_TYPE_ALLOCHEAP;
- static const char* kFuncName = "ntdll!RtlAllocateHeap";
- static const int kStubOffset = kOffAllocHeapCode;
-
- std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset);
- CodeBuffer cb(buf_ + kStubOffset);
-
- cb.push(EDI);
- cb.push(ESI);
-
- AssembleHeaderCode(&cb, kRecordType, 12);
-
- cb.mov(ESI, ESP);
- cb.add_imm(ESI, 12); // Skip over our saved and the return address
- cb.movsd(); cb.movsd(); cb.movsd(); // Copy the 3 parameters
-
- cb.pop(ESI);
- cb.pop(EDI);
-
- ResumeOriginalFunction(kFuncName, moved_instructions, kStubOffset, &cb);
- }
-
- void PatchFreeHeap() {
- static const EventRecordType kRecordType = EVENT_TYPE_FREEHEAP;
- static const char* kFuncName = "ntdll!RtlFreeHeap";
- static const int kStubOffset = kOffFreeHeapCode;
-
- std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset);
- CodeBuffer cb(buf_ + kStubOffset);
-
- cb.push(EDI);
- cb.push(ESI);
-
- AssembleHeaderCode(&cb, kRecordType, 12);
-
- cb.mov(ESI, ESP);
- cb.add_imm(ESI, 12); // Skip over our saved and the return address
- cb.movsd(); cb.movsd(); cb.movsd(); // Copy the 3 parameters
-
- cb.pop(ESI);
- cb.pop(EDI);
-
- ResumeOriginalFunction(kFuncName, moved_instructions, kStubOffset, &cb);
- }
-
- // Don't even bother going back to the original code, just implement our
- // own KiFastSystemCall. The original looks like:
- // .text:7C90EB8B mov edx, esp
- // .text:7C90EB8D sysenter
- // .text:7C90EB8F nop
- // .text:7C90EB90 nop
- // .text:7C90EB91 nop
- // .text:7C90EB92 nop
- // .text:7C90EB93 nop
- void PatchSyscall() {
- static const EventRecordType kRecordType = EVENT_TYPE_SYSCALL;
- static const char* kFuncName = "ntdll!KiFastSystemCall";
- static const int kStubOffset = kOffSyscallCode;
-
- std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset);
-
- {
- CodeBuffer cb(buf_ + kStubOffset);
-
- Label skip;
-
- // Skip 0xa5 which is QueryPerformanceCounter, to make sure we don't log
- // our own logging's QPC. Disabled for now, using ret addr check...
- // cb.cmp_imm(EAX, 0xa5);
- // cb.jcc(equal, &skip);
-
- // Check if the return address is from 0x6666 (our code region).
- // 66817C24066666 cmp word [esp+0x6],0x6666
- cb.emit(0x66); cb.emit(0x81); cb.emit(0x7C);
- cb.emit(0x24); cb.emit(0x06); cb.emit(0x66); cb.emit(0x66);
- cb.jcc(equal, &skip);
-
- // This is all a bit shit. Originally I thought I could store some state
- // on the stack above ESP, however, it seems that when APCs, etc are
- // queued, they will use the stack above ESP. Well, not above ESP, above
- // what was passed in as EDX into the systemcall, not matter if ESP was
- // different than this :(. So we need to store our state in the event
- // log record, and then we stick a pointer to that over a ret addr...
-
- // Our stack starts like:
- // [ ret addr ] [ ret addr 2 ] [ arguments ]
- // We will update it to look like
- // [ ret stub addr ] [ event entry ptr ] [ arguments ]
-
- cb.push(EDI); // save EDI since we're using it
- AssembleHeaderCode(&cb, kRecordType, 16 + 16 + 8);
- cb.mov(EDX, EAX); // Save EAX...
- cb.stosd(); // eax is the syscall number
- cb.pop(EAX);
- cb.stosd(); // store the saved EDI
- cb.pop(EAX);
- cb.stosd(); // store the real return address
- cb.pop(EAX);
- cb.stosd(); // store the real (secondary) return address;
-
- cb.push(ESI);
- cb.mov(ESI, ESP);
- cb.lodsd();
- cb.movsd(); // argument 1
- cb.movsd(); // argument 2
- cb.movsd(); // argument 3
- cb.pop(ESI);
-
- cb.push(EDI); // store our event ptr over the secondary ret addr.
- cb.push_imm(reinterpret_cast<int>(remote_addr_ + kOffSyscallCode + 200));
- cb.mov(EAX, EDX); // restore EAX
-
- cb.bind(&skip);
- cb.mov(EDX, ESP);
- cb.sysenter();
-
- if (cb.size() > 200) {
- NOTREACHED("code too big: %d", cb.size());
- }
- }
-
- {
- CodeBuffer cb(buf_ + kStubOffset + 200);
-
- // TODO share the QPC code, this is a copy and paste...
-
- cb.pop(EDI); // get the log area
-
- cb.stosd(); // Log the system call return value.
-
- // QPC will clobber EAX, and it's very important to save it since it
- // is the return value from the system call. TODO validate if there is
- // anything else we need to save...
- cb.push(EAX);
- AssembleQueryPerformanceCounter(&cb);
- cb.pop(EAX);
-
- // We need to:
- // - Restore the original "seconary" return address
- // - Restore the original value of the EDI register
- // - Jump control flow to the original return address
- // All 3 of these values are stored in the log record...
- // [ syscall num ] [ saved edi ] [ real rets ] [ args ] [ retval ] [ ts ]
- // currently edi points here ----^
-
- cb.push(Operand(EDI, -4 - 16)); // push the real 2nd ret
- cb.push(Operand(EDI, -8 - 16)); // push the real ret
- cb.push(Operand(EDI, -12 - 16)); // push the saved EDI
-
- cb.pop(EDI); // restore EDI that was saved in the record
- cb.ret(); // jmp back to the real ret ...
-
- if (cb.size() > 56) {
- NOTREACHED("ug");
- }
- }
- }
-
- // Patch lock (criticial section) holding.
- void PatchEnterCriticalSection() {
- static const EventRecordType kRecordType = EVENT_TYPE_ENTER_CS;
- static const char* kFuncName = "ntdll!RtlEnterCriticalSection";
- static const int kStubOffset = kOffEnterCritSecCode;
-
- std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset);
-
- // We just want to capture the return address and original argument, so
- // we know when EnterCriticalSection returned, we don't want to know when
- // it entered because it could sit waiting. We want to know when the lock
- // actually started being held. The compiler will sometimes generated code
- // that overwrites arguments, so we'll keep a copy of the argument just in
- // case code like this is ever generated in the future. TODO is it enough
- // to just assume a LPCRITICAL_SECTION uniquely identifies the lock, or
- // can the same lock have multiple different copies, I would assume not.
- {
- CodeBuffer cb(buf_ + kStubOffset);
-
- // Set up an additional frame so that we capture the return.
- // TODO use memory instructions instead of using registers.
- cb.pop(EAX); // return address
- cb.pop(EDX); // first argument (critical section pointer)
-
- cb.push(EDX);
- cb.push(EAX);
- cb.push(EDX);
- cb.push_imm(
- reinterpret_cast<int>(remote_addr_ + kStubOffset + 40));
-
- ResumeOriginalFunction(kFuncName, moved_instructions, kStubOffset, &cb);
- CHECK(cb.size() < 40);
- }
-
- {
- CodeBuffer cb(buf_ + kStubOffset + 40);
-
- cb.push(ESI);
- cb.mov(ESI, ESP);
- cb.push(EAX);
- cb.push(EDI);
-
- AssembleHeaderCode(&cb, kRecordType, 4);
-
- cb.lodsd(); // Skip over our saved ESI
- cb.lodsd(); // Skip over the return address
- cb.movsd(); // Write the CRITICAL_SECTION* to the event record.
-
- cb.pop(EDI);
- cb.pop(EAX);
- cb.pop(ESI);
-
- cb.ret(0x04);
- }
- }
-
- void PatchTryEnterCriticalSection() {
- static const EventRecordType kRecordType = EVENT_TYPE_TRYENTER_CS;
- static const char* kFuncName = "ntdll!RtlTryEnterCriticalSection";
- static const int kStubOffset = kOffTryEnterCritSecCode;
-
- std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset);
-
- {
- CodeBuffer cb(buf_ + kStubOffset);
-
- // Set up an additional frame so that we capture the return.
- // TODO use memory instructions instead of using registers.
- cb.pop(EAX); // return address
- cb.pop(EDX); // first argument (critical section pointer)
-
- cb.push(EDX);
- cb.push(EAX);
- cb.push(EDX);
- cb.push_imm(reinterpret_cast<int>(remote_addr_ + kStubOffset + 40));
-
- ResumeOriginalFunction(kFuncName, moved_instructions, kStubOffset, &cb);
- CHECK(cb.size() < 40);
- }
-
- {
- CodeBuffer cb(buf_ + kStubOffset + 40);
-
- cb.push(ESI);
- cb.mov(ESI, ESP);
- cb.push(EDI);
-
- cb.push(EAX);
-
- AssembleHeaderCode(&cb, kRecordType, 8);
-
- cb.lodsd(); // Skip over our saved ESI
- cb.lodsd(); // Skip over the return address
- cb.movsd(); // Write the CRITICAL_SECTION* to the event record.
-
- cb.pop(EAX);
- cb.stosd(); // Write the return value to the event record.
-
- cb.pop(EDI);
- cb.pop(ESI);
-
- cb.ret(0x04);
- }
- }
-
- void PatchLeaveCriticalSection() {
- static const EventRecordType kRecordType = EVENT_TYPE_LEAVE_CS;
- static const char* kFuncName = "ntdll!RtlLeaveCriticalSection";
- static const int kStubOffset = kOffLeaveCritSecCode;
-
- std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset);
- CodeBuffer cb(buf_ + kStubOffset);
-
- // TODO use memory instructions instead of using registers.
- cb.pop(EDX); // return address
- cb.pop(EAX); // first argument (critical section pointer)
- cb.push(EAX);
- cb.push(EDX);
-
- cb.push(EDI);
- AssembleHeaderCode(&cb, kRecordType, 4);
- cb.stosd(); // Write the CRITICAL_SECTION* to the event record.
- cb.pop(EDI);
-
- ResumeOriginalFunction(kFuncName, moved_instructions, kStubOffset, &cb);
- }
-
- // Patch APC dispatching. This is a bit hacky, since the return to kernel
- // mode is done with NtContinue, we have to shim in a stub return address to
- // catch when the callback is finished. It is probably a bit fragile.
- void PatchApcDispatcher() {
- static const EventRecordType kRecordType = EVENT_TYPE_APC;
- static const char* kFuncName = "ntdll!KiUserApcDispatcher";
- static const int kStubOffset = kOffApcDispCode;
-
- std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset);
-
- {
- CodeBuffer cb(buf_ + kStubOffset);
-
- // We don't really need to preserve these since we're the first thing
- // executing from the kernel dispatch, but yeah, it is good practice.
- cb.push(EDI);
- cb.push(EAX);
-
- AssembleHeaderCode(&cb, kRecordType, 4 + 4 + 8);
-
- cb.mov_imm(EAX, reinterpret_cast<int>(remote_addr_ + kStubOffset + 140));
- cb.xchg(EAX, Operand(ESP, 8)); // Swap the callback address with ours.
- cb.stosd(); // Store the original callback function address.
-
- // TODO for now we're lazy and depend that ESI will be preserved, and we
- // use it to store the pointer into our log record. EDI isn't preserved.
- cb.mov(ESI, EDI);
-
- cb.pop(EAX);
- cb.pop(EDI);
-
- ResumeOriginalFunction(kFuncName, moved_instructions, kStubOffset, &cb);
-
- CHECK(cb.size() < 140);
- }
- {
- CodeBuffer cb(buf_ + kStubOffset + 140);
-
- // This is our shim, we need to call the original callback function, then
- // we can catch the return and log when it was completed.
- cb.pop(EAX); // The real return address, safe to use EAX w/ the ABI?
- cb.push(EDI);
-
- cb.mov(EDI, ESI);
- cb.stosd(); // Store the real return address, we'll need it.
-
- cb.add_imm(ESI, -4);
- cb.lodsd(); // Load the real callback address.
-
- cb.mov(ESI, EDI);
- cb.pop(EDI);
-
- cb.call(EAX); // Call the original callback address.
-
- cb.push(EAX);
- cb.push(EDI);
-
- cb.mov(EDI, ESI);
- AssembleQueryPerformanceCounter(&cb);
-
- cb.pop(EDI);
- cb.pop(EAX);
-
- cb.push(Operand(ESI, -4)); // Push the real return address.
- cb.ret(); // Return back to the APC Dispatcher.
-
- CHECK(cb.size() < 50);
- }
- }
-
- // We need to hook into process shutdown for two reasons. Most importantly,
- // we need to copy the playground back from the process before the address
- // space goes away. We could avoid this with shared memory, however, there
- // is a reason two. In order to capture symbols for all of the libraries
- // loaded into arbitrary applications, on shutdown we do an instrusive load
- // of symbols into the traced process.
- //
- // ntdll!LdrShutdownProcess
- // - NtSetEvent(event, 0);
- // - NtWaitForSingleObject(event, FALSE, NULL);
- // - jmp back
- void PatchExit(HANDLE exiting, HANDLE exited) {
- static const EventRecordType kRecordType = EVENT_TYPE_PROCESSEXIT;
- static const char* kFuncName = "ntdll!LdrShutdownProcess";
- static const int kStubOffset = kOffExitCode;
-
- HANDLE rexiting, rexited;
- if (!DuplicateHandle(::GetCurrentProcess(),
- exiting,
- proc_,
- &rexiting,
- 0,
- FALSE,
- DUPLICATE_SAME_ACCESS)) {
- NOTREACHED("");
- }
- if (!DuplicateHandle(::GetCurrentProcess(),
- exited,
- proc_,
- &rexited,
- 0,
- FALSE,
- DUPLICATE_SAME_ACCESS)) {
- NOTREACHED("");
- }
-
- std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset);
- CodeBuffer cb(buf_ + kStubOffset);
-
- cb.push(EDI);
- AssembleHeaderCode(&cb, kRecordType, 0);
- cb.pop(EDI);
-
- // NtSetEvent(exiting, 0);
- cb.push_imm(0);
- cb.push_imm(reinterpret_cast<int>(rexiting));
- cb.mov_imm(EAX, reinterpret_cast<int>(
- resolver_.Resolve("ntdll!NtSetEvent")));
- cb.call(EAX);
-
- // NtWaitForSingleObject(exited, FALSE, INFINITE);
- cb.push_imm(0);
- cb.push_imm(0);
- cb.push_imm(reinterpret_cast<int>(rexited));
- cb.mov_imm(EAX, reinterpret_cast<int>(
- resolver_.Resolve("ntdll!NtWaitForSingleObject")));
- cb.call(EAX);
-
- ResumeOriginalFunction(kFuncName, moved_instructions, kStubOffset, &cb);
- }
-
-
- void Patch() {
- if (options_.vista()) {
- // TODO(deanm): Make PatchCreateThread work on Vista.
- PatchThreadBeginVista();
- } else {
- PatchCreateThread();
- PatchThreadBegin();
- }
-
- PatchThreadExit();
- PatchSetThreadName();
- PatchSyscall();
-
- PatchApcDispatcher();
-
- // The loader logging needs to be improved a bit to really be useful.
- //PatchLoader();
-
- // These are interesting, but will collect a ton of data:
- if (options_.log_heap()) {
- PatchAllocateHeap();
- PatchFreeHeap();
- }
- if (options_.log_lock()) {
- PatchEnterCriticalSection();
- PatchTryEnterCriticalSection();
- PatchLeaveCriticalSection();
- }
- }
-
- // Dump the event records from the playground to stdout in a JSON format.
- // TODO: Drop RDTSCNormalizer, it was from old code that tried to use the
- // rdtsc counters from the CPU, and this required a bunch of normalization
- // to account for non-syncronized timestamps across different cores, etc.
- void DumpJSON(RDTSCNormalizer* rdn, SymResolver* res) {
- int pos = kOffLogAreaPtr;
- int i = IntAt(pos);
- pos += 4;
-
- std::map<int, const char*> syscalls = CreateSyscallMap();
-
- printf("parseEvents([\n");
- for (int end = pos + i; pos < end; ) {
- printf("{\n");
- __int64 ts = Int64At(pos);
- pos += 8;
- void* cpuid = reinterpret_cast<void*>(IntAt(pos));
- pos += 4;
- printf("'ms': %f,\n", rdn->MsFromStart(cpuid, ts));
-
- printf("'cpu': 0x%x,\n'thread': 0x%x,\n", cpuid, IntAt(pos));
- pos += 4;
-
- if (options_.stack_unwind_depth() > 0) {
- printf("'stacktrace': [\n");
- for (int i = 0; i < options_.stack_unwind_depth(); ++i) {
- int retaddr = IntAt(pos + (i * 4));
- if (!retaddr)
- break;
- printf(" [ 0x%x, %s ],\n",
- retaddr,
- res ? JSONString(res->Unresolve(retaddr)).c_str() : "\"\"");
- }
- printf("],\n");
- pos += (options_.stack_unwind_depth() * 4);
- }
-
-
- EventRecordType rt = static_cast<EventRecordType>(IntAt(pos));
- pos += 4;
-
- switch (rt) {
- case EVENT_TYPE_LDR:
- {
- printf("'eventtype': 'EVENT_TYPE_LDR',\n");
- std::string str(&buf_[pos], kLdrBufSize);
- str = str.substr(0, str.find('\0'));
- printf("'ldrinfo': %s,\n", JSONString(str).c_str());
- pos += kLdrBufSize;
- break;
- }
- case EVENT_TYPE_CREATETHREAD:
- {
- printf("'eventtype': 'EVENT_TYPE_CREATETHREAD',\n"
- "'eventid': 0x%x,\n"
- "'startaddr': 0x%x,\n",
- IntAt(pos), IntAt(pos+4));
- pos += 8;
- break;
- }
- case EVENT_TYPE_THREADBEGIN:
- {
- printf("'eventtype': 'EVENT_TYPE_THREADBEGIN',\n"
- "'parenteventid': 0x%x,\n"
- "'startaddr': 0x%x,\n",
- IntAt(pos), IntAt(pos+4));
- pos += 8;
- break;
- }
- case EVENT_TYPE_THREADNAME:
- {
- std::string str(&buf_[pos], kThreadNameBufSize);
- str = str.substr(0, str.find('\0'));
- printf("'eventtype': 'EVENT_TYPE_THREADNAME',\n"
- "'threadname': %s,\n",
- JSONString(str).c_str());
- pos += kThreadNameBufSize;
- break;
- }
- case EVENT_TYPE_PROCESSEXIT:
- {
- printf("'eventtype': 'EVENT_TYPE_PROCESSEXIT',\n");
- break;
- }
- case EVENT_TYPE_THREADEXIT:
- {
- printf("'eventtype': 'EVENT_TYPE_THREADEXIT',\n");
- break;
- }
- case EVENT_TYPE_ALLOCHEAP:
- {
- printf("'eventtype': 'EVENT_TYPE_ALLOCHEAP',\n"
- "'heaphandle': 0x%x,\n"
- "'heapflags': 0x%x,\n"
- "'heapsize': %d,\n",
- IntAt(pos), IntAt(pos+4), IntAt(pos+8));
- pos += 12;
- break;
- }
- case EVENT_TYPE_FREEHEAP:
- {
- printf("'eventtype': 'EVENT_TYPE_FREEHEAP',\n"
- "'heaphandle': 0x%x,\n"
- "'heapflags': 0x%x,\n"
- "'heapptr': %d,\n",
- IntAt(pos), IntAt(pos+4), IntAt(pos+8));
- pos += 12;
- break;
- }
- case EVENT_TYPE_SYSCALL:
- {
- int syscall = IntAt(pos);
- printf("'eventtype': 'EVENT_TYPE_SYSCALL',\n"
- "'syscall': 0x%x,\n", syscall);
- pos += 16;
-
- printf("'syscallargs': [\n");
- for (int i = 0; i < 3; ++i) {
- printf(" 0x%x,\n", IntAt(pos));
- pos += 4;
- }
- printf("],\n");
-
- printf("'retval': 0x%x,\n"
- "'done': %f,\n",
- IntAt(pos), rdn->MsFromStart(0, Int64At(pos+4)));
- pos += 12;
-
- if (syscalls.count(syscall) == 1) {
- std::string sname = syscalls[syscall];
- printf("'syscallname': %s,\n",
- JSONString(sname).c_str());
- // Mark system calls that we should consider "waiting" system
- // calls, where we are not actually active.
- if (sname.find("WaitFor") != std::string::npos ||
- sname.find("RemoveIoCompletion") != std::string::npos) {
- printf("'waiting': 1,\n");
- }
- }
- break;
- }
- case EVENT_TYPE_ENTER_CS:
- {
- printf("'eventtype': 'EVENT_TYPE_ENTER_CS',\n"
- "'critical_section': 0x%x,\n", IntAt(pos));
- pos += 4;
- break;
- }
- case EVENT_TYPE_TRYENTER_CS:
- {
- printf("'eventtype': 'EVENT_TYPE_TRYENTER_CS',\n"
- "'critical_section': 0x%x,\n"
- "'retval': 0x%x,\n",
- IntAt(pos), IntAt(pos+4));
- pos += 8;
- break;
- }
- case EVENT_TYPE_LEAVE_CS:
- {
- printf("'eventtype': 'EVENT_TYPE_LEAVE_CS',\n"
- "'critical_section': 0x%x,\n", IntAt(pos));
- pos += 4;
- break;
- }
- case EVENT_TYPE_APC:
- {
- int func_addr = IntAt(pos);
- printf("'eventtype': 'EVENT_TYPE_APC',\n"
- "'func_addr': 0x%x,\n"
- "'func_addr_name': %s,\n"
- "'ret_addr': 0x%x,\n"
- "'done': %f,\n",
- func_addr,
- res ? JSONString(res->Unresolve(func_addr)).c_str() : "\"\"",
- IntAt(pos+4), rdn->MsFromStart(0, Int64At(pos+8)));
- pos += 16;
- break;
- }
- default:
- NOTREACHED("Unknown event type: %d", rt);
- break;
- }
- printf("},\n");
- }
- printf("]);");
- }
-
- int IntAt(int pos) { return *reinterpret_cast<int*>(&buf_[pos]); }
- __int64 Int64At(int pos) { return *reinterpret_cast<__int64*>(&buf_[pos]); }
-
-
- private:
- // Handle the process we install into or read back from.
- HANDLE proc_;
- // The address where we will keep our playground in the remote process.
- char* remote_addr_;
- // Lookup addresses from symbol names for ntdll.dll.
- SymResolver resolver_;
- Options options_;
- // A local copy of the playground data, we copy it into the remote process.
- char buf_[kPlaygroundSize];
-};
-
-
-int main(int argc, char** argv) {
- std::string command_line;
- bool use_symbols = false;
- bool attaching = false;
- bool launched = false;
- bool manual_quit = false;
-
- Playground::Options options;
-
- PROCESS_INFORMATION info = {0};
-
- argc--; argv++;
-
- while (argc > 0) {
- if (std::string("--symbols") == argv[0]) {
- use_symbols = true;
- } else if (std::string("--vista") == argv[0]) {
- options.set_vista(true);
- } else if (std::string("--log-heap") == argv[0]) {
- options.set_log_heap(true);
- } else if (std::string("--log-lock") == argv[0]) {
- options.set_log_lock(true);
- } else if (std::string("--manual-quit") == argv[0]) {
- manual_quit = true;
- } else if (argc >= 2 && std::string("--unwind") == argv[0]) {
- options.set_stack_unwind_depth(atoi(argv[1]));
- argc--; argv++;
- } else if (argc >= 2 && !launched && std::string("--attach") == argv[0]) {
- attaching = true;
- info.hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, atoi(argv[1]));
- launched = true;
- argc--; argv++;
- } else if (!launched) {
- STARTUPINFOA start_info = {0};
- start_info.cb = sizeof(start_info);
-
- if (!CreateProcessA(NULL,
- argv[0],
- NULL,
- NULL,
- FALSE,
- CREATE_SUSPENDED,
- NULL,
- NULL,
- &start_info,
- &info)) {
- NOTREACHED("Failed to launch \"%s\": %d\n", argv[0], GetLastError());
- return 1;
- }
- launched = true;
- } else {
- NOTREACHED("error parsing command line.");
- }
- argc--; argv++;
- }
-
- if (!launched) {
- printf("usage: traceline.exe \"app.exe my arguments\"\n"
- " --attach 123: buggy support for attaching to a process\n"
- " --unwind 16: unwind the stack to the specified max depth\n"
- " --symbols: use symbols for stacktraces\n"
- " --log-heap: log heap operations (alloc / free).\n"
- " --log-lock: log lock (critical section) operations.\n");
- return 1;
- }
-
-
- HANDLE exiting = CreateEvent(NULL, FALSE, FALSE, NULL);
- HANDLE exited = CreateEvent(NULL, FALSE, FALSE, NULL);
-
- // The playground object is big (32MB), dynamically alloc.
- Playground* pg = new Playground(info.hProcess, options);
-
- pg->AllocateInRemote();
- pg->Patch();
- pg->PatchExit(exiting, exited);
- pg->CopyToRemote();
-
- RDTSCNormalizer rdn;
- rdn.Start();
-
- if (!attaching)
- ResumeThread(info.hThread);
-
- // Wait until we have been notified that it's exiting.
- if (manual_quit) {
- fprintf(stderr, "Press enter when you want stop tracing and collect.\n");
- fflush(stderr);
- getchar();
- } else {
- HANDLE whs[] = {exiting, info.hProcess};
- if (WaitForMultipleObjects(2, whs, FALSE, INFINITE) != WAIT_OBJECT_0) {
- NOTREACHED("Failed to correctly capture process shutdown.");
- }
- }
-
- pg->CopyFromRemote();
-
- if (use_symbols) {
- // Break in and get the symbols...
- SymResolver res(NULL, info.hProcess);
- pg->DumpJSON(&rdn, &res);
- } else {
- pg->DumpJSON(&rdn, NULL);
- }
-
- // Notify that it can exit now, we are done.
- SetEvent(exited);
-
- CloseHandle(info.hProcess);
- CloseHandle(info.hThread);
-
- delete pg;
-}
diff --git a/chromium/tools/traceline/traceline/rdtsc.h b/chromium/tools/traceline/traceline/rdtsc.h
deleted file mode 100644
index 7c3cb1a9676..00000000000
--- a/chromium/tools/traceline/traceline/rdtsc.h
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (c) 2009 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.
-
-#ifndef TRACELINE_RDTSC_H_
-#define TRACELINE_RDTSC_H_
-
-#include <windows.h>
-#include <powrprof.h>
-
-#include <map>
-
-#include "logging.h"
-
-class RDTSCNormalizer {
- public:
- RDTSCNormalizer() { }
- ~RDTSCNormalizer() { }
-
- void Start() {
- LARGE_INTEGER freq, now;
- if (QueryPerformanceFrequency(&freq) == 0) {
- NOTREACHED("");
- }
- freq_ = freq.QuadPart;
-
- if (QueryPerformanceCounter(&now) == 0) {
- NOTREACHED("");
- }
- start_ = now.QuadPart;
- }
-
- // Calculate the time from start for a given processor.
- double MsFromStart(void* procid, __int64 stamp) {
- return (stamp - start_) / (freq_ / 1000.0);
- }
-
- private:
- __int64 freq_;
- __int64 start_;
-};
-
-#endif // TRACELINE_RDTSC_H_
diff --git a/chromium/tools/traceline/traceline/scripts/__init__.py b/chromium/tools/traceline/traceline/scripts/__init__.py
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/chromium/tools/traceline/traceline/scripts/__init__.py
+++ /dev/null
diff --git a/chromium/tools/traceline/traceline/scripts/alloc.py b/chromium/tools/traceline/traceline/scripts/alloc.py
deleted file mode 100755
index ee4af220d59..00000000000
--- a/chromium/tools/traceline/traceline/scripts/alloc.py
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-import sys
-
-from syscalls import syscalls
-
-
-def parseEvents(z):
- calls = { }
- for e in z:
- if e['eventtype'] == 'EVENT_TYPE_SYSCALL' and e['syscall'] == 17:
- delta = e['done'] - e['ms']
- tid = e['thread']
- ms = e['ms']
- print '%f - %f - %x' % (
- delta, ms, tid)
-
-
-def main():
- execfile(sys.argv[1])
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/traceline/traceline/scripts/crit_sec.js b/chromium/tools/traceline/traceline/scripts/crit_sec.js
deleted file mode 100644
index 906bba10f0a..00000000000
--- a/chromium/tools/traceline/traceline/scripts/crit_sec.js
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright (c) 2009 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.
-
-// You should run this with v8, like v8_shell alloc.js datafile.json
-
-function toHex(num) {
- var str = "";
- var table = "0123456789abcdef";
- while (num != 0) {
- str = table.charAt(num & 0xf) + str;
- num >>= 4;
- }
- return str;
-}
-
-function parseEvents(z) {
- var crits = { }
- var calls = { }
-
- for (var i = 0, il = z.length; i < il; ++i) {
- var e = z[i];
-
- if (e['eventtype'] == 'EVENT_TYPE_ENTER_CS' ||
- e['eventtype'] == 'EVENT_TYPE_TRYENTER_CS' ||
- e['eventtype'] == 'EVENT_TYPE_LEAVE_CS') {
- cs = e['critical_section'];
- if (!(cs in crits)) {
- crits[cs] = [ ];
- }
- crits[cs].push(e);
- }
- }
-
- // Verify that the locks get unlocked, and operations stay on the same thread.
- for (var key in crits) {
- var cs = key;
- var es = crits[key];
-
- var tid_stack = [ ];
- for (var j = 0, jl = es.length; j < jl; ++j) {
- var e = es[j];
- if (e['eventtype'] == 'EVENT_TYPE_ENTER_CS') {
- tid_stack.push(e);
- } else if (e['eventtype'] == 'EVENT_TYPE_TRYENTER_CS') {
- if (e['retval'] != 0)
- tid_stack.push(e);
- } else if (e['eventtype'] == 'EVENT_TYPE_LEAVE_CS') {
- if (tid_stack.length == 0) {
- print('fail ' + e);
- }
- var tid = tid_stack.pop()
- if (tid['thread'] != e['thread']) {
- print('fail ' + tid);
- }
- }
- }
- }
-
- // Look for long-held / contended locks. We can't really know it is
- // contended without looking if anyone is waiting on the embedded event...
- // Just look for locks are are held a long time? Not so good...
- for (var key in crits) {
- var cs = key;
- var es = crits[key];
-
- var tid_stack = [ ];
- for (var j = 0, jl = es.length; j < jl; ++j) {
- var e = es[j];
- if (e['eventtype'] == 'EVENT_TYPE_ENTER_CS') {
- tid_stack.push(e);
- } else if (e['eventtype'] == 'EVENT_TYPE_TRYENTER_CS') {
- if (e['retval'] != 0)
- tid_stack.push(e);
- } else if (e['eventtype'] == 'EVENT_TYPE_LEAVE_CS') {
- if (tid_stack.length == 0) {
- print('fail ' + e);
- }
- var tid = tid_stack.pop();
- var dur = e['ms'] - tid['ms'];
- if (dur > 0.1) {
- print('Lock: 0x' + toHex(cs) + ' for ' + dur + ' at: ' + e['ms']);
- }
- }
- }
- }
-}
diff --git a/chromium/tools/traceline/traceline/scripts/crit_sec.py b/chromium/tools/traceline/traceline/scripts/crit_sec.py
deleted file mode 100755
index ee710bd2032..00000000000
--- a/chromium/tools/traceline/traceline/scripts/crit_sec.py
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-import sys
-import os
-
-from syscalls import syscalls
-
-
-def parseEvents(z):
- crits = { }
- calls = { }
- for e in z:
- if (e['eventtype'] == 'EVENT_TYPE_ENTER_CS' or
- e['eventtype'] == 'EVENT_TYPE_TRYENTER_CS' or
- e['eventtype'] == 'EVENT_TYPE_LEAVE_CS'):
- cs = e['critical_section']
- if not crits.has_key(cs):
- crits[cs] = [ ]
- crits[cs].append(e)
-
-# for cs, es in crits.iteritems():
-# print 'cs: 0x%08x' % cs
-# for e in es:
-# print ' 0x%08x - %s - %f' % (e['thread'], e['eventtype'], e['ms'])
-
- for cs, es in crits.iteritems():
- print 'cs: 0x%08x' % cs
-
- tid_stack = [ ]
- for e in es:
- if e['eventtype'] == 'EVENT_TYPE_ENTER_CS':
- tid_stack.append(e)
- elif e['eventtype'] == 'EVENT_TYPE_TRYENTER_CS':
- if e['retval'] != 0:
- tid_stack.append(e)
- elif e['eventtype'] == 'EVENT_TYPE_LEAVE_CS':
- if not tid_stack:
- raise repr(e)
- tid = tid_stack.pop()
- if tid['thread'] != e['thread']:
- raise repr(tid) + '--' + repr(e)
-
- # Critical section left locked?
- if tid_stack:
- #raise repr(tid_stack)
- pass
-
-
-def main():
- execfile(sys.argv[1])
-
-
-if __name__ == '__main__':
- main()
diff --git a/chromium/tools/traceline/traceline/scripts/filter_short.py b/chromium/tools/traceline/traceline/scripts/filter_short.py
deleted file mode 100755
index 1b73bf96af0..00000000000
--- a/chromium/tools/traceline/traceline/scripts/filter_short.py
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""Takes an input JSON, and filters out all system call events that
-took less than 0.2ms.
-
-This helps trim down the JSON data to only the most interesting / time critical
-events.
-"""
-
-import sys
-import re
-
-
-def parseEvents(z):
- print 'parseEvents(['
- for e in z:
- if e.has_key('ms') and e.has_key('done'):
- dur = e['done'] - e['ms']
- if dur < 0.2:
- continue
- # Ugly regex to remove the L suffix on large python numbers.
- print '%s,' % re.sub('([0-9])L\\b', '\\1', str(e))
- print '])'
-
-
-def main():
- execfile(sys.argv[1])
-
-
-if __name__ == '__main__':
- main()
diff --git a/chromium/tools/traceline/traceline/scripts/filter_split.sh b/chromium/tools/traceline/traceline/scripts/filter_split.sh
deleted file mode 100755
index 876488e3111..00000000000
--- a/chromium/tools/traceline/traceline/scripts/filter_split.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2011 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.
-
-# Runs filter_short on the individual splits of a json file, and puts
-# everything back together into a single output json. This is useful when you
-# want to filter a large json file that would otherwise OOM Python.
-
-echo "parseEvents([" > totalsplit
-for f in split.*; do
- ./scripts/filter_short.py "$f" | tail -n +2 | head -n -1 >> totalsplit
-done
-echo "]);" >> totalsplit
diff --git a/chromium/tools/traceline/traceline/scripts/heap.js b/chromium/tools/traceline/traceline/scripts/heap.js
deleted file mode 100644
index 9025ac3d95f..00000000000
--- a/chromium/tools/traceline/traceline/scripts/heap.js
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright (c) 2009 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.
-
-// You should run this with v8, like v8_shell alloc.js datafile.json
-
-function toHex(num) {
- var str = "";
- var table = "0123456789abcdef";
- while (num != 0) {
- str = table.charAt(num & 0xf) + str;
- num >>= 4;
- }
- return str;
-}
-
-function dump(obj) {
- for (var key in obj) {
- print('key: ' + key);
- print(' ' + obj[key]);
- }
-}
-
-function TopN(n) {
- this.n = n;
- this.min = 0;
- this.sorted = [ ];
-}
-
-TopN.prototype.add =
-function(num, data) {
- if (num < this.min)
- return;
-
- this.sorted.push([num, data]);
- this.sorted.sort(function(a, b) { return b[0] - a[0] });
- if (this.sorted.length > this.n)
- this.sorted.pop();
-
- this.min = this.sorted[this.sorted.lenth - 1];
-};
-
-TopN.prototype.datas =
-function() {
- var datas = [ ];
- for (var i = 0, il = this.sorted.length; i < il; ++i) {
- datas.push(this.sorted[i][1]);
- }
- return datas;
-};
-
-function parseEvents(z) {
- var topper = new TopN(1000);
-
- // Find the largest allocation.
- for (var i = 0, il = z.length; i < il; ++i) {
- var e = z[i];
-
- if (e['eventtype'] == 'EVENT_TYPE_ALLOCHEAP') {
- var size = e['heapsize'];
- topper.add(e['heapsize'], e);
- }
- }
-
- var datas = topper.datas();
- for (var i = 0, il = datas.length; i < il; ++i) {
- dump(datas[i]);
- }
-}
diff --git a/chromium/tools/traceline/traceline/scripts/scstats.py b/chromium/tools/traceline/traceline/scripts/scstats.py
deleted file mode 100755
index e2f28dc94a1..00000000000
--- a/chromium/tools/traceline/traceline/scripts/scstats.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-import sys
-
-from syscalls import syscalls
-
-
-def parseEvents(z):
- calls = { }
- for e in z:
- if e['eventtype'] == 'EVENT_TYPE_SYSCALL' and e['done'] > 0:
- delta = e['done'] - e['ms']
- syscall = e['syscall']
- tid = e['thread']
- ms = e['ms']
- calls[syscall] = calls.get(syscall, 0) + delta
- print '%f - %f - %x - %d %s' % (
- delta, ms, tid, syscall, syscalls.get(syscall, 'unknown'))
-
- #for syscall, delta in calls.items():
- # print '%f - %d %s' % (delta, syscall, syscalls.get(syscall, 'unknown'))
-
-
-def main():
- execfile(sys.argv[1])
-
-
-if __name__ == '__main__':
- main()
diff --git a/chromium/tools/traceline/traceline/scripts/split.py b/chromium/tools/traceline/traceline/scripts/split.py
deleted file mode 100755
index 6f20e0457e4..00000000000
--- a/chromium/tools/traceline/traceline/scripts/split.py
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-"""Splits a single json file (read from stdin) into separate files of 40k
-records, named split.X.
-"""
-
-import sys
-
-
-def main():
- filecount = 0
- count = 0
- f = open('split.0', 'wb')
- for l in sys.stdin:
- if l == "},\r\n":
- count += 1
- if count == 40000:
- f.write("}]);\r\n")
- count = 0
- filecount += 1
- f = open('split.%d' % filecount, 'wb')
- f.write("parseEvents([\r\n")
- continue
- f.write(l)
-
-
-if __name__ == '__main__':
- main()
diff --git a/chromium/tools/traceline/traceline/scripts/syscalls.py b/chromium/tools/traceline/traceline/scripts/syscalls.py
deleted file mode 100644
index 6800b45c128..00000000000
--- a/chromium/tools/traceline/traceline/scripts/syscalls.py
+++ /dev/null
@@ -1,942 +0,0 @@
-# Copyright (c) 2011 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.
-
-syscalls = {
-0: "ntdll.dll!NtAcceptConnectPort",
-1: "ntdll.dll!NtAccessCheck",
-2: "ntdll.dll!ZwAccessCheckAndAuditAlarm",
-3: "ntdll.dll!NtAccessCheckByType",
-4: "ntdll.dll!NtAccessCheckByTypeAndAuditAlarm",
-5: "ntdll.dll!NtAccessCheckByTypeResultList",
-6: "ntdll.dll!NtAccessCheckByTypeResultListAndAuditAlarm",
-7: "ntdll.dll!ZwAccessCheckByTypeResultListAndAuditAlarmByHandle",
-8: "ntdll.dll!NtAddAtom",
-9: "ntdll.dll!ZwAddBootEntry",
-10: "ntdll.dll!ZwAdjustGroupsToken",
-11: "ntdll.dll!ZwAdjustPrivilegesToken",
-12: "ntdll.dll!NtAlertResumeThread",
-13: "ntdll.dll!NtAlertThread",
-14: "ntdll.dll!ZwAllocateLocallyUniqueId",
-15: "ntdll.dll!NtAllocateUserPhysicalPages",
-16: "ntdll.dll!NtAllocateUuids",
-17: "ntdll.dll!NtAllocateVirtualMemory",
-18: "ntdll.dll!ZwAreMappedFilesTheSame",
-19: "ntdll.dll!ZwAssignProcessToJobObject",
-20: "ntdll.dll!ZwCallbackReturn",
-21: "ntdll.dll!NtCancelDeviceWakeupRequest",
-22: "ntdll.dll!ZwCancelIoFile",
-23: "ntdll.dll!ZwCancelTimer",
-24: "ntdll.dll!NtClearEvent",
-25: "ntdll.dll!NtClose",
-26: "ntdll.dll!ZwCloseObjectAuditAlarm",
-27: "ntdll.dll!NtCompactKeys",
-28: "ntdll.dll!ZwCompareTokens",
-29: "ntdll.dll!NtCompleteConnectPort",
-30: "ntdll.dll!ZwCompressKey",
-31: "ntdll.dll!NtConnectPort",
-32: "ntdll.dll!ZwContinue",
-33: "ntdll.dll!ZwCreateDebugObject",
-34: "ntdll.dll!ZwCreateDirectoryObject",
-35: "ntdll.dll!NtCreateEvent",
-36: "ntdll.dll!NtCreateEventPair",
-37: "ntdll.dll!NtCreateFile",
-38: "ntdll.dll!NtCreateIoCompletion",
-39: "ntdll.dll!ZwCreateJobObject",
-40: "ntdll.dll!NtCreateJobSet",
-41: "ntdll.dll!ZwCreateKey",
-42: "ntdll.dll!ZwCreateMailslotFile",
-43: "ntdll.dll!ZwCreateMutant",
-44: "ntdll.dll!ZwCreateNamedPipeFile",
-45: "ntdll.dll!NtCreatePagingFile",
-46: "ntdll.dll!ZwCreatePort",
-47: "ntdll.dll!ZwCreateProcess",
-48: "ntdll.dll!ZwCreateProcessEx",
-49: "ntdll.dll!ZwCreateProfile",
-50: "ntdll.dll!NtCreateSection",
-51: "ntdll.dll!NtCreateSemaphore",
-52: "ntdll.dll!ZwCreateSymbolicLinkObject",
-53: "ntdll.dll!NtCreateThread",
-54: "ntdll.dll!ZwCreateTimer",
-55: "ntdll.dll!NtCreateToken",
-56: "ntdll.dll!ZwCreateWaitablePort",
-57: "ntdll.dll!NtDebugActiveProcess",
-58: "ntdll.dll!ZwDebugContinue",
-59: "ntdll.dll!ZwDelayExecution",
-60: "ntdll.dll!ZwDeleteAtom",
-61: "ntdll.dll!NtDeleteBootEntry",
-62: "ntdll.dll!NtDeleteFile",
-63: "ntdll.dll!ZwDeleteKey",
-64: "ntdll.dll!NtDeleteObjectAuditAlarm",
-65: "ntdll.dll!NtDeleteValueKey",
-66: "ntdll.dll!ZwDeviceIoControlFile",
-67: "ntdll.dll!NtDisplayString",
-68: "ntdll.dll!ZwDuplicateObject",
-69: "ntdll.dll!NtDuplicateToken",
-70: "ntdll.dll!ZwEnumerateBootEntries",
-71: "ntdll.dll!ZwEnumerateKey",
-72: "ntdll.dll!ZwEnumerateSystemEnvironmentValuesEx",
-73: "ntdll.dll!NtEnumerateValueKey",
-74: "ntdll.dll!ZwExtendSection",
-75: "ntdll.dll!NtFilterToken",
-76: "ntdll.dll!NtFindAtom",
-77: "ntdll.dll!ZwFlushBuffersFile",
-78: "ntdll.dll!ZwFlushInstructionCache",
-79: "ntdll.dll!NtFlushKey",
-80: "ntdll.dll!ZwFlushVirtualMemory",
-81: "ntdll.dll!NtFlushWriteBuffer",
-82: "ntdll.dll!NtFreeUserPhysicalPages",
-83: "ntdll.dll!NtFreeVirtualMemory",
-84: "ntdll.dll!NtFsControlFile",
-85: "ntdll.dll!NtGetContextThread",
-86: "ntdll.dll!NtGetDevicePowerState",
-87: "ntdll.dll!ZwGetPlugPlayEvent",
-88: "ntdll.dll!NtGetWriteWatch",
-89: "ntdll.dll!NtImpersonateAnonymousToken",
-90: "ntdll.dll!ZwImpersonateClientOfPort",
-91: "ntdll.dll!ZwImpersonateThread",
-92: "ntdll.dll!ZwInitializeRegistry",
-93: "ntdll.dll!NtInitiatePowerAction",
-94: "ntdll.dll!ZwIsProcessInJob",
-95: "ntdll.dll!NtIsSystemResumeAutomatic",
-96: "ntdll.dll!ZwListenPort",
-97: "ntdll.dll!NtLoadDriver",
-98: "ntdll.dll!NtLoadKey",
-99: "ntdll.dll!NtLoadKey2",
-100: "ntdll.dll!NtLockFile",
-101: "ntdll.dll!ZwLockProductActivationKeys",
-102: "ntdll.dll!NtLockRegistryKey",
-103: "ntdll.dll!ZwLockVirtualMemory",
-104: "ntdll.dll!ZwMakePermanentObject",
-105: "ntdll.dll!NtMakeTemporaryObject",
-106: "ntdll.dll!NtMapUserPhysicalPages",
-107: "ntdll.dll!ZwMapUserPhysicalPagesScatter",
-108: "ntdll.dll!ZwMapViewOfSection",
-109: "ntdll.dll!NtModifyBootEntry",
-110: "ntdll.dll!NtNotifyChangeDirectoryFile",
-111: "ntdll.dll!NtNotifyChangeKey",
-112: "ntdll.dll!NtNotifyChangeMultipleKeys",
-113: "ntdll.dll!ZwOpenDirectoryObject",
-114: "ntdll.dll!NtOpenEvent",
-115: "ntdll.dll!NtOpenEventPair",
-116: "ntdll.dll!NtOpenFile",
-117: "ntdll.dll!ZwOpenIoCompletion",
-118: "ntdll.dll!ZwOpenJobObject",
-119: "ntdll.dll!ZwOpenKey",
-120: "ntdll.dll!NtOpenMutant",
-121: "ntdll.dll!ZwOpenObjectAuditAlarm",
-122: "ntdll.dll!ZwOpenProcess",
-123: "ntdll.dll!ZwOpenProcessToken",
-124: "ntdll.dll!ZwOpenProcessTokenEx",
-125: "ntdll.dll!NtOpenSection",
-126: "ntdll.dll!NtOpenSemaphore",
-127: "ntdll.dll!NtOpenSymbolicLinkObject",
-128: "ntdll.dll!ZwOpenThread",
-129: "ntdll.dll!NtOpenThreadToken",
-130: "ntdll.dll!NtOpenThreadTokenEx",
-131: "ntdll.dll!ZwOpenTimer",
-132: "ntdll.dll!NtPlugPlayControl",
-133: "ntdll.dll!ZwPowerInformation",
-134: "ntdll.dll!ZwPrivilegeCheck",
-135: "ntdll.dll!ZwPrivilegeObjectAuditAlarm",
-136: "ntdll.dll!NtPrivilegedServiceAuditAlarm",
-137: "ntdll.dll!ZwProtectVirtualMemory",
-138: "ntdll.dll!ZwPulseEvent",
-139: "ntdll.dll!ZwQueryAttributesFile",
-140: "ntdll.dll!ZwQueryBootEntryOrder",
-141: "ntdll.dll!ZwQueryBootOptions",
-142: "ntdll.dll!NtQueryDebugFilterState",
-143: "ntdll.dll!NtQueryDefaultLocale",
-144: "ntdll.dll!ZwQueryDefaultUILanguage",
-145: "ntdll.dll!ZwQueryDirectoryFile",
-146: "ntdll.dll!ZwQueryDirectoryObject",
-147: "ntdll.dll!ZwQueryEaFile",
-148: "ntdll.dll!NtQueryEvent",
-149: "ntdll.dll!ZwQueryFullAttributesFile",
-150: "ntdll.dll!NtQueryInformationAtom",
-151: "ntdll.dll!ZwQueryInformationFile",
-152: "ntdll.dll!ZwQueryInformationJobObject",
-153: "ntdll.dll!ZwQueryInformationPort",
-154: "ntdll.dll!ZwQueryInformationProcess",
-155: "ntdll.dll!NtQueryInformationThread",
-156: "ntdll.dll!ZwQueryInformationToken",
-157: "ntdll.dll!NtQueryInstallUILanguage",
-158: "ntdll.dll!NtQueryIntervalProfile",
-159: "ntdll.dll!NtQueryIoCompletion",
-160: "ntdll.dll!ZwQueryKey",
-161: "ntdll.dll!NtQueryMultipleValueKey",
-162: "ntdll.dll!NtQueryMutant",
-163: "ntdll.dll!NtQueryObject",
-164: "ntdll.dll!NtQueryOpenSubKeys",
-165: "ntdll.dll!NtQueryPerformanceCounter",
-166: "ntdll.dll!ZwQueryQuotaInformationFile",
-167: "ntdll.dll!ZwQuerySection",
-168: "ntdll.dll!NtQuerySecurityObject",
-169: "ntdll.dll!ZwQuerySemaphore",
-170: "ntdll.dll!ZwQuerySymbolicLinkObject",
-171: "ntdll.dll!ZwQuerySystemEnvironmentValue",
-172: "ntdll.dll!ZwQuerySystemEnvironmentValueEx",
-173: "ntdll.dll!NtQuerySystemInformation",
-174: "ntdll.dll!NtQuerySystemTime",
-175: "ntdll.dll!ZwQueryTimer",
-176: "ntdll.dll!NtQueryTimerResolution",
-177: "ntdll.dll!ZwQueryValueKey",
-178: "ntdll.dll!NtQueryVirtualMemory",
-179: "ntdll.dll!NtQueryVolumeInformationFile",
-180: "ntdll.dll!NtQueueApcThread",
-181: "ntdll.dll!ZwRaiseException",
-182: "ntdll.dll!ZwRaiseHardError",
-183: "ntdll.dll!NtReadFile",
-184: "ntdll.dll!NtReadFileScatter",
-185: "ntdll.dll!ZwReadRequestData",
-186: "ntdll.dll!NtReadVirtualMemory",
-187: "ntdll.dll!ZwRegisterThreadTerminatePort",
-188: "ntdll.dll!ZwReleaseMutant",
-189: "ntdll.dll!NtReleaseSemaphore",
-190: "ntdll.dll!ZwRemoveIoCompletion",
-191: "ntdll.dll!ZwRemoveProcessDebug",
-192: "ntdll.dll!ZwRenameKey",
-193: "ntdll.dll!ZwReplaceKey",
-194: "ntdll.dll!ZwReplyPort",
-195: "ntdll.dll!NtReplyWaitReceivePort",
-196: "ntdll.dll!NtReplyWaitReceivePortEx",
-197: "ntdll.dll!NtReplyWaitReplyPort",
-198: "ntdll.dll!ZwRequestDeviceWakeup",
-199: "ntdll.dll!ZwRequestPort",
-200: "ntdll.dll!NtRequestWaitReplyPort",
-201: "ntdll.dll!ZwRequestWakeupLatency",
-202: "ntdll.dll!NtResetEvent",
-203: "ntdll.dll!ZwResetWriteWatch",
-204: "ntdll.dll!NtRestoreKey",
-205: "ntdll.dll!ZwResumeProcess",
-206: "ntdll.dll!ZwResumeThread",
-207: "ntdll.dll!NtSaveKey",
-208: "ntdll.dll!NtSaveKeyEx",
-209: "ntdll.dll!NtSaveMergedKeys",
-210: "ntdll.dll!NtSecureConnectPort",
-211: "ntdll.dll!ZwSetBootEntryOrder",
-212: "ntdll.dll!ZwSetBootOptions",
-213: "ntdll.dll!ZwSetContextThread",
-214: "ntdll.dll!NtSetDebugFilterState",
-215: "ntdll.dll!NtSetDefaultHardErrorPort",
-216: "ntdll.dll!NtSetDefaultLocale",
-217: "ntdll.dll!ZwSetDefaultUILanguage",
-218: "ntdll.dll!ZwSetEaFile",
-219: "ntdll.dll!NtSetEvent",
-220: "ntdll.dll!NtSetEventBoostPriority",
-221: "ntdll.dll!NtSetHighEventPair",
-222: "ntdll.dll!NtSetHighWaitLowEventPair",
-223: "ntdll.dll!ZwSetInformationDebugObject",
-224: "ntdll.dll!ZwSetInformationFile",
-225: "ntdll.dll!ZwSetInformationJobObject",
-226: "ntdll.dll!ZwSetInformationKey",
-227: "ntdll.dll!ZwSetInformationObject",
-228: "ntdll.dll!ZwSetInformationProcess",
-229: "ntdll.dll!ZwSetInformationThread",
-230: "ntdll.dll!ZwSetInformationToken",
-231: "ntdll.dll!NtSetIntervalProfile",
-232: "ntdll.dll!NtSetIoCompletion",
-233: "ntdll.dll!ZwSetLdtEntries",
-234: "ntdll.dll!ZwSetLowEventPair",
-235: "ntdll.dll!ZwSetLowWaitHighEventPair",
-236: "ntdll.dll!ZwSetQuotaInformationFile",
-237: "ntdll.dll!NtSetSecurityObject",
-238: "ntdll.dll!ZwSetSystemEnvironmentValue",
-239: "ntdll.dll!ZwSetSystemEnvironmentValueEx",
-240: "ntdll.dll!ZwSetSystemInformation",
-241: "ntdll.dll!ZwSetSystemPowerState",
-242: "ntdll.dll!ZwSetSystemTime",
-243: "ntdll.dll!ZwSetThreadExecutionState",
-244: "ntdll.dll!ZwSetTimer",
-245: "ntdll.dll!NtSetTimerResolution",
-246: "ntdll.dll!ZwSetUuidSeed",
-247: "ntdll.dll!ZwSetValueKey",
-248: "ntdll.dll!NtSetVolumeInformationFile",
-249: "ntdll.dll!ZwShutdownSystem",
-250: "ntdll.dll!ZwSignalAndWaitForSingleObject",
-251: "ntdll.dll!NtStartProfile",
-252: "ntdll.dll!ZwStopProfile",
-253: "ntdll.dll!ZwSuspendProcess",
-254: "ntdll.dll!ZwSuspendThread",
-255: "ntdll.dll!NtSystemDebugControl",
-256: "ntdll.dll!ZwTerminateJobObject",
-257: "ntdll.dll!ZwTerminateProcess",
-258: "ntdll.dll!ZwTerminateThread",
-259: "ntdll.dll!NtTestAlert",
-260: "ntdll.dll!NtTraceEvent",
-261: "ntdll.dll!NtTranslateFilePath",
-262: "ntdll.dll!ZwUnloadDriver",
-263: "ntdll.dll!NtUnloadKey",
-264: "ntdll.dll!ZwUnloadKeyEx",
-265: "ntdll.dll!ZwUnlockFile",
-266: "ntdll.dll!NtUnlockVirtualMemory",
-267: "ntdll.dll!NtUnmapViewOfSection",
-268: "ntdll.dll!NtVdmControl",
-269: "ntdll.dll!NtWaitForDebugEvent",
-270: "ntdll.dll!NtWaitForMultipleObjects",
-271: "ntdll.dll!ZwWaitForSingleObject",
-272: "ntdll.dll!ZwWaitHighEventPair",
-273: "ntdll.dll!NtWaitLowEventPair",
-274: "ntdll.dll!NtWriteFile",
-275: "ntdll.dll!NtWriteFileGather",
-276: "ntdll.dll!NtWriteRequestData",
-277: "ntdll.dll!NtWriteVirtualMemory",
-278: "ntdll.dll!ZwYieldExecution",
-279: "ntdll.dll!ZwCreateKeyedEvent",
-280: "ntdll.dll!NtOpenKeyedEvent",
-281: "ntdll.dll!NtReleaseKeyedEvent",
-282: "ntdll.dll!NtWaitForKeyedEvent",
-283: "ntdll.dll!ZwQueryPortInformationProcess",
-4096: "gdi32.dll!NtGdiAbortDoc",
-4097: "gdi32.dll!NtGdiAbortPath",
-4098: "gdi32.dll!NtGdiAddFontResourceW",
-4099: "gdi32.dll!NtGdiAddRemoteFontToDC",
-4100: "gdi32.dll!NtGdiAddFontMemResourceEx",
-4101: "gdi32.dll!NtGdiRemoveMergeFont",
-4102: "gdi32.dll!NtGdiAddRemoteMMInstanceToDC",
-4103: "gdi32.dll!NtGdiAlphaBlend",
-4104: "gdi32.dll!NtGdiAngleArc",
-4105: "gdi32.dll!NtGdiAnyLinkedFonts",
-4106: "gdi32.dll!NtGdiFontIsLinked",
-4107: "gdi32.dll!NtGdiArcInternal",
-4108: "gdi32.dll!NtGdiBeginPath",
-4109: "gdi32.dll!NtGdiBitBlt",
-4110: "gdi32.dll!NtGdiCancelDC",
-4111: "gdi32.dll!NtGdiCheckBitmapBits",
-4112: "gdi32.dll!NtGdiCloseFigure",
-4113: "gdi32.dll!NtGdiClearBitmapAttributes",
-4114: "gdi32.dll!NtGdiClearBrushAttributes",
-4115: "gdi32.dll!NtGdiColorCorrectPalette",
-4116: "gdi32.dll!NtGdiCombineRgn",
-4117: "gdi32.dll!CombineTransform",
-4118: "gdi32.dll!NtGdiComputeXformCoefficients",
-4119: "gdi32.dll!NtGdiConsoleTextOut",
-4120: "gdi32.dll!NtGdiConvertMetafileRect",
-4121: "gdi32.dll!NtGdiCreateBitmap",
-4122: "gdi32.dll!NtGdiCreateClientObj",
-4123: "gdi32.dll!NtGdiCreateColorSpace",
-4124: "gdi32.dll!NtGdiCreateColorTransform",
-4125: "gdi32.dll!NtGdiCreateCompatibleBitmap",
-4126: "gdi32.dll!NtGdiCreateCompatibleDC",
-4127: "gdi32.dll!NtGdiCreateDIBBrush",
-4128: "gdi32.dll!NtGdiCreateDIBitmapInternal",
-4129: "gdi32.dll!NtGdiCreateDIBSection",
-4130: "gdi32.dll!NtGdiCreateEllipticRgn",
-4131: "gdi32.dll!NtGdiCreateHalftonePalette",
-4132: "gdi32.dll!NtGdiCreateHatchBrushInternal",
-4133: "gdi32.dll!NtGdiCreateMetafileDC",
-4134: "gdi32.dll!NtGdiCreatePaletteInternal",
-4135: "gdi32.dll!NtGdiCreatePatternBrushInternal",
-4136: "gdi32.dll!CreatePen",
-4137: "gdi32.dll!NtGdiCreateRectRgn",
-4138: "gdi32.dll!CreateRoundRectRgn",
-4139: "gdi32.dll!NtGdiCreateServerMetaFile",
-4140: "gdi32.dll!NtGdiCreateSolidBrush",
-4141: "gdi32.dll!NtGdiD3dContextCreate",
-4142: "gdi32.dll!NtGdiD3dContextDestroy",
-4143: "gdi32.dll!NtGdiD3dContextDestroyAll",
-4144: "gdi32.dll!NtGdiD3dValidateTextureStageState",
-4145: "gdi32.dll!NtGdiD3dDrawPrimitives2",
-4146: "gdi32.dll!NtGdiDdGetDriverState",
-4147: "gdi32.dll!NtGdiDdAddAttachedSurface",
-4148: "gdi32.dll!NtGdiDdAlphaBlt",
-4149: "gdi32.dll!NtGdiDdAttachSurface",
-4150: "gdi32.dll!NtGdiDdBeginMoCompFrame",
-4151: "gdi32.dll!NtGdiDdBlt",
-4152: "gdi32.dll!NtGdiDdCanCreateSurface",
-4153: "gdi32.dll!NtGdiDdCanCreateD3DBuffer",
-4154: "gdi32.dll!NtGdiDdColorControl",
-4155: "gdi32.dll!NtGdiDdCreateDirectDrawObject",
-4156: "gdi32.dll!NtGdiDdCreateSurface",
-4157: "gdi32.dll!NtGdiDdCreateD3DBuffer",
-4158: "gdi32.dll!NtGdiDdCreateMoComp",
-4159: "gdi32.dll!NtGdiDdCreateSurfaceObject",
-4160: "gdi32.dll!NtGdiDdDeleteDirectDrawObject",
-4161: "gdi32.dll!NtGdiDdDeleteSurfaceObject",
-4162: "gdi32.dll!NtGdiDdDestroyMoComp",
-4163: "gdi32.dll!NtGdiDdDestroySurface",
-4164: "gdi32.dll!NtGdiDdDestroyD3DBuffer",
-4165: "gdi32.dll!NtGdiDdEndMoCompFrame",
-4166: "gdi32.dll!NtGdiDdFlip",
-4167: "gdi32.dll!NtGdiDdFlipToGDISurface",
-4168: "gdi32.dll!NtGdiDdGetAvailDriverMemory",
-4169: "gdi32.dll!NtGdiDdGetBltStatus",
-4170: "gdi32.dll!NtGdiDdGetDC",
-4171: "gdi32.dll!NtGdiDdGetDriverInfo",
-4172: "gdi32.dll!NtGdiDdGetDxHandle",
-4173: "gdi32.dll!NtGdiDdGetFlipStatus",
-4174: "gdi32.dll!NtGdiDdGetInternalMoCompInfo",
-4175: "gdi32.dll!NtGdiDdGetMoCompBuffInfo",
-4176: "gdi32.dll!NtGdiDdGetMoCompGuids",
-4177: "gdi32.dll!NtGdiDdGetMoCompFormats",
-4178: "gdi32.dll!NtGdiDdGetScanLine",
-4179: "gdi32.dll!NtGdiDdLock",
-4180: "gdi32.dll!NtGdiDdLockD3D",
-4181: "gdi32.dll!NtGdiDdQueryDirectDrawObject",
-4182: "gdi32.dll!NtGdiDdQueryMoCompStatus",
-4183: "gdi32.dll!NtGdiDdReenableDirectDrawObject",
-4184: "gdi32.dll!NtGdiDdReleaseDC",
-4185: "gdi32.dll!NtGdiDdRenderMoComp",
-4186: "gdi32.dll!NtGdiDdResetVisrgn",
-4187: "gdi32.dll!NtGdiDdSetColorKey",
-4188: "gdi32.dll!NtGdiDdSetExclusiveMode",
-4189: "gdi32.dll!NtGdiDdSetGammaRamp",
-4190: "gdi32.dll!NtGdiDdCreateSurfaceEx",
-4191: "gdi32.dll!NtGdiDdSetOverlayPosition",
-4192: "gdi32.dll!NtGdiDdUnattachSurface",
-4193: "gdi32.dll!NtGdiDdUnlock",
-4194: "gdi32.dll!NtGdiDdUnlockD3D",
-4195: "gdi32.dll!NtGdiDdUpdateOverlay",
-4196: "gdi32.dll!NtGdiDdWaitForVerticalBlank",
-4197: "gdi32.dll!NtGdiDvpCanCreateVideoPort",
-4198: "gdi32.dll!NtGdiDvpColorControl",
-4199: "gdi32.dll!NtGdiDvpCreateVideoPort",
-4200: "gdi32.dll!NtGdiDvpDestroyVideoPort",
-4201: "gdi32.dll!NtGdiDvpFlipVideoPort",
-4202: "gdi32.dll!NtGdiDvpGetVideoPortBandwidth",
-4203: "gdi32.dll!NtGdiDvpGetVideoPortField",
-4204: "gdi32.dll!NtGdiDvpGetVideoPortFlipStatus",
-4205: "gdi32.dll!NtGdiDvpGetVideoPortInputFormats",
-4206: "gdi32.dll!NtGdiDvpGetVideoPortLine",
-4207: "gdi32.dll!NtGdiDvpGetVideoPortOutputFormats",
-4208: "gdi32.dll!NtGdiDvpGetVideoPortConnectInfo",
-4209: "gdi32.dll!NtGdiDvpGetVideoSignalStatus",
-4210: "gdi32.dll!NtGdiDvpUpdateVideoPort",
-4211: "gdi32.dll!NtGdiDvpWaitForVideoPortSync",
-4212: "gdi32.dll!NtGdiDvpAcquireNotification",
-4213: "gdi32.dll!NtGdiDvpReleaseNotification",
-4214: "gdi32.dll!NtGdiDxgGenericThunk",
-4215: "gdi32.dll!NtGdiDeleteClientObj",
-4216: "gdi32.dll!NtGdiDeleteColorSpace",
-4217: "gdi32.dll!NtGdiDeleteColorTransform",
-4218: "gdi32.dll!DeleteObject",
-4219: "gdi32.dll!NtGdiDescribePixelFormat",
-4220: "gdi32.dll!NtGdiGetPerBandInfo",
-4221: "gdi32.dll!NtGdiDoBanding",
-4222: "gdi32.dll!NtGdiDoPalette",
-4223: "gdi32.dll!NtGdiDrawEscape",
-4224: "gdi32.dll!NtGdiEllipse",
-4225: "gdi32.dll!NtGdiEnableEudc",
-4226: "gdi32.dll!NtGdiEndDoc",
-4227: "gdi32.dll!NtGdiEndPage",
-4228: "gdi32.dll!NtGdiEndPath",
-4229: "gdi32.dll!NtGdiEnumFontChunk",
-4230: "gdi32.dll!NtGdiEnumFontClose",
-4231: "gdi32.dll!NtGdiEnumFontOpen",
-4232: "gdi32.dll!NtGdiEnumObjects",
-4233: "gdi32.dll!NtGdiEqualRgn",
-4234: "gdi32.dll!NtGdiEudcLoadUnloadLink",
-4235: "gdi32.dll!NtGdiExcludeClipRect",
-4236: "gdi32.dll!NtGdiExtCreatePen",
-4237: "gdi32.dll!NtGdiExtCreateRegion",
-4238: "gdi32.dll!NtGdiExtEscape",
-4239: "gdi32.dll!NtGdiExtFloodFill",
-4240: "gdi32.dll!NtGdiExtGetObjectW",
-4241: "gdi32.dll!ExtSelectClipRgn",
-4242: "gdi32.dll!NtGdiExtTextOutW",
-4243: "gdi32.dll!NtGdiFillPath",
-4244: "gdi32.dll!NtGdiFillRgn",
-4245: "gdi32.dll!NtGdiFlattenPath",
-4247: "gdi32.dll!NtGdiFlush",
-4248: "gdi32.dll!NtGdiForceUFIMapping",
-4249: "gdi32.dll!NtGdiFrameRgn",
-4250: "gdi32.dll!NtGdiFullscreenControl",
-4251: "gdi32.dll!NtGdiGetAndSetDCDword",
-4252: "gdi32.dll!GetClipBox",
-4253: "gdi32.dll!GetBitmapBits",
-4254: "gdi32.dll!NtGdiGetBitmapDimension",
-4255: "gdi32.dll!NtGdiGetBoundsRect",
-4256: "gdi32.dll!NtGdiGetCharABCWidthsW",
-4257: "gdi32.dll!NtGdiGetCharacterPlacementW",
-4258: "gdi32.dll!NtGdiGetCharSet",
-4259: "gdi32.dll!NtGdiGetCharWidthW",
-4260: "gdi32.dll!NtGdiGetCharWidthInfo",
-4261: "gdi32.dll!NtGdiGetColorAdjustment",
-4263: "gdi32.dll!NtGdiGetDCDword",
-4264: "gdi32.dll!NtGdiGetDCforBitmap",
-4265: "gdi32.dll!NtGdiGetDCObject",
-4266: "gdi32.dll!NtGdiGetDCPoint",
-4267: "gdi32.dll!NtGdiGetDeviceCaps",
-4268: "gdi32.dll!NtGdiGetDeviceGammaRamp",
-4269: "gdi32.dll!NtGdiGetDeviceCapsAll",
-4270: "gdi32.dll!NtGdiGetDIBitsInternal",
-4271: "gdi32.dll!NtGdiGetETM",
-4272: "gdi32.dll!NtGdiGetEudcTimeStampEx",
-4273: "gdi32.dll!GetFontData",
-4274: "gdi32.dll!NtGdiGetFontResourceInfoInternalW",
-4275: "gdi32.dll!NtGdiGetGlyphIndicesW",
-4276: "gdi32.dll!NtGdiGetGlyphIndicesWInternal",
-4277: "gdi32.dll!NtGdiGetGlyphOutline",
-4278: "gdi32.dll!NtGdiGetKerningPairs",
-4279: "gdi32.dll!NtGdiGetLinkedUFIs",
-4280: "gdi32.dll!GetMiterLimit",
-4281: "gdi32.dll!NtGdiGetMonitorID",
-4282: "gdi32.dll!GetNearestColor",
-4283: "gdi32.dll!NtGdiGetNearestPaletteIndex",
-4284: "gdi32.dll!NtGdiGetObjectBitmapHandle",
-4285: "gdi32.dll!NtGdiGetOutlineTextMetricsInternalW",
-4286: "gdi32.dll!NtGdiGetPath",
-4287: "gdi32.dll!NtGdiGetPixel",
-4288: "gdi32.dll!NtGdiGetRandomRgn",
-4289: "gdi32.dll!GetRasterizerCaps",
-4290: "gdi32.dll!NtGdiGetRealizationInfo",
-4291: "gdi32.dll!GetRegionData",
-4292: "gdi32.dll!NtGdiGetRgnBox",
-4293: "gdi32.dll!NtGdiGetServerMetaFileBits",
-4294: "gdi32.dll!NtGdiGetSpoolMessage",
-4296: "gdi32.dll!NtGdiGetStockObject",
-4297: "gdi32.dll!NtGdiGetStringBitmapW",
-4298: "gdi32.dll!GetSystemPaletteUse",
-4299: "gdi32.dll!NtGdiGetTextCharsetInfo",
-4300: "gdi32.dll!NtGdiGetTextExtent",
-4301: "gdi32.dll!NtGdiGetTextExtentExW",
-4302: "gdi32.dll!NtGdiGetTextFaceW",
-4303: "gdi32.dll!NtGdiGetTextMetricsW",
-4304: "gdi32.dll!NtGdiGetTransform",
-4305: "gdi32.dll!NtGdiGetUFI",
-4306: "gdi32.dll!NtGdiGetEmbUFI",
-4307: "gdi32.dll!NtGdiGetUFIPathname",
-4308: "gdi32.dll!NtGdiGetEmbedFonts",
-4309: "gdi32.dll!NtGdiChangeGhostFont",
-4310: "gdi32.dll!NtGdiAddEmbFontToDC",
-4311: "gdi32.dll!NtGdiGetFontUnicodeRanges",
-4312: "gdi32.dll!NtGdiGetWidthTable",
-4313: "gdi32.dll!NtGdiGradientFill",
-4314: "gdi32.dll!NtGdiHfontCreate",
-4315: "gdi32.dll!NtGdiIcmBrushInfo",
-4316: "gdi32.dll!NtGdiInit",
-4317: "gdi32.dll!NtGdiInitSpool",
-4318: "gdi32.dll!NtGdiIntersectClipRect",
-4319: "gdi32.dll!NtGdiInvertRgn",
-4320: "gdi32.dll!NtGdiLineTo",
-4321: "gdi32.dll!NtGdiMakeFontDir",
-4322: "gdi32.dll!NtGdiMakeInfoDC",
-4323: "gdi32.dll!NtGdiMaskBlt",
-4324: "gdi32.dll!NtGdiModifyWorldTransform",
-4325: "gdi32.dll!NtGdiMonoBitmap",
-4327: "gdi32.dll!NtGdiOffsetClipRgn",
-4328: "gdi32.dll!NtGdiOffsetRgn",
-4329: "gdi32.dll!NtGdiOpenDCW",
-4330: "gdi32.dll!NtGdiPatBlt",
-4331: "gdi32.dll!NtGdiPolyPatBlt",
-4332: "gdi32.dll!NtGdiPathToRegion",
-4333: "gdi32.dll!NtGdiPlgBlt",
-4334: "gdi32.dll!NtGdiPolyDraw",
-4335: "gdi32.dll!NtGdiPolyPolyDraw",
-4336: "gdi32.dll!NtGdiPolyTextOutW",
-4337: "gdi32.dll!NtGdiPtInRegion",
-4338: "gdi32.dll!NtGdiPtVisible",
-4339: "gdi32.dll!NtGdiQueryFonts",
-4340: "gdi32.dll!NtGdiQueryFontAssocInfo",
-4341: "gdi32.dll!NtGdiRectangle",
-4342: "gdi32.dll!NtGdiRectInRegion",
-4343: "gdi32.dll!RectVisible",
-4344: "gdi32.dll!NtGdiRemoveFontResourceW",
-4345: "gdi32.dll!NtGdiRemoveFontMemResourceEx",
-4346: "gdi32.dll!NtGdiResetDC",
-4347: "gdi32.dll!NtGdiResizePalette",
-4348: "gdi32.dll!NtGdiRestoreDC",
-4349: "gdi32.dll!NtGdiRoundRect",
-4350: "gdi32.dll!NtGdiSaveDC",
-4351: "gdi32.dll!NtGdiScaleViewportExtEx",
-4352: "gdi32.dll!NtGdiScaleWindowExtEx",
-4353: "gdi32.dll!NtGdiSelectBitmap",
-4355: "gdi32.dll!NtGdiSelectClipPath",
-4356: "gdi32.dll!NtGdiSelectFont",
-4357: "gdi32.dll!NtGdiSelectPen",
-4358: "gdi32.dll!NtGdiSetBitmapAttributes",
-4359: "gdi32.dll!SetBitmapBits",
-4360: "gdi32.dll!NtGdiSetBitmapDimension",
-4361: "gdi32.dll!NtGdiSetBoundsRect",
-4362: "gdi32.dll!NtGdiSetBrushAttributes",
-4363: "gdi32.dll!NtGdiSetBrushOrg",
-4364: "gdi32.dll!NtGdiSetColorAdjustment",
-4365: "gdi32.dll!NtGdiSetColorSpace",
-4366: "gdi32.dll!NtGdiSetDeviceGammaRamp",
-4367: "gdi32.dll!NtGdiSetDIBitsToDeviceInternal",
-4368: "gdi32.dll!NtGdiSetFontEnumeration",
-4369: "gdi32.dll!NtGdiSetFontXform",
-4370: "gdi32.dll!NtGdiSetIcmMode",
-4371: "gdi32.dll!NtGdiSetLinkedUFIs",
-4372: "gdi32.dll!NtGdiSetMagicColors",
-4373: "gdi32.dll!NtGdiSetMetaRgn",
-4374: "gdi32.dll!NtGdiSetMiterLimit",
-4375: "gdi32.dll!NtGdiGetDeviceWidth",
-4376: "gdi32.dll!NtGdiMirrorWindowOrg",
-4377: "gdi32.dll!NtGdiSetLayout",
-4378: "gdi32.dll!NtGdiSetPixel",
-4379: "gdi32.dll!NtGdiSetPixelFormat",
-4380: "gdi32.dll!NtGdiSetRectRgn",
-4381: "gdi32.dll!NtGdiSetSystemPaletteUse",
-4383: "gdi32.dll!NtGdiSetupPublicCFONT",
-4384: "gdi32.dll!NtGdiSetVirtualResolution",
-4385: "gdi32.dll!NtGdiSetSizeDevice",
-4386: "gdi32.dll!NtGdiStartDoc",
-4387: "gdi32.dll!NtGdiStartPage",
-4388: "gdi32.dll!NtGdiStretchBlt",
-4389: "gdi32.dll!NtGdiStretchDIBitsInternal",
-4390: "gdi32.dll!NtGdiStrokeAndFillPath",
-4391: "gdi32.dll!NtGdiStrokePath",
-4392: "gdi32.dll!NtGdiSwapBuffers",
-4393: "gdi32.dll!NtGdiTransformPoints",
-4394: "gdi32.dll!NtGdiTransparentBlt",
-4395: "gdi32.dll!NtGdiUnloadPrinterDriver",
-4397: "gdi32.dll!NtGdiUnrealizeObject",
-4398: "gdi32.dll!NtGdiUpdateColors",
-4399: "gdi32.dll!NtGdiWidenPath",
-4400: "user32.dll!NtUserActivateKeyboardLayout",
-4401: "user32.dll!NtUserAlterWindowStyle",
-4402: "imm32.dll!NtUserAssociateInputContext",
-4403: "user32.dll!NtUserAttachThreadInput",
-4404: "user32.dll!NtUserBeginPaint",
-4405: "user32.dll!NtUserBitBltSysBmp",
-4406: "user32.dll!NtUserBlockInput",
-4407: "imm32.dll!NtUserBuildHimcList",
-4408: "user32.dll!NtUserBuildHwndList",
-4409: "user32.dll!NtUserBuildNameList",
-4410: "user32.dll!NtUserBuildPropList",
-4411: "user32.dll!NtUserCallHwnd",
-4412: "user32.dll!NtUserCallHwndLock",
-4413: "user32.dll!NtUserCallHwndOpt",
-4414: "user32.dll!NtUserCallHwndParam",
-4415: "user32.dll!NtUserCallHwndParamLock",
-4416: "user32.dll!NtUserCallMsgFilter",
-4417: "user32.dll!NtUserCallNextHookEx",
-4418: "user32.dll!NtUserCallNoParam",
-4419: "imm32.dll!NtUserCallOneParam",
-4419: "user32.dll!NtUserCallOneParam",
-4420: "user32.dll!NtUserCallTwoParam",
-4421: "user32.dll!NtUserChangeClipboardChain",
-4422: "user32.dll!NtUserChangeDisplaySettings",
-4424: "user32.dll!NtUserCheckMenuItem",
-4425: "user32.dll!NtUserChildWindowFromPointEx",
-4426: "user32.dll!NtUserClipCursor",
-4427: "user32.dll!NtUserCloseClipboard",
-4428: "user32.dll!NtUserCloseDesktop",
-4429: "user32.dll!NtUserCloseWindowStation",
-4431: "user32.dll!NtUserConvertMemHandle",
-4432: "user32.dll!NtUserCopyAcceleratorTable",
-4433: "user32.dll!NtUserCountClipboardFormats",
-4434: "user32.dll!NtUserCreateAcceleratorTable",
-4435: "user32.dll!NtUserCreateCaret",
-4436: "user32.dll!NtUserCreateDesktop",
-4437: "imm32.dll!NtUserCreateInputContext",
-4438: "user32.dll!NtUserCreateLocalMemHandle",
-4439: "user32.dll!NtUserCreateWindowEx",
-4440: "user32.dll!NtUserCreateWindowStation",
-4441: "user32.dll!NtUserDdeGetQualityOfService",
-4442: "user32.dll!NtUserDdeInitialize",
-4443: "user32.dll!NtUserDdeSetQualityOfService",
-4444: "user32.dll!NtUserDeferWindowPos",
-4445: "user32.dll!NtUserDefSetText",
-4446: "user32.dll!NtUserDeleteMenu",
-4447: "user32.dll!DestroyAcceleratorTable",
-4448: "user32.dll!NtUserDestroyCursor",
-4449: "imm32.dll!NtUserDestroyInputContext",
-4450: "user32.dll!NtUserDestroyMenu",
-4451: "user32.dll!NtUserDestroyWindow",
-4452: "imm32.dll!NtUserDisableThreadIme",
-4453: "user32.dll!NtUserDispatchMessage",
-4454: "user32.dll!NtUserDragDetect",
-4455: "user32.dll!NtUserDragObject",
-4456: "user32.dll!NtUserDrawAnimatedRects",
-4457: "user32.dll!NtUserDrawCaption",
-4458: "user32.dll!NtUserDrawCaptionTemp",
-4459: "user32.dll!NtUserDrawIconEx",
-4460: "user32.dll!NtUserDrawMenuBarTemp",
-4461: "user32.dll!NtUserEmptyClipboard",
-4462: "user32.dll!NtUserEnableMenuItem",
-4463: "user32.dll!NtUserEnableScrollBar",
-4464: "user32.dll!NtUserEndDeferWindowPosEx",
-4465: "user32.dll!NtUserEndMenu",
-4466: "user32.dll!NtUserEndPaint",
-4467: "user32.dll!NtUserEnumDisplayDevices",
-4468: "user32.dll!NtUserEnumDisplayMonitors",
-4469: "user32.dll!NtUserEnumDisplaySettings",
-4470: "user32.dll!NtUserEvent",
-4471: "user32.dll!NtUserExcludeUpdateRgn",
-4472: "user32.dll!NtUserFillWindow",
-4473: "user32.dll!NtUserFindExistingCursorIcon",
-4474: "user32.dll!NtUserFindWindowEx",
-4475: "user32.dll!NtUserFlashWindowEx",
-4476: "user32.dll!NtUserGetAltTabInfo",
-4477: "user32.dll!NtUserGetAncestor",
-4478: "imm32.dll!NtUserGetAppImeLevel",
-4479: "user32.dll!GetAsyncKeyState",
-4480: "user32.dll!NtUserGetAtomName",
-4481: "user32.dll!NtUserGetCaretBlinkTime",
-4482: "user32.dll!NtUserGetCaretPos",
-4483: "user32.dll!NtUserGetClassInfo",
-4484: "user32.dll!NtUserGetClassName",
-4485: "user32.dll!NtUserGetClipboardData",
-4486: "user32.dll!NtUserGetClipboardFormatName",
-4487: "user32.dll!NtUserGetClipboardOwner",
-4488: "user32.dll!NtUserGetClipboardSequenceNumber",
-4489: "user32.dll!NtUserGetClipboardViewer",
-4490: "user32.dll!NtUserGetClipCursor",
-4491: "user32.dll!NtUserGetComboBoxInfo",
-4492: "user32.dll!NtUserGetControlBrush",
-4493: "user32.dll!NtUserGetControlColor",
-4494: "user32.dll!NtUserGetCPD",
-4495: "user32.dll!NtUserGetCursorFrameInfo",
-4496: "user32.dll!NtUserGetCursorInfo",
-4497: "user32.dll!NtUserGetDC",
-4498: "user32.dll!NtUserGetDCEx",
-4499: "user32.dll!NtUserGetDoubleClickTime",
-4500: "user32.dll!NtUserGetForegroundWindow",
-4501: "user32.dll!NtUserGetGuiResources",
-4502: "user32.dll!NtUserGetGUIThreadInfo",
-4503: "user32.dll!NtUserGetIconInfo",
-4504: "user32.dll!NtUserGetIconSize",
-4505: "imm32.dll!NtUserGetImeHotKey",
-4505: "user32.dll!NtUserGetImeHotKey",
-4506: "imm32.dll!NtUserGetImeInfoEx",
-4507: "user32.dll!NtUserGetInternalWindowPos",
-4508: "user32.dll!NtUserGetKeyboardLayoutList",
-4509: "user32.dll!NtUserGetKeyboardLayoutName",
-4510: "user32.dll!NtUserGetKeyboardState",
-4511: "user32.dll!NtUserGetKeyNameText",
-4512: "user32.dll!NtUserGetKeyState",
-4513: "user32.dll!NtUserGetListBoxInfo",
-4514: "user32.dll!NtUserGetMenuBarInfo",
-4515: "user32.dll!NtUserGetMenuIndex",
-4516: "user32.dll!NtUserGetMenuItemRect",
-4517: "user32.dll!NtUserGetMessage",
-4518: "user32.dll!NtUserGetMouseMovePointsEx",
-4519: "user32.dll!NtUserGetObjectInformation",
-4520: "user32.dll!NtUserGetOpenClipboardWindow",
-4521: "user32.dll!NtUserGetPriorityClipboardFormat",
-4522: "user32.dll!NtUserGetProcessWindowStation",
-4523: "user32.dll!NtUserGetRawInputBuffer",
-4524: "user32.dll!NtUserGetRawInputData",
-4525: "user32.dll!NtUserGetRawInputDeviceInfo",
-4526: "user32.dll!NtUserGetRawInputDeviceList",
-4527: "user32.dll!NtUserGetRegisteredRawInputDevices",
-4528: "user32.dll!NtUserGetScrollBarInfo",
-4529: "user32.dll!NtUserGetSystemMenu",
-4530: "user32.dll!NtUserGetThreadDesktop",
-4531: "imm32.dll!NtUserGetThreadState",
-4531: "user32.dll!NtUserGetThreadState",
-4532: "user32.dll!NtUserGetTitleBarInfo",
-4533: "user32.dll!GetUpdateRect",
-4534: "user32.dll!GetUpdateRgn",
-4535: "user32.dll!NtUserGetWindowDC",
-4536: "user32.dll!NtUserGetWindowPlacement",
-4537: "user32.dll!NtUserGetWOWClass",
-4539: "user32.dll!NtUserHideCaret",
-4540: "user32.dll!NtUserHiliteMenuItem",
-4541: "user32.dll!NtUserImpersonateDdeClientWindow",
-4543: "user32.dll!NtUserInitializeClientPfnArrays",
-4544: "user32.dll!NtUserInitTask",
-4545: "user32.dll!NtUserInternalGetWindowText",
-4546: "user32.dll!NtUserInvalidateRect",
-4547: "user32.dll!NtUserInvalidateRgn",
-4548: "user32.dll!NtUserIsClipboardFormatAvailable",
-4549: "user32.dll!NtUserKillTimer",
-4550: "user32.dll!NtUserLoadKeyboardLayoutEx",
-4551: "user32.dll!NtUserLockWindowStation",
-4552: "user32.dll!NtUserLockWindowUpdate",
-4553: "user32.dll!NtUserLockWorkStation",
-4554: "user32.dll!NtUserMapVirtualKeyEx",
-4555: "user32.dll!NtUserMenuItemFromPoint",
-4556: "user32.dll!NtUserMessageCall",
-4557: "user32.dll!NtUserMinMaximize",
-4558: "user32.dll!NtUserMNDragLeave",
-4559: "user32.dll!NtUserMNDragOver",
-4560: "user32.dll!NtUserModifyUserStartupInfoFlags",
-4561: "user32.dll!NtUserMoveWindow",
-4562: "imm32.dll!NtUserNotifyIMEStatus",
-4562: "user32.dll!NtUserNotifyIMEStatus",
-4564: "user32.dll!NtUserNotifyWinEvent",
-4565: "user32.dll!NtUserOpenClipboard",
-4566: "user32.dll!NtUserOpenDesktop",
-4567: "user32.dll!NtUserOpenInputDesktop",
-4568: "user32.dll!NtUserOpenWindowStation",
-4569: "user32.dll!NtUserPaintDesktop",
-4570: "user32.dll!PeekMessageW",
-4571: "user32.dll!NtUserPostMessage",
-4572: "user32.dll!NtUserPostThreadMessage",
-4573: "user32.dll!NtUserPrintWindow",
-4574: "user32.dll!NtUserProcessConnect",
-4576: "imm32.dll!NtUserQueryInputContext",
-4577: "user32.dll!NtUserQuerySendMessage",
-4578: "user32.dll!NtUserQueryUserCounters",
-4579: "imm32.dll!NtUserQueryWindow",
-4579: "user32.dll!NtUserQueryWindow",
-4580: "user32.dll!NtUserRealChildWindowFromPoint",
-4581: "user32.dll!NtUserRealInternalGetMessage",
-4582: "user32.dll!NtUserRealWaitMessageEx",
-4583: "user32.dll!NtUserRedrawWindow",
-4584: "user32.dll!NtUserRegisterClassExWOW",
-4585: "user32.dll!NtUserRegisterUserApiHook",
-4586: "user32.dll!NtUserRegisterHotKey",
-4587: "user32.dll!NtUserRegisterRawInputDevices",
-4588: "user32.dll!NtUserRegisterTasklist",
-4589: "user32.dll!NtUserRegisterWindowMessage",
-4590: "user32.dll!NtUserRemoveMenu",
-4591: "user32.dll!NtUserRemoveProp",
-4593: "user32.dll!NtUserResolveDesktopForWOW",
-4594: "user32.dll!NtUserSBGetParms",
-4595: "user32.dll!ScrollDC",
-4596: "user32.dll!NtUserScrollWindowEx",
-4597: "gdi32.dll!NtUserSelectPalette",
-4598: "user32.dll!NtUserSendInput",
-4599: "user32.dll!NtUserSetActiveWindow",
-4600: "imm32.dll!NtUserSetAppImeLevel",
-4601: "user32.dll!NtUserSetCapture",
-4602: "user32.dll!NtUserSetClassLong",
-4603: "user32.dll!NtUserSetClassWord",
-4604: "user32.dll!NtUserSetClipboardData",
-4605: "user32.dll!NtUserSetClipboardViewer",
-4606: "user32.dll!NtUserSetConsoleReserveKeys",
-4607: "user32.dll!NtUserSetCursor",
-4608: "user32.dll!NtUserSetCursorContents",
-4609: "user32.dll!NtUserSetCursorIconData",
-4610: "user32.dll!NtUserSetDbgTag",
-4611: "user32.dll!NtUserSetFocus",
-4612: "user32.dll!NtUserSetImeHotKey",
-4613: "imm32.dll!NtUserSetImeInfoEx",
-4614: "user32.dll!NtUserSetImeOwnerWindow",
-4616: "user32.dll!NtUserSetInformationThread",
-4617: "user32.dll!NtUserSetInternalWindowPos",
-4618: "user32.dll!NtUserSetKeyboardState",
-4619: "user32.dll!NtUserSetLogonNotifyWindow",
-4620: "user32.dll!NtUserSetMenu",
-4621: "user32.dll!NtUserSetMenuContextHelpId",
-4622: "user32.dll!NtUserSetMenuDefaultItem",
-4623: "user32.dll!NtUserSetMenuFlagRtoL",
-4624: "user32.dll!NtUserSetObjectInformation",
-4625: "user32.dll!NtUserSetParent",
-4626: "user32.dll!NtUserSetProcessWindowStation",
-4627: "user32.dll!NtUserSetProp",
-4628: "user32.dll!NtUserSetRipFlags",
-4629: "user32.dll!NtUserSetScrollInfo",
-4630: "user32.dll!NtUserSetShellWindowEx",
-4631: "user32.dll!NtUserSetSysColors",
-4632: "user32.dll!NtUserSetSystemCursor",
-4633: "user32.dll!NtUserSetSystemMenu",
-4634: "user32.dll!NtUserSetSystemTimer",
-4635: "user32.dll!NtUserSetThreadDesktop",
-4636: "imm32.dll!NtUserSetThreadLayoutHandles",
-4637: "user32.dll!NtUserSetThreadState",
-4638: "user32.dll!NtUserSetTimer",
-4639: "user32.dll!NtUserSetWindowFNID",
-4640: "user32.dll!NtUserSetWindowLong",
-4641: "user32.dll!NtUserSetWindowPlacement",
-4642: "user32.dll!NtUserSetWindowPos",
-4643: "user32.dll!NtUserSetWindowRgn",
-4644: "user32.dll!NtUserSetWindowsHookAW",
-4645: "user32.dll!NtUserSetWindowsHookEx",
-4646: "user32.dll!NtUserSetWindowStationUser",
-4647: "user32.dll!NtUserSetWindowWord",
-4648: "user32.dll!NtUserSetWinEventHook",
-4649: "user32.dll!NtUserShowCaret",
-4650: "user32.dll!NtUserShowScrollBar",
-4651: "user32.dll!NtUserShowWindow",
-4652: "user32.dll!NtUserShowWindowAsync",
-4654: "user32.dll!NtUserSwitchDesktop",
-4655: "user32.dll!NtUserSystemParametersInfo",
-4657: "user32.dll!NtUserThunkedMenuInfo",
-4658: "user32.dll!NtUserThunkedMenuItemInfo",
-4659: "user32.dll!NtUserToUnicodeEx",
-4660: "user32.dll!NtUserTrackMouseEvent",
-4661: "user32.dll!NtUserTrackPopupMenuEx",
-4662: "user32.dll!NtUserCalcMenuBar",
-4663: "user32.dll!NtUserPaintMenuBar",
-4664: "user32.dll!TranslateAcceleratorA",
-4665: "user32.dll!NtUserTranslateMessage",
-4666: "user32.dll!NtUserUnhookWindowsHookEx",
-4667: "user32.dll!NtUserUnhookWinEvent",
-4668: "user32.dll!NtUserUnloadKeyboardLayout",
-4669: "user32.dll!NtUserUnlockWindowStation",
-4670: "user32.dll!NtUserUnregisterClass",
-4671: "user32.dll!NtUserUnregisterUserApiHook",
-4672: "user32.dll!NtUserUnregisterHotKey",
-4673: "imm32.dll!NtUserUpdateInputContext",
-4673: "user32.dll!NtUserUpdateInputContext",
-4674: "user32.dll!NtUserUpdateInstance",
-4675: "user32.dll!NtUserUpdateLayeredWindow",
-4676: "user32.dll!NtUserGetLayeredWindowAttributes",
-4677: "user32.dll!NtUserSetLayeredWindowAttributes",
-4678: "user32.dll!NtUserUpdatePerUserSystemParameters",
-4679: "user32.dll!NtUserUserHandleGrantAccess",
-4680: "imm32.dll!NtUserValidateHandleSecure",
-4680: "user32.dll!NtUserValidateHandleSecure",
-4681: "user32.dll!NtUserValidateRect",
-4682: "user32.dll!NtUserValidateTimerCallback",
-4683: "user32.dll!NtUserVkKeyScanEx",
-4684: "user32.dll!NtUserWaitForInputIdle",
-4685: "user32.dll!NtUserWaitForMsgAndEvent",
-4686: "user32.dll!NtUserWaitMessage",
-4687: "user32.dll!NtUserWin32PoolAllocationStats",
-4688: "user32.dll!NtUserWindowFromPoint",
-4689: "user32.dll!NtUserYieldTask",
-4695: "gdi32.dll!NtGdiEngAssociateSurface",
-4696: "gdi32.dll!NtGdiEngCreateBitmap",
-4697: "gdi32.dll!NtGdiEngCreateDeviceSurface",
-4698: "gdi32.dll!NtGdiEngCreateDeviceBitmap",
-4699: "gdi32.dll!NtGdiEngCreatePalette",
-4700: "gdi32.dll!NtGdiEngComputeGlyphSet",
-4701: "gdi32.dll!NtGdiEngCopyBits",
-4702: "gdi32.dll!NtGdiEngDeletePalette",
-4703: "gdi32.dll!NtGdiEngDeleteSurface",
-4704: "gdi32.dll!NtGdiEngEraseSurface",
-4705: "gdi32.dll!NtGdiEngUnlockSurface",
-4706: "gdi32.dll!NtGdiEngLockSurface",
-4707: "gdi32.dll!NtGdiEngBitBlt",
-4708: "gdi32.dll!NtGdiEngStretchBlt",
-4709: "gdi32.dll!NtGdiEngPlgBlt",
-4710: "gdi32.dll!NtGdiEngMarkBandingSurface",
-4711: "gdi32.dll!NtGdiEngStrokePath",
-4712: "gdi32.dll!NtGdiEngFillPath",
-4713: "gdi32.dll!NtGdiEngStrokeAndFillPath",
-4714: "gdi32.dll!NtGdiEngPaint",
-4715: "gdi32.dll!NtGdiEngLineTo",
-4716: "gdi32.dll!NtGdiEngAlphaBlend",
-4717: "gdi32.dll!NtGdiEngGradientFill",
-4718: "gdi32.dll!NtGdiEngTransparentBlt",
-4719: "gdi32.dll!NtGdiEngTextOut",
-4720: "gdi32.dll!NtGdiEngStretchBltROP",
-4721: "gdi32.dll!NtGdiXLATEOBJ_cGetPalette",
-4722: "gdi32.dll!NtGdiXLATEOBJ_iXlate",
-4723: "gdi32.dll!NtGdiXLATEOBJ_hGetColorTransform",
-4724: "gdi32.dll!NtGdiCLIPOBJ_bEnum",
-4725: "gdi32.dll!NtGdiCLIPOBJ_cEnumStart",
-4726: "gdi32.dll!NtGdiCLIPOBJ_ppoGetPath",
-4727: "gdi32.dll!NtGdiEngDeletePath",
-4728: "gdi32.dll!NtGdiEngCreateClip",
-4729: "gdi32.dll!NtGdiEngDeleteClip",
-4730: "gdi32.dll!NtGdiBRUSHOBJ_ulGetBrushColor",
-4731: "gdi32.dll!NtGdiBRUSHOBJ_pvAllocRbrush",
-4732: "gdi32.dll!NtGdiBRUSHOBJ_pvGetRbrush",
-4733: "gdi32.dll!NtGdiBRUSHOBJ_hGetColorTransform",
-4734: "gdi32.dll!NtGdiXFORMOBJ_bApplyXform",
-4735: "gdi32.dll!NtGdiXFORMOBJ_iGetXform",
-4736: "gdi32.dll!NtGdiFONTOBJ_vGetInfo",
-4737: "gdi32.dll!NtGdiFONTOBJ_pxoGetXform",
-4738: "gdi32.dll!NtGdiFONTOBJ_cGetGlyphs",
-4739: "gdi32.dll!NtGdiFONTOBJ_pifi",
-4740: "gdi32.dll!NtGdiFONTOBJ_pfdg",
-4741: "gdi32.dll!NtGdiFONTOBJ_pQueryGlyphAttrs",
-4742: "gdi32.dll!NtGdiFONTOBJ_pvTrueTypeFontFile",
-4743: "gdi32.dll!NtGdiFONTOBJ_cGetAllGlyphHandles",
-4744: "gdi32.dll!NtGdiSTROBJ_bEnum",
-4745: "gdi32.dll!NtGdiSTROBJ_bEnumPositionsOnly",
-4746: "gdi32.dll!NtGdiSTROBJ_bGetAdvanceWidths",
-4747: "gdi32.dll!NtGdiSTROBJ_vEnumStart",
-4748: "gdi32.dll!NtGdiSTROBJ_dwGetCodePage",
-4749: "gdi32.dll!NtGdiPATHOBJ_vGetBounds",
-4750: "gdi32.dll!NtGdiPATHOBJ_bEnum",
-4751: "gdi32.dll!NtGdiPATHOBJ_vEnumStart",
-4752: "gdi32.dll!NtGdiPATHOBJ_vEnumStartClipLines",
-4753: "gdi32.dll!NtGdiPATHOBJ_bEnumClipLines",
-4754: "gdi32.dll!NtGdiGetDhpdev",
-4755: "gdi32.dll!NtGdiEngCheckAbort",
-4756: "gdi32.dll!NtGdiHT_Get8BPPFormatPalette",
-4757: "gdi32.dll!NtGdiHT_Get8BPPMaskPalette",
-4758: "gdi32.dll!NtGdiUpdateTransform",
-4759: "gdi32.dll!NtGdiSetPUMPDOBJ",
-4760: "gdi32.dll!NtGdiBRUSHOBJ_DeleteRbrush",
-4761: "gdi32.dll!NtGdiUMPDEngFreeUserMem",
-4762: "gdi32.dll!NtGdiDrawStream",
-}
diff --git a/chromium/tools/traceline/traceline/sidestep/ia32_modrm_map.cc b/chromium/tools/traceline/traceline/sidestep/ia32_modrm_map.cc
deleted file mode 100644
index e1aeec6765d..00000000000
--- a/chromium/tools/traceline/traceline/sidestep/ia32_modrm_map.cc
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright (c) 2012 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.
-
-// Table of relevant information about how to decode the ModR/M byte.
-// Based on information in the IA-32 Intel Architecture
-// Software Developer's Manual Volume 2: Instruction Set Reference.
-
-#include "sidestep/mini_disassembler.h"
-#include "sidestep/mini_disassembler_types.h"
-
-namespace sidestep {
-
-const ModrmEntry MiniDisassembler::s_ia16_modrm_map_[] = {
-// mod == 00
- /* r/m == 000 */ { false, false, OS_ZERO },
- /* r/m == 001 */ { false, false, OS_ZERO },
- /* r/m == 010 */ { false, false, OS_ZERO },
- /* r/m == 011 */ { false, false, OS_ZERO },
- /* r/m == 100 */ { false, false, OS_ZERO },
- /* r/m == 101 */ { false, false, OS_ZERO },
- /* r/m == 110 */ { true, false, OS_WORD },
- /* r/m == 111 */ { false, false, OS_ZERO },
-// mod == 01
- /* r/m == 000 */ { true, false, OS_BYTE },
- /* r/m == 001 */ { true, false, OS_BYTE },
- /* r/m == 010 */ { true, false, OS_BYTE },
- /* r/m == 011 */ { true, false, OS_BYTE },
- /* r/m == 100 */ { true, false, OS_BYTE },
- /* r/m == 101 */ { true, false, OS_BYTE },
- /* r/m == 110 */ { true, false, OS_BYTE },
- /* r/m == 111 */ { true, false, OS_BYTE },
-// mod == 10
- /* r/m == 000 */ { true, false, OS_WORD },
- /* r/m == 001 */ { true, false, OS_WORD },
- /* r/m == 010 */ { true, false, OS_WORD },
- /* r/m == 011 */ { true, false, OS_WORD },
- /* r/m == 100 */ { true, false, OS_WORD },
- /* r/m == 101 */ { true, false, OS_WORD },
- /* r/m == 110 */ { true, false, OS_WORD },
- /* r/m == 111 */ { true, false, OS_WORD },
-// mod == 11
- /* r/m == 000 */ { false, false, OS_ZERO },
- /* r/m == 001 */ { false, false, OS_ZERO },
- /* r/m == 010 */ { false, false, OS_ZERO },
- /* r/m == 011 */ { false, false, OS_ZERO },
- /* r/m == 100 */ { false, false, OS_ZERO },
- /* r/m == 101 */ { false, false, OS_ZERO },
- /* r/m == 110 */ { false, false, OS_ZERO },
- /* r/m == 111 */ { false, false, OS_ZERO }
-};
-
-const ModrmEntry MiniDisassembler::s_ia32_modrm_map_[] = {
-// mod == 00
- /* r/m == 000 */ { false, false, OS_ZERO },
- /* r/m == 001 */ { false, false, OS_ZERO },
- /* r/m == 010 */ { false, false, OS_ZERO },
- /* r/m == 011 */ { false, false, OS_ZERO },
- /* r/m == 100 */ { false, true, OS_ZERO },
- /* r/m == 101 */ { true, false, OS_DOUBLE_WORD },
- /* r/m == 110 */ { false, false, OS_ZERO },
- /* r/m == 111 */ { false, false, OS_ZERO },
-// mod == 01
- /* r/m == 000 */ { true, false, OS_BYTE },
- /* r/m == 001 */ { true, false, OS_BYTE },
- /* r/m == 010 */ { true, false, OS_BYTE },
- /* r/m == 011 */ { true, false, OS_BYTE },
- /* r/m == 100 */ { true, true, OS_BYTE },
- /* r/m == 101 */ { true, false, OS_BYTE },
- /* r/m == 110 */ { true, false, OS_BYTE },
- /* r/m == 111 */ { true, false, OS_BYTE },
-// mod == 10
- /* r/m == 000 */ { true, false, OS_DOUBLE_WORD },
- /* r/m == 001 */ { true, false, OS_DOUBLE_WORD },
- /* r/m == 010 */ { true, false, OS_DOUBLE_WORD },
- /* r/m == 011 */ { true, false, OS_DOUBLE_WORD },
- /* r/m == 100 */ { true, true, OS_DOUBLE_WORD },
- /* r/m == 101 */ { true, false, OS_DOUBLE_WORD },
- /* r/m == 110 */ { true, false, OS_DOUBLE_WORD },
- /* r/m == 111 */ { true, false, OS_DOUBLE_WORD },
-// mod == 11
- /* r/m == 000 */ { false, false, OS_ZERO },
- /* r/m == 001 */ { false, false, OS_ZERO },
- /* r/m == 010 */ { false, false, OS_ZERO },
- /* r/m == 011 */ { false, false, OS_ZERO },
- /* r/m == 100 */ { false, false, OS_ZERO },
- /* r/m == 101 */ { false, false, OS_ZERO },
- /* r/m == 110 */ { false, false, OS_ZERO },
- /* r/m == 111 */ { false, false, OS_ZERO },
-};
-
-}; // namespace sidestep
diff --git a/chromium/tools/traceline/traceline/sidestep/ia32_opcode_map.cc b/chromium/tools/traceline/traceline/sidestep/ia32_opcode_map.cc
deleted file mode 100644
index 4600cfa25b9..00000000000
--- a/chromium/tools/traceline/traceline/sidestep/ia32_opcode_map.cc
+++ /dev/null
@@ -1,1159 +0,0 @@
-// Copyright (c) 2012 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.
-
-// Opcode decoding maps. Based on the IA-32 Intel Architecture
-// Software Developer's Manual Volume 2: Instruction Set Reference. Idea
-// for how to lay out the tables in memory taken from the implementation
-// in the Bastard disassembly environment.
-
-#include "sidestep/mini_disassembler.h"
-
-namespace sidestep {
-
-/*
-* This is the first table to be searched; the first field of each
-* Opcode in the table is either 0 to indicate you're in the
-* right table, or an index to the correct table, in the global
-* map g_pentiumOpcodeMap
-*/
-const Opcode s_first_opcode_byte[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xE */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF */ { 1, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x10 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x11 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x12 */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x13 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x14 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x15 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x16 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x17 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x18 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x19 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1A */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1B */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1C */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1D */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1E */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1F */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x20 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x21 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x22 */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x23 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x24 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x25 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x26 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x27 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "daa", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x28 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x29 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2A */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2B */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2C */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2D */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2E */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2F */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "das", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x30 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x31 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x32 */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x33 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x34 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x35 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x36 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x37 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "aaa", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x38 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x39 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3A */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3B */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3C */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3D */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3E */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3F */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "aas", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x40 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x41 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x42 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x43 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x44 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x45 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x46 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x47 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x48 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x49 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4A */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4B */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4C */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4D */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4E */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4F */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x50 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x51 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x52 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x53 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x54 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x55 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x56 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x57 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x58 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x59 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5A */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5B */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5C */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5D */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5E */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5F */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x60 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "pushad", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x61 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "popad", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x62 */ { 0, IT_GENERIC, AM_G | OT_V, AM_M | OT_A, AM_NOT_USED, "bound", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x63 */ { 0, IT_GENERIC, AM_E | OT_W, AM_G | OT_W, AM_NOT_USED, "arpl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x64 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x65 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x66 */ { 0, IT_PREFIX_OPERAND, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x67 */ { 0, IT_PREFIX_ADDRESS, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x68 */ { 0, IT_GENERIC, AM_I | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x69 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_I | OT_V, "imul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6A */ { 0, IT_GENERIC, AM_I | OT_B, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6B */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_I | OT_B, "imul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6C */ { 0, IT_GENERIC, AM_Y | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "insb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6D */ { 0, IT_GENERIC, AM_Y | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "insd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6E */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_X | OT_B, AM_NOT_USED, "outsb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6F */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_X | OT_V, AM_NOT_USED, "outsb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x70 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x71 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jno", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x72 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x73 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jnc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x74 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x75 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jnz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x76 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jbe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x77 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "ja", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x78 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "js", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x79 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jns", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7A */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jpe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7B */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jpo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7C */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7D */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jge", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7E */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jle", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7F */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x80 */ { 2, IT_REFERENCE, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x81 */ { 3, IT_REFERENCE, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x82 */ { 4, IT_REFERENCE, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x83 */ { 5, IT_REFERENCE, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x84 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x85 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x86 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x87 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x88 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x89 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8A */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8B */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8C */ { 0, IT_GENERIC, AM_E | OT_W, AM_S | OT_W, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8D */ { 0, IT_GENERIC, AM_G | OT_V, AM_M | OT_ADDRESS_MODE_M, AM_NOT_USED, "lea", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8E */ { 0, IT_GENERIC, AM_S | OT_W, AM_E | OT_W, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8F */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x90 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "nop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x91 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x92 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x93 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x94 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x95 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x96 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x97 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x98 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "cwde", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x99 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "cdq", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9A */ { 0, IT_JUMP, AM_A | OT_P, AM_NOT_USED, AM_NOT_USED, "callf", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9B */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "wait", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9C */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "pushfd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9D */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "popfd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9E */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "sahf", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9F */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "lahf", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA0 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_O | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA1 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_O | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA2 */ { 0, IT_GENERIC, AM_O | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA3 */ { 0, IT_GENERIC, AM_O | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA4 */ { 0, IT_GENERIC, AM_X | OT_B, AM_Y | OT_B, AM_NOT_USED, "movsb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA5 */ { 0, IT_GENERIC, AM_X | OT_V, AM_Y | OT_V, AM_NOT_USED, "movsd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA6 */ { 0, IT_GENERIC, AM_X | OT_B, AM_Y | OT_B, AM_NOT_USED, "cmpsb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA7 */ { 0, IT_GENERIC, AM_X | OT_V, AM_Y | OT_V, AM_NOT_USED, "cmpsd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA8 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA9 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xAA */ { 0, IT_GENERIC, AM_Y | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "stosb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xAB */ { 0, IT_GENERIC, AM_Y | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "stosd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xAC */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_X| OT_B, AM_NOT_USED, "lodsb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xAD */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_X| OT_V, AM_NOT_USED, "lodsd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xAE */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_Y | OT_B, AM_NOT_USED, "scasb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xAF */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_Y | OT_V, AM_NOT_USED, "scasd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB0 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB1 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB2 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB3 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB4 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB5 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB6 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB7 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB8 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB9 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xBA */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xBB */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xBC */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xBD */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xBE */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xBF */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC0 */ { 6, IT_REFERENCE, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC1 */ { 7, IT_REFERENCE, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC2 */ { 0, IT_RETURN, AM_I | OT_W, AM_NOT_USED, AM_NOT_USED, "ret", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC3 */ { 0, IT_RETURN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "ret", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC4 */ { 0, IT_GENERIC, AM_G | OT_V, AM_M | OT_P, AM_NOT_USED, "les", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC5 */ { 0, IT_GENERIC, AM_G | OT_V, AM_M | OT_P, AM_NOT_USED, "lds", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC6 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC8 */ { 0, IT_GENERIC, AM_I | OT_W, AM_I | OT_B, AM_NOT_USED, "enter", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC9 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "leave", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xCA */ { 0, IT_RETURN, AM_I | OT_W, AM_NOT_USED, AM_NOT_USED, "retf", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xCB */ { 0, IT_RETURN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "retf", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xCC */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "int3", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xCD */ { 0, IT_GENERIC, AM_I | OT_B, AM_NOT_USED, AM_NOT_USED, "int", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xCE */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "into", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xCF */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "iret", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD0 */ { 8, IT_REFERENCE, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD1 */ { 9, IT_REFERENCE, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD2 */ { 10, IT_REFERENCE, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD3 */ { 11, IT_REFERENCE, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD4 */ { 0, IT_GENERIC, AM_I | OT_B, AM_NOT_USED, AM_NOT_USED, "aam", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD5 */ { 0, IT_GENERIC, AM_I | OT_B, AM_NOT_USED, AM_NOT_USED, "aad", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD6 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD7 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "xlat", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
-
- // The following 8 lines would be references to the FPU tables, but we currently
- // do not support the FPU instructions in this disassembler.
-
- /* 0xD8 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD9 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xDA */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xDB */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xDC */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xDD */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xDE */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xDF */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
-
-
- /* 0xE0 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "loopnz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xE1 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "loopz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xE2 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "loop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xE3 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jcxz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xE4 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "in", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xE5 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "in", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xE6 */ { 0, IT_GENERIC, AM_I | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "out", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xE7 */ { 0, IT_GENERIC, AM_I | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "out", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xE8 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "call", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xE9 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xEA */ { 0, IT_JUMP, AM_A | OT_P, AM_NOT_USED, AM_NOT_USED, "jmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xEB */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xEC */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_REGISTER | OT_W, AM_NOT_USED, "in", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xED */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_W, AM_NOT_USED, "in", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xEE */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_REGISTER | OT_B, AM_NOT_USED, "out", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xEF */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_REGISTER | OT_V, AM_NOT_USED, "out", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF0 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "lock:", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF1 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF2 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "repne:", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF3 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "rep:", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF4 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "hlt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF5 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "cmc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF6 */ { 12, IT_REFERENCE, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF7 */ { 13, IT_REFERENCE, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF8 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "clc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF9 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "stc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xFA */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "cli", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xFB */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "sti", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xFC */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "cld", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xFD */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "std", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xFE */ { 14, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xFF */ { 15, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_0f[] = {
- /* 0x0 */ { 16, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 17, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_W, AM_NOT_USED, "lar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_W, AM_NOT_USED, "lsl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "clts", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "invd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "wbinvd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "ud2", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xE */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x10 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "movups", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "movsd" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "movss" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "movupd" } },
- /* 0x11 */ { 0, IT_GENERIC, AM_W | OT_PS, AM_V | OT_PS, AM_NOT_USED, "movups", true,
- /* F2h */ { 0, IT_GENERIC, AM_W | OT_SD, AM_V | OT_SD, AM_NOT_USED, "movsd" },
- /* F3h */ { 0, IT_GENERIC, AM_W | OT_SS, AM_V | OT_SS, AM_NOT_USED, "movss" },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_PD, AM_V | OT_PD, AM_NOT_USED, "movupd" } },
- /* 0x12 */ { 0, IT_GENERIC, AM_W | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movlps", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movhlps" }, // only one of ...
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movhlps" }, // ...these two is correct, Intel doesn't specify which
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_W | OT_S, AM_NOT_USED, "movlpd" } },
- /* 0x13 */ { 0, IT_GENERIC, AM_V | OT_Q, AM_W | OT_Q, AM_NOT_USED, "movlps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_W | OT_Q, AM_NOT_USED, "movlpd" } },
- /* 0x14 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_Q, AM_NOT_USED, "unpcklps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_Q, AM_NOT_USED, "unpcklpd" } },
- /* 0x15 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_Q, AM_NOT_USED, "unpckhps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_Q, AM_NOT_USED, "unpckhpd" } },
- /* 0x16 */ { 0, IT_GENERIC, AM_V | OT_Q, AM_W | OT_Q, AM_NOT_USED, "movhps", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movlhps" }, // only one of...
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movlhps" }, // ...these two is correct, Intel doesn't specify which
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_W | OT_Q, AM_NOT_USED, "movhpd" } },
- /* 0x17 */ { 0, IT_GENERIC, AM_W | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movhps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movhpd" } },
- /* 0x18 */ { 18, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x19 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1A */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1B */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1C */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1D */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1E */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1F */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x20 */ { 0, IT_GENERIC, AM_R | OT_D, AM_C | OT_D, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x21 */ { 0, IT_GENERIC, AM_R | OT_D, AM_D | OT_D, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x22 */ { 0, IT_GENERIC, AM_C | OT_D, AM_R | OT_D, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x23 */ { 0, IT_GENERIC, AM_D | OT_D, AM_R | OT_D, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x24 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x25 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x26 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x27 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x28 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "movaps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "movapd" } },
- /* 0x29 */ { 0, IT_GENERIC, AM_W | OT_PS, AM_V | OT_PS, AM_NOT_USED, "movaps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_PD, AM_V | OT_PD, AM_NOT_USED, "movapd" } },
- /* 0x2A */ { 0, IT_GENERIC, AM_V | OT_PS, AM_Q | OT_Q, AM_NOT_USED, "cvtpi2ps", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_E | OT_D, AM_NOT_USED, "cvtsi2sd" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_E | OT_D, AM_NOT_USED, "cvtsi2ss" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_Q | OT_DQ, AM_NOT_USED, "cvtpi2pd" } },
- /* 0x2B */ { 0, IT_GENERIC, AM_W | OT_PS, AM_V | OT_PS, AM_NOT_USED, "movntps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_PD, AM_V | OT_PD, AM_NOT_USED, "movntpd" } },
- /* 0x2C */ { 0, IT_GENERIC, AM_Q | OT_Q, AM_W | OT_PS, AM_NOT_USED, "cvttps2pi", true,
- /* F2h */ { 0, IT_GENERIC, AM_G | OT_D, AM_W | OT_SD, AM_NOT_USED, "cvttsd2si" },
- /* F3h */ { 0, IT_GENERIC, AM_G | OT_D, AM_W | OT_SS, AM_NOT_USED, "cvttss2si" },
- /* 66h */ { 0, IT_GENERIC, AM_Q | OT_DQ, AM_W | OT_PD, AM_NOT_USED, "cvttpd2pi" } },
- /* 0x2D */ { 0, IT_GENERIC, AM_Q | OT_Q, AM_W | OT_PS, AM_NOT_USED, "cvtps2pi", true,
- /* F2h */ { 0, IT_GENERIC, AM_G | OT_D, AM_W | OT_SD, AM_NOT_USED, "cvtsd2si" },
- /* F3h */ { 0, IT_GENERIC, AM_G | OT_D, AM_W | OT_SS, AM_NOT_USED, "cvtss2si" },
- /* 66h */ { 0, IT_GENERIC, AM_Q | OT_DQ, AM_W | OT_PD, AM_NOT_USED, "cvtpd2pi" } },
- /* 0x2E */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "ucomiss", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "ucomisd" } },
- /* 0x2F */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_SS, AM_NOT_USED, "comiss", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "comisd" } },
- /* 0x30 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "wrmsr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x31 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "rdtsc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x32 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "rdmsr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x33 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "rdpmc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x34 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "sysenter", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x35 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "sysexit", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x36 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x37 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x38 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x39 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3A */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3B */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3C */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "movnti", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3D */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3E */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3F */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x40 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x41 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovno", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x42 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x43 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovnc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x44 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x45 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovnz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x46 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovbe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x47 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmova", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x48 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovs", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x49 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovns", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4A */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovpe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4B */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovpo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4C */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4D */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovge", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4E */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovle", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4F */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x50 */ { 0, IT_GENERIC, AM_E | OT_D, AM_V | OT_PS, AM_NOT_USED, "movmskps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_E | OT_D, AM_V | OT_PD, AM_NOT_USED, "movmskpd" } },
- /* 0x51 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "sqrtps", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "sqrtsd" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "sqrtss" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "sqrtpd" } },
- /* 0x52 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "rsqrtps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "rsqrtss" },
- /* 66h */ { 0 } },
- /* 0x53 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "rcpps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "rcpss" },
- /* 66h */ { 0 } },
- /* 0x54 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "andps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "andpd" } },
- /* 0x55 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "andnps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "andnpd" } },
- /* 0x56 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "orps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "orpd" } },
- /* 0x57 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "xorps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "xorpd" } },
- /* 0x58 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "addps", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "addsd" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "addss" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "addpd" } },
- /* 0x59 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "mulps", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "mulsd" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "mulss" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "mulpd" } },
- /* 0x5A */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PS, AM_NOT_USED, "cvtps2pd", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "cvtsd2ss" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "cvtss2sd" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PD, AM_NOT_USED, "cvtpd2ps" } },
- /* 0x5B */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_DQ, AM_NOT_USED, "cvtdq2ps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_PS, AM_NOT_USED, "cvttps2dq" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_PS, AM_NOT_USED, "cvtps2dq" } },
- /* 0x5C */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "subps", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "subsd" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "subss" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "subpd" } },
- /* 0x5D */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "minps", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "minsd" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "minss" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "minpd" } },
- /* 0x5E */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "divps", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "divsd" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "divss" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "divpd" } },
- /* 0x5F */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "maxps", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "maxsd" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "maxss" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "maxpd" } },
- /* 0x60 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "punpcklbw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "punpcklbw" } },
- /* 0x61 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "punpcklwd", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "punpcklwd" } },
- /* 0x62 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "punpckldq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "punpckldq" } },
- /* 0x63 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "packsswb", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "packsswb" } },
- /* 0x64 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "pcmpgtb", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pcmpgtb" } },
- /* 0x65 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "pcmpgtw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pcmpgtw" } },
- /* 0x66 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "pcmpgtd", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pcmpgtd" } },
- /* 0x67 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "packuswb", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "packuswb" } },
- /* 0x68 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "punpckhbw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_Q | OT_DQ, AM_NOT_USED, "punpckhbw" } },
- /* 0x69 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "punpckhwd", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_Q | OT_DQ, AM_NOT_USED, "punpckhwd" } },
- /* 0x6A */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "punpckhdq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_Q | OT_DQ, AM_NOT_USED, "punpckhdq" } },
- /* 0x6B */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "packssdw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_Q | OT_DQ, AM_NOT_USED, "packssdw" } },
- /* 0x6C */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "not used without prefix", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "punpcklqdq" } },
- /* 0x6D */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "not used without prefix", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "punpcklqdq" } },
- /* 0x6E */ { 0, IT_GENERIC, AM_P | OT_D, AM_E | OT_D, AM_NOT_USED, "movd", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_E | OT_D, AM_NOT_USED, "movd" } },
- /* 0x6F */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "movq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "movdqu" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "movdqa" } },
- /* 0x70 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_I | OT_B, "pshuf", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_I | OT_B, "pshuflw" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_I | OT_B, "pshufhw" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_I | OT_B, "pshufd" } },
- /* 0x71 */ { 19, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x72 */ { 20, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x73 */ { 21, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x74 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pcmpeqb", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pcmpeqb" } },
- /* 0x75 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pcmpeqw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pcmpeqw" } },
- /* 0x76 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pcmpeqd", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pcmpeqd" } },
- /* 0x77 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "emms", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
-
- // The following six opcodes are escapes into the MMX stuff, which this disassembler does not support.
- /* 0x78 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x79 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7A */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7B */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7C */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7D */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
-
- /* 0x7E */ { 0, IT_GENERIC, AM_E | OT_D, AM_P | OT_D, AM_NOT_USED, "movd", true,
- /* F2h */ { 0 },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_W | OT_Q, AM_NOT_USED, "movq" },
- /* 66h */ { 0, IT_GENERIC, AM_E | OT_D, AM_V | OT_DQ, AM_NOT_USED, "movd" } },
- /* 0x7F */ { 0, IT_GENERIC, AM_Q | OT_Q, AM_P | OT_Q, AM_NOT_USED, "movq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_V | OT_DQ, AM_NOT_USED, "movdqu" },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_V | OT_DQ, AM_NOT_USED, "movdqa" } },
- /* 0x80 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x81 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jno", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x82 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x83 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jnc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x84 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x85 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jnz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x86 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jbe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x87 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "ja", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x88 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "js", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x89 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jns", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8A */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jpe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8B */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jpo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8C */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8D */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jge", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8E */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jle", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x8F */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x90 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "seto", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x91 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setno", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x92 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x93 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setnc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x94 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x95 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setnz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x96 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setbe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x97 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "seta", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x98 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "sets", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x99 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setns", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9A */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setpe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9B */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setpo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9C */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9D */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setge", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9E */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setle", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x9F */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA0 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA1 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA2 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "cpuid", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "bt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_I | OT_B, "shld", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_I | OT_B | AM_REGISTER, "shld", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA6 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA7 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA8 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xA9 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xAA */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "rsm", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xAB */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "bts", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xAC */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_I | OT_B, "shrd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xAD */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_I | OT_B | AM_REGISTER, "shrd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xAE */ { 22, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xAF */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "imul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "cmpxchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "cmpxchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB2 */ { 0, IT_GENERIC, AM_M | OT_P, AM_NOT_USED, AM_NOT_USED, "lss", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "btr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB4 */ { 0, IT_GENERIC, AM_M | OT_P, AM_NOT_USED, AM_NOT_USED, "lfs", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB5 */ { 0, IT_GENERIC, AM_M | OT_P, AM_NOT_USED, AM_NOT_USED, "lgs", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB6 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_B, AM_NOT_USED, "movzx", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB7 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_W, AM_NOT_USED, "movzx", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB8 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xB9 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "ud1", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xBA */ { 23, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xBB */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "btc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xBC */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "bsf", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xBD */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "bsr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xBE */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_B, AM_NOT_USED, "movsx", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xBF */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_W, AM_NOT_USED, "movsx", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "xadd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "xadd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC2 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_I | OT_B, "cmpps", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_I | OT_B, "cmpsd" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_I | OT_B, "cmpss" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_I | OT_B, "cmppd" } },
- /* 0xC3 */ { 0, IT_GENERIC, AM_E | OT_D, AM_G | OT_D, AM_NOT_USED, "movnti", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC4 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_E | OT_D, AM_I | OT_B, "pinsrw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_E | OT_D, AM_I | OT_B, "pinsrw" } },
- /* 0xC5 */ { 0, IT_GENERIC, AM_G | OT_D, AM_P | OT_Q, AM_I | OT_B, "pextrw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_G | OT_D, AM_V | OT_DQ, AM_I | OT_B, "pextrw" } },
- /* 0xC6 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_I | OT_B, "shufps", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_I | OT_B, "shufpd" } },
- /* 0xC7 */ { 24, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC8 */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xC9 */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xCA */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xCB */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xCC */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xCD */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xCE */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xCF */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xD1 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psrlw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psrlw" } },
- /* 0xD2 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psrld", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psrld" } },
- /* 0xD3 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psrlq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psrlq" } },
- /* 0xD4 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddq" } },
- /* 0xD5 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmullw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmullw" } },
- /* 0xD6 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "unused without prefix", true,
- /* F2h */ { 0, IT_GENERIC, AM_P | OT_Q, AM_W | OT_Q, AM_NOT_USED, "movdq2q" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_Q | OT_Q, AM_NOT_USED, "movq2dq" },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movq" } },
- /* 0xD7 */ { 0, IT_GENERIC, AM_G | OT_D, AM_P | OT_Q, AM_NOT_USED, "pmovmskb", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_G | OT_D, AM_V | OT_DQ, AM_NOT_USED, "pmovmskb" } },
- /* 0xD8 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubusb", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubusb" } },
- /* 0xD9 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubusw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubusw" } },
- /* 0xDA */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pminub", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pminub" } },
- /* 0xDB */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pand", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pand" } },
- /* 0xDC */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddusb", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddusb" } },
- /* 0xDD */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddusw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddusw" } },
- /* 0xDE */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmaxub", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmaxub" } },
- /* 0xDF */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pandn", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pandn" } },
- /* 0xE0 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pavgb", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pavgb" } },
- /* 0xE1 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psraw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psrqw" } },
- /* 0xE2 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psrad", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psrad" } },
- /* 0xE3 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pavgw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pavgw" } },
- /* 0xE4 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmulhuw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmulhuw" } },
- /* 0xE5 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmulhuw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmulhw" } },
- /* 0xE6 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "not used without prefix", true,
- /* F2h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_PD, AM_NOT_USED, "cvtpd2dq" },
- /* F3h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_DQ, AM_NOT_USED, "cvtdq2pd" },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_PD, AM_NOT_USED, "cvttpd2dq" } },
- /* 0xE7 */ { 0, IT_GENERIC, AM_W | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movntq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_V | OT_DQ, AM_NOT_USED, "movntdq" } },
- /* 0xE8 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubsb", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubsb" } },
- /* 0xE9 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubsw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubsw" } },
- /* 0xEA */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pminsw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pminsw" } },
- /* 0xEB */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "por", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "por" } },
- /* 0xEC */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddsb", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddsb" } },
- /* 0xED */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddsw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddsw" } },
- /* 0xEE */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmaxsw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmaxsw" } },
- /* 0xEF */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pxor", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pxor" } },
- /* 0xF0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0xF1 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psllw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psllw" } },
- /* 0xF2 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pslld", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pslld" } },
- /* 0xF3 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psllq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psllq" } },
- /* 0xF4 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmuludq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmuludq" } },
- /* 0xF5 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmaddwd", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmaddwd" } },
- /* 0xF6 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psadbw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psadbw" } },
- /* 0xF7 */ { 0, IT_GENERIC, AM_P | OT_PI, AM_Q | OT_PI, AM_NOT_USED, "maskmovq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "maskmovdqu" } },
- /* 0xF8 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubb", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubb" } },
- /* 0xF9 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubw" } },
- /* 0xFA */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubd", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubd" } },
- /* 0xFB */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubq" } },
- /* 0xFC */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddb", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddb" } },
- /* 0xFD */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddw" } },
- /* 0xFE */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddd", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddd" } },
- /* 0xFF */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_0f00[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "sldt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "str", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "lldt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "ltr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "verr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "verw", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_0f01[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_M | OT_S, AM_NOT_USED, AM_NOT_USED, "sgdt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_M | OT_S, AM_NOT_USED, AM_NOT_USED, "sidt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_M | OT_S, AM_NOT_USED, AM_NOT_USED, "lgdt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_M | OT_S, AM_NOT_USED, AM_NOT_USED, "lidt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "smsw", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "lmsw", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_M | OT_B, AM_NOT_USED, AM_NOT_USED, "invlpg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_0f18[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_M | OT_ADDRESS_MODE_M, AM_NOT_USED, AM_NOT_USED, "prefetch", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "prefetch", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "prefetch", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "prefetch", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_0f71[] = {
- /* 0x0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psrlw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psrlw" } },
- /* 0x3 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psraw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psraw" } },
- /* 0x5 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psllw", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psllw" } },
- /* 0x7 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_0f72[] = {
- /* 0x0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psrld", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psrld" } },
- /* 0x3 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psrad", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psrad" } },
- /* 0x5 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "pslld", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "pslld" } },
- /* 0x7 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_0f73[] = {
- /* 0x0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psrlq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psrlq" } },
- /* 0x3 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psllq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psllq" } },
- /* 0x7 */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "pslldq", true,
- /* F2h */ { 0 },
- /* F3h */ { 0 },
- /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "pslldq" } },
-};
-
-const Opcode s_opcode_byte_after_0fae[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "fxsave", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "fxrstor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "ldmxcsr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "stmxcsr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "lfence", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "mfence", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "clflush/sfence", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
-};
-
-const Opcode s_opcode_byte_after_0fba[] = {
- /* 0x0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "bt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "bts", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "btr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "btc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_0fc7[] = {
- /* 0x0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_M | OT_Q, AM_NOT_USED, AM_NOT_USED, "cmpxch8b", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_80[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_81[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_82[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_83[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_c0[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "rol", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "ror", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "rcl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "rcr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "shl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "shr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "sal", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "sar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_c1[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "rol", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "ror", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "rcl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "rcr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "shl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "shr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "sal", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "sar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_d0[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "rol", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "ror", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "rcl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "rcr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "shl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "shr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "sal", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "sar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_d1[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "rol", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "ror", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "rcl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "rcr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "shl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "shr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "sal", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "sar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_d2[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "rol", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "ror", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "rcl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "rcr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "shl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "shr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "sal", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "sar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_d3[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "rol", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "ror", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "rcl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "rcr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "shl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "shr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "sal", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "sar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_f6[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "not", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "neg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, OT_B | AM_REGISTER, AM_E | OT_B, AM_NOT_USED, "mul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, OT_B | AM_REGISTER, AM_E | OT_B, AM_NOT_USED, "imul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_E | OT_B, AM_NOT_USED, "div", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_E | OT_B, AM_NOT_USED, "idiv", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_f7[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "not", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "neg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_E | OT_V, AM_NOT_USED, "mul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_E | OT_V, AM_NOT_USED, "imul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_E | OT_V, AM_NOT_USED, "div", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_E | OT_V, AM_NOT_USED, "idiv", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_fe[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-const Opcode s_opcode_byte_after_ff[] = {
- /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x2 */ { 0, IT_JUMP, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "call", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x3 */ { 0, IT_JUMP, AM_E | OT_P, AM_NOT_USED, AM_NOT_USED, "call", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x4 */ { 0, IT_JUMP, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "jmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x5 */ { 0, IT_JUMP, AM_E | OT_P, AM_NOT_USED, AM_NOT_USED, "jmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } },
- /* 0x7 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }
-};
-
-/*
-* A table of all the other tables, containing some extra information, e.g.
-* how to mask out the byte we're looking at.
-*/
-const OpcodeTable MiniDisassembler::s_ia32_opcode_map_[]={
- // One-byte opcodes and jumps to larger
- /* 0 */ {s_first_opcode_byte, 0, 0xff, 0, 0xff},
- // Two-byte opcodes (second byte)
- /* 1 */ {s_opcode_byte_after_0f, 0, 0xff, 0, 0xff},
- // Start of tables for opcodes using ModR/M bits as extension
- /* 2 */ {s_opcode_byte_after_80, 3, 0x07, 0, 0x07},
- /* 3 */ {s_opcode_byte_after_81, 3, 0x07, 0, 0x07},
- /* 4 */ {s_opcode_byte_after_82, 3, 0x07, 0, 0x07},
- /* 5 */ {s_opcode_byte_after_83, 3, 0x07, 0, 0x07},
- /* 6 */ {s_opcode_byte_after_c0, 3, 0x07, 0, 0x07},
- /* 7 */ {s_opcode_byte_after_c1, 3, 0x07, 0, 0x07},
- /* 8 */ {s_opcode_byte_after_d0, 3, 0x07, 0, 0x07},
- /* 9 */ {s_opcode_byte_after_d1, 3, 0x07, 0, 0x07},
- /* 10 */ {s_opcode_byte_after_d2, 3, 0x07, 0, 0x07},
- /* 11 */ {s_opcode_byte_after_d3, 3, 0x07, 0, 0x07},
- /* 12 */ {s_opcode_byte_after_f6, 3, 0x07, 0, 0x07},
- /* 13 */ {s_opcode_byte_after_f7, 3, 0x07, 0, 0x07},
- /* 14 */ {s_opcode_byte_after_fe, 3, 0x07, 0, 0x01},
- /* 15 */ {s_opcode_byte_after_ff, 3, 0x07, 0, 0x07},
- /* 16 */ {s_opcode_byte_after_0f00, 3, 0x07, 0, 0x07},
- /* 17 */ {s_opcode_byte_after_0f01, 3, 0x07, 0, 0x07},
- /* 18 */ {s_opcode_byte_after_0f18, 3, 0x07, 0, 0x07},
- /* 19 */ {s_opcode_byte_after_0f71, 3, 0x07, 0, 0x07},
- /* 20 */ {s_opcode_byte_after_0f72, 3, 0x07, 0, 0x07},
- /* 21 */ {s_opcode_byte_after_0f73, 3, 0x07, 0, 0x07},
- /* 22 */ {s_opcode_byte_after_0fae, 3, 0x07, 0, 0x07},
- /* 23 */ {s_opcode_byte_after_0fba, 3, 0x07, 0, 0x07},
- /* 24 */ {s_opcode_byte_after_0fc7, 3, 0x07, 0, 0x01}
-};
-
-}; // namespace sidestep
diff --git a/chromium/tools/traceline/traceline/sidestep/mini_disassembler.cc b/chromium/tools/traceline/traceline/sidestep/mini_disassembler.cc
deleted file mode 100644
index a603ebe637a..00000000000
--- a/chromium/tools/traceline/traceline/sidestep/mini_disassembler.cc
+++ /dev/null
@@ -1,416 +0,0 @@
-// Copyright 2008, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// Implementation of MiniDisassembler.
-
-#include "sidestep/mini_disassembler.h"
-
-namespace sidestep {
-
-MiniDisassembler::MiniDisassembler(bool operand_default_is_32_bits,
- bool address_default_is_32_bits)
- : operand_default_is_32_bits_(operand_default_is_32_bits),
- address_default_is_32_bits_(address_default_is_32_bits) {
- Initialize();
-}
-
-MiniDisassembler::MiniDisassembler()
- : operand_default_is_32_bits_(true),
- address_default_is_32_bits_(true) {
- Initialize();
-}
-
-InstructionType MiniDisassembler::Disassemble(
- unsigned char* start_byte,
- unsigned int* instruction_bytes) {
- // Clean up any state from previous invocations.
- Initialize();
-
- // Start by processing any prefixes.
- unsigned char* current_byte = start_byte;
- unsigned int size = 0;
- InstructionType instruction_type = ProcessPrefixes(current_byte, &size);
-
- if (IT_UNKNOWN == instruction_type)
- return instruction_type;
-
- current_byte += size;
- size = 0;
-
- // Invariant: We have stripped all prefixes, and the operand_is_32_bits_
- // and address_is_32_bits_ flags are correctly set.
-
- instruction_type = ProcessOpcode(current_byte, 0, &size);
-
- // Check for error processing instruction
- if ((IT_UNKNOWN == instruction_type_) || (IT_UNUSED == instruction_type_)) {
- return IT_UNKNOWN;
- }
-
- current_byte += size;
-
- // Invariant: operand_bytes_ indicates the total size of operands
- // specified by the opcode and/or ModR/M byte and/or SIB byte.
- // pCurrentByte points to the first byte after the ModR/M byte, or after
- // the SIB byte if it is present (i.e. the first byte of any operands
- // encoded in the instruction).
-
- // We get the total length of any prefixes, the opcode, and the ModR/M and
- // SIB bytes if present, by taking the difference of the original starting
- // address and the current byte (which points to the first byte of the
- // operands if present, or to the first byte of the next instruction if
- // they are not). Adding the count of bytes in the operands encoded in
- // the instruction gives us the full length of the instruction in bytes.
- *instruction_bytes += operand_bytes_ + (current_byte - start_byte);
-
- // Return the instruction type, which was set by ProcessOpcode().
- return instruction_type_;
-}
-
-void MiniDisassembler::Initialize() {
- operand_is_32_bits_ = operand_default_is_32_bits_;
- address_is_32_bits_ = address_default_is_32_bits_;
- operand_bytes_ = 0;
- have_modrm_ = false;
- should_decode_modrm_ = false;
- instruction_type_ = IT_UNKNOWN;
- got_f2_prefix_ = false;
- got_f3_prefix_ = false;
- got_66_prefix_ = false;
-}
-
-InstructionType MiniDisassembler::ProcessPrefixes(unsigned char* start_byte,
- unsigned int* size) {
- InstructionType instruction_type = IT_GENERIC;
- const Opcode& opcode = s_ia32_opcode_map_[0].table_[*start_byte];
-
- switch (opcode.type_) {
- case IT_PREFIX_ADDRESS:
- address_is_32_bits_ = !address_default_is_32_bits_;
- goto nochangeoperand;
- case IT_PREFIX_OPERAND:
- operand_is_32_bits_ = !operand_default_is_32_bits_;
- nochangeoperand:
- case IT_PREFIX:
-
- if (0xF2 == (*start_byte))
- got_f2_prefix_ = true;
- else if (0xF3 == (*start_byte))
- got_f3_prefix_ = true;
- else if (0x66 == (*start_byte))
- got_66_prefix_ = true;
-
- instruction_type = opcode.type_;
- (*size)++;
- // we got a prefix, so add one and check next byte
- ProcessPrefixes(start_byte + 1, size);
- default:
- break; // not a prefix byte
- }
-
- return instruction_type;
-}
-
-InstructionType MiniDisassembler::ProcessOpcode(unsigned char* start_byte,
- unsigned int table_index,
- unsigned int* size) {
- const OpcodeTable& table = s_ia32_opcode_map_[table_index]; // Get our table
- unsigned char current_byte = (*start_byte) >> table.shift_;
- current_byte = current_byte & table.mask_; // Mask out the bits we will use
-
- // Check whether the byte we have is inside the table we have.
- if (current_byte < table.min_lim_ || current_byte > table.max_lim_) {
- instruction_type_ = IT_UNKNOWN;
- return instruction_type_;
- }
-
- const Opcode& opcode = table.table_[current_byte];
- if (IT_UNUSED == opcode.type_) {
- // This instruction is not used by the IA-32 ISA, so we indicate
- // this to the user. Probably means that we were pointed to
- // a byte in memory that was not the start of an instruction.
- instruction_type_ = IT_UNUSED;
- return instruction_type_;
- } else if (IT_REFERENCE == opcode.type_) {
- // We are looking at an opcode that has more bytes (or is continued
- // in the ModR/M byte). Recursively find the opcode definition in
- // the table for the opcode's next byte.
- (*size)++;
- ProcessOpcode(start_byte + 1, opcode.table_index_, size);
- return instruction_type_;
- }
-
- const SpecificOpcode* specific_opcode = reinterpret_cast<
- const SpecificOpcode*>(&opcode);
- if (opcode.is_prefix_dependent_) {
- if (got_f2_prefix_ && opcode.opcode_if_f2_prefix_.mnemonic_ != 0) {
- specific_opcode = &opcode.opcode_if_f2_prefix_;
- } else if (got_f3_prefix_ && opcode.opcode_if_f3_prefix_.mnemonic_ != 0) {
- specific_opcode = &opcode.opcode_if_f3_prefix_;
- } else if (got_66_prefix_ && opcode.opcode_if_66_prefix_.mnemonic_ != 0) {
- specific_opcode = &opcode.opcode_if_66_prefix_;
- }
- }
-
- // Inv: The opcode type is known.
- instruction_type_ = specific_opcode->type_;
-
- // Let's process the operand types to see if we have any immediate
- // operands, and/or a ModR/M byte.
-
- ProcessOperand(specific_opcode->flag_dest_);
- ProcessOperand(specific_opcode->flag_source_);
- ProcessOperand(specific_opcode->flag_aux_);
-
- // Inv: We have processed the opcode and incremented operand_bytes_
- // by the number of bytes of any operands specified by the opcode
- // that are stored in the instruction (not registers etc.). Now
- // we need to return the total number of bytes for the opcode and
- // for the ModR/M or SIB bytes if they are present.
-
- if (table.mask_ != 0xff) {
- if (have_modrm_) {
- // we're looking at a ModR/M byte so we're not going to
- // count that into the opcode size
- ProcessModrm(start_byte, size);
- return IT_GENERIC;
- } else {
- // need to count the ModR/M byte even if it's just being
- // used for opcode extension
- (*size)++;
- return IT_GENERIC;
- }
- } else {
- if (have_modrm_) {
- // The ModR/M byte is the next byte.
- (*size)++;
- ProcessModrm(start_byte + 1, size);
- return IT_GENERIC;
- } else {
- (*size)++;
- return IT_GENERIC;
- }
- }
-}
-
-bool MiniDisassembler::ProcessOperand(int flag_operand) {
- bool succeeded = true;
- if (AM_NOT_USED == flag_operand)
- return succeeded;
-
- // Decide what to do based on the addressing mode.
- switch (flag_operand & AM_MASK) {
- // No ModR/M byte indicated by these addressing modes, and no
- // additional (e.g. immediate) parameters.
- case AM_A: // Direct address
- case AM_F: // EFLAGS register
- case AM_X: // Memory addressed by the DS:SI register pair
- case AM_Y: // Memory addressed by the ES:DI register pair
- case AM_IMPLICIT: // Parameter is implicit, occupies no space in
- // instruction
- break;
-
- // There is a ModR/M byte but it does not necessarily need
- // to be decoded.
- case AM_C: // reg field of ModR/M selects a control register
- case AM_D: // reg field of ModR/M selects a debug register
- case AM_G: // reg field of ModR/M selects a general register
- case AM_P: // reg field of ModR/M selects an MMX register
- case AM_R: // mod field of ModR/M may refer only to a general register
- case AM_S: // reg field of ModR/M selects a segment register
- case AM_T: // reg field of ModR/M selects a test register
- case AM_V: // reg field of ModR/M selects a 128-bit XMM register
- have_modrm_ = true;
- break;
-
- // In these addressing modes, there is a ModR/M byte and it needs to be
- // decoded. No other (e.g. immediate) params than indicated in ModR/M.
- case AM_E: // Operand is either a general-purpose register or memory,
- // specified by ModR/M byte
- case AM_M: // ModR/M byte will refer only to memory
- case AM_Q: // Operand is either an MMX register or memory (complex
- // evaluation), specified by ModR/M byte
- case AM_W: // Operand is either a 128-bit XMM register or memory (complex
- // eval), specified by ModR/M byte
- have_modrm_ = true;
- should_decode_modrm_ = true;
- break;
-
- // These addressing modes specify an immediate or an offset value
- // directly, so we need to look at the operand type to see how many
- // bytes.
- case AM_I: // Immediate data.
- case AM_J: // Jump to offset.
- case AM_O: // Operand is at offset.
- switch (flag_operand & OT_MASK) {
- case OT_B: // Byte regardless of operand-size attribute.
- operand_bytes_ += OS_BYTE;
- break;
- case OT_C: // Byte or word, depending on operand-size attribute.
- if (operand_is_32_bits_)
- operand_bytes_ += OS_WORD;
- else
- operand_bytes_ += OS_BYTE;
- break;
- case OT_D: // Doubleword, regardless of operand-size attribute.
- operand_bytes_ += OS_DOUBLE_WORD;
- break;
- case OT_DQ: // Double-quadword, regardless of operand-size attribute.
- operand_bytes_ += OS_DOUBLE_QUAD_WORD;
- break;
- case OT_P: // 32-bit or 48-bit pointer, depending on operand-size
- // attribute.
- if (operand_is_32_bits_)
- operand_bytes_ += OS_48_BIT_POINTER;
- else
- operand_bytes_ += OS_32_BIT_POINTER;
- break;
- case OT_PS: // 128-bit packed single-precision floating-point data.
- operand_bytes_ += OS_128_BIT_PACKED_SINGLE_PRECISION_FLOATING;
- break;
- case OT_Q: // Quadword, regardless of operand-size attribute.
- operand_bytes_ += OS_QUAD_WORD;
- break;
- case OT_S: // 6-byte pseudo-descriptor.
- operand_bytes_ += OS_PSEUDO_DESCRIPTOR;
- break;
- case OT_SD: // Scalar Double-Precision Floating-Point Value
- case OT_PD: // Unaligned packed double-precision floating point value
- operand_bytes_ += OS_DOUBLE_PRECISION_FLOATING;
- break;
- case OT_SS:
- // Scalar element of a 128-bit packed single-precision
- // floating data.
- // We simply return enItUnknown since we don't have to support
- // floating point
- succeeded = false;
- break;
- case OT_V: // Word or doubleword, depending on operand-size attribute.
- if (operand_is_32_bits_)
- operand_bytes_ += OS_DOUBLE_WORD;
- else
- operand_bytes_ += OS_WORD;
- break;
- case OT_W: // Word, regardless of operand-size attribute.
- operand_bytes_ += OS_WORD;
- break;
-
- // Can safely ignore these.
- case OT_A: // Two one-word operands in memory or two double-word
- // operands in memory
- case OT_PI: // Quadword MMX technology register (e.g. mm0)
- case OT_SI: // Doubleword integer register (e.g., eax)
- break;
-
- default:
- break;
- }
- break;
-
- default:
- break;
- }
-
- return succeeded;
-}
-
-bool MiniDisassembler::ProcessModrm(unsigned char* start_byte,
- unsigned int* size) {
- // If we don't need to decode, we just return the size of the ModR/M
- // byte (there is never a SIB byte in this case).
- if (!should_decode_modrm_) {
- (*size)++;
- return true;
- }
-
- // We never care about the reg field, only the combination of the mod
- // and r/m fields, so let's start by packing those fields together into
- // 5 bits.
- unsigned char modrm = (*start_byte);
- unsigned char mod = modrm & 0xC0; // mask out top two bits to get mod field
- modrm = modrm & 0x07; // mask out bottom 3 bits to get r/m field
- mod = mod >> 3; // shift the mod field to the right place
- modrm = mod | modrm; // combine the r/m and mod fields as discussed
- mod = mod >> 3; // shift the mod field to bits 2..0
-
- // Invariant: modrm contains the mod field in bits 4..3 and the r/m field
- // in bits 2..0, and mod contains the mod field in bits 2..0
-
- const ModrmEntry* modrm_entry = 0;
- if (address_is_32_bits_)
- modrm_entry = &s_ia32_modrm_map_[modrm];
- else
- modrm_entry = &s_ia16_modrm_map_[modrm];
-
- // Invariant: modrm_entry points to information that we need to decode
- // the ModR/M byte.
-
- // Add to the count of operand bytes, if the ModR/M byte indicates
- // that some operands are encoded in the instruction.
- if (modrm_entry->is_encoded_in_instruction_)
- operand_bytes_ += modrm_entry->operand_size_;
-
- // Process the SIB byte if necessary, and return the count
- // of ModR/M and SIB bytes.
- if (modrm_entry->use_sib_byte_) {
- (*size)++;
- return ProcessSib(start_byte + 1, mod, size);
- } else {
- (*size)++;
- return true;
- }
-}
-
-bool MiniDisassembler::ProcessSib(unsigned char* start_byte,
- unsigned char mod,
- unsigned int* size) {
- // get the mod field from the 2..0 bits of the SIB byte
- unsigned char sib_base = (*start_byte) & 0x07;
- if (0x05 == sib_base) {
- switch (mod) {
- case 0x00: // mod == 00
- case 0x02: // mod == 10
- operand_bytes_ += OS_DOUBLE_WORD;
- break;
- case 0x01: // mod == 01
- operand_bytes_ += OS_BYTE;
- break;
- case 0x03: // mod == 11
- // According to the IA-32 docs, there does not seem to be a disp
- // value for this value of mod
- default:
- break;
- }
- }
-
- (*size)++;
- return true;
-}
-
-}; // namespace sidestep
diff --git a/chromium/tools/traceline/traceline/sidestep/mini_disassembler.h b/chromium/tools/traceline/traceline/sidestep/mini_disassembler.h
deleted file mode 100644
index 2c3ea2f2d5e..00000000000
--- a/chromium/tools/traceline/traceline/sidestep/mini_disassembler.h
+++ /dev/null
@@ -1,156 +0,0 @@
-// Copyright (c) 2012 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.
-
-// Definition of MiniDisassembler.
-
-#ifndef TRACELINE_SIDESTEP_MINI_DISASSEMBLER_H_
-#define TRACELINE_SIDESTEP_MINI_DISASSEMBLER_H_
-
-#include "sidestep/mini_disassembler_types.h"
-
-namespace sidestep {
-
-// This small disassembler is very limited
-// in its functionality, and in fact does only the bare minimum required by the
-// preamble patching utility. It may be useful for other purposes, however.
-//
-// The limitations include at least the following:
-// -# No support for coprocessor opcodes, MMX, etc.
-// -# No machine-readable identification of opcodes or decoding of
-// assembly parameters. The name of the opcode (as a string) is given,
-// however, to aid debugging.
-//
-// You may ask what this little disassembler actually does, then? The answer is
-// that it does the following, which is exactly what the patching utility needs:
-// -# Indicates if opcode is a jump (any kind) or a return (any kind)
-// because this is important for the patching utility to determine if
-// a function is too short or there are jumps too early in it for it
-// to be preamble patched.
-// -# The opcode length is always calculated, so that the patching utility
-// can figure out where the next instruction starts, and whether it
-// already has enough instructions to replace with the absolute jump
-// to the patching code.
-//
-// The usage is quite simple; just create a MiniDisassembler and use its
-// Disassemble() method.
-//
-// If you would like to extend this disassembler, please refer to the
-// IA-32 Intel Architecture Software Developer's Manual Volume 2:
-// Instruction Set Reference for information about operand decoding
-// etc.
-class MiniDisassembler {
- public:
-
- // Creates a new instance and sets defaults.
- //
- // operand_default_32_bits: If true, the default operand size is
- // set to 32 bits, which is the default under Win32. Otherwise it is 16 bits.
- // address_default_32_bits: If true, the default address size is
- // set to 32 bits, which is the default under Win32. Otherwise it is 16 bits.
- MiniDisassembler(bool operand_default_32_bits,
- bool address_default_32_bits);
-
- // Equivalent to MiniDisassembler(true, true);
- MiniDisassembler();
-
- // Attempts to disassemble a single instruction starting from the
- // address in memory it is pointed to.
- //
- // start: Address where disassembly should start.
- // instruction_bytes: Variable that will be incremented by
- // the length in bytes of the instruction.
- // Returns enItJump, enItReturn or enItGeneric on success. enItUnknown
- // if unable to disassemble, enItUnused if this seems to be an unused
- // opcode. In the last two (error) cases, cbInstruction will be set
- // to 0xffffffff.
- //
- // Postcondition: This instance of the disassembler is ready to be used again,
- // with unchanged defaults from creation time.
- InstructionType Disassemble(unsigned char* start,
- unsigned int* instruction_bytes);
-
- private:
-
- // Makes the disassembler ready for reuse.
- void Initialize();
-
- // Sets the flags for address and operand sizes.
- // Returns Number of prefix bytes.
- InstructionType ProcessPrefixes(unsigned char* start, unsigned int* size);
-
- // Sets the flag for whether we have ModR/M, and increments
- // operand_bytes_ if any are specifies by the opcode directly.
- // Returns Number of opcode bytes.
- InstructionType ProcessOpcode(unsigned char* start,
- unsigned int table,
- unsigned int* size);
-
- // Checks the type of the supplied operand. Increments
- // operand_bytes_ if it directly indicates an immediate etc.
- // operand. Asserts have_modrm_ if the operand specifies
- // a ModR/M byte.
- bool ProcessOperand(int flag_operand);
-
- // Increments operand_bytes_ by size specified by ModR/M and
- // by SIB if present.
- // Returns 0 in case of error, 1 if there is just a ModR/M byte,
- // 2 if there is a ModR/M byte and a SIB byte.
- bool ProcessModrm(unsigned char* start, unsigned int* size);
-
- // Processes the SIB byte that it is pointed to.
- // start: Pointer to the SIB byte.
- // mod: The mod field from the ModR/M byte.
- // Returns 1 to indicate success (indicates 1 SIB byte)
- bool ProcessSib(unsigned char* start, unsigned char mod, unsigned int* size);
-
- // The instruction type we have decoded from the opcode.
- InstructionType instruction_type_;
-
- // Counts the number of bytes that is occupied by operands in
- // the current instruction (note: we don't care about how large
- // operands stored in registers etc. are).
- unsigned int operand_bytes_;
-
- // True iff there is a ModR/M byte in this instruction.
- bool have_modrm_;
-
- // True iff we need to decode the ModR/M byte (sometimes it just
- // points to a register, we can tell by the addressing mode).
- bool should_decode_modrm_;
-
- // Current operand size is 32 bits if true, 16 bits if false.
- bool operand_is_32_bits_;
-
- // Default operand size is 32 bits if true, 16 bits if false.
- bool operand_default_is_32_bits_;
-
- // Current address size is 32 bits if true, 16 bits if false.
- bool address_is_32_bits_;
-
- // Default address size is 32 bits if true, 16 bits if false.
- bool address_default_is_32_bits_;
-
- // Huge big opcode table based on the IA-32 manual, defined
- // in Ia32OpcodeMap.cpp
- static const OpcodeTable s_ia32_opcode_map_[];
-
- // Somewhat smaller table to help with decoding ModR/M bytes
- // when 16-bit addressing mode is being used. Defined in
- // Ia32ModrmMap.cpp
- static const ModrmEntry s_ia16_modrm_map_[];
-
- // Somewhat smaller table to help with decoding ModR/M bytes
- // when 32-bit addressing mode is being used. Defined in
- // Ia32ModrmMap.cpp
- static const ModrmEntry s_ia32_modrm_map_[];
-
- // Indicators of whether we got certain prefixes that certain
- // silly Intel instructions depend on in nonstandard ways for
- // their behaviors.
- bool got_f2_prefix_, got_f3_prefix_, got_66_prefix_;
-};
-
-}; // namespace sidestep
-
-#endif // TRACELINE_SIDESTEP_MINI_DISASSEMBLER_H_
diff --git a/chromium/tools/traceline/traceline/sidestep/mini_disassembler_types.h b/chromium/tools/traceline/traceline/sidestep/mini_disassembler_types.h
deleted file mode 100644
index cb9e0062456..00000000000
--- a/chromium/tools/traceline/traceline/sidestep/mini_disassembler_types.h
+++ /dev/null
@@ -1,197 +0,0 @@
-// Copyright (c) 2006-2008 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.
-//
-// Several simple types used by the disassembler and some of the patching
-// mechanisms.
-
-#ifndef TRACELINE_SIDESTEP_MINI_DISASSEMBLER_TYPES_H_
-#define TRACELINE_SIDESTEP_MINI_DISASSEMBLER_TYPES_H_
-
-namespace sidestep {
-
-// Categories of instructions that we care about
-enum InstructionType {
- // This opcode is not used
- IT_UNUSED,
- // This disassembler does not recognize this opcode (error)
- IT_UNKNOWN,
- // This is not an instruction but a reference to another table
- IT_REFERENCE,
- // This byte is a prefix byte that we can ignore
- IT_PREFIX,
- // This is a prefix byte that switches to the nondefault address size
- IT_PREFIX_ADDRESS,
- // This is a prefix byte that switches to the nondefault operand size
- IT_PREFIX_OPERAND,
- // A jump or call instruction
- IT_JUMP,
- // A return instruction
- IT_RETURN,
- // Any other type of instruction (in this case we don't care what it is)
- IT_GENERIC,
-};
-
-// Lists IA-32 operand sizes in multiples of 8 bits
-enum OperandSize {
- OS_ZERO = 0,
- OS_BYTE = 1,
- OS_WORD = 2,
- OS_DOUBLE_WORD = 4,
- OS_QUAD_WORD = 8,
- OS_DOUBLE_QUAD_WORD = 16,
- OS_32_BIT_POINTER = 32/8,
- OS_48_BIT_POINTER = 48/8,
- OS_SINGLE_PRECISION_FLOATING = 32/8,
- OS_DOUBLE_PRECISION_FLOATING = 64/8,
- OS_DOUBLE_EXTENDED_PRECISION_FLOATING = 80/8,
- OS_128_BIT_PACKED_SINGLE_PRECISION_FLOATING = 128/8,
- OS_PSEUDO_DESCRIPTOR = 6
-};
-
-// Operand addressing methods from the IA-32 manual. The enAmMask value
-// is a mask for the rest. The other enumeration values are named for the
-// names given to the addressing methods in the manual, e.g. enAm_D is for
-// the D addressing method.
-//
-// The reason we use a full 4 bytes and a mask, is that we need to combine
-// these flags with the enOperandType to store the details
-// on the operand in a single integer.
-enum AddressingMethod {
- AM_NOT_USED = 0, // This operand is not used for this instruction
- AM_MASK = 0x00FF0000, // Mask for the rest of the values in this enumeration
- AM_A = 0x00010000, // A addressing type
- AM_C = 0x00020000, // C addressing type
- AM_D = 0x00030000, // D addressing type
- AM_E = 0x00040000, // E addressing type
- AM_F = 0x00050000, // F addressing type
- AM_G = 0x00060000, // G addressing type
- AM_I = 0x00070000, // I addressing type
- AM_J = 0x00080000, // J addressing type
- AM_M = 0x00090000, // M addressing type
- AM_O = 0x000A0000, // O addressing type
- AM_P = 0x000B0000, // P addressing type
- AM_Q = 0x000C0000, // Q addressing type
- AM_R = 0x000D0000, // R addressing type
- AM_S = 0x000E0000, // S addressing type
- AM_T = 0x000F0000, // T addressing type
- AM_V = 0x00100000, // V addressing type
- AM_W = 0x00110000, // W addressing type
- AM_X = 0x00120000, // X addressing type
- AM_Y = 0x00130000, // Y addressing type
- AM_REGISTER = 0x00140000, // Specific register is always used as this op
- AM_IMPLICIT = 0x00150000, // An implicit, fixed value is used
-};
-
-// Operand types from the IA-32 manual. The enOtMask value is
-// a mask for the rest. The rest of the values are named for the
-// names given to these operand types in the manual, e.g. enOt_ps
-// is for the ps operand type in the manual.
-//
-// The reason we use a full 4 bytes and a mask, is that we need
-// to combine these flags with the enAddressingMethod to store the details
-// on the operand in a single integer.
-enum OperandType {
- OT_MASK = 0xFF000000,
- OT_A = 0x01000000,
- OT_B = 0x02000000,
- OT_C = 0x03000000,
- OT_D = 0x04000000,
- OT_DQ = 0x05000000,
- OT_P = 0x06000000,
- OT_PI = 0x07000000,
- OT_PS = 0x08000000, // actually unsupported for (we don't know its size)
- OT_Q = 0x09000000,
- OT_S = 0x0A000000,
- OT_SS = 0x0B000000,
- OT_SI = 0x0C000000,
- OT_V = 0x0D000000,
- OT_W = 0x0E000000,
- OT_SD = 0x0F000000, // scalar double-precision floating-point value
- OT_PD = 0x10000000, // double-precision floating point
- // dummy "operand type" for address mode M - which doesn't specify
- // operand type
- OT_ADDRESS_MODE_M = 0x80000000
-};
-
-// Everything that's in an Opcode (see below) except the three
-// alternative opcode structs for different prefixes.
-struct SpecificOpcode {
- // Index to continuation table, or 0 if this is the last
- // byte in the opcode.
- int table_index_;
-
- // The opcode type
- InstructionType type_;
-
- // Description of the type of the dest, src and aux operands,
- // put together from an enOperandType flag and an enAddressingMethod
- // flag.
- int flag_dest_;
- int flag_source_;
- int flag_aux_;
-
- // We indicate the mnemonic for debugging purposes
- const char* mnemonic_;
-};
-
-// The information we keep in our tables about each of the different
-// valid instructions recognized by the IA-32 architecture.
-struct Opcode {
- // Index to continuation table, or 0 if this is the last
- // byte in the opcode.
- int table_index_;
-
- // The opcode type
- InstructionType type_;
-
- // Description of the type of the dest, src and aux operands,
- // put together from an enOperandType flag and an enAddressingMethod
- // flag.
- int flag_dest_;
- int flag_source_;
- int flag_aux_;
-
- // We indicate the mnemonic for debugging purposes
- const char* mnemonic_;
-
- // Alternative opcode info if certain prefixes are specified.
- // In most cases, all of these are zeroed-out. Only used if
- // bPrefixDependent is true.
- bool is_prefix_dependent_;
- SpecificOpcode opcode_if_f2_prefix_;
- SpecificOpcode opcode_if_f3_prefix_;
- SpecificOpcode opcode_if_66_prefix_;
-};
-
-// Information about each table entry.
-struct OpcodeTable {
- // Table of instruction entries
- const Opcode* table_;
- // How many bytes left to shift ModR/M byte <b>before</b> applying mask
- unsigned char shift_;
- // Mask to apply to byte being looked at before comparing to table
- unsigned char mask_;
- // Minimum/maximum indexes in table.
- unsigned char min_lim_;
- unsigned char max_lim_;
-};
-
-// Information about each entry in table used to decode ModR/M byte.
-struct ModrmEntry {
- // Is the operand encoded as bytes in the instruction (rather than
- // if it's e.g. a register in which case it's just encoded in the
- // ModR/M byte)
- bool is_encoded_in_instruction_;
-
- // Is there a SIB byte? In this case we always need to decode it.
- bool use_sib_byte_;
-
- // What is the size of the operand (only important if it's encoded
- // in the instruction)?
- OperandSize operand_size_;
-};
-
-}; // namespace sidestep
-
-#endif // TRACELINE_SIDESTEP_MINI_DISASSEMBLER_TYPES_H_
diff --git a/chromium/tools/traceline/traceline/stubs.asm b/chromium/tools/traceline/traceline/stubs.asm
deleted file mode 100644
index d556b6bba59..00000000000
--- a/chromium/tools/traceline/traceline/stubs.asm
+++ /dev/null
@@ -1,132 +0,0 @@
-; Copyright (c) 2009 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.
-
-; This file is just a convenient place for experimenting with x86 encodings.
-
-BITS 32
-
-; sldt to detect which processor we are running on.
-sldt eax
-sidt [esp]
-sidt [esp+2]
-
-lea eax, [fs:0]
-
-mov eax, [fs:0x18]
-
-mov ebx, 0x1234567
-mov eax, 0x1234567
-
-rdtsc
-
-push eax
-pop eax
-
-mov eax, [ecx]
-mov eax, [esp+4]
-mov ebx, [esp+4]
-
-lock xadd [eax], eax
-lock xadd [ecx], ecx
-lock xadd [ecx], eax
-
-jmp eax
-jmp edx
-
-lodsd
-
-rep stosb
-
-rep movsb
-
-mov eax, ebx
-mov edx, edx
-
-mov eax, eax
-
-stosd
-
-add eax, eax
-add edi, ecx
-
-and eax, 0x0000ffff
-and ecx, 0x0000ffff
-and edx, 0x0000ffff
-
-add edi, 0x12345
-add eax, 0x12345
-add ecx, 0x12345
-
-push 0x12
-push BYTE 0x12
-
-mov eax, [ebp+8]
-
-mov eax, 0x1234
-mov [fs:0], eax
-
-call 0x1234
-
-call eax
-call ecx
-
-add ebx, BYTE 3
-or ecx, 0xffff
-or eax, 0xffff
-
-mov eax, [esp+24]
-
-movsd
-movsb
-
-jmp blah
-blah:
-jmp blah
-
-cmp eax, 0x1234567
-cmp ecx, 0x1234567
-je NEAR blah2
-jo NEAR blah2
-blah2:
-
-add esp, 12
-add esp, BYTE 12
-sub esp, BYTE 12
-
-cmp eax, 12
-cmp ecx, BYTE 12
-
-cmp WORD [esp+6], 0x6666
-
-push DWORD [edi-4]
-push DWORD [edi-8]
-push DWORD [edi-12]
-push DWORD [edi-16]
-push DWORD [edi-20]
-
-x:
-loop x
-
-mov edx, [fs:0x4]
-
-cmp ecx, ecx
-cmp ecx, ebx
-cmp ebx, ebx
-
-mov eax,[dword fs:0x24]
-mov eax,[fs:0x24]
-
-mov ecx,[dword fs:0x24]
-mov ecx,[fs:0x24]
-
-mov eax, [ebx+12]
-mov ebx, [ebx+12]
-
-cmovo eax, eax
-
-mov eax, eax
-
-xchg eax, ebx
-xchg ebx, ecx
-xchg ebx, [esp+4]
diff --git a/chromium/tools/traceline/traceline/sym_resolver.h b/chromium/tools/traceline/traceline/sym_resolver.h
deleted file mode 100644
index eb7e06c08af..00000000000
--- a/chromium/tools/traceline/traceline/sym_resolver.h
+++ /dev/null
@@ -1,167 +0,0 @@
-// Copyright (c) 2009 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.
-
-// A smaller wrapper around the dbghelp symbol resolution routines.
-// For example:
-// SymResolver resolver("ntdll.dll");
-// resolver.Resolve("ntdll!NtBlahBlah");
-
-#ifndef TRACELINE_SYM_RESOLVER_H_
-#define TRACELINE_SYM_RESOLVER_H_
-
-#include <windows.h>
-#include <dbghelp.h>
-
-#include <vector>
-#include <string>
-#include <map>
-
-static BOOL CALLBACK SymEnumer(PCSTR name, DWORD64 base, PVOID context) {
- reinterpret_cast<std::vector<DWORD64>*>(context)->push_back(base);
- return TRUE;
-}
-
-class SymResolver {
- public:
-
- // Constructor to load a single DLL.
- SymResolver(const char* dllname, HANDLE proc = ::GetCurrentProcess())
- : proc_(proc) {
-
- // TODO(deanm): Would be nice to get this from WinDBG, but it's buried
- // in the workspace data blob... _NT_SYMBOL_PATH is not usually set...
- static char* kSymbolPath =
- "C:\\Program Files\\Debugging Tools for Windows (x86)\\sym;"
- "C:\\Program Files\\Debugging Tools for Windows\\sym";
-
- // If we want to load a specific DLL, or we want to load all.
- if (::SymInitialize(proc_, kSymbolPath, dllname ? FALSE : TRUE) != TRUE) {
- NOTREACHED("SymInitialize failed: %d", GetLastError());
- }
-
- base_ = 0;
-
- if (dllname) {
- base_ = ::SymLoadModuleEx(proc_,
- NULL,
- const_cast<char*>(dllname),
- NULL,
- reinterpret_cast<DWORD64>(
- GetModuleHandleA(dllname)),
- 0,
- NULL,
- 0);
- if (base_ == 0) {
- NOTREACHED("SymLoadModuleEx(%s) failed: %d", dllname, GetLastError());
- }
- }
-
- std::vector<DWORD64> bases;
- // The name returned from SymEnumerateModules64 doesn't include the ext,
- // so we can't differentiate between a dll and exe of the same name. So
- // collect all of the base addresses and query for more info.
- // The prototype changed from PSTR to PCSTR, so in order to support older
- // SDKs we have to cast SymEnumer.
- PSYM_ENUMMODULES_CALLBACK64 enumer =
- reinterpret_cast<PSYM_ENUMMODULES_CALLBACK64>(&SymEnumer);
- if (SymEnumerateModules64(proc_, enumer, &bases) != TRUE) {
- NOTREACHED("SymEnumerateModules64 failed: %d\n", GetLastError());
- }
- for (size_t i = 0; i < bases.size(); ++i) {
- // This was failing, turns out I was just using the system32
- // dbghelp.dll which is old, use the one from windbg :(
- IMAGEHLP_MODULE64 info;
- info.SizeOfStruct = sizeof(info);
- if (SymGetModuleInfo64(proc_, bases[i], &info) != TRUE) {
- NOTREACHED("SymGetModuleInfo64 failed: %d\n", GetLastError());
- }
- std::string filename(info.ImageName);
- size_t last_slash = filename.find_last_of('\\');
- if (last_slash != std::string::npos)
- filename = filename.substr(filename.find_last_of('\\') + 1);
-
- // Map the base address to the image name...
- dlls_[static_cast<int>(bases[i])] = filename;
- }
-
- // TODO(deanm): check the symbols are rad and stuff...
- }
-
- char* Resolve(const char* name) {
- // The API writes to the space after SYMBOL_INFO...
- struct {
- SYMBOL_INFO info;
- char buf[128];
- } info = {0};
-
- info.info.SizeOfStruct = sizeof(info.info);
- info.info.ModBase = base_;
- info.info.MaxNameLen = 127;
-
- if (SymFromName(proc_, const_cast<char*>(name), &info.info) != TRUE) {
- NOTREACHED("SymFromName(%s) failed: %d", name, GetLastError());
- }
-
- return reinterpret_cast<char*>(info.info.Address);
- }
-
- std::string Unresolve(int ptr) {
- // The API writes to the space after SYMBOL_INFO...
- struct {
- SYMBOL_INFO info;
- char buf[128];
- } info = {0};
-
- info.info.SizeOfStruct = sizeof(info.info);
- info.info.ModBase = base_;
- info.info.MaxNameLen = 127;
- if (!::SymFromAddr(proc_, static_cast<DWORD64>(ptr), NULL, &info.info)) {
- return std::string("failed");
- }
-
- std::string name;
- int addr = static_cast<int>(info.info.Address);
- int base = static_cast<int>(info.info.ModBase);
-
- if (dlls_.count(base) == 1) {
- name.append(dlls_[base]);
- } else {
- name.append("unknown_mod");
- }
- name.push_back('!');
- name.append(info.info.Name);
-
- char buf[32];
- _itoa_s(ptr - addr, buf, sizeof(buf), 16);
- name.append("+0x");
- name.append(buf);
-
- DWORD disp;
- IMAGEHLP_LINE64 line;
- if (::SymGetLineFromAddr64(
- proc_, static_cast<DWORD64>(ptr), &disp, &line)) {
- name.append(" [ ");
- name.append(line.FileName);
- name.append(":");
- _itoa_s(line.LineNumber, buf, sizeof(buf), 10);
- name.append(buf);
- name.append(" ]");
- }
-
- return name;
- }
-
- ~SymResolver() {
- if (::SymCleanup(proc_) != TRUE) {
- NOTREACHED("SymCleanup failed: %d", GetLastError());
- }
- }
-
- private:
- HANDLE proc_;
- ULONG64 base_;
- std::map<int, std::string> dlls_;
-};
-
-#endif // TRACELINE_SYM_RESOLVER_H_
diff --git a/chromium/tools/traceline/traceline/syscall_map.h b/chromium/tools/traceline/traceline/syscall_map.h
deleted file mode 100644
index 515e9c7863b..00000000000
--- a/chromium/tools/traceline/traceline/syscall_map.h
+++ /dev/null
@@ -1,2116 +0,0 @@
-// Copyright (c) 2009 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.
-
-// This table is a dump of system call numbers -> function names on an XP
-// system. These numbers change between kernel versions, so it's likely they
-// will have to be regenerated for your system. See the idarub script.
-
-// Define a global map used for resolving a syscall number to name.
-// Call CreateSyscallMap() to create a return a std::map<int, const char*>
-// which maps from a system call number to its function name.
-
-#ifndef TRACELINE_SYSCALL_MAP_H_
-#define TRACELINE_SYSCALL_MAP_H_
-
-#include <map>
-
-// TODO(deanm): Right now these tables are manually extracted and hardcoded
-// here. It would be great (but possibly difficult) to do it on startup. We
-// should at least checksum the DLLs to make sure they match.
-
-std::map<int, const char*> CreateSyscallMap() {
- std::map<int, const char*> table;
-if (1) { // XP table.
- table[0] = "ntdll.dll!NtAcceptConnectPort";
- table[1] = "ntdll.dll!NtAccessCheck";
- table[2] = "ntdll.dll!ZwAccessCheckAndAuditAlarm";
- table[3] = "ntdll.dll!NtAccessCheckByType";
- table[4] = "ntdll.dll!NtAccessCheckByTypeAndAuditAlarm";
- table[5] = "ntdll.dll!NtAccessCheckByTypeResultList";
- table[6] = "ntdll.dll!NtAccessCheckByTypeResultListAndAuditAlarm";
- table[7] = "ntdll.dll!ZwAccessCheckByTypeResultListAndAuditAlarmByHandle";
- table[8] = "ntdll.dll!NtAddAtom";
- table[9] = "ntdll.dll!ZwAddBootEntry";
- table[10] = "ntdll.dll!ZwAdjustGroupsToken";
- table[11] = "ntdll.dll!ZwAdjustPrivilegesToken";
- table[12] = "ntdll.dll!NtAlertResumeThread";
- table[13] = "ntdll.dll!NtAlertThread";
- table[14] = "ntdll.dll!ZwAllocateLocallyUniqueId";
- table[15] = "ntdll.dll!NtAllocateUserPhysicalPages";
- table[16] = "ntdll.dll!NtAllocateUuids";
- table[17] = "ntdll.dll!NtAllocateVirtualMemory";
- table[18] = "ntdll.dll!ZwAreMappedFilesTheSame";
- table[19] = "ntdll.dll!ZwAssignProcessToJobObject";
- table[20] = "ntdll.dll!ZwCallbackReturn";
- table[21] = "ntdll.dll!NtCancelDeviceWakeupRequest";
- table[22] = "ntdll.dll!ZwCancelIoFile";
- table[23] = "ntdll.dll!ZwCancelTimer";
- table[24] = "ntdll.dll!NtClearEvent";
- table[25] = "ntdll.dll!NtClose";
- table[26] = "ntdll.dll!ZwCloseObjectAuditAlarm";
- table[27] = "ntdll.dll!NtCompactKeys";
- table[28] = "ntdll.dll!ZwCompareTokens";
- table[29] = "ntdll.dll!NtCompleteConnectPort";
- table[30] = "ntdll.dll!ZwCompressKey";
- table[31] = "ntdll.dll!NtConnectPort";
- table[32] = "ntdll.dll!ZwContinue";
- table[33] = "ntdll.dll!ZwCreateDebugObject";
- table[34] = "ntdll.dll!ZwCreateDirectoryObject";
- table[35] = "ntdll.dll!NtCreateEvent";
- table[36] = "ntdll.dll!NtCreateEventPair";
- table[37] = "ntdll.dll!NtCreateFile";
- table[38] = "ntdll.dll!NtCreateIoCompletion";
- table[39] = "ntdll.dll!ZwCreateJobObject";
- table[40] = "ntdll.dll!NtCreateJobSet";
- table[41] = "ntdll.dll!ZwCreateKey";
- table[42] = "ntdll.dll!ZwCreateMailslotFile";
- table[43] = "ntdll.dll!ZwCreateMutant";
- table[44] = "ntdll.dll!ZwCreateNamedPipeFile";
- table[45] = "ntdll.dll!NtCreatePagingFile";
- table[46] = "ntdll.dll!ZwCreatePort";
- table[47] = "ntdll.dll!ZwCreateProcess";
- table[48] = "ntdll.dll!ZwCreateProcessEx";
- table[49] = "ntdll.dll!ZwCreateProfile";
- table[50] = "ntdll.dll!NtCreateSection";
- table[51] = "ntdll.dll!NtCreateSemaphore";
- table[52] = "ntdll.dll!ZwCreateSymbolicLinkObject";
- table[53] = "ntdll.dll!NtCreateThread";
- table[54] = "ntdll.dll!ZwCreateTimer";
- table[55] = "ntdll.dll!NtCreateToken";
- table[56] = "ntdll.dll!ZwCreateWaitablePort";
- table[57] = "ntdll.dll!NtDebugActiveProcess";
- table[58] = "ntdll.dll!ZwDebugContinue";
- table[59] = "ntdll.dll!ZwDelayExecution";
- table[60] = "ntdll.dll!ZwDeleteAtom";
- table[61] = "ntdll.dll!NtDeleteBootEntry";
- table[62] = "ntdll.dll!NtDeleteFile";
- table[63] = "ntdll.dll!ZwDeleteKey";
- table[64] = "ntdll.dll!NtDeleteObjectAuditAlarm";
- table[65] = "ntdll.dll!NtDeleteValueKey";
- table[66] = "ntdll.dll!ZwDeviceIoControlFile";
- table[67] = "ntdll.dll!NtDisplayString";
- table[68] = "ntdll.dll!ZwDuplicateObject";
- table[69] = "ntdll.dll!NtDuplicateToken";
- table[70] = "ntdll.dll!ZwEnumerateBootEntries";
- table[71] = "ntdll.dll!ZwEnumerateKey";
- table[72] = "ntdll.dll!ZwEnumerateSystemEnvironmentValuesEx";
- table[73] = "ntdll.dll!NtEnumerateValueKey";
- table[74] = "ntdll.dll!ZwExtendSection";
- table[75] = "ntdll.dll!NtFilterToken";
- table[76] = "ntdll.dll!NtFindAtom";
- table[77] = "ntdll.dll!ZwFlushBuffersFile";
- table[78] = "ntdll.dll!ZwFlushInstructionCache";
- table[79] = "ntdll.dll!NtFlushKey";
- table[80] = "ntdll.dll!ZwFlushVirtualMemory";
- table[81] = "ntdll.dll!NtFlushWriteBuffer";
- table[82] = "ntdll.dll!NtFreeUserPhysicalPages";
- table[83] = "ntdll.dll!NtFreeVirtualMemory";
- table[84] = "ntdll.dll!NtFsControlFile";
- table[85] = "ntdll.dll!NtGetContextThread";
- table[86] = "ntdll.dll!NtGetDevicePowerState";
- table[87] = "ntdll.dll!ZwGetPlugPlayEvent";
- table[88] = "ntdll.dll!NtGetWriteWatch";
- table[89] = "ntdll.dll!NtImpersonateAnonymousToken";
- table[90] = "ntdll.dll!ZwImpersonateClientOfPort";
- table[91] = "ntdll.dll!ZwImpersonateThread";
- table[92] = "ntdll.dll!ZwInitializeRegistry";
- table[93] = "ntdll.dll!NtInitiatePowerAction";
- table[94] = "ntdll.dll!ZwIsProcessInJob";
- table[95] = "ntdll.dll!NtIsSystemResumeAutomatic";
- table[96] = "ntdll.dll!ZwListenPort";
- table[97] = "ntdll.dll!NtLoadDriver";
- table[98] = "ntdll.dll!NtLoadKey";
- table[99] = "ntdll.dll!NtLoadKey2";
- table[100] = "ntdll.dll!NtLockFile";
- table[101] = "ntdll.dll!ZwLockProductActivationKeys";
- table[102] = "ntdll.dll!NtLockRegistryKey";
- table[103] = "ntdll.dll!ZwLockVirtualMemory";
- table[104] = "ntdll.dll!ZwMakePermanentObject";
- table[105] = "ntdll.dll!NtMakeTemporaryObject";
- table[106] = "ntdll.dll!NtMapUserPhysicalPages";
- table[107] = "ntdll.dll!ZwMapUserPhysicalPagesScatter";
- table[108] = "ntdll.dll!ZwMapViewOfSection";
- table[109] = "ntdll.dll!NtModifyBootEntry";
- table[110] = "ntdll.dll!NtNotifyChangeDirectoryFile";
- table[111] = "ntdll.dll!NtNotifyChangeKey";
- table[112] = "ntdll.dll!NtNotifyChangeMultipleKeys";
- table[113] = "ntdll.dll!ZwOpenDirectoryObject";
- table[114] = "ntdll.dll!NtOpenEvent";
- table[115] = "ntdll.dll!NtOpenEventPair";
- table[116] = "ntdll.dll!NtOpenFile";
- table[117] = "ntdll.dll!ZwOpenIoCompletion";
- table[118] = "ntdll.dll!ZwOpenJobObject";
- table[119] = "ntdll.dll!ZwOpenKey";
- table[120] = "ntdll.dll!NtOpenMutant";
- table[121] = "ntdll.dll!ZwOpenObjectAuditAlarm";
- table[122] = "ntdll.dll!ZwOpenProcess";
- table[123] = "ntdll.dll!ZwOpenProcessToken";
- table[124] = "ntdll.dll!ZwOpenProcessTokenEx";
- table[125] = "ntdll.dll!NtOpenSection";
- table[126] = "ntdll.dll!NtOpenSemaphore";
- table[127] = "ntdll.dll!NtOpenSymbolicLinkObject";
- table[128] = "ntdll.dll!ZwOpenThread";
- table[129] = "ntdll.dll!NtOpenThreadToken";
- table[130] = "ntdll.dll!NtOpenThreadTokenEx";
- table[131] = "ntdll.dll!ZwOpenTimer";
- table[132] = "ntdll.dll!NtPlugPlayControl";
- table[133] = "ntdll.dll!ZwPowerInformation";
- table[134] = "ntdll.dll!ZwPrivilegeCheck";
- table[135] = "ntdll.dll!ZwPrivilegeObjectAuditAlarm";
- table[136] = "ntdll.dll!NtPrivilegedServiceAuditAlarm";
- table[137] = "ntdll.dll!ZwProtectVirtualMemory";
- table[138] = "ntdll.dll!ZwPulseEvent";
- table[139] = "ntdll.dll!ZwQueryAttributesFile";
- table[140] = "ntdll.dll!ZwQueryBootEntryOrder";
- table[141] = "ntdll.dll!ZwQueryBootOptions";
- table[142] = "ntdll.dll!NtQueryDebugFilterState";
- table[143] = "ntdll.dll!NtQueryDefaultLocale";
- table[144] = "ntdll.dll!ZwQueryDefaultUILanguage";
- table[145] = "ntdll.dll!ZwQueryDirectoryFile";
- table[146] = "ntdll.dll!ZwQueryDirectoryObject";
- table[147] = "ntdll.dll!ZwQueryEaFile";
- table[148] = "ntdll.dll!NtQueryEvent";
- table[149] = "ntdll.dll!ZwQueryFullAttributesFile";
- table[150] = "ntdll.dll!NtQueryInformationAtom";
- table[151] = "ntdll.dll!ZwQueryInformationFile";
- table[152] = "ntdll.dll!ZwQueryInformationJobObject";
- table[153] = "ntdll.dll!ZwQueryInformationPort";
- table[154] = "ntdll.dll!ZwQueryInformationProcess";
- table[155] = "ntdll.dll!NtQueryInformationThread";
- table[156] = "ntdll.dll!ZwQueryInformationToken";
- table[157] = "ntdll.dll!NtQueryInstallUILanguage";
- table[158] = "ntdll.dll!NtQueryIntervalProfile";
- table[159] = "ntdll.dll!NtQueryIoCompletion";
- table[160] = "ntdll.dll!ZwQueryKey";
- table[161] = "ntdll.dll!NtQueryMultipleValueKey";
- table[162] = "ntdll.dll!NtQueryMutant";
- table[163] = "ntdll.dll!NtQueryObject";
- table[164] = "ntdll.dll!NtQueryOpenSubKeys";
- table[165] = "ntdll.dll!NtQueryPerformanceCounter";
- table[166] = "ntdll.dll!ZwQueryQuotaInformationFile";
- table[167] = "ntdll.dll!ZwQuerySection";
- table[168] = "ntdll.dll!NtQuerySecurityObject";
- table[169] = "ntdll.dll!ZwQuerySemaphore";
- table[170] = "ntdll.dll!ZwQuerySymbolicLinkObject";
- table[171] = "ntdll.dll!ZwQuerySystemEnvironmentValue";
- table[172] = "ntdll.dll!ZwQuerySystemEnvironmentValueEx";
- table[173] = "ntdll.dll!NtQuerySystemInformation";
- table[174] = "ntdll.dll!NtQuerySystemTime";
- table[175] = "ntdll.dll!ZwQueryTimer";
- table[176] = "ntdll.dll!NtQueryTimerResolution";
- table[177] = "ntdll.dll!ZwQueryValueKey";
- table[178] = "ntdll.dll!NtQueryVirtualMemory";
- table[179] = "ntdll.dll!NtQueryVolumeInformationFile";
- table[180] = "ntdll.dll!NtQueueApcThread";
- table[181] = "ntdll.dll!ZwRaiseException";
- table[182] = "ntdll.dll!ZwRaiseHardError";
- table[183] = "ntdll.dll!NtReadFile";
- table[184] = "ntdll.dll!NtReadFileScatter";
- table[185] = "ntdll.dll!ZwReadRequestData";
- table[186] = "ntdll.dll!NtReadVirtualMemory";
- table[187] = "ntdll.dll!ZwRegisterThreadTerminatePort";
- table[188] = "ntdll.dll!ZwReleaseMutant";
- table[189] = "ntdll.dll!NtReleaseSemaphore";
- table[190] = "ntdll.dll!ZwRemoveIoCompletion";
- table[191] = "ntdll.dll!ZwRemoveProcessDebug";
- table[192] = "ntdll.dll!ZwRenameKey";
- table[193] = "ntdll.dll!ZwReplaceKey";
- table[194] = "ntdll.dll!ZwReplyPort";
- table[195] = "ntdll.dll!NtReplyWaitReceivePort";
- table[196] = "ntdll.dll!NtReplyWaitReceivePortEx";
- table[197] = "ntdll.dll!NtReplyWaitReplyPort";
- table[198] = "ntdll.dll!ZwRequestDeviceWakeup";
- table[199] = "ntdll.dll!ZwRequestPort";
- table[200] = "ntdll.dll!NtRequestWaitReplyPort";
- table[201] = "ntdll.dll!ZwRequestWakeupLatency";
- table[202] = "ntdll.dll!NtResetEvent";
- table[203] = "ntdll.dll!ZwResetWriteWatch";
- table[204] = "ntdll.dll!NtRestoreKey";
- table[205] = "ntdll.dll!ZwResumeProcess";
- table[206] = "ntdll.dll!ZwResumeThread";
- table[207] = "ntdll.dll!NtSaveKey";
- table[208] = "ntdll.dll!NtSaveKeyEx";
- table[209] = "ntdll.dll!NtSaveMergedKeys";
- table[210] = "ntdll.dll!NtSecureConnectPort";
- table[211] = "ntdll.dll!ZwSetBootEntryOrder";
- table[212] = "ntdll.dll!ZwSetBootOptions";
- table[213] = "ntdll.dll!ZwSetContextThread";
- table[214] = "ntdll.dll!NtSetDebugFilterState";
- table[215] = "ntdll.dll!NtSetDefaultHardErrorPort";
- table[216] = "ntdll.dll!NtSetDefaultLocale";
- table[217] = "ntdll.dll!ZwSetDefaultUILanguage";
- table[218] = "ntdll.dll!ZwSetEaFile";
- table[219] = "ntdll.dll!NtSetEvent";
- table[220] = "ntdll.dll!NtSetEventBoostPriority";
- table[221] = "ntdll.dll!NtSetHighEventPair";
- table[222] = "ntdll.dll!NtSetHighWaitLowEventPair";
- table[223] = "ntdll.dll!ZwSetInformationDebugObject";
- table[224] = "ntdll.dll!ZwSetInformationFile";
- table[225] = "ntdll.dll!ZwSetInformationJobObject";
- table[226] = "ntdll.dll!ZwSetInformationKey";
- table[227] = "ntdll.dll!ZwSetInformationObject";
- table[228] = "ntdll.dll!ZwSetInformationProcess";
- table[229] = "ntdll.dll!ZwSetInformationThread";
- table[230] = "ntdll.dll!ZwSetInformationToken";
- table[231] = "ntdll.dll!NtSetIntervalProfile";
- table[232] = "ntdll.dll!NtSetIoCompletion";
- table[233] = "ntdll.dll!ZwSetLdtEntries";
- table[234] = "ntdll.dll!ZwSetLowEventPair";
- table[235] = "ntdll.dll!ZwSetLowWaitHighEventPair";
- table[236] = "ntdll.dll!ZwSetQuotaInformationFile";
- table[237] = "ntdll.dll!NtSetSecurityObject";
- table[238] = "ntdll.dll!ZwSetSystemEnvironmentValue";
- table[239] = "ntdll.dll!ZwSetSystemEnvironmentValueEx";
- table[240] = "ntdll.dll!ZwSetSystemInformation";
- table[241] = "ntdll.dll!ZwSetSystemPowerState";
- table[242] = "ntdll.dll!ZwSetSystemTime";
- table[243] = "ntdll.dll!ZwSetThreadExecutionState";
- table[244] = "ntdll.dll!ZwSetTimer";
- table[245] = "ntdll.dll!NtSetTimerResolution";
- table[246] = "ntdll.dll!ZwSetUuidSeed";
- table[247] = "ntdll.dll!ZwSetValueKey";
- table[248] = "ntdll.dll!NtSetVolumeInformationFile";
- table[249] = "ntdll.dll!ZwShutdownSystem";
- table[250] = "ntdll.dll!ZwSignalAndWaitForSingleObject";
- table[251] = "ntdll.dll!NtStartProfile";
- table[252] = "ntdll.dll!ZwStopProfile";
- table[253] = "ntdll.dll!ZwSuspendProcess";
- table[254] = "ntdll.dll!ZwSuspendThread";
- table[255] = "ntdll.dll!NtSystemDebugControl";
- table[256] = "ntdll.dll!ZwTerminateJobObject";
- table[257] = "ntdll.dll!ZwTerminateProcess";
- table[258] = "ntdll.dll!ZwTerminateThread";
- table[259] = "ntdll.dll!NtTestAlert";
- table[260] = "ntdll.dll!NtTraceEvent";
- table[261] = "ntdll.dll!NtTranslateFilePath";
- table[262] = "ntdll.dll!ZwUnloadDriver";
- table[263] = "ntdll.dll!NtUnloadKey";
- table[264] = "ntdll.dll!ZwUnloadKeyEx";
- table[265] = "ntdll.dll!ZwUnlockFile";
- table[266] = "ntdll.dll!NtUnlockVirtualMemory";
- table[267] = "ntdll.dll!NtUnmapViewOfSection";
- table[268] = "ntdll.dll!NtVdmControl";
- table[269] = "ntdll.dll!NtWaitForDebugEvent";
- table[270] = "ntdll.dll!NtWaitForMultipleObjects";
- table[271] = "ntdll.dll!ZwWaitForSingleObject";
- table[272] = "ntdll.dll!ZwWaitHighEventPair";
- table[273] = "ntdll.dll!NtWaitLowEventPair";
- table[274] = "ntdll.dll!NtWriteFile";
- table[275] = "ntdll.dll!NtWriteFileGather";
- table[276] = "ntdll.dll!NtWriteRequestData";
- table[277] = "ntdll.dll!NtWriteVirtualMemory";
- table[278] = "ntdll.dll!ZwYieldExecution";
- table[279] = "ntdll.dll!ZwCreateKeyedEvent";
- table[280] = "ntdll.dll!NtOpenKeyedEvent";
- table[281] = "ntdll.dll!NtReleaseKeyedEvent";
- table[282] = "ntdll.dll!NtWaitForKeyedEvent";
- table[283] = "ntdll.dll!ZwQueryPortInformationProcess";
- table[4096] = "gdi32.dll!NtGdiAbortDoc";
- table[4097] = "gdi32.dll!NtGdiAbortPath";
- table[4098] = "gdi32.dll!NtGdiAddFontResourceW";
- table[4099] = "gdi32.dll!NtGdiAddRemoteFontToDC";
- table[4100] = "gdi32.dll!NtGdiAddFontMemResourceEx";
- table[4101] = "gdi32.dll!NtGdiRemoveMergeFont";
- table[4102] = "gdi32.dll!NtGdiAddRemoteMMInstanceToDC";
- table[4103] = "gdi32.dll!NtGdiAlphaBlend";
- table[4104] = "gdi32.dll!NtGdiAngleArc";
- table[4105] = "gdi32.dll!NtGdiAnyLinkedFonts";
- table[4106] = "gdi32.dll!NtGdiFontIsLinked";
- table[4107] = "gdi32.dll!NtGdiArcInternal";
- table[4108] = "gdi32.dll!NtGdiBeginPath";
- table[4109] = "gdi32.dll!NtGdiBitBlt";
- table[4110] = "gdi32.dll!NtGdiCancelDC";
- table[4111] = "gdi32.dll!NtGdiCheckBitmapBits";
- table[4112] = "gdi32.dll!NtGdiCloseFigure";
- table[4113] = "gdi32.dll!NtGdiClearBitmapAttributes";
- table[4114] = "gdi32.dll!NtGdiClearBrushAttributes";
- table[4115] = "gdi32.dll!NtGdiColorCorrectPalette";
- table[4116] = "gdi32.dll!NtGdiCombineRgn";
- table[4117] = "gdi32.dll!CombineTransform";
- table[4118] = "gdi32.dll!NtGdiComputeXformCoefficients";
- table[4119] = "gdi32.dll!NtGdiConsoleTextOut";
- table[4120] = "gdi32.dll!NtGdiConvertMetafileRect";
- table[4121] = "gdi32.dll!NtGdiCreateBitmap";
- table[4122] = "gdi32.dll!NtGdiCreateClientObj";
- table[4123] = "gdi32.dll!NtGdiCreateColorSpace";
- table[4124] = "gdi32.dll!NtGdiCreateColorTransform";
- table[4125] = "gdi32.dll!NtGdiCreateCompatibleBitmap";
- table[4126] = "gdi32.dll!NtGdiCreateCompatibleDC";
- table[4127] = "gdi32.dll!NtGdiCreateDIBBrush";
- table[4128] = "gdi32.dll!NtGdiCreateDIBitmapInternal";
- table[4129] = "gdi32.dll!NtGdiCreateDIBSection";
- table[4130] = "gdi32.dll!NtGdiCreateEllipticRgn";
- table[4131] = "gdi32.dll!NtGdiCreateHalftonePalette";
- table[4132] = "gdi32.dll!NtGdiCreateHatchBrushInternal";
- table[4133] = "gdi32.dll!NtGdiCreateMetafileDC";
- table[4134] = "gdi32.dll!NtGdiCreatePaletteInternal";
- table[4135] = "gdi32.dll!NtGdiCreatePatternBrushInternal";
- table[4136] = "gdi32.dll!CreatePen";
- table[4137] = "gdi32.dll!NtGdiCreateRectRgn";
- table[4138] = "gdi32.dll!CreateRoundRectRgn";
- table[4139] = "gdi32.dll!NtGdiCreateServerMetaFile";
- table[4140] = "gdi32.dll!NtGdiCreateSolidBrush";
- table[4141] = "gdi32.dll!NtGdiD3dContextCreate";
- table[4142] = "gdi32.dll!NtGdiD3dContextDestroy";
- table[4143] = "gdi32.dll!NtGdiD3dContextDestroyAll";
- table[4144] = "gdi32.dll!NtGdiD3dValidateTextureStageState";
- table[4145] = "gdi32.dll!NtGdiD3dDrawPrimitives2";
- table[4146] = "gdi32.dll!NtGdiDdGetDriverState";
- table[4147] = "gdi32.dll!NtGdiDdAddAttachedSurface";
- table[4148] = "gdi32.dll!NtGdiDdAlphaBlt";
- table[4149] = "gdi32.dll!NtGdiDdAttachSurface";
- table[4150] = "gdi32.dll!NtGdiDdBeginMoCompFrame";
- table[4151] = "gdi32.dll!NtGdiDdBlt";
- table[4152] = "gdi32.dll!NtGdiDdCanCreateSurface";
- table[4153] = "gdi32.dll!NtGdiDdCanCreateD3DBuffer";
- table[4154] = "gdi32.dll!NtGdiDdColorControl";
- table[4155] = "gdi32.dll!NtGdiDdCreateDirectDrawObject";
- table[4156] = "gdi32.dll!NtGdiDdCreateSurface";
- table[4157] = "gdi32.dll!NtGdiDdCreateD3DBuffer";
- table[4158] = "gdi32.dll!NtGdiDdCreateMoComp";
- table[4159] = "gdi32.dll!NtGdiDdCreateSurfaceObject";
- table[4160] = "gdi32.dll!NtGdiDdDeleteDirectDrawObject";
- table[4161] = "gdi32.dll!NtGdiDdDeleteSurfaceObject";
- table[4162] = "gdi32.dll!NtGdiDdDestroyMoComp";
- table[4163] = "gdi32.dll!NtGdiDdDestroySurface";
- table[4164] = "gdi32.dll!NtGdiDdDestroyD3DBuffer";
- table[4165] = "gdi32.dll!NtGdiDdEndMoCompFrame";
- table[4166] = "gdi32.dll!NtGdiDdFlip";
- table[4167] = "gdi32.dll!NtGdiDdFlipToGDISurface";
- table[4168] = "gdi32.dll!NtGdiDdGetAvailDriverMemory";
- table[4169] = "gdi32.dll!NtGdiDdGetBltStatus";
- table[4170] = "gdi32.dll!NtGdiDdGetDC";
- table[4171] = "gdi32.dll!NtGdiDdGetDriverInfo";
- table[4172] = "gdi32.dll!NtGdiDdGetDxHandle";
- table[4173] = "gdi32.dll!NtGdiDdGetFlipStatus";
- table[4174] = "gdi32.dll!NtGdiDdGetInternalMoCompInfo";
- table[4175] = "gdi32.dll!NtGdiDdGetMoCompBuffInfo";
- table[4176] = "gdi32.dll!NtGdiDdGetMoCompGuids";
- table[4177] = "gdi32.dll!NtGdiDdGetMoCompFormats";
- table[4178] = "gdi32.dll!NtGdiDdGetScanLine";
- table[4179] = "gdi32.dll!NtGdiDdLock";
- table[4180] = "gdi32.dll!NtGdiDdLockD3D";
- table[4181] = "gdi32.dll!NtGdiDdQueryDirectDrawObject";
- table[4182] = "gdi32.dll!NtGdiDdQueryMoCompStatus";
- table[4183] = "gdi32.dll!NtGdiDdReenableDirectDrawObject";
- table[4184] = "gdi32.dll!NtGdiDdReleaseDC";
- table[4185] = "gdi32.dll!NtGdiDdRenderMoComp";
- table[4186] = "gdi32.dll!NtGdiDdResetVisrgn";
- table[4187] = "gdi32.dll!NtGdiDdSetColorKey";
- table[4188] = "gdi32.dll!NtGdiDdSetExclusiveMode";
- table[4189] = "gdi32.dll!NtGdiDdSetGammaRamp";
- table[4190] = "gdi32.dll!NtGdiDdCreateSurfaceEx";
- table[4191] = "gdi32.dll!NtGdiDdSetOverlayPosition";
- table[4192] = "gdi32.dll!NtGdiDdUnattachSurface";
- table[4193] = "gdi32.dll!NtGdiDdUnlock";
- table[4194] = "gdi32.dll!NtGdiDdUnlockD3D";
- table[4195] = "gdi32.dll!NtGdiDdUpdateOverlay";
- table[4196] = "gdi32.dll!NtGdiDdWaitForVerticalBlank";
- table[4197] = "gdi32.dll!NtGdiDvpCanCreateVideoPort";
- table[4198] = "gdi32.dll!NtGdiDvpColorControl";
- table[4199] = "gdi32.dll!NtGdiDvpCreateVideoPort";
- table[4200] = "gdi32.dll!NtGdiDvpDestroyVideoPort";
- table[4201] = "gdi32.dll!NtGdiDvpFlipVideoPort";
- table[4202] = "gdi32.dll!NtGdiDvpGetVideoPortBandwidth";
- table[4203] = "gdi32.dll!NtGdiDvpGetVideoPortField";
- table[4204] = "gdi32.dll!NtGdiDvpGetVideoPortFlipStatus";
- table[4205] = "gdi32.dll!NtGdiDvpGetVideoPortInputFormats";
- table[4206] = "gdi32.dll!NtGdiDvpGetVideoPortLine";
- table[4207] = "gdi32.dll!NtGdiDvpGetVideoPortOutputFormats";
- table[4208] = "gdi32.dll!NtGdiDvpGetVideoPortConnectInfo";
- table[4209] = "gdi32.dll!NtGdiDvpGetVideoSignalStatus";
- table[4210] = "gdi32.dll!NtGdiDvpUpdateVideoPort";
- table[4211] = "gdi32.dll!NtGdiDvpWaitForVideoPortSync";
- table[4212] = "gdi32.dll!NtGdiDvpAcquireNotification";
- table[4213] = "gdi32.dll!NtGdiDvpReleaseNotification";
- table[4214] = "gdi32.dll!NtGdiDxgGenericThunk";
- table[4215] = "gdi32.dll!NtGdiDeleteClientObj";
- table[4216] = "gdi32.dll!NtGdiDeleteColorSpace";
- table[4217] = "gdi32.dll!NtGdiDeleteColorTransform";
- table[4218] = "gdi32.dll!DeleteObject";
- table[4219] = "gdi32.dll!NtGdiDescribePixelFormat";
- table[4220] = "gdi32.dll!NtGdiGetPerBandInfo";
- table[4221] = "gdi32.dll!NtGdiDoBanding";
- table[4222] = "gdi32.dll!NtGdiDoPalette";
- table[4223] = "gdi32.dll!NtGdiDrawEscape";
- table[4224] = "gdi32.dll!NtGdiEllipse";
- table[4225] = "gdi32.dll!NtGdiEnableEudc";
- table[4226] = "gdi32.dll!NtGdiEndDoc";
- table[4227] = "gdi32.dll!NtGdiEndPage";
- table[4228] = "gdi32.dll!NtGdiEndPath";
- table[4229] = "gdi32.dll!NtGdiEnumFontChunk";
- table[4230] = "gdi32.dll!NtGdiEnumFontClose";
- table[4231] = "gdi32.dll!NtGdiEnumFontOpen";
- table[4232] = "gdi32.dll!NtGdiEnumObjects";
- table[4233] = "gdi32.dll!NtGdiEqualRgn";
- table[4234] = "gdi32.dll!NtGdiEudcLoadUnloadLink";
- table[4235] = "gdi32.dll!NtGdiExcludeClipRect";
- table[4236] = "gdi32.dll!NtGdiExtCreatePen";
- table[4237] = "gdi32.dll!NtGdiExtCreateRegion";
- table[4238] = "gdi32.dll!NtGdiExtEscape";
- table[4239] = "gdi32.dll!NtGdiExtFloodFill";
- table[4240] = "gdi32.dll!NtGdiExtGetObjectW";
- table[4241] = "gdi32.dll!ExtSelectClipRgn";
- table[4242] = "gdi32.dll!NtGdiExtTextOutW";
- table[4243] = "gdi32.dll!NtGdiFillPath";
- table[4244] = "gdi32.dll!NtGdiFillRgn";
- table[4245] = "gdi32.dll!NtGdiFlattenPath";
- table[4247] = "gdi32.dll!NtGdiFlush";
- table[4248] = "gdi32.dll!NtGdiForceUFIMapping";
- table[4249] = "gdi32.dll!NtGdiFrameRgn";
- table[4250] = "gdi32.dll!NtGdiFullscreenControl";
- table[4251] = "gdi32.dll!NtGdiGetAndSetDCDword";
- table[4252] = "gdi32.dll!GetClipBox";
- table[4253] = "gdi32.dll!GetBitmapBits";
- table[4254] = "gdi32.dll!NtGdiGetBitmapDimension";
- table[4255] = "gdi32.dll!NtGdiGetBoundsRect";
- table[4256] = "gdi32.dll!NtGdiGetCharABCWidthsW";
- table[4257] = "gdi32.dll!NtGdiGetCharacterPlacementW";
- table[4258] = "gdi32.dll!NtGdiGetCharSet";
- table[4259] = "gdi32.dll!NtGdiGetCharWidthW";
- table[4260] = "gdi32.dll!NtGdiGetCharWidthInfo";
- table[4261] = "gdi32.dll!NtGdiGetColorAdjustment";
- table[4263] = "gdi32.dll!NtGdiGetDCDword";
- table[4264] = "gdi32.dll!NtGdiGetDCforBitmap";
- table[4265] = "gdi32.dll!NtGdiGetDCObject";
- table[4266] = "gdi32.dll!NtGdiGetDCPoint";
- table[4267] = "gdi32.dll!NtGdiGetDeviceCaps";
- table[4268] = "gdi32.dll!NtGdiGetDeviceGammaRamp";
- table[4269] = "gdi32.dll!NtGdiGetDeviceCapsAll";
- table[4270] = "gdi32.dll!NtGdiGetDIBitsInternal";
- table[4271] = "gdi32.dll!NtGdiGetETM";
- table[4272] = "gdi32.dll!NtGdiGetEudcTimeStampEx";
- table[4273] = "gdi32.dll!GetFontData";
- table[4274] = "gdi32.dll!NtGdiGetFontResourceInfoInternalW";
- table[4275] = "gdi32.dll!NtGdiGetGlyphIndicesW";
- table[4276] = "gdi32.dll!NtGdiGetGlyphIndicesWInternal";
- table[4277] = "gdi32.dll!NtGdiGetGlyphOutline";
- table[4278] = "gdi32.dll!NtGdiGetKerningPairs";
- table[4279] = "gdi32.dll!NtGdiGetLinkedUFIs";
- table[4280] = "gdi32.dll!GetMiterLimit";
- table[4281] = "gdi32.dll!NtGdiGetMonitorID";
- table[4282] = "gdi32.dll!GetNearestColor";
- table[4283] = "gdi32.dll!NtGdiGetNearestPaletteIndex";
- table[4284] = "gdi32.dll!NtGdiGetObjectBitmapHandle";
- table[4285] = "gdi32.dll!NtGdiGetOutlineTextMetricsInternalW";
- table[4286] = "gdi32.dll!NtGdiGetPath";
- table[4287] = "gdi32.dll!NtGdiGetPixel";
- table[4288] = "gdi32.dll!NtGdiGetRandomRgn";
- table[4289] = "gdi32.dll!GetRasterizerCaps";
- table[4290] = "gdi32.dll!NtGdiGetRealizationInfo";
- table[4291] = "gdi32.dll!GetRegionData";
- table[4292] = "gdi32.dll!NtGdiGetRgnBox";
- table[4293] = "gdi32.dll!NtGdiGetServerMetaFileBits";
- table[4294] = "gdi32.dll!NtGdiGetSpoolMessage";
- table[4296] = "gdi32.dll!NtGdiGetStockObject";
- table[4297] = "gdi32.dll!NtGdiGetStringBitmapW";
- table[4298] = "gdi32.dll!GetSystemPaletteUse";
- table[4299] = "gdi32.dll!NtGdiGetTextCharsetInfo";
- table[4300] = "gdi32.dll!NtGdiGetTextExtent";
- table[4301] = "gdi32.dll!NtGdiGetTextExtentExW";
- table[4302] = "gdi32.dll!NtGdiGetTextFaceW";
- table[4303] = "gdi32.dll!NtGdiGetTextMetricsW";
- table[4304] = "gdi32.dll!NtGdiGetTransform";
- table[4305] = "gdi32.dll!NtGdiGetUFI";
- table[4306] = "gdi32.dll!NtGdiGetEmbUFI";
- table[4307] = "gdi32.dll!NtGdiGetUFIPathname";
- table[4308] = "gdi32.dll!NtGdiGetEmbedFonts";
- table[4309] = "gdi32.dll!NtGdiChangeGhostFont";
- table[4310] = "gdi32.dll!NtGdiAddEmbFontToDC";
- table[4311] = "gdi32.dll!NtGdiGetFontUnicodeRanges";
- table[4312] = "gdi32.dll!NtGdiGetWidthTable";
- table[4313] = "gdi32.dll!NtGdiGradientFill";
- table[4314] = "gdi32.dll!NtGdiHfontCreate";
- table[4315] = "gdi32.dll!NtGdiIcmBrushInfo";
- table[4316] = "gdi32.dll!NtGdiInit";
- table[4317] = "gdi32.dll!NtGdiInitSpool";
- table[4318] = "gdi32.dll!NtGdiIntersectClipRect";
- table[4319] = "gdi32.dll!NtGdiInvertRgn";
- table[4320] = "gdi32.dll!NtGdiLineTo";
- table[4321] = "gdi32.dll!NtGdiMakeFontDir";
- table[4322] = "gdi32.dll!NtGdiMakeInfoDC";
- table[4323] = "gdi32.dll!NtGdiMaskBlt";
- table[4324] = "gdi32.dll!NtGdiModifyWorldTransform";
- table[4325] = "gdi32.dll!NtGdiMonoBitmap";
- table[4327] = "gdi32.dll!NtGdiOffsetClipRgn";
- table[4328] = "gdi32.dll!NtGdiOffsetRgn";
- table[4329] = "gdi32.dll!NtGdiOpenDCW";
- table[4330] = "gdi32.dll!NtGdiPatBlt";
- table[4331] = "gdi32.dll!NtGdiPolyPatBlt";
- table[4332] = "gdi32.dll!NtGdiPathToRegion";
- table[4333] = "gdi32.dll!NtGdiPlgBlt";
- table[4334] = "gdi32.dll!NtGdiPolyDraw";
- table[4335] = "gdi32.dll!NtGdiPolyPolyDraw";
- table[4336] = "gdi32.dll!NtGdiPolyTextOutW";
- table[4337] = "gdi32.dll!NtGdiPtInRegion";
- table[4338] = "gdi32.dll!NtGdiPtVisible";
- table[4339] = "gdi32.dll!NtGdiQueryFonts";
- table[4340] = "gdi32.dll!NtGdiQueryFontAssocInfo";
- table[4341] = "gdi32.dll!NtGdiRectangle";
- table[4342] = "gdi32.dll!NtGdiRectInRegion";
- table[4343] = "gdi32.dll!RectVisible";
- table[4344] = "gdi32.dll!NtGdiRemoveFontResourceW";
- table[4345] = "gdi32.dll!NtGdiRemoveFontMemResourceEx";
- table[4346] = "gdi32.dll!NtGdiResetDC";
- table[4347] = "gdi32.dll!NtGdiResizePalette";
- table[4348] = "gdi32.dll!NtGdiRestoreDC";
- table[4349] = "gdi32.dll!NtGdiRoundRect";
- table[4350] = "gdi32.dll!NtGdiSaveDC";
- table[4351] = "gdi32.dll!NtGdiScaleViewportExtEx";
- table[4352] = "gdi32.dll!NtGdiScaleWindowExtEx";
- table[4353] = "gdi32.dll!NtGdiSelectBitmap";
- table[4355] = "gdi32.dll!NtGdiSelectClipPath";
- table[4356] = "gdi32.dll!NtGdiSelectFont";
- table[4357] = "gdi32.dll!NtGdiSelectPen";
- table[4358] = "gdi32.dll!NtGdiSetBitmapAttributes";
- table[4359] = "gdi32.dll!SetBitmapBits";
- table[4360] = "gdi32.dll!NtGdiSetBitmapDimension";
- table[4361] = "gdi32.dll!NtGdiSetBoundsRect";
- table[4362] = "gdi32.dll!NtGdiSetBrushAttributes";
- table[4363] = "gdi32.dll!NtGdiSetBrushOrg";
- table[4364] = "gdi32.dll!NtGdiSetColorAdjustment";
- table[4365] = "gdi32.dll!NtGdiSetColorSpace";
- table[4366] = "gdi32.dll!NtGdiSetDeviceGammaRamp";
- table[4367] = "gdi32.dll!NtGdiSetDIBitsToDeviceInternal";
- table[4368] = "gdi32.dll!NtGdiSetFontEnumeration";
- table[4369] = "gdi32.dll!NtGdiSetFontXform";
- table[4370] = "gdi32.dll!NtGdiSetIcmMode";
- table[4371] = "gdi32.dll!NtGdiSetLinkedUFIs";
- table[4372] = "gdi32.dll!NtGdiSetMagicColors";
- table[4373] = "gdi32.dll!NtGdiSetMetaRgn";
- table[4374] = "gdi32.dll!NtGdiSetMiterLimit";
- table[4375] = "gdi32.dll!NtGdiGetDeviceWidth";
- table[4376] = "gdi32.dll!NtGdiMirrorWindowOrg";
- table[4377] = "gdi32.dll!NtGdiSetLayout";
- table[4378] = "gdi32.dll!NtGdiSetPixel";
- table[4379] = "gdi32.dll!NtGdiSetPixelFormat";
- table[4380] = "gdi32.dll!NtGdiSetRectRgn";
- table[4381] = "gdi32.dll!NtGdiSetSystemPaletteUse";
- table[4383] = "gdi32.dll!NtGdiSetupPublicCFONT";
- table[4384] = "gdi32.dll!NtGdiSetVirtualResolution";
- table[4385] = "gdi32.dll!NtGdiSetSizeDevice";
- table[4386] = "gdi32.dll!NtGdiStartDoc";
- table[4387] = "gdi32.dll!NtGdiStartPage";
- table[4388] = "gdi32.dll!NtGdiStretchBlt";
- table[4389] = "gdi32.dll!NtGdiStretchDIBitsInternal";
- table[4390] = "gdi32.dll!NtGdiStrokeAndFillPath";
- table[4391] = "gdi32.dll!NtGdiStrokePath";
- table[4392] = "gdi32.dll!NtGdiSwapBuffers";
- table[4393] = "gdi32.dll!NtGdiTransformPoints";
- table[4394] = "gdi32.dll!NtGdiTransparentBlt";
- table[4395] = "gdi32.dll!NtGdiUnloadPrinterDriver";
- table[4397] = "gdi32.dll!NtGdiUnrealizeObject";
- table[4398] = "gdi32.dll!NtGdiUpdateColors";
- table[4399] = "gdi32.dll!NtGdiWidenPath";
- table[4400] = "user32.dll!NtUserActivateKeyboardLayout";
- table[4401] = "user32.dll!NtUserAlterWindowStyle";
- table[4402] = "imm32.dll!NtUserAssociateInputContext";
- table[4403] = "user32.dll!NtUserAttachThreadInput";
- table[4404] = "user32.dll!NtUserBeginPaint";
- table[4405] = "user32.dll!NtUserBitBltSysBmp";
- table[4406] = "user32.dll!NtUserBlockInput";
- table[4407] = "imm32.dll!NtUserBuildHimcList";
- table[4408] = "user32.dll!NtUserBuildHwndList";
- table[4409] = "user32.dll!NtUserBuildNameList";
- table[4410] = "user32.dll!NtUserBuildPropList";
- table[4411] = "user32.dll!NtUserCallHwnd";
- table[4412] = "user32.dll!NtUserCallHwndLock";
- table[4413] = "user32.dll!NtUserCallHwndOpt";
- table[4414] = "user32.dll!NtUserCallHwndParam";
- table[4415] = "user32.dll!NtUserCallHwndParamLock";
- table[4416] = "user32.dll!NtUserCallMsgFilter";
- table[4417] = "user32.dll!NtUserCallNextHookEx";
- table[4418] = "user32.dll!NtUserCallNoParam";
- table[4419] = "imm32.dll!NtUserCallOneParam";
- table[4419] = "user32.dll!NtUserCallOneParam";
- table[4420] = "user32.dll!NtUserCallTwoParam";
- table[4421] = "user32.dll!NtUserChangeClipboardChain";
- table[4422] = "user32.dll!NtUserChangeDisplaySettings";
- table[4424] = "user32.dll!NtUserCheckMenuItem";
- table[4425] = "user32.dll!NtUserChildWindowFromPointEx";
- table[4426] = "user32.dll!NtUserClipCursor";
- table[4427] = "user32.dll!NtUserCloseClipboard";
- table[4428] = "user32.dll!NtUserCloseDesktop";
- table[4429] = "user32.dll!NtUserCloseWindowStation";
- table[4431] = "user32.dll!NtUserConvertMemHandle";
- table[4432] = "user32.dll!NtUserCopyAcceleratorTable";
- table[4433] = "user32.dll!NtUserCountClipboardFormats";
- table[4434] = "user32.dll!NtUserCreateAcceleratorTable";
- table[4435] = "user32.dll!NtUserCreateCaret";
- table[4436] = "user32.dll!NtUserCreateDesktop";
- table[4437] = "imm32.dll!NtUserCreateInputContext";
- table[4438] = "user32.dll!NtUserCreateLocalMemHandle";
- table[4439] = "user32.dll!NtUserCreateWindowEx";
- table[4440] = "user32.dll!NtUserCreateWindowStation";
- table[4441] = "user32.dll!NtUserDdeGetQualityOfService";
- table[4442] = "user32.dll!NtUserDdeInitialize";
- table[4443] = "user32.dll!NtUserDdeSetQualityOfService";
- table[4444] = "user32.dll!NtUserDeferWindowPos";
- table[4445] = "user32.dll!NtUserDefSetText";
- table[4446] = "user32.dll!NtUserDeleteMenu";
- table[4447] = "user32.dll!DestroyAcceleratorTable";
- table[4448] = "user32.dll!NtUserDestroyCursor";
- table[4449] = "imm32.dll!NtUserDestroyInputContext";
- table[4450] = "user32.dll!NtUserDestroyMenu";
- table[4451] = "user32.dll!NtUserDestroyWindow";
- table[4452] = "imm32.dll!NtUserDisableThreadIme";
- table[4453] = "user32.dll!NtUserDispatchMessage";
- table[4454] = "user32.dll!NtUserDragDetect";
- table[4455] = "user32.dll!NtUserDragObject";
- table[4456] = "user32.dll!NtUserDrawAnimatedRects";
- table[4457] = "user32.dll!NtUserDrawCaption";
- table[4458] = "user32.dll!NtUserDrawCaptionTemp";
- table[4459] = "user32.dll!NtUserDrawIconEx";
- table[4460] = "user32.dll!NtUserDrawMenuBarTemp";
- table[4461] = "user32.dll!NtUserEmptyClipboard";
- table[4462] = "user32.dll!NtUserEnableMenuItem";
- table[4463] = "user32.dll!NtUserEnableScrollBar";
- table[4464] = "user32.dll!NtUserEndDeferWindowPosEx";
- table[4465] = "user32.dll!NtUserEndMenu";
- table[4466] = "user32.dll!NtUserEndPaint";
- table[4467] = "user32.dll!NtUserEnumDisplayDevices";
- table[4468] = "user32.dll!NtUserEnumDisplayMonitors";
- table[4469] = "user32.dll!NtUserEnumDisplaySettings";
- table[4470] = "user32.dll!NtUserEvent";
- table[4471] = "user32.dll!NtUserExcludeUpdateRgn";
- table[4472] = "user32.dll!NtUserFillWindow";
- table[4473] = "user32.dll!NtUserFindExistingCursorIcon";
- table[4474] = "user32.dll!NtUserFindWindowEx";
- table[4475] = "user32.dll!NtUserFlashWindowEx";
- table[4476] = "user32.dll!NtUserGetAltTabInfo";
- table[4477] = "user32.dll!NtUserGetAncestor";
- table[4478] = "imm32.dll!NtUserGetAppImeLevel";
- table[4479] = "user32.dll!GetAsyncKeyState";
- table[4480] = "user32.dll!NtUserGetAtomName";
- table[4481] = "user32.dll!NtUserGetCaretBlinkTime";
- table[4482] = "user32.dll!NtUserGetCaretPos";
- table[4483] = "user32.dll!NtUserGetClassInfo";
- table[4484] = "user32.dll!NtUserGetClassName";
- table[4485] = "user32.dll!NtUserGetClipboardData";
- table[4486] = "user32.dll!NtUserGetClipboardFormatName";
- table[4487] = "user32.dll!NtUserGetClipboardOwner";
- table[4488] = "user32.dll!NtUserGetClipboardSequenceNumber";
- table[4489] = "user32.dll!NtUserGetClipboardViewer";
- table[4490] = "user32.dll!NtUserGetClipCursor";
- table[4491] = "user32.dll!NtUserGetComboBoxInfo";
- table[4492] = "user32.dll!NtUserGetControlBrush";
- table[4493] = "user32.dll!NtUserGetControlColor";
- table[4494] = "user32.dll!NtUserGetCPD";
- table[4495] = "user32.dll!NtUserGetCursorFrameInfo";
- table[4496] = "user32.dll!NtUserGetCursorInfo";
- table[4497] = "user32.dll!NtUserGetDC";
- table[4498] = "user32.dll!NtUserGetDCEx";
- table[4499] = "user32.dll!NtUserGetDoubleClickTime";
- table[4500] = "user32.dll!NtUserGetForegroundWindow";
- table[4501] = "user32.dll!NtUserGetGuiResources";
- table[4502] = "user32.dll!NtUserGetGUIThreadInfo";
- table[4503] = "user32.dll!NtUserGetIconInfo";
- table[4504] = "user32.dll!NtUserGetIconSize";
- table[4505] = "imm32.dll!NtUserGetImeHotKey";
- table[4505] = "user32.dll!NtUserGetImeHotKey";
- table[4506] = "imm32.dll!NtUserGetImeInfoEx";
- table[4507] = "user32.dll!NtUserGetInternalWindowPos";
- table[4508] = "user32.dll!NtUserGetKeyboardLayoutList";
- table[4509] = "user32.dll!NtUserGetKeyboardLayoutName";
- table[4510] = "user32.dll!NtUserGetKeyboardState";
- table[4511] = "user32.dll!NtUserGetKeyNameText";
- table[4512] = "user32.dll!NtUserGetKeyState";
- table[4513] = "user32.dll!NtUserGetListBoxInfo";
- table[4514] = "user32.dll!NtUserGetMenuBarInfo";
- table[4515] = "user32.dll!NtUserGetMenuIndex";
- table[4516] = "user32.dll!NtUserGetMenuItemRect";
- table[4517] = "user32.dll!NtUserGetMessage";
- table[4518] = "user32.dll!NtUserGetMouseMovePointsEx";
- table[4519] = "user32.dll!NtUserGetObjectInformation";
- table[4520] = "user32.dll!NtUserGetOpenClipboardWindow";
- table[4521] = "user32.dll!NtUserGetPriorityClipboardFormat";
- table[4522] = "user32.dll!NtUserGetProcessWindowStation";
- table[4523] = "user32.dll!NtUserGetRawInputBuffer";
- table[4524] = "user32.dll!NtUserGetRawInputData";
- table[4525] = "user32.dll!NtUserGetRawInputDeviceInfo";
- table[4526] = "user32.dll!NtUserGetRawInputDeviceList";
- table[4527] = "user32.dll!NtUserGetRegisteredRawInputDevices";
- table[4528] = "user32.dll!NtUserGetScrollBarInfo";
- table[4529] = "user32.dll!NtUserGetSystemMenu";
- table[4530] = "user32.dll!NtUserGetThreadDesktop";
- table[4531] = "imm32.dll!NtUserGetThreadState";
- table[4531] = "user32.dll!NtUserGetThreadState";
- table[4532] = "user32.dll!NtUserGetTitleBarInfo";
- table[4533] = "user32.dll!GetUpdateRect";
- table[4534] = "user32.dll!GetUpdateRgn";
- table[4535] = "user32.dll!NtUserGetWindowDC";
- table[4536] = "user32.dll!NtUserGetWindowPlacement";
- table[4537] = "user32.dll!NtUserGetWOWClass";
- table[4539] = "user32.dll!NtUserHideCaret";
- table[4540] = "user32.dll!NtUserHiliteMenuItem";
- table[4541] = "user32.dll!NtUserImpersonateDdeClientWindow";
- table[4543] = "user32.dll!NtUserInitializeClientPfnArrays";
- table[4544] = "user32.dll!NtUserInitTask";
- table[4545] = "user32.dll!NtUserInternalGetWindowText";
- table[4546] = "user32.dll!NtUserInvalidateRect";
- table[4547] = "user32.dll!NtUserInvalidateRgn";
- table[4548] = "user32.dll!NtUserIsClipboardFormatAvailable";
- table[4549] = "user32.dll!NtUserKillTimer";
- table[4550] = "user32.dll!NtUserLoadKeyboardLayoutEx";
- table[4551] = "user32.dll!NtUserLockWindowStation";
- table[4552] = "user32.dll!NtUserLockWindowUpdate";
- table[4553] = "user32.dll!NtUserLockWorkStation";
- table[4554] = "user32.dll!NtUserMapVirtualKeyEx";
- table[4555] = "user32.dll!NtUserMenuItemFromPoint";
- table[4556] = "user32.dll!NtUserMessageCall";
- table[4557] = "user32.dll!NtUserMinMaximize";
- table[4558] = "user32.dll!NtUserMNDragLeave";
- table[4559] = "user32.dll!NtUserMNDragOver";
- table[4560] = "user32.dll!NtUserModifyUserStartupInfoFlags";
- table[4561] = "user32.dll!NtUserMoveWindow";
- table[4562] = "imm32.dll!NtUserNotifyIMEStatus";
- table[4562] = "user32.dll!NtUserNotifyIMEStatus";
- table[4564] = "user32.dll!NtUserNotifyWinEvent";
- table[4565] = "user32.dll!NtUserOpenClipboard";
- table[4566] = "user32.dll!NtUserOpenDesktop";
- table[4567] = "user32.dll!NtUserOpenInputDesktop";
- table[4568] = "user32.dll!NtUserOpenWindowStation";
- table[4569] = "user32.dll!NtUserPaintDesktop";
- table[4570] = "user32.dll!PeekMessageW";
- table[4571] = "user32.dll!NtUserPostMessage";
- table[4572] = "user32.dll!NtUserPostThreadMessage";
- table[4573] = "user32.dll!NtUserPrintWindow";
- table[4574] = "user32.dll!NtUserProcessConnect";
- table[4576] = "imm32.dll!NtUserQueryInputContext";
- table[4577] = "user32.dll!NtUserQuerySendMessage";
- table[4578] = "user32.dll!NtUserQueryUserCounters";
- table[4579] = "imm32.dll!NtUserQueryWindow";
- table[4579] = "user32.dll!NtUserQueryWindow";
- table[4580] = "user32.dll!NtUserRealChildWindowFromPoint";
- table[4581] = "user32.dll!NtUserRealInternalGetMessage";
- table[4582] = "user32.dll!NtUserRealWaitMessageEx";
- table[4583] = "user32.dll!NtUserRedrawWindow";
- table[4584] = "user32.dll!NtUserRegisterClassExWOW";
- table[4585] = "user32.dll!NtUserRegisterUserApiHook";
- table[4586] = "user32.dll!NtUserRegisterHotKey";
- table[4587] = "user32.dll!NtUserRegisterRawInputDevices";
- table[4588] = "user32.dll!NtUserRegisterTasklist";
- table[4589] = "user32.dll!NtUserRegisterWindowMessage";
- table[4590] = "user32.dll!NtUserRemoveMenu";
- table[4591] = "user32.dll!NtUserRemoveProp";
- table[4593] = "user32.dll!NtUserResolveDesktopForWOW";
- table[4594] = "user32.dll!NtUserSBGetParms";
- table[4595] = "user32.dll!ScrollDC";
- table[4596] = "user32.dll!NtUserScrollWindowEx";
- table[4597] = "gdi32.dll!NtUserSelectPalette";
- table[4598] = "user32.dll!NtUserSendInput";
- table[4599] = "user32.dll!NtUserSetActiveWindow";
- table[4600] = "imm32.dll!NtUserSetAppImeLevel";
- table[4601] = "user32.dll!NtUserSetCapture";
- table[4602] = "user32.dll!NtUserSetClassLong";
- table[4603] = "user32.dll!NtUserSetClassWord";
- table[4604] = "user32.dll!NtUserSetClipboardData";
- table[4605] = "user32.dll!NtUserSetClipboardViewer";
- table[4606] = "user32.dll!NtUserSetConsoleReserveKeys";
- table[4607] = "user32.dll!NtUserSetCursor";
- table[4608] = "user32.dll!NtUserSetCursorContents";
- table[4609] = "user32.dll!NtUserSetCursorIconData";
- table[4610] = "user32.dll!NtUserSetDbgTag";
- table[4611] = "user32.dll!NtUserSetFocus";
- table[4612] = "user32.dll!NtUserSetImeHotKey";
- table[4613] = "imm32.dll!NtUserSetImeInfoEx";
- table[4614] = "user32.dll!NtUserSetImeOwnerWindow";
- table[4616] = "user32.dll!NtUserSetInformationThread";
- table[4617] = "user32.dll!NtUserSetInternalWindowPos";
- table[4618] = "user32.dll!NtUserSetKeyboardState";
- table[4619] = "user32.dll!NtUserSetLogonNotifyWindow";
- table[4620] = "user32.dll!NtUserSetMenu";
- table[4621] = "user32.dll!NtUserSetMenuContextHelpId";
- table[4622] = "user32.dll!NtUserSetMenuDefaultItem";
- table[4623] = "user32.dll!NtUserSetMenuFlagRtoL";
- table[4624] = "user32.dll!NtUserSetObjectInformation";
- table[4625] = "user32.dll!NtUserSetParent";
- table[4626] = "user32.dll!NtUserSetProcessWindowStation";
- table[4627] = "user32.dll!NtUserSetProp";
- table[4628] = "user32.dll!NtUserSetRipFlags";
- table[4629] = "user32.dll!NtUserSetScrollInfo";
- table[4630] = "user32.dll!NtUserSetShellWindowEx";
- table[4631] = "user32.dll!NtUserSetSysColors";
- table[4632] = "user32.dll!NtUserSetSystemCursor";
- table[4633] = "user32.dll!NtUserSetSystemMenu";
- table[4634] = "user32.dll!NtUserSetSystemTimer";
- table[4635] = "user32.dll!NtUserSetThreadDesktop";
- table[4636] = "imm32.dll!NtUserSetThreadLayoutHandles";
- table[4637] = "user32.dll!NtUserSetThreadState";
- table[4638] = "user32.dll!NtUserSetTimer";
- table[4639] = "user32.dll!NtUserSetWindowFNID";
- table[4640] = "user32.dll!NtUserSetWindowLong";
- table[4641] = "user32.dll!NtUserSetWindowPlacement";
- table[4642] = "user32.dll!NtUserSetWindowPos";
- table[4643] = "user32.dll!NtUserSetWindowRgn";
- table[4644] = "user32.dll!NtUserSetWindowsHookAW";
- table[4645] = "user32.dll!NtUserSetWindowsHookEx";
- table[4646] = "user32.dll!NtUserSetWindowStationUser";
- table[4647] = "user32.dll!NtUserSetWindowWord";
- table[4648] = "user32.dll!NtUserSetWinEventHook";
- table[4649] = "user32.dll!NtUserShowCaret";
- table[4650] = "user32.dll!NtUserShowScrollBar";
- table[4651] = "user32.dll!NtUserShowWindow";
- table[4652] = "user32.dll!NtUserShowWindowAsync";
- table[4654] = "user32.dll!NtUserSwitchDesktop";
- table[4655] = "user32.dll!NtUserSystemParametersInfo";
- table[4657] = "user32.dll!NtUserThunkedMenuInfo";
- table[4658] = "user32.dll!NtUserThunkedMenuItemInfo";
- table[4659] = "user32.dll!NtUserToUnicodeEx";
- table[4660] = "user32.dll!NtUserTrackMouseEvent";
- table[4661] = "user32.dll!NtUserTrackPopupMenuEx";
- table[4662] = "user32.dll!NtUserCalcMenuBar";
- table[4663] = "user32.dll!NtUserPaintMenuBar";
- table[4664] = "user32.dll!TranslateAcceleratorA";
- table[4665] = "user32.dll!NtUserTranslateMessage";
- table[4666] = "user32.dll!NtUserUnhookWindowsHookEx";
- table[4667] = "user32.dll!NtUserUnhookWinEvent";
- table[4668] = "user32.dll!NtUserUnloadKeyboardLayout";
- table[4669] = "user32.dll!NtUserUnlockWindowStation";
- table[4670] = "user32.dll!NtUserUnregisterClass";
- table[4671] = "user32.dll!NtUserUnregisterUserApiHook";
- table[4672] = "user32.dll!NtUserUnregisterHotKey";
- table[4673] = "imm32.dll!NtUserUpdateInputContext";
- table[4673] = "user32.dll!NtUserUpdateInputContext";
- table[4674] = "user32.dll!NtUserUpdateInstance";
- table[4675] = "user32.dll!NtUserUpdateLayeredWindow";
- table[4676] = "user32.dll!NtUserGetLayeredWindowAttributes";
- table[4677] = "user32.dll!NtUserSetLayeredWindowAttributes";
- table[4678] = "user32.dll!NtUserUpdatePerUserSystemParameters";
- table[4679] = "user32.dll!NtUserUserHandleGrantAccess";
- table[4680] = "imm32.dll!NtUserValidateHandleSecure";
- table[4680] = "user32.dll!NtUserValidateHandleSecure";
- table[4681] = "user32.dll!NtUserValidateRect";
- table[4682] = "user32.dll!NtUserValidateTimerCallback";
- table[4683] = "user32.dll!NtUserVkKeyScanEx";
- table[4684] = "user32.dll!NtUserWaitForInputIdle";
- table[4685] = "user32.dll!NtUserWaitForMsgAndEvent";
- table[4686] = "user32.dll!NtUserWaitMessage";
- table[4687] = "user32.dll!NtUserWin32PoolAllocationStats";
- table[4688] = "user32.dll!NtUserWindowFromPoint";
- table[4689] = "user32.dll!NtUserYieldTask";
- table[4695] = "gdi32.dll!NtGdiEngAssociateSurface";
- table[4696] = "gdi32.dll!NtGdiEngCreateBitmap";
- table[4697] = "gdi32.dll!NtGdiEngCreateDeviceSurface";
- table[4698] = "gdi32.dll!NtGdiEngCreateDeviceBitmap";
- table[4699] = "gdi32.dll!NtGdiEngCreatePalette";
- table[4700] = "gdi32.dll!NtGdiEngComputeGlyphSet";
- table[4701] = "gdi32.dll!NtGdiEngCopyBits";
- table[4702] = "gdi32.dll!NtGdiEngDeletePalette";
- table[4703] = "gdi32.dll!NtGdiEngDeleteSurface";
- table[4704] = "gdi32.dll!NtGdiEngEraseSurface";
- table[4705] = "gdi32.dll!NtGdiEngUnlockSurface";
- table[4706] = "gdi32.dll!NtGdiEngLockSurface";
- table[4707] = "gdi32.dll!NtGdiEngBitBlt";
- table[4708] = "gdi32.dll!NtGdiEngStretchBlt";
- table[4709] = "gdi32.dll!NtGdiEngPlgBlt";
- table[4710] = "gdi32.dll!NtGdiEngMarkBandingSurface";
- table[4711] = "gdi32.dll!NtGdiEngStrokePath";
- table[4712] = "gdi32.dll!NtGdiEngFillPath";
- table[4713] = "gdi32.dll!NtGdiEngStrokeAndFillPath";
- table[4714] = "gdi32.dll!NtGdiEngPaint";
- table[4715] = "gdi32.dll!NtGdiEngLineTo";
- table[4716] = "gdi32.dll!NtGdiEngAlphaBlend";
- table[4717] = "gdi32.dll!NtGdiEngGradientFill";
- table[4718] = "gdi32.dll!NtGdiEngTransparentBlt";
- table[4719] = "gdi32.dll!NtGdiEngTextOut";
- table[4720] = "gdi32.dll!NtGdiEngStretchBltROP";
- table[4721] = "gdi32.dll!NtGdiXLATEOBJ_cGetPalette";
- table[4722] = "gdi32.dll!NtGdiXLATEOBJ_iXlate";
- table[4723] = "gdi32.dll!NtGdiXLATEOBJ_hGetColorTransform";
- table[4724] = "gdi32.dll!NtGdiCLIPOBJ_bEnum";
- table[4725] = "gdi32.dll!NtGdiCLIPOBJ_cEnumStart";
- table[4726] = "gdi32.dll!NtGdiCLIPOBJ_ppoGetPath";
- table[4727] = "gdi32.dll!NtGdiEngDeletePath";
- table[4728] = "gdi32.dll!NtGdiEngCreateClip";
- table[4729] = "gdi32.dll!NtGdiEngDeleteClip";
- table[4730] = "gdi32.dll!NtGdiBRUSHOBJ_ulGetBrushColor";
- table[4731] = "gdi32.dll!NtGdiBRUSHOBJ_pvAllocRbrush";
- table[4732] = "gdi32.dll!NtGdiBRUSHOBJ_pvGetRbrush";
- table[4733] = "gdi32.dll!NtGdiBRUSHOBJ_hGetColorTransform";
- table[4734] = "gdi32.dll!NtGdiXFORMOBJ_bApplyXform";
- table[4735] = "gdi32.dll!NtGdiXFORMOBJ_iGetXform";
- table[4736] = "gdi32.dll!NtGdiFONTOBJ_vGetInfo";
- table[4737] = "gdi32.dll!NtGdiFONTOBJ_pxoGetXform";
- table[4738] = "gdi32.dll!NtGdiFONTOBJ_cGetGlyphs";
- table[4739] = "gdi32.dll!NtGdiFONTOBJ_pifi";
- table[4740] = "gdi32.dll!NtGdiFONTOBJ_pfdg";
- table[4741] = "gdi32.dll!NtGdiFONTOBJ_pQueryGlyphAttrs";
- table[4742] = "gdi32.dll!NtGdiFONTOBJ_pvTrueTypeFontFile";
- table[4743] = "gdi32.dll!NtGdiFONTOBJ_cGetAllGlyphHandles";
- table[4744] = "gdi32.dll!NtGdiSTROBJ_bEnum";
- table[4745] = "gdi32.dll!NtGdiSTROBJ_bEnumPositionsOnly";
- table[4746] = "gdi32.dll!NtGdiSTROBJ_bGetAdvanceWidths";
- table[4747] = "gdi32.dll!NtGdiSTROBJ_vEnumStart";
- table[4748] = "gdi32.dll!NtGdiSTROBJ_dwGetCodePage";
- table[4749] = "gdi32.dll!NtGdiPATHOBJ_vGetBounds";
- table[4750] = "gdi32.dll!NtGdiPATHOBJ_bEnum";
- table[4751] = "gdi32.dll!NtGdiPATHOBJ_vEnumStart";
- table[4752] = "gdi32.dll!NtGdiPATHOBJ_vEnumStartClipLines";
- table[4753] = "gdi32.dll!NtGdiPATHOBJ_bEnumClipLines";
- table[4754] = "gdi32.dll!NtGdiGetDhpdev";
- table[4755] = "gdi32.dll!NtGdiEngCheckAbort";
- table[4756] = "gdi32.dll!NtGdiHT_Get8BPPFormatPalette";
- table[4757] = "gdi32.dll!NtGdiHT_Get8BPPMaskPalette";
- table[4758] = "gdi32.dll!NtGdiUpdateTransform";
- table[4759] = "gdi32.dll!NtGdiSetPUMPDOBJ";
- table[4760] = "gdi32.dll!NtGdiBRUSHOBJ_DeleteRbrush";
- table[4761] = "gdi32.dll!NtGdiUMPDEngFreeUserMem";
- table[4762] = "gdi32.dll!NtGdiDrawStream";
-} else { // Vista table.
- table[4272] = "gdi32.dll!NtGdiGetDeviceCaps";
- table[4220] = "gdi32.dll!NtGdiDeleteObjectApp";
- table[4249] = "gdi32.dll!NtGdiFlush";
- table[4120] = "gdi32.dll!NtGdiConsoleTextOut";
- table[4825] = "gdi32.dll!NtGdiDdDDIEscape";
- table[4299] = "gdi32.dll!GetRgnBox";
- table[4828] = "gdi32.dll!NtGdiDdDDIGetPresentHistory";
- table[4835] = "gdi32.dll!NtGdiDdDDIGetDeviceState";
- table[4850] = "gdi32.dll!NtGdiDdDDICheckExclusiveOwnership";
- table[4849] = "gdi32.dll!NtGdiDdDDICheckMonitorPowerState";
- table[4833] = "gdi32.dll!NtGdiDdDDIWaitForVerticalBlankEvent";
- table[4298] = "gdi32.dll!GetRegionData";
- table[4796] = "gdi32.dll!NtGdiDwmGetDirtyRgn";
- table[4820] = "gdi32.dll!NtGdiDdDDIRender";
- table[4819] = "gdi32.dll!NtGdiDdDDIPresent";
- table[4815] = "gdi32.dll!NtGdiDdDDIUnlock";
- table[4814] = "gdi32.dll!NtGdiDdDDILock";
- table[4240] = "gdi32.dll!NtGdiExtCreateRegion";
- table[4339] = "gdi32.dll!NtGdiPolyPatBlt";
- table[4361] = "gdi32.dll!NtGdiSelectBitmap";
- table[4127] = "gdi32.dll!NtGdiCreateCompatibleDC";
- table[4142] = "gdi32.dll!NtGdiCreateSolidBrush";
- table[4122] = "gdi32.dll!CreateBitmap";
- table[4303] = "gdi32.dll!CreateBitmap";
- table[4348] = "gdi32.dll!NtGdiQueryFontAssocInfo";
- table[4126] = "gdi32.dll!NtGdiCreateCompatibleBitmap";
- table[4109] = "gdi32.dll!NtGdiBitBlt";
- table[4243] = "gdi32.dll!NtGdiExtGetObjectW";
- table[4270] = "gdi32.dll!NtGdiGetDCObject";
- table[4620] = "gdi32.dll!NtUserSelectPalette";
- table[4338] = "gdi32.dll!NtGdiPatBlt";
- table[4275] = "gdi32.dll!NtGdiGetDIBitsInternal";
- table[4398] = "gdi32.dll!NtGdiStretchDIBitsInternal";
- table[4130] = "gdi32.dll!NtGdiCreateDIBSection";
- table[4356] = "gdi32.dll!NtGdiRestoreDC";
- table[4358] = "gdi32.dll!NtGdiSaveDC";
- table[4103] = "gdi32.dll!NtGdiAlphaBlend";
- table[4349] = "gdi32.dll!NtGdiRectangle";
- table[4295] = "gdi32.dll!NtGdiGetRandomRgn";
- table[4244] = "gdi32.dll!NtGdiExtSelectClipRgn";
- table[4268] = "gdi32.dll!NtGdiGetDCDword";
- table[4245] = "gdi32.dll!NtGdiExtTextOutW";
- table[4254] = "gdi32.dll!GetClipBox";
- table[4397] = "gdi32.dll!NtGdiStretchBlt";
- table[4331] = "gdi32.dll!NtGdiMaskBlt";
- table[4324] = "gdi32.dll!NtGdiInit";
- table[4262] = "gdi32.dll!NtGdiGetCharSet";
- table[4336] = "gdi32.dll!NtGdiOffsetRgn";
- table[4326] = "gdi32.dll!NtGdiIntersectClipRect";
- table[4795] = "gdi32.dll!NtGdiDrawStream";
- table[4364] = "gdi32.dll!NtGdiSelectFont";
- table[4116] = "gdi32.dll!NtGdiCombineRgn";
- table[4238] = "gdi32.dll!NtGdiExcludeClipRect";
- table[4802] = "gdi32.dll!NtGdiDdDDISetAllocationPriority";
- table[4798] = "gdi32.dll!NtGdiDdDDICreateAllocation";
- table[4801] = "gdi32.dll!NtGdiDdDDIDestroyAllocation";
- table[4797] = "gdi32.dll!NtGdiDwmGetSurfaceData";
- table[4140] = "gdi32.dll!CreateRoundRectRgn";
- table[4840] = "gdi32.dll!NtGdiDdDDISetProcessSchedulingPriorityClass";
- table[4307] = "gdi32.dll!NtGdiGetTextCharsetInfo";
- table[4351] = "gdi32.dll!RectVisible";
- table[4139] = "gdi32.dll!NtGdiCreateRectRgn";
- table[4369] = "gdi32.dll!NtGdiSetBoundsRect";
- table[4257] = "gdi32.dll!NtGdiGetBoundsRect";
- table[4309] = "gdi32.dll!NtGdiGetTextExtentExW";
- table[4402] = "gdi32.dll!NtGdiTransformPoints";
- table[4118] = "gdi32.dll!NtGdiComputeXformCoefficients";
- table[4337] = "gdi32.dll!NtGdiOpenDCW";
- table[4813] = "gdi32.dll!NtGdiDdDDIQueryAdapterInfo";
- table[4822] = "gdi32.dll!NtGdiDdDDIOpenAdapterFromHdc";
- table[4816] = "gdi32.dll!NtGdiDdDDIGetDisplayModeList";
- table[4823] = "gdi32.dll!NtGdiDdDDICloseAdapter";
- table[4804] = "gdi32.dll!NtGdiDdDDICreateDevice";
- table[4806] = "gdi32.dll!NtGdiDdDDICreateContext";
- table[4271] = "gdi32.dll!NtGdiGetDCPoint";
- table[4225] = "gdi32.dll!NtGdiDoPalette";
- table[4288] = "gdi32.dll!GetNearestColor";
- table[4129] = "gdi32.dll!NtGdiCreateDIBitmapInternal";
- table[4322] = "gdi32.dll!NtGdiHfontCreate";
- table[4137] = "gdi32.dll!NtGdiCreatePatternBrushInternal";
- table[4136] = "gdi32.dll!NtGdiCreatePaletteInternal";
- table[4132] = "gdi32.dll!NtGdiCreateHalftonePalette";
- table[4375] = "gdi32.dll!NtGdiSetDIBitsToDeviceInternal";
- table[4269] = "gdi32.dll!NtGdiGetDCforBitmap";
- table[4392] = "gdi32.dll!NtGdiSetupPublicCFONT";
- table[4836] = "gdi32.dll!NtGdiDdDDICreateDCFromMemory";
- table[4264] = "gdi32.dll!NtGdiGetCharWidthInfo";
- table[4367] = "gdi32.dll!SetBitmapBits";
- table[4255] = "gdi32.dll!GetBitmapBits";
- table[4311] = "gdi32.dll!NtGdiGetTextMetricsW";
- table[4297] = "gdi32.dll!NtGdiGetRealizationInfo";
- table[4310] = "gdi32.dll!NtGdiGetTextFaceW";
- table[4292] = "gdi32.dll!NtGdiGetOutlineTextMetricsInternalW";
- table[4280] = "gdi32.dll!NtGdiGetGlyphIndicesW";
- table[4320] = "gdi32.dll!NtGdiGetWidthTable";
- table[4234] = "gdi32.dll!NtGdiEnumFontOpen";
- table[4233] = "gdi32.dll!NtGdiEnumFontClose";
- table[4232] = "gdi32.dll!NtGdiEnumFontChunk";
- table[4260] = "gdi32.dll!NtGdiGetCharABCWidthsW";
- table[4105] = "gdi32.dll!NtGdiAnyLinkedFonts";
- table[4278] = "gdi32.dll!NtGdiGetFontData";
- table[4106] = "gdi32.dll!NtGdiFontIsLinked";
- table[4332] = "gdi32.dll!NtGdiModifyWorldTransform";
- table[4312] = "gdi32.dll!NtGdiGetTransform";
- table[4321] = "gdi32.dll!NtGdiGradientFill";
- table[4294] = "gdi32.dll!NtGdiGetPixel";
- table[4403] = "gdi32.dll!NtGdiTransparentBlt";
- table[4319] = "gdi32.dll!NtGdiGetFontUnicodeRanges";
- table[4817] = "gdi32.dll!NtGdiDdDDISetDisplayMode";
- table[4827] = "gdi32.dll!NtGdiDdDDISetVidPnSourceOwner";
- table[4273] = "gdi32.dll!NtGdiGetDeviceGammaRamp";
- table[4374] = "gdi32.dll!NtGdiSetDeviceGammaRamp";
- table[4366] = "gdi32.dll!NtGdiSetBitmapAttributes";
- table[4098] = "gdi32.dll!NtGdiAddFontResourceW";
- table[4376] = "gdi32.dll!NtGdiSetFontEnumeration";
- table[4228] = "gdi32.dll!NtGdiEnableEudc";
- table[4343] = "gdi32.dll!NtGdiPolyPolyDraw";
- table[4328] = "gdi32.dll!NtGdiLineTo";
- table[4138] = "gdi32.dll!NtGdiCreatePen";
- table[4236] = "gdi32.dll!EqualRgn";
- table[4805] = "gdi32.dll!NtGdiDdDDIDestroyDevice";
- table[4807] = "gdi32.dll!NtGdiDdDDIDestroyContext";
- table[4799] = "gdi32.dll!NtGdiDdDDIQueryResourceInfo";
- table[4800] = "gdi32.dll!NtGdiDdDDIOpenResource";
- table[4838] = "gdi32.dll!NtGdiDdDDISetContextSchedulingPriority";
- table[4263] = "gdi32.dll!NtGdiGetCharWidthW";
- table[4837] = "gdi32.dll!NtGdiDdDDIDestroyDCFromMemory";
- table[4803] = "gdi32.dll!NtGdiDdDDIQueryAllocationResidency";
- table[4824] = "gdi32.dll!NtGdiDdDDIGetSharedPrimaryHandle";
- table[4385] = "gdi32.dll!NtGdiSetLayout";
- table[4371] = "gdi32.dll!NtGdiSetBrushOrg";
- table[4157] = "gdi32.dll!NtGdiDdCreateDirectDrawObject";
- table[4128] = "gdi32.dll!NtGdiCreateDIBBrush";
- table[4387] = "gdi32.dll!NtGdiSetPixel";
- table[4345] = "gdi32.dll!PtInRegion";
- table[4821] = "gdi32.dll!NtGdiDdDDIOpenAdapterFromDeviceName";
- table[4253] = "gdi32.dll!NtGdiGetAndSetDCDword";
- table[4274] = "gdi32.dll!NtGdiGetDeviceCapsAll";
- table[4247] = "gdi32.dll!NtGdiFillRgn";
- table[4289] = "gdi32.dll!GetNearestPaletteIndex";
- table[4378] = "gdi32.dll!NtGdiSetIcmMode";
- table[4327] = "gdi32.dll!NtGdiInvertRgn";
- table[4792] = "gdi32.dll!NtGdiSetPUMPDOBJ";
- table[4735] = "gdi32.dll!NtGdiEngDeletePalette";
- table[4732] = "gdi32.dll!NtGdiEngCreatePalette";
- table[4241] = "gdi32.dll!NtGdiExtEscape";
- table[4217] = "gdi32.dll!NtGdiDeleteClientObj";
- table[4123] = "gdi32.dll!NtGdiCreateClientObj";
- table[4354] = "gdi32.dll!NtGdiResetDC";
- table[4235] = "gdi32.dll!NtGdiEnumObjects";
- table[4135] = "gdi32.dll!NtGdiCreateOPMProtectedOutputs";
- table[4222] = "gdi32.dll!NtGdiDestroyOPMProtectedOutput";
- table[4258] = "gdi32.dll!NtGdiGetCertificate";
- table[4259] = "gdi32.dll!NtGdiGetCertificateSize";
- table[4291] = "gdi32.dll!NtGdiGetOPMRandomNumber";
- table[4305] = "gdi32.dll!NtGdiGetSuggestedOPMProtectedOutputArraySize";
- table[4386] = "gdi32.dll!NtGdiSetOPMSigningKeyAndSequenceNumbers";
- table[4844] = "gdi32.dll!NtGdiDdDDISetQueuedLimit";
- table[4341] = "gdi32.dll!NtGdiPlgBlt";
- table[4117] = "gdi32.dll!CombineTransform";
- table[4134] = "gdi32.dll!NtGdiCreateMetafileDC";
- table[4393] = "gdi32.dll!NtGdiSetVirtualResolution";
- table[4394] = "gdi32.dll!NtGdiSetSizeDevice";
- table[4381] = "gdi32.dll!NtGdiSetMetaRgn";
- table[4382] = "gdi32.dll!NtGdiSetMiterLimit";
- table[4377] = "gdi32.dll!NtGdiSetFontXform";
- table[4333] = "gdi32.dll!NtGdiMonoBitmap";
- table[4768] = "gdi32.dll!NtGdiXFORMOBJ_iGetXform";
- table[4770] = "gdi32.dll!NtGdiFONTOBJ_pxoGetXform";
- table[4239] = "gdi32.dll!NtGdiExtCreatePen";
- table[4286] = "gdi32.dll!GetMiterLimit";
- table[4290] = "gdi32.dll!NtGdiGetObjectBitmapHandle";
- table[4287] = "gdi32.dll!NtGdiGetMonitorID";
- table[4284] = "gdi32.dll!NtGdiGetKerningPairs";
- table[4357] = "gdi32.dll!NtGdiRoundRect";
- table[4242] = "gdi32.dll!NtGdiExtFloodFill";
- table[4306] = "gdi32.dll!GetSystemPaletteUse";
- table[4096] = "gdi32.dll!NtGdiAbortDoc";
- table[4097] = "gdi32.dll!NtGdiAbortPath";
- table[4099] = "gdi32.dll!NtGdiAddRemoteFontToDC";
- table[4100] = "gdi32.dll!NtGdiAddFontMemResourceEx";
- table[4101] = "gdi32.dll!NtGdiRemoveMergeFont";
- table[4102] = "gdi32.dll!NtGdiAddRemoteMMInstanceToDC";
- table[4104] = "gdi32.dll!NtGdiAngleArc";
- table[4107] = "gdi32.dll!NtGdiArcInternal";
- table[4108] = "gdi32.dll!NtGdiBeginPath";
- table[4110] = "gdi32.dll!NtGdiCancelDC";
- table[4111] = "gdi32.dll!NtGdiCheckBitmapBits";
- table[4112] = "gdi32.dll!NtGdiCloseFigure";
- table[4113] = "gdi32.dll!NtGdiClearBitmapAttributes";
- table[4114] = "gdi32.dll!NtGdiClearBrushAttributes";
- table[4115] = "gdi32.dll!NtGdiColorCorrectPalette";
- table[4119] = "gdi32.dll!NtGdiConfigureOPMProtectedOutput";
- table[4121] = "gdi32.dll!NtGdiConvertMetafileRect";
- table[4124] = "gdi32.dll!NtGdiCreateColorSpace";
- table[4125] = "gdi32.dll!NtGdiCreateColorTransform";
- table[4131] = "gdi32.dll!NtGdiCreateEllipticRgn";
- table[4133] = "gdi32.dll!NtGdiCreateHatchBrushInternal";
- table[4141] = "gdi32.dll!NtGdiCreateServerMetaFile";
- table[4143] = "gdi32.dll!NtGdiD3dContextCreate";
- table[4144] = "gdi32.dll!NtGdiD3dContextDestroy";
- table[4145] = "gdi32.dll!NtGdiD3dContextDestroyAll";
- table[4146] = "gdi32.dll!NtGdiD3dValidateTextureStageState";
- table[4147] = "gdi32.dll!NtGdiD3dDrawPrimitives2";
- table[4148] = "gdi32.dll!NtGdiDdGetDriverState";
- table[4149] = "gdi32.dll!NtGdiDdAddAttachedSurface";
- table[4150] = "gdi32.dll!NtGdiDdAlphaBlt";
- table[4151] = "gdi32.dll!NtGdiDdAttachSurface";
- table[4152] = "gdi32.dll!NtGdiDdBeginMoCompFrame";
- table[4153] = "gdi32.dll!NtGdiDdBlt";
- table[4154] = "gdi32.dll!NtGdiDdCanCreateSurface";
- table[4155] = "gdi32.dll!NtGdiDdCanCreateD3DBuffer";
- table[4156] = "gdi32.dll!NtGdiDdColorControl";
- table[4158] = "gdi32.dll!NtGdiDdCreateSurface";
- table[4159] = "gdi32.dll!NtGdiDdCreateD3DBuffer";
- table[4160] = "gdi32.dll!NtGdiDdCreateMoComp";
- table[4161] = "gdi32.dll!NtGdiDdCreateSurfaceObject";
- table[4162] = "gdi32.dll!NtGdiDdDeleteDirectDrawObject";
- table[4163] = "gdi32.dll!NtGdiDdDeleteSurfaceObject";
- table[4164] = "gdi32.dll!NtGdiDdDestroyMoComp";
- table[4165] = "gdi32.dll!NtGdiDdDestroySurface";
- table[4166] = "gdi32.dll!NtGdiDdDestroyD3DBuffer";
- table[4167] = "gdi32.dll!NtGdiDdEndMoCompFrame";
- table[4168] = "gdi32.dll!NtGdiDdFlip";
- table[4169] = "gdi32.dll!NtGdiDdFlipToGDISurface";
- table[4170] = "gdi32.dll!NtGdiDdGetAvailDriverMemory";
- table[4171] = "gdi32.dll!NtGdiDdGetBltStatus";
- table[4172] = "gdi32.dll!NtGdiDdGetDC";
- table[4173] = "gdi32.dll!NtGdiDdGetDriverInfo";
- table[4174] = "gdi32.dll!NtGdiDdGetDxHandle";
- table[4175] = "gdi32.dll!NtGdiDdGetFlipStatus";
- table[4176] = "gdi32.dll!NtGdiDdGetInternalMoCompInfo";
- table[4177] = "gdi32.dll!NtGdiDdGetMoCompBuffInfo";
- table[4178] = "gdi32.dll!NtGdiDdGetMoCompGuids";
- table[4179] = "gdi32.dll!NtGdiDdGetMoCompFormats";
- table[4180] = "gdi32.dll!NtGdiDdGetScanLine";
- table[4181] = "gdi32.dll!NtGdiDdLock";
- table[4182] = "gdi32.dll!NtGdiDdLockD3D";
- table[4183] = "gdi32.dll!NtGdiDdQueryDirectDrawObject";
- table[4184] = "gdi32.dll!NtGdiDdQueryMoCompStatus";
- table[4185] = "gdi32.dll!NtGdiDdReenableDirectDrawObject";
- table[4186] = "gdi32.dll!NtGdiDdReleaseDC";
- table[4187] = "gdi32.dll!NtGdiDdRenderMoComp";
- table[4188] = "gdi32.dll!NtGdiDdResetVisrgn";
- table[4189] = "gdi32.dll!NtGdiDdSetColorKey";
- table[4190] = "gdi32.dll!NtGdiDdSetExclusiveMode";
- table[4191] = "gdi32.dll!NtGdiDdSetGammaRamp";
- table[4192] = "gdi32.dll!NtGdiDdCreateSurfaceEx";
- table[4193] = "gdi32.dll!NtGdiDdSetOverlayPosition";
- table[4194] = "gdi32.dll!NtGdiDdUnattachSurface";
- table[4195] = "gdi32.dll!NtGdiDdUnlock";
- table[4196] = "gdi32.dll!NtGdiDdUnlockD3D";
- table[4197] = "gdi32.dll!NtGdiDdUpdateOverlay";
- table[4198] = "gdi32.dll!NtGdiDdWaitForVerticalBlank";
- table[4199] = "gdi32.dll!NtGdiDvpCanCreateVideoPort";
- table[4200] = "gdi32.dll!NtGdiDvpColorControl";
- table[4201] = "gdi32.dll!NtGdiDvpCreateVideoPort";
- table[4202] = "gdi32.dll!NtGdiDvpDestroyVideoPort";
- table[4203] = "gdi32.dll!NtGdiDvpFlipVideoPort";
- table[4204] = "gdi32.dll!NtGdiDvpGetVideoPortBandwidth";
- table[4205] = "gdi32.dll!NtGdiDvpGetVideoPortField";
- table[4206] = "gdi32.dll!NtGdiDvpGetVideoPortFlipStatus";
- table[4207] = "gdi32.dll!NtGdiDvpGetVideoPortInputFormats";
- table[4208] = "gdi32.dll!NtGdiDvpGetVideoPortLine";
- table[4209] = "gdi32.dll!NtGdiDvpGetVideoPortOutputFormats";
- table[4210] = "gdi32.dll!NtGdiDvpGetVideoPortConnectInfo";
- table[4211] = "gdi32.dll!NtGdiDvpGetVideoSignalStatus";
- table[4212] = "gdi32.dll!NtGdiDvpUpdateVideoPort";
- table[4213] = "gdi32.dll!NtGdiDvpWaitForVideoPortSync";
- table[4214] = "gdi32.dll!NtGdiDvpAcquireNotification";
- table[4215] = "gdi32.dll!NtGdiDvpReleaseNotification";
- table[4216] = "gdi32.dll!NtGdiDxgGenericThunk";
- table[4218] = "gdi32.dll!NtGdiDeleteColorSpace";
- table[4219] = "gdi32.dll!NtGdiDeleteColorTransform";
- table[4221] = "gdi32.dll!NtGdiDescribePixelFormat";
- table[4223] = "gdi32.dll!NtGdiGetPerBandInfo";
- table[4224] = "gdi32.dll!NtGdiDoBanding";
- table[4226] = "gdi32.dll!NtGdiDrawEscape";
- table[4227] = "gdi32.dll!NtGdiEllipse";
- table[4229] = "gdi32.dll!NtGdiEndDoc";
- table[4230] = "gdi32.dll!NtGdiEndPage";
- table[4231] = "gdi32.dll!NtGdiEndPath";
- table[4237] = "gdi32.dll!NtGdiEudcLoadUnloadLink";
- table[4246] = "gdi32.dll!NtGdiFillPath";
- table[4248] = "gdi32.dll!NtGdiFlattenPath";
- table[4250] = "gdi32.dll!NtGdiForceUFIMapping";
- table[4251] = "gdi32.dll!NtGdiFrameRgn";
- table[4252] = "gdi32.dll!NtGdiFullscreenControl";
- table[4256] = "gdi32.dll!NtGdiGetBitmapDimension";
- table[4261] = "gdi32.dll!NtGdiGetCharacterPlacementW";
- table[4265] = "gdi32.dll!NtGdiGetColorAdjustment";
- table[4267] = "gdi32.dll!NtGdiGetCOPPCompatibleOPMInformation";
- table[4276] = "gdi32.dll!NtGdiGetETM";
- table[4277] = "gdi32.dll!NtGdiGetEudcTimeStampEx";
- table[4279] = "gdi32.dll!NtGdiGetFontResourceInfoInternalW";
- table[4281] = "gdi32.dll!NtGdiGetGlyphIndicesWInternal";
- table[4282] = "gdi32.dll!NtGdiGetGlyphOutline";
- table[4283] = "gdi32.dll!NtGdiGetOPMInformation";
- table[4285] = "gdi32.dll!NtGdiGetLinkedUFIs";
- table[4293] = "gdi32.dll!NtGdiGetPath";
- table[4296] = "gdi32.dll!NtGdiGetRasterizerCaps";
- table[4300] = "gdi32.dll!NtGdiGetServerMetaFileBits";
- table[4301] = "gdi32.dll!NtGdiGetSpoolMessage";
- table[4304] = "gdi32.dll!NtGdiGetStringBitmapW";
- table[4308] = "gdi32.dll!NtGdiGetTextExtent";
- table[4313] = "gdi32.dll!NtGdiGetUFI";
- table[4314] = "gdi32.dll!NtGdiGetEmbUFI";
- table[4315] = "gdi32.dll!NtGdiGetUFIPathname";
- table[4316] = "gdi32.dll!NtGdiGetEmbedFonts";
- table[4317] = "gdi32.dll!NtGdiChangeGhostFont";
- table[4318] = "gdi32.dll!NtGdiAddEmbFontToDC";
- table[4323] = "gdi32.dll!NtGdiIcmBrushInfo";
- table[4325] = "gdi32.dll!NtGdiInitSpool";
- table[4329] = "gdi32.dll!NtGdiMakeFontDir";
- table[4330] = "gdi32.dll!NtGdiMakeInfoDC";
- table[4335] = "gdi32.dll!NtGdiOffsetClipRgn";
- table[4340] = "gdi32.dll!NtGdiPathToRegion";
- table[4342] = "gdi32.dll!NtGdiPolyDraw";
- table[4344] = "gdi32.dll!NtGdiPolyTextOutW";
- table[4346] = "gdi32.dll!NtGdiPtVisible";
- table[4347] = "gdi32.dll!NtGdiQueryFonts";
- table[4350] = "gdi32.dll!NtGdiRectInRegion";
- table[4352] = "gdi32.dll!NtGdiRemoveFontResourceW";
- table[4353] = "gdi32.dll!NtGdiRemoveFontMemResourceEx";
- table[4355] = "gdi32.dll!NtGdiResizePalette";
- table[4359] = "gdi32.dll!NtGdiScaleViewportExtEx";
- table[4360] = "gdi32.dll!NtGdiScaleWindowExtEx";
- table[4363] = "gdi32.dll!NtGdiSelectClipPath";
- table[4365] = "gdi32.dll!NtGdiSelectPen";
- table[4368] = "gdi32.dll!NtGdiSetBitmapDimension";
- table[4370] = "gdi32.dll!NtGdiSetBrushAttributes";
- table[4372] = "gdi32.dll!NtGdiSetColorAdjustment";
- table[4373] = "gdi32.dll!NtGdiSetColorSpace";
- table[4379] = "gdi32.dll!NtGdiSetLinkedUFIs";
- table[4380] = "gdi32.dll!NtGdiSetMagicColors";
- table[4383] = "gdi32.dll!NtGdiGetDeviceWidth";
- table[4384] = "gdi32.dll!NtGdiMirrorWindowOrg";
- table[4388] = "gdi32.dll!NtGdiSetPixelFormat";
- table[4389] = "gdi32.dll!NtGdiSetRectRgn";
- table[4390] = "gdi32.dll!NtGdiSetSystemPaletteUse";
- table[4395] = "gdi32.dll!NtGdiStartDoc";
- table[4396] = "gdi32.dll!NtGdiStartPage";
- table[4399] = "gdi32.dll!NtGdiStrokeAndFillPath";
- table[4400] = "gdi32.dll!NtGdiStrokePath";
- table[4401] = "gdi32.dll!NtGdiSwapBuffers";
- table[4404] = "gdi32.dll!NtGdiUnloadPrinterDriver";
- table[4406] = "gdi32.dll!NtGdiUnrealizeObject";
- table[4407] = "gdi32.dll!NtGdiUpdateColors";
- table[4408] = "gdi32.dll!NtGdiWidenPath";
- table[4728] = "gdi32.dll!NtGdiEngAssociateSurface";
- table[4729] = "gdi32.dll!NtGdiEngCreateBitmap";
- table[4730] = "gdi32.dll!NtGdiEngCreateDeviceSurface";
- table[4731] = "gdi32.dll!NtGdiEngCreateDeviceBitmap";
- table[4733] = "gdi32.dll!NtGdiEngComputeGlyphSet";
- table[4734] = "gdi32.dll!NtGdiEngCopyBits";
- table[4736] = "gdi32.dll!NtGdiEngDeleteSurface";
- table[4737] = "gdi32.dll!NtGdiEngEraseSurface";
- table[4738] = "gdi32.dll!NtGdiEngUnlockSurface";
- table[4739] = "gdi32.dll!NtGdiEngLockSurface";
- table[4740] = "gdi32.dll!NtGdiEngBitBlt";
- table[4741] = "gdi32.dll!NtGdiEngStretchBlt";
- table[4742] = "gdi32.dll!NtGdiEngPlgBlt";
- table[4743] = "gdi32.dll!NtGdiEngMarkBandingSurface";
- table[4744] = "gdi32.dll!NtGdiEngStrokePath";
- table[4745] = "gdi32.dll!NtGdiEngFillPath";
- table[4746] = "gdi32.dll!NtGdiEngStrokeAndFillPath";
- table[4747] = "gdi32.dll!NtGdiEngPaint";
- table[4748] = "gdi32.dll!NtGdiEngLineTo";
- table[4749] = "gdi32.dll!NtGdiEngAlphaBlend";
- table[4750] = "gdi32.dll!NtGdiEngGradientFill";
- table[4751] = "gdi32.dll!NtGdiEngTransparentBlt";
- table[4752] = "gdi32.dll!NtGdiEngTextOut";
- table[4753] = "gdi32.dll!NtGdiEngStretchBltROP";
- table[4754] = "gdi32.dll!NtGdiXLATEOBJ_cGetPalette";
- table[4755] = "gdi32.dll!NtGdiXLATEOBJ_iXlate";
- table[4756] = "gdi32.dll!NtGdiXLATEOBJ_hGetColorTransform";
- table[4757] = "gdi32.dll!NtGdiCLIPOBJ_bEnum";
- table[4758] = "gdi32.dll!NtGdiCLIPOBJ_cEnumStart";
- table[4759] = "gdi32.dll!NtGdiCLIPOBJ_ppoGetPath";
- table[4760] = "gdi32.dll!NtGdiEngDeletePath";
- table[4761] = "gdi32.dll!NtGdiEngCreateClip";
- table[4762] = "gdi32.dll!NtGdiEngDeleteClip";
- table[4763] = "gdi32.dll!NtGdiBRUSHOBJ_ulGetBrushColor";
- table[4764] = "gdi32.dll!NtGdiBRUSHOBJ_pvAllocRbrush";
- table[4765] = "gdi32.dll!NtGdiBRUSHOBJ_pvGetRbrush";
- table[4766] = "gdi32.dll!NtGdiBRUSHOBJ_hGetColorTransform";
- table[4767] = "gdi32.dll!NtGdiXFORMOBJ_bApplyXform";
- table[4769] = "gdi32.dll!NtGdiFONTOBJ_vGetInfo";
- table[4771] = "gdi32.dll!NtGdiFONTOBJ_cGetGlyphs";
- table[4772] = "gdi32.dll!NtGdiFONTOBJ_pifi";
- table[4773] = "gdi32.dll!NtGdiFONTOBJ_pfdg";
- table[4774] = "gdi32.dll!NtGdiFONTOBJ_pQueryGlyphAttrs";
- table[4775] = "gdi32.dll!NtGdiFONTOBJ_pvTrueTypeFontFile";
- table[4776] = "gdi32.dll!NtGdiFONTOBJ_cGetAllGlyphHandles";
- table[4777] = "gdi32.dll!NtGdiSTROBJ_bEnum";
- table[4778] = "gdi32.dll!NtGdiSTROBJ_bEnumPositionsOnly";
- table[4779] = "gdi32.dll!NtGdiSTROBJ_bGetAdvanceWidths";
- table[4780] = "gdi32.dll!NtGdiSTROBJ_vEnumStart";
- table[4781] = "gdi32.dll!NtGdiSTROBJ_dwGetCodePage";
- table[4782] = "gdi32.dll!NtGdiPATHOBJ_vGetBounds";
- table[4783] = "gdi32.dll!NtGdiPATHOBJ_bEnum";
- table[4784] = "gdi32.dll!NtGdiPATHOBJ_vEnumStart";
- table[4785] = "gdi32.dll!NtGdiPATHOBJ_vEnumStartClipLines";
- table[4786] = "gdi32.dll!NtGdiPATHOBJ_bEnumClipLines";
- table[4787] = "gdi32.dll!NtGdiGetDhpdev";
- table[4788] = "gdi32.dll!NtGdiEngCheckAbort";
- table[4789] = "gdi32.dll!NtGdiHT_Get8BPPFormatPalette";
- table[4790] = "gdi32.dll!NtGdiHT_Get8BPPMaskPalette";
- table[4791] = "gdi32.dll!NtGdiUpdateTransform";
- table[4793] = "gdi32.dll!NtGdiBRUSHOBJ_DeleteRbrush";
- table[4794] = "gdi32.dll!NtGdiUMPDEngFreeUserMem";
- table[4808] = "gdi32.dll!NtGdiDdDDICreateSynchronizationObject";
- table[4809] = "gdi32.dll!NtGdiDdDDIDestroySynchronizationObject";
- table[4810] = "gdi32.dll!NtGdiDdDDIWaitForSynchronizationObject";
- table[4811] = "gdi32.dll!NtGdiDdDDISignalSynchronizationObject";
- table[4812] = "gdi32.dll!NtGdiDdDDIGetRuntimeData";
- table[4818] = "gdi32.dll!NtGdiDdDDIGetMultisampleMethodList";
- table[4826] = "gdi32.dll!NtGdiDdDDIQueryStatistics";
- table[4829] = "gdi32.dll!NtGdiDdDDICreateOverlay";
- table[4830] = "gdi32.dll!NtGdiDdDDIUpdateOverlay";
- table[4831] = "gdi32.dll!NtGdiDdDDIFlipOverlay";
- table[4832] = "gdi32.dll!NtGdiDdDDIDestroyOverlay";
- table[4834] = "gdi32.dll!NtGdiDdDDISetGammaRamp";
- table[4839] = "gdi32.dll!NtGdiDdDDIGetContextSchedulingPriority";
- table[4841] = "gdi32.dll!NtGdiDdDDIGetProcessSchedulingPriorityClass";
- table[4842] = "gdi32.dll!NtGdiDdDDIReleaseProcessVidPnSourceOwners";
- table[4843] = "gdi32.dll!NtGdiDdDDIGetScanLine";
- table[4845] = "gdi32.dll!NtGdiDdDDIPollDisplayChildren";
- table[4846] = "gdi32.dll!NtGdiDdDDIInvalidateActiveVidPn";
- table[4847] = "gdi32.dll!NtGdiDdDDICheckOcclusion";
- table[4848] = "gdi32.dll!NtGdiDdDDIWaitForIdle";
- table[4851] = "gdi32.dll!NtGdiDdDDISetDisplayPrivateDriverFormat";
- table[4852] = "gdi32.dll!NtGdiDdDDISharedPrimaryLockNotification";
- table[4853] = "gdi32.dll!NtGdiDdDDISharedPrimaryUnLockNotification";
- table[4856] = "gdi32.dll!NtGdiGetNumberOfPhysicalMonitors";
- table[4857] = "gdi32.dll!NtGdiGetPhysicalMonitors";
- table[4858] = "gdi32.dll!NtGdiGetPhysicalMonitorDescription";
- table[4859] = "gdi32.dll!NtGdiDestroyPhysicalMonitor";
- table[4860] = "gdi32.dll!NtGdiDDCCIGetVCPFeature";
- table[4861] = "gdi32.dll!NtGdiDDCCISetVCPFeature";
- table[4862] = "gdi32.dll!NtGdiDDCCISaveCurrentSettings";
- table[4863] = "gdi32.dll!NtGdiDDCCIGetCapabilitiesStringLength";
- table[4864] = "gdi32.dll!NtGdiDDCCIGetCapabilitiesString";
- table[4865] = "gdi32.dll!NtGdiDDCCIGetTimingReport";
- table[0] = "ntdll.dll!NtAcceptConnectPort";
- table[1] = "ntdll.dll!NtAccessCheck";
- table[2] = "ntdll.dll!ZwAccessCheckAndAuditAlarm";
- table[3] = "ntdll.dll!NtAccessCheckByType";
- table[4] = "ntdll.dll!NtAccessCheckByTypeAndAuditAlarm";
- table[5] = "ntdll.dll!NtAccessCheckByTypeResultList";
- table[6] = "ntdll.dll!NtAccessCheckByTypeResultListAndAuditAlarm";
- table[7] = "ntdll.dll!ZwAccessCheckByTypeResultListAndAuditAlarmByHandle";
- table[8] = "ntdll.dll!NtAddAtom";
- table[9] = "ntdll.dll!ZwAddBootEntry";
- table[10] = "ntdll.dll!NtAddDriverEntry";
- table[11] = "ntdll.dll!ZwAdjustGroupsToken";
- table[12] = "ntdll.dll!ZwAdjustPrivilegesToken";
- table[13] = "ntdll.dll!NtAlertResumeThread";
- table[14] = "ntdll.dll!NtAlertThread";
- table[15] = "ntdll.dll!ZwAllocateLocallyUniqueId";
- table[16] = "ntdll.dll!NtAllocateUserPhysicalPages";
- table[17] = "ntdll.dll!NtAllocateUuids";
- table[18] = "ntdll.dll!NtAllocateVirtualMemory";
- table[19] = "ntdll.dll!NtAlpcAcceptConnectPort";
- table[20] = "ntdll.dll!ZwAlpcCancelMessage";
- table[21] = "ntdll.dll!ZwAlpcConnectPort";
- table[22] = "ntdll.dll!ZwAlpcCreatePort";
- table[23] = "ntdll.dll!NtAlpcCreatePortSection";
- table[24] = "ntdll.dll!ZwAlpcCreateResourceReserve";
- table[25] = "ntdll.dll!ZwAlpcCreateSectionView";
- table[26] = "ntdll.dll!ZwAlpcCreateSecurityContext";
- table[27] = "ntdll.dll!ZwAlpcDeletePortSection";
- table[28] = "ntdll.dll!NtAlpcDeleteResourceReserve";
- table[29] = "ntdll.dll!NtAlpcDeleteSectionView";
- table[30] = "ntdll.dll!NtAlpcDeleteSecurityContext";
- table[31] = "ntdll.dll!NtAlpcDisconnectPort";
- table[32] = "ntdll.dll!ZwAlpcImpersonateClientOfPort";
- table[33] = "ntdll.dll!ZwAlpcOpenSenderProcess";
- table[34] = "ntdll.dll!ZwAlpcOpenSenderThread";
- table[35] = "ntdll.dll!ZwAlpcQueryInformation";
- table[36] = "ntdll.dll!ZwAlpcQueryInformationMessage";
- table[37] = "ntdll.dll!NtAlpcRevokeSecurityContext";
- table[38] = "ntdll.dll!NtAlpcSendWaitReceivePort";
- table[39] = "ntdll.dll!NtAlpcSetInformation";
- table[40] = "ntdll.dll!NtApphelpCacheControl";
- table[41] = "ntdll.dll!ZwAreMappedFilesTheSame";
- table[42] = "ntdll.dll!ZwAssignProcessToJobObject";
- table[43] = "ntdll.dll!ZwCallbackReturn";
- table[44] = "ntdll.dll!NtCancelDeviceWakeupRequest";
- table[45] = "ntdll.dll!ZwCancelIoFile";
- table[46] = "ntdll.dll!ZwCancelTimer";
- table[47] = "ntdll.dll!NtClearEvent";
- table[48] = "ntdll.dll!NtClose";
- table[49] = "ntdll.dll!ZwCloseObjectAuditAlarm";
- table[50] = "ntdll.dll!NtCompactKeys";
- table[51] = "ntdll.dll!ZwCompareTokens";
- table[52] = "ntdll.dll!NtCompleteConnectPort";
- table[53] = "ntdll.dll!ZwCompressKey";
- table[54] = "ntdll.dll!NtConnectPort";
- table[55] = "ntdll.dll!ZwContinue";
- table[56] = "ntdll.dll!ZwCreateDebugObject";
- table[57] = "ntdll.dll!ZwCreateDirectoryObject";
- table[58] = "ntdll.dll!NtCreateEvent";
- table[59] = "ntdll.dll!NtCreateEventPair";
- table[60] = "ntdll.dll!NtCreateFile";
- table[61] = "ntdll.dll!NtCreateIoCompletion";
- table[62] = "ntdll.dll!ZwCreateJobObject";
- table[63] = "ntdll.dll!NtCreateJobSet";
- table[64] = "ntdll.dll!ZwCreateKey";
- table[65] = "ntdll.dll!NtCreateKeyTransacted";
- table[66] = "ntdll.dll!ZwCreateMailslotFile";
- table[67] = "ntdll.dll!ZwCreateMutant";
- table[68] = "ntdll.dll!ZwCreateNamedPipeFile";
- table[69] = "ntdll.dll!NtCreatePrivateNamespace";
- table[70] = "ntdll.dll!NtCreatePagingFile";
- table[71] = "ntdll.dll!ZwCreatePort";
- table[72] = "ntdll.dll!ZwCreateProcess";
- table[73] = "ntdll.dll!ZwCreateProcessEx";
- table[74] = "ntdll.dll!ZwCreateProfile";
- table[75] = "ntdll.dll!NtCreateSection";
- table[76] = "ntdll.dll!NtCreateSemaphore";
- table[77] = "ntdll.dll!ZwCreateSymbolicLinkObject";
- table[78] = "ntdll.dll!NtCreateThread";
- table[79] = "ntdll.dll!ZwCreateTimer";
- table[80] = "ntdll.dll!NtCreateToken";
- table[81] = "ntdll.dll!NtCreateTransaction";
- table[82] = "ntdll.dll!ZwOpenTransaction";
- table[83] = "ntdll.dll!ZwQueryInformationTransaction";
- table[84] = "ntdll.dll!NtQueryInformationTransactionManager";
- table[85] = "ntdll.dll!NtPrePrepareEnlistment";
- table[86] = "ntdll.dll!ZwPrepareEnlistment";
- table[87] = "ntdll.dll!NtCommitEnlistment";
- table[88] = "ntdll.dll!ZwReadOnlyEnlistment";
- table[89] = "ntdll.dll!ZwRollbackComplete";
- table[90] = "ntdll.dll!NtRollbackEnlistment";
- table[91] = "ntdll.dll!NtCommitTransaction";
- table[92] = "ntdll.dll!NtRollbackTransaction";
- table[93] = "ntdll.dll!ZwPrePrepareComplete";
- table[94] = "ntdll.dll!NtPrepareComplete";
- table[95] = "ntdll.dll!ZwCommitComplete";
- table[96] = "ntdll.dll!ZwSinglePhaseReject";
- table[97] = "ntdll.dll!ZwSetInformationTransaction";
- table[98] = "ntdll.dll!ZwSetInformationTransactionManager";
- table[99] = "ntdll.dll!ZwSetInformationResourceManager";
- table[100] = "ntdll.dll!ZwCreateTransactionManager";
- table[101] = "ntdll.dll!ZwOpenTransactionManager";
- table[102] = "ntdll.dll!NtRenameTransactionManager";
- table[103] = "ntdll.dll!NtRollforwardTransactionManager";
- table[104] = "ntdll.dll!NtRecoverEnlistment";
- table[105] = "ntdll.dll!NtRecoverResourceManager";
- table[106] = "ntdll.dll!ZwRecoverTransactionManager";
- table[107] = "ntdll.dll!ZwCreateResourceManager";
- table[108] = "ntdll.dll!ZwOpenResourceManager";
- table[109] = "ntdll.dll!ZwGetNotificationResourceManager";
- table[110] = "ntdll.dll!ZwQueryInformationResourceManager";
- table[111] = "ntdll.dll!ZwCreateEnlistment";
- table[112] = "ntdll.dll!ZwOpenEnlistment";
- table[113] = "ntdll.dll!NtSetInformationEnlistment";
- table[114] = "ntdll.dll!ZwQueryInformationEnlistment";
- table[115] = "ntdll.dll!ZwCreateWaitablePort";
- table[116] = "ntdll.dll!NtDebugActiveProcess";
- table[117] = "ntdll.dll!ZwDebugContinue";
- table[118] = "ntdll.dll!ZwDelayExecution";
- table[119] = "ntdll.dll!ZwDeleteAtom";
- table[120] = "ntdll.dll!NtDeleteBootEntry";
- table[121] = "ntdll.dll!ZwDeleteDriverEntry";
- table[122] = "ntdll.dll!NtDeleteFile";
- table[123] = "ntdll.dll!ZwDeleteKey";
- table[124] = "ntdll.dll!NtDeletePrivateNamespace";
- table[125] = "ntdll.dll!NtDeleteObjectAuditAlarm";
- table[126] = "ntdll.dll!NtDeleteValueKey";
- table[127] = "ntdll.dll!ZwDeviceIoControlFile";
- table[128] = "ntdll.dll!NtDisplayString";
- table[129] = "ntdll.dll!ZwDuplicateObject";
- table[130] = "ntdll.dll!NtDuplicateToken";
- table[131] = "ntdll.dll!ZwEnumerateBootEntries";
- table[132] = "ntdll.dll!NtEnumerateDriverEntries";
- table[133] = "ntdll.dll!ZwEnumerateKey";
- table[134] = "ntdll.dll!ZwEnumerateSystemEnvironmentValuesEx";
- table[135] = "ntdll.dll!ZwEnumerateTransactionObject";
- table[136] = "ntdll.dll!NtEnumerateValueKey";
- table[137] = "ntdll.dll!ZwExtendSection";
- table[138] = "ntdll.dll!NtFilterToken";
- table[139] = "ntdll.dll!NtFindAtom";
- table[140] = "ntdll.dll!ZwFlushBuffersFile";
- table[141] = "ntdll.dll!ZwFlushInstructionCache";
- table[142] = "ntdll.dll!NtFlushKey";
- table[143] = "ntdll.dll!ZwFlushProcessWriteBuffers";
- table[144] = "ntdll.dll!ZwFlushVirtualMemory";
- table[145] = "ntdll.dll!NtFlushWriteBuffer";
- table[146] = "ntdll.dll!NtFreeUserPhysicalPages";
- table[147] = "ntdll.dll!NtFreeVirtualMemory";
- table[148] = "ntdll.dll!NtFreezeRegistry";
- table[149] = "ntdll.dll!ZwFreezeTransactions";
- table[150] = "ntdll.dll!NtFsControlFile";
- table[151] = "ntdll.dll!NtGetContextThread";
- table[152] = "ntdll.dll!NtGetDevicePowerState";
- table[153] = "ntdll.dll!NtGetNlsSectionPtr";
- table[154] = "ntdll.dll!ZwGetPlugPlayEvent";
- table[155] = "ntdll.dll!NtGetWriteWatch";
- table[156] = "ntdll.dll!NtImpersonateAnonymousToken";
- table[157] = "ntdll.dll!ZwImpersonateClientOfPort";
- table[158] = "ntdll.dll!ZwImpersonateThread";
- table[159] = "ntdll.dll!ZwInitializeNlsFiles";
- table[160] = "ntdll.dll!ZwInitializeRegistry";
- table[161] = "ntdll.dll!NtInitiatePowerAction";
- table[162] = "ntdll.dll!ZwIsProcessInJob";
- table[163] = "ntdll.dll!NtIsSystemResumeAutomatic";
- table[164] = "ntdll.dll!ZwListenPort";
- table[165] = "ntdll.dll!NtLoadDriver";
- table[166] = "ntdll.dll!NtLoadKey";
- table[167] = "ntdll.dll!NtLoadKey2";
- table[168] = "ntdll.dll!NtLoadKeyEx";
- table[169] = "ntdll.dll!NtLockFile";
- table[170] = "ntdll.dll!ZwLockProductActivationKeys";
- table[171] = "ntdll.dll!NtLockRegistryKey";
- table[172] = "ntdll.dll!ZwLockVirtualMemory";
- table[173] = "ntdll.dll!ZwMakePermanentObject";
- table[174] = "ntdll.dll!NtMakeTemporaryObject";
- table[175] = "ntdll.dll!NtMapUserPhysicalPages";
- table[176] = "ntdll.dll!ZwMapUserPhysicalPagesScatter";
- table[177] = "ntdll.dll!ZwMapViewOfSection";
- table[178] = "ntdll.dll!NtModifyBootEntry";
- table[179] = "ntdll.dll!ZwModifyDriverEntry";
- table[180] = "ntdll.dll!NtNotifyChangeDirectoryFile";
- table[181] = "ntdll.dll!NtNotifyChangeKey";
- table[182] = "ntdll.dll!NtNotifyChangeMultipleKeys";
- table[183] = "ntdll.dll!ZwOpenDirectoryObject";
- table[184] = "ntdll.dll!NtOpenEvent";
- table[185] = "ntdll.dll!NtOpenEventPair";
- table[186] = "ntdll.dll!NtOpenFile";
- table[187] = "ntdll.dll!ZwOpenIoCompletion";
- table[188] = "ntdll.dll!ZwOpenJobObject";
- table[189] = "ntdll.dll!ZwOpenKey";
- table[190] = "ntdll.dll!NtOpenKeyTransacted";
- table[191] = "ntdll.dll!NtOpenMutant";
- table[192] = "ntdll.dll!NtOpenPrivateNamespace";
- table[193] = "ntdll.dll!ZwOpenObjectAuditAlarm";
- table[194] = "ntdll.dll!ZwOpenProcess";
- table[195] = "ntdll.dll!ZwOpenProcessToken";
- table[196] = "ntdll.dll!ZwOpenProcessTokenEx";
- table[197] = "ntdll.dll!NtOpenSection";
- table[198] = "ntdll.dll!NtOpenSemaphore";
- table[199] = "ntdll.dll!NtOpenSession";
- table[200] = "ntdll.dll!NtOpenSymbolicLinkObject";
- table[201] = "ntdll.dll!ZwOpenThread";
- table[202] = "ntdll.dll!NtOpenThreadToken";
- table[203] = "ntdll.dll!NtOpenThreadTokenEx";
- table[204] = "ntdll.dll!ZwOpenTimer";
- table[205] = "ntdll.dll!NtPlugPlayControl";
- table[206] = "ntdll.dll!ZwPowerInformation";
- table[207] = "ntdll.dll!ZwPrivilegeCheck";
- table[208] = "ntdll.dll!ZwPrivilegeObjectAuditAlarm";
- table[209] = "ntdll.dll!NtPrivilegedServiceAuditAlarm";
- table[210] = "ntdll.dll!ZwProtectVirtualMemory";
- table[211] = "ntdll.dll!ZwPulseEvent";
- table[212] = "ntdll.dll!ZwQueryAttributesFile";
- table[213] = "ntdll.dll!ZwQueryBootEntryOrder";
- table[214] = "ntdll.dll!ZwQueryBootOptions";
- table[215] = "ntdll.dll!NtQueryDebugFilterState";
- table[216] = "ntdll.dll!NtQueryDefaultLocale";
- table[217] = "ntdll.dll!ZwQueryDefaultUILanguage";
- table[218] = "ntdll.dll!ZwQueryDirectoryFile";
- table[219] = "ntdll.dll!ZwQueryDirectoryObject";
- table[220] = "ntdll.dll!NtQueryDriverEntryOrder";
- table[221] = "ntdll.dll!ZwQueryEaFile";
- table[222] = "ntdll.dll!NtQueryEvent";
- table[223] = "ntdll.dll!ZwQueryFullAttributesFile";
- table[224] = "ntdll.dll!NtQueryInformationAtom";
- table[225] = "ntdll.dll!ZwQueryInformationFile";
- table[226] = "ntdll.dll!ZwQueryInformationJobObject";
- table[227] = "ntdll.dll!ZwQueryInformationPort";
- table[228] = "ntdll.dll!ZwQueryInformationProcess";
- table[229] = "ntdll.dll!NtQueryInformationThread";
- table[230] = "ntdll.dll!ZwQueryInformationToken";
- table[231] = "ntdll.dll!NtQueryInstallUILanguage";
- table[232] = "ntdll.dll!NtQueryIntervalProfile";
- table[233] = "ntdll.dll!NtQueryIoCompletion";
- table[234] = "ntdll.dll!ZwQueryKey";
- table[235] = "ntdll.dll!NtQueryMultipleValueKey";
- table[236] = "ntdll.dll!NtQueryMutant";
- table[237] = "ntdll.dll!NtQueryObject";
- table[238] = "ntdll.dll!NtQueryOpenSubKeys";
- table[239] = "ntdll.dll!NtQueryOpenSubKeysEx";
- table[240] = "ntdll.dll!NtQueryPerformanceCounter";
- table[241] = "ntdll.dll!ZwQueryQuotaInformationFile";
- table[242] = "ntdll.dll!ZwQuerySection";
- table[243] = "ntdll.dll!NtQuerySecurityObject";
- table[244] = "ntdll.dll!ZwQuerySemaphore";
- table[245] = "ntdll.dll!ZwQuerySymbolicLinkObject";
- table[246] = "ntdll.dll!ZwQuerySystemEnvironmentValue";
- table[247] = "ntdll.dll!ZwQuerySystemEnvironmentValueEx";
- table[248] = "ntdll.dll!NtQuerySystemInformation";
- table[249] = "ntdll.dll!NtQuerySystemTime";
- table[250] = "ntdll.dll!ZwQueryTimer";
- table[251] = "ntdll.dll!NtQueryTimerResolution";
- table[252] = "ntdll.dll!ZwQueryValueKey";
- table[253] = "ntdll.dll!NtQueryVirtualMemory";
- table[254] = "ntdll.dll!NtQueryVolumeInformationFile";
- table[255] = "ntdll.dll!NtQueueApcThread";
- table[256] = "ntdll.dll!ZwRaiseException";
- table[257] = "ntdll.dll!ZwRaiseHardError";
- table[258] = "ntdll.dll!NtReadFile";
- table[259] = "ntdll.dll!NtReadFileScatter";
- table[260] = "ntdll.dll!ZwReadRequestData";
- table[261] = "ntdll.dll!NtReadVirtualMemory";
- table[262] = "ntdll.dll!ZwRegisterThreadTerminatePort";
- table[263] = "ntdll.dll!ZwReleaseMutant";
- table[264] = "ntdll.dll!NtReleaseSemaphore";
- table[265] = "ntdll.dll!ZwRemoveIoCompletion";
- table[266] = "ntdll.dll!ZwRemoveProcessDebug";
- table[267] = "ntdll.dll!ZwRenameKey";
- table[268] = "ntdll.dll!ZwReplaceKey";
- table[269] = "ntdll.dll!NtReplacePartitionUnit";
- table[270] = "ntdll.dll!ZwReplyPort";
- table[271] = "ntdll.dll!NtReplyWaitReceivePort";
- table[272] = "ntdll.dll!NtReplyWaitReceivePortEx";
- table[273] = "ntdll.dll!NtReplyWaitReplyPort";
- table[274] = "ntdll.dll!ZwRequestDeviceWakeup";
- table[275] = "ntdll.dll!ZwRequestPort";
- table[276] = "ntdll.dll!NtRequestWaitReplyPort";
- table[277] = "ntdll.dll!ZwRequestWakeupLatency";
- table[278] = "ntdll.dll!NtResetEvent";
- table[279] = "ntdll.dll!ZwResetWriteWatch";
- table[280] = "ntdll.dll!NtRestoreKey";
- table[281] = "ntdll.dll!ZwResumeProcess";
- table[282] = "ntdll.dll!ZwResumeThread";
- table[283] = "ntdll.dll!NtSaveKey";
- table[284] = "ntdll.dll!NtSaveKeyEx";
- table[285] = "ntdll.dll!NtSaveMergedKeys";
- table[286] = "ntdll.dll!NtSecureConnectPort";
- table[287] = "ntdll.dll!ZwSetBootEntryOrder";
- table[288] = "ntdll.dll!ZwSetBootOptions";
- table[289] = "ntdll.dll!ZwSetContextThread";
- table[290] = "ntdll.dll!NtSetDebugFilterState";
- table[291] = "ntdll.dll!NtSetDefaultHardErrorPort";
- table[292] = "ntdll.dll!NtSetDefaultLocale";
- table[293] = "ntdll.dll!ZwSetDefaultUILanguage";
- table[294] = "ntdll.dll!NtSetDriverEntryOrder";
- table[295] = "ntdll.dll!ZwSetEaFile";
- table[296] = "ntdll.dll!NtSetEvent";
- table[297] = "ntdll.dll!NtSetEventBoostPriority";
- table[298] = "ntdll.dll!NtSetHighEventPair";
- table[299] = "ntdll.dll!NtSetHighWaitLowEventPair";
- table[300] = "ntdll.dll!ZwSetInformationDebugObject";
- table[301] = "ntdll.dll!ZwSetInformationFile";
- table[302] = "ntdll.dll!ZwSetInformationJobObject";
- table[303] = "ntdll.dll!ZwSetInformationKey";
- table[304] = "ntdll.dll!ZwSetInformationObject";
- table[305] = "ntdll.dll!ZwSetInformationProcess";
- table[306] = "ntdll.dll!ZwSetInformationThread";
- table[307] = "ntdll.dll!ZwSetInformationToken";
- table[308] = "ntdll.dll!NtSetIntervalProfile";
- table[309] = "ntdll.dll!NtSetIoCompletion";
- table[310] = "ntdll.dll!ZwSetLdtEntries";
- table[311] = "ntdll.dll!ZwSetLowEventPair";
- table[312] = "ntdll.dll!ZwSetLowWaitHighEventPair";
- table[313] = "ntdll.dll!ZwSetQuotaInformationFile";
- table[314] = "ntdll.dll!NtSetSecurityObject";
- table[315] = "ntdll.dll!ZwSetSystemEnvironmentValue";
- table[316] = "ntdll.dll!ZwSetSystemEnvironmentValueEx";
- table[317] = "ntdll.dll!ZwSetSystemInformation";
- table[318] = "ntdll.dll!ZwSetSystemPowerState";
- table[319] = "ntdll.dll!ZwSetSystemTime";
- table[320] = "ntdll.dll!ZwSetThreadExecutionState";
- table[321] = "ntdll.dll!ZwSetTimer";
- table[322] = "ntdll.dll!NtSetTimerResolution";
- table[323] = "ntdll.dll!ZwSetUuidSeed";
- table[324] = "ntdll.dll!ZwSetValueKey";
- table[325] = "ntdll.dll!NtSetVolumeInformationFile";
- table[326] = "ntdll.dll!ZwShutdownSystem";
- table[327] = "ntdll.dll!ZwSignalAndWaitForSingleObject";
- table[328] = "ntdll.dll!NtStartProfile";
- table[329] = "ntdll.dll!ZwStopProfile";
- table[330] = "ntdll.dll!ZwSuspendProcess";
- table[331] = "ntdll.dll!ZwSuspendThread";
- table[332] = "ntdll.dll!NtSystemDebugControl";
- table[333] = "ntdll.dll!ZwTerminateJobObject";
- table[334] = "ntdll.dll!ZwTerminateProcess";
- table[335] = "ntdll.dll!ZwTerminateThread";
- table[336] = "ntdll.dll!NtTestAlert";
- table[337] = "ntdll.dll!ZwThawRegistry";
- table[338] = "ntdll.dll!NtThawTransactions";
- table[339] = "ntdll.dll!NtTraceEvent";
- table[340] = "ntdll.dll!ZwTraceControl";
- table[341] = "ntdll.dll!NtTranslateFilePath";
- table[342] = "ntdll.dll!ZwUnloadDriver";
- table[343] = "ntdll.dll!NtUnloadKey";
- table[344] = "ntdll.dll!ZwUnloadKey2";
- table[345] = "ntdll.dll!ZwUnloadKeyEx";
- table[346] = "ntdll.dll!ZwUnlockFile";
- table[347] = "ntdll.dll!NtUnlockVirtualMemory";
- table[348] = "ntdll.dll!NtUnmapViewOfSection";
- table[349] = "ntdll.dll!NtVdmControl";
- table[350] = "ntdll.dll!NtWaitForDebugEvent";
- table[351] = "ntdll.dll!NtWaitForMultipleObjects";
- table[352] = "ntdll.dll!ZwWaitForSingleObject";
- table[353] = "ntdll.dll!ZwWaitHighEventPair";
- table[354] = "ntdll.dll!NtWaitLowEventPair";
- table[355] = "ntdll.dll!NtWriteFile";
- table[356] = "ntdll.dll!NtWriteFileGather";
- table[357] = "ntdll.dll!NtWriteRequestData";
- table[358] = "ntdll.dll!NtWriteVirtualMemory";
- table[359] = "ntdll.dll!ZwYieldExecution";
- table[360] = "ntdll.dll!ZwCreateKeyedEvent";
- table[361] = "ntdll.dll!NtOpenKeyedEvent";
- table[362] = "ntdll.dll!NtReleaseKeyedEvent";
- table[363] = "ntdll.dll!NtWaitForKeyedEvent";
- table[364] = "ntdll.dll!ZwQueryPortInformationProcess";
- table[365] = "ntdll.dll!NtGetCurrentProcessorNumber";
- table[366] = "ntdll.dll!NtWaitForMultipleObjects32";
- table[367] = "ntdll.dll!ZwGetNextProcess";
- table[368] = "ntdll.dll!ZwGetNextThread";
- table[369] = "ntdll.dll!NtCancelIoFileEx";
- table[370] = "ntdll.dll!NtCancelSynchronousIoFile";
- table[371] = "ntdll.dll!ZwRemoveIoCompletionEx";
- table[372] = "ntdll.dll!ZwRegisterProtocolAddressInformation";
- table[373] = "ntdll.dll!NtPropagationComplete";
- table[374] = "ntdll.dll!ZwPropagationFailed";
- table[375] = "ntdll.dll!NtCreateWorkerFactory";
- table[376] = "ntdll.dll!ZwReleaseWorkerFactoryWorker";
- table[377] = "ntdll.dll!NtWaitForWorkViaWorkerFactory";
- table[378] = "ntdll.dll!ZwSetInformationWorkerFactory";
- table[379] = "ntdll.dll!ZwQueryInformationWorkerFactory";
- table[380] = "ntdll.dll!NtWorkerFactoryWorkerReady";
- table[381] = "ntdll.dll!NtShutdownWorkerFactory";
- table[382] = "ntdll.dll!NtCreateThreadEx";
- table[383] = "ntdll.dll!NtCreateUserProcess";
- table[384] = "ntdll.dll!NtQueryLicenseValue";
- table[385] = "ntdll.dll!ZwMapCMFModule";
- table[386] = "ntdll.dll!ZwIsUILanguageComitted";
- table[387] = "ntdll.dll!ZwFlushInstallUILanguage";
- table[388] = "ntdll.dll!NtGetMUIRegistryInfo";
- table[389] = "ntdll.dll!ZwAcquireCMFViewOwnership";
- table[390] = "ntdll.dll!NtReleaseCMFViewOwnership";
- table[4545] = "imm32.dll!NtUserGetThreadState";
- table[4520] = "imm32.dll!NtUserGetImeInfoEx";
- table[4600] = "imm32.dll!NtUserQueryWindow";
- table[4598] = "imm32.dll!NtUserQueryInputContext";
- table[4581] = "imm32.dll!NtUserNotifyIMEStatus";
- table[4412] = "imm32.dll!NtUserAssociateInputContext";
- table[4429] = "imm32.dll!NtUserCallOneParam";
- table[4463] = "imm32.dll!NtUserDisableThreadIme";
- table[4635] = "imm32.dll!NtUserSetImeInfoEx";
- table[4697] = "imm32.dll!NtUserUpdateInputContext";
- table[4417] = "imm32.dll!NtUserBuildHimcList";
- table[4704] = "imm32.dll!NtUserValidateHandleSecure";
- table[4450] = "imm32.dll!NtUserCreateInputContext";
- table[4460] = "imm32.dll!NtUserDestroyInputContext";
- table[4492] = "imm32.dll!NtUserGetAppImeLevel";
- table[4519] = "imm32.dll!NtUserGetImeHotKey";
- table[4623] = "imm32.dll!NtUserSetAppImeLevel";
- table[4657] = "imm32.dll!NtUserSetThreadLayoutHandles";
- table[4560] = "user32.dll!NtUserInitializeClientPfnArrays";
- table[4596] = "user32.dll!NtUserProcessConnect";
- table[4453] = "user32.dll!NtUserCreateWindowStation";
- table[4449] = "user32.dll!NtUserCreateDesktopEx";
- table[4695] = "user32.dll!NtUserUnregisterUserApiHook";
- table[4607] = "user32.dll!NtUserRegisterUserApiHook";
- table[4634] = "user32.dll!NtUserSetImeHotKey";
- table[4670] = "user32.dll!NtUserSetWindowStationUser";
- table[4568] = "user32.dll!NtUserLoadKeyboardLayoutEx";
- table[4702] = "user32.dll!NtUserUpdatePerUserSystemParameters";
- table[4465] = "user32.dll!NtUserDoSoundConnect";
- table[4720] = "user32.dll!NtUserRegisterSessionPort";
- table[4423] = "user32.dll!NtUserCallHwndOpt";
- table[4651] = "user32.dll!NtUserSetShellWindowEx";
- table[4421] = "user32.dll!NtUserCallHwnd";
- table[4723] = "user32.dll!NtUserDwmStartRedirection";
- table[4609] = "user32.dll!NtUserRegisterRawInputDevices";
- table[4495] = "user32.dll!NtUserGetCaretBlinkTime";
- table[4681] = "user32.dll!NtUserThunkedMenuInfo";
- table[4570] = "user32.dll!NtUserLockWindowUpdate";
- table[4445] = "user32.dll!NtUserCopyAcceleratorTable";
- table[4478] = "user32.dll!NtUserEndMenu";
- table[4458] = "user32.dll!DestroyAcceleratorTable";
- table[4625] = "user32.dll!NtUserSetClassLong";
- table[4613] = "user32.dll!NtUserRemoveMenu";
- table[4643] = "user32.dll!NtUserSetMenuDefaultItem";
- table[4461] = "user32.dll!NtUserDestroyMenu";
- table[4553] = "user32.dll!NtUserGhostWindowFromHungWindow";
- table[4590] = "user32.dll!NtUserPaintMonitor";
- table[4589] = "user32.dll!NtUserPaintDesktop";
- table[4454] = "user32.dll!NtUserDdeInitialize";
- table[4663] = "user32.dll!NtUserSetWindowPlacement";
- table[4669] = "user32.dll!NtUserSetWindowsHookEx";
- table[4457] = "user32.dll!NtUserDeleteMenu";
- table[4565] = "user32.dll!NtUserInvalidateRgn";
- table[4638] = "user32.dll!NtUserSetInformationThread";
- table[4493] = "user32.dll!NtUserGetAsyncKeyState";
- table[4434] = "user32.dll!NtUserCheckDesktopByThreadId";
- table[4727] = "user32.dll!NtUserGetWindowMinimizeRect";
- table[4672] = "user32.dll!NtUserSetWinEventHook";
- table[4508] = "user32.dll!NtUserGetCPD";
- table[4665] = "user32.dll!NtUserSetWindowRgn";
- table[4569] = "user32.dll!NtUserLockWindowStation";
- table[4485] = "user32.dll!NtUserFillWindow";
- table[4677] = "user32.dll!NtUserSoundSentry";
- table[4696] = "user32.dll!NtUserUnregisterHotKey";
- table[4524] = "user32.dll!NtUserGetKeyboardState";
- table[4691] = "user32.dll!NtUserUnhookWinEvent";
- table[4621] = "user32.dll!NtUserSendInput";
- table[4658] = "user32.dll!NtUserSetThreadState";
- table[4624] = "user32.dll!NtUserSetCapture";
- table[4633] = "user32.dll!NtUserSetFocus";
- table[4636] = "user32.dll!NtUserSetImeOwnerWindow";
- table[4425] = "user32.dll!NtUserCallHwndParamLock";
- table[4686] = "user32.dll!NtUserCalcMenuBar";
- table[4546] = "user32.dll!NtUserGetTitleBarInfo";
- table[4512] = "user32.dll!NtUserGetDCEx";
- table[4528] = "user32.dll!NtUserGetMenuBarInfo";
- table[4678] = "user32.dll!NtUserSwitchDesktop";
- table[4522] = "user32.dll!NtUserGetKeyboardLayoutList";
- table[4675] = "user32.dll!NtUserShowWindow";
- table[4660] = "user32.dll!NtUserSetProcessDPIAware";
- table[4646] = "user32.dll!NtUserSetParent";
- table[4693] = "user32.dll!NtUserUnlockWindowStation";
- table[4684] = "user32.dll!NtUserTrackMouseEvent";
- table[4608] = "user32.dll!NtUserRegisterHotKey";
- table[4701] = "user32.dll!NtUserSetLayeredWindowAttributes";
- table[4580] = "user32.dll!NtUserMoveWindow";
- table[4699] = "user32.dll!NtUserUpdateLayeredWindow";
- table[4542] = "user32.dll!NtUserGetScrollBarInfo";
- table[4447] = "user32.dll!NtUserCreateAcceleratorTable";
- table[4630] = "user32.dll!NtUserSetCursor";
- table[4586] = "user32.dll!NtUserOpenInputDesktop";
- table[4514] = "user32.dll!NtUserGetForegroundWindow";
- table[4548] = "user32.dll!GetUpdateRect";
- table[4656] = "user32.dll!NtUserSetThreadDesktop";
- table[4536] = "user32.dll!NtUserGetProcessWindowStation";
- table[4647] = "user32.dll!NtUserSetProcessWindowStation";
- table[4605] = "user32.dll!NtUserRegisterClassExWOW";
- table[4494] = "user32.dll!NtUserGetAtomName";
- table[4697] = "user32.dll!NtUserUpdateInputContext";
- table[4661] = "user32.dll!NtUserSetWindowFNID";
- table[4498] = "user32.dll!NtUserGetClassName";
- table[4516] = "user32.dll!NtUserGetGUIThreadInfo";
- table[4585] = "user32.dll!NtUserOpenDesktop";
- table[4419] = "user32.dll!NtUserBuildNameList";
- table[4617] = "user32.dll!NtUserSBGetParms";
- table[4674] = "user32.dll!NtUserShowScrollBar";
- table[4588] = "user32.dll!NtUserOpenWindowStation";
- table[4694] = "user32.dll!NtUserUnregisterClass";
- table[4481] = "user32.dll!NtUserEnumDisplayMonitors";
- table[4462] = "user32.dll!NtUserDestroyWindow";
- table[4441] = "user32.dll!NtUserCloseDesktop";
- table[4459] = "user32.dll!NtUserDestroyCursor";
- table[4442] = "user32.dll!NtUserCloseWindowStation";
- table[4418] = "user32.dll!NtUserBuildHwndList";
- table[4594] = "user32.dll!NtUserPostThreadMessage";
- table[4614] = "user32.dll!NtUserRemoveProp";
- table[4662] = "user32.dll!NtUserSetWindowLong";
- table[4664] = "user32.dll!NtUserSetWindowPos";
- table[4422] = "user32.dll!NtUserCallHwndLock";
- table[4649] = "user32.dll!NtUserSetProp";
- table[4477] = "user32.dll!NtUserEndDeferWindowPosEx";
- table[4455] = "user32.dll!NtUserDeferWindowPos";
- table[4632] = "user32.dll!NtUserSetCursorIconData";
- table[4486] = "user32.dll!NtUserFindExistingCursorIcon";
- table[4533] = "user32.dll!NtUserGetObjectInformation";
- table[4452] = "user32.dll!NtUserCreateWindowEx";
- table[4682] = "user32.dll!NtUserThunkedMenuItemInfo";
- table[4543] = "user32.dll!NtUserGetSystemMenu";
- table[4676] = "user32.dll!NtUserShowWindowAsync";
- table[4600] = "user32.dll!NtUserQueryWindow";
- table[4517] = "user32.dll!NtUserGetIconInfo";
- table[4518] = "user32.dll!NtUserGetIconSize";
- table[4583] = "user32.dll!NtUserNotifyWinEvent";
- table[4562] = "user32.dll!NtUserInternalGetWindowText";
- table[4666] = "user32.dll!NtUserGetWindowRgnEx";
- table[4472] = "user32.dll!NtUserDrawIconEx";
- table[4424] = "user32.dll!NtUserCallHwndParam";
- table[4409] = "user32.dll!NtUserActivateKeyboardLayout";
- table[4629] = "user32.dll!NtUserSetConsoleReserveKeys";
- table[4557] = "user32.dll!NtUserHungWindowFromGhostWindow";
- table[4622] = "user32.dll!NtUserSetActiveWindow";
- table[4544] = "user32.dll!NtUserGetThreadDesktop";
- table[4497] = "user32.dll!NtUserGetClassInfoEx";
- table[4480] = "user32.dll!NtUserEnumDisplayDevices";
- table[4482] = "user32.dll!NtUserEnumDisplaySettings";
- table[4650] = "user32.dll!NtUserSetScrollInfo";
- table[4526] = "user32.dll!NtUserGetKeyState";
- table[4575] = "user32.dll!NtUserMessageCall";
- table[4706] = "user32.dll!NtUserValidateTimerCallback";
- table[4611] = "user32.dll!NtUserRegisterWindowMessage";
- table[4511] = "user32.dll!NtUserGetDC";
- table[4602] = "user32.dll!NtUserRealInternalGetMessage";
- table[4487] = "user32.dll!NtUserFindWindowEx";
- table[4500] = "user32.dll!NtUserGetClipboardFormatName";
- table[4545] = "user32.dll!NtUserGetThreadState";
- table[4679] = "user32.dll!NtUserSystemParametersInfo";
- table[4593] = "user32.dll!NtUserPostMessage";
- table[4659] = "user32.dll!NtUserSetTimer";
- table[4567] = "user32.dll!NtUserKillTimer";
- table[4414] = "user32.dll!NtUserBeginPaint";
- table[4479] = "user32.dll!NtUserEndPaint";
- table[4604] = "user32.dll!NtUserRedrawWindow";
- table[4491] = "user32.dll!NtUserGetAncestor";
- table[4555] = "user32.dll!NtUserHideCaret";
- table[4673] = "user32.dll!NtUserShowCaret";
- table[4448] = "user32.dll!NtUserCreateCaret";
- table[4531] = "user32.dll!NtUserGetMessage";
- table[4591] = "user32.dll!PeekMessageW";
- table[4429] = "user32.dll!NtUserCallOneParam";
- table[4428] = "user32.dll!NtUserCallNoParam";
- table[4464] = "user32.dll!NtUserDispatchMessage";
- table[4648] = "user32.dll!NtUserGetProp";
- table[4550] = "user32.dll!NtUserGetWindowDC";
- table[4513] = "user32.dll!NtUserGetDoubleClickTime";
- table[4710] = "user32.dll!NtUserWaitMessage";
- table[4564] = "user32.dll!NtUserInvalidateRect";
- table[4430] = "user32.dll!NtUserCallTwoParam";
- table[4618] = "user32.dll!NtUserScrollDC";
- table[4704] = "user32.dll!NtUserValidateHandleSecure";
- table[4439] = "user32.dll!NtUserClipCursor";
- table[4571] = "user32.dll!NtUserLockWorkStation";
- table[4724] = "user32.dll!NtUserDwmStopRedirection";
- table[4534] = "user32.dll!NtUserGetOpenClipboardWindow";
- table[4484] = "user32.dll!NtUserExcludeUpdateRgn";
- table[4707] = "user32.dll!NtUserVkKeyScanEx";
- table[4654] = "user32.dll!NtUserSetSystemMenu";
- table[4438] = "user32.dll!NtUserChildWindowFromPointEx";
- table[4671] = "user32.dll!NtUserSetWindowWord";
- table[4476] = "user32.dll!NtUserEnableScrollBar";
- table[4415] = "user32.dll!NtUserBitBltSysBmp";
- table[4509] = "user32.dll!NtUserGetCursorFrameInfo";
- table[4427] = "user32.dll!NtUserCallNextHookEx";
- table[4628] = "user32.dll!NtUserSetClipboardViewer";
- table[4437] = "user32.dll!CheckMenuItem";
- table[4566] = "user32.dll!NtUserIsClipboardFormatAvailable";
- table[4440] = "user32.dll!NtUserCloseClipboard";
- table[4584] = "user32.dll!NtUserOpenClipboard";
- table[4502] = "user32.dll!NtUserGetClipboardSequenceNumber";
- table[4431] = "user32.dll!NtUserChangeClipboardChain";
- table[4688] = "user32.dll!NtUserTranslateAccelerator";
- table[4705] = "user32.dll!NtUserValidateRect";
- table[4667] = "user32.dll!NtUserSetWindowRgnEx";
- table[4475] = "user32.dll!NtUserEnableMenuItem";
- table[4496] = "user32.dll!NtUserGetCaretPos";
- table[4505] = "user32.dll!NtUserGetComboBoxInfo";
- table[4426] = "user32.dll!NtUserCallMsgFilter";
- table[4690] = "user32.dll!NtUserUnhookWindowsHookEx";
- table[4416] = "user32.dll!NtUserBlockInput";
- table[4595] = "user32.dll!NtUserPrintWindow";
- table[4501] = "user32.dll!NtUserGetClipboardOwner";
- table[4413] = "user32.dll!NtUserAttachThreadInput";
- table[4446] = "user32.dll!NtUserCountClipboardFormats";
- table[4572] = "user32.dll!NtUserLogicalToPhysicalPoint";
- table[4592] = "user32.dll!NtUserPhysicalToLogicalPoint";
- table[4712] = "user32.dll!NtUserWindowFromPhysicalPoint";
- table[4685] = "user32.dll!NtUserTrackPopupMenuEx";
- table[4641] = "user32.dll!NtUserSetMenu";
- table[4432] = "user32.dll!NtUserChangeDisplaySettings";
- table[4726] = "user32.dll!NtUserDwmGetDxRgn";
- table[4725] = "user32.dll!NtUserDwmHintDxUpdate";
- table[4573] = "user32.dll!NtUserMapVirtualKeyEx";
- table[4640] = "user32.dll!NtUserSetKeyboardState";
- table[4708] = "user32.dll!NtUserWaitForInputIdle";
- table[4549] = "user32.dll!NtUserGetUpdateRgn";
- table[4456] = "user32.dll!NtUserDefSetText";
- table[4506] = "user32.dll!NtUserGetControlBrush";
- table[4488] = "user32.dll!NtUserFlashWindowEx";
- table[4689] = "user32.dll!NtUserTranslateMessage";
- table[4619] = "user32.dll!NtUserScrollWindowEx";
- table[4687] = "user32.dll!NtUserPaintMenuBar";
- table[4551] = "user32.dll!NtUserGetWindowPlacement";
- table[4713] = "user32.dll!NtUserWindowFromPoint";
- table[4410] = "user32.dll!NtUserAddClipboardFormatListener";
- table[4411] = "user32.dll!NtUserAlterWindowStyle";
- table[4420] = "user32.dll!NtUserBuildPropList";
- table[4433] = "user32.dll!NtUserCheckAccessForIntegrityLevel";
- table[4435] = "user32.dll!NtUserCheckWindowThreadDesktop";
- table[4444] = "user32.dll!NtUserConvertMemHandle";
- table[4451] = "user32.dll!NtUserCreateLocalMemHandle";
- table[4466] = "user32.dll!NtUserDoSoundDisconnect";
- table[4467] = "user32.dll!NtUserDragDetect";
- table[4468] = "user32.dll!NtUserDragObject";
- table[4469] = "user32.dll!NtUserDrawAnimatedRects";
- table[4470] = "user32.dll!NtUserDrawCaption";
- table[4471] = "user32.dll!NtUserDrawCaptionTemp";
- table[4473] = "user32.dll!NtUserDrawMenuBarTemp";
- table[4474] = "user32.dll!NtUserEmptyClipboard";
- table[4483] = "user32.dll!NtUserEvent";
- table[4489] = "user32.dll!NtUserFrostCrashedWindow";
- table[4490] = "user32.dll!NtUserGetAltTabInfo";
- table[4499] = "user32.dll!NtUserGetClipboardData";
- table[4503] = "user32.dll!NtUserGetClipboardViewer";
- table[4504] = "user32.dll!NtUserGetClipCursor";
- table[4507] = "user32.dll!NtUserGetControlColor";
- table[4510] = "user32.dll!NtUserGetCursorInfo";
- table[4515] = "user32.dll!NtUserGetGuiResources";
- table[4519] = "user32.dll!NtUserGetImeHotKey";
- table[4521] = "user32.dll!NtUserGetInternalWindowPos";
- table[4523] = "user32.dll!NtUserGetKeyboardLayoutName";
- table[4525] = "user32.dll!NtUserGetKeyNameText";
- table[4527] = "user32.dll!NtUserGetListBoxInfo";
- table[4529] = "user32.dll!NtUserGetMenuIndex";
- table[4530] = "user32.dll!NtUserGetMenuItemRect";
- table[4532] = "user32.dll!NtUserGetMouseMovePointsEx";
- table[4535] = "user32.dll!NtUserGetPriorityClipboardFormat";
- table[4537] = "user32.dll!NtUserGetRawInputBuffer";
- table[4538] = "user32.dll!NtUserGetRawInputData";
- table[4539] = "user32.dll!NtUserGetRawInputDeviceInfo";
- table[4540] = "user32.dll!NtUserGetRawInputDeviceList";
- table[4541] = "user32.dll!NtUserGetRegisteredRawInputDevices";
- table[4547] = "user32.dll!NtUserGetUpdatedClipboardFormats";
- table[4552] = "user32.dll!NtUserGetWOWClass";
- table[4556] = "user32.dll!NtUserHiliteMenuItem";
- table[4558] = "user32.dll!NtUserImpersonateDdeClientWindow";
- table[4561] = "user32.dll!NtUserInitTask";
- table[4563] = "user32.dll!NtUserInternalGetWindowIcon";
- table[4574] = "user32.dll!NtUserMenuItemFromPoint";
- table[4576] = "user32.dll!NtUserMinMaximize";
- table[4577] = "user32.dll!NtUserMNDragLeave";
- table[4578] = "user32.dll!NtUserMNDragOver";
- table[4579] = "user32.dll!NtUserModifyUserStartupInfoFlags";
- table[4581] = "user32.dll!NtUserNotifyIMEStatus";
- table[4587] = "user32.dll!NtUserOpenThreadDesktop";
- table[4599] = "user32.dll!NtUserQuerySendMessage";
- table[4601] = "user32.dll!NtUserRealChildWindowFromPoint";
- table[4603] = "user32.dll!NtUserRealWaitMessageEx";
- table[4606] = "user32.dll!NtUserRegisterErrorReportingDialog";
- table[4610] = "user32.dll!NtUserRegisterTasklist";
- table[4612] = "user32.dll!NtUserRemoveClipboardFormatListener";
- table[4616] = "user32.dll!NtUserResolveDesktopForWOW";
- table[4626] = "user32.dll!NtUserSetClassWord";
- table[4627] = "user32.dll!NtUserSetClipboardData";
- table[4631] = "user32.dll!NtUserSetCursorContents";
- table[4639] = "user32.dll!NtUserSetInternalWindowPos";
- table[4642] = "user32.dll!NtUserSetMenuContextHelpId";
- table[4644] = "user32.dll!NtUserSetMenuFlagRtoL";
- table[4645] = "user32.dll!NtUserSetObjectInformation";
- table[4652] = "user32.dll!NtUserSetSysColors";
- table[4653] = "user32.dll!NtUserSetSystemCursor";
- table[4655] = "user32.dll!NtUserSetSystemTimer";
- table[4668] = "user32.dll!NtUserSetWindowsHookAW";
- table[4680] = "user32.dll!NtUserTestForInteractiveUser";
- table[4683] = "user32.dll!NtUserToUnicodeEx";
- table[4692] = "user32.dll!NtUserUnloadKeyboardLayout";
- table[4698] = "user32.dll!NtUserUpdateInstance";
- table[4700] = "user32.dll!NtUserGetLayeredWindowAttributes";
- table[4703] = "user32.dll!NtUserUserHandleGrantAccess";
- table[4709] = "user32.dll!NtUserWaitForMsgAndEvent";
- table[4711] = "user32.dll!NtUserWin32PoolAllocationStats";
- table[4714] = "user32.dll!NtUserYieldTask";
- table[4721] = "user32.dll!NtUserUnregisterSessionPort";
- table[4722] = "user32.dll!NtUserUpdateWindowTransform";
- table[4866] = "user32.dll!NtUserSetMirrorRendering";
- table[4867] = "user32.dll!NtUserShowSystemCursor";
-}
-
- return table;
-}
-
-#endif // TRACELINE_SYSCALL_MAP_H_
diff --git a/chromium/tools/unused-symbols-report.py b/chromium/tools/unused-symbols-report.py
deleted file mode 100755
index 900bf16e120..00000000000
--- a/chromium/tools/unused-symbols-report.py
+++ /dev/null
@@ -1,171 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-"""Prints a report of symbols stripped by the linker due to being unused.
-
-To use, build with these linker flags:
- -Wl,--gc-sections
- -Wl,--print-gc-sections
-the first one is the default in Release; search build/common.gypi for it
-and to see where to add the other.
-
-Then build, saving the output into a file:
- make chrome 2>&1 | tee buildlog
-and run this script on it:
- ./tools/unused-symbols-report.py buildlog > report.html
-"""
-
-import cgi
-import optparse
-import os
-import re
-import subprocess
-import sys
-
-cppfilt_proc = None
-def Demangle(sym):
- """Demangle a C++ symbol by passing it through c++filt."""
- global cppfilt_proc
- if cppfilt_proc is None:
- cppfilt_proc = subprocess.Popen(['c++filt'], stdin=subprocess.PIPE,
- stdout=subprocess.PIPE)
- print >>cppfilt_proc.stdin, sym
- return cppfilt_proc.stdout.readline().strip()
-
-
-def Unyuck(sym):
- """Attempt to prettify a C++ symbol by some basic heuristics."""
- sym = sym.replace('std::basic_string<char, std::char_traits<char>, '
- 'std::allocator<char> >', 'std::string')
- sym = sym.replace('std::basic_string<wchar_t, std::char_traits<wchar_t>, '
- 'std::allocator<wchar_t> >', 'std::wstring')
- sym = sym.replace('std::basic_string<unsigned short, '
- 'base::string16_char_traits, '
- 'std::allocator<unsigned short> >', 'string16')
- sym = re.sub(r', std::allocator<\S+\s+>', '', sym)
- return sym
-
-
-def Parse(input, skip_paths=None, only_paths=None):
- """Parse the --print-gc-sections build output.
-
- Args:
- input: iterable over the lines of the build output
-
- Yields:
- (target name, path to .o file, demangled symbol)
- """
- symbol_re = re.compile(r"'\.text\.(\S+)' in file '(\S+)'$")
- path_re = re.compile(r"^out/[^/]+/[^/]+/([^/]+)/(.*)$")
- for line in input:
- match = symbol_re.search(line)
- if not match:
- continue
- symbol, path = match.groups()
- symbol = Unyuck(Demangle(symbol))
- path = os.path.normpath(path)
- if skip_paths and skip_paths in path:
- continue
- if only_paths and only_paths not in path:
- continue
- match = path_re.match(path)
- if not match:
- print >>sys.stderr, "Skipping weird path", path
- continue
- target, path = match.groups()
- yield target, path, symbol
-
-
-# HTML header for our output page.
-TEMPLATE_HEADER = """<!DOCTYPE html>
-<head>
-<style>
-body {
- font-family: sans-serif;
- font-size: 0.8em;
-}
-h1, h2 {
- font-weight: normal;
- margin: 0.5em 0;
-}
-h2 {
- margin-top: 1em;
-}
-tr:hover {
- background: #eee;
-}
-.permalink {
- padding-left: 1ex;
- font-size: 80%;
- text-decoration: none;
- color: #ccc;
-}
-.symbol {
- font-family: WebKitWorkAround, monospace;
- margin-left: 4ex;
- text-indent: -4ex;
- padding: 0.5ex 1ex;
-}
-.file {
- padding: 0.5ex 1ex;
- padding-left: 2ex;
- font-family: WebKitWorkAround, monospace;
- font-size: 90%;
- color: #777;
-}
-</style>
-</head>
-<body>
-<h1>chrome symbols deleted at link time</h1>
-"""
-
-
-def Output(iter):
- """Print HTML given an iterable of (target, path, symbol) tuples."""
- targets = {}
- for target, path, symbol in iter:
- entries = targets.setdefault(target, [])
- entries.append((symbol, path))
-
- print TEMPLATE_HEADER
- print "<p>jump to target:"
- print "<select onchange='document.location.hash = this.value'>"
- for target in sorted(targets.keys()):
- print "<option>%s</option>" % target
- print "</select></p>"
-
- for target in sorted(targets.keys()):
- print "<h2>%s" % target
- print "<a class=permalink href='#%s' name='%s'>#</a>" % (target, target)
- print "</h2>"
- print "<table width=100% cellspacing=0>"
- for symbol, path in sorted(targets[target]):
- htmlsymbol = cgi.escape(symbol).replace('::', '::<wbr>')
- print "<tr><td><div class=symbol>%s</div></td>" % htmlsymbol
- print "<td valign=top><div class=file>%s</div></td></tr>" % path
- print "</table>"
-
-
-def main():
- parser = optparse.OptionParser(usage='%prog [options] buildoutput\n\n' +
- __doc__)
- parser.add_option("--skip-paths", metavar="STR", default="third_party",
- help="skip paths matching STR [default=%default]")
- parser.add_option("--only-paths", metavar="STR",
- help="only include paths matching STR [default=%default]")
- opts, args = parser.parse_args()
-
- if len(args) < 1:
- parser.print_help()
- sys.exit(1)
-
- iter = Parse(open(args[0]),
- skip_paths=opts.skip_paths,
- only_paths=opts.only_paths)
- Output(iter)
-
-
-if __name__ == '__main__':
- main()
diff --git a/chromium/tools/update_reference_build.py b/chromium/tools/update_reference_build.py
deleted file mode 100755
index 112599b8c12..00000000000
--- a/chromium/tools/update_reference_build.py
+++ /dev/null
@@ -1,335 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright (c) 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.
-
-"""Updates the Chrome reference builds.
-
-Use -r option to update a Chromium reference build, or -b option for Chrome
-official builds.
-
-Usage:
- $ cd /tmp
- $ /path/to/update_reference_build.py -r <revision>
- $ cd reference_builds/reference_builds
- $ gcl change
- $ gcl upload <change>
- $ gcl commit <change>
-"""
-
-import logging
-import optparse
-import os
-import shutil
-import subprocess
-import sys
-import time
-import urllib
-import urllib2
-import zipfile
-
-# Example chromium build location:
-# gs://chromium-browser-snapshots/Linux/228977/chrome-linux.zip
-CHROMIUM_URL_FMT = ('http://commondatastorage.googleapis.com/'
- 'chromium-browser-snapshots/%s/%s/%s')
-
-# Chrome official build storage
-# https://wiki.corp.google.com/twiki/bin/view/Main/ChromeOfficialBuilds
-
-# Internal Google archive of official Chrome builds, example:
-# https://goto.google.com/chrome_official_builds/
-# 32.0.1677.0/precise32bit/chrome-precise32bit.zip
-CHROME_INTERNAL_URL_FMT = ('http://master.chrome.corp.google.com/'
- 'official_builds/%s/%s/%s')
-
-# Google storage location (no public web URL's), example:
-# gs://chrome-archive/30/30.0.1595.0/precise32bit/chrome-precise32bit.zip
-CHROME_GS_URL_FMT = ('gs://chrome-archive/%s/%s/%s/%s')
-
-
-class BuildUpdater(object):
- _PLATFORM_FILES_MAP = {
- 'Win': [
- 'chrome-win32.zip',
- 'chrome-win32-syms.zip',
- ],
- 'Mac': [
- 'chrome-mac.zip',
- ],
- 'Linux': [
- 'chrome-linux.zip',
- ],
- 'Linux_x64': [
- 'chrome-linux.zip',
- ],
- }
-
- _CHROME_PLATFORM_FILES_MAP = {
- 'Win': [
- 'chrome-win32.zip',
- 'chrome-win32-syms.zip',
- ],
- 'Mac': [
- 'chrome-mac.zip',
- ],
- 'Linux': [
- 'chrome-precise32bit.zip',
- ],
- 'Linux_x64': [
- 'chrome-precise64bit.zip',
- ],
- }
-
- # Map of platform names to gs:// Chrome build names.
- _BUILD_PLATFORM_MAP = {
- 'Linux': 'precise32bit',
- 'Linux_x64': 'precise64bit',
- 'Win': 'win',
- 'Mac': 'mac',
- }
-
- _PLATFORM_DEST_MAP = {
- 'Linux': 'chrome_linux',
- 'Linux_x64': 'chrome_linux64',
- 'Win': 'chrome_win',
- 'Mac': 'chrome_mac',
- }
-
- def __init__(self, options):
- self._platforms = options.platforms.split(',')
- self._revision = options.build_number or int(options.revision)
- self._use_build_number = bool(options.build_number)
- self._use_gs = options.use_gs
-
- @staticmethod
- def _GetCmdStatusAndOutput(args, cwd=None, shell=False):
- """Executes a subprocess and returns its exit code and output.
-
- Args:
- args: A string or a sequence of program arguments.
- cwd: If not None, the subprocess's current directory will be changed to
- |cwd| before it's executed.
- shell: Whether to execute args as a shell command.
-
- Returns:
- The tuple (exit code, output).
- """
- logging.info(str(args) + ' ' + (cwd or ''))
- p = subprocess.Popen(args=args, cwd=cwd, stdout=subprocess.PIPE,
- stderr=subprocess.PIPE, shell=shell)
- stdout, stderr = p.communicate()
- exit_code = p.returncode
- if stderr:
- logging.critical(stderr)
- logging.info(stdout)
- return (exit_code, stdout)
-
- def _GetBuildUrl(self, platform, revision, filename):
- if self._use_build_number:
- # Chrome Google storage bucket.
- if self._use_gs:
- release = revision[:revision.find('.')]
- return (CHROME_GS_URL_FMT % (
- release,
- revision,
- self._BUILD_PLATFORM_MAP[platform],
- filename))
- # Chrome internal archive.
- return (CHROME_INTERNAL_URL_FMT % (
- revision,
- self._BUILD_PLATFORM_MAP[platform],
- filename))
- # Chromium archive.
- return CHROMIUM_URL_FMT % (urllib.quote_plus(platform), revision, filename)
-
- def _FindBuildRevision(self, platform, revision, filename):
- # TODO(shadi): Iterate over build numbers to find a valid one.
- if self._use_build_number:
- return (revision
- if self._DoesBuildExist(platform, revision, filename) else None)
-
- MAX_REVISIONS_PER_BUILD = 100
- for revision_guess in xrange(revision, revision + MAX_REVISIONS_PER_BUILD):
- if self._DoesBuildExist(platform, revision_guess, filename):
- return revision_guess
- else:
- time.sleep(.1)
- return None
-
- def _DoesBuildExist(self, platform, build_number, filename):
- url = self._GetBuildUrl(platform, build_number, filename)
- if self._use_gs:
- return self._DoesGSFileExist(url)
-
- r = urllib2.Request(url)
- r.get_method = lambda: 'HEAD'
- try:
- urllib2.urlopen(r)
- return True
- except urllib2.HTTPError, err:
- if err.code == 404:
- return False
-
- def _DoesGSFileExist(self, gs_file_name):
- exit_code = BuildUpdater._GetCmdStatusAndOutput(
- ['gsutil', 'ls', gs_file_name])[0]
- return not exit_code
-
- def _GetPlatformFiles(self, platform):
- if self._use_build_number:
- return BuildUpdater._CHROME_PLATFORM_FILES_MAP[platform]
- return BuildUpdater._PLATFORM_FILES_MAP[platform]
-
- def _DownloadBuilds(self):
- for platform in self._platforms:
- for f in self._GetPlatformFiles(platform):
- output = os.path.join('dl', platform,
- '%s_%s_%s' % (platform, self._revision, f))
- if os.path.exists(output):
- logging.info('%s alread exists, skipping download', output)
- continue
- build_revision = self._FindBuildRevision(platform, self._revision, f)
- if not build_revision:
- logging.critical('Failed to find %s build for r%s\n', platform,
- self._revision)
- sys.exit(1)
- dirname = os.path.dirname(output)
- if dirname and not os.path.exists(dirname):
- os.makedirs(dirname)
- url = self._GetBuildUrl(platform, build_revision, f)
- self._DownloadFile(url, output)
-
- def _DownloadFile(self, url, output):
- logging.info('Downloading %s, saving to %s', url, output)
- if self._use_build_number and self._use_gs:
- BuildUpdater._GetCmdStatusAndOutput(['gsutil', 'cp', url, output])
- else:
- r = urllib2.urlopen(url)
- with file(output, 'wb') as f:
- f.write(r.read())
-
- def _FetchSvnRepos(self):
- if not os.path.exists('reference_builds'):
- os.makedirs('reference_builds')
- BuildUpdater._GetCmdStatusAndOutput(
- ['gclient', 'config',
- 'svn://svn.chromium.org/chrome/trunk/deps/reference_builds'],
- 'reference_builds')
- BuildUpdater._GetCmdStatusAndOutput(
- ['gclient', 'sync'], 'reference_builds')
-
- def _UnzipFile(self, dl_file, dest_dir):
- if not zipfile.is_zipfile(dl_file):
- return False
- logging.info('Opening %s', dl_file)
- with zipfile.ZipFile(dl_file, 'r') as z:
- for content in z.namelist():
- dest = os.path.join(dest_dir, content[content.find('/')+1:])
- # Create dest parent dir if it does not exist.
- if not os.path.isdir(os.path.dirname(dest)):
- os.makedirs(os.path.dirname(dest))
- # If dest is just a dir listing, do nothing.
- if not os.path.basename(dest):
- continue
- if not os.path.isdir(os.path.dirname(dest)):
- os.makedirs(os.path.dirname(dest))
- with z.open(content) as unzipped_content:
- logging.info('Extracting %s to %s (%s)', content, dest, dl_file)
- with file(dest, 'wb') as dest_file:
- dest_file.write(unzipped_content.read())
- permissions = z.getinfo(content).external_attr >> 16
- if permissions:
- os.chmod(dest, permissions)
- return True
-
- def _ClearDir(self, dir):
- """Clears all files in |dir| except for hidden files and folders."""
- for root, dirs, files in os.walk(dir):
- # Skip hidden files and folders (like .svn and .git).
- files = [f for f in files if f[0] != '.']
- dirs[:] = [d for d in dirs if d[0] != '.']
-
- for f in files:
- os.remove(os.path.join(root, f))
-
- def _ExtractBuilds(self):
- for platform in self._platforms:
- if os.path.exists('tmp_unzip'):
- os.path.unlink('tmp_unzip')
- dest_dir = os.path.join('reference_builds', 'reference_builds',
- BuildUpdater._PLATFORM_DEST_MAP[platform])
- self._ClearDir(dest_dir)
- for root, _, dl_files in os.walk(os.path.join('dl', platform)):
- for dl_file in dl_files:
- dl_file = os.path.join(root, dl_file)
- if not self._UnzipFile(dl_file, dest_dir):
- logging.info('Copying %s to %s', dl_file, dest_dir)
- shutil.copy(dl_file, dest_dir)
-
- def _SvnAddAndRemove(self):
- svn_dir = os.path.join('reference_builds', 'reference_builds')
- # List all changes without ignoring any files.
- stat = BuildUpdater._GetCmdStatusAndOutput(['svn', 'stat', '--no-ignore'],
- svn_dir)[1]
- for line in stat.splitlines():
- action, filename = line.split(None, 1)
- # Add new and ignored files.
- if action == '?' or action == 'I':
- BuildUpdater._GetCmdStatusAndOutput(
- ['svn', 'add', filename], svn_dir)
- elif action == '!':
- BuildUpdater._GetCmdStatusAndOutput(
- ['svn', 'delete', filename], svn_dir)
- filepath = os.path.join(svn_dir, filename)
- if not os.path.isdir(filepath) and os.access(filepath, os.X_OK):
- BuildUpdater._GetCmdStatusAndOutput(
- ['svn', 'propset', 'svn:executable', 'true', filename], svn_dir)
-
- def DownloadAndUpdateBuilds(self):
- self._DownloadBuilds()
- self._FetchSvnRepos()
- self._ExtractBuilds()
- self._SvnAddAndRemove()
-
-
-def ParseOptions(argv):
- parser = optparse.OptionParser()
- usage = 'usage: %prog <options>'
- parser.set_usage(usage)
- parser.add_option('-b', dest='build_number',
- help='Chrome official build number to pick up.')
- parser.add_option('--gs', dest='use_gs', action='store_true', default=False,
- help='Use Google storage for official builds. Used with -b '
- 'option. Default is false (i.e. use internal storage.')
- parser.add_option('-p', dest='platforms',
- default='Win,Mac,Linux,Linux_x64',
- help='Comma separated list of platforms to download '
- '(as defined by the chromium builders).')
- parser.add_option('-r', dest='revision',
- help='Revision to pick up.')
-
- (options, _) = parser.parse_args(argv)
- if not options.revision and not options.build_number:
- logging.critical('Must specify either -r or -b.\n')
- sys.exit(1)
- if options.revision and options.build_number:
- logging.critical('Must specify either -r or -b but not both.\n')
- sys.exit(1)
- if options.use_gs and not options.build_number:
- logging.critical('Can only use --gs with -b option.\n')
- sys.exit(1)
-
- return options
-
-
-def main(argv):
- logging.getLogger().setLevel(logging.DEBUG)
- options = ParseOptions(argv)
- b = BuildUpdater(options)
- b.DownloadAndUpdateBuilds()
- logging.info('Successfully updated reference builds. Move to '
- 'reference_builds/reference_builds and make a change with gcl.')
-
-if __name__ == '__main__':
- sys.exit(main(sys.argv))
diff --git a/chromium/tools/usb_ids/usb_ids.py b/chromium/tools/usb_ids/usb_ids.py
deleted file mode 100644
index e07bd4ca6f7..00000000000
--- a/chromium/tools/usb_ids/usb_ids.py
+++ /dev/null
@@ -1,110 +0,0 @@
-# Copyright (c) 2012 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.
-
-import itertools
-import optparse
-import re
-
-VENDOR_PATTERN = re.compile("^(?P<id>[0-9a-fA-F]{4})\s+(?P<name>.+)$")
-PRODUCT_PATTERN = re.compile("^\t(?P<id>[0-9a-fA-F]{4})\s+(?P<name>.+)$")
-
-def EscapeName(name):
- name = name.replace("\\", "\\\\")
- name = name.replace("\"", "\\\"")
- name = name.replace("?", "\?")
- return name
-
-def ParseTable(input_path):
- input_file = open(input_path, "r")
- input = input_file.read().split("\n")
- input_file.close()
-
- table = {}
- vendor = None
-
- for line in input:
- vendor_match = VENDOR_PATTERN.match(line)
- if vendor_match:
- if vendor:
- table[vendor["id"]] = vendor
- vendor = {}
- vendor["id"] = int(vendor_match.group("id"), 16)
- vendor["name"] = vendor_match.group("name")
- vendor["products"] = []
- continue
-
- product_match = PRODUCT_PATTERN.match(line)
- if product_match:
- if not vendor:
- raise Exception("Product seems to appear before vendor.")
- product = {}
- product["id"] = int(product_match.group("id"), 16)
- product["name"] = product_match.group("name")
- vendor["products"].append(product)
-
- return table
-
-def GenerateDeviceDefinitions(table):
- output = ""
-
- for vendor_id in sorted(table.keys()):
- vendor = table[vendor_id]
- if len(vendor["products"]) == 0:
- continue
-
- output += "static const UsbProduct vendor_%.4x_products[] = {\n" % \
- vendor["id"]
- for product in vendor["products"]:
- output += " {0x%.4x, \"%s\"},\n" % (product["id"],
- EscapeName(product["name"]))
- output += "};\n"
-
- return output
-
-def GenerateVendorDefinitions(table):
- output = "const size_t UsbIds::vendor_size_ = %d;\n" % len(table.keys())
- output += "const UsbVendor UsbIds::vendors_[] = {\n"
-
- for vendor_id in sorted(table.keys()):
- vendor = table[vendor_id]
-
- product_table = "NULL"
- if len(vendor["products"]) != 0:
- product_table = "vendor_%.4x_products" % (vendor["id"])
- output += " {0x%.4x, \"%s\", %d, %s},\n" % (vendor["id"],
- EscapeName(vendor["name"]), len(vendor["products"]), product_table)
-
- output += "};\n"
- return output
-
-if __name__ == "__main__":
- parser = optparse.OptionParser(
- description="Generates a C++ USB ID lookup table.")
- parser.add_option("-i", "--input", help="Path to usb.ids")
- parser.add_option("-o", "--output", help="Output file path")
-
- (opts, args) = parser.parse_args()
- table = ParseTable(opts.input)
-
- output = """// Generated from %s
-#ifndef GENERATED_USB_IDS_H_
-#define GENERATED_USB_IDS_H_
-
-#include "device/usb/usb_ids.h"
-
-namespace device {
-
-""" % (opts.input)
- output += GenerateDeviceDefinitions(table)
- output += GenerateVendorDefinitions(table)
- output += """
-
-} // namespace device
-
-#endif // GENERATED_USB_IDS_H_
-"""
-
- output_file = open(opts.output, "w+")
- output_file.write(output)
- output_file.close()
diff --git a/chromium/tools/valgrind/OWNERS b/chromium/tools/valgrind/OWNERS
deleted file mode 100644
index 73ce47c70ef..00000000000
--- a/chromium/tools/valgrind/OWNERS
+++ /dev/null
@@ -1,5 +0,0 @@
-set noparent
-bruening@chromium.org
-glider@chromium.org
-thestig@chromium.org
-timurrrr@chromium.org
diff --git a/chromium/tools/valgrind/asan/asan_symbolize.py b/chromium/tools/valgrind/asan/asan_symbolize.py
deleted file mode 100755
index 06ff5925096..00000000000
--- a/chromium/tools/valgrind/asan/asan_symbolize.py
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2012 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.
-
-from third_party import asan_symbolize
-
-import os
-import re
-import sys
-
-def fix_filename(file_name):
- for path_to_cut in sys.argv[1:]:
- file_name = re.sub(".*" + path_to_cut, "", file_name)
- file_name = re.sub(".*asan_[a-z_]*.cc:[0-9]*", "_asan_rtl_", file_name)
- file_name = re.sub(".*crtstuff.c:0", "???:0", file_name)
- return file_name
-
-class Unbuffered(object):
- """Disable buffering on a file object."""
- def __init__(self, stream):
- self.stream = stream
-
- def write(self, data):
- self.stream.write(data)
- if '\n' in data:
- self.stream.flush()
-
- def __getattr__(self, attr):
- return getattr(self.stream, attr)
-
-
-def disable_buffering():
- """Makes this process and child processes stdout unbuffered."""
- if not os.environ.get('PYTHONUNBUFFERED'):
- # Since sys.stdout is a C++ object, it's impossible to do
- # sys.stdout.write = lambda...
- sys.stdout = Unbuffered(sys.stdout)
- os.environ['PYTHONUNBUFFERED'] = 'x'
-
-
-def main():
- disable_buffering()
- loop = asan_symbolize.SymbolizationLoop(binary_name_filter=fix_filename)
- loop.process_stdin()
-
-if __name__ == '__main__':
- main()
diff --git a/chromium/tools/valgrind/asan/asan_wrapper.sh b/chromium/tools/valgrind/asan/asan_wrapper.sh
deleted file mode 100755
index 4e34fed5a09..00000000000
--- a/chromium/tools/valgrind/asan/asan_wrapper.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/bash
-
-# Copyright (c) 2012 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.
-
-# A wrapper that runs the program and filters the output through
-# asan_symbolize.py and c++filt
-#
-# TODO(glider): this should be removed once EmbeddedTool in valgrind_test.py
-# starts supporting pipes.
-
-export THISDIR=`dirname $0`
-"$@" 2>&1 |
- $THISDIR/asan_symbolize.py |
- c++filt
diff --git a/chromium/tools/valgrind/asan/third_party/README.chromium b/chromium/tools/valgrind/asan/third_party/README.chromium
deleted file mode 100644
index f9e6c9be5bc..00000000000
--- a/chromium/tools/valgrind/asan/third_party/README.chromium
+++ /dev/null
@@ -1,6 +0,0 @@
-Name: asan_symbolize.py
-License: University of Illinois Open Source License.
-Version: 183006
-URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/scripts/asan_symbolize.py?view=co&content-type=text%2Fplain
-
-asan_symbolize.py is a verbatim copy of asan_symbolize.py in the LLVM trunk.
diff --git a/chromium/tools/valgrind/asan/third_party/__init__.py b/chromium/tools/valgrind/asan/third_party/__init__.py
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/chromium/tools/valgrind/asan/third_party/__init__.py
+++ /dev/null
diff --git a/chromium/tools/valgrind/asan/third_party/asan_symbolize.py b/chromium/tools/valgrind/asan/third_party/asan_symbolize.py
deleted file mode 100755
index 207928f6eae..00000000000
--- a/chromium/tools/valgrind/asan/third_party/asan_symbolize.py
+++ /dev/null
@@ -1,365 +0,0 @@
-#!/usr/bin/env python
-#===- lib/asan/scripts/asan_symbolize.py -----------------------------------===#
-#
-# The LLVM Compiler Infrastructure
-#
-# This file is distributed under the University of Illinois Open Source
-# License. See LICENSE.TXT for details.
-#
-#===------------------------------------------------------------------------===#
-import bisect
-import getopt
-import os
-import re
-import subprocess
-import sys
-
-llvm_symbolizer = None
-symbolizers = {}
-DEBUG = False
-demangle = False;
-
-
-# FIXME: merge the code that calls fix_filename().
-def fix_filename(file_name):
- for path_to_cut in sys.argv[1:]:
- file_name = re.sub('.*' + path_to_cut, '', file_name)
- file_name = re.sub('.*asan_[a-z_]*.cc:[0-9]*', '_asan_rtl_', file_name)
- file_name = re.sub('.*crtstuff.c:0', '???:0', file_name)
- return file_name
-
-
-class Symbolizer(object):
- def __init__(self):
- pass
-
- def symbolize(self, addr, binary, offset):
- """Symbolize the given address (pair of binary and offset).
-
- Overriden in subclasses.
- Args:
- addr: virtual address of an instruction.
- binary: path to executable/shared object containing this instruction.
- offset: instruction offset in the @binary.
- Returns:
- list of strings (one string for each inlined frame) describing
- the code locations for this instruction (that is, function name, file
- name, line and column numbers).
- """
- return None
-
-
-class LLVMSymbolizer(Symbolizer):
- def __init__(self, symbolizer_path):
- super(LLVMSymbolizer, self).__init__()
- self.symbolizer_path = symbolizer_path
- self.pipe = self.open_llvm_symbolizer()
-
- def open_llvm_symbolizer(self):
- if not os.path.exists(self.symbolizer_path):
- return None
- cmd = [self.symbolizer_path,
- '--use-symbol-table=true',
- '--demangle=%s' % demangle,
- '--functions=true',
- '--inlining=true']
- if DEBUG:
- print ' '.join(cmd)
- return subprocess.Popen(cmd, stdin=subprocess.PIPE,
- stdout=subprocess.PIPE)
-
- def symbolize(self, addr, binary, offset):
- """Overrides Symbolizer.symbolize."""
- if not self.pipe:
- return None
- result = []
- try:
- symbolizer_input = '%s %s' % (binary, offset)
- if DEBUG:
- print symbolizer_input
- print >> self.pipe.stdin, symbolizer_input
- while True:
- function_name = self.pipe.stdout.readline().rstrip()
- if not function_name:
- break
- file_name = self.pipe.stdout.readline().rstrip()
- file_name = fix_filename(file_name)
- if (not function_name.startswith('??') and
- not file_name.startswith('??')):
- # Append only valid frames.
- result.append('%s in %s %s' % (addr, function_name,
- file_name))
- except Exception:
- result = []
- if not result:
- result = None
- return result
-
-
-def LLVMSymbolizerFactory(system):
- symbolizer_path = os.getenv('LLVM_SYMBOLIZER_PATH')
- if not symbolizer_path:
- # Assume llvm-symbolizer is in PATH.
- symbolizer_path = 'llvm-symbolizer'
- return LLVMSymbolizer(symbolizer_path)
-
-
-class Addr2LineSymbolizer(Symbolizer):
- def __init__(self, binary):
- super(Addr2LineSymbolizer, self).__init__()
- self.binary = binary
- self.pipe = self.open_addr2line()
-
- def open_addr2line(self):
- cmd = ['addr2line', '-f']
- if demangle:
- cmd += ['--demangle']
- cmd += ['-e', self.binary]
- if DEBUG:
- print ' '.join(cmd)
- return subprocess.Popen(cmd,
- stdin=subprocess.PIPE, stdout=subprocess.PIPE)
-
- def symbolize(self, addr, binary, offset):
- """Overrides Symbolizer.symbolize."""
- if self.binary != binary:
- return None
- try:
- print >> self.pipe.stdin, offset
- function_name = self.pipe.stdout.readline().rstrip()
- file_name = self.pipe.stdout.readline().rstrip()
- except Exception:
- function_name = ''
- file_name = ''
- file_name = fix_filename(file_name)
- return ['%s in %s %s' % (addr, function_name, file_name)]
-
-
-class DarwinSymbolizer(Symbolizer):
- def __init__(self, addr, binary):
- super(DarwinSymbolizer, self).__init__()
- self.binary = binary
- # Guess which arch we're running. 10 = len('0x') + 8 hex digits.
- if len(addr) > 10:
- self.arch = 'x86_64'
- else:
- self.arch = 'i386'
- self.pipe = None
-
- def write_addr_to_pipe(self, offset):
- print >> self.pipe.stdin, '0x%x' % int(offset, 16)
-
- def open_atos(self):
- if DEBUG:
- print 'atos -o %s -arch %s' % (self.binary, self.arch)
- cmdline = ['atos', '-o', self.binary, '-arch', self.arch]
- self.pipe = subprocess.Popen(cmdline,
- stdin=subprocess.PIPE,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
-
- def symbolize(self, addr, binary, offset):
- """Overrides Symbolizer.symbolize."""
- if self.binary != binary:
- return None
- self.open_atos()
- self.write_addr_to_pipe(offset)
- self.pipe.stdin.close()
- atos_line = self.pipe.stdout.readline().rstrip()
- # A well-formed atos response looks like this:
- # foo(type1, type2) (in object.name) (filename.cc:80)
- match = re.match('^(.*) \(in (.*)\) \((.*:\d*)\)$', atos_line)
- if DEBUG:
- print 'atos_line: ', atos_line
- if match:
- function_name = match.group(1)
- function_name = re.sub('\(.*?\)', '', function_name)
- file_name = fix_filename(match.group(3))
- return ['%s in %s %s' % (addr, function_name, file_name)]
- else:
- return ['%s in %s' % (addr, atos_line)]
-
-
-# Chain several symbolizers so that if one symbolizer fails, we fall back
-# to the next symbolizer in chain.
-class ChainSymbolizer(Symbolizer):
- def __init__(self, symbolizer_list):
- super(ChainSymbolizer, self).__init__()
- self.symbolizer_list = symbolizer_list
-
- def symbolize(self, addr, binary, offset):
- """Overrides Symbolizer.symbolize."""
- for symbolizer in self.symbolizer_list:
- if symbolizer:
- result = symbolizer.symbolize(addr, binary, offset)
- if result:
- return result
- return None
-
- def append_symbolizer(self, symbolizer):
- self.symbolizer_list.append(symbolizer)
-
-
-def BreakpadSymbolizerFactory(binary):
- suffix = os.getenv('BREAKPAD_SUFFIX')
- if suffix:
- filename = binary + suffix
- if os.access(filename, os.F_OK):
- return BreakpadSymbolizer(filename)
- return None
-
-
-def SystemSymbolizerFactory(system, addr, binary):
- if system == 'Darwin':
- return DarwinSymbolizer(addr, binary)
- elif system == 'Linux':
- return Addr2LineSymbolizer(binary)
-
-
-class BreakpadSymbolizer(Symbolizer):
- def __init__(self, filename):
- super(BreakpadSymbolizer, self).__init__()
- self.filename = filename
- lines = file(filename).readlines()
- self.files = []
- self.symbols = {}
- self.address_list = []
- self.addresses = {}
- # MODULE mac x86_64 A7001116478B33F18FF9BEDE9F615F190 t
- fragments = lines[0].rstrip().split()
- self.arch = fragments[2]
- self.debug_id = fragments[3]
- self.binary = ' '.join(fragments[4:])
- self.parse_lines(lines[1:])
-
- def parse_lines(self, lines):
- cur_function_addr = ''
- for line in lines:
- fragments = line.split()
- if fragments[0] == 'FILE':
- assert int(fragments[1]) == len(self.files)
- self.files.append(' '.join(fragments[2:]))
- elif fragments[0] == 'PUBLIC':
- self.symbols[int(fragments[1], 16)] = ' '.join(fragments[3:])
- elif fragments[0] in ['CFI', 'STACK']:
- pass
- elif fragments[0] == 'FUNC':
- cur_function_addr = int(fragments[1], 16)
- if not cur_function_addr in self.symbols.keys():
- self.symbols[cur_function_addr] = ' '.join(fragments[4:])
- else:
- # Line starting with an address.
- addr = int(fragments[0], 16)
- self.address_list.append(addr)
- # Tuple of symbol address, size, line, file number.
- self.addresses[addr] = (cur_function_addr,
- int(fragments[1], 16),
- int(fragments[2]),
- int(fragments[3]))
- self.address_list.sort()
-
- def get_sym_file_line(self, addr):
- key = None
- if addr in self.addresses.keys():
- key = addr
- else:
- index = bisect.bisect_left(self.address_list, addr)
- if index == 0:
- return None
- else:
- key = self.address_list[index - 1]
- sym_id, size, line_no, file_no = self.addresses[key]
- symbol = self.symbols[sym_id]
- filename = self.files[file_no]
- if addr < key + size:
- return symbol, filename, line_no
- else:
- return None
-
- def symbolize(self, addr, binary, offset):
- if self.binary != binary:
- return None
- res = self.get_sym_file_line(int(offset, 16))
- if res:
- function_name, file_name, line_no = res
- result = ['%s in %s %s:%d' % (
- addr, function_name, file_name, line_no)]
- print result
- return result
- else:
- return None
-
-
-class SymbolizationLoop(object):
- def __init__(self, binary_name_filter=None):
- # Used by clients who may want to supply a different binary name.
- # E.g. in Chrome several binaries may share a single .dSYM.
- self.binary_name_filter = binary_name_filter
- self.system = os.uname()[0]
- if self.system in ['Linux', 'Darwin']:
- self.llvm_symbolizer = LLVMSymbolizerFactory(self.system)
- else:
- raise Exception('Unknown system')
-
- def symbolize_address(self, addr, binary, offset):
- # Use the chain of symbolizers:
- # Breakpad symbolizer -> LLVM symbolizer -> addr2line/atos
- # (fall back to next symbolizer if the previous one fails).
- if not binary in symbolizers:
- symbolizers[binary] = ChainSymbolizer(
- [BreakpadSymbolizerFactory(binary), self.llvm_symbolizer])
- result = symbolizers[binary].symbolize(addr, binary, offset)
- if result is None:
- # Initialize system symbolizer only if other symbolizers failed.
- symbolizers[binary].append_symbolizer(
- SystemSymbolizerFactory(self.system, addr, binary))
- result = symbolizers[binary].symbolize(addr, binary, offset)
- # The system symbolizer must produce some result.
- assert result
- return result
-
- def print_symbolized_lines(self, symbolized_lines):
- if not symbolized_lines:
- print self.current_line
- else:
- for symbolized_frame in symbolized_lines:
- print ' #' + str(self.frame_no) + ' ' + symbolized_frame.rstrip()
- self.frame_no += 1
-
- def process_stdin(self):
- self.frame_no = 0
- while True:
- line = sys.stdin.readline()
- if not line:
- break
- self.current_line = line.rstrip()
- #0 0x7f6e35cf2e45 (/blah/foo.so+0x11fe45)
- stack_trace_line_format = (
- '^( *#([0-9]+) *)(0x[0-9a-f]+) *\((.*)\+(0x[0-9a-f]+)\)')
- match = re.match(stack_trace_line_format, line)
- if not match:
- print self.current_line
- continue
- if DEBUG:
- print line
- _, frameno_str, addr, binary, offset = match.groups()
- if frameno_str == '0':
- # Assume that frame #0 is the first frame of new stack trace.
- self.frame_no = 0
- original_binary = binary
- if self.binary_name_filter:
- binary = self.binary_name_filter(binary)
- symbolized_line = self.symbolize_address(addr, binary, offset)
- if not symbolized_line:
- if original_binary != binary:
- symbolized_line = self.symbolize_address(addr, binary, offset)
- self.print_symbolized_lines(symbolized_line)
-
-
-if __name__ == '__main__':
- opts, args = getopt.getopt(sys.argv[1:], "d", ["demangle"])
- for o, a in opts:
- if o in ("-d", "--demangle"):
- demangle = True;
- loop = SymbolizationLoop()
- loop.process_stdin()
diff --git a/chromium/tools/valgrind/browser_wrapper_win.py b/chromium/tools/valgrind/browser_wrapper_win.py
deleted file mode 100644
index b855e80d6d9..00000000000
--- a/chromium/tools/valgrind/browser_wrapper_win.py
+++ /dev/null
@@ -1,49 +0,0 @@
-# Copyright (c) 2011 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.
-
-import glob
-import os
-import re
-import sys
-import subprocess
-
-# TODO(timurrrr): we may use it on POSIX too to avoid code duplication once we
-# support layout_tests, remove Dr. Memory specific code and verify it works
-# on a "clean" Mac.
-
-testcase_name = None
-for arg in sys.argv:
- m = re.match("\-\-test\-name=(.*)", arg)
- if m:
- assert testcase_name is None
- testcase_name = m.groups()[0]
-
-# arg #0 is the path to this python script
-cmd_to_run = sys.argv[1:]
-
-# TODO(timurrrr): this is Dr. Memory-specific
-# Usually, we pass "-logdir" "foo\bar\spam path" args to Dr. Memory.
-# To group reports per UI test, we want to put the reports for each test into a
-# separate directory. This code can be simplified when we have
-# http://code.google.com/p/drmemory/issues/detail?id=684 fixed.
-logdir_idx = cmd_to_run.index("-logdir")
-old_logdir = cmd_to_run[logdir_idx + 1]
-
-wrapper_pid = str(os.getpid())
-
-# On Windows, there is a chance of PID collision. We avoid it by appending the
-# number of entries in the logdir at the end of wrapper_pid.
-# This number is monotonic and we can't have two simultaneously running wrappers
-# with the same PID.
-wrapper_pid += "_%d" % len(glob.glob(old_logdir + "\\*"))
-
-cmd_to_run[logdir_idx + 1] += "\\testcase.%s.logs" % wrapper_pid
-os.makedirs(cmd_to_run[logdir_idx + 1])
-
-if testcase_name:
- f = open(old_logdir + "\\testcase.%s.name" % wrapper_pid, "w")
- print >>f, testcase_name
- f.close()
-
-exit(subprocess.call(cmd_to_run))
diff --git a/chromium/tools/valgrind/chrome_tests.bat b/chromium/tools/valgrind/chrome_tests.bat
deleted file mode 100755
index 138bec7e93d..00000000000
--- a/chromium/tools/valgrind/chrome_tests.bat
+++ /dev/null
@@ -1,70 +0,0 @@
-@echo off
-:: Copyright (c) 2011 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.
-
-:: TODO(timurrrr): batch files 'export' all the variables to the parent shell
-set THISDIR=%~dp0
-set TOOL_NAME="unknown"
-
-:: Get the tool name and put it into TOOL_NAME {{{1
-:: NB: SHIFT command doesn't modify %*
-:PARSE_ARGS_LOOP
- if %1 == () GOTO:TOOLNAME_NOT_FOUND
- if %1 == --tool GOTO:TOOLNAME_FOUND
- SHIFT
- goto :PARSE_ARGS_LOOP
-
-:TOOLNAME_NOT_FOUND
-echo "Please specify a tool (tsan or drmemory) by using --tool flag"
-exit /B 1
-
-:TOOLNAME_FOUND
-SHIFT
-set TOOL_NAME=%1
-:: }}}
-if "%TOOL_NAME%" == "drmemory" GOTO :SETUP_DRMEMORY
-if "%TOOL_NAME%" == "drmemory_light" GOTO :SETUP_DRMEMORY
-if "%TOOL_NAME%" == "drmemory_full" GOTO :SETUP_DRMEMORY
-if "%TOOL_NAME%" == "drmemory_pattern" GOTO :SETUP_DRMEMORY
-if "%TOOL_NAME%" == "tsan" GOTO :SETUP_TSAN
-echo "Unknown tool: `%TOOL_NAME%`! Only tsan and drmemory are supported right now"
-exit /B 1
-
-:SETUP_DRMEMORY
-if NOT "%DRMEMORY_COMMAND%"=="" GOTO :RUN_TESTS
-:: Set up DRMEMORY_COMMAND to invoke Dr. Memory {{{1
-set DRMEMORY_PATH=%THISDIR%..\..\third_party\drmemory
-set DRMEMORY_SFX=%DRMEMORY_PATH%\drmemory-windows-sfx.exe
-if EXIST %DRMEMORY_SFX% GOTO DRMEMORY_BINARY_OK
-echo "Can't find Dr. Memory executables."
-echo "See http://www.chromium.org/developers/how-tos/using-valgrind/dr-memory"
-echo "for the instructions on how to get them."
-exit /B 1
-
-:DRMEMORY_BINARY_OK
-%DRMEMORY_SFX% -o%DRMEMORY_PATH%\unpacked -y
-set DRMEMORY_COMMAND=%DRMEMORY_PATH%\unpacked\bin\drmemory.exe
-:: }}}
-goto :RUN_TESTS
-
-:SETUP_TSAN
-:: Set up PIN_COMMAND to invoke TSan {{{1
-set TSAN_PATH=%THISDIR%..\..\third_party\tsan
-set TSAN_SFX=%TSAN_PATH%\tsan-x86-windows-sfx.exe
-if EXIST %TSAN_SFX% GOTO TSAN_BINARY_OK
-echo "Can't find ThreadSanitizer executables."
-echo "See http://www.chromium.org/developers/how-tos/using-valgrind/threadsanitizer/threadsanitizer-on-windows"
-echo "for the instructions on how to get them."
-exit /B 1
-
-:TSAN_BINARY_OK
-%TSAN_SFX% -o%TSAN_PATH%\unpacked -y
-set PIN_COMMAND=%TSAN_PATH%\unpacked\tsan-x86-windows\tsan.bat
-:: }}}
-goto :RUN_TESTS
-
-:RUN_TESTS
-set PYTHONPATH=%THISDIR%../python/google
-set RUNNING_ON_VALGRIND=yes
-python %THISDIR%/chrome_tests.py %*
diff --git a/chromium/tools/valgrind/chrome_tests.py b/chromium/tools/valgrind/chrome_tests.py
deleted file mode 100755
index d4aa919e598..00000000000
--- a/chromium/tools/valgrind/chrome_tests.py
+++ /dev/null
@@ -1,652 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-''' Runs various chrome tests through valgrind_test.py.'''
-
-import glob
-import logging
-import multiprocessing
-import optparse
-import os
-import stat
-import sys
-
-import logging_utils
-import path_utils
-
-import common
-import valgrind_test
-
-class TestNotFound(Exception): pass
-
-class MultipleGTestFiltersSpecified(Exception): pass
-
-class BuildDirNotFound(Exception): pass
-
-class BuildDirAmbiguous(Exception): pass
-
-class ChromeTests:
- SLOW_TOOLS = ["memcheck", "tsan", "tsan_rv", "drmemory"]
- LAYOUT_TESTS_DEFAULT_CHUNK_SIZE = 500
-
- def __init__(self, options, args, test):
- if ':' in test:
- (self._test, self._gtest_filter) = test.split(':', 1)
- else:
- self._test = test
- self._gtest_filter = options.gtest_filter
-
- if self._test not in self._test_list:
- raise TestNotFound("Unknown test: %s" % test)
-
- if options.gtest_filter and options.gtest_filter != self._gtest_filter:
- raise MultipleGTestFiltersSpecified("Can not specify both --gtest_filter "
- "and --test %s" % test)
-
- self._options = options
- self._args = args
-
- script_dir = path_utils.ScriptDir()
- # Compute the top of the tree (the "source dir") from the script dir (where
- # this script lives). We assume that the script dir is in tools/valgrind/
- # relative to the top of the tree.
- self._source_dir = os.path.dirname(os.path.dirname(script_dir))
- # since this path is used for string matching, make sure it's always
- # an absolute Unix-style path
- self._source_dir = os.path.abspath(self._source_dir).replace('\\', '/')
- valgrind_test_script = os.path.join(script_dir, "valgrind_test.py")
- self._command_preamble = ["--source-dir=%s" % (self._source_dir)]
-
- if not self._options.build_dir:
- dirs = [
- os.path.join(self._source_dir, "xcodebuild", "Debug"),
- os.path.join(self._source_dir, "out", "Debug"),
- os.path.join(self._source_dir, "build", "Debug"),
- ]
- build_dir = [d for d in dirs if os.path.isdir(d)]
- if len(build_dir) > 1:
- raise BuildDirAmbiguous("Found more than one suitable build dir:\n"
- "%s\nPlease specify just one "
- "using --build-dir" % ", ".join(build_dir))
- elif build_dir:
- self._options.build_dir = build_dir[0]
- else:
- self._options.build_dir = None
-
- if self._options.build_dir:
- build_dir = os.path.abspath(self._options.build_dir)
- self._command_preamble += ["--build-dir=%s" % (self._options.build_dir)]
-
- def _EnsureBuildDirFound(self):
- if not self._options.build_dir:
- raise BuildDirNotFound("Oops, couldn't find a build dir, please "
- "specify it manually using --build-dir")
-
- def _DefaultCommand(self, tool, exe=None, valgrind_test_args=None):
- '''Generates the default command array that most tests will use.'''
- if exe and common.IsWindows():
- exe += '.exe'
-
- cmd = list(self._command_preamble)
-
- # Find all suppressions matching the following pattern:
- # tools/valgrind/TOOL/suppressions[_PLATFORM].txt
- # and list them with --suppressions= prefix.
- script_dir = path_utils.ScriptDir()
- tool_name = tool.ToolName();
- suppression_file = os.path.join(script_dir, tool_name, "suppressions.txt")
- if os.path.exists(suppression_file):
- cmd.append("--suppressions=%s" % suppression_file)
- # Platform-specific suppression
- for platform in common.PlatformNames():
- platform_suppression_file = \
- os.path.join(script_dir, tool_name, 'suppressions_%s.txt' % platform)
- if os.path.exists(platform_suppression_file):
- cmd.append("--suppressions=%s" % platform_suppression_file)
-
- if self._options.valgrind_tool_flags:
- cmd += self._options.valgrind_tool_flags.split(" ")
- if self._options.keep_logs:
- cmd += ["--keep_logs"]
- if valgrind_test_args != None:
- for arg in valgrind_test_args:
- cmd.append(arg)
- if exe:
- self._EnsureBuildDirFound()
- cmd.append(os.path.join(self._options.build_dir, exe))
- # Valgrind runs tests slowly, so slow tests hurt more; show elapased time
- # so we can find the slowpokes.
- cmd.append("--gtest_print_time")
- # Built-in test launcher for gtest-based executables runs tests using
- # multiple process by default. Force the single-process mode back.
- cmd.append("--single-process-tests")
- if self._options.gtest_repeat:
- cmd.append("--gtest_repeat=%s" % self._options.gtest_repeat)
- if self._options.gtest_shuffle:
- cmd.append("--gtest_shuffle")
- if self._options.brave_new_test_launcher:
- cmd.append("--brave-new-test-launcher")
- if self._options.test_launcher_bot_mode:
- cmd.append("--test-launcher-bot-mode")
- return cmd
-
- def Run(self):
- ''' Runs the test specified by command-line argument --test '''
- logging.info("running test %s" % (self._test))
- return self._test_list[self._test](self)
-
- def _AppendGtestFilter(self, tool, name, cmd):
- '''Append an appropriate --gtest_filter flag to the googletest binary
- invocation.
- If the user passed his own filter mentioning only one test, just use it.
- Othewise, filter out tests listed in the appropriate gtest_exclude files.
- '''
- if (self._gtest_filter and
- ":" not in self._gtest_filter and
- "?" not in self._gtest_filter and
- "*" not in self._gtest_filter):
- cmd.append("--gtest_filter=%s" % self._gtest_filter)
- return
-
- filters = []
- gtest_files_dir = os.path.join(path_utils.ScriptDir(), "gtest_exclude")
-
- gtest_filter_files = [
- os.path.join(gtest_files_dir, name + ".gtest-%s.txt" % tool.ToolName())]
- # Use ".gtest.txt" files only for slow tools, as they now contain
- # Valgrind- and Dr.Memory-specific filters.
- # TODO(glider): rename the files to ".gtest_slow.txt"
- if tool.ToolName() in ChromeTests.SLOW_TOOLS:
- gtest_filter_files += [os.path.join(gtest_files_dir, name + ".gtest.txt")]
- for platform_suffix in common.PlatformNames():
- gtest_filter_files += [
- os.path.join(gtest_files_dir, name + ".gtest_%s.txt" % platform_suffix),
- os.path.join(gtest_files_dir, name + ".gtest-%s_%s.txt" % \
- (tool.ToolName(), platform_suffix))]
- logging.info("Reading gtest exclude filter files:")
- for filename in gtest_filter_files:
- # strip the leading absolute path (may be very long on the bot)
- # and the following / or \.
- readable_filename = filename.replace("\\", "/") # '\' on Windows
- readable_filename = readable_filename.replace(self._source_dir, "")[1:]
- if not os.path.exists(filename):
- logging.info(" \"%s\" - not found" % readable_filename)
- continue
- logging.info(" \"%s\" - OK" % readable_filename)
- f = open(filename, 'r')
- for line in f.readlines():
- if line.startswith("#") or line.startswith("//") or line.isspace():
- continue
- line = line.rstrip()
- test_prefixes = ["FLAKY", "FAILS"]
- for p in test_prefixes:
- # Strip prefixes from the test names.
- line = line.replace(".%s_" % p, ".")
- # Exclude the original test name.
- filters.append(line)
- if line[-2:] != ".*":
- # List all possible prefixes if line doesn't end with ".*".
- for p in test_prefixes:
- filters.append(line.replace(".", ".%s_" % p))
- # Get rid of duplicates.
- filters = set(filters)
- gtest_filter = self._gtest_filter
- if len(filters):
- if gtest_filter:
- gtest_filter += ":"
- if gtest_filter.find("-") < 0:
- gtest_filter += "-"
- else:
- gtest_filter = "-"
- gtest_filter += ":".join(filters)
- if gtest_filter:
- cmd.append("--gtest_filter=%s" % gtest_filter)
-
- @staticmethod
- def ShowTests():
- test_to_names = {}
- for name, test_function in ChromeTests._test_list.iteritems():
- test_to_names.setdefault(test_function, []).append(name)
-
- name_to_aliases = {}
- for names in test_to_names.itervalues():
- names.sort(key=lambda name: len(name))
- name_to_aliases[names[0]] = names[1:]
-
- print
- print "Available tests:"
- print "----------------"
- for name, aliases in sorted(name_to_aliases.iteritems()):
- if aliases:
- print " {} (aka {})".format(name, ', '.join(aliases))
- else:
- print " {}".format(name)
-
- def SetupLdPath(self, requires_build_dir):
- if requires_build_dir:
- self._EnsureBuildDirFound()
- elif not self._options.build_dir:
- return
-
- # Append build_dir to LD_LIBRARY_PATH so external libraries can be loaded.
- if (os.getenv("LD_LIBRARY_PATH")):
- os.putenv("LD_LIBRARY_PATH", "%s:%s" % (os.getenv("LD_LIBRARY_PATH"),
- self._options.build_dir))
- else:
- os.putenv("LD_LIBRARY_PATH", self._options.build_dir)
-
- def SimpleTest(self, module, name, valgrind_test_args=None, cmd_args=None):
- tool = valgrind_test.CreateTool(self._options.valgrind_tool)
- cmd = self._DefaultCommand(tool, name, valgrind_test_args)
- self._AppendGtestFilter(tool, name, cmd)
- cmd.extend(['--test-tiny-timeout=1000'])
- if cmd_args:
- cmd.extend(cmd_args)
-
- self.SetupLdPath(True)
- return tool.Run(cmd, module)
-
- def RunCmdLine(self):
- tool = valgrind_test.CreateTool(self._options.valgrind_tool)
- cmd = self._DefaultCommand(tool, None, self._args)
- self.SetupLdPath(False)
- return tool.Run(cmd, None)
-
- def TestAppList(self):
- return self.SimpleTest("app_list", "app_list_unittests")
-
- def TestAsh(self):
- return self.SimpleTest("ash", "ash_unittests")
-
- def TestAura(self):
- return self.SimpleTest("aura", "aura_unittests")
-
- def TestBase(self):
- return self.SimpleTest("base", "base_unittests")
-
- def TestChromeOS(self):
- return self.SimpleTest("chromeos", "chromeos_unittests")
-
- def TestComponents(self):
- return self.SimpleTest("components", "components_unittests")
-
- def TestCompositor(self):
- return self.SimpleTest("compositor", "compositor_unittests")
-
- def TestContent(self):
- return self.SimpleTest("content", "content_unittests")
-
- def TestContentBrowser(self):
- return self.SimpleTest("content", "content_browsertests")
-
- def TestCourgette(self):
- return self.SimpleTest("courgette", "courgette_unittests")
-
- def TestCrypto(self):
- return self.SimpleTest("crypto", "crypto_unittests")
-
- def TestDevice(self):
- return self.SimpleTest("device", "device_unittests")
-
- def TestEvents(self):
- return self.SimpleTest("events", "events_unittests")
-
- def TestFFmpeg(self):
- return self.SimpleTest("chrome", "ffmpeg_unittests")
-
- def TestFFmpegRegressions(self):
- return self.SimpleTest("chrome", "ffmpeg_regression_tests")
-
- def TestGPU(self):
- return self.SimpleTest("gpu", "gpu_unittests")
-
- def TestIpc(self):
- return self.SimpleTest("ipc", "ipc_tests",
- valgrind_test_args=["--trace_children"])
-
- def TestJingle(self):
- return self.SimpleTest("chrome", "jingle_unittests")
-
- def TestMedia(self):
- return self.SimpleTest("chrome", "media_unittests")
-
- def TestMessageCenter(self):
- return self.SimpleTest("message_center", "message_center_unittests")
-
- def TestNet(self):
- return self.SimpleTest("net", "net_unittests")
-
- def TestNetPerf(self):
- return self.SimpleTest("net", "net_perftests")
-
- def TestPPAPI(self):
- return self.SimpleTest("chrome", "ppapi_unittests")
-
- def TestPrinting(self):
- return self.SimpleTest("chrome", "printing_unittests")
-
- def TestRemoting(self):
- return self.SimpleTest("chrome", "remoting_unittests",
- cmd_args=[
- "--ui-test-action-timeout=60000",
- "--ui-test-action-max-timeout=150000"])
-
- def TestSql(self):
- return self.SimpleTest("chrome", "sql_unittests")
-
- def TestSync(self):
- return self.SimpleTest("chrome", "sync_unit_tests")
-
- def TestLinuxSandbox(self):
- return self.SimpleTest("sandbox", "sandbox_linux_unittests")
-
- def TestUnit(self):
- # http://crbug.com/51716
- # Disabling all unit tests
- # Problems reappeared after r119922
- if common.IsMac() and (self._options.valgrind_tool == "memcheck"):
- logging.warning("unit_tests are disabled for memcheck on MacOS.")
- return 0;
- return self.SimpleTest("chrome", "unit_tests")
-
- def TestUIUnit(self):
- return self.SimpleTest("chrome", "ui_unittests")
-
- def TestURL(self):
- return self.SimpleTest("chrome", "url_unittests")
-
- def TestViews(self):
- return self.SimpleTest("views", "views_unittests")
-
- # Valgrind timeouts are in seconds.
- UI_VALGRIND_ARGS = ["--timeout=14400", "--trace_children", "--indirect"]
- # UI test timeouts are in milliseconds.
- UI_TEST_ARGS = ["--ui-test-action-timeout=60000",
- "--ui-test-action-max-timeout=150000",
- "--no-sandbox"]
-
- # TODO(thestig) fine-tune these values.
- # Valgrind timeouts are in seconds.
- BROWSER_VALGRIND_ARGS = ["--timeout=50000", "--trace_children", "--indirect"]
- # Browser test timeouts are in milliseconds.
- BROWSER_TEST_ARGS = ["--ui-test-action-timeout=400000",
- "--ui-test-action-max-timeout=800000",
- "--no-sandbox"]
-
- def TestAutomatedUI(self):
- return self.SimpleTest("chrome", "automated_ui_tests",
- valgrind_test_args=self.UI_VALGRIND_ARGS,
- cmd_args=self.UI_TEST_ARGS)
-
- def TestBrowser(self):
- return self.SimpleTest("chrome", "browser_tests",
- valgrind_test_args=self.BROWSER_VALGRIND_ARGS,
- cmd_args=self.BROWSER_TEST_ARGS)
-
- def TestInteractiveUI(self):
- return self.SimpleTest("chrome", "interactive_ui_tests",
- valgrind_test_args=self.UI_VALGRIND_ARGS,
- cmd_args=self.UI_TEST_ARGS)
-
- def TestReliability(self):
- script_dir = path_utils.ScriptDir()
- url_list_file = os.path.join(script_dir, "reliability", "url_list.txt")
- return self.SimpleTest("chrome", "reliability_tests",
- valgrind_test_args=self.UI_VALGRIND_ARGS,
- cmd_args=(self.UI_TEST_ARGS +
- ["--list=%s" % url_list_file]))
-
- def TestSafeBrowsing(self):
- return self.SimpleTest("chrome", "safe_browsing_tests",
- valgrind_test_args=self.UI_VALGRIND_ARGS,
- cmd_args=(["--ui-test-action-max-timeout=450000"]))
-
- def TestSyncIntegration(self):
- return self.SimpleTest("chrome", "sync_integration_tests",
- valgrind_test_args=self.UI_VALGRIND_ARGS,
- cmd_args=(["--ui-test-action-max-timeout=450000"]))
-
- def TestLayoutChunk(self, chunk_num, chunk_size):
- # Run tests [chunk_num*chunk_size .. (chunk_num+1)*chunk_size) from the
- # list of tests. Wrap around to beginning of list at end.
- # If chunk_size is zero, run all tests in the list once.
- # If a text file is given as argument, it is used as the list of tests.
- #
- # Build the ginormous commandline in 'cmd'.
- # It's going to be roughly
- # python valgrind_test.py ... python run_webkit_tests.py ...
- # but we'll use the --indirect flag to valgrind_test.py
- # to avoid valgrinding python.
- # Start by building the valgrind_test.py commandline.
- tool = valgrind_test.CreateTool(self._options.valgrind_tool)
- cmd = self._DefaultCommand(tool)
- cmd.append("--trace_children")
- cmd.append("--indirect_webkit_layout")
- cmd.append("--ignore_exit_code")
- # Now build script_cmd, the run_webkits_tests.py commandline
- # Store each chunk in its own directory so that we can find the data later
- chunk_dir = os.path.join("layout", "chunk_%05d" % chunk_num)
- out_dir = os.path.join(path_utils.ScriptDir(), "latest")
- out_dir = os.path.join(out_dir, chunk_dir)
- if os.path.exists(out_dir):
- old_files = glob.glob(os.path.join(out_dir, "*.txt"))
- for f in old_files:
- os.remove(f)
- else:
- os.makedirs(out_dir)
- script = os.path.join(self._source_dir, "webkit", "tools", "layout_tests",
- "run_webkit_tests.py")
- # http://crbug.com/260627: After the switch to content_shell from DRT, each
- # test now brings up 3 processes. Under Valgrind, they become memory bound
- # and can eventually OOM if we don't reduce the total count.
- jobs = max(1, int(multiprocessing.cpu_count() * 0.4))
- script_cmd = ["python", script, "-v",
- "--run-singly", # run a separate DumpRenderTree for each test
- "--fully-parallel",
- "--child-processes=%d" % jobs,
- "--time-out-ms=200000",
- "--no-retry-failures", # retrying takes too much time
- # http://crbug.com/176908: Don't launch a browser when done.
- "--no-show-results",
- "--nocheck-sys-deps"]
- # Pass build mode to run_webkit_tests.py. We aren't passed it directly,
- # so parse it out of build_dir. run_webkit_tests.py can only handle
- # the two values "Release" and "Debug".
- # TODO(Hercules): unify how all our scripts pass around build mode
- # (--mode / --target / --build-dir / --debug)
- if self._options.build_dir:
- build_root, mode = os.path.split(self._options.build_dir)
- script_cmd.extend(["--build-directory", build_root, "--target", mode])
- if (chunk_size > 0):
- script_cmd.append("--run-chunk=%d:%d" % (chunk_num, chunk_size))
- if len(self._args):
- # if the arg is a txt file, then treat it as a list of tests
- if os.path.isfile(self._args[0]) and self._args[0][-4:] == ".txt":
- script_cmd.append("--test-list=%s" % self._args[0])
- else:
- script_cmd.extend(self._args)
- self._AppendGtestFilter(tool, "layout", script_cmd)
- # Now run script_cmd with the wrapper in cmd
- cmd.extend(["--"])
- cmd.extend(script_cmd)
-
- # Layout tests often times fail quickly, but the buildbot remains green.
- # Detect this situation when running with the default chunk size.
- if chunk_size == self.LAYOUT_TESTS_DEFAULT_CHUNK_SIZE:
- min_runtime_in_seconds=120
- else:
- min_runtime_in_seconds=0
- ret = tool.Run(cmd, "layout", min_runtime_in_seconds=min_runtime_in_seconds)
- return ret
-
-
- def TestLayout(self):
- # A "chunk file" is maintained in the local directory so that each test
- # runs a slice of the layout tests of size chunk_size that increments with
- # each run. Since tests can be added and removed from the layout tests at
- # any time, this is not going to give exact coverage, but it will allow us
- # to continuously run small slices of the layout tests under valgrind rather
- # than having to run all of them in one shot.
- chunk_size = self._options.num_tests
- if (chunk_size == 0):
- return self.TestLayoutChunk(0, 0)
- chunk_num = 0
- chunk_file = os.path.join("valgrind_layout_chunk.txt")
- logging.info("Reading state from " + chunk_file)
- try:
- f = open(chunk_file)
- if f:
- str = f.read()
- if len(str):
- chunk_num = int(str)
- # This should be enough so that we have a couple of complete runs
- # of test data stored in the archive (although note that when we loop
- # that we almost guaranteed won't be at the end of the test list)
- if chunk_num > 10000:
- chunk_num = 0
- f.close()
- except IOError, (errno, strerror):
- logging.error("error reading from file %s (%d, %s)" % (chunk_file,
- errno, strerror))
- # Save the new chunk size before running the tests. Otherwise if a
- # particular chunk hangs the bot, the chunk number will never get
- # incremented and the bot will be wedged.
- logging.info("Saving state to " + chunk_file)
- try:
- f = open(chunk_file, "w")
- chunk_num += 1
- f.write("%d" % chunk_num)
- f.close()
- except IOError, (errno, strerror):
- logging.error("error writing to file %s (%d, %s)" % (chunk_file, errno,
- strerror))
- # Since we're running small chunks of the layout tests, it's important to
- # mark the ones that have errors in them. These won't be visible in the
- # summary list for long, but will be useful for someone reviewing this bot.
- return self.TestLayoutChunk(chunk_num, chunk_size)
-
- # The known list of tests.
- # Recognise the original abbreviations as well as full executable names.
- _test_list = {
- "cmdline" : RunCmdLine,
- "app_list": TestAppList, "app_list_unittests": TestAppList,
- "ash": TestAsh, "ash_unittests": TestAsh,
- "aura": TestAura, "aura_unittests": TestAura,
- "automated_ui" : TestAutomatedUI,
- "base": TestBase, "base_unittests": TestBase,
- "browser": TestBrowser, "browser_tests": TestBrowser,
- "chromeos": TestChromeOS, "chromeos_unittests": TestChromeOS,
- "components": TestComponents,"components_unittests": TestComponents,
- "compositor": TestCompositor,"compositor_unittests": TestCompositor,
- "content": TestContent, "content_unittests": TestContent,
- "content_browsertests": TestContentBrowser,
- "courgette": TestCourgette, "courgette_unittests": TestCourgette,
- "crypto": TestCrypto, "crypto_unittests": TestCrypto,
- "device": TestDevice, "device_unittests": TestDevice,
- "events": TestEvents, "events_unittests": TestEvents,
- "ffmpeg": TestFFmpeg, "ffmpeg_unittests": TestFFmpeg,
- "ffmpeg_regression_tests": TestFFmpegRegressions,
- "gpu": TestGPU, "gpu_unittests": TestGPU,
- "ipc": TestIpc, "ipc_tests": TestIpc,
- "interactive_ui": TestInteractiveUI,
- "jingle": TestJingle, "jingle_unittests": TestJingle,
- "layout": TestLayout, "layout_tests": TestLayout,
- "webkit": TestLayout,
- "media": TestMedia, "media_unittests": TestMedia,
- "message_center": TestMessageCenter,
- "message_center_unittests" : TestMessageCenter,
- "net": TestNet, "net_unittests": TestNet,
- "net_perf": TestNetPerf, "net_perftests": TestNetPerf,
- "ppapi": TestPPAPI, "ppapi_unittests": TestPPAPI,
- "printing": TestPrinting, "printing_unittests": TestPrinting,
- "reliability": TestReliability, "reliability_tests": TestReliability,
- "remoting": TestRemoting, "remoting_unittests": TestRemoting,
- "safe_browsing": TestSafeBrowsing, "safe_browsing_tests": TestSafeBrowsing,
- "sandbox": TestLinuxSandbox, "sandbox_linux_unittests": TestLinuxSandbox,
- "sql": TestSql, "sql_unittests": TestSql,
- "sync": TestSync, "sync_unit_tests": TestSync,
- "sync_integration_tests": TestSyncIntegration,
- "sync_integration": TestSyncIntegration,
- "ui_unit": TestUIUnit, "ui_unittests": TestUIUnit,
- "unit": TestUnit, "unit_tests": TestUnit,
- "url": TestURL, "url_unittests": TestURL,
- "views": TestViews, "views_unittests": TestViews,
- }
-
-
-def _main():
- parser = optparse.OptionParser("usage: %prog -b <dir> -t <test> "
- "[-t <test> ...]")
-
- parser.add_option("--help-tests", dest="help_tests", action="store_true",
- default=False, help="List all available tests")
- parser.add_option("-b", "--build-dir",
- help="the location of the compiler output")
- parser.add_option("--target", help="Debug or Release")
- parser.add_option("-t", "--test", action="append", default=[],
- help="which test to run, supports test:gtest_filter format "
- "as well.")
- parser.add_option("--baseline", action="store_true", default=False,
- help="generate baseline data instead of validating")
- parser.add_option("--gtest_filter",
- help="additional arguments to --gtest_filter")
- parser.add_option("--gtest_repeat", help="argument for --gtest_repeat")
- parser.add_option("--gtest_shuffle", action="store_true", default=False,
- help="Randomize tests' orders on every iteration.")
- parser.add_option("-v", "--verbose", action="store_true", default=False,
- help="verbose output - enable debug log messages")
- parser.add_option("--tool", dest="valgrind_tool", default="memcheck",
- help="specify a valgrind tool to run the tests under")
- parser.add_option("--tool_flags", dest="valgrind_tool_flags", default="",
- help="specify custom flags for the selected valgrind tool")
- parser.add_option("--keep_logs", action="store_true", default=False,
- help="store memory tool logs in the <tool>.logs directory "
- "instead of /tmp.\nThis can be useful for tool "
- "developers/maintainers.\nPlease note that the <tool>"
- ".logs directory will be clobbered on tool startup.")
- parser.add_option("-n", "--num_tests", type="int",
- default=ChromeTests.LAYOUT_TESTS_DEFAULT_CHUNK_SIZE,
- help="for layout tests: # of subtests per run. 0 for all.")
- # TODO(thestig) Remove this if we can.
- parser.add_option("--gtest_color", dest="gtest_color", default="no",
- help="dummy compatibility flag for sharding_supervisor.")
- parser.add_option("--brave-new-test-launcher", action="store_true",
- help="run the tests with --brave-new-test-launcher")
- parser.add_option("--test-launcher-bot-mode", action="store_true",
- help="run the tests with --test-launcher-bot-mode")
-
- options, args = parser.parse_args()
-
- # Bake target into build_dir.
- if options.target and options.build_dir:
- assert (options.target !=
- os.path.basename(os.path.dirname(options.build_dir)))
- options.build_dir = os.path.join(os.path.abspath(options.build_dir),
- options.target)
-
- if options.verbose:
- logging_utils.config_root(logging.DEBUG)
- else:
- logging_utils.config_root()
-
- if options.help_tests:
- ChromeTests.ShowTests()
- return 0
-
- if not options.test:
- parser.error("--test not specified")
-
- if len(options.test) != 1 and options.gtest_filter:
- parser.error("--gtest_filter and multiple tests don't make sense together")
-
- for t in options.test:
- tests = ChromeTests(options, args, t)
- ret = tests.Run()
- if ret: return ret
- return 0
-
-
-if __name__ == "__main__":
- sys.exit(_main())
diff --git a/chromium/tools/valgrind/chrome_tests.sh b/chromium/tools/valgrind/chrome_tests.sh
deleted file mode 100755
index df5e8e745f2..00000000000
--- a/chromium/tools/valgrind/chrome_tests.sh
+++ /dev/null
@@ -1,122 +0,0 @@
-#!/bin/bash
-
-# Copyright (c) 2012 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.
-
-# Set up some paths and re-direct the arguments to chrome_tests.py
-
-export THISDIR=`dirname $0`
-ARGV_COPY="$@"
-
-# We need to set CHROME_VALGRIND iff using Memcheck or TSan-Valgrind:
-# tools/valgrind/chrome_tests.sh --tool memcheck
-# or
-# tools/valgrind/chrome_tests.sh --tool=memcheck
-# (same for "--tool=tsan")
-tool="memcheck" # Default to memcheck.
-while (( "$#" ))
-do
- if [[ "$1" == "--tool" ]]
- then
- tool="$2"
- shift
- elif [[ "$1" =~ --tool=(.*) ]]
- then
- tool="${BASH_REMATCH[1]}"
- fi
- shift
-done
-
-NEEDS_VALGRIND=0
-NEEDS_DRMEMORY=0
-
-case "$tool" in
- "memcheck")
- NEEDS_VALGRIND=1
- ;;
- "tsan" | "tsan_rv")
- if [ "`uname -s`" == CYGWIN* ]
- then
- NEEDS_PIN=1
- else
- NEEDS_VALGRIND=1
- fi
- ;;
- "drmemory" | "drmemory_light" | "drmemory_full" | "drmemory_pattern")
- NEEDS_DRMEMORY=1
- ;;
-esac
-
-if [ "$NEEDS_VALGRIND" == "1" ]
-then
- export CHROME_VALGRIND=`sh $THISDIR/locate_valgrind.sh`
- if [ "$CHROME_VALGRIND" = "" ]
- then
- # locate_valgrind.sh failed
- exit 1
- fi
- echo "Using valgrind binaries from ${CHROME_VALGRIND}"
-
- PATH="${CHROME_VALGRIND}/bin:$PATH"
- # We need to set these variables to override default lib paths hard-coded into
- # Valgrind binary.
- export VALGRIND_LIB="$CHROME_VALGRIND/lib/valgrind"
- export VALGRIND_LIB_INNER="$CHROME_VALGRIND/lib/valgrind"
-
- # Clean up some /tmp directories that might be stale due to interrupted
- # chrome_tests.py execution.
- # FYI:
- # -mtime +1 <- only print files modified more than 24h ago,
- # -print0/-0 are needed to handle possible newlines in the filenames.
- echo "Cleanup /tmp from Valgrind stuff"
- find /tmp -maxdepth 1 \(\
- -name "vgdb-pipe-*" -or -name "vg_logs_*" -or -name "valgrind.*" \
- \) -mtime +1 -print0 | xargs -0 rm -rf
-fi
-
-if [ "$NEEDS_DRMEMORY" == "1" ]
-then
- if [ -z "$DRMEMORY_COMMAND" ]
- then
- DRMEMORY_PATH="$THISDIR/../../third_party/drmemory"
- DRMEMORY_SFX="$DRMEMORY_PATH/drmemory-windows-sfx.exe"
- if [ ! -f "$DRMEMORY_SFX" ]
- then
- echo "Can't find Dr. Memory executables."
- echo "See http://www.chromium.org/developers/how-tos/using-valgrind/dr-memory"
- echo "for the instructions on how to get them."
- exit 1
- fi
-
- chmod +x "$DRMEMORY_SFX" # Cygwin won't run it without +x.
- "$DRMEMORY_SFX" -o"$DRMEMORY_PATH/unpacked" -y
- export DRMEMORY_COMMAND="$DRMEMORY_PATH/unpacked/bin/drmemory.exe"
- fi
-fi
-
-if [ "$NEEDS_PIN" == "1" ]
-then
- if [ -z "$PIN_COMMAND" ]
- then
- # Set up PIN_COMMAND to invoke TSan.
- TSAN_PATH="$THISDIR/../../third_party/tsan"
- TSAN_SFX="$TSAN_PATH/tsan-x86-windows-sfx.exe"
- echo "$TSAN_SFX"
- if [ ! -f $TSAN_SFX ]
- then
- echo "Can't find ThreadSanitizer executables."
- echo "See http://www.chromium.org/developers/how-tos/using-valgrind/threadsanitizer/threadsanitizer-on-windows"
- echo "for the instructions on how to get them."
- exit 1
- fi
-
- chmod +x "$TSAN_SFX" # Cygwin won't run it without +x.
- "$TSAN_SFX" -o"$TSAN_PATH"/unpacked -y
- export PIN_COMMAND="$TSAN_PATH/unpacked/tsan-x86-windows/tsan.bat"
- fi
-fi
-
-
-PYTHONPATH=$THISDIR/../python/google python \
- "$THISDIR/chrome_tests.py" $ARGV_COPY
diff --git a/chromium/tools/valgrind/common.py b/chromium/tools/valgrind/common.py
deleted file mode 100644
index 7e163e3c602..00000000000
--- a/chromium/tools/valgrind/common.py
+++ /dev/null
@@ -1,252 +0,0 @@
-# Copyright (c) 2012 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.
-
-import logging
-import platform
-import os
-import signal
-import subprocess
-import sys
-import time
-
-
-class NotImplementedError(Exception):
- pass
-
-
-class TimeoutError(Exception):
- pass
-
-
-def RunSubprocessInBackground(proc):
- """Runs a subprocess in the background. Returns a handle to the process."""
- logging.info("running %s in the background" % " ".join(proc))
- return subprocess.Popen(proc)
-
-
-def RunSubprocess(proc, timeout=0):
- """ Runs a subprocess, until it finishes or |timeout| is exceeded and the
- process is killed with taskkill. A |timeout| <= 0 means no timeout.
-
- Args:
- proc: list of process components (exe + args)
- timeout: how long to wait before killing, <= 0 means wait forever
- """
-
- logging.info("running %s, timeout %d sec" % (" ".join(proc), timeout))
- sys.stdout.flush()
- sys.stderr.flush()
-
- # Manually read and print out stdout and stderr.
- # By default, the subprocess is supposed to inherit these from its parent,
- # however when run under buildbot, it seems unable to read data from a
- # grandchild process, so we have to read the child and print the data as if
- # it came from us for buildbot to read it. We're not sure why this is
- # necessary.
- # TODO(erikkay): should we buffer stderr and stdout separately?
- p = subprocess.Popen(proc, universal_newlines=True,
- bufsize=0, # unbuffered
- stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
-
- logging.info("started subprocess")
-
- did_timeout = False
- if timeout > 0:
- wait_until = time.time() + timeout
- while p.poll() is None and not did_timeout:
- # Have to use readline rather than readlines() or "for line in p.stdout:",
- # otherwise we get buffered even with bufsize=0.
- line = p.stdout.readline()
- while line and not did_timeout:
- sys.stdout.write(line)
- sys.stdout.flush()
- line = p.stdout.readline()
- if timeout > 0:
- did_timeout = time.time() > wait_until
-
- if did_timeout:
- logging.info("process timed out")
- else:
- logging.info("process ended, did not time out")
-
- if did_timeout:
- if IsWindows():
- subprocess.call(["taskkill", "/T", "/F", "/PID", str(p.pid)])
- else:
- # Does this kill all children, too?
- os.kill(p.pid, signal.SIGINT)
- logging.error("KILLED %d" % p.pid)
- # Give the process a chance to actually die before continuing
- # so that cleanup can happen safely.
- time.sleep(1.0)
- logging.error("TIMEOUT waiting for %s" % proc[0])
- raise TimeoutError(proc[0])
- else:
- for line in p.stdout:
- sys.stdout.write(line)
- if not IsMac(): # stdout flush fails on Mac
- logging.info("flushing stdout")
- sys.stdout.flush()
-
- logging.info("collecting result code")
- result = p.poll()
- if result:
- logging.error("%s exited with non-zero result code %d" % (proc[0], result))
- return result
-
-
-def IsLinux():
- return sys.platform.startswith('linux')
-
-
-def IsMac():
- return sys.platform.startswith('darwin')
-
-
-def IsWindows():
- return sys.platform == 'cygwin' or sys.platform.startswith('win')
-
-
-def WindowsVersionName():
- """Returns the name of the Windows version if it is known, or None.
-
- Possible return values are: xp, vista, 7, 8, or None
- """
- if sys.platform == 'cygwin':
- # Windows version number is hiding in system name. Looks like:
- # CYGWIN_NT-6.1-WOW64
- try:
- version_str = platform.uname()[0].split('-')[1]
- except:
- return None
- elif sys.platform.startswith('win'):
- # Normal Windows version string. Mine: 6.1.7601
- version_str = platform.version()
- else:
- return None
-
- parts = version_str.split('.')
- try:
- major = int(parts[0])
- minor = int(parts[1])
- except:
- return None # Can't parse, unknown version.
-
- if major == 5:
- return 'xp'
- elif major == 6 and minor == 0:
- return 'vista'
- elif major == 6 and minor == 1:
- return '7'
- elif major == 6 and minor == 2:
- return '8' # Future proof. ;)
- return None
-
-
-def PlatformNames():
- """Return an array of string to be used in paths for the platform
- (e.g. suppressions, gtest filters, ignore files etc.)
- The first element of the array describes the 'main' platform
- """
- if IsLinux():
- return ['linux']
- if IsMac():
- return ['mac']
- if IsWindows():
- names = ['win32']
- version_name = WindowsVersionName()
- if version_name is not None:
- names.append('win-%s' % version_name)
- return names
- raise NotImplementedError('Unknown platform "%s".' % sys.platform)
-
-
-def PutEnvAndLog(env_name, env_value):
- os.putenv(env_name, env_value)
- logging.info('export %s=%s', env_name, env_value)
-
-def BoringCallers(mangled, use_re_wildcards):
- """Return a list of 'boring' function names (optinally mangled)
- with */? wildcards (optionally .*/.).
- Boring = we drop off the bottom of stack traces below such functions.
- """
-
- need_mangling = [
- # Don't show our testing framework:
- ("testing::Test::Run", "_ZN7testing4Test3RunEv"),
- ("testing::TestInfo::Run", "_ZN7testing8TestInfo3RunEv"),
- ("testing::internal::Handle*ExceptionsInMethodIfSupported*",
- "_ZN7testing8internal3?Handle*ExceptionsInMethodIfSupported*"),
-
- # Depend on scheduling:
- ("MessageLoop::Run", "_ZN11MessageLoop3RunEv"),
- ("MessageLoop::RunTask", "_ZN11MessageLoop7RunTask*"),
- ("RunnableMethod*", "_ZN14RunnableMethod*"),
- ("DispatchToMethod*", "_Z*16DispatchToMethod*"),
- ("base::internal::Invoker*::DoInvoke*",
- "_ZN4base8internal8Invoker*DoInvoke*"), # Invoker{1,2,3}
- ("base::internal::RunnableAdapter*::Run*",
- "_ZN4base8internal15RunnableAdapter*Run*"),
- ]
-
- ret = []
- for pair in need_mangling:
- ret.append(pair[1 if mangled else 0])
-
- ret += [
- # Also don't show the internals of libc/pthread.
- "start_thread",
- "main",
- "BaseThreadInitThunk",
- ]
-
- if use_re_wildcards:
- for i in range(0, len(ret)):
- ret[i] = ret[i].replace('*', '.*').replace('?', '.')
-
- return ret
-
-def NormalizeWindowsPath(path):
- """If we're using Cygwin Python, turn the path into a Windows path.
-
- Don't turn forward slashes into backslashes for easier copy-pasting and
- escaping.
-
- TODO(rnk): If we ever want to cut out the subprocess invocation, we can use
- _winreg to get the root Cygwin directory from the registry key:
- HKEY_LOCAL_MACHINE\SOFTWARE\Cygwin\setup\rootdir.
- """
- if sys.platform.startswith("cygwin"):
- p = subprocess.Popen(["cygpath", "-m", path],
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- (out, err) = p.communicate()
- if err:
- logging.warning("WARNING: cygpath error: %s", err)
- return out.strip()
- else:
- return path
-
-############################
-# Common output format code
-
-def PrintUsedSuppressionsList(suppcounts):
- """ Prints out the list of used suppressions in a format common to all the
- memory tools. If the list is empty, prints nothing and returns False,
- otherwise True.
-
- suppcounts: a dictionary of used suppression counts,
- Key -> name, Value -> count.
- """
- if not suppcounts:
- return False
-
- print "-----------------------------------------------------"
- print "Suppressions used:"
- print " count name"
- for (name, count) in sorted(suppcounts.items(), key=lambda (k,v): (v,k)):
- print "%7d %s" % (count, name)
- print "-----------------------------------------------------"
- sys.stdout.flush()
- return True
diff --git a/chromium/tools/valgrind/drmemory.bat b/chromium/tools/valgrind/drmemory.bat
deleted file mode 100755
index 46d5a4f09bb..00000000000
--- a/chromium/tools/valgrind/drmemory.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-:: Copyright (c) 2011 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.
-%~dp0\chrome_tests.bat -t cmdline --tool drmemory %*
diff --git a/chromium/tools/valgrind/drmemory/OWNERS b/chromium/tools/valgrind/drmemory/OWNERS
deleted file mode 100644
index 72e8ffc0db8..00000000000
--- a/chromium/tools/valgrind/drmemory/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-*
diff --git a/chromium/tools/valgrind/drmemory/PRESUBMIT.py b/chromium/tools/valgrind/drmemory/PRESUBMIT.py
deleted file mode 100644
index 11c71478b78..00000000000
--- a/chromium/tools/valgrind/drmemory/PRESUBMIT.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (c) 2012 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.
-"""
-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
-for more details on the presubmit API built into gcl.
-"""
-
-
-def CheckChange(input_api, output_api):
- """Checks the DrMemory suppression files for bad suppressions."""
-
- # TODO(timurrrr): find out how to do relative imports
- # and remove this ugly hack. Also, the CheckChange function won't be needed.
- tools_vg_path = input_api.os_path.join(input_api.PresubmitLocalPath(), '..')
- import sys
- old_path = sys.path
- try:
- sys.path = sys.path + [tools_vg_path]
- import suppressions
- return suppressions.PresubmitCheck(input_api, output_api)
- finally:
- sys.path = old_path
-
-
-def CheckChangeOnUpload(input_api, output_api):
- return CheckChange(input_api, output_api)
-
-
-def CheckChangeOnCommit(input_api, output_api):
- return CheckChange(input_api, output_api)
-
-
-def GetPreferredTrySlaves():
- return ['win_drmemory']
diff --git a/chromium/tools/valgrind/drmemory/suppressions.txt b/chromium/tools/valgrind/drmemory/suppressions.txt
deleted file mode 100644
index 7678adb3b2b..00000000000
--- a/chromium/tools/valgrind/drmemory/suppressions.txt
+++ /dev/null
@@ -1,430 +0,0 @@
-# This file contains suppressions for the Dr.Memory tool, see
-# http://dev.chromium.org/developers/how-tos/using-drmemory
-#
-# This file contains suppressions for the DrMemory reports happening
-# in the 'light' mode (a.k.a. drmemory_light) as well as in the 'full' mode.
-# Please use suppressions_full.txt for all the reports that can happen only
-# in the full mode (drmemory_full),
-
-############################
-# Known reports on the third party we have no control over.
-
-# Reports from Sophos antivirus
-UNADDRESSABLE ACCESS
-name=Sophos UNADDR
-...
-sophos*.dll!*
-
-UNINITIALIZED READ
-name=Sophos UNINIT
-...
-sophos*.dll!*
-
-LEAK
-name=Sophos LEAK
-...
-sophos*.dll!*
-
-# Reports from Micorosft RDP ActiveX control (mstscax.dll)
-
-GDI USAGE ERROR
-name=crbug.com/177832: mstscax.dll causes "GDI USAGE ERROR" errors.
-...
-mstscax.dll!*
-
-UNADDRESSABLE ACCESS
-name=crbug.com/177832: mstscax.dll causes "UNADDRESSABLE ACCESS" errors.
-...
-mstscax.dll!*
-
-############################
-# Suppress some false reports due to bugs in Dr.Memory like wrong analysis
-# assumptions or unhandled syscalls
-
-# Please note: the following suppressions were written in the abscense of
-# private symbols so may need to be updated when we switch to auto-loading PDBs
-
-UNADDRESSABLE ACCESS
-name=http://code.google.com/p/drmemory/issues/detail?id=12 UNADDR
-...
-SHELL32.dll!SHFileOperation*
-
-UNADDRESSABLE ACCESS
-name=http://code.google.com/p/drmemory/issues/detail?id=40 UNADDR
-...
-WINSPOOL.DRV!*
-
-INVALID HEAP ARGUMENT
-name=http://code.google.com/p/drmemory/issues/detail?id=40 INVALID HEAP
-...
-WINSPOOL.DRV!*
-
-UNADDRESSABLE ACCESS
-name=http://code.google.com/p/drmemory/issues/detail?id=59
-...
-*!SetEnvironmentVariable*
-
-UNADDRESSABLE ACCESS
-name=http://code.google.com/p/drmemory/issues/detail?id=68 (UNADDR 1)
-...
-MSWSOCK.dll!WSPStartup
-
-UNADDRESSABLE ACCESS
-name=http://code.google.com/p/drmemory/issues/detail?id=68 (UNADDR 2)
-...
-ntdll.dll!RtlValidateUnicodeString
-
-############################
-# TODO(timurrrr): investigate these
-UNADDRESSABLE ACCESS
-name=TODO SHParseDisplayName
-...
-*!SHParseDisplayName
-
-UNADDRESSABLE ACCESS
-name=TODO GetCanonicalPathInfo
-...
-*!GetCanonicalPathInfo*
-
-UNADDRESSABLE ACCESS
-name=TODO CreateDC
-...
-GDI32.dll!CreateDC*
-
-# This one looks interesting
-INVALID HEAP ARGUMENT
-name=TODO ExitProcess
-...
-KERNEL32.dll!ExitProcess
-
-INVALID HEAP ARGUMENT
-name=http://crbug.com/103365 (a)
-ppapi_tests.dll!*
-...
-ppapi_tests.dll!*
-*!base::internal::RunnableAdapter<*>::Run
-
-INVALID HEAP ARGUMENT
-name=http://crbug.com/103365 (b)
-ppapi_tests.dll!*
-...
-ppapi_tests.dll!*
-*!PP_RunCompletionCallback
-...
-*!base::internal::RunnableAdapter<*>::Run
-
-INVALID HEAP ARGUMENT
-name=http://crbug.com/107567 intentional mismatch in _DebugHeapDelete, no frame
-*!std::numpunct<*>::_Tidy
-*!std::numpunct<*>::~numpunct<*>
-
-# TODO(rbultje): Investigate if code fix is required instead.
-WARNING
-name=http://crbug.com/223255 - prefetches in vp8
-instruction=prefetch*
-ffmpegsumo.dll!ff_prefetch_mmxext
-ffmpegsumo.dll!vp8_decode_mb_row_no_filter
-
-############################
-# Intentional errors in Chromium tests (ToolsSanityTests)
-LEAK
-name=sanity test 01 (memory leak)
-base_unittests.exe!operator new
-base_unittests.exe!operator new[]
-base_unittests.exe!base::ToolsSanityTest_MemoryLeak_Test::TestBody
-
-# "..." is needed due to http://code.google.com/p/drmemory/issues/detail?id=666
-UNADDRESSABLE ACCESS
-name=sanity test 02 (malloc/read left)
-base_unittests.exe!*ReadValueOutOfArrayBoundsLeft
-...
-base_unittests.exe!base::ToolsSanityTest_AccessesToMallocMemory_Test::TestBody
-
-UNADDRESSABLE ACCESS
-name=sanity test 03 (malloc/read right)
-base_unittests.exe!*ReadValueOutOfArrayBoundsRight
-base_unittests.exe!*MakeSomeErrors
-base_unittests.exe!base::ToolsSanityTest_AccessesToMallocMemory_Test::TestBody
-
-UNADDRESSABLE ACCESS
-name=sanity test 04 (malloc/write left)
-base_unittests.exe!*WriteValueOutOfArrayBoundsLeft
-base_unittests.exe!*MakeSomeErrors
-base_unittests.exe!base::ToolsSanityTest_AccessesToMallocMemory_Test::TestBody
-
-UNADDRESSABLE ACCESS
-name=sanity test 05 (malloc/write right)
-base_unittests.exe!*WriteValueOutOfArrayBoundsRight
-base_unittests.exe!*MakeSomeErrors
-base_unittests.exe!base::ToolsSanityTest_AccessesToMallocMemory_Test::TestBody
-
-# "..." is needed due to http://code.google.com/p/drmemory/issues/detail?id=666
-UNADDRESSABLE ACCESS
-name=sanity test 06 (new/read left)
-base_unittests.exe!*ReadValueOutOfArrayBoundsLeft
-...
-base_unittests.exe!base::ToolsSanityTest_AccessesToNewMemory_Test::TestBody
-
-UNADDRESSABLE ACCESS
-name=sanity test 07 (new/read right)
-base_unittests.exe!*ReadValueOutOfArrayBoundsRight
-base_unittests.exe!*MakeSomeErrors
-base_unittests.exe!base::ToolsSanityTest_AccessesToNewMemory_Test::TestBody
-
-UNADDRESSABLE ACCESS
-name=sanity test 08 (new/write left)
-base_unittests.exe!*WriteValueOutOfArrayBoundsLeft
-base_unittests.exe!*MakeSomeErrors
-base_unittests.exe!base::ToolsSanityTest_AccessesToNewMemory_Test::TestBody
-
-UNADDRESSABLE ACCESS
-name=sanity test 09 (new/write right)
-base_unittests.exe!*WriteValueOutOfArrayBoundsRight
-base_unittests.exe!*MakeSomeErrors
-base_unittests.exe!base::ToolsSanityTest_AccessesToNewMemory_Test::TestBody
-
-UNADDRESSABLE ACCESS
-name=sanity test 10 (write after free)
-base_unittests.exe!base::ToolsSanityTest_AccessesToMallocMemory_Test::TestBody
-
-UNADDRESSABLE ACCESS
-name=sanity test 11 (write after delete)
-base_unittests.exe!base::ToolsSanityTest_AccessesToNewMemory_Test::TestBody
-
-INVALID HEAP ARGUMENT
-name=sanity test 12 (array deleted without [])
-base_unittests.exe!base::ToolsSanityTest_ArrayDeletedWithoutBraces_Test::TestBody
-
-INVALID HEAP ARGUMENT
-name=sanity test 13 (single element deleted with [])
-base_unittests.exe!base::ToolsSanityTest_SingleElementDeletedWithBraces_Test::TestBody
-
-UNINITIALIZED READ
-name=sanity test 14 (malloc/read uninit)
-base_unittests.exe!*ReadUninitializedValue
-base_unittests.exe!*MakeSomeErrors
-base_unittests.exe!base::ToolsSanityTest_AccessesToMallocMemory_Test::TestBody
-
-UNINITIALIZED READ
-name=sanity test 15 (new/read uninit)
-base_unittests.exe!*ReadUninitializedValue
-base_unittests.exe!*MakeSomeErrors
-base_unittests.exe!base::ToolsSanityTest_AccessesToNewMemory_Test::TestBody
-
-UNADDRESSABLE ACCESS
-name=AboutHandler::AboutCrash deliberate crash
-# TODO(bruening): switch to annotation once have support for that
-chrome.dll!AboutHandler::AboutCrash
-
-UNADDRESSABLE ACCESS
-name=NPAPITesterBase.NoHangIfInitCrashes deliberate crash
-# function is small, little risk for false negative in rest of it
-# TODO(bruening): switch to annotation once have support for that
-npapi_test_plugin.dll!NPAPIClient::PluginClient::Initialize
-
-# Deliberate NULL deref to crash the child process
-UNADDRESSABLE ACCESS
-name=CrashingChildProcess deliberate crash
-*!CrashingChildProcess
-
-UNADDRESSABLE ACCESS
-name=::Crasher::Run deliberate crash
-*!base::`anonymous namespace'::Crasher::Run
-
-############################
-# Benign issues in Chromium
-
-WARNING
-name=http://crbug.com/72463 - prefetches in generated MemCopy
-instruction=prefetch*
-<not in a module>
-chrome.dll!v8::internal::CopyChars*
-
-WARNING
-name=prefetches in NVD3DUM.dll
-instruction=prefetch*
-NVD3DUM.dll!*
-
-WARNING
-name=prefetches in igdumd32.dll
-instruction=prefetch*
-igdumd32.dll!*
-
-UNADDRESSABLE ACCESS
-name=http://code.google.com/p/drmemory/issues/detail?id=582 bizarre cl-generated read-beyond-TOS
-instruction=mov 0xfffffffc(%esp) -> %eax
-chrome.dll!WebCore::RenderStyle::resetBorder*
-
-INVALID HEAP ARGUMENT
-name=http://crbug.com/101537
-*!scoped_ptr<_TOKEN_USER>*
-
-INVALID HEAP ARGUMENT
-name=http://crbug.com/101717 (1)
-*!scoped_ptr<_TOKEN_DEFAULT_DACL>*
-
-INVALID HEAP ARGUMENT
-name=http://crbug.com/101717 (2)
-*!sandbox::PolicyBase::~PolicyBase
-
-INVALID HEAP ARGUMENT
-name=http://crbug.com/101717 (3)
-*!scoped_ptr<_UNICODE_STRING>::~scoped_ptr<_UNICODE_STRING>
-*!sandbox::GetHandleName
-
-INVALID HEAP ARGUMENT
-name=http://crbug.com/101717 (4)
-*!scoped_ptr<_OBJECT_NAME_INFORMATION>::~scoped_ptr<_OBJECT_NAME_INFORMATION>
-*!sandbox::GetPathFromHandle
-
-GDI USAGE ERROR
-name=http://code.google.com/p/drmemory/issues/detail?id=899 deleting bitmap which is probably safe
-system call NtGdiDeleteObjectApp
-*!skia::`anonymous namespace'::Bitmap::~Bitmap
-*!skia::`anonymous namespace'::Bitmap::`scalar deleting destructor'
-
-############################
-# Real issues in Chromium
-
-UNADDRESSABLE ACCESS
-name=http://crbug.com/88213
-*!base::win::ObjectWatcher::StopWatching
-*!base::win::ObjectWatcher::WillDestroyCurrentMessageLoop
-*!MessageLoop::~MessageLoop
-
-UNADDRESSABLE ACCESS
-name=http://crbug.com/96010
-*!TestingProfile::FinishInit
-*!TestingProfile::TestingProfile
-*!BrowserAboutHandlerTest_WillHandleBrowserAboutURL_Test::TestBody
-
-UNADDRESSABLE ACCESS
-name=http://crbug.com/106522
-npapi_test_plugin.dll!NPAPIClient::PluginTest::id
-npapi_test_plugin.dll!NPAPIClient::ExecuteGetJavascriptUrlTest::TimerProc
-
-GDI USAGE ERROR
-name=http://crbug.com/109963 c
-system call NtGdiDeleteObjectApp
-GDI32.dll!DeleteDC
-content.dll!*
-
-GDI USAGE ERROR
-name=http://crbug.com/109963 d
-system call NtGdiDeleteObjectApp
-GDI32.dll!DeleteDC
-*!base::internal::RunnableAdapter*
-
-# GDI usage errors in 3rd-party components
-GDI USAGE ERROR
-name=http://crbug.com/119552 a
-system call NtGdiDeleteObjectApp
-...
-*!OmniboxViewWin::*
-
-GDI USAGE ERROR
-name=http://crbug.com/119552 b
-system call Nt*
-...
-*!ATL::*
-
-GDI USAGE ERROR
-name=http://crbug.com/119552 c
-# optional gdi32.dll frame followed by user32.dll
-# TODO(bruening): once have
-# http://code.google.com/p/drmemory/issues/detail?id=846
-# I would do "gdi32.dll!...\nuser32.dll!*"
-*32.dll!*
-...
-shell32.dll!SHGetFileInfoW
-*!IconLoader::ReadIcon
-
-GDI USAGE ERROR
-name=http://crbug.com/119552 d
-system call NtGdiDeleteObjectApp
-gdi32.dll!DeleteObject
-riched20.dll!*
-riched20.dll!*
-riched20.dll!*
-
-GDI USAGE ERROR
-name=http://crbug.com/120157
-# "ReleaseDC called from different thread than GetDC"
-system call NtUserCallOneParam.RELEASEDC
-*!*FontCache::CacheElement::~CacheElement
-
-GDI USAGE ERROR
-name=http://crbug.com/158090
-# "DC created by one thread and used by another"
-...
-content.dll!content::*::FontCache::PreCacheFont
-content.dll!content::FontCacheDispatcher::OnPreCacheFont
-content.dll!DispatchToMethod<content::FontCacheDispatcher*
-
-GDI USAGE ERROR
-name=http://crbug.com/158090 c#4
-# ReleaseDC for DC called from different thread than the thread that called GetDC
-system call NtUserCallOneParam.RELEASEDC
-ui.dll!gfx::ReadColorProfile
-ui.dll!gfx::GetColorProfile
-content.dll!content::RenderMessageFilter::OnGetMonitorColorProfile
-content.dll!DispatchToMethod*
-
-INVALID HEAP ARGUMENT
-name=http://crbug.com/158350
-# allocated with operator new[], freed with operator delete
-*!*
-*!*
-*!*
-*!*
-*!*
-content.dll!*
-content.dll!*
-content.dll!*
-content.dll!*
-content.dll!*
-*!*
-*!*
-*!*
-*!*
-*!*
-KERNEL32.dll!*
-ntdll.dll!*
-ntdll.dll!*
-
-WARNING
-name=Security test (new oveflow)
-MSVCR100D.dll!operator new
-*!operator new
-*!operator new[]
-*!`anonymous namespace'::SecurityTest_NewOverflow_Test::TestBody
-*!testing::internal::HandleExceptionsInMethodIfSupported<testing::Test,void>
-
-WARNING
-name=Security test (calloc overflow)
-*!`anonymous namespace'::CallocReturnsNull
-*!`anonymous namespace'::SecurityTest_CallocOverflow_Test::TestBody
-*!testing::internal::HandleExceptionsInMethodIfSupported<testing::Test,void>
-
-GDI USAGE ERROR
-name=http://crbug.com/234484
-# "DC created by one thread and used by another"
-...
-*!chrome::`anonymous namespace'::SetOverlayIcon
-
-INVALID HEAP ARGUMENT
-name=http://crbug.com/262088
-drmemorylib.dll!av_dup_packet
-msvcrt.dll!wcsrchr
-ntdll.dll!RtlIsCurrentThreadAttachExempt
-ntdll.dll!LdrShutdownThread
-ntdll.dll!RtlExitUserThread
-
-GDI USAGE ERROR
-name=http://crbug.com/266484
-skia.dll!HDCOffscreen::draw
-skia.dll!SkScalerContext_GDI::generateImage
-skia.dll!SkScalerContext::getImage
-skia.dll!SkGlyphCache::findImage
-skia.dll!D1G_NoBounder_RectClip
-skia.dll!SkDraw::drawText
diff --git a/chromium/tools/valgrind/drmemory/suppressions_full.txt b/chromium/tools/valgrind/drmemory/suppressions_full.txt
deleted file mode 100644
index 76a1dfb4ce5..00000000000
--- a/chromium/tools/valgrind/drmemory/suppressions_full.txt
+++ /dev/null
@@ -1,1337 +0,0 @@
-# This file contains suppressions for the Dr.Memory tool, see
-# http://dev.chromium.org/developers/how-tos/using-drmemory
-#
-# This file should contain suppressions only for the reports happening
-# in the 'full' mode (drmemory_full).
-# For the reports that can happen in the light mode (a.k.a. drmemory_light),
-# please use suppressions.txt instead.
-
-###############################################################
-# Known reports on the third party we have no control over.
-UNINITIALIZED READ
-name=deflate UNINIT
-...
-*!deflate_*
-*!MOZ_Z_deflate
-
-# TODO(timurrrr): check if these frames change when NT_SYMBOLS are present.
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=406
-ADVAPI32.dll!WmiOpenBlock
-ADVAPI32.dll!WmiOpenBlock
-
-# Leaks inside GoogleDesktop - it injects into our processes for some reason
-LEAK
-name=GoogleDesktop LEAK
-...
-GoogleDesktopNetwork3.DLL!DllUnregisterServer
-
-# They deliberately use uninit local var in sqlite random generator
-# random byte may mess up the call stack between randomByte and
-# sqlite3_randomness
-UNINITIALIZED READ
-name=sqlite3_randomness UNINIT
-*!randomByte
-...
-*!sqlite3_randomness
-
-# Intentional leak in WebKit Template Framework for ThreadData.
-LEAK
-name=intentional WTF ThreadData leak
-...
-*!WTF::wtfThreadData
-
-# Happens when winhttp returns ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPT.
-LEAK
-name=http://crbug.com/125558 a
-KERNELBASE.dll!LocalAlloc
-SECHOST.dll!...
-SECHOST.dll!NotifyServiceStatusChange
-WINHTTP.dll!...
-WINHTTP.dll!WinHttpDetectAutoProxyConfigUrl
-*!net::ProxyResolverWinHttp::GetProxyForURL
-
-# Tiny locale-related leaks in ntdll. Probably system bug.
-LEAK
-name=http://crbug.com/125558 b
-ntdll.dll!...
-ntdll.dll!*
-KERNELBASE.dll!...
-KERNELBASE.dll!GetCPInfoExW
-webio.dll!*
-webio.dll!*
-webio.dll!*
-WINHTTP.dll!...
-WINHTTP.dll!WinHttpGetIEProxyConfigForCurrentUser
-*!net::ProxyConfigServiceWin::GetCurrentProxyConfig
-
-UNINITIALIZED READ
-name=http://crbug.com/30704 #f
-libpng.dll!wk_png_write_find_filter
-libpng.dll!wk_png_write_row
-
-###############################################################
-# Suppress some false reports due to bugs in Dr.Memory like wrong analysis
-# assumptions or unhandled syscalls
-
-# Please note: the following suppressions were written in the abscense of
-# private symbols so may need to be updated when we switch to auto-loading PDBs
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=12 (1)
-ntdll.dll!Rtl*
-ntdll.dll!Rtl*
-ntdll.dll!RtlFindActivationContextSectionString
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=12 (2)
-...
-SHELL32.dll!SHFileOperation*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=12 (3)
-...
-SHELL32.dll!SHGetFolderPath*
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=12 (4)
-...
-SHELL32.dll!SHGetFolderPath*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=12 (5)
-...
-SHELL32.dll!SHCreateDirectory*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=12 (6)
-...
-SHELL32.dll!ILLoadFromStream*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=12 (7)
-...
-SHELL32.dll!ILSaveToStream*
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=12 (8)
-...
-SHELL32.dll!SHFileOperation*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=12 (9)
-...
-SHELL32.dll!SHGetItemFromDataObject
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=12 (10)
-...
-SHELL32.dll!SHGetItemFromDataObject
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=12 (11)
-...
-ole32.dll!*
-SHELL32.dll!SHChangeNotifySuspendResume
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=14 (1)
-...
-*!CreateProcess*
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=14 (2)
-...
-*!CreateProcess*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=14 (3)
-...
-*!base::LaunchApp*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=17 (1)
-...
-*!CreateWindow*
-
-POSSIBLE LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=17 (2)
-GDI32.dll!*
-GDI32.dll!CreateFontIndirectExW
-GDI32.dll!CreateFontIndirectW
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=17 (3)
-KERNELBASE.dll!LocalAlloc
-...
-USER32.dll!CreateWindow*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=18 a
-...
-*!CoInitialize*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=18 b
-...
-*!CoCreateInstance*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=18 c
-...
-*!CoUninitialize*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=18 d
-...
-UxTheme.dll!*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=40 a
-...
-WINSPOOL.DRV!*
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=40 b
-...
-WINSPOOL.DRV!*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=48 a
-system call NtContinue
-...
-*!*SetThreadName
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=48 b
-system call NtContinue
-*!WTF::initializeCurrentThreadInternal
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=52 a
-...
-DBGHELP.dll!SymInitialize
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=52 b
-...
-DBGHELP.dll!SymEnumSourceFiles
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=52 c
-...
-msvcrt.dll!_RTDynamicCast
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=52 bit-level fp in dbghelp
-instruction=test 0x*(%*) $0x??
-DBGHELP.dll!SymUnloadModule64
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=53
-ADVAPI32.dll!WmiMofEnumerateResourcesA
-ADVAPI32.dll!WmiMofEnumerateResourcesA
-ADVAPI32.dll!Sta*TraceW
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=58
-...
-*!_cfltcvt_l
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=60
-USP10.dll!*
-...
-USP10.dll!ScriptStringAnalyse
-
-LEAK
-IMM32.dll!ImmGetIMCCSize
-IMM32.dll!ImmLockClientImc
-IMM32.dll!ImmDisableIME
-IMM32.dll!ImmSetActiveContext
-USER32.dll!IMPSetIMEA
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=65 a
-...
-*!SystemFunction036
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=65 b
-...
-*!talk_base::CreateRandomString
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=68 a
-...
-WS2_32.dll!*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=68 b
-...
-ADVAPI32.dll!SetSecurityDescriptorDacl
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=68 c
-...
-MSWSOCK.dll!WSPStartup
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=68 d
-...
-ntdll.dll!RtlValidateUnicodeString
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=256
-*!_mtinit
-*!__tmainCRTStartup
-*!mainCRTStartup
-
-POSSIBLE LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=274 a
-...
-GDI32.dll!CreateDCW
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=274 b
-...
-GDI32.dll!CreateDCW
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=275
-...
-*!_getptd*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=276
-...
-ntdll.dll!RtlConvertUlongToLargeInteger
-ntdll.dll!RtlConvertUlongToLargeInteger
-ntdll.dll!KiUserExceptionDispatcher
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=305
-*!free
-*!free
-*!operator new
-...
-*!MiniDumpWriteDump
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=346 a
-...
-GDI32.dll!CloseEnhMetaFile
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=346 b
-GDI32.dll!SetPolyFillMode
-GDI32.dll!CreateICW
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=362
-USER32.dll!UnregisterClass*
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=382
-...
-ntdll.dll!CsrNewThread
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=397
-system call NtDeviceIoControlFile InputBuffer
-ADVAPI32.dll!ImpersonateAnonymousToken
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=407 a
-system call NtRequestWaitReplyPort
-RPCRT4.dll!I_RpcSendReceive
-RPCRT4.dll!NdrSendReceive
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=407 b
-IMM32.dll!*
-ntdll.dll!LdrInitializeThunk
-ntdll.dll!LdrShutdownThread
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=412 a
-ADVAPI32.dll!RegDeleteValue*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=412 b
-...
-ADVAPI32.dll!Crypt*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=412 c
-...
-RPCRT4.dll!NdrClientCall2
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=412 d
-RSAENH.dll!DllUnregisterServer
-...
-ADVAPI32.dll!CryptAcquireContextA
-CRYPT32.dll!CryptEnumOIDFunction
-...
-CRYPT32.dll!CertFindCertificateInStore
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=412 e
-...
-RSAENH.dll!CPGenRandom
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=412 f
-...
-CRYPT??.dll!Crypt*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=412 g
-*!replace_memcmp
-...
-*!testing::internal::CmpHelperEQ*
-...
-*!SymmetricKeyTest_ImportGeneratedKey_Test::TestBody
-
-# We get these sometimes from AesEncrypt and AesExpandKey. AesEncrypt doesn't
-# have frame pointers, and we have trouble unwinding from it. Therefore, we use
-# this broad suppression, effectively disabling uninit checks in rsaenh.dll.
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=412 h
-RSAENH.dll!*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=425 a
-CLBCatQ.DLL!DestroyStgDatabase
-CLBCatQ.DLL!PostError
-CLBCatQ.DLL!PostError
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=425 b
-RPCRT4.dll!I_RpcBCacheFree
-RPCRT4.dll!I_RpcBCacheFree
-...
-RPCRT4.dll!NdrClientCall2
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=425 c
-msdmo.dll!*
-msdmo.dll!*
-DEVENUM.DLL!*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=435 a
-...
-ntdll.dll!RtlSetSecurityObject
-ntdll.dll!RtlNewSecurityObjectEx
-ADVAPI32.dll!CreatePrivateObjectSecurityEx
-NTMARTA.dll!AccRewriteSetNamedRights
-
-POSSIBLE LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=435 b
-WLDAP32.dll!Ordinal325
-...
-WLDAP32.dll!Ordinal325
-ntdll.dll!LdrInitializeThunk
-ntdll.dll!LdrFindResourceDirectory_U
-ntdll.dll!RtlValidateUnicodeString
-ntdll.dll!LdrLoadDll
-KERNEL32.dll!LoadLibraryExW
-
-# mod+offs suppression because the symbolic makes no sense and changes
-# completely in the presence of WS2_32.dll symbols.
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=438
-<WS2_32.dll+0x260c>
-<WS2_32.dll+0x2b76>
-<WS2_32.dll+0x2c61>
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=454 a
-...
-WINMM.dll!wave*GetNumDevs
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=454 b
-...
-WINMM.dll!wave*GetNumDevs
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=466
-ntdll.dll!RtlRunOnceBeginInitialize
-ntdll.dll!RtlInitializeCriticalSectionAndSpinCount
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=471 a
-*!media::AudioRendererAlgorithmOLA::Crossfade<unsigned char>
-*!media::AudioRendererAlgorithmOLA::FillBuffer
-*!media::AudioRendererAlgorithmOLATest_FillBuffer_*
-
-# Uninit reported in copy ctor. Would be nice if we could specify which ctor
-# overload to suppress.
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=471 b
-*!WebCore::FormDataElement::FormDataElement
-
-# Another default copy ctor uninit.
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=471 c
-*!WebCore::CachedResourceLoader::InitiatorInfo::InitiatorInfo
-...
-*!WTF::Hash*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=473 a
-system call NtDeviceIoControlFile InputBuffer
-...
-iphlpapi.dll!GetAdaptersAddresses
-
-POSSIBLE LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=473 b
-ESENT.dll!*
-ESENT.dll!*
-ESENT.dll!*
-ntdll.dll!Ldr*Init*
-ntdll.dll!Ldr*
-ntdll.dll!*
-ntdll.dll!LdrLoadDll
-...
-iphlpapi.dll!GetPerAdapterInfo
-...
-iphlpapi.dll!GetAdaptersAddresses
-
-POSSIBLE LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=473 c
-RPCRT4.dll!*
-RPCRT4.dll!*
-...
-IPHLPAPI.DLL!GetAdaptersAddresses
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=475
-...
-ADVAPI32.dll!CryptAcquireContextA
-...
-CRYPT32.dll!CryptMsgOpenToDecode
-...
-CRYPT32.dll!CryptQueryObject
-
-# Lots of leaks from our interactions with the system certificate store. May be
-# worth reviewing our use of their API.
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=476 a
-KERNEL*.dll!LocalAlloc
-...
-CRYPT32.dll!CertGetCRLContextProperty
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=476 b
-KERNEL*.dll!LocalAlloc
-...
-CRYPT32.dll!CertAddCRLContextToStore
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=476 c
-KERNEL*.dll!LocalAlloc
-...
-CRYPT32.dll!CertOpenStore
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=476 d
-...
-CRYPT32.dll!CertOpenSystemStore?
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=476 e
-...
-CRYPT32.dll!CertGetCertificateChain
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=476 f
-...
-CRYPT32.dll!CertCompareIntegerBlob
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=476 g
-...
-CRYPT32.dll!CryptUnprotectData
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=476 h
-KERNEL*.dll!LocalAlloc
-...
-CRYPT32.dll!CertEnumCertificatesInStore
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=476 i
-...
-CRYPT32.dll!CryptProtectData
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=476 j
-...
-CRYPT32.dll!CryptExportPublicKeyInfoEx
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=502 a
-system call NtSecureConnectPort parameter #3
-GDI32.dll!*
-GDI32.dll!*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=502 b
-system call NtGdiEnumFonts parameter #6
-GDI32.dll!*
-GDI32.dll!*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=511 a
-RPCRT4.dll!...
-ole32.dll!*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=511 b
-ole32.dll!*
-ole32.dll!*
-ole32.dll!StringFromGUID2
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=512 a
-...
-*!browser_sync::Cryptographer::PackBootstrapToken
-*!browser_sync::Cryptographer::GetBootstrapToken
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=512 b
-...
-*!Encrypt*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=513 a
-*!v8*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=513 b
-*!*
-*!v8*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=513 c
-<not in a module>
-...
-*!v8*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=546
-...
-mscms.dll!*
-...
-GDI32.dll!*
-*!IconUtil::Create*HICON*
-
-LEAK
-name=http://crbug.com/92152
-...
-USER32.dll!CreateWindowExW
-*!views::TooltipManagerWin::Init
-*!views::TooltipManagerWin::TooltipManagerWin
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=567 a
-dbghelp.dll!*
-...
-dbghelp.dll!StackWalk64
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=567 b
-*!*
-dbghelp.dll!*
-...
-dbghelp.dll!StackWalk64
-
-# Symbols w/o PDB make no sense, first ntdll frame is TpSetTimer w/o syms and
-# TppWorkerThread w/ syms. We used to use mod+offs here, but that was too
-# brittle, so we switched to RPCRT4.dll!*.
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=569
-RPCRT4.dll!...
-ntdll.dll!*
-ntdll.dll!*
-KERNEL*.dll!BaseThreadInitThunk
-
-# TODO(timurrrr): investigate these
-UNINITIALIZED READ
-name=http://crbug.com/TODO a
-...
-*!win_util::GetLogonSessionOnlyDACL
-
-UNINITIALIZED READ
-name=http://crbug.com/TODO b
-...
-ntshrui.dll!IsPathSharedW
-
-UNINITIALIZED READ
-name=http://crbug.com/TODO c
-...
-*!NetApiBufferFree
-
-UNINITIALIZED READ
-name=http://crbug.com/TODO d
-...
-*!ShellExecute*
-
-UNINITIALIZED READ
-name=http://crbug.com/TODO e
-...
-*!SHParseDisplayName
-
-UNINITIALIZED READ
-name=http://crbug.com/TODO f
-...
-*!GetCanonicalPathInfo*
-
-UNINITIALIZED READ
-name=http://crbug.com/TODO g
-...
-SHELL32.dll!Ordinal*
-
-UNINITIALIZED READ
-name=http://crbug.com/TODO h
-...
-GDI32.dll!GetTextExtentPoint32*
-
-UNINITIALIZED READ
-name=http://crbug.com/TODO i
-...
-*!SyncSocketClientListener::OnMsgClassResponse
-
-UNINITIALIZED READ
-name=http://crbug.com/TODO j
-...
-*!*NSPRInitSingleton*
-
-UNINITIALIZED READ
-name=http://crbug.com/TODO k
-*!NdrSimpleStructFree
-
-UNINITIALIZED READ
-name=http://crbug.com/TODO l
-ntdll.dll!RtlpNtOpenKey
-ntdll.dll!RtlMakeSelfRelativeSD
-ntdll.dll!RtlAbsoluteToSelfRelativeSD
-ADVAPI32.dll!MakeSelfRelativeSD
-
-UNINITIALIZED READ
-name=http://crbug.com/TODO m
-...
-CRYPT32.dll!I_CertSyncStore
-
-# This matches the same stack as DrMem i#751, but it's an uninit read instead of
-# a leak. Must be some early thread initialization. Doesn't look like
-# bit-level though.
-UNINITIALIZED READ
-name=http://crbug.com/TODO n
-RPCRT4.dll!*
-RPCRT4.dll!*
-RPCRT4.dll!*
-ntdll.dll!*
-ntdll.dll!*
-KERNEL*.dll!BaseThreadInitThunk
-
-# No idea where this is from, but Chrome isn't even on the stack.
-POSSIBLE LEAK
-name=http://crbug.com/TODO o
-RPCRT4.dll!...
-ole32.dll!OleInitialize
-ole32.dll!...
-KERNEL32.dll!BaseThreadInitThunk
-
-# Matches lots of RPC related leaks. So far RPC handles have been mostly owned
-# by system libraries and are not something we can fix easily.
-POSSIBLE LEAK
-name=http://crbug.com/TODO p
-RPCRT4.dll!*
-RPCRT4.dll!*
-RPCRT4.dll!NDRCContextBinding
-
-# No idea, but all system code, not interesting.
-POSSIBLE LEAK
-name=http://crbug.com/TODO q
-RPCRT4.dll!...
-RPCRT4.dll!*
-RPCRT4.dll!*
-ole32.dll!...
-ole32.dll!*
-ole32.dll!*
-...
-SHELL32.dll!*
-
-LEAK
-name=http://crbug.com/109278 video device COM leaks
-...
-*!media::VideoCaptureDevice::*
-
-LEAK
-name=http://crbug.com/109278 audio device COM leaks
-...
-*!media::GetInputDeviceNamesWin
-
-# False pos uninit in shell32 when resolving links.
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=745
-SHELL*.dll!*
-...
-SHELL*.dll!*
-*!file_util::ResolveShortcut
-
-# Probable false pos uninit in ffmpeg. Probably due to running off the end of a
-# buffer with SSE/MMX instructions whose results are then masked out later.
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=747 a
-*!ff_pred4x4_vertical_vp8_mmxext
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=747 b
-*!ff_pred4x4_down_left_mmxext
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=747 c
-*!ff_vorbis_floor1_render_list
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=747 d
-*!ff_put_vp8_epel8_h6_ssse3
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=747 e
-*!ff_put_vp8_epel8_h4_ssse3
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=747 f
-*!ff_fft_permute_sse
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=747 g
-*!ff_simple_idct_add_mmx
-
-# ffmpeg seems to leak a pthread condition variable.
-LEAK
-name=http://crbug.com/110042
-*!ptw32_new
-*!pthread_self
-*!sem_wait
-*!pthread_cond_wait
-*!ff_thread_decode_frame
-*!avcodec_decode_video2
-
-# Improperly handled ioctl in bcrypt.
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=748
-system call NtDeviceIoControlFile InputBuffer
-bcrypt.dll!BCryptUnregisterConfigChangeNotify
-bcrypt.dll!BCryptGetFipsAlgorithmMode
-ntdll.dll!RtlQueryEnvironmentVariable
-
-# Not sure what this is.
-POSSIBLE LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=749
-...
-fwpuclnt.dll!*
-...
-RPCRT4.dll!*
-...
-fwpuclnt.dll!*
-...
-WS2_32.dll!*
-*!talk_base::SafeGetHostByName
-*!talk_base::SocketAddress::GetLocalIPs
-*!talk_base::SocketAddress::IsLocalIP
-*!cricket::Transport::VerifyCandidate
-*!cricket::Session::OnRemoteCandidates
-*!cricket::Session::OnTransportInfoMessage
-*!cricket::Session::OnIncomingMessage
-*!cricket::SessionManager::OnIncomingMessage
-
-# More uninit false pos in rpcrt4.dll not caught by default suppressions.
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=529
-RPCRT4.dll!*
-...
-*!base::LaunchProcess
-
-# System leak from CreateEnvironmentBlock.
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=757
-...
-USERENV.dll!CreateEnvironmentBlock
-
-# Looks like another instance of 753
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=753
-...
-ntdll.dll!RtlLoadString
-
-# More bit manip fps
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=493
-USP10.dll!ScriptPositionSingleGlyph
-
-# Various TLS leaks that we don't understand yet. We should be finding a root
-# for these.
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=778 a
-KERNELBASE.dll!TlsSetValue
-
-# Originally filed as: http://crbug.com/109281
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=778 b
-*!operator new
-*!operator new[]
-*!*::ConstructTlsVector
-*!base::ThreadLocalStorage::StaticSlot::Get
-
-# This is an NSS PRThread object installed in TLS. Why isn't this detected as a
-# root? See also http://crbug.com/32624
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=778 c
-*!PR_Calloc
-*!_PR_AttachThread
-*!_PRI_AttachThread
-
-# Bit-level fps in rich edit layer.
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=791
-RICHED20.dll!*
-RICHED20.dll!*
-
-# Already suppressed by drmemory default supp we don't have yet.
-LEAK
-name=i#757: RPC binding leaks in sspicli.dll
-RPCRT4.dll!*
-...
-SspiCli.dll!*
-SspiCli.dll!Cre*
-
-# Async NtReadFile false positives. This was fixed in drmemory r772, remove
-# this supp when we pull that rev.
-UNADDRESSABLE ACCESS
-name=http://code.google.com/p/drmemory/issues/detail?id=798
-system call NtReadFile parameter #5
-KERNEL32.dll!ReadFile
-
-# Probable syscall false positive.
-UNADDRESSABLE ACCESS
-name=http://code.google.com/p/drmemory/issues/detail?id=809
-system call NtGdiPolyPolyDraw parameter #1
-*!gfx::Path::CreateNativeRegion
-
-# Very wide suppression for all uninits in rpcrt4.dll. We get bad stack traces
-# coming out of this module (sometimes only one frame), which makes it hard to
-# write precise suppressions. Until we have bit-level tracking (DRMi#113) we
-# should keep this.
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=113 rpcrt4.dll wildcard
-RPCRT4.dll!*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=841 a
-...
-CRYPTNET.dll!I_CryptNetGetConnectivity
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=841 b
-...
-webio.dll!*
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=841 c
-...
-winhttp.dll!*
-
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=841 d
-...
-CRYPTNET.dll!I_CryptNetGetConnectivity
-
-# Often missing a ntdll.dll!KiUserCallbackDispatcher frame.
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=810
-instruction=test %edx %edx
-USER32.dll!GetClassLongW
-...
-*!ui::CenterAndSizeWindow
-
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=815
-KERNEL*.dll!...
-dxgi.dll!*
-USER32.dll!GetMonitorInfoA
-ntdll.dll!KiUserCallbackDispatcher
-dxgi.dll!*
-WinSATAPI.DLL!*
-
-# Suppress anything in cmd.exe. It's safer to suppress these than disable
-# following, since someone might launch a Chrome process via cmd.exe.
-LEAK
-name=cmd.exe
-...
-cmd.exe!*
-
-# Possible true system use after free.
-UNADDRESSABLE ACCESS
-name=http://code.google.com/p/drmemory/issues/detail?id=623
-KERNELBASE.dll!TlsGetValue
-OLEAUT32.dll!SysFreeString
-OLEAUT32.dll!SysAllocStringByteLen
-OLEACC.dll!*
-OLEACC.dll!*
-OLEACC.dll!*
-OLEACC.dll!*
-
-# basic_streambuf seems to leak something in creating a std::_Mutex
-LEAK
-name=http://code.google.com/p/drmemory/issues/detail?id=857
-ntdll.dll!...
-ntdll.dll!RtlInitializeCriticalSection
-*!_Mtxinit
-*!std::_Mutex::_Mutex
-*!std::basic_streambuf<*>
-
-# stdext::hash_map<> seems to swap uninitialized floats.
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=931
-*!std::swap<float>
-*!std::_Hash<*
-
-# syscall false positive on handling NtQuerySystemInformation, fix in soon.
-UNINITIALIZED READ
-name=http://code.google.com/p/drmemory/issues/detail?id=932
-KERNEL32.dll!K32GetPerformanceInfo
-
-# Seems to create a DC, sometimes. GetTextMetrics returns no pointers, though.
-LEAK
-name=GDI SetBrushOrgEx leak
-GDI32.dll!...
-GDI32.dll!GetTextMetricsW
-*!gfx::PlatformFontWin::CreateHFontRef
-*!gfx::PlatformFontWin::GetBaseFontRef
-
-###############################################################
-# Benign issues in Chromium
-
-# This test intentionally leaks an object and checks that it's never deleted.
-LEAK
-name=BrowserThreadTest.NotReleasedIfTargetThreadNonExistant leak
-...
-*!BrowserThreadTest_NotReleasedIfTargetThreadNonExistent_Test::TestBody
-
-LEAK
-name=deliberate histogram leak
-...
-*!replace_operator_new
-...
-*!*::*Histogram::FactoryGet
-
-LEAK
-name=deliberate leak for SampleMap
-...
-*!base::SampleMap::Accumulate
-*!base::SparseHistogram::Add
-
-LEAK
-name=deliberate LazyInstance leak
-...
-*!*LeakyLazyInstance*
-...
-*!base::LazyInstance*::Pointer
-
-LEAK
-name=http://crbug.com/79933 (1)
-...
-*!TestURLRequestContext::Init
-
-LEAK
-name=http://crbug.com/79933 (2)
-...
-*!TestURLRequestContext::TestURLRequestContext
-*!TestURLRequestContextGetter::GetURLRequestContext
-*!notifier::SingleLoginAttempt::SingleLoginAttempt
-*!notifier::Login::StartConnection
-*!syncer::InvalidationNotifier::UpdateCredentials
-*!syncer::NonBlockingInvalidationNotifier::Core::UpdateCredentials
-
-LEAK
-name=http://crbug.com/79933 (3)
-...
-*!TestURLRequestContext::TestURLRequestContext
-*!TestURLRequestContextGetter::GetURLRequestContext
-*!URLFetcher::Core::StartURLRequest
-
-LEAK
-name=http://crbug.com/79933 (4)
-*!generic_cpp_alloc
-*!operator new
-*!std::_Allocate<net::SSLConfigService::Observer *>
-*!std::allocator<net::SSLConfigService::Observer *>::allocate
-*!std::vector<net::SSLConfigService::Observer *,std::allocator<net::SSLConfigService::Observer *> >::_Insert_n
-*!std::vector<net::SSLConfigService::Observer *,std::allocator<net::SSLConfigService::Observer *> >::insert
-*!std::vector<net::SSLConfigService::Observer *,std::allocator<net::SSLConfigService::Observer *> >::push_back
-*!ObserverListBase<net::SSLConfigService::Observer>::AddObserver
-...
-*!net::HttpNetworkSession::HttpNetworkSession
-*!notifier::ProxyResolvingClientSocket::ProxyResolvingClientSocket
-*!notifier::XmppClientSocketFactory::CreateTransportClientSocket
-*!notifier::ChromeAsyncSocket::Connect
-*!buzz::XmppClient::ProcessStartXmppLogin
-*!buzz::XmppClient::Process
-*!talk_base::Task::Step
-*!talk_base::TaskRunner::InternalRunTasks
-*!talk_base::TaskRunner::RunTasks
-*!notifier::TaskPump::CheckAndRunTasks
-*!base::internal::RunnableAdapter<void (__thiscall notifier::TaskPump::*)(void)>::Run
-
-# Test intentionally leaks an object.
-LEAK
-name=http://crbug.com/86301
-*!replace_operator_new
-...
-*!*_DeadReplyLoopDoesNotDelete_Test::TestBody
-
-# Leak in a binary copy of Firefox 3's NSS dll. Not much we can do about it.
-LEAK
-name=Firefox 3 NSS dll leak
-nspr4.dll!*
-...
-*!NSSDecryptor::~NSSDecryptor
-
-# We get uninit reports inside GMock when it prints the bytes of references to
-# partially initialized objects passed to unexpected method calls.
-UNINITIALIZED READ
-name=GMock printing uninit data
-...
-*!testing::internal2::PrintBytesInObjectTo
-
-###############################################################
-# Real issues in Chromium
-
-LEAK
-name=http://crbug.com/32085
-...
-chrome.dll!NotificationRegistrar::Add
-
-LEAK
-name=http://crbug.com/32623
-...
-*!ssl3_HandleHandshakeMessage
-*!ssl3_HandleHandshake
-*!ssl3_HandleRecord
-*!ssl3_GatherCompleteHandshake
-...
-*!SSL_ForceHandshake
-*!net::SSLServerSocketNSS::DoHandshake
-*!net::SSLServerSocketNSS::DoHandshakeLoop
-
-UNINITIALIZED READ
-name=http://crbug.com/57266 (1)
-...
-*!remoting::EncoderVp8::Encode
-
-UNINITIALIZED READ
-name=http://crbug.com/57266 (2)
-...
-*!vp8_*
-
-LEAK
-name=http://crbug.com/70062
-*!PR_Calloc
-*!PR_NewLock
-...
-*!InitSessionCacheLocks
-*!initSessionCacheLocksLazily
-*!PR_CallOnce
-*!ssl_InitSessionCacheLocks
-*!lock_cache
-*!ssl_LookupSID
-*!ssl2_BeginClientHandshake
-*!ssl_Do1stHandshake
-*!SSL_ForceHandshake
-*!net::SSL*SocketNSS::DoHandshake
-*!net::SSL*SocketNSS::DoHandshakeLoop
-
-LEAK
-name=http://crbug.com/74417 a
-*!replace_operator_new
-*!disk_cache::BackendImpl::CreateEntryImpl
-
-LEAK
-name=http://crbug.com/74417 b
-*!replace_operator_new
-*!disk_cache::BackendImpl::NewEntry
-
-# One more disk_cache::BackendImpl leak. See also http://crbug.com/87500.
-LEAK
-name=http://crbug.com/74417 c
-*!replace_operator_new
-...
-*!disk_cache::EntryImpl::UserBuffer::UserBuffer
-
-LEAK
-name=http://crbug.com/75247
-...
-*!replace_operator_new
-*!AutofillDownloadTestHelper::AutofillDownloadTestHelper
-
-LEAK
-name=http://crbug.com/78784
-*!generic_cpp_alloc
-*!operator new
-*!TestingProfile::CreateRequestContext
-*!*ProfileSyncService*::SetUp
-
-LEAK
-name=http://crbug.com/80550 (1)
-...
-*!RenderWidgetHost::WasHidden
-
-LEAK
-name=http://crbug.com/80550 (2)
-...
-*!RenderWidgetHost::WasRestored
-
-LEAK
-name=http://crbug.com/87612
-...
-*!SSL_ConfigSecureServer
-*!net::SSLServerSocketNSS::InitializeSSLOptions
-*!net::SSLServerSocketNSS::Handshake
-
-LEAK
-name=http://crbug.com/88640
-*!generic_cpp_alloc
-*!operator new
-*!ProfileImpl::InitRegisteredProtocolHandlers
-*!ProfileImpl::DoFinalInit
-*!ProfileImpl::OnPrefsLoaded
-
-LEAK
-name=http://crbug.com/91465
-*!generic_cpp_alloc
-*!operator new
-*!browser_sync::internal::WeakHandleCore<browser_sync::JsBackend>::*
-*!browser_sync::WeakHandle<browser_sync::JsBackend>::*
-*!syncer::SyncManager::SyncInternal::Init
-
-LEAK
-name=http://crbug.com/91491
-...
-*!CrxUpdateService::ProcessPendingItems
-
-UNINITIALIZED READ
-name=http://crbug.com/92026 (1)
-softokn3.dll!FC_GetFunctionList
-...
-softokn3.dll!NSC_ModuleDBFunc
-
-UNINITIALIZED READ
-name=http://crbug.com/92026 (2)
-freebl3.dll!FREEBL_GetVector
-...
-softokn3.dll!NSC_ModuleDBFunc
-
-LEAK
-name=http://crbug.com/92166
-...
-*!replace_operator_new
-*!views::NativeWidgetWin::OnCreate
-
-# Possible real Chromium issue in DoCrossfade.
-UNINITIALIZED READ
-name=http://crbug.com/110049
-*!media::DoCrossfade<*>
-*!media::Crossfade
-*!media::AudioRendererAlgorithmBase::FillBuffer
-
-# Known sqlite3 leaks.
-LEAK
-name=http://crbug.com/113847 (1)
-...
-*!sqlite3MemMalloc
-*!mallocWithAlarm
-*!sqlite3Malloc
-...
-*!yy_reduce
-
-LEAK
-name=http://crbug.com/113847 (2)
-...
-*!openDatabase
-*!sqlite3_open
-
-LEAK
-name=http://crbug.com/115328
-...
-*!GenericInfoViewTest_GenericInfoView_Test::TestBody
-
-UNINITIALIZED READ
-name=http://crbug.com/116277
-*!MOZ_Z_deflate
-*!zipCloseFileInZipRaw64
-
-LEAK
-name=http://crbug.com/117427 a
-...
-*!net::HostCache::Set
-*!net::HostResolverImpl::CacheResult
-*!net::HostResolverImpl::Job::CompleteRequests
-*!net::HostResolverImpl::Job::OnProcTaskComplete
-*!base::internal::RunnableAdapter<void (__thiscall net::HostResolverImpl::Job::*)(int,net::AddressList const &)>::Run
-
-# Probably related to 117427. Someone is not tearing down DNS resolution during
-# testing.
-LEAK
-name=http://crbug.com/117427 b
-*!generic_cpp_alloc
-*!operator new
-*!base::internal::WeakReferenceOwner::GetRef
-*!base::SupportsWeakPtr<net::HostResolverImpl>::AsWeakPtr
-*!net::HostResolverImpl::Job::Job
-*!net::HostResolverImpl::Resolve
-*!net::SingleRequestHostResolver::Resolve
-*!net::TransportConnectJob::DoResolveHost
-*!net::TransportConnectJob::DoLoop
-*!net::TransportConnectJob::ConnectInternal
-*!net::ConnectJob::Connect
-*!net::internal::ClientSocketPoolBaseHelper::RequestSocketInternal
-*!net::internal::ClientSocketPoolBaseHelper::RequestSocket
-*!net::ClientSocketPoolBase<net::TransportSocketParams>::RequestSocket
-*!net::TransportClientSocketPool::RequestSocket
-*!net::ClientSocketHandle::Init<net::TransportSocketParams,net::TransportClientSocketPool>
-*!net::`anonymous namespace'::InitSocketPoolHelper
-*!net::InitSocketHandleForRawConnect
-*!notifier::ProxyResolvingClientSocket::ProcessProxyResolveDone
-*!base::internal::RunnableAdapter<void (__thiscall notifier::ProxyResolvingClientSocket::*)(int)>::Run
-
-# IE frame possible leak of COM object.
-LEAK
-name=http://crbug.com/122399
-ole32.dll!...
-ole32.dll!CoTaskMemAlloc
-urlmon.dll!...
-urlmon.dll!CreateUri
-IEFRAME.dll!*
-
-# RenderWidgetHelper leak in DelayProfileDestruction test.
-LEAK
-name=http://crbug.com/125565
-*!generic_cpp_alloc
-*!operator new
-*!RenderProcessHostImpl::RenderProcessHostImpl
-*!SiteInstanceImpl::GetProcess
-*!BrowserTestOffTheRecord_DelayProfileDestruction_Test::TestBody
-
-LEAK
-name=http://crbug.com/125807
-*!generic_cpp_alloc
-*!operator new
-*!TransportSecurityPersister::TransportSecurityPersister
-*!TransportSecurityPersisterTest::TransportSecurityPersisterTest
diff --git a/chromium/tools/valgrind/drmemory_analyze.py b/chromium/tools/valgrind/drmemory_analyze.py
deleted file mode 100755
index 7a82b461f3c..00000000000
--- a/chromium/tools/valgrind/drmemory_analyze.py
+++ /dev/null
@@ -1,193 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-# drmemory_analyze.py
-
-''' Given a Dr. Memory output file, parses errors and uniques them.'''
-
-from collections import defaultdict
-import common
-import hashlib
-import logging
-import optparse
-import os
-import re
-import subprocess
-import sys
-import time
-
-class DrMemoryError:
- def __init__(self, report, suppression, testcase):
- self._report = report
- self._testcase = testcase
-
- # Chromium-specific transformations of the suppressions:
- # Replace 'any_test.exe' and 'chrome.dll' with '*', then remove the
- # Dr.Memory-generated error ids from the name= lines as they don't
- # make sense in a multiprocess report.
- supp_lines = suppression.split("\n")
- for l in xrange(len(supp_lines)):
- if supp_lines[l].startswith("name="):
- supp_lines[l] = "name=<insert_a_suppression_name_here>"
- if supp_lines[l].startswith("chrome.dll!"):
- supp_lines[l] = supp_lines[l].replace("chrome.dll!", "*!")
- bang_index = supp_lines[l].find("!")
- d_exe_index = supp_lines[l].find(".exe!")
- if bang_index >= 4 and d_exe_index + 4 == bang_index:
- supp_lines[l] = "*" + supp_lines[l][bang_index:]
- self._suppression = "\n".join(supp_lines)
-
- def __str__(self):
- output = self._report + "\n"
- if self._testcase:
- output += "The report came from the `%s` test.\n" % self._testcase
- output += "Suppression (error hash=#%016X#):\n" % self.ErrorHash()
- output += (" For more info on using suppressions see "
- "http://dev.chromium.org/developers/how-tos/using-drmemory#TOC-Suppressing-error-reports-from-the-\n")
- output += "{\n%s\n}\n" % self._suppression
- return output
-
- # This is a device-independent hash identifying the suppression.
- # By printing out this hash we can find duplicate reports between tests and
- # different shards running on multiple buildbots
- def ErrorHash(self):
- return int(hashlib.md5(self._suppression).hexdigest()[:16], 16)
-
- def __hash__(self):
- return hash(self._suppression)
-
- def __eq__(self, rhs):
- return self._suppression == rhs
-
-
-class DrMemoryAnalyzer:
- ''' Given a set of Dr.Memory output files, parse all the errors out of
- them, unique them and output the results.'''
-
- def __init__(self):
- self.known_errors = set()
- self.error_count = 0;
-
- def ReadLine(self):
- self.line_ = self.cur_fd_.readline()
-
- def ReadSection(self):
- result = [self.line_]
- self.ReadLine()
- while len(self.line_.strip()) > 0:
- result.append(self.line_)
- self.ReadLine()
- return result
-
- def ParseReportFile(self, filename, testcase):
- ret = []
-
- # First, read the generated suppressions file so we can easily lookup a
- # suppression for a given error.
- supp_fd = open(filename.replace("results", "suppress"), 'r')
- generated_suppressions = {} # Key -> Error #, Value -> Suppression text.
- for line in supp_fd:
- # NOTE: this regexp looks fragile. Might break if the generated
- # suppression format slightly changes.
- m = re.search("# Suppression for Error #([0-9]+)", line.strip())
- if not m:
- continue
- error_id = int(m.groups()[0])
- assert error_id not in generated_suppressions
- # OK, now read the next suppression:
- cur_supp = ""
- for supp_line in supp_fd:
- if supp_line.startswith("#") or supp_line.strip() == "":
- break
- cur_supp += supp_line
- generated_suppressions[error_id] = cur_supp.strip()
- supp_fd.close()
-
- self.cur_fd_ = open(filename, 'r')
- while True:
- self.ReadLine()
- if (self.line_ == ''): break
-
- match = re.search("^Error #([0-9]+): (.*)", self.line_)
- if match:
- error_id = int(match.groups()[0])
- self.line_ = match.groups()[1].strip() + "\n"
- report = "".join(self.ReadSection()).strip()
- suppression = generated_suppressions[error_id]
- ret.append(DrMemoryError(report, suppression, testcase))
-
- if re.search("SUPPRESSIONS USED:", self.line_):
- self.ReadLine()
- while self.line_.strip() != "":
- line = self.line_.strip()
- (count, name) = re.match(" *([0-9]+)x(?: \(leaked .*\))?: (.*)",
- line).groups()
- count = int(count)
- self.used_suppressions[name] += count
- self.ReadLine()
-
- if self.line_.startswith("ASSERT FAILURE"):
- ret.append(self.line_.strip())
-
- self.cur_fd_.close()
- return ret
-
- def Report(self, filenames, testcase, check_sanity):
- sys.stdout.flush()
- # TODO(timurrrr): support positive tests / check_sanity==True
- self.used_suppressions = defaultdict(int)
-
- to_report = []
- reports_for_this_test = set()
- for f in filenames:
- cur_reports = self.ParseReportFile(f, testcase)
-
- # Filter out the reports that were there in previous tests.
- for r in cur_reports:
- if r in reports_for_this_test:
- # A similar report is about to be printed for this test.
- pass
- elif r in self.known_errors:
- # A similar report has already been printed in one of the prev tests.
- to_report.append("This error was already printed in some "
- "other test, see 'hash=#%016X#'" % r.ErrorHash())
- reports_for_this_test.add(r)
- else:
- self.known_errors.add(r)
- reports_for_this_test.add(r)
- to_report.append(r)
-
- common.PrintUsedSuppressionsList(self.used_suppressions)
-
- if not to_report:
- logging.info("PASS: No error reports found")
- return 0
-
- sys.stdout.flush()
- sys.stderr.flush()
- logging.info("Found %i error reports" % len(to_report))
- for report in to_report:
- self.error_count += 1
- logging.info("Report #%d\n%s" % (self.error_count, report))
- logging.info("Total: %i error reports" % len(to_report))
- sys.stdout.flush()
- return -1
-
-
-def main():
- '''For testing only. The DrMemoryAnalyze class should be imported instead.'''
- parser = optparse.OptionParser("usage: %prog <files to analyze>")
-
- (options, args) = parser.parse_args()
- if len(args) == 0:
- parser.error("no filename specified")
- filenames = args
-
- logging.getLogger().setLevel(logging.INFO)
- return DrMemoryAnalyzer().Report(filenames, None, False)
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/valgrind/gdb_helper.py b/chromium/tools/valgrind/gdb_helper.py
deleted file mode 100644
index 548ee9474e6..00000000000
--- a/chromium/tools/valgrind/gdb_helper.py
+++ /dev/null
@@ -1,87 +0,0 @@
-# Copyright (c) 2011 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.
-
-''' A bunch of helper functions for querying gdb.'''
-
-import logging
-import os
-import re
-import tempfile
-
-GDB_LINE_RE = re.compile(r'Line ([0-9]*) of "([^"]*)".*')
-
-def _GdbOutputToFileLine(output_line):
- ''' Parse the gdb output line, return a pair (file, line num) '''
- match = GDB_LINE_RE.match(output_line)
- if match:
- return match.groups()[1], match.groups()[0]
- else:
- return None
-
-def ResolveAddressesWithinABinary(binary_name, load_address, address_list):
- ''' For each address, return a pair (file, line num) '''
- commands = tempfile.NamedTemporaryFile()
- commands.write('add-symbol-file "%s" %s\n' % (binary_name, load_address))
- for addr in address_list:
- commands.write('info line *%s\n' % addr)
- commands.write('quit\n')
- commands.flush()
- gdb_commandline = 'gdb -batch -x %s 2>/dev/null' % commands.name
- gdb_pipe = os.popen(gdb_commandline)
- result = gdb_pipe.readlines()
-
- address_count = 0
- ret = {}
- for line in result:
- if line.startswith('Line'):
- ret[address_list[address_count]] = _GdbOutputToFileLine(line)
- address_count += 1
- if line.startswith('No line'):
- ret[address_list[address_count]] = (None, None)
- address_count += 1
- gdb_pipe.close()
- commands.close()
- return ret
-
-class AddressTable(object):
- ''' Object to do batched line number lookup. '''
- def __init__(self):
- self._load_addresses = {}
- self._binaries = {}
- self._all_resolved = False
-
- def AddBinaryAt(self, binary, load_address):
- ''' Register a new shared library or executable. '''
- self._load_addresses[binary] = load_address
-
- def Add(self, binary, address):
- ''' Register a lookup request. '''
- if binary == '':
- logging.warn('adding address %s in empty binary?' % address)
- if binary in self._binaries:
- self._binaries[binary].append(address)
- else:
- self._binaries[binary] = [address]
- self._all_resolved = False
-
- def ResolveAll(self):
- ''' Carry out all lookup requests. '''
- self._translation = {}
- for binary in self._binaries.keys():
- if binary != '' and binary in self._load_addresses:
- load_address = self._load_addresses[binary]
- addr = ResolveAddressesWithinABinary(
- binary, load_address, self._binaries[binary])
- self._translation[binary] = addr
- self._all_resolved = True
-
- def GetFileLine(self, binary, addr):
- ''' Get the (filename, linenum) result of a previously-registered lookup
- request.
- '''
- if self._all_resolved:
- if binary in self._translation:
- if addr in self._translation[binary]:
- return self._translation[binary][addr]
- return (None, None)
diff --git a/chromium/tools/valgrind/gtest_exclude/OWNERS b/chromium/tools/valgrind/gtest_exclude/OWNERS
deleted file mode 100644
index 72e8ffc0db8..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-*
diff --git a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest-drmemory_win32.txt b/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest-drmemory_win32.txt
deleted file mode 100644
index 9367fd60520..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest-drmemory_win32.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-# TODO(timurrrr) investigate the failures and enable these tests one-by-one.
-RSA*
-GmockTest.*
-EtwTrace*
-StatsTableTest.*
-ProcessUtilTest.EnableLFH
-ScopedNativeLibrary.Basic
-# TODO(zhaoqin) investigate the failures and enable it later, 106043
-ConditionVariableTest.LargeFastTaskTest
-# Next test creates a child that crashes, which naturally generates an
-# unaddressable report as well as a handful of leak reports that we don't need
-# to see.
-ProcessUtilTest.GetTerminationStatusCrash
-# See crbug.com/130668
-ProcessUtilTest.GetTerminationStatusKill
-ProcessUtilTest.KillSlowChild
-ProcessUtilTest.SpawnChild
-ScopedProcessInformationTest.Duplicate
-ScopedProcessInformationTest.Swap
-ScopedProcessInformationTest.TakeBoth
-ScopedProcessInformationTest.TakeProcess
-ScopedProcessInformationTest.TakeWholeStruct
-SharedMemoryProcessTest.Tasks
-
-# crbug/144018
-StartupInformationTest.InheritStdOut
diff --git a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest-tsan.txt b/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest-tsan.txt
deleted file mode 100644
index 1f81beacd4a..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest-tsan.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-# Don't run this test under TSan, it takes ~1-2 minutes to pass.
-ProcessUtilTest.GetAppOutputRestrictedNoZombies
-
-# Don't run Memcheck sanity tests under ThreadSanitizer since they can
-# corrupt memory.
-ToolsSanityTest.*Memory*
-ToolsSanityTest.*Delete*
-
-# TSan doesn't understand SharedMemory locks, see http://crbug.com/45083
-StatsTableTest.*MultipleThreads
diff --git a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest-tsan_win32.txt b/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest-tsan_win32.txt
deleted file mode 100644
index 744ba0f5b5f..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest-tsan_win32.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-# Occasionally fails under TSan, see http://crbug.com/54229
-ProcessUtilTest.CalcFreeMemory
-
-# This file is copied from Valgrind-on-Wine filter
-# TODO(timurrrr): include/investigate the listed tests one-by-one
-EtwTraceControllerTest.EnableDisable
-EtwTraceConsumer*Test.*
-EtwTraceProvider*Test.*
-JSONReaderTest.Reading
-TimeTicks.*
-WMIUtilTest.*
-
-# Too slow under TSan
-ConditionVariableTest.LargeFastTaskTest
-
-# Fails under TSan: http://crbug.com/93843
-MessageLoopTest.RecursiveDenial3
-
-# Crashes under TSan: http://crbug.com/115107
-WorkerPoolTest.PostTask
-
-# Times out on Win7, slow on Vista: http://crbug.com/106531
-TraceEventTestFixture.DataCapturedManyThreads
-
-# Fails and times out occasionally. http://crbug.com/308273
-TraceEventTestFixture.TraceContinuousSampling
-TraceEventTestFixture.TraceSampling
-TraceEventTestFixture.TraceSamplingScope
diff --git a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest.txt b/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest.txt
deleted file mode 100644
index 35c209db10f..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-# This test currently times out in valgrind, see http://crbug.com/9194
-WatchdogTest.AlarmTest
-
-# These tests occassionally hangs under Valgrind on Mac. valgrind-darwin r9573
-# Revisit with better valgrind.
-# Valgrind bug: https://bugs.kde.org/show_bug.cgi?id=189661
-TimerTest.RepeatingTimer
-TimerTest.RepeatingTimer_Cancel
-
-# Crashes occasionally, see http://crbug.com/7477
-ObserverListThreadSafeTest.CrossThreadObserver
-ObserverListThreadSafeTest.CrossThreadNotifications
-
-# Hangs sometimes on linux, see http://crbug.com/22138
-ClipboardTest.*
-
-# These tests trigger a CHECK so they will leak memory. They don't test
-# anything else, so just disable them on valgrind. Bug 28179.
-OutOfMemoryDeathTest.*
-
-# Flaky under slow tools or just when the VM is under load.
-# See http://crbug.com/43972
-ConditionVariableTest.LargeFastTaskTest
-
-# Flaky under Valgrind, see http://crbug.com/55517
-PlatformFile.TouchGetInfoPlatformFile
diff --git a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest_mac.txt b/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest_mac.txt
deleted file mode 100644
index 937bf281d36..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest_mac.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-# Fails on Valgrind/Mac, see http://crbug.com/43972
-ConditionVariableTest.LargeFastTaskTest
-
-# Fails on Valgrind/Mac due to missing syscall wrapper
-# for the symlink() syscall. See http://crbug.com/44001
-FileUtilTest.NormalizeFilePathSymlinks
-
-# Fails on Valgrind/Mac, see http://crbug.com/53196
-CancellationFlagTest.SetOnDifferentThreadDeathTest
-
-# Fails on Valgrind/Mac, see http://crbug.com/93722
-ProcessMemoryTest.MacTerminateOnHeapCorruption
-
-# Fails on Valgrind/Mac, see http://crbug.com/122080
-ProcessMemoryTest.MacMallocFailureDoesNotTerminate
-
-# Times out on Valgrind/Mac, see http://crbug.com/172044
-MessageLoopTestTypeUI.RecursivePosts
-MessageLoopTestTypeIO.RecursivePosts
-MessageLoopTestTypeDefault.RecursivePosts
diff --git a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest_win-8.txt b/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest_win-8.txt
deleted file mode 100644
index 1d24cdf8e52..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest_win-8.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-# Fails natively as well: http://crbug.com/251517
-PEImageTest.EnumeratesPE
diff --git a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest_win32.txt b/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest_win32.txt
deleted file mode 100644
index 840a3035070..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest_win32.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-# Too slow under Valgrind/Wine and TSan/Windows
-TimeTicks.WinRollover
-
-# Very sensitive to slowdown
-TimeTicks.Deltas
-TimeTicks.HighResNow
-TimerTest.RepeatingTimer*
-
-# This Windows-native sampling profiler test does not work under our tools
-# because it assumes the original code runs, not the modified version
-# with instrumentation. See http://crbug.com/106829
-SamplingProfilerTest.Sample
diff --git a/chromium/tools/valgrind/gtest_exclude/browser_tests.gtest-drmemory_win32.txt b/chromium/tools/valgrind/gtest_exclude/browser_tests.gtest-drmemory_win32.txt
deleted file mode 100644
index 0b4079d5212..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/browser_tests.gtest-drmemory_win32.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-# TODO(zhaoqin): File bugs for those failing browser tests.
-
-# Dr.Memory i#1052: http://code.google.com/p/drmemory/issues/detail?id=1052
-#
-# The list is too long for gtest_filter, so we exclude the whole
-# test case if any of its tests failed.
-*FLAKY*
-
-# it takes too long to run all browser_tests with Dr.Memory,
-# and we only select subset to run
-# A*: ~70 tests
-A*
-# DrM-i#1052-c#52
-# AutofillTest.*
-# AcceleratedCompositingBlockedTest.*
-# AppApiTest.*
-# BrowserAccessibilityStateImplTest.*
-B*
-C*
-D*
-E*
-F*
-G*
-# H*: ~35 tests
-H*
-# DrM-i#1052-c#53
-# HistoryWebUITest.*
-# I*: ~10 tests
-# DrM-i#1052-c#53
-InfoBarsTest.*
-# J*: 0 tests
-# K*: 1 tests
-L*
-M*
-N*
-O*
-P*
-Q*
-R*
-S*
-T*
-# U*: ~20 tests
-# DrM-i#1052-c#53
-UnloadTest.*
-# V*: 5 tests
-# W*: ~150 tests
-W*
-# X*: 0 tests
-# Y*: 0 tests
-# Z*: 0 tests
-
-# http://crbug.com/302993
-InstantNTPURLRewriteTest.UberURLHandler_InstantExtendedNewTabPage
-
-# http://crbug.com/328936
-IEImporterBrowserTest.IEImporter
diff --git a/chromium/tools/valgrind/gtest_exclude/browser_tests.gtest-memcheck.txt b/chromium/tools/valgrind/gtest_exclude/browser_tests.gtest-memcheck.txt
deleted file mode 100644
index bad2936a0ea..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/browser_tests.gtest-memcheck.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-# Don't run FLAKY or FAILS ui tests under Valgrind.
-# They tend to generate way too many flaky Valgrind reports.
-*FLAKY_*
-*FAILS_*
-
-# NaCl tests fail with Data Execution Prevention error http://crbug.com/104517
-NaClGdbTest.Empty
-PPAPINaClGLibcTest.*
-PPAPINaClNewlibTest.*
-PPAPINaClTest*
-
-# http://crbug.com/109336
-OutOfProcessPPAPITest.View_PageHideShow
-
-# TODO(thestig) File bugs for these failing browser tests.
-AllUrlsApiTest.WhitelistedExtension
-AppBackgroundPageApiTest.NoJsManifestBackgroundPage
-BrowserCloseTest.DownloadsCloseCheck_2
-BrowserCloseTest.DownloadsCloseCheck_5
-BrowserEncodingTest.SLOW_TestEncodingAliasMapping
-BrowserNavigatorTest.Disposition_Bookmarks_DoNothingIfIncognitoIsForced
-BrowserNavigatorTest.Disposition_Incognito
-BrowserNavigatorTest.Disposition_SyncPromo_DoNothingIfIncognitoIsForced
-BrowserTest.ForwardDisabledOnForward
-ClickToPlayPluginTest.Basic
-ClickToPlayPluginTest.LoadAllBlockedPlugins
-ClickToPlayPluginTest.NoCallbackAtLoad
-DevToolsExperimentalExtensionTest.TestDevToolsExperimentalExtensionAPI
-DevToolsExtensionTest.TestDevToolsExtensionMessaging
-DownloadExtensionTest.DownloadExtensionTest_FileIcon_Active
-DownloadExtensionTest.DownloadExtensionTest_FileIcon_History
-DownloadExtensionTest.DownloadExtensionTest_SearchPauseResumeCancelGetFileIconIncognito
-DownloadExtensionTestIncognito.DownloadExtensionTest_SearchPauseResumeCancelGetFileIconIncognito
-ErrorPageTest.DNSError_Basic
-ErrorPageTest.DNSError_GoBack1
-ExecuteScriptApiTest.ExecuteScriptPermissions
-ExtensionApiTest.FontSettingsIncognito
-ExtensionApiTest.PopupBlockingExtension
-ExtensionApiTest.PopupBlockingHostedApp
-FastShutdown.SlowTermination
-IndexedDBLayoutTest.IndexTests
-NetInternalsTest.netInternalsPrerenderViewFail
-NewTabUIBrowserTest.LoadNTPInExistingProcess
-OutOfProcessPPAPITest.NetAddressPrivate_GetAnyAddress
-OutOfProcessPPAPITest.NetAddressPrivate_ReplacePort
-PageCyclerCachedBrowserTest.PlaybackMode
-PageCyclerCachedBrowserTest.URLNotInCache
-PPAPITest.ImeInputEvent
-PrerenderBrowserTest.*
-PrerenderBrowserTestWithNaCl.PrerenderNaClPluginEnabled
-PrintPreviewWebUITest.TestPrinterList
-PrintPreviewWebUITest.TestPrinterListCloudEmpty
-PrintPreviewWebUITest.TestSectionsDisabled
-PrintWebViewHelperTest.BlockScriptInitiatedPrinting
-SafeBrowsingBlockingPageTest.MalwareDontProceed
-SafeBrowsingBlockingPageTest.ProceedDisabled
-SocketApiTest.SocketTCPExtension
-SocketApiTest.SocketUDPExtension
-SSLUITest.TestWSSInvalidCertAndGoForward
-WebViewTest.Shim
diff --git a/chromium/tools/valgrind/gtest_exclude/components_unittests.gtest-tsan_win32.txt b/chromium/tools/valgrind/gtest_exclude/components_unittests.gtest-tsan_win32.txt
deleted file mode 100644
index a73d3879dce..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/components_unittests.gtest-tsan_win32.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-# Fails http://crbug.com/304963
-TranslateMetricsTest.ReportContentLanguage
-TranslateMetricsTest.ReportHtmlLang
-TranslateMetricsTest.ReportLanguageDetectionTime
-TranslateMetricsTest.ReportLanguageVerification
-TranslateMetricsTest.ReportSimilarLanguageMatch
diff --git a/chromium/tools/valgrind/gtest_exclude/content_unittests.gtest-tsan.txt b/chromium/tools/valgrind/gtest_exclude/content_unittests.gtest-tsan.txt
deleted file mode 100644
index c96da5b20b8..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/content_unittests.gtest-tsan.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-# http://crbug.com/159234.
-WebContentsVideoCaptureDeviceTest.*
diff --git a/chromium/tools/valgrind/gtest_exclude/content_unittests.gtest.txt b/chromium/tools/valgrind/gtest_exclude/content_unittests.gtest.txt
deleted file mode 100644
index 38c9f89741e..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/content_unittests.gtest.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-# Flaky, see http://crbug.com/227278
-WebContentsVideoCaptureDeviceTest.WebContentsDestroyed
-CompositingIOSurfaceTransformerTest.*
-# Flaky, see http://crbug.com/167299
-WebRTCAudioDeviceTest.StartPlayout
diff --git a/chromium/tools/valgrind/gtest_exclude/content_unittests.gtest_mac.txt b/chromium/tools/valgrind/gtest_exclude/content_unittests.gtest_mac.txt
deleted file mode 100644
index f0c2f41df13..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/content_unittests.gtest_mac.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-# http://crbug.com/93245
-GeolocationGatewayDataProviderCommonTest.*
-GeolocationWifiDataProviderCommonTest.*
-
-# Flaky, see http://crbug.com/131154
-WebRTCAudioDeviceTest.FullDuplexAudioWithAGC
-
-# Flaky, see http://crbug.com/155284
-WebRTCAudioDeviceTest.StartRecording
-WebRTCAudioDeviceTest.PlayLocalFile
-
-# Fail/crash, see http://crbug.com/151939
-WebDragDestTest.URL
-WebDragDestTest.Data
-WebDragSourceMacTest.DragInvalidlyEscapedBookmarklet
-
-# Fail, see http://crbug.com/153007
-MacSandboxTest.ClipboardAccess
-
-# mach_override assertion, see http://crbug.com/162728
-BlobURLRequestJobTest.*
-
-# Fail, see http://crbug.com/159234
-WebContentsVideoCaptureDeviceTest.GoesThroughAllTheMotions
-WebContentsVideoCaptureDeviceTest.BadFramesGoodFrames
-
-# Hang at arbitrary point, can't tell where exactly, see http://crbug.com/163314
-RenderWidgetHostViewMacTest.*
-WebContentsVideoCaptureDeviceTest.*
-RenderViewHostTest.*
-DeviceMotionEventPumpTest.*
-
-# Speculative disable of hanging tests. http://crbug.com/241919
-VideoCaptureControllerTest.*
-VideoCaptureHostTest.*
-
-# Hangs under Valgrind, see http://crbug.com/244257
-SmoothScrollGestureControllerTest.Tick
-
-# http://crbug.com/247163
-VideoCaptureManagerTest.CloseWithoutStop
-VideoCaptureManagerTest.CreateAndClose
-VideoCaptureManagerTest.StartUsingId
-WebRTCAudioDeviceTest.WebRtcPlayoutSetupTime
-WebRTCAudioDeviceTest.WebRtcRecordingSetupTime
-
-# http://crbug.com/247601
-FontSerializationTest.StyledFonts
-MacSandboxTest.FontLoadingTest
-VideoCaptureManagerTest.ManipulateDeviceAndCheckCapabilities
-
-# http://crbug.com/280583
-DesktopCaptureDeviceTest.ScreenResolutionChangeVariableResolution
-DesktopCaptureDeviceTest.Capture
-
-# http://crbug.com/303709
-GamepadProviderTest.PollingAccess
-GamepadProviderTest.UserGesture
diff --git a/chromium/tools/valgrind/gtest_exclude/crypto_unittests.gtest-tsan_win32.txt b/chromium/tools/valgrind/gtest_exclude/crypto_unittests.gtest-tsan_win32.txt
deleted file mode 100644
index 3ed1f116532..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/crypto_unittests.gtest-tsan_win32.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-# Too slow under TSan
-RSAPrivateKeyUnitTest.*
diff --git a/chromium/tools/valgrind/gtest_exclude/interactive_ui_tests.gtest.txt b/chromium/tools/valgrind/gtest_exclude/interactive_ui_tests.gtest.txt
deleted file mode 100644
index 6ae761f0a91..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/interactive_ui_tests.gtest.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-# These test fail due to mmap Valgrind failures, see http://crbug.com/66677
-CollectedCookiesTest.DoubleDisplay
-CollectedCookiesTest.NavigateAway
-InfoBarsUITest.TestInfoBarsCloseOnNewTheme
-FastShutdown.SlowTermination
-MouseLeaveTest.TestOnMouseOut
-NotificationsPermissionTest.TestNoUserGestureInfobar
-NotificationsPermissionTest.TestUserGestureInfobar
-
-# These test fail due to timeout or limited buildslave support;
-# http://crbug.com/67301
-BrowserFocusTest.InterstitialFocus
-BrowserFocusTest.FindFocusTest
-BrowserFocusTest.FocusTraversalOnInterstitial
-
-# Don't run FLAKY or FAILS tests under Valgrind and TSan
-# as they tend to generate too many reports, see http://crbug.com/67959
-# NB: Can't use FAILS_/FLAKY_ as it will be turned into *.* by chrome_tests.py!
-*.FLAKY*
-*.FAILS*
-
-# Fails under Valgrind, see http://crbug.com/68068
-DevToolsSanityTest.TestPauseWhenScriptIsRunning
-
-# These tests time out under Valgrind, see http://crbug.com/163880
-BrowserFocusTest.FocusOnReload
-CommandsApiTest.Basic
-ExtensionApiTest.NotificationsHasPermissionManifest
-ExtensionCrashRecoveryTest.ReloadTabsWithBackgroundPage
-ExtensionCrashRecoveryTest.TwoExtensionsCrashBothAtOnce
-ExtensionCrashRecoveryTest.TwoExtensionsCrashFirst
-ExtensionCrashRecoveryTest.TwoExtensionsOneByOne
-FullscreenControllerInteractiveTest.TestTabExitsMouseLockOnNavigation
-OmniboxViewTest.Escape
diff --git a/chromium/tools/valgrind/gtest_exclude/ipc_tests.gtest-drmemory_win32.txt b/chromium/tools/valgrind/gtest_exclude/ipc_tests.gtest-drmemory_win32.txt
deleted file mode 100644
index ac62a9a6e95..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/ipc_tests.gtest-drmemory_win32.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-# TODO(timurrrr): investigate
-IPCSyncChannelTest.*
diff --git a/chromium/tools/valgrind/gtest_exclude/ipc_tests.gtest-tsan_win32.txt b/chromium/tools/valgrind/gtest_exclude/ipc_tests.gtest-tsan_win32.txt
deleted file mode 100644
index f13b4d997c4..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/ipc_tests.gtest-tsan_win32.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-# Fails under TSan, see http://crbug.com/62511
-IPCSyncChannelTest.BadMessage
diff --git a/chromium/tools/valgrind/gtest_exclude/ipc_tests.gtest.txt b/chromium/tools/valgrind/gtest_exclude/ipc_tests.gtest.txt
deleted file mode 100644
index 30a1f89323b..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/ipc_tests.gtest.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-# Takes 27-40 seconds to run.
-IPCSyncChannelTest.ChattyServer
-# Hangs on Linux sometimes. See http://crbug.com/22141
-IPCChannelTest.ChannelTest
-# Crashes under Valgrind. See http://crbug.com/46782
-IPCSyncChannelTest.Multiple
diff --git a/chromium/tools/valgrind/gtest_exclude/media_unittests.gtest-drmemory_win32.txt b/chromium/tools/valgrind/gtest_exclude/media_unittests.gtest-drmemory_win32.txt
deleted file mode 100644
index 315244542d3..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/media_unittests.gtest-drmemory_win32.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-# Hangs under Dr. Memory
-# http://code.google.com/p/drmemory/issues/detail?id=978
-WinAudioTest.SyncSocketBasic
-AudioBusTest.CopyTo
diff --git a/chromium/tools/valgrind/gtest_exclude/media_unittests.gtest-tsan_win32.txt b/chromium/tools/valgrind/gtest_exclude/media_unittests.gtest-tsan_win32.txt
deleted file mode 100644
index ef4835c093f..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/media_unittests.gtest-tsan_win32.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-# Win TSan disturbs ffmpeg's output, causing hash comparison assertion to fail.
-# http://crbug.com/120396
-PipelineIntegrationTest.BasicPlaybackHashed
diff --git a/chromium/tools/valgrind/gtest_exclude/media_unittests.gtest.txt b/chromium/tools/valgrind/gtest_exclude/media_unittests.gtest.txt
deleted file mode 100644
index b9954c25efb..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/media_unittests.gtest.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-# This test tries to record fake audio in real-time.
-# This appears to be too sensitive to slowdown, see http://crbug.com/49497
-FakeAudioInputTest.BasicCallbacks
-
-# Flaky under all Valgrind-based tools, see http://crbug.com/298771
-PipelineIntegrationTest.MediaSource_Opus_Seeking_WebM
diff --git a/chromium/tools/valgrind/gtest_exclude/message_center_unittests.gtest.txt b/chromium/tools/valgrind/gtest_exclude/message_center_unittests.gtest.txt
deleted file mode 100644
index 56bb83c0e39..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/message_center_unittests.gtest.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-# Fails http://crbug.com/256911
-MessageCenterImplTest.PopupTimersControllerResetTimer
-MessageCenterImplTest.PopupTimersControllerStartMultipleTimersPause
diff --git a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-drmemory_win-xp.txt b/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-drmemory_win-xp.txt
deleted file mode 100644
index 46717dc3890..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-drmemory_win-xp.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-# http://code.google.com/p/drmemory/issues/detail?id=842
-# Failing and then crashing.
-HttpNetworkTransationSpdy21Test.HttpsProxySpdy*
diff --git a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-drmemory_win32.txt b/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-drmemory_win32.txt
deleted file mode 100644
index f0d641122c8..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-drmemory_win32.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-# See http://crbug.com/82391
-URLRequestTestHTTP.HTTPSToHTTPRedirectNoRefererTest
-
-# Times out. See http://crbug.com/134313
-URLRequestTestHTTP.GetTest_ManyCookies
-
-# Dr. Memory hits an assertion:
-# http://code.google.com/p/drmemory/issues/detail?id=422
-HttpAuthTest.*
-HttpAuthHandlerFactoryTest.*
-X509CertificateTest.*
-
-# Too many uninits and too slow. TODO(timurrrr): investigate uninits
-ProxyResolverV8Test.*
-
-# Slow
-CookieMonsterTest.GarbageCollectionTriggers
-
-# Hangs only when built in release mode.
-# http://crbug.com/105762
-ClientSocketPoolBaseTest.DisableCleanupTimer
-
-# Flaky, see http://crbug.com/108422
-SSLClientSocketTest.ConnectMismatched
diff --git a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-memcheck.txt b/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-memcheck.txt
deleted file mode 100644
index 264a7fa8992..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-memcheck.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-# These tests leak data intentionally, so are inappropriate for Valgrind tests.
-# Similar list in ../purify/net_unittests.exe.gtest.txt
-# TODO(dkegel): either merge the two files or keep them in sync,
-# see http://code.google.com/p/chromium/issues/detail?id=8951
-DiskCacheBackendTest.AppCacheInvalidEntry
-DiskCacheBackendTest.AppCacheInvalidEntryRead
-DiskCacheBackendTest.AppCacheInvalidEntryWithLoad
-DiskCacheBackendTest.InvalidEntry
-DiskCacheBackendTest.InvalidEntryRead
-DiskCacheBackendTest.InvalidEntryWithLoad
-DiskCacheBackendTest.TrimInvalidEntry
-DiskCacheBackendTest.TrimInvalidEntry2
-DiskCacheBackendTest.InvalidEntryEnumeration
-DiskCacheBackendTest.NewEvictionInvalidEntry
-DiskCacheBackendTest.NewEvictionInvalidEntryRead
-DiskCacheBackendTest.NewEvictionInvalidEntryWithLoad
-DiskCacheBackendTest.NewEvictionTrimInvalidEntry
-DiskCacheBackendTest.NewEvictionTrimInvalidEntry2
-DiskCacheBackendTest.NewEvictionInvalidEntryEnumeration
-DiskCacheBackendTest.ShutdownWithPendingCreate_Fast
-DiskCacheBackendTest.ShutdownWithPendingFileIO_Fast
-DiskCacheBackendTest.ShutdownWithPendingIO_Fast
-
-# flaky failure on Linux Tests (valgrind)(2),
-# see http://code.google.com/p/chromium/issues/detail?id=117196
-SSLClientSocketTest.VerifyReturnChainProperlyOrdered
diff --git a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-tsan.txt b/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-tsan.txt
deleted file mode 100644
index 79c5afa8e08..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-tsan.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-# These huge tests are flaky and sometimes crash the following tests.
-# See http://crbug.com/50346
-DiskCacheEntryTest.*HugeSparse*
-
-# SPDY tests tend to crash on both Mac and Windows.
-# See http://crbug.com/51144
-Spdy/SpdyNetworkTransactionTest.SocketWriteReturnsZero*
-# See http://crbug.com/50918
-Spdy/SpdyNetworkTransactionTest.CancelledTransactionSendRst*
-# See http://crbug.com/51087
-Spdy*
-
-# See http://crbug.com/44570
-HttpNetworkTransactionTest.StopsReading204
-# See http://crbug.com/51145
-HttpNetworkTransactionTest.Incomplete100ThenEOF
-HttpNetworkTransactionTest.UseAlternateProtocolForNpnSpdyWithExistingSpdySession
-HttpNetworkTransactionTest.KeepAliveConnectionEOF
-
-# Crashes silently, see http://crbug.com/76911
-URLRequestTest.FileTest
-
-# http://crbug.com/92439
-ServerBoundCertServiceTest.*
-
-# Flaky, see http://crbug.com/259781
-EmbeddedTestServerTest.*
diff --git a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-tsan_win32.txt b/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-tsan_win32.txt
deleted file mode 100644
index e336298a00a..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-tsan_win32.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-# These tests fail due to unknown reasons
-# TODO(timurrrr): investigate
-CookieMonsterTest.TestLastAccess
-SpdyNetwork*Error*
-SpdyNetwork*Get*
-SpdyNetworkTransactionTest.SynReplyHeadersVary
-X509CertificateTest.UnoSoftCertParsing
-URLRequestTest.DoNotSaveCookies
-URLRequestTest.QuitTest
-
-# See http://crbug.com/47836
-ClientSocketPoolBaseTest.CancelPendingSocketAtSocketLimit
-
-# Single-threaded and relatively slow - no reason to test
-# See http://crbug.com/59642
-CookieMonsterTest.GarbageCollectionTriggers
-
-# Time out, see http://crbug.com/68482
-SSLServerSocketTest.*
-
-# See http://crbug.com/102330
-SSLClientSocketTest.*
-
-# See http://crbug.com/104805
-HostResolverImplTest.AbortOnlyExistingRequestsOnIPAddressChange
-
-# Times out occasionally, http://crbug.com/124452
-HostResolverImplTest.StartWithinCallback
-
-# Crash. See crbug.com/234776.
-DiskCacheEntryTest.EvictOldEntries
-DiskCacheEntryTest.NewEvictionEvictOldEntries
-
-# Hang. crbug.com/265647.
-NetworkChangeNotifierWinTest.NetChangeWinBasic
-NetworkChangeNotifierWinTest.NetChangeWinSignal
-NetworkChangeNotifierWinTest.NetChangeWinFailSignal*
-
-
-
diff --git a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest.txt b/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest.txt
deleted file mode 100644
index ed064617792..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-# Very slow under Valgrind.
-KeygenHandlerTest.*SmokeTest
-KeygenHandlerTest.*ConcurrencyTest
-
-# Hangs, see http://crbug.com/61908
-DirectoryListerTest.BigDirRecursiveTest
-
-# http://crbug.com/88228
-SSLClientSocketTest.Connect
-SSLClientSocketTest.ConnectClientAuthSendNullCert
-
-# These tests are broken http://crbug.com/118883
-*SpdyNetworkTransactionSpdy*Test.*
-*SpdyHttpStreamSpdy*Test.*
-
-# Fails flakily. http://crbug.com/255775
-SimpleIndexFileTest.WriteThenLoadIndex
-
-# Flaky. http://crbug.com/237450
-DiskCacheBackendTest.SimpleCacheAppCacheOnlyDoomAll
-DiskCacheBackendTest.SimpleCacheDoomAll
diff --git a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest_linux.txt b/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest_linux.txt
deleted file mode 100644
index a93d58871b0..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest_linux.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-# Flaky. crbug.com/234776
-DiskCacheEntryTest.SimpleCacheStreamAccess
-DiskCacheEntryTest.SimpleCacheGrowData
-DiskCacheEntryTest.SimpleCacheSizeChanges
-
diff --git a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest_mac.txt b/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest_mac.txt
deleted file mode 100644
index 6986bdfe874..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest_mac.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-# Very slow under Valgrind, (see <http://crbug.com/37289>).
-KeygenHandlerTest.SmokeTest
-
-# These tests fail under Valgrind on Mac, see http://crbug.com/62314
-SSLClientSocketTest.*
-HTTPSRequestTest.*
diff --git a/chromium/tools/valgrind/gtest_exclude/printing_unittests.gtest-drmemory_win32.txt b/chromium/tools/valgrind/gtest_exclude/printing_unittests.gtest-drmemory_win32.txt
deleted file mode 100644
index 58a6a8da51d..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/printing_unittests.gtest-drmemory_win32.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-# CreateDC returns NULL, see http://crbug.com/73652
-PrintingContextTest.Base
-PrintingContextTest.PrintAll
diff --git a/chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest-drmemory_win32.txt b/chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest-drmemory_win32.txt
deleted file mode 100644
index 2b1ead484e9..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest-drmemory_win32.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-# This test fails on an assertion, see http://crbug.com/57266
-EncoderVp8Test.TestEncoder
-DecoderVp8Test.EncodeAndDecode
-
-# These test intentionally generate exceptions to verify if a dump is generated
-# during the crash.
-BreakpadWinDeathTest.TestAccessViolation
-BreakpadWinDeathTest.TestInvalidParameter
-BreakpadWinDeathTest.TestDebugbreak
diff --git a/chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest-tsan_win32.txt b/chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest-tsan_win32.txt
deleted file mode 100644
index d446a1df17b..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest-tsan_win32.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-# These tests load mstscax.dll, which generates a bunch of race reports, see http://crbug.com/177832
-RdpClientTest.*
diff --git a/chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest.txt b/chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest.txt
deleted file mode 100644
index c322014654a..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-# http://crbug.com/241856
-VideoSchedulerTest.StartAndStop
diff --git a/chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest_win-8.txt b/chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest_win-8.txt
deleted file mode 100644
index eaf36f8f047..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest_win-8.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-# Fails natively as well: http://crbug.com/251517
-RdpClientTest.Basic
diff --git a/chromium/tools/valgrind/gtest_exclude/safe_browsing_tests.gtest_mac.txt b/chromium/tools/valgrind/gtest_exclude/safe_browsing_tests.gtest_mac.txt
deleted file mode 100644
index 3afb727a320..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/safe_browsing_tests.gtest_mac.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-# Fails on Valgrind/Mac, see http://crbug.com/69280
-SafeBrowsingServiceTest.SafeBrowsingSystemTest
diff --git a/chromium/tools/valgrind/gtest_exclude/suppressions.txt b/chromium/tools/valgrind/gtest_exclude/suppressions.txt
deleted file mode 100644
index e8cc21038a2..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/suppressions.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- Test DiskCacheBackendTest.InvalidEntryEnumeration leaks.
- Memcheck:Leak
- fun:_Znwj
- fun:_ZN10disk_cache12StorageBlockINS_12RankingsNodeEE12AllocateDataEv
- fun:_ZN10disk_cache12StorageBlockINS_12RankingsNodeEE4LoadEv
- fun:_ZN10disk_cache9EntryImpl15LoadNodeAddressEv
- fun:_ZN10disk_cache11BackendImpl8NewEntryENS_4AddrEPPNS_9EntryImplEPb
- fun:_ZN10disk_cache11BackendImpl10MatchEntryERKSsjb
- fun:_ZN10disk_cache11BackendImpl9OpenEntryERKSsPPNS_5EntryE
- fun:_ZN49DiskCacheBackendTest_InvalidEntryEnumeration_Test8TestBodyEv
- fun:_ZN7testing4Test3RunEv
-}
-{
- Test DiskCacheBackendTest.InvalidEntryRead leaks.
- Memcheck:Leak
- fun:_Znwj
- fun:_ZN10disk_cache11BackendImpl8NewEntryENS_4AddrEPPNS_9EntryImplEPb
- fun:_ZN10disk_cache11BackendImpl10MatchEntryERKSsjb
- fun:_ZN10disk_cache11BackendImpl9OpenEntryERKSsPPNS_5EntryE
- fun:_ZN42DiskCacheBackendTest_InvalidEntryRead_Test8TestBodyEv
- fun:_ZN7testing4Test3RunEv
-}
-{
- Test DiskCacheBackendTest.InvalidEntryWithLoad leaks.
- Memcheck:Leak
- fun:_Znwj
- fun:_ZN10disk_cache11BackendImpl11CreateEntryERKSsPPNS_5EntryE
- fun:_ZN46DiskCacheBackendTest_InvalidEntryWithLoad_Test8TestBodyEv
- fun:_ZN7testing4Test3RunEv
-}
-{
- Test FlipNetworkTransactionTest.WriteError Bug 29004
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN3net26FlipNetworkTransactionTest17TransactionHelperERKNS_15HttpRequestInfoEPNS_17DelayedSocketDataE
- fun:_ZN3net42FlipNetworkTransactionTest_WriteError_Test8TestBodyEv
-}
diff --git a/chromium/tools/valgrind/gtest_exclude/sync_unit_tests.gtest-asan.txt b/chromium/tools/valgrind/gtest_exclude/sync_unit_tests.gtest-asan.txt
deleted file mode 100644
index fc2cc8ec845..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/sync_unit_tests.gtest-asan.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-# Flaky, see http://crbug.com/118370
-SyncSchedulerTest.TransientPollFailure
diff --git a/chromium/tools/valgrind/gtest_exclude/sync_unit_tests.gtest-tsan.txt b/chromium/tools/valgrind/gtest_exclude/sync_unit_tests.gtest-tsan.txt
deleted file mode 100644
index 69768478008..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/sync_unit_tests.gtest-tsan.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-# Flaky, see http://crbug.com/118370
-SyncSchedulerTest.TransientPollFailure
-
-# Flaky, http://crbug.com/119467
-InvalidationNotifierTest.Basic
diff --git a/chromium/tools/valgrind/gtest_exclude/ui_unittests.gtest-memcheck.txt b/chromium/tools/valgrind/gtest_exclude/ui_unittests.gtest-memcheck.txt
deleted file mode 100644
index 9474d9faa3e..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/ui_unittests.gtest-memcheck.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-# http://crbug.com/222606
-RenderTextTest.DisplayRectShowsCursorLTR
diff --git a/chromium/tools/valgrind/gtest_exclude/ui_unittests.gtest-tsan.txt b/chromium/tools/valgrind/gtest_exclude/ui_unittests.gtest-tsan.txt
deleted file mode 100644
index 64383b7dcbf..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/ui_unittests.gtest-tsan.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-# Hangs under TSAN, see http://crbug.com/28332
-TextEliderTest.ElideTextLongStrings
diff --git a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-drmemory_win-xp.txt b/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-drmemory_win-xp.txt
deleted file mode 100644
index 2ef9d506eae..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-drmemory_win-xp.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-# Crashing (!) since forever, needs analysis.
-BookmarkNodeDataTest.*
-
-# http://code.google.com/p/drmemory/issues/detail?id=842
-# Fails assertion. App data corrupted by DrMemory?
-JsonSchemaTest.TestType
-JsonSchemaTest.TestNumber
diff --git a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-drmemory_win32.txt b/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-drmemory_win32.txt
deleted file mode 100644
index aed475ca7d4..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-drmemory_win32.txt
+++ /dev/null
@@ -1,76 +0,0 @@
-##################################################
-# known Dr. Memory bugs:
-
-# http://code.google.com/p/drmemory/issues/detail?id=318
-AudioRendererHostTest.*
-
-##################################################
-# un-analyzed Dr. Memory bugs:
-
-# http://code.google.com/p/drmemory/issues/detail?id=548
-DownloadManagerTest.StartDownload
-
-# http://code.google.com/p/drmemory/issues/detail?id=979
-FirefoxProfileImporterTest.Firefox35Importer
-
-# http://code.google.com/p/drmemory/issues/detail?id=980
-MetricsLogManagerTest.*
-
-# http://code.google.com/p/drmemory/issues/detail?id=983
-ProfileShortcutManagerTest.*
-
-##################################################
-# Chromium bugs:
-
-# times out on the bot
-# http://crbug.com/87887
-VideoCaptureHostTest.*
-
-# crashes due to use-after-free's, http://crbug.com/90980
-FirefoxImporterTest.Firefox*NSS3Decryptor
-
-# fails http://crbug.com/92144
-ServiceProcessStateTest.ForceShutdown
-
-# fails sporadically: http://crbug.com/108205
-MultiProcessLockTest.RecursiveLock
-
-# Poor isolation, DCHECKs when no MessageLoop exists. Breaks when sharded.
-# http://crbug.com/117679
-WebsiteSettingsModelTest.*
-
-# fails to create thread
-# http://crbug.com/144087
-DesktopNotificationServiceTest.SettingsForSchemes
-TemplateURLFetcherTest.*
-
-# times out on the bot.
-# http://crbug.com/148644
-GAIAInfoUpdateServiceTest.*
-ProfileManagerTest.*
-ProfileInfoCacheTest.*
-
-# Failing on the bot. http://crbug.com/167014
-BrowserCommandControllerTest.AvatarMenuDisabledWhenOnlyOneProfile
-
-# Failing on the bot. http://crbug.com/168882
-UserCloudPolicyStoreTest.LoadWithInvalidFile
-UserCloudPolicyStoreTest.LoadWithNoFile
-UserCloudPolicyStoreTest.Store
-UserCloudPolicyStoreTest.StoreThenClear
-UserCloudPolicyStoreTest.StoreThenLoad
-UserCloudPolicyStoreTest.StoreTwoTimes
-UserCloudPolicyStoreTest.StoreValidationError
-
-# Failing on the bot. crbug.com/266972
-OneClickSigninBubbleViewTest.ShowBubble
-
-# http://crbug.com/292960
-SyncBackendHostTest.DownloadControlTypes
-SyncBackendHostTest.SilentlyFailToDownloadControlTypes
-
-# DrM-i#1339: https://code.google.com/p/drmemory/issues/detail?id=1339
-ExtensionServiceTest.InstallTheme
-
-# http://crbug.com/302156
-TabStripModelTest.FastShutdown
diff --git a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-memcheck.txt b/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-memcheck.txt
deleted file mode 100644
index f4996dbb437..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-memcheck.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-# Takes too long and may cause bots to time out. http://crbug.com/134400
-# This test alone takes 10-15 minutes.
-Convolver.SIMDVerification
-
-# Timing issues. http://crbug.com/241051
-ExtensionAlarmsTest.*
-
-# SEGV_MAPERR. http://crbug.com/245797
-ClientSideDetectionHostTest.NavigationCancelsShouldClassifyUrl
-
-# Flaky. http://crbug.com/308309
-CloudPrintURLFetcherBasicTest.HandleRawData
-CloudPrintURLFetcherOverloadTest.Protect
-
-# Hangs every once in a while. http://crbug.com/309149
-ExtensionUpdaterTest.TestMultipleManifestDownloading
-
-# Test fail: crbug.com/314216
-ExtensionIconManagerTest.LoadComponentExtensionResource
diff --git a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-tsan.txt b/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-tsan.txt
deleted file mode 100644
index ec8d751dad6..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-tsan.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-# This test has a possible data race detected by the TSAN bot
-# see http://crbug.com/46840
-ProfileManagerTest.CreateAndUseTwoProfiles
-
-# Crashing - http://crbug.com/84536
-HttpBridgeTest.*
-
-# Takes too long and may cause TSAN bots to time out. http://crbug.com/134400
-Convolver.SIMDVerification
-
-# SEGV_MAPERR. http://crbug.com/245797
-ClientSideDetectionHostTest.NavigationCancelsShouldClassifyUrl
diff --git a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest.txt b/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest.txt
deleted file mode 100644
index 81bd7afb8bc..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-# Hangs sometimes; see http://crbug.com/22146
-VisitedLinkEventsTest.Coalescense
-# Hangs sometimes; see http://crbug.com/22160
-VisitedLinkRelayTest.Basics
-# Hangs (or takes forever?) reliably on bots; see http://crbug.com/23580
-RenderViewTest.ImeComposition
-# Hangs sometimes; see http://crbug.com/52844
-PredictorTest.MassiveConcurrentLookupTest
-# Pure virtual method called: see http://crbug.com/50950
-ConnectionTesterTest.RunAllTests
-
-# Following tests fail under valgrind because libjingle has hardcoded
-# timeouts for P2P connections, and it makes these tests fail under valgrind.
-# TODO(sergeyu): Remove hardcoded timeouts from libjingle.
-P2PTransportImplTest.Create
-P2PTransportImplTest.ConnectUdp
-P2PTransportImplTest.ConnectTcp
-P2PTransportImplTest.SendDataUdp
-P2PTransportImplTest.SendDataTcp
-
-# Failing on CrOS, see http://crbug.com/79657
-SignedSettingsTest.StorePolicyNoPolicyData
-
-# Flaky and not very interesting under Valgrind http://crbug.com/93027
-ProcessWatcherTest.ImmediateTermination
-
-# Timing out all over the place. Disabling for now. http://crbug.com/149715
-ExtensionWebRequestTest.*
-# Timing out all over the place. Disabling for now. http://crbug.com/149882
-NativeMessagingTest.*
-
-# Timing out all over the place. Disabling for now. http://crbug.com/164589
-StorageInfoProviderTest.*
-
diff --git a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest_linux.txt b/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest_linux.txt
deleted file mode 100644
index 2c6334050b2..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest_linux.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-# Fails under Valgrind; see http://crbug.com/36770
-URLFetcherBadHTTPSTest.BadHTTPSTest
-# Fails under Valgrind; see http://crbug.com/44552
-RenderViewTest.OnHandleKeyboardEvent
-# http://crbug.com/88221
-ConnectionTesterTest.DeleteWhileInProgress
-# Crash on CrOS, see http://crbug.com/115979
-ClientSideDetectionHostTest.OnPhishingDetectionDoneNotPhishing
-ClientSideDetectionHostTest.OnPhishingDetectionDoneVerdictNotPhishing
-ClientSideDetectionHostTest.OnPhishingDetectionDoneInvalidVerdict
-ClientSideDetectionHostTest.OnPhishingDetectionDoneDisabled
-
-# http://crbug.com/119610
-ProfileSyncServiceSessionTest.WriteFilledSessionToNode
-ProfileSyncServiceSessionTest.ValidTabs
-
-# http://crbug.com/139652
-BackgroundApplicationListModelTest.RandomTest
-
-# http://crbug.com/179427
-ExtensionPrefsDelayedInstallInfo.DelayedInstallInfo
-ExtensionServiceTest.*
-
-# http://crbug.com/180335
-AutocompleteActionPredictorTest.RecommendActionURL
-
-# http://crbug.com/180467
-HttpPipeliningCompatibilityClientTest.*
-
-# http://crbug.com/238964
-CpuInfoProviderTest.*
diff --git a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest_mac.txt b/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest_mac.txt
deleted file mode 100644
index 589b6947ad8..00000000000
--- a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest_mac.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-# Times out too often
-# crbug.com/15817
-IPCSyncChannelTest.*
-# Hangs
-# http://crbug.com/21890
-WebDropTargetTest.URL
-WebDropTargetTest.Data
-# http://crbug.com/69037
-FirefoxImporterTest.Firefox3NSS3Decryptor
-# http://crbug.com/69039
-ProcessInfoSnapshotMacTest.EffectiveVsRealUserIDTest
-
-# Following tests do not pass memcheck test.
-# See http://crbug.com/30393.
-NSMenuItemAdditionsTest.TestMOnDifferentLayouts
-
-# Hangs
-# See http://crbug.com/75733
-BookmarkBarControllerTest.DeleteFromOffTheSideWhileItIsOpen
-BookmarkBarControllerTest.HideWhenShowBookmarkBarTrueButDisabled
-BookmarkBarControllerTest.HideWhenShowBookmarkBarFalse
-
-# Crashes, see http://crbug.com/86656
-MacSandboxTest.FileAccess
-
-# http://crbug.com/87769
-BalloonControllerTest.ShowAndCloseTest
-BalloonControllerTest.SizesTest
-
-# http://crbug.com/89030
-ConnectionTesterTest.DeleteWhileInProgress
-
-# http://crbug.com/93245
-GeolocationWifiDataProviderCommonTest.*
-
-# http://crbug.com/96298
-FileSystemDirURLRequestJobTest.*
-FileSystemURLRequestJobTest.*
-FileSystemOperationWriteTest.*
diff --git a/chromium/tools/valgrind/locate_valgrind.sh b/chromium/tools/valgrind/locate_valgrind.sh
deleted file mode 100755
index 5d0a06be467..00000000000
--- a/chromium/tools/valgrind/locate_valgrind.sh
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/bin/bash
-
-# Copyright (c) 2012 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.
-
-# Prints a path to Valgrind binaries to be used for Chromium.
-# Select the valgrind from third_party/valgrind by default,
-# but allow users to override this default without editing scripts and
-# without specifying a commandline option
-
-export THISDIR=`dirname $0`
-
-# User may use his own valgrind by giving its path with CHROME_VALGRIND env.
-if [ "$CHROME_VALGRIND" = "" ]
-then
- # Guess which binaries we should use by uname
- case "$(uname -a)" in
- *Linux*x86_64*)
- PLATFORM="linux_x64"
- ;;
- *Linux*86*)
- PLATFORM="linux_x86"
- ;;
- *Darwin*9.[678].[01]*i386*)
- # Didn't test other kernels.
- PLATFORM="mac"
- ;;
- *Darwin*10.[0-9].[0-9]*i386*)
- PLATFORM="mac_10.6"
- ;;
- *Darwin*10.[0-9].[0-9]*x86_64*)
- PLATFORM="mac_10.6"
- ;;
- *Darwin*11.[0-9].[0-9]*x86_64*)
- PLATFORM="mac_10.7"
- ;;
- *)
- echo "Unknown platform:" >&2
- uname -a >&2
- echo "We'll try to search for valgrind binaries installed in /usr/local" >&2
- PLATFORM=
- esac
-
- if [ "$PLATFORM" != "" ]
- then
- # The binaries should be in third_party/valgrind
- # (checked out from deps/third_party/valgrind/binaries).
- CHROME_VALGRIND="$THISDIR/../../third_party/valgrind/$PLATFORM"
-
- # TODO(timurrrr): readlink -f is not present on Mac...
- if [ "$PLATFORM" != "mac" ] && \
- [ "$PLATFORM" != "mac_10.6" ] && \
- [ "$PLATFORM" != "mac_10.7" ]
- then
- # Get rid of all "../" dirs
- CHROME_VALGRIND=`readlink -f $CHROME_VALGRIND`
- fi
-
- if ! test -x $CHROME_VALGRIND/bin/valgrind
- then
- # We couldn't find the binaries in third_party/valgrind
- CHROME_VALGRIND=""
- fi
- fi
-fi
-
-if ! test -x $CHROME_VALGRIND/bin/valgrind
-then
- echo "Oops, could not find Valgrind binaries in your checkout." >&2
- echo "Please see" >&2
- echo " http://dev.chromium.org/developers/how-tos/using-valgrind/get-valgrind" >&2
- echo "for the instructions on how to download pre-built binaries." >&2
- exit 1
-fi
-
-echo $CHROME_VALGRIND
diff --git a/chromium/tools/valgrind/memcheck/OWNERS b/chromium/tools/valgrind/memcheck/OWNERS
deleted file mode 100644
index 72e8ffc0db8..00000000000
--- a/chromium/tools/valgrind/memcheck/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-*
diff --git a/chromium/tools/valgrind/memcheck/PRESUBMIT.py b/chromium/tools/valgrind/memcheck/PRESUBMIT.py
deleted file mode 100644
index 512da0b3467..00000000000
--- a/chromium/tools/valgrind/memcheck/PRESUBMIT.py
+++ /dev/null
@@ -1,81 +0,0 @@
-# Copyright (c) 2011 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.
-
-"""
-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
-for more details on the presubmit API built into gcl.
-"""
-
-import re
-
-def CheckChange(input_api, output_api):
- """Checks the memcheck suppressions files for bad data."""
- sup_regex = re.compile('suppressions.*\.txt$')
- suppressions = {}
- errors = []
- check_for_memcheck = False
- # skip_next_line has 3 possible values:
- # - False: don't skip the next line.
- # - 'skip_suppression_name': the next line is a suppression name, skip.
- # - 'skip_param': the next line is a system call parameter error, skip.
- skip_next_line = False
- for f in filter(lambda x: sup_regex.search(x.LocalPath()),
- input_api.AffectedFiles()):
- for line, line_num in zip(f.NewContents(),
- xrange(1, len(f.NewContents()) + 1)):
- line = line.lstrip()
- if line.startswith('#') or not line:
- continue
-
- if skip_next_line:
- if skip_next_line == 'skip_suppression_name':
- if 'insert_a_suppression_name_here' in line:
- errors.append('"insert_a_suppression_name_here" is not a valid '
- 'suppression name')
- if suppressions.has_key(line):
- if f.LocalPath() == suppressions[line][1]:
- errors.append('suppression with name "%s" at %s line %s '
- 'has already been defined at line %s' %
- (line, f.LocalPath(), line_num,
- suppressions[line][1]))
- else:
- errors.append('suppression with name "%s" at %s line %s '
- 'has already been defined at %s line %s' %
- (line, f.LocalPath(), line_num,
- suppressions[line][0], suppressions[line][1]))
- else:
- suppressions[line] = (f, line_num)
- check_for_memcheck = True;
- skip_next_line = False
- continue
- if check_for_memcheck:
- if not line.startswith('Memcheck:'):
- errors.append('"%s" should be "Memcheck:..." in %s line %s' %
- (line, f.LocalPath(), line_num))
- check_for_memcheck = False;
- if line == '{':
- skip_next_line = 'skip_suppression_name'
- continue
- if line == "Memcheck:Param":
- skip_next_line = 'skip_param'
- continue
-
- if (line.startswith('fun:') or line.startswith('obj:') or
- line.startswith('Memcheck:') or line == '}' or
- line == '...'):
- continue
- errors.append('"%s" is probably wrong: %s line %s' % (line, f.LocalPath(),
- line_num))
- if errors:
- return [output_api.PresubmitError('\n'.join(errors))]
- return []
-
-def CheckChangeOnUpload(input_api, output_api):
- return CheckChange(input_api, output_api)
-
-def CheckChangeOnCommit(input_api, output_api):
- return CheckChange(input_api, output_api)
-
-def GetPreferredTrySlaves():
- return ['linux_valgrind', 'mac_valgrind']
diff --git a/chromium/tools/valgrind/memcheck/suppressions.txt b/chromium/tools/valgrind/memcheck/suppressions.txt
deleted file mode 100644
index 2e2c0f7b1f1..00000000000
--- a/chromium/tools/valgrind/memcheck/suppressions.txt
+++ /dev/null
@@ -1,6359 +0,0 @@
-# There are four kinds of suppressions in this file.
-# 1. third party stuff we have no control over
-#
-# 2. intentional unit test errors, or stuff that is somehow a false positive
-# in our own code, or stuff that is so trivial it's not worth fixing
-#
-# 3. Suppressions for real chromium bugs that are not yet fixed.
-# These should all be in chromium's bug tracking system (but a few aren't yet).
-# Periodically we should sweep this file and the bug tracker clean by
-# running overnight and removing outdated bugs/suppressions.
-#-----------------------------------------------------------------------
-
-# 1. third party stuff we have no control over
-{
- Uninitialized value in deflate (Third Party)
- Memcheck:Uninitialized
- ...
- fun:MOZ_Z_deflate
-}
-{
- #gtk developers don't like cleaning up one-time leaks. See http://mail.gnome.org/archives/gtk-devel-list/2004-April/msg00230.html
- gtk_init_check leak (Third Party)
- Memcheck:Leak
- ...
- fun:gtk_init_check
-}
-{
- Fontconfig leak?
- Memcheck:Leak
- ...
- fun:XML_ParseBuffer
- fun:FcConfigParseAndLoad
-}
-{
- bug_9245_FcConfigAppFontAddFile_leak
- Memcheck:Leak
- ...
- fun:FcConfigAppFontAddFile
-}
-{
- pango_font_leak_todo_3
- Memcheck:Leak
- ...
- fun:FcFontRenderPrepare
- ...
- fun:pango_itemize_with_base_dir
-}
-{
- pango_font_leak_todo_4
- Memcheck:Leak
- ...
- fun:FcFontRenderPrepare
- ...
- fun:pango_ot_buffer_output
-}
-{
- pango_font_leak_todo_5
- Memcheck:Leak
- ...
- fun:FcFontRenderPrepare
- ...
- fun:pango_context_get_metrics
-}
-{
- pango_font_leak_todo_6
- Memcheck:Leak
- ...
- fun:FcDefaultSubstitute
- ...
- fun:pango_itemize_with_base_dir
-}
-{
- # Similar to fontconfig_bug_8428 below. Reported in
- # https://bugs.freedesktop.org/show_bug.cgi?id=8215
- fontconfig_bug_8215
- Memcheck:Leak
- fun:malloc
- fun:FcPatternObjectInsertElt
- fun:FcPatternObjectAddWithBinding
-}
-{
- # Fontconfig leak, seen in shard 16 of 20 of ui_tests
- # See https://bugs.freedesktop.org/show_bug.cgi?id=8428
- # and http://www.gnome.org/~johan/gtk.suppression
- fontconfig_bug_8428
- Memcheck:Leak
- ...
- fun:realloc
- fun:FcPatternObjectInsertElt
- fun:FcPatternObjectAddWithBinding
-}
-{
- bug_18590 (Third Party)
- Memcheck:Leak
- ...
- fun:malloc
- fun:FcConfigValues
- fun:FcConfigValues
- ...
- fun:FcConfigValues
- fun:FcConfigValues
-}
-{
- dlopen leak on error. Chromium issues 268368,273385. See http://sourceware.org/bugzilla/show_bug.cgi?id=12878.
- Memcheck:Leak
- fun:calloc
- fun:_dlerror_run
- fun:dlopen@@GLIBC_2.2.5
-}
-{
- bug_58730_libc.so_value8 (Third Party)
- Memcheck:Uninitialized
- obj:/lib/libc-2.11.1.so
-}
-# net::SniffXML() clearly tries to read < 8 bytes, but strncasecmp() reads 8.
-{
- bug_58730_strncasecmp_uninit (Third Party)
- Memcheck:Uninitialized
- ...
- fun:strncasecmp
- fun:_ZN4base11strncasecmpEPKcS1_m
- fun:_ZN3netL8SniffXMLEPKcmPbPSs
-}
-{
- bug_76386a (Third Party)
- Memcheck:Leak
- fun:_Znw*
- fun:_ZNSs4_Rep9_S_createE*RKSaIcE
- ...
- fun:_ZNSsC1*KS*
-}
-{
- bug_76386b (Third Party)
- Memcheck:Leak
- fun:_Znw*
- fun:_ZNSs4_Rep9_S_createE*RKSaIcE
- fun:_ZNSs4_Rep8_M_cloneERKSaIcE*
-}
-{
- getpwuid_and_getgrouplist
- Memcheck:Leak
- fun:malloc
- fun:nss_parse_service_list
- fun:__nss_database_lookup
- obj:*
- ...
- fun:get*
-}
-
-# XRandRInfo object seems to be leaking inside XRRFindDisplay. This happens the
-# first time it is called, no matter who the caller is. We have observed this
-# problem with both XRRSelectInput and XRRQueryExtension.
-{
- bug_119677
- Memcheck:Leak
- fun:malloc
- fun:XRRFindDisplay
-}
-{
- Ubuntu_Precise_Fontconfig_Optimized_Code
- Memcheck:Unaddressable
- fun:FcConfigFileExists
-}
-{
- Ubuntu_Precise_Itoa_Optimized_Code
- Memcheck:Uninitialized
- fun:_itoa_word
- fun:vfprintf
- fun:__vsnprintf_chk
- fun:__snprintf_chk
-}
-{
- Ubuntu_Precise_Wcscmp_Optimized_Code_In_Tests
- Memcheck:Uninitialized
- fun:wcscmp
- fun:_ZN7testing8internal6String17WideCStringEqualsEPKwS3_
-}
-
-#-----------------------------------------------------------------------
-# 2. intentional unit test errors, or stuff that is somehow a false positive
-# in our own code, or stuff that is so trivial it's not worth fixing
-
-# See tools/valgrind/memcheck_analyze.py before modifying sanity tests.
-{
- Memcheck sanity test 01 (memory leak).
- Memcheck:Leak
- fun:_Zna*
- fun:_ZN4base31ToolsSanityTest_MemoryLeak_Test8TestBodyEv
-}
-{
- Memcheck sanity test 02 (malloc/read left).
- Memcheck:Unaddressable
- fun:*ReadValueOutOfArrayBoundsLeft*
- ...
- fun:_ZN4base43ToolsSanityTest_AccessesToMallocMemory_Test8TestBodyEv
-}
-{
- Memcheck sanity test 03 (malloc/read right).
- Memcheck:Unaddressable
- fun:*ReadValueOutOfArrayBoundsRight*
- ...
- fun:_ZN4base43ToolsSanityTest_AccessesToMallocMemory_Test8TestBodyEv
-}
-{
- Memcheck sanity test 04 (malloc/write left).
- Memcheck:Unaddressable
- fun:*WriteValueOutOfArrayBoundsLeft*
- ...
- fun:_ZN4base43ToolsSanityTest_AccessesToMallocMemory_Test8TestBodyEv
-}
-{
- Memcheck sanity test 05 (malloc/write right).
- Memcheck:Unaddressable
- fun:*WriteValueOutOfArrayBoundsRight*
- ...
- fun:_ZN4base43ToolsSanityTest_AccessesToMallocMemory_Test8TestBodyEv
-}
-{
- Memcheck sanity test 06 (new/read left).
- Memcheck:Unaddressable
- fun:*ReadValueOutOfArrayBoundsLeft*
- ...
- fun:_ZN4base40ToolsSanityTest_AccessesToNewMemory_Test8TestBodyEv
-}
-{
- Memcheck sanity test 07 (new/read right).
- Memcheck:Unaddressable
- fun:*ReadValueOutOfArrayBoundsRight*
- ...
- fun:_ZN4base40ToolsSanityTest_AccessesToNewMemory_Test8TestBodyEv
-}
-{
- Memcheck sanity test 08 (new/write left).
- Memcheck:Unaddressable
- fun:*WriteValueOutOfArrayBoundsLeft*
- ...
- fun:_ZN4base40ToolsSanityTest_AccessesToNewMemory_Test8TestBodyEv
-}
-{
- Memcheck sanity test 09 (new/write right).
- Memcheck:Unaddressable
- fun:*WriteValueOutOfArrayBoundsRight*
- ...
- fun:_ZN4base40ToolsSanityTest_AccessesToNewMemory_Test8TestBodyEv
-}
-{
- Memcheck sanity test 10 (write after free).
- Memcheck:Unaddressable
- fun:_ZN4base43ToolsSanityTest_AccessesToMallocMemory_Test8TestBodyEv
-}
-{
- Memcheck sanity test 11 (write after delete).
- Memcheck:Unaddressable
- fun:_ZN4base40ToolsSanityTest_AccessesToNewMemory_Test8TestBodyEv
-}
-{
- Memcheck sanity test 12 (array deleted without []).
- Memcheck:Free
- ...
- fun:_ZN4base46ToolsSanityTest_ArrayDeletedWithoutBraces_Test8TestBodyEv
-}
-{
- Memcheck sanity test 13 (single element deleted with []).
- Memcheck:Free
- ...
- fun:_ZN4base51ToolsSanityTest_SingleElementDeletedWithBraces_Test8TestBodyEv
-}
-{
- Memcheck sanity test 14 (malloc/read uninit).
- Memcheck:Uninitialized
- fun:*ReadUninitializedValue*
- ...
- fun:_ZN4base43ToolsSanityTest_AccessesToMallocMemory_Test8TestBodyEv
-}
-{
- Memcheck sanity test 15 (new/read uninit).
- Memcheck:Uninitialized
- fun:*ReadUninitializedValue*
- ...
- fun:_ZN4base40ToolsSanityTest_AccessesToNewMemory_Test8TestBodyEv
-}
-{
- bug_86301 This test explicitly verifies PostTaskAndReply leaks the task if the originating MessageLoop has been deleted.
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base8internal20PostTaskAndReplyImpl16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEESA_
- fun:_ZN4base10TaskRunner16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEES9_
- fun:_ZN4base12_GLOBAL__N_169MessageLoopProxyTest_PostTaskAndReply_DeadReplyLoopDoesNotDelete_Test8TestBodyEv
-}
-{
- # Non-joinable thread doesn't clean up all state on program exit
- # very common in ui tests
- bug_16096 (WontFix)
- Memcheck:Leak
- fun:_Znw*
- fun:_ZNSs4_Rep9_S_createE*RKSaIcE
- fun:_ZNSs4_Rep8_M_cloneERKSaIcE*
- fun:_ZNSs7reserveE*
- fun:_ZNSs6appendEPKc*
- fun:*StringAppendV*
- ...
- fun:_ZN4base12StringPrintfEPKcz
-}
-{
- # According to dglazkov, these are one-time leaks and intentional.
- # They may go away if the change to move these off the heap lands.
- bug_17996 (Intentional)
- Memcheck:Leak
- ...
- fun:_ZN7WebCore8SVGNames4initEv
-}
-{
- # This is an on demand initialization which is done and then intentionally
- # kept around (not freed) while the process is running.
- intentional_WebCore_XMLNames_init_leak
- Memcheck:Leak
- ...
- fun:_ZN7WebCore8XMLNames4initEv
-}
-{
- # Intentionally leaking NSS to prevent shutdown crashes
- bug_61585a (Intentional)
- Memcheck:Leak
- fun:calloc
- ...
- fun:error_get_my_stack
-}
-{
- FileStream::Context can leak through WorkerPool by design
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN3net10FileStreamC1EPNS_6NetLogE
-}
-{
- # Histograms are used on un-joined threads, and can't be deleted atexit.
- Histograms via FactoryGet including Linear Custom Boolean and Basic
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN4base*Histogram10FactoryGet*
-}
-{
- Intentional leak for SampleMap (stores SparseHistogram counts).
- Memcheck:Leak
- ...
- fun:_ZN4base9SampleMap10AccumulateEii
- fun:_ZN4base15SparseHistogram3AddEi
-}
-{
- bug_73299 (Intentional)
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7content17WorkerProcessHost20CreateMessageFiltersEi
- fun:_ZN7content17WorkerProcessHost4InitEi
- fun:_ZN7content17WorkerServiceImpl24CreateWorkerFromInstanceENS_17WorkerProcessHost14WorkerInstanceE
- fun:_ZN7content17WorkerServiceImpl12CreateWorkerERK31ViewHostMsg_CreateWorker_ParamsiPNS_19WorkerMessageFilterEPNS_15ResourceContextERKNS_22WorkerStoragePartitionE
- fun:_ZN7content19WorkerMessageFilter14OnCreateWorkerERK31ViewHostMsg_CreateWorker_ParamsPi
-}
-{
- bug_83345 (Needs_Annotation)
- Memcheck:Leak
- ...
- fun:_ZN4base*23LeakyLazyInstanceTraits*NewEPv
- fun:_ZN4base12LazyInstance*LeakyLazyInstanceTraits*PointerEv
-}
-{
- bug_87500_a (Intentional)
- Memcheck:Leak
- ...
- fun:_ZN10disk_cache9BackendIO23ExecuteBackendOperationEv
- fun:_ZN10disk_cache9BackendIO16ExecuteOperationEv
-}
-{
- bug_79322 (Intentional)
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN4base*StatisticsRecorderTest_*_Test8TestBodyEv
-}
-{
- # According to dglazkov, UA style sheets are intentionally leaked.
- # As such, treat any leaks originating from parseUASheet as intentional.
- bug_121729 (Intentional)
- Memcheck:Leak
- ...
- fun:_ZN7WebCoreL12parseUASheetEPKcj
-}
-{
- bug_121729_b (Intentional)
- Memcheck:Leak
- ...
- fun:_ZN7WebCoreL12parseUASheetERKN3WTF6StringE
-}
-{
- intentional_see_bug_156466
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN3ash5ShellC1EPNS_13ShellDelegateE
- fun:_ZN3ash5Shell14CreateInstanceEPNS_13ShellDelegateE
-}
-{
- intentional OOM in layout test: fast/js/string-replacement-outofmemory.html
- Memcheck:Unaddressable
- fun:_ZN7WebCoreL28reportFatalErrorInMainThreadEPKcS1_
- fun:_ZN2v88internal2V823FatalProcessOutOfMemoryEPKcb
- ...
- fun:_ZN7WebCore16HTMLScriptRunner36executePendingScriptAndDispatchEventERNS_13PendingScriptE
-}
-
-# http://crbug.com/269278 causes really widespread, flaky leaks in
-# value objects that own some memory. These suppressions will cover
-# all such objects, even though it's possible to get real leaks that
-# look the same way (e.g. by allocating such an object in an arena).
-{
- bug_269278a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base4Bind*Callback*BindState*
-}
-{
- bug_269278b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocator*allocate*
- fun:_ZNSt12_Vector_base*_M_allocate*
-}
-
-
-#-----------------------------------------------------------------------
-# 3. Suppressions for real chromium bugs that are not yet fixed.
-# These should all be in chromium's bug tracking system (but a few aren't yet).
-
-{
- # Chromium flakily leaks tasks at shutdown, see
- # http://crbug.com/6532
- # http://codereview.chromium.org/20067
- # http://codereview.chromium.org/42083
- # To reproduce, run ipc tests
- # This is the -O0 case
- # In Purify, they don't even try to free them anymore.
- # For now, in Valgrind, we'll add suppressions to ignore these leaks.
- bug_6532
- Memcheck:Leak
- fun:_Znw*
- fun:_Z17NewRunnableMethodIN3IPC12ChannelProxy7ContextEMS2_FvvEEP14CancelableTaskPT_T0_
-}
-{
- # See http://crbug.com/6532
- # This is the -O1 case
- bug_6532b
- Memcheck:Leak
- ...
- fun:_ZN3IPC12ChannelProxy7Context14OnChannelErrorEv
- fun:_ZN3IPC7Channel11ChannelImpl28OnFileCanReadWithoutBlockingEi
-}
-{
- # webkit leak? See http://crbug.com/9503
- bug_9503
- Memcheck:Leak
- ...
- fun:_ZN19TestWebViewDelegate24UpdateSelectionClipboardEb
-}
-{
- # very common in ui tests
- bug_16091
- Memcheck:Leak
- ...
- fun:_ZN4base11MessageLoop22AddDestructionObserverEPNS0_19DestructionObserverE
- ...
- fun:_ZN3IPC11SyncChannel11SyncContext15OnChannelOpenedEv
-}
-{
- # very common in ui tests
- bug_16092
- Memcheck:Leak
- fun:*
- fun:_ZN4base11MessageLoopC1ENS0_4TypeE
- fun:_ZN4base6Thread10ThreadMainEv
-}
-{
- # very common in ui tests
- bug_16092b
- Memcheck:Leak
- ...
- fun:_ZNSt11_Deque_baseIN4base11PendingTaskESaIS1_EE17_M_initialize_mapE*
- ...
- fun:_ZN4base11MessageLoopC1ENS0_4TypeE
-}
-{
- # very common in ui tests
- bug_16092c
- Memcheck:Leak
- ...
- fun:_ZNSt14priority_queueIN11MessageLoop11PendingTaskESt6vectorIS1_SaIS1_EESt4lessIS1_EEC1ERKS6_RKS4_
- fun:_ZN4base11MessageLoopC1ENS0_4TypeE
- fun:_ZN4base6Thread10ThreadMainEv
-}
-{
- # very common in ui tests, also seen in Linux Reliability
- bug_16093
- Memcheck:Leak
- ...
- fun:getaddrinfo
-}
-{
- # very common in ui tests, also seen in Linux Reliability
- bug_16095
- Memcheck:Leak
- ...
- fun:_ZN4base11MessageLoop21AddToDelayedWorkQueueERKN*PendingTaskE
- fun:_ZN4base11MessageLoop6DoWorkEv
-}
-{
- bug_16128
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN3IPC11SyncChannelC1E*
- ...
- fun:_ZN7content11ChildThread4InitEv
-}
-{
- bug_16326
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN11webkit_glue16WebURLLoaderImplC1Ev
- fun:_ZN11webkit_glue16WebKitClientImpl15createURLLoaderEv
- fun:_ZN7WebCore22ResourceHandleInternal5startEv
-}
-{
- bug_17291
- Memcheck:Leak
- fun:malloc
- fun:_ZN3WTF10fastMallocE*
- ...
- fun:_ZN2v88internal8JSObject23SetPropertyWithCallbackEPNS0_6ObjectEPNS0_6StringES3_PS1_
-}
-{
- # also bug 17979. It's a nest of leaks.
- bug_17385
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN3IPC12ChannelProxy7Context13CreateChannel*Channel4ModeE
- fun:_ZN3IPC12ChannelProxy4Init*
- ...
- fun:_ZN3IPC11SyncChannel*Channel4Mode*Listener*
-}
-{
- bug_17540
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base19MessagePumpLibevent19WatchFileDescriptor*FileDescriptorWatcherEPNS0_7WatcherE
- fun:_ZN4base16MessageLoopForIO19WatchFileDescriptor*MessagePumpLibevent21FileDescriptorWatcherEPNS2_7WatcherE
- ...
- fun:_ZN3IPC7Channel11ChannelImpl7ConnectEv
- fun:_ZN3IPC7Channel7ConnectEv
- fun:_ZN3IPC12ChannelProxy7Context15OnChannelOpenedEv
-}
-{
- bug_19196
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN2v817RegisterExtensionEPNS_9ExtensionE
- fun:_ZN7WebCore7V8Proxy23registerExtensionWithV8EPN2v89ExtensionE
- fun:_ZN7WebCore7V8Proxy17registerExtensionEPN2v89ExtensionEi
- fun:_ZN5blink17registerExtensionEPN2v89ExtensionEi
- fun:_ZN12RenderThread23EnsureWebKitInitializedEv
-}
-{
- bug_19371
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN4base13WaitableEvent7EnqueueEPNS0_6WaiterE
- fun:_ZN4base13WaitableEvent9TimedWaitERKNS_9TimeDeltaE
- fun:_ZN4base13WaitableEvent4WaitEv
- fun:_ZN4base18MessagePumpDefault3RunEPNS_11MessagePump8DelegateE
-}
-{
- # slight variant of the above
- bug_19371a
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN4base13WaitableEvent7EnqueueEPNS0_6WaiterE
- fun:_ZN4base13WaitableEvent9TimedWaitERKNS_9TimeDeltaE
- fun:_ZN4base18MessagePumpDefault3RunEPNS_11MessagePump8DelegateE
-}
-{
- bug_19377
- Memcheck:Leak
- fun:calloc
- ...
- fun:event_base_new
- fun:_ZN4base19MessagePumpLibeventC1Ev
- fun:_ZN4base11MessageLoopC1ENS0_4TypeE
- fun:_ZN4base6Thread10ThreadMainEv
-}
-{
- bug_19463
- Memcheck:Leak
- ...
- fun:_ZN4base19MessagePumpLibevent4InitEv
- fun:_ZN4base19MessagePumpLibeventC1Ev
- fun:_ZN4base11MessageLoopC1ENS0_4TypeE
-}
-{
- bug_19775_a
- Memcheck:Leak
- ...
- fun:malloc
- fun:sqlite3MemMalloc
- fun:mallocWithAlarm
- fun:sqlite3Malloc
- ...
- fun:sqlite3VdbeExec
- fun:sqlite3Step
- fun:sqlite3_step
- fun:sqlite3_exec
- fun:_ZN3sql10Connection7Execute*
- ...
- fun:_ZN7history*Database*Create*
-}
-{
- bug_19775_c
- Memcheck:Leak
- ...
- fun:openDatabase
- fun:sqlite3_open
- fun:_ZN3sql10Connection12OpenInternalERKSs
-}
-{
- bug_19775_g
- Memcheck:Leak
- fun:malloc
- fun:sqlite3MemMalloc
- fun:mallocWithAlarm
- fun:sqlite3Malloc
- fun:sqlite3ParserAlloc
- fun:sqlite3RunParser
- fun:sqlite3Prepare
- fun:sqlite3LockAndPrepare
- fun:sqlite3_prepare*
-}
-{
- bug_19775_h
- Memcheck:Leak
- ...
- fun:malloc
- fun:sqlite3MemMalloc
- fun:mallocWithAlarm
- fun:sqlite3Malloc
- ...
- fun:yy_reduce
-}
-# IPCing uninitialized data
-{
- bug_20997_a
- Memcheck:Param
- socketcall.sendmsg(msg.msg_iov[i])
- fun:sendmsg*
- fun:_ZN3IPC7Channel11ChannelImpl4SendEPNS_7MessageE
-}
-{
- bug_20997_b
- Memcheck:Param
- socketcall.sendmsg(msg.msg_iov[i])
- fun:sendmsg$UNIX2003
- ...
- fun:_ZN4base19MessagePumpLibevent21FileDescriptorWatcher28OnFileCanReadWithoutBlockingEiPS0_
- ...
- fun:event_process_active
- fun:event_base_loop
-}
-{
- bug_22098
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base19MessagePumpLibevent19WatchFileDescriptorEibNS0_4ModeEPNS0_21FileDescriptorWatcherEPNS0_7WatcherE
- fun:_ZN4base16MessageLoopForIO19WatchFileDescriptorEibNS_4ModeEPN4base19MessagePumpLibevent21FileDescriptorWatcherEPNS2_7WatcherE
- fun:_ZN3IPC7Channel11ChannelImpl23ProcessOutgoingMessagesEv
- fun:_ZN3IPC7Channel11ChannelImpl4SendEPNS_7MessageE
- fun:_ZN3IPC7Channel4SendEPNS_7MessageE
- fun:_ZN3IPC12ChannelProxy7Context13OnSendMessageEPNS_7MessageE
- fun:_ZN3IPC8SendTask3RunEv
-}
-{
- bug_22923
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN13WorkerService12CreateWorker*
- fun:_ZN19RenderMessageFilter14OnCreateWorker*
-}
-{
- bug_27665
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN10SkXfermode6CreateENS_4ModeE
- fun:_ZN7SkPaint15setXfermodeModeEN10SkXfermode4ModeE
- fun:_ZNK7WebCore19PlatformContextSkia16setupPaintCommonEP7SkPaint
- fun:_ZN7WebCore15GraphicsContext8fillRectERKNS_9FloatRectERKNS_5ColorENS_10ColorSpaceE
- fun:_ZN7WebCore15GraphicsContext8fillRectERKNS_9FloatRectERKNS_5ColorENS_10ColorSpaceENS_17CompositeOperatorE
-}
-# The following three suppressions are related to the workers code.
-{
- bug_27837
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN19WebSharedWorkerStub9OnConnectEii
-}
-{
- # GTK tooltip doesn't always initialize variables.
- # https://bugzilla.gnome.org/show_bug.cgi?id=554686
- tooltip_554686
- Memcheck:Uninitialized
- fun:child_location_foreach
- fun:gtk_fixed_forall
- ...
- fun:find_widget_under_pointer
- fun:gtk_tooltip_show_tooltip
- fun:tooltip_popup_timeout
- fun:gdk_threads_dispatch
- fun:g_timeout_dispatch
-}
-{
- bug_29675
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN27ChromeBrowserMainPartsPosix24PostMainMessageLoopStartEv
- fun:_ZN7content15BrowserMainLoop20MainMessageLoopStartEv
- fun:_ZN7content21BrowserMainRunnerImpl10InitializeERKNS_18MainFunctionParamsE
- fun:_ZN7content11BrowserMainERKNS_18MainFunctionParamsE
- fun:_ZN7content23RunNamedProcessTypeMainERKSsRKNS_18MainFunctionParamsEPNS_19ContentMainDelegateE
- fun:_ZN7content21ContentMainRunnerImpl3RunEv
- fun:_ZN7content11ContentMainEiPPKcPNS_19ContentMainDelegateE
- fun:ChromeMain
-}
-{
- bug_30346
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN13TCMallocGuardC1Ev
- fun:_Z41__static_initialization_and_destruction_0ii
- fun:_GLOBAL__I__ZN61FLAG__namespace_do_not_use_directly_use_DECLARE_int64_instead43FLAGS_tcmalloc_large_alloc_report_thresholdE
-}
-{
- bug_30346b
- Memcheck:Unaddressable
- ...
- fun:_ZSt22__get_temporary_bufferIPN7WebCore11RenderLayerEESt4pairIPT_iEiS5_
- fun:_ZNSt17_Temporary_bufferIPPN7WebCore11RenderLayerES2_EC1ES3_S3_
- fun:_ZN7WebCore11RenderLayer17updateZOrderListsEv
- fun:_ZN7WebCore11RenderLayer24updateLayerListsIfNeededEv
- fun:_ZN7WebCore11RenderLayer38updateCompositingAndLayerListsIfNeededEv
-}
-{
- bug_30703a
- Memcheck:Param
- write(buf)
- ...
- fun:zipCloseFileInZipRaw
- fun:zipCloseFileInZip
- fun:_Z*13AddEntryToZip*
-}
-{
- bug_30703b
- Memcheck:Uninitialized
- fun:deflate
- ...
- fun:zipCloseFileInZipRaw
- fun:zipCloseFileInZip
- fun:_Z*13AddEntryToZip*
-}
-{
- bug_30704a
- Memcheck:Uninitialized
- fun:crc32
- ...
- fun:png_write_row
-}
-{
- bug_30704b
- Memcheck:Param
- write(buf)
- ...
- fun:_ZN26SandboxedUnpacker17RewriteImageFilesEv
-}
-{
- bug_30704c
- Memcheck:Param
- write(buf)
- ...
- fun:_ZNK16BrowserThemePack11WriteToDiskE*
-}
-{
- bug_30704d
- Memcheck:Uninitialized
- ...
- fun:png_process_data
- fun:_ZN7WebCore14PNGImageReader6decodeERKNS_12SharedBufferEb
- fun:_ZN7WebCore15PNGImageDecoder6decodeEb
- fun:_ZN7WebCore15PNGImageDecoder18frameBufferAtIndexEm
-}
-{
- bug_30704e
- Memcheck:Uninitialized
- obj:*/libpng*
- fun:png_write_row
-}
-{
- bug_30704f
- Memcheck:Uninitialized
- ...
- fun:wk_png_write_find_filter
- fun:wk_png_write_row
-}
-{
- bug_30704g
- Memcheck:Param
- write(buf)
- obj:*libpthread*
- fun:_ZN9file_util19WriteFileDescriptorE*
- fun:_ZN9file_util9WriteFileE*
- fun:*SaveScreenshotInternalE*4base8Callback*
- fun:*SaveScreenshotE*4base8Callback*
-}
-{
- bug_87232
- Memcheck:Uninitialized
- fun:_ZN7WebCore12base64EncodeEPKcjRN3WTF6VectorIcLj0EEEb
- fun:_ZN7WebCore12base64EncodeERKN3WTF6VectorIcLj0EEERS2_b
- fun:_ZN7WebCore*14ImageToDataURL*SkBitmapEEN3WTF6StringERT_*
-}
-{
- bug_31985
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN3net16HttpNetworkLayer10GetSessionEv
- fun:_ZN3net16HttpNetworkLayer17CreateTransactionEP10scoped_ptrINS_15HttpTransactionEE
- fun:_ZN3net9HttpCache11Transaction13DoSendRequestEv
- fun:_ZN3net9HttpCache11Transaction6DoLoopEi
-}
-{
- bug_32085
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorIN7content21NotificationRegistrar6RecordEE8allocate*
- fun:_ZNSt12_Vector_baseIN7content21NotificationRegistrar6RecordESaIS*
- fun:_ZNSt6vectorIN7content21NotificationRegistrar6RecordESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S*
- fun:_ZNSt6vectorIN7content21NotificationRegistrar6RecordESaIS*
- fun:_ZN7content21NotificationRegistrar3Add*
-}
-{
- bug_32273_a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN3IPC12ChannelProxy4SendEPNS_7MessageE
- fun:_ZN3IPC11SyncChannel15SendWithTimeoutEPNS_7MessageEi
- fun:_ZN3IPC11SyncChannel4SendEPNS_7MessageE
- fun:_ZN11ChildThread4SendEPN3IPC7MessageE
- fun:_ZN12RenderThread4SendEPN3IPC7MessageE
- fun:_ZN12RenderWidget4SendEPN3IPC7MessageE
- fun:_ZN12RenderWidget16DoDeferredUpdateEv
- fun:_ZN12RenderWidget20CallDoDeferredUpdateEv
-}
-{
- bug_32273_b
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN24BrowserRenderProcessHost4SendEPN3IPC7MessageE
- fun:_ZN16RenderWidgetHost4SendEPN3IPC7MessageE
-}
-{
- bug_32623
- Memcheck:Leak
- ...
- fun:ssl3_HandleHandshakeMessage
- fun:ssl3_HandleHandshake
- fun:ssl3_HandleRecord
- fun:ssl3_GatherCompleteHandshake
- fun:SSL_ForceHandshake
- fun:_ZN3net18SSLClientSocketNSS4Core11DoHandshakeEv
-}
-{
- bug_32624_b
- Memcheck:Leak
- fun:malloc
- obj:*
- obj:*
- obj:*
- obj:*
- obj:*
- obj:*
- obj:*
- obj:*
- obj:*
- obj:*
- obj:*
- obj:*
- obj:*
- obj:*
- obj:*
- obj:*
- obj:*
- obj:*
- obj:*
- obj:*
- fun:secmod_ModuleInit
-}
-{
- bug_32624_c
- Memcheck:Leak
- ...
- fun:malloc
- ...
- fun:PORT_Alloc_Util
- ...
- fun:PK11_InitPin
-}
-{
- bug_32624_f
- Memcheck:Leak
- ...
- fun:CERT_PKIXVerifyCert
- fun:_ZN3net12_GLOBAL__N_114PKIXVerifyCertE*
-}
-{
- bug_32624_g
- Memcheck:Leak
- ...
- fun:CERT_VerifySignedData
- fun:cert_VerifyCertChain
- fun:CERT_VerifyCertChain
- fun:CERT_VerifyCert
-}
-{
- bug_38138
- Memcheck:Param
- write(buf)
- obj:*libpthread*
- fun:_ZN3IPC7Channel11ChannelImpl23ProcessOutgoingMessagesEv
- ...
- fun:_ZN4base19MessagePumpLibevent3RunEPNS_11MessagePump8DelegateE
- fun:_ZN4base11MessageLoop11RunInternalEv
- fun:_ZN4base11MessageLoop10RunHandlerEv
-}
-{
- bug_30633_39325
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN11ProfileImpl17GetRequestContextEv
- fun:_ZN19SafeBrowsingService5StartEv
- fun:_ZN19SafeBrowsingService10InitializeEv
- fun:_ZN22ResourceDispatcherHost10InitializeEv
- fun:_ZN18BrowserProcessImpl28CreateResourceDispatcherHostEv
- fun:_ZN18BrowserProcessImpl24resource_dispatcher_hostEv
- fun:_ZN16ExtensionService4InitEv
-}
-{
- bug_42842
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN19TestWebViewDelegate12createWorkerEPN5blink8WebFrameEPNS0_15WebWorkerClientE
- fun:_ZN5blink19WebWorkerClientImpl24createWorkerContextProxyEPN7WebCore6WorkerE
- fun:_ZN7WebCore18WorkerContextProxy6createEPNS_6WorkerE
- fun:_ZN7WebCore6WorkerC1EPNS_22ScriptExecutionContextE
- fun:_ZN7WebCore6Worker6createERKN3WTF6StringEPNS_22ScriptExecutionContextERi
- fun:_ZN7WebCore8V8Worker19constructorCallbackERKN2v89ArgumentsE
-}
-{
- bug_42942_a
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN3sql10Connection18GetCachedStatementERKNS_11StatementIDEPKc
- fun:_ZN3sql9MetaTable19PrepareGetStatementEPNS_9StatementEPKc
- fun:_ZN3sql9MetaTable8GetValueEPKcPi
- fun:_ZN3sql9MetaTable26GetCompatibleVersionNumberEv
- ...
- fun:_ZN3net13CookieMonster9InitStoreEv
-}
-{
- bug_42942_b
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN3sql10Connection18GetCachedStatementERKNS_11StatementIDEPKc
- fun:_ZN3sql9MetaTable19PrepareSetStatementEPNS_9StatementEPKc
- fun:_ZN3sql9MetaTable8SetValueEPKci
- fun:_ZN3sql9MetaTable16SetVersionNumberEi
- ...
- fun:_ZN3net13CookieMonster9InitStoreEv
-}
-{
- bug_42958_a
- Memcheck:Leak
- fun:malloc
- ...
- fun:_NPN_RegisterObject
- fun:_ZN7WebCore16ScriptController20windowScriptNPObjectEv
- fun:_ZNK6WebKit12WebFrameImpl12windowObjectEv
- fun:_ZN6webkit5npapi13WebPluginImpl23GetWindowScriptNPObjectEv
- fun:NPN_GetValue
-}
-{
- bug_42958_b
- Memcheck:Leak
- fun:malloc
- ...
- fun:_NPN_RegisterObject
- fun:_ZN7WebCore25createV8ObjectForNPObjectEP8NPObjectS1_
- fun:_ZN7WebCore16ScriptController18bindToWindowObjectEPNS_5FrameERKN3WTF6StringEP8NPObject
- fun:_ZN5blink12WebFrameImpl18bindToWindowObjectERKNS_9WebStringEP8NPObject
- fun:_ZN13CppBoundClass16bindToJavascriptEPN5blink8WebFrameERKNS0_9WebStringE
-}
-{
- bug_42958_c
- Memcheck:Leak
- fun:malloc
- ...
- fun:_NPN_RegisterObject
- fun:_ZN7WebCore25createV8ObjectForNPObjectEP8NPObjectS1_
- fun:_ZN7WebCore16ScriptController29createScriptInstanceForWidgetEPNS_6WidgetE
- fun:_ZN*7WebCore17HTMLPlugInElement11getInstanceEv
-}
-{
- bug_43471
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorIPN4base11MessageLoop19DestructionObserverEE8allocateE*
- fun:_ZNSt12_Vector_baseIPN4base11MessageLoop19DestructionObserverESaIS*
- fun:_ZNSt6vectorIPN4base11MessageLoop19DestructionObserverESaIS*
- fun:_ZNSt6vectorIPN4base11MessageLoop19DestructionObserverESaIS*
- fun:_ZN16ObserverListBaseIN4base11MessageLoop19DestructionObserverEE11AddObserverEPS*
- fun:_ZN4base11MessageLoop22AddDestructionObserverEPNS0_19DestructionObserverE
-}
-{
- bug_46250
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorIPN11MessageLoop12TaskObserverEE8allocateEjPKv
- fun:_ZNSt12_Vector_baseIPN11MessageLoop12TaskObserverESaIS2_EE11_M_allocateEj
- fun:_ZNSt6vectorIPN11MessageLoop12TaskObserverESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_
- fun:_ZNSt6vectorIPN11MessageLoop12TaskObserverESaIS2_EE9push_backERKS2_
- fun:_ZN16ObserverListBaseIN11MessageLoop12TaskObserverEE11AddObserverEPS1_
- fun:_ZN4base11MessageLoop15AddTaskObserverEPNS_12TaskObserverE
- fun:*IOJankObserver21AttachToCurrentThreadEv
-}
-{
- bug_47950
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:*CreateSpdyHeadersFromHttpRequestERKN3net15HttpRequestInfoEPSt3mapISsSsSt4lessISsESaISt4pairIKSsSsEEE
-}
-{
- bug_49279_a
- Memcheck:Leak
- fun:_Znw*
- fun:*ChromeCookieMonsterDelegateC1EP7Profile
- fun:_ZN30ChromeURLRequestContextFactoryC2EP7Profile
-}
-{
- bug_49279_b
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN29ChromeURLRequestContextGetter28CreateRequestContextForMediaE*
- fun:_ZN29ChromeURLRequestContextGetter22CreateOriginalForMediaE*
- fun:_ZN11ProfileImpl25GetRequestContextForMediaEv
-}
-{
- bug_49279_c
- Memcheck:Leak
- fun:_Znw*
- fun:*ChromeCookieMonsterDelegateC2EP7Profile
- fun:*ChromeCookieMonsterDelegateC1EP7Profile
- fun:_ZN30ChromeURLRequestContextFactoryC2EP7Profile
-}
-{
- bug_50304
- Memcheck:Leak
- ...
- fun:_ZN7history14HistoryBackend8InitImpl*
- fun:_ZN7history14HistoryBackend4Init*
-}
-{
- bug_50936
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN23OffTheRecordProfileImpl4InitEv
- fun:_ZN7Profile25CreateOffTheRecordProfileEv
- fun:_ZN11ProfileImpl22GetOffTheRecordProfileEv
-}
-{
- bug_50968_a
- Memcheck:Leak
- ...
- fun:_ZN14WebDataService29InitializeDatabaseIfNecessaryEv
-}
-{
- bug_50968_b
- Memcheck:Unaddressable
- ...
- fun:_ZN14WebDataService29InitializeDatabaseIfNecessaryEv
-}
-{
- bug_50968_d
- Memcheck:Uninitialized
- ...
- fun:_ZN14WebDataService29InitializeDatabaseIfNecessaryEv
-}
-{
- bug_56359_a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN3net9HttpCache24GetBackendForTransactionEPNS0_11TransactionE
- fun:_ZN3net9HttpCache11Transaction12DoGetBackendEv
- fun:_ZN3net9HttpCache11Transaction6DoLoopEi
- fun:_ZN3net9HttpCache11Transaction5StartEPKNS_15HttpRequestInfoEP14CallbackRunnerI6Tuple1IiEERKNS_11BoundNetLogE
- fun:_ZN17URLRequestHttpJob16StartTransactionEv
- fun:_ZN17URLRequestHttpJob24OnCanGetCookiesCompletedEi
- fun:_ZN17URLRequestHttpJob23AddCookieHeaderAndStartEv
- fun:_ZN17URLRequestHttpJob5StartEv
- fun:_ZN10URLRequest8StartJobEP13URLRequestJob
- fun:_ZN10URLRequest5StartEv
- fun:_ZN10URLFetcher4Core15StartURLRequestEv
-}
-{
- bug_51153
- Memcheck:Leak
- ...
- fun:_ZN7history14HistoryBackend16GetFaviconForURLE13scoped_refptrI17CancelableRequestI14CallbackRunnerI6Tuple5IibS1_I16RefCountedMemoryEb4GURLEEEERKS7_
-}
-{
- bug_51379
- Memcheck:Leak
- fun:malloc
- ...
- obj:/usr/lib/libpangocairo-1.0.so.0.2002.3
- ...
- fun:_ZN3gfx10Canvas13DrawStringIntERKSbIwSt11char_traitsIwESaIwEERKNS_4FontERKjiiiii
- fun:_ZN3gfx10Canvas13DrawStringIntERKSbIwSt11char_traitsIwESaIwEERKNS_4FontERKjiiii
-}
-{
- bug_51590a
- Memcheck:Unaddressable
- ...
- fun:_ZN7WebCore13TextRunWalker13nextScriptRunEv
- fun:_ZN7WebCore13TextRunWalker14widthOfFullRunEv
-}
-{
- bug_51590b
- Memcheck:Unaddressable
- ...
- fun:_ZN7WebCore13TextRunWalker13nextScriptRunEv
- fun:_ZN7WebCore13TextRunWalker14widthOfFullRunEv
-}
-{
- bug_51590c
- Memcheck:Unaddressable
- ...
- fun:_ZN7WebCore13TextRunWalker13nextScriptRunEv
- fun:_ZN7WebCore13TextRunWalker14widthOfFullRunEv
-}
-{
- bug_51679
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN23MessageService16AddEventListenerERKSsi
- fun:_ZN24BrowserRenderProcessHost22OnExtensionAddListenerERKSs
-}
-{
- bug_52831
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:*InotifyReaderTask3RunEv
- ...
- fun:_ZN4base11MessageLoop11RunInternalEv
- fun:_ZN4base11MessageLoop10RunHandlerEv
-}
-{
- bug_52837
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZNSt3map*FilePath*insert*
- fun:_ZNSt3map*FilePath*ix*
- fun:_ZN16ExtensionService15UnloadExtensionERKSs
- fun:_ZN16ExtensionService18UninstallExtensionERKSsb
- fun:_ZN18AutomationProvider18UninstallExtensionEiPb
-}
-{
- bug_52957
- Memcheck:Unaddressable
- fun:glGetString
- fun:_ZN18gpu_info_collector19CollectGraphicsInfoER7GPUInfo
- fun:_ZN9GpuThread18OnEstablishChannelEi
-}
-{
- bug_54308
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZNK8chromeos25CrosSettingsProviderProxy3GetERKSsPP5Value
- fun:_ZNK8chromeos12CrosSettings3GetERKSsPP5Value
- fun:_ZN8chromeos26CoreChromeOSOptionsHandler9FetchPrefERKSs
- fun:_ZN18CoreOptionsHandler16HandleFetchPrefsEPK9ListValue
-}
-{
- bug_55533
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN5IDMapIN3IPC7Channel8ListenerEL23IDMapOwnershipSemantics*
- fun:_ZN17RenderProcessHost*Profile
- fun:_ZN21MockRenderProcessHost*Profile
-}
-{
- bug_56676
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorIN4base15file_util_proxy5EntryEE8allocate*
- fun:_ZNSt12_Vector_baseIN4base15file_util_proxy5EntryESaIS2_EE11_M_allocate*
- fun:_ZNSt6vectorIN4base15file_util_proxy5EntryESaIS2_EE20_M_allocate_and_copyIN9__gnu_cxx17__normal_iteratorIPKS2*
- fun:_ZNSt6vectorIN4base15file_util_proxy5EntryESaIS2_EEaSERKS4_
- fun:_ZN14MockDispatcher16DidReadDirectoryERKSt6vectorIN4base15file_util_proxy5EntryESaIS3_EEb
- fun:_ZN7fileapi19FileSystemOperation16DidReadDirectoryEN4base17PlatformFileErrorERKSt6vectorINS1_15file_util_proxy5EntryESaIS5_EE
-}
-{
- bug_58321
- Memcheck:Unaddressable
- fun:_ZNK3WTF6RefPtrIN7WebCore5FrameEE3getEv
- fun:_ZN7WebCore14ResourceLoader18didReceiveResponseEPNS_14ResourceHandleERKNS_16ResourceResponseE
- fun:_ZN7WebCore22ResourceHandleInternal18didReceiveResponseEPN5blink12WebURLLoaderERKNS1_14WebURLResponseE
- fun:_ZN11webkit_glue16WebURLLoaderImpl7Context18OnReceivedResponseERKNS_20ResourceLoaderBridge12ResponseInfoEb
- fun:_ZN85_GLOBAL__N_webkit_tools_test_shell_simple_resource_loader_bridge.cc_00000000_*12RequestProxy22NotifyReceivedResponseERKN11webkit_glue20ResourceLoaderBridge12ResponseInfoEb
-}
-{
- bug_58340
- Memcheck:Unaddressable
- fun:_ZNK3WTF6RefPtrIN7WebCore5FrameEE3getEv
- fun:_ZN7WebCore14ResourceLoader18didReceiveResponseEPNS_14ResourceHandleERKNS_16ResourceResponseE
- fun:_ZN7WebCore22ResourceHandleInternal18didReceiveResponseEPN5blink12WebURLLoaderERKNS1_14WebURLResponseE
- fun:_ZN11webkit_glue16WebURLLoaderImpl7Context18OnReceivedResponseERKNS_20ResourceResponseInfoEb
-}
-{
- bug_58546
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN27SSLConfigServiceManagerPrefC1EP7Profile
- fun:_ZN23SSLConfigServiceManager20CreateDefaultManagerEP7Profile
- fun:_ZN11ProfileImplC1E*
- fun:_ZN7Profile13CreateProfileE*
- fun:_ZN14ProfileManager13CreateProfileE*
- fun:_ZN14ProfileManager10GetProfileE*
- fun:_ZN14ProfileManager17GetDefaultProfileE*
- fun:_ZN14ProfileManager17GetDefaultProfileEv
-}
-{
- bug_58561
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN3net8internal26ClientSocketPoolBaseHelper16GetOrCreateGroupERKSs
- fun:_ZN3net8internal26ClientSocketPoolBaseHelper13RequestSocketERKSsPKNS1_7RequestE
- fun:_ZN3net20ClientSocketPoolBaseINS_*
- fun:_ZN3net*SocketPool13RequestSocketE*
- fun:_ZN3net18ClientSocketHandle4InitINS_*
- ...
- fun:_ZN3net21HttpStreamFactoryImpl3Job16DoInitConnectionEv
- fun:_ZN3net21HttpStreamFactoryImpl3Job6DoLoopEi
-}
-{
- bug_58564
- Memcheck:Leak
- fun:calloc
- ...
- fun:SSL_ImportFD
- fun:_ZN3net18SSLClientSocketNSS20InitializeSSLOptionsEv
- fun:_ZN3net18SSLClientSocketNSS7ConnectEP14CallbackRunnerI6Tuple1IiEE
- fun:_ZN3net13SSLConnectJob12DoSSLConnectEv
- fun:_ZN3net13SSLConnectJob6DoLoopEi
-}
-{
- bug_58574
- Memcheck:Unaddressable
- ...
- fun:_ZN4base11MessageLoop8PostTaskERKN15tracked_objects8LocationERKN4base8CallbackIFvvEEE
- fun:_ZN3net12CertVerifier7Request8DoVerifyEv
-}
-{
- bug_60556a
- Memcheck:Unaddressable
- ...
- fun:sqlite3_exec
- fun:_ZN3sql10Connection7ExecuteEPKc
- fun:_ZN11WebDatabase*
-}
-{
- bug_60556b
- Memcheck:Unaddressable
- ...
- fun:sqlite3_exec
- fun:_ZN3sql10Connection7ExecuteEPKc
- fun:_ZN11WebDatabase*
-}
-{
- bug_60556c
- Memcheck:Unaddressable
- ...
- fun:sqlite3_step
- fun:_ZN3sql9Statement3RunEv
- fun:_ZN3sql10Connection17CommitTransactionEv
- fun:_ZN3sql11Transaction6CommitEv
- fun:_ZN11WebDatabase*
-}
-{
- bug_60556d
- Memcheck:Unaddressable
- ...
- fun:sqlite3_step
- fun:_ZN3sql9Statement3RunEv
- fun:_ZN3sql10Connection17CommitTransactionEv
- fun:_ZN3sql11Transaction6CommitEv
- fun:_ZN11WebDatabase*
-}
-{
- bug_60556e
- Memcheck:Param
- read(buf)
- ...
- fun:sqlite3_exec
- fun:_ZN3sql10Connection7ExecuteEPKc
- fun:_ZN11WebDatabase*
-}
-{
- bug_60556f
- Memcheck:Unaddressable
- ...
- fun:sqlite3_close
- fun:_ZN3sql10Connection5CloseEv
- fun:_ZN3sql10ConnectionD2Ev
- fun:_ZN3sql10ConnectionD1Ev
- fun:_ZN11WebDatabase*
-}
-{
- bug_60556g
- Memcheck:Unaddressable
- ...
- fun:sqlite3_step
- fun:_ZN3sql9Statement4StepEv
- fun:_ZN7history11URLDatabase12GetRowForURLERK4GURLPNS_6URLRowE
- fun:_ZN7history14HistoryBackend12AddPageVisitERK4GURLN4base4TimeExjNS_11VisitSourceE
-}
-{
- bug_60654
- Memcheck:Uninitialized
- fun:_ZN7WebCore25GraphicsContext3DInternal7reshapeEii
- fun:_ZN7WebCore17GraphicsContext3D7reshapeEii
- fun:_ZN7WebCore21WebGLRenderingContextC1EPNS_17HTMLCanvasElementEN3WTF10PassRefPtrINS_17GraphicsContext3DEEE
- fun:_ZN7WebCore21WebGLRenderingContext6createEPNS_17HTMLCanvasElementEPNS_22WebGLContextAttributesE
- fun:_ZN7WebCore17HTMLCanvasElement10getContextERKN3WTF6StringEPNS_23CanvasContextAttributesE
- ...
- fun:_ZN2v88internal6InvokeEbNS0_6HandleINS0_10JSFunctionEEENS1_INS0_6ObjectEEEiPPPS4_Pb
-}
-{
- bug_60667c
- Memcheck:Leak
- ...
- obj:*
- fun:_ZN3gpu5gles216GLES2DecoderImpl15DoCompileShaderEj
- fun:_ZN3gpu5gles216GLES2DecoderImpl19HandleCompileShaderEjRKNS0_13CompileShaderE
- fun:_ZN3gpu5gles216GLES2DecoderImpl9DoCommandEjjPKv
-}
-{
- bug_64887_a
- Memcheck:Uninitialized
- fun:_itoa_word
- fun:vfprintf
- fun:vsnprintf
- fun:snprintf
- fun:_ZN7testing*26PrintByteSegmentInObjectToEPKhmmPSo
- fun:_ZN7testing*24PrintBytesInObjectToImplEPKhmPSo
- fun:_ZN7testing9internal220PrintBytesInObjectToEPKhmPSo
- fun:_ZN7testing9internal220TypeWithoutFormatterI*
- fun:_ZN7testing9internal2lsIcSt11char_traitsIcE*
- fun:_ZN16testing_internal26DefaultPrintNonContainerToI*
- fun:_ZN7testing8internal14DefaultPrintToI*
- fun:_ZN7testing8internal7PrintToI*
- fun:_ZN7testing8internal16UniversalPrinterI*
- fun:_ZN7testing8internal14UniversalPrintI*
-}
-{
- bug_64887_b
- Memcheck:Uninitialized
- fun:_itoa_word
- fun:vfprintf
- fun:*vsnprintf*
- fun:*snprintf*
- fun:_ZN7testing*PrintByteSegmentInObjectTo*
- fun:_ZN7testing*PrintBytesInObjectToImplEPKhjPSo
- fun:_ZN7testing9internal220PrintBytesInObjectToEPKhjPSo
- fun:_ZN7testing9internal220TypeWithoutFormatter*
- fun:_ZN7testing9internal2lsIcSt11char_traitsIcE*
- fun:_ZN16testing_internal26DefaultPrintNonContainerTo*
- fun:_ZN7testing8internal14DefaultPrintToI*
- fun:_ZN7testing8internal7PrintToI*
- fun:_ZN7testing8internal16UniversalPrinterI*
- fun:_ZN7testing8internal14UniversalPrintI*
-}
-{
- bug_64887_c
- Memcheck:Uninitialized
- fun:_itoa_word
- fun:vfprintf
- fun:*vsnprintf*
- fun:*snprintf*
- fun:_ZN7testing*PrintByteSegmentInObjectTo*
- fun:_ZN7testing*PrintBytesInObjectToImplEPKhjPSo
- fun:_ZN7testing9internal220PrintBytesInObjectToEPKhjPSo
- fun:_ZN7testing9internal220TypeWithoutFormatter*
- fun:_ZN7testing9internal2lsIcSt11char_traitsIcE*
- fun:_ZN16testing_internal26DefaultPrintNonContainerTo*
- fun:_ZN7testing8internal14DefaultPrintToI*
- fun:_ZN7testing8internal7PrintToI*
- fun:_ZN7testing8internal16UniversalPrinterI*
- fun:_ZN7testing8internal14UniversalPrintI*
-}
-{
- bug_64887_d
- Memcheck:Uninitialized
- ...
- fun:_ZNSolsEx
- fun:_ZN7testing9internal220TypeWithoutFormatterIN5media7PreloadELNS0_8TypeKindE1EE10PrintValueERKS3_PSo
- fun:_ZN7testing9internal2lsIcSt11char_traitsIcEN5media7PreloadEEERSt13basic_ostreamIT_T0_ESA_RKT1_
- fun:_ZN16testing_internal26DefaultPrintNonContainerToIN5media7PreloadEEEvRKT_PSo
- fun:_ZN7testing8internal14DefaultPrintToIN5media7PreloadEEEvcNS0_13bool_constantILb0EEERKT_PSo
- fun:_ZN7testing8internal7PrintToIN5media7PreloadEEEvRKT_PSo
- fun:_ZN7testing8internal16UniversalPrinterIN5media7PreloadEE5PrintERKS3_PSo
- fun:_ZN7testing8internal18TuplePrefixPrinter*
- fun:_ZN7testing8internal12PrintTupleToINSt3tr15tupleIN5media7PreloadENS2*
- fun:_ZN7testing8internal7PrintToIN5media7PreloadEEEvRKNSt3tr15tupleIT*
- fun:_ZN7testing8internal16UniversalPrinterINSt3tr15tupleIN5media7PreloadENS2*
- fun:_ZN7testing8internal14UniversalPrintINSt3tr15tupleIN5media7PreloadENS2*
- fun:_ZNK7testing8internal18FunctionMockerBaseIFvN5media7PreloadEEE32UntypedDescribeUninterestingCallEPKvPSo
- fun:_ZN7testing8internal25UntypedFunctionMockerBase17UntypedInvokeWithEPKv
- fun:_ZN7testing8internal18FunctionMockerBaseIFvN5media7PreloadEEE10InvokeWithERKNSt3tr15tupleIS3*
- fun:_ZN7testing8internal14FunctionMockerIFvN5media7PreloadEEE6InvokeES3_
- fun:_ZN5media11MockDemuxer10SetPreloadENS_7PreloadE
-}
-{
- bug_64887_e
- Memcheck:Uninitialized
- ...
- fun:_ZNSolsEx
- fun:_ZN7testing9internal220TypeWithoutFormatterIN5media7PreloadELNS0_8TypeKindE1EE10PrintValueERKS3_PSo
- fun:_ZN7testing9internal2lsIcSt11char_traitsIcEN5media7PreloadEEERSt13basic_ostreamIT_T0_ESA_RKT1_
- fun:_ZN16testing_internal26DefaultPrintNonContainerToIN5media7PreloadEEEvRKT_PSo
- fun:_ZN7testing8internal14DefaultPrintToIN5media7PreloadEEEvcNS0_13bool_constantILb0EEERKT_PSo
- fun:_ZN7testing8internal7PrintToIN5media7PreloadEEEvRKT_PSo
- fun:_ZN7testing8internal16UniversalPrinterIN5media7PreloadEE5PrintERKS3_PSo
- fun:_ZN7testing8internal18TuplePrefixPrinter*
- fun:_ZN7testing8internal12PrintTupleToINSt3tr15tupleIN5media7PreloadENS2*
- fun:_ZN7testing8internal7PrintToIN5media7PreloadEEEvRKNSt3tr15tupleIT*
- fun:_ZN7testing8internal16UniversalPrinterINSt3tr15tupleIN5media7PreloadENS2*
- fun:_ZN7testing8internal14UniversalPrintINSt3tr15tupleIN5media7PreloadENS2*
- fun:_ZNK7testing8internal18FunctionMockerBaseIFvN5media7PreloadEEE32UntypedDescribeUninterestingCallEPKvPSo
- fun:_ZN7testing8internal25UntypedFunctionMockerBase17UntypedInvokeWithEPKv
- fun:_ZN7testing8internal18FunctionMockerBaseIFvN5media7PreloadEEE10InvokeWithERKNSt3tr15tupleIS3*
- fun:_ZN7testing8internal14FunctionMockerIFvN5media7PreloadEEE6InvokeES3_
- fun:_ZN5media11MockDemuxer10SetPreloadENS_7PreloadE
-}
-{
- bug_65940_a
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN3IPC12ChannelProxy7Context13CreateChannelERKNS_13ChannelHandleERKNS_7Channel4ModeE
- fun:_ZN3IPC12ChannelProxy4InitERKNS_13ChannelHandleENS_7Channel4ModeEP11MessageLoopb
- fun:_ZN3IPC12ChannelProxyC2ERKNS_13ChannelHandleENS_7Channel4ModeEP11MessageLoopPNS0_7ContextEb
- fun:_ZN3IPC11SyncChannelC1ERKNS_13ChannelHandleENS_7Channel4ModeEPNS4_8ListenerEP11MessageLoopbPN4base13WaitableEventE
-}
-{
- bug_65940_b
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN3IPC11SyncChannelC1ERKNS_13ChannelHandleENS_7Channel4ModeEPNS_8ListenerEPN4base22SingleThreadTaskRunnerEbPNS8_13WaitableEventE
- fun:_ZN7content11ChildThread4InitEv
- fun:_ZN7content11ChildThreadC2ERKSs
-}
-{
- bug_65940_c
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorI13scoped_refptrIN3IPC12ChannelProxy13MessageFilterEEE8allocateEmPKv
- fun:_ZNSt12_Vector_baseI13scoped_refptrIN3IPC12ChannelProxy13MessageFilterEESaIS4_EE11_M_allocateEm
- fun:_ZNSt6vectorI13scoped_refptrIN3IPC12ChannelProxy13MessageFilterEESaIS4_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS4_S6_EERKS4_
- fun:_ZNSt6vectorI13scoped_refptrIN3IPC12ChannelProxy13MessageFilterEESaIS4_EE9push_backERKS4_
- fun:_ZN3IPC12ChannelProxy7Context11OnAddFilterEv
-}
-{
- bug_65940_d
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7content11ChildThread4InitEv
- fun:_ZN7content11ChildThreadC*
- ...
- fun:_ZN7content21WebRTCAudioDeviceTest5SetUpEv
-}
-{
- bug_65940_e
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7content16RenderThreadImpl4InitEv
- fun:_ZN7content16RenderThreadImplC*
- ...
- fun:_ZN7content21WebRTCAudioDeviceTest5SetUpEv
-}
-{
- bug_66853_a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN11ProfileImpl14GetHostZoomMapEv
- ...
- fun:_ZNK17ProfileImplIOData6Handle27GetMainRequestContextGetterEv
- fun:_ZN11ProfileImpl17GetRequestContextEv
- fun:_ZN19SafeBrowsingService5StartEv
- fun:_ZN19SafeBrowsingService10InitializeEv
- fun:_ZN22ResourceDispatcherHost10InitializeEv
- fun:_ZN18BrowserProcessImpl28CreateResourceDispatcherHostEv
- fun:_ZN18BrowserProcessImpl24resource_dispatcher_hostEv
- fun:_ZN16ExtensionService4InitEv
- fun:_ZN11ProfileImpl14InitExtensionsE*
- fun:_ZN14ProfileManager10AddProfileEP7Profileb
-}
-{
- bug_67142
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN16ChildProcessHost13CreateChannelEv
- fun:_ZN14GpuProcessHost4InitEv
-}
-{
- bug_67261
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN3sql10Connection18GetUniqueStatementEPKc
- fun:_ZN3sql10Connection18GetCachedStatementERKNS_11StatementIDEPKc
- fun:_ZN8appcache16AppCacheDatabase22PrepareCachedStatementERKN3sql11StatementIDEPKcPNS1_9StatementE
-}
-{
- bug_67553
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZNSt3mapISs13scoped_refptrIK9ExtensionESt4lessISsESaISt4pairIKSsS3_EEEixERS7_
- fun:_ZN16ExtensionInfoMap12AddExtensionEPK9Extension
-}
-{
- bug_68069_a
- Memcheck:Leak
- fun:malloc
- obj:*
- obj:*
- obj:*
- obj:*
- fun:_ZN3gfx20GetGLCoreProcAddressEPKc
- fun:_ZN3gfx22InitializeGLBindingsGLEv
- fun:_ZN3gfx20InitializeGLBindingsENS_16GLImplementationE
- fun:_ZN3gfx9GLSurface16InitializeOneOffEv
-}
-{
- bug_68069_b
- Memcheck:Leak
- fun:malloc
- fun:XextCreateExtension
- ...
- fun:_ZN3gfx12GLSurfaceGLX16InitializeOneOffEv
- fun:_ZN3gfx9GLSurface24InitializeOneOffInternalEv
- fun:_ZN3gfx9GLSurface16InitializeOneOffEv
-}
-{
- bug_68553
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN3net25DiskCacheBasedSSLHostInfoC1ERKSsRKNS_9SSLConfigEPNS_12CertVerifierEPNS_9HttpCacheE
- fun:_ZN3net9HttpCache25SSLHostInfoFactoryAdaptor10GetForHostERKSsRKNS_9SSLConfigE
- fun:_ZN3net13SSLConnectJob12DoTCPConnectEv
- fun:_ZN3net13SSLConnectJob6DoLoopEi
- fun:_ZN3net13SSLConnectJob15ConnectInternalEv
- fun:_ZN3net10ConnectJob7ConnectEv
- fun:_ZN3net8internal26ClientSocketPoolBaseHelper21RequestSocketInternalERKSsPKNS1_7RequestE
- fun:_ZN3net8internal26ClientSocketPoolBaseHelper13RequestSocketERKSsPKNS1_7RequestE
- fun:_ZN3net20ClientSocketPoolBaseINS_15SSLSocketParamsEE13RequestSocketERKSsRK13scoped_refptrIS1_ENS_15RequestPriorityEPNS_18ClientSocketHandleEP14CallbackRunnerI6Tuple1IiEERKNS_11BoundNetLogE
- fun:_ZN3net19SSLClientSocketPool13RequestSocketERKSsPKvNS_15RequestPriorityEPNS_18ClientSocketHandleEP14CallbackRunnerI6Tuple1IiEERKNS_11BoundNetLogE
- fun:_ZN3net18ClientSocketHandle4InitINS_15SSLSocketParamsENS_19SSLClientSocketPoolEEEiRKSsRK13scoped_refptrIT_ENS_15RequestPriorityEP14CallbackRunnerI6Tuple1IiEEPT0_RKNS_11BoundNetLogE
-}
-{
- Bug_69919
- Memcheck:Leak
- fun:calloc
- ...
- fun:_ZN3gfx15OSMesaGLContext10InitializeEjPNS_9GLContextE
- fun:_ZN3gfx9GLContext24CreateOffscreenGLContextEPS0_
- fun:*InitializeGLContextEv
-}
-{
- Bug_69934_a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN*NPObjectProxy10NPAllocateEP4_NPPP7NPClass
- fun:_NPN_CreateObject
- fun:_ZN5blink11WebBindings12createObjectEP4_NPPP7NPClass
-}
-{
- Bug_69934_b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN3IPC11SyncMessage13GenerateReplyEPKNS_7MessageE
- fun:_ZN3IPC17SyncMessageSchema*
-}
-{
- bug_70327
- Memcheck:Leak
- ...
- fun:shaper_font_cache_insert
- fun:get_shaper_and_font
- fun:itemize_state_process_run
- fun:pango_itemize_with_base_dir
- fun:pango_layout_check_lines
- fun:pango_layout_get_extents_internal
- fun:pango_layout_get_pixel_extents
- fun:pango_layout_get_pixel_size
- fun:_ZN3gfx10Canvas13SizeStringIntERKSbItN4base20string16_char_traitsESaItEERKNS_4FontEPiSA_i
-}
-{
- bug_71152
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN14SessionService20OnGotSessionCommandsEi13scoped_refptrIN18BaseSessionService26InternalGetCommandsRequestEE
-}
-{
- bug_71728
- Memcheck:Leak
- fun:_Znw*
- fun:*DownloadFileTest5SetUpEv
-}
-{
- bug_72544
- Memcheck:Leak
- fun:malloc
- fun:_ZN3WTF10fastMallocEj
- fun:_ZN3WTF10RefCountedIN7WebCore14StyleSheetListEEnwEj
- fun:_ZN7WebCore14StyleSheetList6createEPNS_8DocumentE
- fun:_ZN7WebCore8DocumentC2EPNS_5FrameERKNS_4KURLEbbS5_
- fun:_ZN7WebCore12HTMLDocumentC1EPNS_5FrameERKNS_4KURLES5_
- fun:_ZN7WebCore12HTMLDocument6createEPNS_5FrameERKNS_4KURLES5_
- fun:_ZN7WebCore17DOMImplementation14createDocumentERKN3WTF6StringEPNS_5FrameERKNS_4KURLEb
- fun:_ZN7WebCore14DocumentWriter14createDocumentERKNS_4KURLE
- fun:_ZN7WebCore14DocumentWriter5beginERKNS_4KURLEbPNS_14SecurityOriginE
- fun:_ZN7WebCore11FrameLoader4initEv
- fun:_ZN7WebCore5Frame4initEv
- fun:_ZN5blink12WebFrameImpl21initializeAsMainFrameEPNS_11WebViewImplE
- fun:_ZN5blink11WebViewImpl19initializeMainFrameEPNS_14WebFrameClientE
- fun:_ZN10RenderViewC1EP16RenderThreadBaseiiRK19RendererPreferencesRK14WebPreferencesPN4base14RefCountedDataIiEEixRKSbItNS8_20string16_char_traitsESaItEE
- fun:_ZN10RenderView6CreateEP16RenderThreadBaseiiRK19RendererPreferencesRK14WebPreferencesPN4base14RefCountedDataIiEEixRKSbItNS8_20string16_char_traitsESaItEE
- fun:_ZN12RenderThread15OnCreateNewViewERK18ViewMsg_New_Params
-}
-{
- bug_72698_a
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN13ProfileIOData20InitializeOnUIThreadEP7Profile
-}
-{
- bug_73415
- Memcheck:Unaddressable
- fun:_ZN23AccessibilityController36shouldDumpAccessibilityNotificationsEv
- fun:_ZN11WebViewHost29postAccessibilityNotificationERKN5blink22WebAccessibilityObjectENS0_28WebAccessibilityNotificationE
- fun:_ZN5blink16ChromeClientImpl29postAccessibilityNotificationEPN7WebCore19AccessibilityObjectENS1_13AXObjectCache14AXNotificationE
- fun:_ZN7WebCore13AXObjectCache24postPlatformNotificationEPNS_19AccessibilityObjectENS0_14AXNotificationE
-}
-{
- bug_73675
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN20LayoutTestController13waitUntilDoneERKN3WTF6VectorI10CppVariantLj0EEEPS2_
- fun:_ZN13CppBoundClass14MemberCallbackI20LayoutTestControllerE3runERKN3WTF6VectorI10CppVariantLj0EEEPS5_
- fun:_ZN13CppBoundClass6invokeEPvPK10_NPVariantjPS1_
- fun:_ZN11CppNPObject6invokeEP8NPObjectPvPK10_NPVariantjPS3_
- fun:_ZN7WebCore18npObjectInvokeImplERKN2v89ArgumentsENS_18InvokeFunctionTypeE
- fun:_ZN7WebCore21npObjectMethodHandlerERKN2v89ArgumentsE
- fun:_ZN2v88internal19HandleApiCallHelperILb0EEEPNS0_11MaybeObjectENS0_47_GLOBAL__N_v8_src_builtins.cc_*BuiltinArgumentsILNS0_21BuiltinExtraArgumentsE1EEE
- obj:*
-}
-{
- bug_75019
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN14GpuDataManagerC1Ev
- fun:_ZN22DefaultSingletonTraitsI14GpuDataManagerE3NewEv
- fun:_ZN9SingletonI14GpuDataManager22DefaultSingletonTraitsIS0_ES0_E3getEv
- fun:_ZN14GpuDataManager11GetInstanceEv
- fun:_Z11BrowserMainRK18MainFunctionParams
- fun:_ZN20InProcessBrowserTest5SetUpEv
-}
-{
- bug_75051
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN3net12CertVerifier6VerifyEPNS_15X509CertificateERKSsiPNS_16CertVerifyResultEP14CallbackRunnerI6Tuple1IiEEPPv
- fun:_ZN3net25SingleRequestCertVerifier6VerifyEPNS_15X509CertificateERKSsiPNS_16CertVerifyResultEP14CallbackRunnerI6Tuple1IiEE
- fun:_ZN3net18SSLClientSocketNSS12DoVerifyCertEi
- fun:_ZN3net18SSLClientSocketNSS15DoHandshakeLoopEi
-}
-{
- bug_75127a
- Memcheck:Uninitialized
- ...
- fun:png_process_data
- fun:_ZN3gfx8PNGCodec6Decode*
-}
-{
- bug_75127b
- Memcheck:Uninitialized
- ...
- fun:png_process_data
- fun:_ZN3gfx8PNGCodec6Decode*
-}
-{
- bug_75127c
- Memcheck:Uninitialized
- ...
- fun:png_process_data
- fun:_ZN3gfx8PNGCodec6Decode*
-}
-{
- bug_76197a
- Memcheck:Unaddressable
- fun:sqlite3DbFree
- fun:releaseMemArray
- fun:sqlite3VdbeDelete
- fun:sqlite3VdbeFinalize
- fun:sqlite3_finalize
- fun:_ZN3sql10Connection12StatementRef5CloseEv
- fun:_ZN3sql10Connection12StatementRefD2Ev
- fun:_ZN3sql10Connection12StatementRefD1Ev
- fun:_ZNK4base10RefCountedIN3sql10Connection12StatementRefEE7ReleaseEv
- fun:_ZN13scoped_refptrIN3sql10Connection12StatementRefEED2Ev
- fun:_ZN13scoped_refptrIN3sql10Connection12StatementRefEED1Ev
- fun:_ZNSt4pairIKN3sql11StatementIDE13scoped_refptrINS0_10Connection12StatementRefEEED2Ev
- fun:_ZNSt4pairIKN3sql11StatementIDE13scoped_refptrINS0_10Connection12StatementRefEEED1Ev
- fun:_ZN9__gnu_cxx13new_allocatorISt4pairIKN3sql11StatementIDE13scoped_refptrINS2_10Connection12StatementRefEEEE7destroyEPS9_
- fun:_ZNSt8_Rb_treeIN3sql11StatementIDESt4pairIKS1_13scoped_refptrINS0_10Connection12StatementRefEEESt10_Select1stIS8_ESt4lessIS1_ESaIS8_EE12destroy_nodeEPSt13_Rb_tree_nodeIS8_E
- fun:_ZNSt8_Rb_treeIN3sql11StatementIDESt4pairIKS1_13scoped_refptrINS0_10Connection12StatementRefEEESt10_Select1stIS8_ESt4lessIS1_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E
- fun:_ZNSt8_Rb_treeIN3sql11StatementIDESt4pairIKS1_13scoped_refptrINS0_10Connection12StatementRefEEESt10_Select1stIS8_ESt4lessIS1_ESaIS8_EE5clearEv
- fun:_ZNSt3mapIN3sql11StatementIDE13scoped_refptrINS0_10Connection12StatementRefEESt4lessIS1_ESaISt4pairIKS1_S5_EEE5clearEv
- fun:_ZN3sql10Connection5CloseEv
- fun:_ZN3sql10ConnectionD2Ev
- fun:_ZN3sql10ConnectionD1Ev
- fun:_ZN7history16InMemoryDatabaseD0Ev
-}
-{
- bug_76197b
- Memcheck:Unaddressable
- ...
- fun:sqlite3_step
- fun:sqlite3_exec
- fun:_ZN3sql10Connection7ExecuteEPKc
- fun:_ZN7history11URLDatabase31CreateKeywordSearchTermsIndicesEv
- fun:_ZN7history16InMemoryDatabase12InitFromDiskE*
- fun:_ZN7history22InMemoryHistoryBackend4InitE*
-}
-{
- bug_77766
- Memcheck:Leak
- fun:malloc
- fun:_ZN3WTF10fastMallocEm
- fun:_ZN7WebCore18PerformTaskContextnwEm
- fun:_ZN7WebCore8Document8postTaskEN3WTF10PassOwnPtrINS_22ScriptExecutionContext4TaskEEE
- fun:_ZN7WebCore20WorkerMessagingProxy22workerContextDestroyedEv
- fun:_ZN5blink19WebWorkerClientImpl22workerContextDestroyedEv
- fun:_ZN7WebCore13WorkerContextD2Ev
- fun:_ZN7WebCore22DedicatedWorkerContextD0Ev
- fun:_ZN3WTF10RefCountedIN7WebCore13WorkerContextEE5derefEv
- fun:_ZN3WTF6RefPtrIN7WebCore13WorkerContextEEaSEPS2_
- fun:_ZN7WebCore12WorkerThread12workerThreadEv
- fun:_ZN7WebCore12WorkerThread17workerThreadStartEPv
- fun:_ZN3WTFL16threadEntryPointEPv
- fun:_ZN3WTFL19wtfThreadEntryPointEPv
-}
-{
- bug_78201
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN18BrowserProcessImpl28CreateResourceDispatcherHostEv
- fun:_ZN18BrowserProcessImpl24resource_dispatcher_hostEv
- fun:_ZN16ExtensionService4InitEv
- fun:_ZN11ProfileImpl14InitExtensionsE*
-}
-{
- bug_78786
- Memcheck:Leak
- fun:_Znw*
- fun:*35NonBlockingInvalidationNotifierTest5SetUpEv
-}
-{
- bug_79357a
- Memcheck:Unaddressable
- ...
- fun:*FilePathWatcherImpl*Watch*Delegate*
- fun:*FilePathWatcher*Watch*
- fun:_ZN21UserStyleSheetWatcher4InitEv
-}
-{
- bug_79357b
- Memcheck:Leak
- ...
- fun:*FilePathWatcherImpl*Watch*Delegate*
- fun:*FilePathWatcher*Watch*
- fun:_ZN21UserStyleSheetWatcher4InitEv
-}
-{
- bug_79651
- Memcheck:Leak
- ...
- fun:_ZN8notifier14XmppConnectionC1ERKN4buzz18XmppClientSettingsERK13scoped_refptrIN3net23URLRequestContextGetterEEPNS0_8DelegateEPNS1_11PreXmppAuthE
- fun:_ZN8notifier18SingleLoginAttempt13OnNewSettingsERKNS_18ConnectionSettingsE
- fun:_ZN8notifier23XmppConnectionGenerator17UseNextConnectionEv
- fun:_ZN8notifier23XmppConnectionGenerator15StartGeneratingEv
- fun:_ZN8notifier18SingleLoginAttemptC1EPNS_13LoginSettingsEPNS0_8DelegateE
- fun:_ZN8notifier5Login15StartConnectionEv
- fun:_ZN13sync_notifier20InvalidationNotifier17UpdateCredentialsERKSsS2_
- fun:*35InvalidationNotifierTest_Basic_Test8TestBodyEv
-}
-{
- bug_79652
- Memcheck:Leak
- ...
- fun:_ZN8chromeos14AudioMixerAlsa15ConnectInternalEv
- fun:_ZN8chromeos14AudioMixerAlsa7ConnectEv
-}
-{
- bug_79654_a
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZNSt3setIP16RenderWidgetHostSt4lessIS1_ESaIS1_EE6insertERKS1_
- fun:_ZN*9TabLoader12TabIsLoadingEP24NavigationControllerImpl
- fun:_ZN*18SessionRestoreImpl21ProcessSessionWindowsEPSt6vectorIP13SessionWindowSaIS3_EE
- fun:_ZN*18SessionRestoreImpl12OnGotSessionEiPSt6vectorIP13SessionWindowSaIS3_EE
-}
-{
- bug_79654_b
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:*RenderWidgetHost*
- ...
- fun:_ZNSt3setIP16RenderWidgetHostSt4lessIS1_ESaIS1_EE6insertERKS1_
- fun:*TabLoader7ObserveEiRKN7content18NotificationSourceERKNS1_19NotificationDetailsE
- fun:_ZN23NotificationServiceImpl*
- fun:_ZN15WebContentsImpl12SetIsLoading*
- fun:_ZN15WebContentsImpl14RenderViewGone*
-}
-{
- bug_79865a
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN33MalwareDetailsTest_HTTPCache_Test8TestBodyEv
-}
-{
- bug_79865b
- Memcheck:Leak
- ...
- fun:_Znw*
- fun:_ZN14TestingProfile20CreateRequestContextEv
- fun:_ZN42MalwareDetailsTest_HTTPCacheNoEntries_Test8TestBodyEv
-}
-{
- bug_79933a
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN21TestURLRequestContext4InitEv
- ...
- fun:_ZN21TestURLRequestContextC1Ev
- fun:_ZN27TestURLRequestContextGetter20GetURLRequestContextEv
-}
-{
- bug_16089 WorkerPool threads can leak by design
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base22PosixDynamicThreadPool8PostTask*
-}
-{
- bug_80462_a
- Memcheck:Leak
- fun:malloc
- fun:_ZN7WebCoreL15allocV8NPObjectEP4_NPPP7NPClass
- fun:_NPN_CreateObject
- fun:_ZN7WebCore22npCreateV8ScriptObjectEP4_NPPN2v86HandleINS2_6ObjectEEEPNS_9DOMWindowE
- fun:_ZN5blinkL16makeIntArrayImplERKNS_9WebVectorIiEE
- fun:_ZN5blink11WebBindings12makeIntArrayERKNS_9WebVectorIiEE
-}
-{
- bug_80462_b
- Memcheck:Leak
- fun:malloc
- fun:_ZN7WebCoreL15allocV8NPObjectEP4_NPPP7NPClass
- fun:_NPN_CreateObject
- fun:_ZN7WebCore22npCreateV8ScriptObjectEP4_NPPN2v86HandleINS2_6ObjectEEEPNS_9DOMWindowE
- fun:_ZN5blinkL19makeStringArrayImplERKNS_9WebVectorINS_9WebStringEEE
- fun:_ZN5blink11WebBindings15makeStringArrayERKNS_9WebVectorINS_9WebStringEEE
-}
-{
- bug_80537_a
- Memcheck:Leak
- fun:calloc
- ...
- fun:_ZN3gfx15GLContextOSMesa11MakeCurrentEv
-}
-{
- bug_80537_b
- Memcheck:Leak
- fun:calloc
- ...
- fun:_ZN3gfx15GLContextOSMesa11MakeCurrentEPNS_9GLSurfaceE
-}
-{
- bug_80551
- Memcheck:Leak
- fun:_Znw*
- fun:_Z11BrowserMainRK18MainFunctionParams
- fun:_ZN20InProcessBrowserTest5SetUpEv
-}
-{
- bug_80550_a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN16RenderWidgetHost11WasRestoredEv
-}
-{
- bug_80550_b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN16RenderWidgetHost9WasHiddenEv
-}
-{
- bug_80663
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base4BindIMN3net17URLRequestHttpJobEFvPSsPSt6vectorINS1_11CookieStore10CookieInfoESaIS6_EEEPS2_EENS_8internal20InvokerStorageHolderINSD_15InvokerStorage1IT_T0_EEEESG_RKSH_
- fun:_ZN3net17URLRequestHttpJob23AddCookieHeaderAndStartEv
- fun:_ZN3net17URLRequestHttpJob5StartEv
- fun:_ZN3net10URLRequest8StartJobEPNS_13URLRequestJobE
- fun:_ZN3net10URLRequest5StartEv
- fun:_ZN10URLFetcher4Core15StartURLRequestEv
- fun:_ZN10URLFetcher4Core30StartURLRequestWhenAppropriateEv
-}
-{
- bug_82717
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN6chrome26ChromeContentBrowserClient24RenderProcessHostCreatedEPN7content17RenderProcessHostE
- fun:_ZN21RenderProcessHostImpl4Init*
- ...
- fun:_ZN15WebContentsImpl32CreateRenderViewForRenderManagerEP*
- fun:_ZN22RenderFrameHostManager14InitRenderViewEP*
- ...
- fun:_ZN22RenderFrameHostManager8NavigateERKN7content19NavigationEntryImplE
- fun:_ZN15WebContentsImpl15NavigateToEntryERKN7content19NavigationEntryImplENS0_20NavigationController10ReloadTypeE
-}
-{
- bug_83609
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base4Bind*TaskClosureAdapterEFvvEPS2_EENS_8internal20InvokerStorageHolderINS6_15InvokerStorage1IT_T0_EEEES9_RKSA_
- fun:_ZN4base11MessageLoop15PostDelayedTaskERKN15tracked_objects8LocationEP4Taskx
- fun:_ZN13BrowserThread14PostTaskHelperENS_2IDERKN15tracked_objects8LocationEP4Taskxb
- fun:_ZN13BrowserThread8PostTaskENS_2IDERKN15tracked_objects8LocationEP4Task
-}
-{
- bug_83609b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base4Bind*TaskClosureAdapterEFvvEPS2_EENS_8internal20InvokerStorageHolderINS6_15InvokerStorage1IT_T0_EEEES9_RKSA_
- fun:_ZN4base11MessageLoop8PostTaskERKN15tracked_objects8LocationEP4Task
-}
-{
- bug_84224_a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocator*PendingTaskEE8allocate*
- fun:_ZN*_Deque_baseIN*PendingTaskESaIS1_*_M_allocate_*
- ...
- fun:_ZNSt5dequeIN*PendingTaskESaIS1_EE*push_back*
- fun:_ZNSt5queueIN4*PendingTask*deque*push*
- fun:_ZN4base11MessageLoop18AddToIncomingQueueEPN*PendingTaskE*
-}
-{
- bug_84224_b
- Memcheck:Unaddressable
- fun:_ZN13scoped_refptrIN4base8internal18InvokerStorageBaseEEC2ERKS3_
- fun:_ZN13scoped_refptrIN4base8internal18InvokerStorageBaseEEC1ERKS3_
- fun:_ZN4base8internal12CallbackBaseC2ERKS1_
- fun:_ZN4base8CallbackIFvvEEC2ERKS2_
- fun:_ZN4base8CallbackIFvvEEC1ERKS2_
- fun:_ZN4base11MessageLoop11PendingTaskC2ERKS0_
- fun:_ZN4base11MessageLoop11PendingTaskC1ERKS0_
- fun:_ZN9__gnu_cxx13new_allocatorIN11MessageLoop11PendingTaskEE9constructEPS2_RKS2_
- fun:_ZNSt5dequeIN11MessageLoop11PendingTaskESaIS1_EE9push_backERKS1_
- fun:_ZNSt5queueIN11MessageLoop11PendingTaskESt5dequeIS1_SaIS1_EEE4pushERKS1_
- fun:_ZN4base11MessageLoop18AddToIncomingQueueEPNS_11PendingTaskE
-}
-{
- bug_84265
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN12LoginHandler6CreateEPN3net17AuthChallengeInfoEPNS0_10URLRequestE
- fun:_Z17CreateLoginPromptPN3net17AuthChallengeInfoEPNS_10URLRequestE
- fun:_ZN22ResourceDispatcherHost14OnAuthRequiredEPN3net10URLRequestEPNS0_17AuthChallengeInfoE
- fun:_ZN3net13URLRequestJob21NotifyHeadersCompleteEv
-}
-{
- bug_84770_a
- Memcheck:Unaddressable
- fun:_ZN5blink21FrameLoaderClientImpl12allowPluginsEb
- fun:_ZN7WebCore14SubframeLoader12allowPluginsENS_28ReasonForCallingAllowPluginsE
-}
-{
- bug_84770_b
- Memcheck:Unaddressable
- fun:_ZN5blink21FrameLoaderClientImpl15allowJavaScriptEb
- fun:_ZN7WebCore16ScriptController17canExecuteScriptsENS_33ReasonForCallingCanExecuteScriptsE
-}
-{
- bug_84770_c
- Memcheck:Unaddressable
- fun:_ZN5blink21FrameLoaderClientImpl20allowScriptExtensionERKN3WTF6StringEi
- fun:_ZN7WebCore16V8DOMWindowShell16createNewContextEN2v86HandleINS1_6ObjectEEEi
-}
-{
- bug_86481
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocator*FilePath*allocate*
- fun:_ZNSt11_Deque_base*FilePath*_M_allocate_map*
- fun:_ZNSt11_Deque_base*FilePath*_M_initialize_map*
- fun:_ZNSt11_Deque_baseI*FilePath*
- fun:_ZNSt5dequeI*FilePath*
- fun:_ZNSt5stackI*FilePath*deque*
- fun:_ZN9file_util14FileEnumeratorC1E*
- fun:_ZN7history20ExpireHistoryBackend25DoExpireHistoryIndexFilesEv
-}
-{
- bug_87423
- Memcheck:Uninitialized
- fun:_ZNK3net15HttpBasicStream23LogNumRttVsBytesMetricsEv
- fun:_ZN3net22HttpNetworkTransaction18DoReadBodyCompleteEi
- fun:_ZN3net22HttpNetworkTransaction6DoLoopEi
- fun:_ZN3net22HttpNetworkTransaction4ReadEPNS_8IOBufferEiP14CallbackRunnerI6Tuple1IiEE
- fun:_Z15ReadTransactionPN3net15HttpTransactionEPSs
- fun:_ZN3net73HttpNetworkTransactionTest_ErrorResponseTofHttpsConnectViaHttpsProxy_Test8TestBodyEv
-}
-{
- bug_88640_a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN11ProfileImpl30InitRegisteredProtocolHandlersEv
- fun:_ZN11ProfileImpl11DoFinalInitEv
- fun:_ZN11ProfileImpl13OnPrefsLoadedEb
-}
-{
- bug_88640_b
- Memcheck:Leak
- ...
- fun:_ZN11ProfileImpl13OnPrefsLoadedEb
- ...
- fun:_ZN11ProfileImplC*E*
-}
-{
- bug_88640_c
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN29ChromeURLRequestContextGetter14CreateOriginalEP7ProfilePK13ProfileIOData
- fun:_ZN17ProfileImplIOData6Handle4InitE*
- fun:_ZN11ProfileImpl11DoFinalInitEv
- fun:_ZN11ProfileImpl13OnPrefsLoadedEb
-}
-{
- bug_81796
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base16MessageLoopProxy22currentEv
- fun:_ZN3IPC12ChannelProxy7ContextC1EPNS_7Channel8ListenerEPN4base16MessageLoopProxyE
- fun:_ZN3IPC12ChannelProxyC1ERKNS_13ChannelHandleENS_7Channel4ModeEPNS4_8ListenerEPN4base16MessageLoopProxyE
-}
-{
- bug_89304
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN3net20ClientSocketPoolBaseINS_*SocketParamsEE13RequestSocketERKSsRK13scoped_refptrIS1_ENS_15RequestPriorityEPNS_18ClientSocketHandleEP14CallbackRunnerI6Tuple1IiEERKNS_11BoundNetLogE
- fun:_ZN3net*SocketPool13RequestSocketERKSsPKvNS_15RequestPriorityEPNS_18ClientSocketHandleEP14CallbackRunnerI6Tuple1IiEERKNS_11BoundNetLogE
- fun:_ZN3net18ClientSocketHandle4Init*
- ...
- fun:_ZN3net23ClientSocketPoolManager30InitSocketHandleForHttpRequestERK4GURLRKNS_18HttpRequestHeadersEiNS_15RequestPriorityEPNS_18HttpNetworkSessionERKNS_9ProxyInfoEbbRKNS_9SSLConfigESF_RKNS_11BoundNetLogEPNS_18ClientSocketHandleEP14CallbackRunnerI6Tuple1IiEE
- fun:_ZN3net21HttpStreamFactoryImpl3Job16DoInitConnectionEv
-}
-{
- bug_89311
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN3net16HttpStreamParser22DoParseResponseHeadersEi
- fun:_ZN3net16HttpStreamParser20ParseResponseHeadersEv
- fun:_ZN3net16HttpStreamParser21DoReadHeadersCompleteEi
-}
-{
- bug_89942_a
- Memcheck:Leak
- ...
- fun:_ZN10ZygoteHost11ForkRequestERKSt6vectorISsSaISsEERKS0_ISt4pairIjiESaIS6_EERKSs
- fun:_ZN20ChildProcessLauncher7Context14LaunchInternalE13scoped_refptrIS0_EN13BrowserThread2IDEbRKSt6vectorISt4pairISsSsESaIS7_EEiP11CommandLine
-}
-{
- bug_89942_b
- Memcheck:Leak
- ...
- fun:_ZNSt6vectorISt4pairIjiESaIS1_EE9push_backERKS1_
- fun:_ZN20ChildProcessLauncher7Context14LaunchInternalE13scoped_refptrIS0_EN13BrowserThread2IDEbRKSt6vectorISt4pairISsSsESaIS7_EEiP11CommandLine
-}
-{
- bug_90057a
- Memcheck:Leak
- ...
- fun:_ZN3net13CookieMonster9InitStoreEv
- fun:_ZN3net13CookieMonster15InitIfNecessaryEv
- fun:_ZN3net13CookieMonster30GetAllCookiesForURLWithOptionsERK4GURLRKNS_13CookieOptionsE
- fun:_ZN3net13CookieMonster19GetAllCookiesForURLERK4GURL
- fun:_ZN22ResourceDispatcherHost13CanGetCookiesEPN3net10URLRequestE
- fun:_ZN3net10URLRequest13CanGetCookiesEv
- fun:_ZN3net13URLRequestJob13CanGetCookiesEv
- fun:_ZN3net17URLRequestHttpJob23AddCookieHeaderAndStartEv
-}
-{
- bug_90057b
- Memcheck:Leak
- ...
- fun:_ZN3net13CookieMonster9InitStoreEv
- fun:_ZN3net13CookieMonster15InitIfNecessaryEv
- fun:_ZN3net13CookieMonster21GetCookiesWithOptionsERK4GURLRKNS_13CookieOptionsE
- fun:_ZN3net13CookieMonster26GetCookiesWithOptionsAsyncERK4GURLRKNS_13CookieOptionsERKN4base8CallbackIFvRKSsEEE
- fun:_ZN3net11CookieStore15GetCookiesAsyncERK4GURLRKN4base8CallbackIFvRKSsEEE
- fun:_ZN12_GLOBAL__N_120GetCookiesOnIOThreadERK4GURLRK13scoped_refptrIN3net23URLRequestContextGetterEEPN4base13WaitableEventEPSs
-}
-{
- bug_90057c
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN3net17URLRequestHttpJob14SaveNextCookieEv
- fun:_ZN3net17URLRequestHttpJob35SaveCookiesAndNotifyHeadersCompleteEv
- fun:_ZN3net17URLRequestHttpJob16OnStartCompletedEi
-}
-{
- bug_90215_c
- Memcheck:Leak
- ...
- fun:_ZN3net13URLRequestJob21NotifyRestartRequiredEv
- fun:_ZN8appcache21AppCacheURLRequestJob13BeginDeliveryEv
-}
-{
- bug_90215_d
- Memcheck:Leak
- ...
- fun:_ZN8appcache19AppCacheStorageImpl23RunOnePendingSimpleTaskEv
-}
-{
- bug_90215_e
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN8appcache15AppCacheService10InitializeE*
- fun:_ZN21ChromeAppCacheService20InitializeOnIOThreadE*
-}
-{
- bug_90215_f
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN26TransportSecurityPersisterC1EPN3net22TransportSecurityStateERKN4base8FilePathEb
- fun:_ZNK13ProfileIOData4InitEPSt3mapISs10linked_ptrIN3net20URLRequestJobFactory15ProtocolHandlerEESt4lessISsESaISt4pairIKSsS5_EEE
- fun:_ZN12_GLOBAL__N_114FactoryForMain6CreateEv
- fun:_ZN29ChromeURLRequestContextGetter20GetURLRequestContextEv
- fun:_ZN7content21ChromeAppCacheService20InitializeOnIOThreadERKN4base8FilePathEPNS_15ResourceContextEPN3net23URLRequestContextGetterE13scoped_refptrIN5quota20SpecialStoragePolicyEE
-}
-{
- bug_90240
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN2pp5proxy26PPP_Instance_Private_Proxy22OnMsgGetInstanceObjectEiNS0_24SerializedVarReturnValueE
-}
-{
- bug_90400
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN11ProfileImpl24GetUserStyleSheetWatcherEv
- fun:_ZN6chrome26ChromeContentBrowserClient14GetWebkitPrefs*
- fun:_ZN15WebContentsImpl14GetWebkitPrefsEv
-}
-{
- bug_90487a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorISt10_List_nodeIPN5quota11QuotaClientEEE8allocateEjPKv
- fun:_ZNSt10_List_baseIPN5quota11QuotaClientESaIS2_EE11_M_get_nodeEv
- fun:_ZNSt4listIPN5quota11QuotaClientESaIS2_EE14_M_create_nodeERKS2_
- fun:_ZNSt4listIPN5quota11QuotaClientESaIS2_EE9_M_insertESt14_List_iteratorIS2_ERKS2_
- fun:_ZNSt4listIPN5quota11QuotaClientESaIS2_EE9push_backERKS2_
- fun:_ZN5quota12QuotaManager14RegisterClientEPNS_11QuotaClientE
- fun:_ZN5quota17QuotaManagerProxy14RegisterClientEPNS_11QuotaClientE
-}
-{
- bug_90487b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base8internal20PostTaskAndReplyImpl16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEESA_
- fun:_ZN4base10TaskRunner16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEES9_
- ...
- fun:_ZN5quota12QuotaManager*
-}
-{
- bug_90496a
- Memcheck:Leak
- ...
- fun:_ZN3IPC16MessageWithTupleI6Tuple2Ii23ResourceHostMsg_RequestEE8DispatchI22ResourceDispatcherHostS6_iRKS2_EEbPKNS_7MessageEPT_PT0_MSC_FvRSA_T1_T2_E
- fun:_ZN22ResourceDispatcherHost17OnMessageReceivedERKN3IPC7MessageEP21ResourceMessageFilterPb
- fun:_ZN21ResourceMessageFilter17OnMessageReceivedERKN3IPC7MessageEPb
- fun:_ZN20BrowserMessageFilter15DispatchMessageERKN3IPC7MessageE
- fun:_ZN20BrowserMessageFilter17OnMessageReceivedERKN3IPC7MessageE
- fun:_ZN3IPC12ChannelProxy7Context10TryFiltersERKNS_7MessageE
- fun:_ZN3IPC12ChannelProxy7Context17OnMessageReceivedERKNS_7MessageE
- fun:_ZN3IPC7Channel11ChannelImpl23ProcessIncomingMessagesEv
- fun:_ZN3IPC7Channel11ChannelImpl28OnFileCanReadWithoutBlockingEi
-}
-{
- bug_90496b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN22ResourceDispatcherHost23CompleteResponseStartedEPN3net10URLRequestE
- fun:_ZN22ResourceDispatcherHost17OnResponseStartedEPN3net10URLRequestE
- fun:_ZN3net10URLRequest21NotifyResponseStartedEv
- fun:_ZN3net13URLRequestJob21NotifyHeadersCompleteEv
-}
-{
- bug_90496c
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN20AsyncResourceHandler15OnReadCompletedEiPi
- fun:_ZN23BufferedResourceHandler15OnReadCompletedEiPi
- fun:_ZN27SafeBrowsingResourceHandler15OnReadCompletedEiPi
- fun:_ZN22OfflineResourceHandler15OnReadCompletedEiPi
- fun:_ZN22ResourceDispatcherHost12CompleteReadEPN3net10URLRequestEPi
- fun:_ZN22ResourceDispatcherHost15OnReadCompletedEPN3net10URLRequestEi
- fun:_ZN3net10URLRequest19NotifyReadCompletedEi
- fun:_ZN3net13URLRequestJob18NotifyReadCompleteEi
- fun:_ZN19URLRequestChromeJob13DataAvailableEP16RefCountedMemory
- fun:_ZN27ChromeURLDataManagerBackend13DataAvailableEiP16RefCountedMemory
- fun:_ZN20ChromeURLDataManager10DataSource22SendResponseOnIOThreadEi13scoped_refptrI16RefCountedMemoryE
-}
-{
- bug_90496d
- Memcheck:Leak
- ...
- fun:_ZN24CrossSiteResourceHandler14ResumeResponseEv
- fun:_ZN22ResourceDispatcherHost12OnSwapOutACKERK22ViewMsg_SwapOut_Params
- fun:_ZN18RenderWidgetHelper21OnCrossSiteSwapOutACKERK22ViewMsg_SwapOut_Params
-}
-{
- bug_90496e
- Memcheck:Leak
- ...
- fun:_ZN14SharedIOBuffer4InitEv
- fun:_ZN20AsyncResourceHandler10OnWillReadEiPPN3net8IOBufferEPii
- fun:_ZN24CrossSiteResourceHandler10OnWillReadEiPPN3net8IOBufferEPii
- fun:_ZN23BufferedResourceHandler10OnWillReadEiPPN3net8IOBufferEPii
- fun:_ZN27SafeBrowsingResourceHandler10OnWillReadEiPPN3net8IOBufferEPii
- fun:_ZN22OfflineResourceHandler10OnWillReadEiPPN3net8IOBufferEPii
- fun:_ZN22ResourceDispatcherHost4ReadEPN3net10URLRequestEPi
- fun:_ZN22ResourceDispatcherHost12StartReadingEPN3net10URLRequestE
-}
-{
- bug_90671
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZNK3sql9Statement*ColumnString*
- fun:_ZN7history11URLDatabase10FillURLRowERN3sql9StatementEPNS_6URLRowE
- fun:_ZN7history11URLDatabase13URLEnumerator10GetNextURLEPNS_6URLRowE
- fun:_ZN7history14HistoryBackend11IterateURLsEPN14HistoryService13URLEnumeratorE
-}
-{
- bug_91199
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN19URLRequestChromeJob15GetResponseInfoEPN3net16HttpResponseInfoE
- fun:_ZN3net13URLRequestJob21NotifyHeadersCompleteEv
- fun:_ZN19URLRequestChromeJob10StartAsyncEv
-}
-{
- bug_92571
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7history16TopSitesDatabase8CreateDBE*
- fun:_ZN7history16TopSitesDatabase4InitE*
- fun:_ZN7history15TopSitesBackend16InitDBOnDBThreadE*
-}
-{
- bug_92741a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base4BindIPFvPNS_13WaitableEventEPSsRKSsES2_S3_EENS_8internal20InvokerStorageHolderINS8_15InvokerStorage2IT_T0_T1_EEEESB_RKSC_RKSD_
- fun:_ZN12_GLOBAL__N_120GetCookiesOnIOThreadERK4GURLRK13scoped_refptrIN3net23URLRequestContextGetterEEPN4base13WaitableEventEPSs
- fun:_Z18DispatchToFunctionIPFvRK4GURLRK13scoped_refptrIN3net23URLRequestContextGetterEEPN4base13WaitableEventEPSsES0_S6_SB_SC_EvT_RK6Tuple4IT0_T1_T2_T3_E
-}
-{
- bug_92741b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base4BindIMN3net17URLRequestHttpJobEFvPSsPSt6vectorINS1_11CookieStore10CookieInfoESaIS6_EEENS_7WeakPtrIS2_EEEENS_8internal20InvokerStorageHolderINSE_15InvokerStorage1IT_T0_EEEESH_RKSI_
- fun:_ZN3net17URLRequestHttpJob24CheckCookiePolicyAndLoadERKNS_10CookieListE
-}
-{
- bug_92741c
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base4BindIMN3net17URLRequestHttpJobEFvRKNS1_10CookieListEENS_7WeakPtrIS2_EEEENS_8internal20InvokerStorageHolderINSA_15InvokerStorage1IT_T0_EEEESD_RKSE_
- fun:_ZN3net17URLRequestHttpJob23AddCookieHeaderAndStartEv
- fun:_ZN3net17URLRequestHttpJob5StartEv
- fun:_ZN3net10URLRequest8StartJobEPNS_13URLRequestJobE
- fun:_ZN3net10URLRequest5StartEv
-}
-{
- bug_93250a
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:*SHA1Fingerprint*
- fun:_ZN3net16CertVerifyResultaSERKS0_
- fun:_ZN3net12CertVerifier12HandleResultEPNS_15X509CertificateERKSsiiRKNS_16CertVerifyResultE
- fun:_ZN3net18CertVerifierWorker7DoReplyEv
-}
-{
- bug_93250b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base4BindIMNS_6subtle18TaskClosureAdapterEFvvEPS2_EENS_8internal20InvokerStorageHolderINS6_15InvokerStorage1IT_T0_EEEES9_RKSA_
- fun:_ZN4base11MessageLoop8PostTaskERKN15tracked_objects8LocationEP4Task
- fun:_ZN3net18CertVerifierWorker6FinishEv
- fun:_ZN3net18CertVerifierWorker3RunEv
-}
-{
- bug_93730_a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN14ServiceProcess10InitializeEP16MessageLoopForUIRK11CommandLineP19ServiceProcessState
- fun:_Z18ServiceProcessMainRK18MainFunctionParams
- ...
- fun:ChromeMain
- fun:main
-}
-{
- bug_93730_b
- Memcheck:Leak
- fun:_Zna*
- fun:_ZN4base13LaunchProcessERKSt6vectorISsSaISsEERKNS_13LaunchOptionsEPi
- fun:_ZN4base13LaunchProcessERK11CommandLineRKNS_13LaunchOptionsEPi
- fun:_ZN21ServiceProcessControl8Launcher5DoRunEv
-}
-{
- bug_93730_c
- Memcheck:Leak
- fun:_Znw*
- fun:_Z17NewRunnableMethodIN21ServiceProcessControl8LauncherEMS1_FvvEEP14CancelableTaskPT_T0_
- fun:_ZN21ServiceProcessControl8Launcher5DoRunEv
-}
-{
- bug_93730_d
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN3IPC11SyncChannelC1ERKNS_13ChannelHandleENS_7Channel4ModeEPNS4_8ListenerEPN4base16MessageLoopProxyEbPNS8_13WaitableEventE
- fun:_ZN16ServiceIPCServer13CreateChannelEv
- fun:_ZN16ServiceIPCServer4InitEv
- fun:_ZN14ServiceProcess10InitializeEP16MessageLoopForUIRK11CommandLineP19ServiceProcessState
- fun:_Z18ServiceProcessMainRK18MainFunctionParams
- ...
- fun:ChromeMain
- fun:main
-}
-{
- bug_94195
- Memcheck:Leak
- ...
- fun:_ZN12GpuBlacklist16LoadGpuBlacklistERKSsNS_8OsFilterE
-}
-{
- bug_94345
- Memcheck:Leak
- fun:_Znw*
- fun:_ZNK4base8internal18WeakReferenceOwner6GetRefEv
- fun:_ZN4base15SupportsWeakPtrI16ObserverListBaseIN11MessageLoop12TaskObserverEEE9AsWeakPtrEv
- fun:_ZN16ObserverListBaseIN11MessageLoop12TaskObserverEE8IteratorC1ERS2_
-}
-{
- bug_94764
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN8remoting13ClientSession11UnpressKeysEv
- fun:_ZN8remoting34ClientSessionTest_UnpressKeys_Test8TestBodyEv
-}
-{
- bug_95448
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKSsPN4base5ValueEEEE8allocateEjPKv
- fun:_ZNSt8_Rb_treeISsSt4pairIKSsPN4base5ValueEESt10_Select1stIS5_ESt4lessISsESaIS5_EE11_M_get_nodeEv
- fun:_ZNSt8_Rb_treeISsSt4pairIKSsPN4base5ValueEESt10_Select1stIS5_ESt4lessISsESaIS5_EE14_M_create_nodeERKS5_
- fun:_ZNSt8_Rb_treeISsSt4pairIKSsPN4base5ValueEESt10_Select1stIS5_ESt4lessISsESaIS5_EE10_M_insert_EPKSt18_Rb_tree_node_baseSE_RKS5_
- fun:_ZNSt8_Rb_treeISsSt4pairIKSsPN4base5ValueEESt10_Select1stIS5_ESt4lessISsESaIS5_EE17_M_insert_unique_ESt23_Rb_tree_const_iteratorIS5_ERKS5_
- fun:_ZNSt3mapISsPN4base5ValueESt4lessISsESaISt4pairIKSsS2_EEE6insertESt17_Rb_tree_iteratorIS7_ERKS7_
- fun:_ZNSt3mapISsPN4base5ValueESt4lessISsESaISt4pairIKSsS2_EEEixERS6_
- fun:_ZN4base15DictionaryValue23SetWithoutPathExpansionERKSsPNS_5ValueE
- fun:_ZN4base15DictionaryValue3SetERKSsPNS_5ValueE
- fun:_ZN4base15DictionaryValue9SetStringERKSsRKSbItNS_20string16_char_traitsESaItEE
- fun:_ZN11PluginPrefs23CreatePluginFileSummaryERKN6webkit13WebPluginInfoE
- fun:_ZN11PluginPrefs19OnUpdatePreferencesESt6vectorIN6webkit13WebPluginInfoESaIS2_EES0_INS1_5npapi11PluginGroupESaIS6_EE
-}
-{
- bug_95902
- Memcheck:Leak
- ...
- fun:xdg_mime_init
- fun:xdg_mime_get_mime_type_from_file_name
- fun:*GetFileMimeTypeE*
- fun:_ZNK3net16PlatformMimeUtil32GetPlatformMimeTypeFromExtensionERKSsPSs
- fun:_ZNK3net8MimeUtil30GetMimeTypeFromExtensionHelperERKSsbPSs
- fun:_ZNK3net8MimeUtil24GetMimeTypeFromExtensionERKSsPSs
- fun:_ZNK3net8MimeUtil19GetMimeTypeFromFileE*
- fun:_ZN3net19GetMimeTypeFromFileE*
-}
-{
- bug_96069
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN3net9HttpCache13CreateBackendEPPN10disk_cache7BackendEP14CallbackRunnerI6Tuple1IiEE
- fun:_ZN3net9HttpCache17CreateTransactionEP10scoped_ptrINS_15HttpTransactionEE
- ...
- fun:_ZN3net13CookieMonster17CookieMonsterTask14InvokeCallbackEN4base8CallbackIFvvEEE
-}
-{
- bug_96369
- Memcheck:Leak
- fun:malloc
- fun:g_malloc
- fun:g_slice_alloc
- fun:g_slice_alloc0
- fun:g_type_create_instance
- fun:g_object_constructor
- fun:g_object_newv
- fun:g_object_new
- fun:_gdk_window_impl_new
- fun:gdk_window_ensure_native
- fun:gdk_x11_drawable_get_xid
- fun:_ZN20GtkNativeViewManager14GetIdForWidgetEP10_GtkWidget
- fun:_ZNK7content23RenderWidgetHostViewGtk15GetNativeViewIdEv
-}
-{
- bug_96402
- Memcheck:Leak
- fun:malloc
- fun:g_malloc
- fun:g_slice_alloc
- fun:g_slice_alloc0
- fun:g_type_create_instance
- fun:g_object_constructor
- fun:g_object_newv
- fun:g_object_new
- fun:_gdk_window_impl_new
- fun:gdk_window_ensure_native
- fun:gdk_x11_drawable_get_xid
- ...
- fun:g_closure_invoke
- fun:signal_emit_unlocked_R
- fun:g_signal_emit_valist
- fun:g_signal_emit
- fun:gtk_widget_realize
- fun:gtk_widget_set_parent
-}
-{
- bug_96407
- Memcheck:Leak
- fun:malloc
- fun:g_malloc
- fun:g_slice_alloc
- fun:g_slice_alloc0
- fun:g_type_create_instance
- fun:g_object_constructor
- fun:g_object_newv
- fun:g_object_new
- fun:_gdk_window_impl_new
- fun:gdk_window_ensure_native
- fun:gdk_x11_drawable_get_xid
- fun:_ZN19TestWebViewDelegate20CreatePluginDelegateE*
-}
-{
- bug_96568a
- Memcheck:Leak
- fun:*alloc
- ...
- fun:HB_OpenType*
- ...
- fun:HB_ShapeItem
- fun:_ZN7WebCore21ComplexTextController11shapeGlyphsEv
- fun:_ZN7WebCore21ComplexTextController13nextScriptRunEv
-}
-{
- bug_96568b
- Memcheck:Leak
- ...
- fun:HB_NewFace
- fun:_ZN7WebCoreL21getCachedHarfbuzzFaceEPNS_16FontPlatformDataE
- fun:_ZN7WebCore12HarfbuzzFaceC1EPNS_16FontPlatformDataE
- fun:_ZN7WebCore12HarfbuzzFace6createEPNS_16FontPlatformDataE
- fun:_ZNK7WebCore16FontPlatformData12harfbuzzFaceEv
- fun:_ZN7WebCore21ComplexTextController21setupFontForScriptRunEv
-}
-{
- bug_98568
- Memcheck:Leak
- ...
- fun:_ZN44WebDragDestGtkTest_NoTabContentsWrapper_Test8TestBodyEv
-}
-{
- bug_98867
- Memcheck:Jump
- obj:*
- obj:*
- obj:*
-}
-{
- bug_99304
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN2v88internal10PagedSpace11AllocateRawEi
- fun:_ZN2v88internal12Deserializer8AllocateEiPNS0_5SpaceEi
- fun:_ZN2v88internal12Deserializer10ReadObjectEiPNS0_5SpaceEPPNS0_6ObjectE
- fun:_ZN2v88internal12Deserializer9ReadChunkEPPNS0_6ObjectES4_iPh
- fun:_ZN2v88internal12Deserializer10ReadObjectEiPNS0_5SpaceEPPNS0_6ObjectE
- fun:_ZN2v88internal12Deserializer9ReadChunkEPPNS0_6ObjectES4_iPh
- fun:_ZN2v88internal12Deserializer13VisitPointersEPPNS0_6ObjectES4_
-}
-{
- bug_99307
- Memcheck:Uninitialized
- fun:modp_b64_encode
- fun:_ZN4base12Base64Encode*
- fun:_ZN11web_ui_util15GetImageDataUrlERK8SkBitmap
- fun:_ZN12_GLOBAL__N_121NetworkInfoDictionary8set_iconERK8SkBitmap
-}
-{
- bug_99308
- Memcheck:Leak
- fun:malloc
- fun:_ZL9toCStringRK9_NPString
- fun:_ZL15testPostURLFileP12PluginObjectPK10_NPVariantjPS1_
- fun:_ZL12pluginInvokeP8NPObjectPvPK10_NPVariantjPS2_
- fun:_ZN7WebCoreL18npObjectInvokeImplERKN2v89ArgumentsENS_18InvokeFunctionTypeE
-}
-{
- bug_99321
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN5blink12CCThreadImpl6createEPNS_9WebThreadE
- fun:_ZN5blink13WebCompositor9setThreadEPNS_9WebThreadE
- fun:_ZN11WebViewHostC1EP9TestShell
- fun:_ZN9TestShell15createNewWindowERKN5blink6WebURLEP16DRTDevToolsAgent
-}
-{
- bug_99435
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base19MessagePumpLibevent3RunEPNS_11MessagePump8DelegateE
- fun:_ZN4base11MessageLoop11RunInternalEv
- fun:_ZN4base11MessageLoop10RunHandlerEv
-}
-{
- bug_100043
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorIN6webkit13WebPluginInfoEE8allocateEjPKv
- ...
- fun:_ZNSt6vectorIN6webkit13WebPluginInfoESaIS1*
-}
-{
- bug_101125a
- Memcheck:Uninitialized
- ...
- fun:_ZN6SkScan12AntiFillPathERK6SkPathRK8SkRegionP9SkBlitterb
- fun:_ZN6SkScan12AntiFillPathERK6SkPathRK12SkRasterClipP9SkBlitter
- fun:_ZNK6SkDraw8drawPathERK6SkPathRK7SkPaintPK8SkMatrixb
- fun:_ZN8SkDevice8drawPathERK6SkDrawRK6SkPathRK7SkPaintPK8SkMatrixb
- fun:_ZNK6SkDraw14drawTextOnPathEPKcmRK6SkPathPK8SkMatrixRK7SkPaint
- fun:_ZN8SkDevice14drawTextOnPathERK6SkDrawPKvmRK6SkPathPK8SkMatrixRK7SkPaint
- fun:_ZN8SkCanvas14drawTextOnPathEPKvmRK6SkPathPK8SkMatrixRK7SkPaint
- fun:_ZNK7WebCore4Font10drawGlyphsEPNS_15GraphicsContextEPKNS_14SimpleFontDataERKNS_11GlyphBufferEiiRKNS_10FloatPointE
- fun:_ZNK7WebCore4Font15drawGlyphBufferEPNS_15GraphicsContextERKNS_7TextRunERKNS_11GlyphBufferERKNS_10FloatPointE
-}
-{
- bug_101125b
- Memcheck:Uninitialized
- ...
- fun:_ZN6SkScan12AntiFillRectERK6SkRectPK8SkRegionP9SkBlitter
- fun:_ZN6SkScan12AntiFillRectERK6SkRectRK12SkRasterClipP9SkBlitter
- fun:_ZNK6SkDraw8drawRectERK6SkRectRK7SkPaint
- fun:_ZN8SkDevice8drawRectERK6SkDrawRK6SkRectRK7SkPaint
- fun:_ZN8SkCanvas8drawRectERK6SkRectRK7SkPaint
- fun:_ZN7WebCore15GraphicsContext8fillRectERKNS_9FloatRectERKNS_5ColorENS_10ColorSpaceE
- fun:_ZN7WebCore15GraphicsContext20drawHighlightForTextERKNS_4FontERKNS_7TextRunERKNS_10FloatPointEiRKNS_5ColorENS_10ColorSpaceEii
-}
-{
- bug_101125c
- Memcheck:Uninitialized
- ...
- fun:_ZL11morphpointsP7SkPointPKS_iR13SkPathMeasureRK8SkMatrix
- fun:_ZL9morphpathP6SkPathRKS_R13SkPathMeasureRK8SkMatrix
- fun:_ZNK6SkDraw14drawTextOnPathEPKcmRK6SkPathPK8SkMatrixRK7SkPaint
- fun:_ZN8SkDevice14drawTextOnPathERK6SkDrawPKvmRK6SkPathPK8SkMatrixRK7SkPaint
- fun:_ZN8SkCanvas14drawTextOnPathEPKvmRK6SkPathPK8SkMatrixRK7SkPaint
- fun:_ZNK7WebCore4Font10drawGlyphsEPNS_15GraphicsContextEPKNS_14SimpleFontDataERKNS_11GlyphBufferEiiRKNS_10FloatPointE
- fun:_ZNK7WebCore4Font15drawGlyphBufferEPNS_15GraphicsContextERKNS_7TextRunERKNS_11GlyphBufferERKNS_10FloatPointE
- fun:_ZNK7WebCore4Font14drawSimpleTextEPNS_15GraphicsContextERKNS_7TextRunERKNS_10FloatPointEii
- fun:_ZNK7WebCore4Font8drawTextEPNS_15GraphicsContextERKNS_7TextRunERKNS_10FloatPointEii
- fun:_ZN7WebCore15GraphicsContext8drawTextERKNS_4FontERKNS_7TextRunERKNS_10FloatPointEii
-}
-{
- bug_100133
- Memcheck:Leak
- fun:_Znw*
- fun:_Z22RecoveryRegisterHelperP22ComponentUpdateServiceP11PrefService
-}
-{
- bug_100330
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN25TestingAutomationProvider42NavigateToURLBlockUntilNavigationsCompleteEiRK4GURLiPN3IPC7MessageE
-}
-{
- bug_100647
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN18WebResourceService19UpdateResourceCacheERKSs
- fun:_ZN18WebResourceService18WebResourceFetcher18OnURLFetchCompleteEPK10URLFetcherRK4GURLRKN3net16URLRequestStatusEiRKSt6vectorISsSaISsEERKSs
- fun:_ZN10URLFetcher8Delegate18OnURLFetchCompleteEPKS_
- fun:_ZN10URLFetcher4Core29InformDelegateFetchIsCompleteEv
- fun:_ZN10URLFetcher4Core21OnCompletedURLRequestEN4base9TimeDeltaE
-}
-{
- bug_100777
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN12_GLOBAL__N_119MakeContextDelegateI16CrxUpdateServiceNS1_13UpdateContextEEEPN7content18URLFetcherDelegateEPT_PT0_
- fun:_ZN16CrxUpdateService19ProcessPendingItemsEv
-}
-{
- bug_100916
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN5blink19WebWorkerClientImpl24createWorkerContextProxyEPN7WebCore6WorkerE
- ...
- fun:_ZN7WebCore6WorkerC1EPNS_22ScriptExecutionContextE
- fun:_ZN7WebCore6Worker6createEPNS_22ScriptExecutionContextERKN3WTF6StringERi
- fun:_ZN7WebCore8V8Worker19constructorCallbackERKN2v89ArgumentsE
- fun:_ZN2v88internalL19HandleApiCallHelperILb1EEEPNS0_11MaybeObjectENS0_12_GLOBAL__N_116BuiltinArgumentsILNS0_21BuiltinExtraArgumentsE1EEEPNS0_7IsolateE
-}
-{
- bug_100982
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore12RenderRegion22setRenderBoxRegionInfoEPKNS_9RenderBoxEiib
- fun:_ZNK7WebCore9RenderBox19renderBoxRegionInfoEPNS_12RenderRegionEiNS0_24RenderBoxRegionInfoFlagsE
- ...
- fun:_ZN7WebCore11RenderBlock5paintERNS_9PaintInfoERKNS_8IntPointE
-}
-{
- bug_101145b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore23v8StringToWebCoreStringIN3WTF6StringEEET_N2v86HandleINS4_6StringEEENS_12ExternalModeE
- fun:_ZN*WebCore16V8StringResourceILNS_20V8StringResourceMode*
-}
-{
- bug_101145c
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore*makeExternalString*
- ...
- fun:_ZN7WebCore11StringCache20v8ExternalStringSlow*
- fun:_ZN7WebCore11StringCache16v8ExternalStringEPN*
-}
-{
- bug_101145d
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore*makeExternalString*
- ...
- fun:_ZN7WebCore11StringCache28setReturnValueFromStringSlow*
- fun:_ZN7WebCore11StringCache24setReturnValueFromString*
-}
-{
- bug_101146d
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN11webkit_glue16WebURLLoaderImplC1EPNS_25WebKitPlatformSupportImplE
- fun:_ZN11webkit_glue25WebKitPlatformSupportImpl15createURLLoaderEv
-}
-{
- bug_101151
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore23v8StringToWebCoreStringIN3WTF*StringEEET_*
- fun:_ZN7WebCore15V8ParameterBase8toStringIN3WTF*StringEEET_*
- fun:_ZN7WebCore15V8ParameterBasecvN3WTF*StringEEv
- ...
- fun:_ZN2v88internalL*HandleApiCall*
- obj:*
-}
-{
- bug_101159
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore15NPObjectWrapper10NPAllocateEP4_NPPP7NPClass
- fun:_NPN_CreateObject
- fun:_ZN7WebCore15NPObjectWrapper6createEP8NPObject
- fun:_ZN7WebCore16ScriptController20windowScriptNPObjectEv
- fun:_ZNK6WebKit12WebFrameImpl12windowObjectEv
- fun:_ZN6webkit5npapi13WebPluginImpl23GetWindowScriptNPObjectEv
- fun:NPN_GetValue
-}
-{
- bug_101345
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN22WebPluginDelegateProxy20CreateResourceClientEmRK4GURLi
- fun:_ZN6webkit5npapi13WebPluginImpl24HandleURLRequestInternalEPKcS3_S3_S3_jibNS1_8ReferrerEbb
-}
-{
- bug_101347
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN2pp25CompletionCallbackFactoryIN5ppapi5proxy20PPB_Graphics2D_ProxyENS2_26ProxyNonThreadSafeRefCountEE17NewCallbackHelperINS5_11Dispatcher1IMS3_FviRKNS1_12HostResourceEES8_EEEENS_18CompletionCallbackERKT_
- fun:_ZN2pp25CompletionCallbackFactoryIN5ppapi5proxy20PPB_Graphics2D_ProxyENS2_26ProxyNonThreadSafeRefCountEE11NewCallbackIMS3_FviRKNS1_12HostResourceEES7_EENS_18CompletionCallbackET_RKT0_
- fun:_ZN2pp25CompletionCallbackFactoryIN5ppapi5proxy20PPB_Graphics2D_ProxyENS2_26ProxyNonThreadSafeRefCountEE19NewOptionalCallbackIMS3_FviRKNS1_12HostResourceEES7_EENS_18CompletionCallbackET_RKT0_
- fun:_ZN5ppapi5proxy38EnterHostFromHostResourceForceCallbackINS_5thunk18PPB_Graphics2D_APIEEC1IN2pp25CompletionCallbackFactoryINS0_20PPB_Graphics2D_ProxyENS0_26ProxyNonThreadSafeRefCountEEEMS8_FviRKNS_12HostResourceEESB_EESD_RT_T0_RKT1_
- fun:_ZN5ppapi5proxy20PPB_Graphics2D_Proxy10OnMsgFlushERKNS_12HostResourceE
-}
-{
- bug_101470
- Memcheck:Param
- write(buf)
- obj:/lib/x86_64-linux-gnu/libc-2.15.so
- ...
- fun:new_do_write
- ...
- fun:_ZNK13safe_browsing9PrefixSet9WriteFileE*
-}
-{
- bug_101750
- Memcheck:Leak
- fun:malloc
- fun:_ZN3WTF10fastMallocEj
- fun:_ZN3WTF7HashSetIPN7WebCore16SVGStyledElementENS_7PtrHashIS3_EENS_10HashTraitsIS3_EEEnwEj
- fun:_ZN7WebCore21SVGDocumentExtensions18addPendingResourceERKN3WTF12AtomicStringEPNS_16SVGStyledElementE
-}
-{
- bug_101751
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore14SVGFontElement6createERKNS_13QualifiedNameEPNS_8DocumentE
- fun:_ZN7WebCoreL15fontConstructorERKNS_13QualifiedNameEPNS_8DocumentEb
- fun:_ZN7WebCore17SVGElementFactory16createSVGElementERKNS_13QualifiedNameEPNS_8DocumentEb
- fun:_ZN7WebCore8Document13createElementERKNS_13QualifiedNameEb
-}
-{
- bug_101781
- Memcheck:Uninitialized
- fun:encode_one_block
- fun:encode_mcu_huff
- fun:compress_data
- fun:process_data_simple_main
- fun:chromium_jpeg_write_scanlines
- fun:_ZN3gfx9JPEGCodec6EncodeEPKhNS0_11ColorFormatEiiiiPSt6vectorIhSaIhEE
- fun:_ZN3gfx24JPEGEncodedDataFromImageERKNS_5ImageE?PSt6vectorIhSaIhEE
- fun:_ZN7history8TopSites12EncodeBitmapE*N3gfx5ImageEP13scoped_refptrIN4base15RefCountedBytesEE
- fun:_ZN7history8TopSites16SetPageThumbnailERK4GURL*N3gfx5ImageERK14ThumbnailScore
- fun:_ZN7history17ExpireHistoryTest14AddExampleDataEP?PN4base4TimeE
- fun:_ZN7history*ExpireHistoryTest_*
-}
-{
- bug_101781_d
- Memcheck:Uninitialized
- fun:_ZN7testing8internal11CmpHelperGEIddEENS_15AssertionResultEPKcS4_RKT_RKT0_
- fun:_ZN3gfx31JPEGCodec_EncodeDecodeRGBA_Test8TestBodyEv
-}
-{
- bug_102257
- Memcheck:Uninitialized
- ...
- fun:_ZN2v88internalL6InvokeEbNS0_6HandleINS0_10JSFunctionEEENS1_INS0_6ObjectEEEiPS5_Pb
- fun:_ZN2v88internal9Execution4CallENS0_6HandleINS0_6ObjectEEES4_iPS4_Pbb
-}
-{
- bug_102327a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN15tracked_objects10ThreadData10InitializeEv
- fun:_ZN15tracked_objects10ThreadData30InitializeAndSetTrackingStatusEb
- fun:_ZN15tracked_objects10ThreadData29ShutdownSingleThreadedCleanupEb
-}
-{
- bug_102327b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKPKN15tracked_objects6BirthsENS3_9DeathDataEEEE8allocateE*
- ...
- fun:_ZNSt3mapIPKN15tracked_objects6BirthsENS0_9DeathDataESt4lessIS3_ESaISt4pairIKS3_S4_EEE6insertESt17_Rb_tree_iteratorIS9_ERKS9_
- fun:_ZNSt3mapIPKN15tracked_objects6BirthsENS0_9DeathDataESt4lessIS3_ESaISt4pairIKS3_S4_EEEixERS8_
- fun:_ZN15tracked_objects10ThreadData11TallyADeathERKNS_6Births*
- fun:_ZN15tracked_objects10ThreadData3?TallyRun*IfTrackingE*
-}
-{
- bug_102327c
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN15tracked_objects10ThreadData11TallyABirthERKNS_8LocationE
- fun:_ZN15tracked_objects10ThreadData19TallyABirthIfActiveERKNS_8LocationE
-}
-{
- bug_102327d
- Memcheck:Uninitialized
- fun:_ZN15tracked_objects9DeathData11RecordDeathEiii
- fun:_ZN15tracked_objects10ThreadData11TallyADeathERKNS_6BirthsEii
- fun:_ZN15tracked_objects10ThreadData31TallyRunOnNamedThreadIfTrackingERKN4base12TrackingInfoERKNS_11TrackedTimeES7_
-}
-{
- Intentional leak of stl map during thread cleanup in profiler
- Memcheck:Leak
- fun:_Znw*
- fun:_ZNK15tracked_objects10ThreadData26OnThreadTerminationCleanupEv
-}
-{
- bug_102614
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN12*FinishPepperFlashUpdateRegistrationEP22ComponentUpdateServiceRK7Version
-}
-{
- bug_102831_a
- Memcheck:Leak
- ...
- fun:_ZN17PluginLoaderPosix19LoadPluginsInternalEv
-}
-{
- bug_104447
- Memcheck:Leak
- ...
- fun:HB_OpenTypeShape
- fun:arabicSyriacOpenTypeShape
- fun:HB_ArabicShape
- fun:HB_ShapeItem
- fun:_ZN7WebCore21ComplexTextController11shapeGlyphsEv
- fun:_ZN7WebCore21ComplexTextController13nextScriptRunEv
- fun:_ZN7WebCore21ComplexTextController14widthOfFullRunEv
- fun:_ZNK7WebCore4Font24floatWidthForComplexTextERKNS_7TextRunEPN3WTF7HashSetIPKNS_14SimpleFontDataENS4_7PtrHashIS8_EENS4_10HashTraitsIS8_EEEEPNS_13GlyphOverflowE
- fun:_ZNK7WebCore4Font5widthERKNS_7TextRunERiRN3WTF6StringE
- fun:_ZN7WebCore14SVGTextMetricsC1EPNS_19RenderSVGInlineTextERKNS_7TextRunE
- fun:_ZN7WebCore14SVGTextMetrics21measureCharacterRangeEPNS_19RenderSVGInlineTextEjj
- fun:_ZNK7WebCore30SVGTextLayoutAttributesBuilder25propagateLayoutAttributesEPNS_12RenderObjectERN3WTF6VectorINS_23SVGTextLayoutAttributesELm0EEERjRt
-}
-{
- # ProcessSingleton::LinuxWatcher is marked DeleteOnIOThread. Sometimes it
- # leaks on shutdown instead of getting deleted. The destructor doesn't do
- # anything important, so this shouldn't be a big deal.
- bug_104578
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN16ProcessSingletonC1E*
- fun:_ZN22ChromeProcessSingletonC1E*
-}
-{
- bug_104806_a
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN15tracked_objects10ThreadData19TallyABirthIfActiveERKNS_8LocationE
- fun:_ZN4base12TrackingInfoC?ERKN15tracked_objects8LocationENS_9TimeTicksE
-}
-{
- bug_104806_b
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZNSt3mapIPKN15tracked_objects6BirthsENS0_9DeathDataESt4lessIS3_ESaISt4pairIKS3_S4_EEEixERS8_
- fun:_ZN15tracked_objects10ThreadData11TallyADeathERKNS_6BirthsEii
- fun:_ZN15tracked_objects10ThreadData32TallyRunOnWorkerThreadIfTrackingEPKNS_6BirthsERKNS_11TrackedTimeES6_S6_
-}
-{
- bug_105715
- Memcheck:Uninitialized
- ...
- fun:vfprintf
- fun:__vsnprintf_chk
- fun:_ZN4base9vsnprintfEPcjPKcS0_
- fun:_ZN4base12_GLOBAL__N_110vsnprintfTEPcjPKcS1_
- fun:_ZN4base12_GLOBAL__N_1L14StringAppendVTISsEEvPT_PKNS2_10value_typeEPc
- fun:_ZN4base13StringAppendVEPSsPKcPc
- fun:_ZN4base13StringAppendFEPSsPKcz
- fun:_ZN4base10JSONWriter15BuildJSONStringEPKNS_5ValueEibb
- fun:_ZN4base10JSONWriter15BuildJSONStringEPKNS_5ValueEibb
- fun:_ZN4base10JSONWriter15BuildJSONStringEPKNS_5ValueEibb
- fun:_ZN4base10JSONWriter15BuildJSONStringEPKNS_5ValueEibb
- fun:_ZN4base10JSONWriter16WriteWithOptionsEPKNS_5ValueEbiPSs
- fun:_ZN25JSONStringValueSerializer17SerializeInternalERKN4base5ValueEb
- fun:_ZN25JSONStringValueSerializer9SerializeERKN4base5ValueE
- fun:_ZN18jstemplate_builder12AppendJsonJSEPKN4base15DictionaryValueEPSs
- fun:_ZN19OptionsUIHTMLSource16StartDataRequestERKSsbi
- fun:_ZN4base8internal15RunnableAdapterIMN20ChromeURLDataManager10DataSourceEFvRKSsbiEE3RunEPS3_S5_RKbRKi
- fun:_ZN4base8internal12InvokeHelperILb0EvNS0_15RunnableAdapterIMN20ChromeURLDataManager10DataSourceEFvRKSsbiEEEFvRKPS4_S6_RKbRKiEE8MakeItSoES9_SC_S6_SE_SG_
- fun:_ZN4base8internal7InvokerILi4ENS0_9BindStateINS0_15RunnableAdapterIMN20ChromeURLDataManager10DataSourceEFvRKSsbiEEEFvPS5_S7_biEFvSB_SsbiEEESC_E3RunEPNS0_13BindStateBaseE
- fun:_ZNK4base8CallbackIFvvEE3RunEv
-}
-{
- bug_105744b
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZNSt6vector*9push_back*
- fun:_ZN4skia19ConvolutionFilter1D9AddFilterEiPKsi
- fun:_ZN4skia12_GLOBAL__N_112ResizeFilter14ComputeFiltersEiiiffPNS_19ConvolutionFilter1DE
- fun:_ZN4skia12_GLOBAL__N_112ResizeFilterC1ENS_15ImageOperations12ResizeMethodEiiiiRK7SkIRect
- fun:_ZN4skia15ImageOperations11ResizeBasicERK8SkBitmapNS0_12ResizeMethodEiiRK7SkIRect
- fun:_ZN4skia15ImageOperations6ResizeERK8SkBitmapNS0_12ResizeMethodEiiRK7SkIRect
- fun:_ZN4skia15ImageOperations6ResizeERK8SkBitmapNS0_12ResizeMethodEii
- fun:_ZN24ChromeRenderViewObserver21CaptureFrameThumbnailEPN5blink7WebViewEiiP8SkBitmapP14ThumbnailScore
- fun:_ZN24ChromeRenderViewObserver16CaptureThumbnailEv
- fun:_ZN24ChromeRenderViewObserver15CapturePageInfoEib
-}
-{
- bug_105907
- Memcheck:Uninitialized
- ...
- fun:_ZN4skia14BGRAConvolve2DEPKhibRKNS_19ConvolutionFilter1DES4_iPhb
- fun:_ZN4skia15ImageOperations11ResizeBasicE*
- fun:_ZN4skia15ImageOperations6ResizeE*
-}
-{
- bug_106183a
- Memcheck:Uninitialized
- fun:_ZN7WebCore13RenderMarquee18updateMarqueeStyleEv
- fun:_ZN7WebCore11RenderLayer12styleChangedENS_15StyleDifferenceEPKNS_11RenderStyleE
- fun:_ZN7WebCore20RenderBoxModelObject14styleDidChangeENS_15StyleDifferenceEPKNS_11RenderStyleE
- fun:_ZN7WebCore9RenderBox14styleDidChangeENS_15StyleDifferenceEPKNS_11RenderStyleE
- fun:_ZN7WebCore11RenderBlock14styleDidChangeENS_15StyleDifferenceEPKNS_11RenderStyleE
- fun:_ZN7WebCore12RenderObject8setStyleEN3WTF10PassRefPtrINS_11RenderStyleEEE
-}
-{
- bug_106183b
- Memcheck:Uninitialized
- fun:_ZN7WebCore21ComplexTextController*
- ...
- fun:_ZNK7WebCore4Font27selectionRectForComplexTextERKNS_7TextRunERKNS_10FloatPointEiii
- fun:_ZNK7WebCore4Font20selectionRectForTextERKNS_7TextRunERKNS_10FloatPointEiii
- fun:_ZNK7WebCore13InlineTextBox17positionForOffsetEi
- fun:_ZN7WebCore10RenderText14localCaretRectEPNS_9InlineBoxEiPi
- fun:_ZNK7WebCore15VisiblePosition14localCaretRectERPNS_12RenderObjectE
- fun:_ZN7WebCore9CaretBase15updateCaretRectEPNS_8DocumentERKNS_15VisiblePositionE
- fun:_ZN7WebCore14FrameSelection14localCaretRectEv
- fun:_ZN7WebCore14FrameSelection18recomputeCaretRectEv
- fun:_ZN7WebCore14FrameSelection16updateAppearanceEv
-}
-{
- bug_106183c
- Memcheck:Uninitialized
- fun:_ZN7WebCore21ComplexTextController*
- ...
- fun:_ZNK7WebCore4Font15drawComplexTextEPNS_15GraphicsContextERKNS_7TextRunERKNS_10FloatPointEii
- fun:_ZNK7WebCore4Font8drawTextEPNS_15GraphicsContextERKNS_7TextRunERKNS_10FloatPointEii
- fun:_ZN7WebCore15GraphicsContext8drawTextERKNS_4FontERKNS_7TextRunERKNS_10FloatPointEii
- fun:_ZN7WebCoreL20paintTextWithShadowsEPNS_15GraphicsContextERKNS_4FontERKNS_7TextRunERKN3WTF12AtomicStringEiiiiRKNS_10FloatPointERKNS_9FloatRectEPKNS_10ShadowDataEbb
- ...
- fun:_ZNK7WebCore17RenderLineBoxList5paintEPNS_20RenderBoxModelObjectERNS_9PaintInfoERKNS_8IntPointE
- fun:_ZN7WebCore11RenderBlock13paintContentsERNS_9PaintInfoERKNS_8IntPointE
- fun:_ZN7WebCore11RenderBlock11paintObjectERNS_9PaintInfoERKNS_8IntPointE
- fun:_ZN7WebCore11RenderBlock5paintERNS_9PaintInfoERKNS_8IntPointE
-}
-{
- bug_106402
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN2pp25CompletionCallbackFactoryIN5ppapi5proxy20PPB_Graphics2D_ProxyENS2_26ProxyNonThreadSafeRefCountEE17NewCallbackHelperINS5_11Dispatcher1IMS3_FviRKNS1_12HostResourceEES8_EEEENS_18CompletionCallbackERKT_
- fun:_ZN2pp25CompletionCallbackFactoryIN5ppapi5proxy20PPB_Graphics2D_ProxyENS2_26ProxyNonThreadSafeRefCountEE11NewCallbackIMS3_FviRKNS1_12HostResourceEES7_EENS_18CompletionCallbackET_RKT0_
- fun:_ZN2pp25CompletionCallbackFactoryIN5ppapi5proxy20PPB_Graphics2D_ProxyENS2_26ProxyNonThreadSafeRefCountEE19NewOptionalCallbackIMS3_FviRKNS1_12HostResourceEES7_EENS_18CompletionCallbackET_RKT0_
- fun:_ZN5ppapi5proxy38EnterHostFromHostResourceForceCallbackINS_5thunk18PPB_Graphics2D_APIEEC1IN2pp25CompletionCallbackFactoryINS0_20PPB_Graphics2D_ProxyENS0_26ProxyNonThreadSafeRefCountEEEMS8_FviRKNS_12HostResourceEESB_EESD_RT_T0_RKT1_
- fun:_ZN5ppapi5proxy20PPB_Graphics2D_Proxy14OnHostMsgFlushERKNS_12HostResourceE
-}
-{
- bug_106552
- Memcheck:Uninitialized
- ...
- fun:_ZN25JSONStringValueSerializer17SerializeInternalERKN4base5ValueEb
- fun:_ZN25JSONStringValueSerializer9SerializeERKN4base5ValueE
- fun:_ZN13JsonPrefStore13SerializeDataEPSs
- fun:_ZN19ImportantFileWriter16DoScheduledWriteEv
- fun:_ZN13JsonPrefStore18CommitPendingWriteEv
- fun:_ZN13JsonPrefStoreD0Ev
- fun:_ZNK4base10RefCountedI9PrefStoreE7ReleaseEv
- fun:_ZN13scoped_refptrI19PersistentPrefStoreEaSEPS0_
- fun:_ZN11PrefServiceD0Ev
- fun:_ZN10scoped_ptrI11PrefServiceED1Ev
- fun:_ZN14TestingProfileD2Ev
- fun:_ZN23ExtensionTestingProfileD0Ev
-}
-{
- bug_106912
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN15tracked_objects10ThreadData23InitializeThreadContextERKSs
- fun:_ZN4base14PlatformThread7SetNameEPKc
-}
-{
- bug_107696
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore11iBeamCursorEv
- fun:_ZN7WebCore12EventHandler12selectCursorERKNS_28MouseEventWithHitTestResultsEPNS_9ScrollbarE
- fun:_ZN7WebCore12EventHandler20handleMouseMoveEventERKNS_18PlatformMouseEventEPNS_13HitTestResultEb
- fun:_ZN7WebCore12EventHandler10mouseMovedERKNS_18PlatformMouseEventEb
- fun:_ZN5blink11WebViewImpl9mouseMoveERKNS_13WebMouseEventE
- fun:_ZN5blink11WebViewImpl16handleInputEventERKNS_13WebInputEventE
- fun:_ZN12RenderWidget18OnHandleInputEventERKN3IPC7MessageE
-}
-{
- bug_108146a
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN5ppapi5proxy26PPP_Instance_Private_Proxy22OnMsgGetInstanceObjectEiNS0_24SerializedVarReturnValueE
-}
-{
- bug_108146b
- Memcheck:Param
- write(buf)
- obj:/lib/tls/i686/cmov/libpthread-2.11.1.so
- fun:_ZN3IPC7Channel11ChannelImpl4SendEPNS_7MessageE
- fun:_ZN3IPC7Channel4SendEPNS_7MessageE
- fun:_ZN3IPC12ChannelProxy7Context13OnSendMessageEPNS_7MessageE
- fun:_ZN3IPC18SendCallbackHelper4SendEv
-}
-{
- bug_108147
- Memcheck:Uninitialized
- ...
- fun:_ZNK6SkDraw11drawPosTextEPKcmPKffiRK7SkPaint
- fun:_ZN8SkDevice11drawPosTextERK6SkDrawPKvmPKffiRK7SkPaint
- fun:_ZN8SkCanvas11drawPosTextEPKvmPK7SkPointRK7SkPaint
- fun:_ZNK7WebCore4Font10drawGlyphsEPNS_15GraphicsContextEPKNS_14SimpleFontDataERKNS_11GlyphBufferEiiRKNS_10FloatPointE
- fun:_ZNK7WebCore4Font15drawGlyphBufferEPNS_15GraphicsContextERKNS_7TextRunERKNS_11GlyphBufferERKNS_10FloatPointE
- fun:_ZNK7WebCore4Font14drawSimpleTextEPNS_15GraphicsContextERKNS_7TextRunERKNS_10FloatPointEii
- fun:_ZNK7WebCore4Font8drawTextEPNS_15GraphicsContextERKNS_7TextRunERKNS_10FloatPointEii
-}
-{
- bug_108620
- Memcheck:Uninitialized
- fun:_ZN7WebCore13PlatformEventC2ENS0_4TypeEbbbbd
- fun:_ZN7WebCore18PlatformMouseEventC1ERKNS_8IntPointES3_NS_11MouseButtonENS_13PlatformEvent4TypeEibbbbd
- fun:_ZN7WebCore12EventHandler28fakeMouseMoveEventTimerFiredEPNS_5TimerIS0_EE
- fun:_ZN7WebCore5TimerINS_12EventHandlerEE5firedEv
- fun:_ZN7WebCore12ThreadTimers24sharedTimerFiredInternalEv
- fun:_ZN7WebCore12ThreadTimers16sharedTimerFiredEv
- fun:_ZN11webkit_glue25WebKitPlatformSupportImpl9DoTimeoutEv
- fun:_ZN4base9BaseTimerIN11webkit_glue25WebKitPlatformSupportImplELb0EE9TimerTask3RunEv
-}
-{
- bug_108621
- Memcheck:Leak
- fun:malloc
- fun:_ZN3WTF10fastMallocEm
- fun:_ZN3WTF10RefCountedIN7WebCore5EventEEnwEm
- fun:_ZN7WebCore12MessageEvent6createEN3WTF10PassOwnPtrINS1_6VectorINS1_6RefPtrINS_11MessagePortEEELm1EEEEENS1_10PassRefPtrINS_21SerializedScriptValueEEERKNS1_6StringESE_NS9_INS_9DOMWindowEEE
- fun:_ZN7WebCore16PostMessageTimer5eventEPNS_22ScriptExecutionContextE
- fun:_ZN7WebCore9DOMWindow21postMessageTimerFiredEN3WTF10PassOwnPtrINS_16PostMessageTimerEEE
- fun:_ZN7WebCore16PostMessageTimer5firedEv
- fun:_ZN7WebCore12ThreadTimers24sharedTimerFiredInternalEv
- fun:_ZN7WebCore12ThreadTimers16sharedTimerFiredEv
- fun:_ZN11webkit_glue25WebKitPlatformSupportImpl9DoTimeoutEv
- fun:_ZN4base9BaseTimerIN11webkit_glue25WebKitPlatformSupportImplELb0EE9TimerTask3RunEv
-}
-{
- bug_108622
- Memcheck:Leak
- fun:_Zna*
- fun:_ZN2v88internal8NewArrayIhEEPT*
- fun:_ZN2v88internal11RegExpStack14EnsureCapacityEm
- fun:_ZN2v88internal16RegExpStackScopeC1EPNS0_7IsolateE
- fun:_ZN2v88internal26NativeRegExpMacroAssembler7ExecuteEPNS0_4CodeEPNS0_6String*
- fun:_ZN2v88internal26NativeRegExpMacroAssembler5MatchENS0_6HandleINS0_4CodeEEENS2_INS0_6StringEEEPiiiPNS0_7IsolateE
- fun:_ZN2v88internal10RegExpImpl*IrregexpExec*ENS0_6HandleINS0_8JSRegExpEEENS2_INS0_6StringEEEiPii
-}
-{
- bug_108624
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore23v8StringToWebCoreStringIN3WTF6StringEEET_N2v86HandleINS4_6StringEEENS_12ExternalModeE
- fun:_ZN7WebCore15V8ParameterBase8toStringIN3WTF6StringEEET_v
- fun:_ZN7WebCore15V8ParameterBasecvN3WTF6StringEEv
- ...
- fun:_ZN2v88internalL6InvokeEbNS0_6HandleINS0_10JSFunctionEEENS1_INS0_6ObjectEEEiPS5_Pb
- fun:_ZN2v88internal9Execution4CallENS0_6HandleINS0_6ObjectEEES4_iPS4_Pbb
- fun:_ZN2v88Function4CallENS_6HandleINS_6ObjectEEEiPNS1_INS_5ValueEEE
- fun:_ZN7WebCore28V8WorkerContextEventListener20callListenerFunctionEPNS_22ScriptExecutionContextEN2v86HandleINS3_5ValueEEEPNS_5EventE
- fun:_ZN7WebCore23V8AbstractEventListener18invokeEventHandlerEPNS_22ScriptExecutionContextEPNS_5EventEN2v86HandleINS5_5ValueEEE
- fun:_ZN7WebCore28V8WorkerContextEventListener11handleEventEPNS_22ScriptExecutionContextEPNS_5EventE
- fun:_ZN7WebCore11EventTarget18fireEventListenersEPNS_5EventEPNS_15EventTargetDataERN3WTF6VectorINS_23RegisteredEventListenerELm1EEE
-}
-{
- bug_108624a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore23v8StringToWebCoreStringIN3WTF6StringEEET_N2v86HandleINS4_6StringEEENS_12ExternalModeE
- fun:_ZN7WebCore15V8ParameterBase8toStringIN3WTF6StringEEET_v
- fun:_ZN7WebCore15V8ParameterBasecvN3WTF6StringEEv
- fun:_ZN7WebCore25WebKitBlobBuilderInternal*
-}
-{
- bug_108628
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore23v8StringToWebCoreStringIN3WTF12AtomicStringEEET_N2v86HandleINS4_6StringEEENS_12ExternalModeE
- fun:_ZN*7WebCore16V8StringResourceILNS_20V8StringResourceModeE0EE8toStringIN3WTF12AtomicStringEEET_v
- fun:_ZN*7WebCore16V8StringResourceILNS_20V8StringResourceModeE0EEcvN3WTF12AtomicStringEEv
- ...
- fun:_ZN7WebCore24XMLHttpRequestV8Internal*
- ...
- fun:_ZN2v88internalL19HandleApiCallHelperILb0EEEPNS0_11MaybeObjectENS0_12_GLOBAL__N_116BuiltinArgumentsILNS0_21BuiltinExtraArgumentsE1EEEPNS0_7IsolateE
-}
-{
- bug_109495e
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorISt10_List_nodeIPN3gpu5gles219VertexAttribManager16VertexAttribInfoEEE8allocateEmPKv
- fun:_ZNSt10_List_baseIPN3gpu5gles219VertexAttribManager16VertexAttribInfoESaIS4_EE11_M_get_nodeEv
- fun:_ZNSt4listIPN3gpu5gles219VertexAttribManager16VertexAttribInfoESaIS4_EE14_M_create_nodeERKS4_
- fun:_ZNSt4listIPN3gpu5gles219VertexAttribManager16VertexAttribInfoESaIS4_EE6insertESt14_List_iteratorIS4_ERKS4_
- fun:_ZN3gpu5gles219VertexAttribManager16VertexAttribInfo7SetListEPSt4listIPS2_SaIS4_EE
- fun:_ZN3gpu5gles219VertexAttribManager10InitializeEj
- fun:_ZN3gpu5gles216GLES2DecoderImpl10Initialize*
- fun:_ZN6webkit3gpu18GLInProcessContext10InitializeERKN3gfx4SizeEPS1_PKcPKiNS2_13GpuPreferenceE
- fun:_ZN6webkit3gpu18GLInProcessContext22CreateOffscreenContextEPS1_RKN3gfx4SizeES2_PKcPKiNS3_13GpuPreferenceE
- fun:_ZN6webkit3gpu46WebGraphicsContext3DInProcessCommandBufferImpl10InitializeEN5blink20WebGraphicsContext3D10AttributesEPS3_
-}
-{
- bug_109495f
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN6webkit3gpu18GLInProcessContext22CreateOffscreenContextEPS1_RKN3gfx4SizeES2_PKcPKiNS3_13GpuPreferenceE
- fun:_ZN6webkit3gpu46WebGraphicsContext3DInProcessCommandBufferImpl10InitializeEN5blink20WebGraphicsContext3D10AttributesEPS3_
- fun:_ZN25TestWebKitPlatformSupport32createOffscreenGraphicsContext3DERKN5blink20WebGraphicsContext3D10AttributesE
- fun:_ZN7WebCore17GraphicsContext3D6createENS0_10AttributesEPNS_10HostWindowENS0_11RenderStyleE
- fun:_ZN7WebCore21WebGLRenderingContext6createEPNS_17HTMLCanvasElementEPNS_22WebGLContextAttributesE
- fun:_ZN7WebCore17HTMLCanvasElement10getContextERKN3WTF6StringEPNS_23CanvasContextAttributesE
- fun:_ZN7WebCore19V8HTMLCanvasElement18getContextCallbackERKN2v89ArgumentsE
-}
-{
- bug_109496
- Memcheck:Uninitialized
- ...
- fun:_ZN7WebCore11ImageBuffer27platformTransformColorSpaceERKN3WTF6VectorIiLm0EEE
- fun:_ZN7WebCore11ImageBuffer19transformColorSpaceENS_10ColorSpaceES1_
- fun:_ZN7WebCore23RenderSVGResourceFilter17postApplyResourceEPNS_12RenderObjectERPNS_15GraphicsContextEtPKNS_4PathEPKNS_14RenderSVGShapeE
- ...
- fun:_ZN7WebCore14RenderSVGShape5paintERNS_9PaintInfoERKNS_*
- ...
- fun:_ZN7WebCore13RenderSVGRoot*paint*PaintInfoERKNS_*
-}
-{
- bug_109872
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN18BrowserProcessImpl29ResourceDispatcherHostCreatedEv
- fun:_ZN6chrome26ChromeContentBrowserClient29ResourceDispatcherHostCreatedEv
- fun:_ZN22ResourceDispatcherHost*
- ...
- fun:_ZN7content15BrowserMainLoop21BrowserThreadsStartedEv
- fun:_ZN7content15BrowserMainLoop*
- ...
- fun:_Z11BrowserMainRKN7content18MainFunctionParamsE
-}
-{
- bug_110734
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN15StartupTimeBomb3ArmERKN4base9TimeDeltaE
- fun:_ZN22ChromeBrowserMainParts25PreMainMessageLoopRunImplEv
-}
-{
- bug_111186
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN11leveldb_*ChromiumEnv11StartThread*
- fun:_ZN11leveldb_*ChromiumEnv8Schedule*
- fun:_ZN7leveldb6DBImpl23MaybeScheduleCompactionEv
- fun:_ZN7leveldb6DBImpl16MakeRoomForWriteEb
- fun:_ZN7leveldb6DBImpl5WriteERKNS_12WriteOptionsEPNS_10WriteBatchE
- fun:_ZN17LeveldbValueStore9WriteToDbEPN7leveldb10WriteBatchE
- fun:_ZN17LeveldbValueStore3SetEiRKSsRKN4base5ValueE
- fun:_ZN10extensions28SettingsStorageQuotaEnforcer3SetEiRKSsRKN4base5ValueE
- fun:_ZN10extensions23SyncableSettingsStorage3SetEiRKSsRKN4base5ValueE
-}
-{
- bug_111341
- Memcheck:Leak
- fun:malloc
- fun:_ZN3WTF10fastMallocEm
- fun:_ZN7WebCore17ClipboardChromiumnwEm
- fun:_ZN7WebCore17ClipboardChromium6createENS_9Clipboard13ClipboardTypeEN3WTF10PassRefPtrINS_18ChromiumDataObjectEEENS_21ClipboardAccessPolicyEPNS_5FrameE
-}
-{
- bug_111669
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN8appcache17AppCacheDiskCache10ActiveCall17OnAsyncCompletionEi
-}
-{
- bug_112278
- Memcheck:Uninitialized
- fun:fetch_texel_2d_f_rgba8888
- fun:sample_2d_linear
- fun:sample_linear_2d
- fun:fetch_texel_lod
- fun:fetch_texel
- fun:_mesa_execute_program
- fun:run_program
- fun:_swrast_exec_fragment_program
- fun:shade_texture_span
- fun:_swrast_write_rgba_span
- fun:general_triangle
- fun:_swrast_validate_triangle
- fun:_swrast_Triangle
- fun:triangle_rgba
- fun:_tnl_render_triangles_elts
- fun:run_render
- fun:_tnl_run_pipeline
- fun:_tnl_draw_prims
- fun:_tnl_vbo_draw_prims
- fun:vbo_validated_drawrangeelements
- fun:vbo_exec_DrawElements
- fun:neutral_DrawElements
-}
-{
- bug_112278b
- Memcheck:Uninitialized
- fun:fetch_texel_2d_f_rgba8888
- fun:sample_2d_nearest
- fun:sample_nearest_2d
- fun:fetch_texel_lod
- fun:fetch_texel
- fun:_mesa_execute_program
- fun:run_program
- fun:_swrast_exec_fragment_program
- fun:shade_texture_span
- fun:_swrast_write_rgba_span
- fun:general_triangle
- ...
- fun:_swrast_Triangle
- fun:triangle_rgba
- ...
- fun:run_render
- fun:_tnl_run_pipeline
- fun:_tnl_draw_prims
- fun:_tnl_vbo_draw_prims
-}
-{
- bug_112315
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN2v88internal21NativeObjectsExplorer18FindOrAddGroupInfoEPKc
- ...
- fun:_ZN2v88internal21NativeObjectsExplorer27IterateAndExtractReferencesEPNS0_23SnapshotFillerInterfaceE
- fun:_ZN2v88internal21HeapSnapshotGenerator25CountEntriesAndReferencesEv
- fun:_ZN2v88internal21HeapSnapshotGenerator16GenerateSnapshotEv
- fun:_ZN2v88internal12HeapProfiler16TakeSnapshotImplEPKciPNS_15ActivityControlE
- ...
- fun:_ZN2v88internal12HeapProfiler12TakeSnapshotEPNS0_6StringEiPNS_15ActivityControlE
- fun:_ZN2v812HeapProfiler12TakeSnapshotENS_6HandleINS_6StringEEENS_12HeapSnapshot4TypeEPNS_15ActivityControlE
- fun:_ZL13GetNumObjectsPKc
-}
-{
- bug_112450_b
- Memcheck:Unaddressable
- fun:_ZN7WebCore15PlatformSupport25loadPlatformAudioResourceEPKcd
- fun:_ZN7WebCore8AudioBus20loadPlatformResourceEPKcf
- fun:_ZN7WebCore13HRTFElevation35calculateKernelsForAzimuthElevationEiifRKN3WTF6StringERNS1_6RefPtrINS_10HRTFKernelEEES8_
- fun:_ZN7WebCore13HRTFElevation16createForSubjectERKN3WTF6StringEif
- fun:_ZN7WebCore12HRTFDatabaseC1Ef
- fun:_ZN7WebCore12HRTFDatabase6createEf
- fun:_ZN7WebCore18HRTFDatabaseLoader4loadEv
- fun:_ZN7WebCoreL19databaseLoaderEntryEPv
- fun:_ZN3WTFL16threadEntryPointEPv
-}
-{
- bug_112594_a
- Memcheck:Leak
- ...
- fun:NPP_New
- fun:_ZN6webkit5npapi14PluginInstance7NPP_NewEtsPPcS3_
- fun:_ZN6webkit5npapi14PluginInstance5StartERK4GURLPPcS6_ib
- fun:_ZN6webkit5npapi21WebPluginDelegateImpl10InitializeERK4GURLRKSt6vectorISsSaISsEES9_PNS0_9WebPluginEb
- fun:_ZN6webkit5npapi13WebPluginImpl10initializeEPN5blink18WebPluginContainerE
- fun:_ZN5blink21FrameLoaderClientImpl12createPluginERKN7WebCore7IntSizeEPNS1_17HTMLPlugInElementERKNS1_4KURLERKN3WTF6VectorINSA_6StringELm0EEESF_RKSC_b
- fun:_ZN7WebCore14SubframeLoader10loadPluginEPNS_22HTMLPlugInImageElementERKNS_4KURLERKN3WTF6StringERKNS6_6VectorIS7_Lm0EEESD_b
- fun:_ZN7WebCore14SubframeLoader13requestPluginEPNS_22HTMLPlugInImageElementERKNS_4KURLERKN3WTF6StringERKNS6_6VectorIS7_Lm0EEESD_b
- fun:_ZN7WebCore14SubframeLoader13requestObjectEPNS_22HTMLPlugInImageElementERKN3WTF6StringERKNS3_12AtomicStringES6_RKNS3_6VectorIS4_Lm0EEESD_
-}
-{
- bug_112594_b
- Memcheck:Unaddressable
- fun:_ZN6webkit5npapi13WebPluginImpl24HandleURLRequestInternalEPKcS3_S3_S3_jibNS1_8ReferrerEbb
- fun:_ZN6webkit5npapi13WebPluginImpl16HandleURLRequestEPKcS3_S3_S3_jibb
- fun:_ZN6webkit5npapi14PluginInstance10RequestURLEPKcS3_S3_S3_jbPv
- fun:GetURLNotify
- fun:NPN_GetURLNotify
- fun:_ZN10PluginTest16NPN_GetURLNotifyEPKcS1_Pv
- fun:_ZN34GetURLNotifyWithURLThatFailsToLoad7NPP_NewEPctsPS0_S1_P12_NPSavedData
- fun:NPP_New
- fun:_ZN6webkit5npapi14PluginInstance7NPP_NewEtsPPcS3_
- fun:_ZN6webkit5npapi14PluginInstance5StartERK4GURLPPcS6_ib
- fun:_ZN6webkit5npapi21WebPluginDelegateImpl10InitializeERK4GURLRKSt6vectorISsSaISsEES9_PNS0_9WebPluginEb
- fun:_ZN6webkit5npapi13WebPluginImpl10initializeEPN5blink18WebPluginContainerE
- fun:_ZN5blink21FrameLoaderClientImpl12createPluginERKN7WebCore7IntSizeEPNS1_17HTMLPlugInElementERKNS1_4KURLERKN3WTF6VectorINSA_6StringELm0EEESF_RKSC_b
- fun:_ZN7WebCore14SubframeLoader10loadPluginEPNS_22HTMLPlugInImageElementERKNS_4KURLERKN3WTF6StringERKNS6_6VectorIS7_Lm0EEESD_b
- fun:_ZN7WebCore14SubframeLoader13requestPluginEPNS_22HTMLPlugInImageElementERKNS_4KURLERKN3WTF6StringERKNS6_6VectorIS7_Lm0EEESD_b
- fun:_ZN7WebCore14SubframeLoader13requestObjectEPNS_22HTMLPlugInImageElementERKN3WTF6StringERKNS3_12AtomicStringES6_RKNS3_6VectorIS4_Lm0EEESD_
-}
-{
- bug_112594_c
- Memcheck:Unaddressable
- fun:_ZN27DocumentOpenInDestroyStream17NPP_DestroyStreamEP9_NPStreams
- fun:NPP_DestroyStream
- fun:_ZN6webkit5npapi14PluginInstance17NPP_DestroyStreamEP9_NPStreams
- fun:_ZN6webkit5npapi12PluginStream5CloseEs
- fun:_ZN6webkit5npapi15PluginStreamUrl5CloseEs
- fun:_ZN6webkit5npapi15PluginStreamUrl16DidFinishLoadingEv
- fun:_ZN6webkit5npapi13WebPluginImpl16didFinishLoadingEPN5blink12WebURLLoaderEd
-}
-{
- bug_112594_d
- Memcheck:Leak
- fun:malloc
- fun:NPN_MemAlloc
- fun:*Enumerate*ObjectPPPvPj
- fun:_ZN7WebCore26npObjectPropertyEnumerator*Info*
- ...
- fun:_ZN2v88internal28Runtime_GetPropertyNamesFast*IsolateE
-}
-{
- bug_112573
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN2v88internal2OS15CreateSemaphoreEi
- fun:_ZN2v88internal8ProfilerC1EPNS0_7IsolateE
- fun:_ZN2v88internal6Logger5SetUpEv
- fun:_ZN2v88internal7Isolate4InitEPNS0_12DeserializerE
- fun:_ZN2v88internal2V810InitializeEPNS0_12DeserializerE
- fun:_ZN2v88internal8Snapshot11DeserializeEPKhi
- fun:_ZN2v88internal8Snapshot10InitializeEPKc
- fun:_ZN2v8L16InitializeHelperEv
- fun:_ZN2v8L27EnsureInitializedForIsolateEPNS_8internal7IsolateEPKc
- fun:_ZN2v82V818AddMessageListenerEPFvNS_6HandleINS_7MessageEEENS1_INS_5ValueEEEES5_
- fun:_ZN7WebCore27WorkerContextExecutionProxy19initContextIfNeededEv
- fun:_ZN7WebCore27WorkerContextExecutionProxy8evaluateERKN3WTF6StringES4_RKNS1_12TextPositionEPNS_27WorkerContextExecutionStateE
- fun:_ZN7WebCore22WorkerScriptController8evaluateERKNS_16ScriptSourceCodeEPNS_11ScriptValueE
- fun:_ZN7WebCore22WorkerScriptController8evaluateERKNS_16ScriptSourceCodeE
- fun:_ZN7WebCore12WorkerThread12workerThreadEv
- fun:_ZN7WebCore12WorkerThread17workerThreadStartEPv
- fun:_ZN3WTFL16threadEntryPointEPv
-}
-{
- bug_112835
- Memcheck:Unaddressable
- ...
- fun:_ZN5blink31WorkerFileSystemCallbacksBridge4stopEv
- fun:_ZN5blink31WorkerFileSystemContextObserver10notifyStopEv
- fun:_ZN7WebCore13WorkerContext21notifyObserversOfStopEv
- fun:_ZN7WebCore29WorkerThreadShutdownStartTask11performTaskEPNS_22ScriptExecutionContextE
- fun:_ZN7WebCore13WorkerRunLoop4Task11performTaskERKS0_PNS_22ScriptExecutionContextE
- fun:_ZN7WebCore13WorkerRunLoop15runCleanupTasksEPNS_13WorkerContextE
-}
-{
- bug_113076
- Memcheck:Uninitialized
- fun:_ZN5mediaL19ConvertYUVToRGB32_CEhhhPh
- fun:_ZN5media35LinearScaleYUVToRGB32RowWithRange_CEPKhS1_S1_Phiii
- fun:_ZN5media23ScaleYUVToRGB32WithRectEPKhS1_S1_Phiiiiiiiiiii
-}
-{
- bug_115294
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN17AudioRendererHost14OnCreateStreamEiRK15AudioParameters
-}
-{
- bug_115419_1
- Memcheck:Uninitialized
- fun:fetch_texel_2d_f_rgba8888
- fun:texture_get_row
- fun:fast_read_rgba_pixels
- fun:read_rgba_pixels
- fun:_swrast_ReadPixels
- fun:_mesa_ReadPixels
- fun:glReadPixels
- fun:_ZN3gpu5gles216GLES2DecoderImpl16HandleReadPixelsEjRKNS0_10ReadPixelsE
- fun:_ZN3gpu5gles216GLES2DecoderImpl9DoCommandEjjPKv
- fun:_ZN3gpu13CommandParser14ProcessCommandEv
- fun:_ZN3gpu12GpuScheduler10PutChangedEv
- fun:_ZN6webkit3gpu18GLInProcessContext12PumpCommandsEv
-}
-{
- bug_115419_2
- Memcheck:Uninitialized
- fun:get_src_arg_mask
- fun:_mesa_remove_extra_move_use
- fun:_mesa_optimize_program
- fun:_Z16get_mesa_programP14__GLcontextRecP17gl_shader_programP9gl_shader
- fun:_mesa_ir_link_shader
- fun:_mesa_glsl_link_shader
- fun:link_program
- fun:_mesa_LinkProgramARB
- fun:glLinkProgram
- ...
- fun:_ZN3gpu5gles216GLES2DecoderImpl13DoLinkProgram*
- fun:_ZN3gpu5gles216GLES2DecoderImpl17HandleLinkProgram*
- fun:_ZN3gpu5gles216GLES2DecoderImpl9DoCommandEjjPKv
- fun:_ZN3gpu13CommandParser14ProcessCommandEv
- fun:_ZN3gpu12GpuScheduler10PutChangedEv
- fun:_ZN6webkit3gpu18GLInProcessContext12PumpCommandsEv
-}
-{
- bug_116475
- Memcheck:Uninitialized
- ...
- fun:_ZNK4base9Histogram11BucketIndexEi
- fun:_ZN4base9Histogram3AddEi
- fun:_ZN11webkit_glue25WebKitPlatformSupportImpl21histogramCustomCountsEPKciiii
- fun:_ZN7WebCore15PlatformSupport21histogramCustomCountsEPKciiii
- fun:_ZN7WebCore19CCLayerTreeHostImpl20optimizeRenderPasses*
- fun:_ZN7WebCore19CCLayerTreeHostImpl10drawLayersEv
- fun:_ZN7WebCore19CCSingleThreadProxy11doCompositeEv
-}
-{
- bug_118890_a
- Memcheck:Leak
- ...
- fun:_ZN8notifier18SingleLoginAttemptC1EPNS_13LoginSettingsEPNS0_8DelegateE
- fun:_ZN8notifier5Login15StartConnectionEv
- fun:_ZN13sync_notifier20InvalidationNotifier17UpdateCredentialsERKSsS2_
-}
-{
- bug_118890_b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN13sync_notifier12_GLOBAL__N_124InvalidationNotifierTest5SetUpEv
-}
-{
- bug_122177
- Memcheck:Leak
- ...
- fun:_ZN7history16InMemoryURLIndex23PostSaveToCacheFileTaskEv
- fun:_ZN7history16InMemoryURLIndex8ShutDownEv
- fun:_ZN14HistoryService13UnloadBackendEv
- fun:_ZN14HistoryService7CleanupEv
-}
-{
- bug_122189
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN5blink16ChromeClientImpl18createColorChooserEPN7WebCore18ColorChooserClientERKNS1_5ColorE
- fun:_ZN7WebCore6Chrome18createColorChooserEPNS_18ColorChooserClientERKNS_5ColorE
- fun:_ZN7WebCore14ColorInputType22handleDOMActivateEventEPNS_5EventE
- fun:_ZN7WebCore16HTMLInputElement19defaultEventHandlerEPNS_5EventE
- fun:_ZN7WebCore15EventDispatcher13dispatchEventEN3WTF10PassRefPtrINS_5EventEEE
- fun:_ZNK7WebCore21EventDispatchMediator13dispatchEventEPNS_15EventDispatcherE
-}
-{
- bug_122192
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN6webkit3gpu18GLInProcessContext22CreateOffscreenContextEPS1_RKN3gfx4SizeES2_PKcPKiNS3_13GpuPreferenceE
- fun:_ZN6webkit3gpu46WebGraphicsContext3DInProcessCommandBufferImpl10InitializeEN5blink20WebGraphicsContext3D10AttributesEPS3_
- fun:_ZN14webkit_support23CreateGraphicsContext3DERKN5blink20WebGraphicsContext3D10AttributesEPNS0_7WebViewEb
- fun:_ZN11WebViewHost23createGraphicsContext3DERKN5blink20WebGraphicsContext3D10AttributesE
- fun:_ZN5blink11WebViewImpl33createCompositorGraphicsContext3DEv
- fun:_ZN5blink11WebViewImpl15createContext3DEv
-}
-{
- bug_122245a
- Memcheck:Uninitialized
- ...
- fun:_ZN15SkScalerContext15internalGetPathERK7SkGlyphP6SkPathS4_P8SkMatrix
- fun:_ZN15SkScalerContext10getMetricsEP7SkGlyph
- fun:_ZN12SkGlyphCache13lookupMetricsEjNS_11MetricsTypeE
-}
-{
- bug_122245b
- Memcheck:Uninitialized
- ...
- fun:_ZNK6SkRect8roundOutEP7SkIRect
- fun:_ZN15SkScalerContext10getMetricsEP7SkGlyph
- fun:_ZN12SkGlyphCache13lookupMetricsEjNS_11MetricsTypeE
- fun:_ZN12SkGlyphCache17getGlyphIDMetricsEt
- fun:_ZL22sk_getMetrics_glyph_00P12SkGlyphCachePPKcii
- fun:_ZNK6SkDraw11drawPosTextEPKcmPKffiRK7SkPaint
- fun:_ZN8SkDevice11drawPosTextERK6SkDrawPKvmPKffiRK7SkPaint
- fun:_ZN11SkGpuDevice11drawPosTextERK6SkDrawPKvmPKffiRK7SkPaint
- fun:_ZN8SkCanvas11drawPosTextEPKvmPK7SkPointRK7SkPaint
- fun:_ZNK7WebCore4Font10drawGlyphsEPNS_15GraphicsContextEPKNS_14SimpleFontDataERKNS_11GlyphBufferEiiRKNS_10FloatPointE
- fun:_ZNK7WebCore4Font15drawGlyphBufferEPNS_15GraphicsContextERKNS_7TextRunERKNS_11GlyphBufferERKNS_10FloatPointE
- fun:_ZNK7WebCore4Font14drawSimpleTextEPNS_15GraphicsContextERKNS_7TextRunERKNS_10FloatPointEii
- fun:_ZNK7WebCore4Font8drawTextEPNS_15GraphicsContextERKNS_7TextRunERKNS_10FloatPointEii
- fun:_ZN7WebCore15GraphicsContext12drawBidiTextERKNS_4FontERKNS_7TextRunERKNS_10FloatPointE
- fun:_ZN7WebCore24CanvasRenderingContext2D16drawTextInternalERKN3WTF6StringEffbfb
- fun:_ZN7WebCore24CanvasRenderingContext2D10strokeTextERKN3WTF6StringEfff
- fun:_ZN7WebCore32CanvasRenderingContext2DInternalL18strokeTextCallbackERKN2v89ArgumentsE
- fun:_ZN2v88internalL19HandleApiCallHelperILb0EEEPNS0_11MaybeObjectENS0_12_GLOBAL__N_116BuiltinArgumentsILNS0_21BuiltinExtraArgumentsE1EEEPNS0_7IsolateE
- fun:_ZN2v88internalL21Builtin_HandleApiCallENS0_12_GLOBAL__N_116BuiltinArgumentsILNS0_21BuiltinExtraArgumentsE1EEEPNS0_7IsolateE
-}
-{
- bug_122429
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN6webkit3gpu18GLInProcessContext22CreateOffscreenContextEPS1_RKN3gfx4SizeES2_PKcPKiNS3_13GpuPreferenceE
- fun:_ZN6webkit3gpu46WebGraphicsContext3DInProcessCommandBufferImpl10InitializeEN5blink20WebGraphicsContext3D10AttributesEPS3_
- fun:_ZN25TestWebKitPlatformSupport32createOffscreenGraphicsContext3DERKN5blink20WebGraphicsContext3D10AttributesE
- fun:_ZN13TestWebPlugin10initializeEPN5blink18WebPluginContainerE
- fun:_ZN5blink21FrameLoaderClientImpl12createPluginERKN7WebCore7IntSizeEPNS1_17HTMLPlugInElementERKNS1_4KURLERKN3WTF6VectorINSA_6StringELm0EEESF_RKSC_b
-}
-{
- bug_122431
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN11WebViewHost12createPluginEPN5blink8WebFrameERKNS0_15WebPluginParamsE
- fun:_ZN5blink21FrameLoaderClientImpl12createPluginERKN7WebCore7IntSizeEPNS1_17HTMLPlugInElementERKNS1_4KURLERKN3WTF6VectorINSA_6StringELm0EEESF_RKSC_b
- fun:_ZN7WebCore14SubframeLoader10loadPluginEPNS_22HTMLPlugInImageElementERKNS_4KURLERKN3WTF6StringERKNS6_6VectorIS7_Lm0EEESD_b
- fun:_ZN7WebCore14SubframeLoader13requestPluginEPNS_22HTMLPlugInImageElementERKNS_4KURLERKN3WTF6StringERKNS6_6VectorIS7_Lm0EEESD_b
- fun:_ZN7WebCore14SubframeLoader13requestObjectEPNS_22HTMLPlugInImageElementERKN3WTF6StringERKNS3_12AtomicStringES6_RKNS3_6VectorIS4_Lm0EEESD_
- fun:_ZN7WebCore16HTMLEmbedElement12updateWidgetENS_20PluginCreationOptionE
-}
-{
- bug_122435a
- Memcheck:Leak
- fun:_Zna*
- fun:_ZN3gpu5gles219VertexAttribManager10InitializeEj
- fun:_ZN3gpu5gles216GLES2DecoderImpl10InitializeERK13scoped_refptrIN3gfx9GLSurfaceEERKS2_INS3_9GLContext*SizeERKNS0_18DisallowedFeaturesEPKcRKSt6vectorIiSaIiEE
- fun:_ZN6webkit3gpu18GLInProcessContext10InitializeERKN3gfx4SizeEPS1_PKcPKiNS2_13GpuPreferenceE
- fun:_ZN6webkit3gpu18GLInProcessContext22CreateOffscreenContextEPS1_RKN3gfx4SizeES2_PKcPKiNS3_13GpuPreferenceE
- fun:_ZN6webkit3gpu46WebGraphicsContext3DInProcessCommandBufferImpl10InitializeEN5blink20WebGraphicsContext3D10AttributesEPS3_
-}
-{
- bug_122435b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorISt10_List_nodeIPN3gpu5gles219VertexAttribManager16VertexAttribInfoEEE8allocateEmPKv
- fun:_ZNSt10_List_baseIPN3gpu5gles219VertexAttribManager16VertexAttribInfoESaIS4_EE11_M_get_nodeEv
- fun:_ZNSt4listIPN3gpu5gles219VertexAttribManager16VertexAttribInfoESaIS4_EE14_M_create_nodeERKS4_
- fun:_ZNSt4listIPN3gpu5gles219VertexAttribManager16VertexAttribInfoESaIS4_EE6insertESt14_List_iteratorIS4_ERKS4_
- fun:_ZN3gpu5gles219VertexAttribManager16VertexAttribInfo7SetListEPSt4listIPS2_SaIS4_EE
- fun:_ZN3gpu5gles219VertexAttribManager6EnableEjb
-}
-{
- bug_122436
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKj10linked_ptrIN3gpu13CommonDecoder6BucketEEEEE8allocateEmPKv
- fun:_ZNSt8_Rb_treeIjSt4pairIKj10linked_ptrIN3gpu13CommonDecoder6BucketEEESt10_Select1stIS7_ESt4lessIjESaIS7_EE11_M_get_nodeEv
- fun:_ZNSt8_Rb_treeIjSt4pairIKj10linked_ptrIN3gpu13CommonDecoder6BucketEEESt10_Select1stIS7_ESt4lessIjESaIS7_EE14_M_create_nodeERKS7_
- fun:_ZNSt8_Rb_treeIjSt4pairIKj10linked_ptrIN3gpu13CommonDecoder6BucketEEESt10_Select1stIS7_ESt4lessIjESaIS7_EE10_M_insert_EPKSt18_Rb_tree_node_baseSG_RKS7_
- fun:_ZNSt8_Rb_treeIjSt4pairIKj10linked_ptrIN3gpu13CommonDecoder6BucketEEESt10_Select1stIS7_ESt4lessIjESaIS7_EE16_M_insert_uniqueERKS7_
- fun:_ZNSt8_Rb_treeIjSt4pairIKj10linked_ptrIN3gpu13CommonDecoder6BucketEEESt10_Select1stIS7_ESt4lessIjESaIS7_EE17_M_insert_unique_ESt23_Rb_tree_const_iteratorIS7_ERKS7_
- fun:_ZNSt3mapIj10linked_ptrIN3gpu13CommonDecoder6BucketEESt4lessIjESaISt4pairIKjS4_EEE6insertESt17_Rb_tree_iteratorIS9_ERKS9_
- fun:_ZNSt3mapIj10linked_ptrIN3gpu13CommonDecoder6BucketEESt4lessIjESaISt4pairIKjS4_EEEixERS8_
- fun:_ZN3gpu13CommonDecoder12CreateBucketEj
-}
-{
- bug_122437
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN3gpu19MappedMemoryManager5Alloc*
- fun:_ZN3gpu5gles219GLES2Implementation24MapTexSubImage2DCHROMIUM*
- fun:_ZN6webkit3gpu46WebGraphicsContext3DInProcessCommandBufferImpl24mapTexSubImage2DCHROMIUM*
- fun:_ZN7WebCore24GraphicsContext3DPrivate24mapTexSubImage2DCHROMIUM*
- fun:_ZN7WebCore20Extensions3DChromium24mapTexSubImage2DCHROMIUM*
- fun:_ZN7WebCore20LayerTextureSubImage24uploadWithMapTexSubImageEPKhRKNS_7IntRectES5_S5_jPNS_17GraphicsContext3DE
- fun:_ZN7WebCore20LayerTextureSubImage6uploadEPKhRKNS_7IntRectES5_S5_jPNS_17GraphicsContext3DE
- fun:_ZN7WebCore31BitmapCanvasLayerTextureUpdater17updateTextureRectEPNS_17GraphicsContext3DEPNS_16TextureAllocatorEPNS_14ManagedTextureERKNS_7IntRectES9_
- fun:_ZN7WebCore31BitmapCanvasLayerTextureUpdater7Texture10updateRectEPNS_17GraphicsContext3DEPNS_16TextureAllocatorERKNS_7IntRectES8_
-}
-{
- bug_122454
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN11GrGLTexture4initEP7GrGpuGLRKNS_4DescEPKN16GrGLRenderTarget4DescE
- fun:_ZN11GrGLTextureC1EP7GrGpuGLRKNS_4DescE
- fun:_ZN7GrGpuGL15onCreateTextureERK13GrTextureDescPKvm
- fun:_ZN5GrGpu13createTextureERK13GrTextureDescPKvm
- fun:_ZN9GrContext20createAndLockTextureEmPK14GrSamplerStateRK13GrTextureDescPvm
- fun:_Z27sk_gr_create_bitmap_textureP9GrContextmPK14GrSamplerStateRK8SkBitmap
- fun:_ZN11SkGpuDevice17lockCachedTextureERK8SkBitmapPK14GrSamplerState
-}
-{
- bug_122455
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE8allocateEmPKv
- fun:_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11_M_get_nodeEv
- fun:_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE14_M_create_nodeERKSs
- fun:_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE10_M_insert_EPKSt18_Rb_tree_node_baseS8_RKSs
- fun:_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE16_M_insert_uniqueERKSs
- fun:_ZNSt3setISsSt4lessISsESaISsEE6insertERKSs
- fun:_ZN3gpu5gles219GLES2Implementation32GetRequestableExtensionsCHROMIUMEv
- fun:_ZN6webkit3gpu46WebGraphicsContext3DInProcessCommandBufferImpl32getRequestableExtensionsCHROMIUMEv
- fun:_ZN7WebCore24GraphicsContext3DPrivate20initializeExtensionsEv
- fun:_ZN7WebCore24GraphicsContext3DPrivate17supportsExtensionERKN3WTF6StringE
-}
-{
- bug_122457
- Memcheck:Leak
- fun:malloc
- fun:_ZN3WTF10fastMallocEm
- fun:_ZN3WTF10RefCountedIN7WebCore7ArchiveEEnwEm
- fun:_ZN7WebCore12MHTMLArchive6createEv
- ...
- fun:_ZN7WebCore11MHTMLParser22parseArchiveWithHeaderEPNS_10MIMEHeaderE
- fun:_ZN7WebCore11MHTMLParser12parseArchiveEv
- fun:_ZN7WebCore12MHTMLArchive6createERKNS_4KURLEPNS_12SharedBufferE
- fun:_ZN7WebCoreL20archiveFactoryCreateINS_12MHTMLArchiveEEEN3WTF10PassRefPtrINS_7ArchiveEEERKNS_4KURLEPNS_12SharedBufferE
- fun:_ZN7WebCore14ArchiveFactory6createERKNS_4KURLEPNS_12SharedBufferERKN3WTF6StringE
- ...
- fun:_ZN7WebCore14DocumentLoader15finishedLoadingEv
- fun:_ZN7WebCore18MainResourceLoader16didFinishLoadingEd
-}
-{
- bug_122670
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN3WTF11ListHashSetIPN7WebCore12RenderInlineELm256ENS_7PtrHashIS3_EEEC1Ev
- fun:_ZNK7WebCore17RenderLineBoxList5paintEPNS_20RenderBoxModelObjectERNS_9PaintInfoERKNS*
- fun:_ZN7WebCore11RenderBlock13paintContentsERNS_9PaintInfoERKNS*
- fun:_ZN7WebCore11RenderBlock11paintObjectERNS_9PaintInfoERKNS*
- fun:_ZN7WebCore11RenderBlock5paintERNS_9PaintInfoERKNS*
-}
-{
- bug_122716
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorISsE8allocate*
- fun:_ZNSt12_Vector_baseISsSaISsEE11_M_allocate*
- fun:_ZNSt6vectorISsSaISsEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSsS1_EERKSs
- fun:_ZNSt6vectorISsSaISsEE9push_backERKSs
- fun:_ZN4baseL12SplitStringTISsEEvRKT_NS1_10value_typeEbPSt6vectorIS1_SaIS1_EE
-}
-{
- bug_122717_use_after_free
- Memcheck:Unaddressable
- fun:__pthread_mutex_unlock_usercnt
- fun:_ZN4base8internal8LockImpl6UnlockEv
- fun:_ZN4base4Lock7ReleaseEv
- fun:_ZN4base8AutoLockD1Ev
- fun:_ZN5gdata15GDataFileSystem21RunTaskOnIOThreadPoolERKN4base8CallbackIFvvEEE
-}
-{
- bug_122717_leak
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base8internal20PostTaskAndReplyImpl16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEESA_
- fun:_ZN4base10TaskRunner16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEES9_
- fun:_ZN7content13BrowserThread16PostTaskAndReplyENS0_2IDERKN15tracked_objects8LocationERKN4base8CallbackIFvvEEESB_
- fun:_ZN5gdata15GDataFileSystem37PostBlockingPoolSequencedTaskAndReplyERKSsRKN15tracked_objects8LocationERKN4base8CallbackIFvvEEESC_
- fun:_ZN5gdata15GDataFileSystem29PostBlockingPoolSequencedTaskERKSsRKN15tracked_objects8LocationERKN4base8CallbackIFvvEEE
- fun:_ZN5gdata15GDataFileSystem8SaveFeedE10scoped_ptrIN4base5ValueEE*
- fun:_ZN5gdata15GDataFileSystem14OnGetDocumentsEPNS0_18GetDocumentsParamsENS_14GDataErrorCodeE10scoped_ptrIN4base5ValueEE
-}
-{
- bug_122752a
- Memcheck:Unaddressable
- fun:_ZN5blink12CCThreadImpl8postTaskEN3WTF10PassOwnPtrIN7WebCore8CCThread4TaskEEE
- fun:_ZN7WebCore13CCThreadProxy18finishAllRenderingEv
- fun:_ZN7WebCore15CCLayerTreeHost18finishAllRenderingEv
- fun:_ZN5blink16WebLayerTreeView18finishAllRenderingEv
- fun:_ZN5blink11WebViewImpl33setIsAcceleratedCompositingActiveEb
- fun:_ZN5blink11WebViewImpl20setRootGraphicsLayerEPN7WebCore13GraphicsLayerE
-}
-{
- bug_122752b
- Memcheck:Unaddressable
- fun:_ZN5blink12CCThreadImpl8postTaskEN3WTF10PassOwnPtrIN7WebCore8CCThread4TaskEEE
- fun:_ZN7WebCore13CCThreadProxy14setNeedsCommitEv
- fun:_ZN7WebCore15CCLayerTreeHost14setNeedsCommitEv
- fun:_ZN7WebCore13LayerChromium14setNeedsCommitEv
- fun:_ZN7WebCore13LayerChromium11removeChildEPS0_
- fun:_ZN7WebCore13LayerChromium16removeFromParentEv
- fun:_ZN7WebCore21GraphicsLayerChromium16removeFromParentEv
-}
-{
- bug_123307
- Memcheck:Leak
- fun:malloc
- fun:_ZN3WTF10fastMallocEm
- fun:_ZN3WTF16fastZeroedMallocEm
- ...
- fun:_ZN7WebCore12_GLOBAL__N_111V8ObjectMapIN2v86ObjectEjE3setERKNS2_6HandleIS3_EERKj
- fun:_ZN7WebCore12_GLOBAL__N_110Serializer10greyObjectERKN2v86HandleINS2_6ObjectEEE
- fun:_ZN7WebCore12_GLOBAL__N_110Serializer11doSerializeEN2v86HandleINS2_5ValueEEEPNS1_9StateBaseE
- fun:_ZN7WebCore12_GLOBAL__N_110Serializer9serializeEN2v86HandleINS2_5ValueEEE
- fun:_ZN7WebCore21SerializedScriptValueC1EN2v86HandleINS1_5ValueEEEPN3WTF6VectorINS5_6RefPtrINS_11MessagePortEEELm1EEEPNS6_INS7_INS5_11ArrayBufferEEELm1EEERb
- fun:_ZN7WebCore21SerializedScriptValue6createEN2v86HandleINS1_5ValueEEEPN3WTF6VectorINS5_6RefPtrINS_11MessagePortEEELm1EEEPNS6_INS7_INS5_11ArrayBufferEEELm1EEERb
- fun:_ZN7WebCoreL25handlePostMessageCallbackERKN2v89ArgumentsEb
- fun:_ZN7WebCore11V8DOMWindow19postMessageCallbackERKN2v89ArgumentsE
- fun:_ZN2v88internalL19HandleApiCallHelperILb0EEEPNS0_11MaybeObjectENS0_12_GLOBAL__N_116BuiltinArgumentsILNS0_21BuiltinExtraArgumentsE1EEEPNS0_7IsolateE
- fun:_ZN2v88internalL21Builtin_HandleApiCallENS0_12_GLOBAL__N_116BuiltinArgumentsILNS0_21BuiltinExtraArgumentsE1EEEPNS0_7IsolateE
-}
-{
- bug_124156
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:*WebKitPlatformSupport*20CreateResourceLoaderERKN11webkit_glue20ResourceLoaderBridge11RequestInfoE
- fun:_ZN11webkit_glue16WebURLLoaderImpl7Context5StartERKN5blink13WebURLRequestEPNS_20ResourceLoaderBridge16SyncLoadResponseEPNS_25WebKitPlatformSupportImplE
- fun:_ZN11webkit_glue16WebURLLoaderImpl18loadAsynchronouslyERKN5blink13WebURLRequestEPNS1_18WebURLLoaderClientE
-}
-{
- bug_124488
- Memcheck:Leak
- fun:malloc
- fun:strdup
- ...
- fun:_ZN34CopyTextureCHROMIUMResourceManager10InitializeEv
- fun:_ZN3gpu5gles216GLES2DecoderImpl10InitializeERK13scoped_refptrIN3gfx9GLSurfaceEERKS2_INS3_9GLContextEERKNS3_4SizeERKNS0_18DisallowedFeaturesEPKcRKSt6vectorIiSaIiEE
- fun:_ZN6webkit3gpu18GLInProcessContext10InitializeERKN3gfx4SizeEPS1_PKcPKiNS2_13GpuPreferenceE
- fun:_ZN6webkit3gpu18GLInProcessContext22CreateOffscreenContextEPS1_RKN3gfx4SizeES2_PKcPKiNS3_13GpuPreferenceE
- fun:_ZN6webkit3gpu46WebGraphicsContext3DInProcessCommandBufferImpl10InitializeEN5blink20WebGraphicsContext3D10AttributesEPS3_
-}
-{
- bug_124496
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN8notifier26ProxyResolvingClientSocket23ProcessProxyResolveDoneEi
-}
-{
- bug_124500
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorIN6webkit17WebPluginMimeTypeEE8allocateEmPKv
- fun:_ZNSt12_Vector_baseIN6webkit17WebPluginMimeTypeESaIS1_EE11_M_allocateEm
- fun:_ZNSt6vectorIN6webkit17WebPluginMimeTypeESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_
- fun:_ZNSt6vectorIN6webkit17WebPluginMimeTypeESaIS1_EE9push_backERKS1_
- fun:_ZN6webkit5npapi9PluginLib20ParseMIMEDescriptionERKSsPSt6vectorINS_17WebPluginMimeTypeESaIS5_EE
- fun:_ZN6webkit5npapi9PluginLib17ReadWebPluginInfoE*
- fun:_ZN6webkit5npapi10PluginList14ReadPluginInfoE*
- fun:_ZN6webkit5npapi10PluginList10LoadPluginE*
- fun:_ZN17UtilityThreadImpl13OnLoadPluginsE*
-}
-{
- bug_127716
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN3gfx5ImageC1ERK8SkBitmap
- fun:_ZN16BrowserThemePack16LoadRawBitmapsToE*
- fun:_ZN16BrowserThemePack18BuildFromExtensionEPK9Extension
- fun:_ZN45BrowserThemePackTest_CanBuildAndReadPack_Test8TestBodyEv
-}
-{
- bug_130362
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN12invalidation20NewPermanentCallbackINS_22InvalidationClientImplES1_St4pairINS_6StatusESsEEEPN4base8CallbackIFvT1_EEEPT_MT0_FvS7_E
- fun:_ZN12invalidation22InvalidationClientImpl34ScheduleStartAfterReadingStateBlobEv
- fun:_ZN12invalidation22InvalidationClientImpl5StartEv
- fun:_ZN6syncer24SyncInvalidationListener5StartERKSsS2_S2_RKSt3mapIN8syncable9ModelTypeElSt4lessIS5_ESaISt4pairIKS5_lEEERKN12browser_sync10WeakHandleINS_24InvalidationStateTrackerEEEPNS0_8ListenerEPNS_11StateWriterE
- fun:_ZN6syncer20InvalidationNotifier17UpdateCredentialsERKSsS2_
- fun:_ZN6syncer31NonBlockingInvalidationNotifier4Core17UpdateCredentialsERKSsS3_
-}
-{
- bug_130449
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN12invalidation20NewPermanentCallbackINS_22InvalidationClientImplES1_St4pairINS_6StatusESsEEEPN4base8CallbackIFvT1_EEEPT_MT0_FvS7_E
- fun:_ZN12invalidation22InvalidationClientImpl34ScheduleStartAfterReadingStateBlobEv
- fun:_ZN12invalidation22InvalidationClientImpl5StartEv
- fun:_ZN6syncer24SyncInvalidationListener5StartERKSsS2_S2_RKSt3mapIN8syncable9ModelTypeElSt4lessIS5_ESaISt4pairIKS5_lEEERKN12browser_sync10WeakHandleINS_24InvalidationStateTrackerEEEPNS0_8ListenerE
- fun:_ZN6syncer20InvalidationNotifier17UpdateCredentialsERKSsS2_
- fun:_ZN6syncer31NonBlockingInvalidationNotifier4Core17UpdateCredentialsERKSsS3_
-}
-{
- bug_130619
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore9ClipRects6createERKS0_
- fun:_ZN7WebCore11RenderLayer15updateClipRectsEPKS0_PNS_12RenderRegionENS_13ClipRectsTypeENS_29OverlayScrollbarSizeRelevancyE
- ...
- fun:_ZNK7WebCore11RenderLayer15parentClipRectsEPKS0_PNS_12RenderRegionENS_13ClipRectsTypeERNS_9ClipRectsENS_29OverlayScrollbarSizeRelevancyE
- fun:_ZNK7WebCore11RenderLayer18backgroundClipRectEPKS0_PNS_12RenderRegionENS_13ClipRectsTypeENS_29OverlayScrollbarSizeRelevancyE
-}
-{
- bug_138058
- Memcheck:Uninitialized
- ...
- fun:_ZN7WebCore12WebVTTParser22constructTreeFromTokenEPNS_8DocumentE
- fun:_ZN7WebCore12WebVTTParser33createDocumentFragmentFromCueTextERKN3WTF6StringE
- fun:_ZN7WebCore12TextTrackCue12getCueAsHTMLEv
- fun:_ZN7WebCore12TextTrackCue17updateDisplayTreeEf
- fun:_ZN7WebCore16HTMLMediaElement25updateActiveTextTrackCuesEf
-}
-{
- bug_138060
- Memcheck:Uninitialized
- fun:_NPN_EvaluateHelper
- fun:_NPN_Evaluate
- fun:_ZN5blink11WebBindings8evaluateEP4_NPPP8NPObjectP9_NPStringP10_NPVariant
- fun:_ZL13executeScriptPK12PluginObjectPKc
- fun:NPP_Destroy
- fun:_ZN6webkit5npapi14PluginInstance11NPP_DestroyEv
- fun:_ZN6webkit5npapi21WebPluginDelegateImpl15DestroyInstanceEv
- fun:_ZN6webkit5npapi21WebPluginDelegateImplD0Ev
- fun:_ZN6webkit5npapi21WebPluginDelegateImpl15PluginDestroyedEv
- fun:_ZN6webkit5npapi13WebPluginImpl22TearDownPluginInstanceEPN5blink12WebURLLoaderE
- fun:_ZN6webkit5npapi13WebPluginImpl12SetContainerEPN5blink18WebPluginContainerE
- fun:_ZN6webkit5npapi13WebPluginImpl7destroyEv
- fun:_ZN5blink22WebPluginContainerImplD0Ev
- fun:_ZN3WTF10RefCountedIN7WebCore6WidgetEE5derefEv
- fun:_ZNSt4pairIN3WTF6RefPtrIN7WebCore6WidgetEEEPNS2_9FrameViewEED1Ev
- fun:_ZN3WTF9HashTableINS_6RefPtrIN7WebCore6WidgetEEESt4pairIS4_PNS2_9FrameViewEENS_18PairFirstExtractorIS8_EENS_7PtrHashIS4_EENS_14PairHashTraitsINS_10HashTraitsIS4_EENSE_IS7_EEEESF_E15deallocateTableEPS8_i
- fun:_ZN3WTF9HashTableINS_6RefPtrIN7WebCore6WidgetEEESt4pairIS4_PNS2_9FrameViewEENS_18PairFirstExtractorIS8_EENS_7PtrHashIS4_EENS_14PairHashTraitsINS_10HashTraitsIS4_EENSE_IS7_EEEESF_ED1Ev
- fun:_ZN3WTF7HashMapINS_6RefPtrIN7WebCore6WidgetEEEPNS2_9FrameViewENS_7PtrHashIS4_EENS_10HashTraitsIS4_EENS9_IS6_EEED1Ev
- fun:_ZN7WebCore12RenderWidget28resumeWidgetHierarchyUpdatesEv
- fun:_ZN7WebCore7Element6detachEv
- fun:_ZN7WebCore13ContainerNode14detachChildrenEv
- fun:_ZN7WebCore13ContainerNode6detachEv
-}
-{
- bug_138220_a
- Memcheck:Uninitialized
- fun:_ZNK7WebCore16HTMLInputElement8dataListEv
- fun:_ZNK7WebCore16HTMLInputElement4listEv
- fun:_ZN7WebCore21RenderSliderContainer6layoutEv
- fun:_ZN7WebCore11RenderBlock16layoutBlockChildEPNS_9RenderBoxERNS0_10MarginInfoERNS_20FractionalLayoutUnitES6_
- fun:_ZN7WebCore11RenderBlock19layoutBlockChildrenEbRNS_20FractionalLayoutUnitE
- fun:_ZN7WebCore11RenderBlock11layoutBlockEbNS_20FractionalLayoutUnitE
- fun:_ZN7WebCore11RenderBlock6layoutEv
- fun:_ZN7WebCore12RenderSlider6layoutEv
-}
-{
- bug_138220_b
- Memcheck:Uninitialized
- fun:_ZNK7WebCore16HTMLInputElement8dataListEv
- fun:_ZNK7WebCore16HTMLInputElement4listEv
- fun:_ZN7WebCore11RenderTheme16paintSliderTicksEPNS_12RenderObjectERKNS_9PaintInfoERKNS_7IntRectE
- fun:_ZN7WebCore24RenderThemeChromiumLinux16paintSliderTrackEPNS_12RenderObjectERKNS_9PaintInfoERKNS_7IntRectE
- fun:_ZN7WebCore11RenderTheme5paintEPNS_12RenderObjectERKNS_9PaintInfoERKNS_7IntRectE
- fun:_ZN7WebCore9RenderBox19paintBoxDecorationsERNS_9PaintInfoERKNS_21FractionalLayoutPointE
- fun:_ZN7WebCore11RenderBlock11paintObjectERNS_9PaintInfoERKNS_21FractionalLayoutPointE
-}
-{
- bug_138233_a
- Memcheck:Leak
- fun:malloc
- fun:_ZN3WTF10fastMallocEm
- fun:_ZN3WTF10RefCountedIN7WebCore17ScriptProfileNodeEEnwEm
- fun:_ZN7WebCore17ScriptProfileNode6createEPKN2v814CpuProfileNodeE
- fun:_ZNK7WebCore13ScriptProfile4headEv
- fun:_ZN7WebCore23ScriptProfileV8InternalL14headAttrGetterEN2v85LocalINS1_6StringEEERKNS1_12AccessorInfoE
- fun:_ZN2v88internal8JSObject23GetPropertyWithCallbackEPNS0_6ObjectES3_PNS0_6StringE
- fun:_ZN2v88internal6Object11GetPropertyEPS1_PNS0_12LookupResultEPNS0_6StringEP18PropertyAttributes
- fun:_ZN2v88internal6LoadIC4LoadENS0_16InlineCacheStateENS0_6HandleINS0_6ObjectEEENS3_INS0_6StringEEE
- fun:_ZN2v88internal11LoadIC_MissENS0_9ArgumentsEPNS0_7IsolateE
-}
-{
- bug_138233_b
- Memcheck:Leak
- fun:malloc
- fun:_ZN3WTF10fastMallocEm
- fun:_ZN3WTF10RefCountedIN7WebCore17ScriptProfileNodeEEnwEm
- fun:_ZN7WebCore17ScriptProfileNode6createEPKN2v814CpuProfileNodeE
- fun:_ZNK7WebCore17ScriptProfileNode8childrenEv
- fun:_ZN7WebCore27ScriptProfileNodeV8InternalL16childrenCallbackERKN2v89ArgumentsE
-}
-{
- bug_138522
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore23v8StringToWebCoreStringIN3WTF12AtomicStringEEET_N2v86HandleINS4_6StringEEENS_12ExternalModeE
- fun:_ZN*WebCore*V8StringResourceILNS_20V8StringResourceMode*
- ...
- fun:_ZN7WebCore21EventTargetV8InternalL22addEventListenerMethodERKN2v820FunctionCallbackInfoINS1_5ValueEEE
-}
-{
- bug_138712
- Memcheck:Uninitialized
- fun:_ZN7testing8internal11CmpHelperGEIddEENS_15AssertionResultEPKcS4_RKT_RKT0_
- fun:_ZN3gfx30JPEGCodec_EncodeDecodeRGB_Test8TestBodyEv
-}
-{
- bug_16089 WorkerPool threads and its tasks can leak by design
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base22PosixDynamicThreadPool7AddTaskEPNS_11PendingTaskE
- fun:_ZN4base22PosixDynamicThreadPool8PostTask*
-}
-{
- bug_139467
- Memcheck:Uninitialized
- fun:_ZNK7WebCore18AccessibilityTable9roleValueEv
- fun:_ZNK7WebCore25AccessibilityRenderObject20ariaLiveRegionStatusEv
- fun:_ZNK7WebCore19AccessibilityObject22supportsARIALiveRegionEv
- fun:_ZNK7WebCore19AccessibilityObject22supportsARIAAttributesEv
- fun:_ZN7WebCore25AccessibilityRenderObject26determineAccessibilityRoleEv
- fun:_ZN7WebCore23AccessibilityNodeObject4initEv
- fun:_ZN7WebCore25AccessibilityRenderObject4initEv
- fun:_ZN7WebCore18AccessibilityTable4initEv
-}
-{
- bug_139470
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore22ThreadableBlobRegistry17unregisterBlobURLERKNS_4KURLE
- ...
- fun:_ZN7WebCore15WrapperTypeInfo11derefObjectEPv
- fun:_ZN7WebCore7DOMData11derefObjectEPNS_15WrapperTypeInfoEPv
- fun:_ZN7WebCore7DOMData23WrapperMapObjectRemoverIvE15visitDOMWrapperEPNS_12DOMDataStoreEPvN2v810PersistentINS6_6ObjectEEE
- fun:_ZN7WebCore16WeakReferenceMapIvN2v86ObjectEE5visitEPNS_12DOMDataStoreEPNS_24AbstractWeakReferenceMapIvS2_E7VisitorE
- fun:_ZN7WebCore7DOMData27removeObjectsFromWrapperMapIvEEvPNS_12DOMDataStoreERNS_24AbstractWeakReferenceMapIT_N2v86ObjectEEE
- fun:_ZN7WebCore19removeAllDOMObjectsEv
- fun:_ZN7WebCore22WorkerScriptControllerD1Ev
- fun:_ZN3WTF14deleteOwnedPtrIN7WebCore22WorkerScriptControllerEEEvPT_
- fun:_ZN3WTF6OwnPtrIN7WebCore22WorkerScriptControllerEE5clearEv
- fun:_ZN7WebCore13WorkerContext11clearScriptEv
- fun:_ZN7WebCore30WorkerThreadShutdownFinishTask11performTaskEPNS_22ScriptExecutionContextE
- fun:_ZN7WebCore13WorkerRunLoop4Task11performTaskERKS0_PNS_22ScriptExecutionContextE
- fun:_ZN7WebCore13WorkerRunLoop9runInModeEPNS_13WorkerContextERKNS_13ModePredicateENS0_8WaitModeE
- fun:_ZN7WebCore13WorkerRunLoop3runEPNS_13WorkerContextE
- fun:_ZN7WebCore12WorkerThread12runEventLoopEv
- fun:_ZN7WebCore21DedicatedWorkerThread12runEventLoopEv
-}
-{
- bug_139853
- Memcheck:Unaddressable
- fun:_ZN11SkGpuDeviceC1EP9GrContextP9GrTexture
- fun:_ZN7WebCoreL23createAcceleratedCanvas*
- fun:_ZN7WebCore45FrameBufferSkPictureCanvasLayerTextureUpdater17*
- fun:_ZN7WebCore45FrameBufferSkPictureCanvasLayerTextureUpdater7Texture10updateRectEPNS_18CCResourceProviderERKNS_7IntRectES6_
- fun:_ZN7WebCore12_GLOBAL__N_126UnthrottledTextureUploader13uploadTextureEPNS_19LayerTextureUpdater7TextureEPNS_18CCResourceProviderENS_7IntRectES7_
- fun:_ZN7WebCore16CCTextureUpdater6updateEPNS_18CCResourceProviderEPNS_13TextureCopierEPNS_15TextureUploaderEm
- fun:_ZN7WebCore19CCSingleThreadProxy8doCommitERNS_16CCTextureUpdaterE
- fun:_ZN7WebCore19CCSingleThreadProxy18commitAndCompositeEv
- fun:_ZN7WebCore19CCSingleThreadProxy20compositeAndReadbackEPvRKNS_7IntRectE
- fun:_ZN7WebCore15CCLayerTreeHost20compositeAndReadbackEPvRKNS_7IntRectE
- fun:_ZN5blink16WebLayerTreeView20compositeAndReadbackEPvRKNS_7WebRectE
- fun:_ZN5blink11WebViewImpl23doPixelReadbackToCanvasEP8SkCanvasRKN7WebCore7IntRectE
- fun:_ZN5blink11WebViewImpl5paintEP8SkCanvasRKNS_7WebRectE
- fun:_ZN11WebViewHost9paintRectERKN5blink7WebRectE
- fun:_ZN11WebViewHost22paintInvalidatedRegionEv
-}
-{
- bug_139996
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore23v8StringToWebCoreStringIN3WTF6StringEEET_N2v86HandleINS4_6StringEEENS_12ExternalModeE
- fun:_ZN7WebCore15toWebCoreStringEN2v86HandleINS0_5ValueEEE
- fun:_ZN7WebCore6V8Blob19constructorCallbackERKN2v89ArgumentsE
- fun:_ZN2v88internalL19HandleApiCallHelperILb1EEEPNS0_11MaybeObjectENS0_12_GLOBAL__N_116BuiltinArgumentsILNS0_21BuiltinExtraArgumentsE1EEEPNS0_7IsolateE
- fun:_ZN2v88internalL30Builtin_HandleApiCallConstructENS0_12_GLOBAL__N_116BuiltinArgumentsILNS0_21BuiltinExtraArgumentsE1EEEPNS0_7IsolateE
-}
-{
- bug_139998
- Memcheck:Leak
- fun:*alloc
- ...
- fun:_ZL23link_intrastage_shadersP14__GLcontextRecP17gl_shader_programPP9gl_shaderj
- fun:_Z12link_shadersP14__GLcontextRecP17gl_shader_program
- fun:_mesa_glsl_link_shader
- fun:link_program
- fun:_mesa_LinkProgramARB
- fun:glLinkProgram
- ...
- fun:_ZN3gpu5gles216GLES2DecoderImpl13DoLinkProgramEj
- fun:_ZN3gpu5gles216GLES2DecoderImpl17HandleLinkProgram*
- fun:_ZN3gpu5gles216GLES2DecoderImpl9DoCommandEjjPKv
- fun:_ZN3gpu13CommandParser14ProcessCommandEv
- fun:_ZN3gpu12GpuScheduler10PutChangedEv
- fun:_ZN6webkit3gpu18GLInProcessContext12PumpCommandsEv
-}
-{
- bug_140196
- Memcheck:Uninitialized
- fun:_ZNK12SkDescriptor6equalsERKS_
- fun:_ZN12SkGlyphCache10VisitCacheEPK12SkDescriptorPFbPKS_PvES5_
- ...
- fun:_ZNK7SkPaint14descriptorProcEPK8SkMatrixPFvPK12SkDescriptorPvES6_b
-}
-{
- bug_143545
- Memcheck:Uninitialized
- fun:_ZN4aura10RootWindow10ShowCursorEb
- fun:_ZN3ash5Shell10ShowCursorEb
- fun:_ZN3ash13CursorManager10ShowCursorEb
- fun:_ZN3ash4test11AshTestBase5SetUpEv
-}
-{
- bug_144118
- Memcheck:Unaddressable
- fun:NPP_SetWindow
- fun:_ZN6webkit5npapi14PluginInstance13NPP_SetWindowEP9_NPWindow
- fun:_ZN6webkit5npapi21WebPluginDelegateImpl17WindowedSetWindowEv
- fun:_ZN6webkit5npapi21WebPluginDelegateImpl22WindowedUpdateGeometryERKN3gfx4RectES5_
- fun:_ZN6webkit5npapi21WebPluginDelegateImpl14UpdateGeometryERKN3gfx4RectES5_
- fun:_ZN6webkit5npapi13WebPluginImpl14updateGeometryERKN5blink7WebRectES5_RKNS2_9WebVectorIS3_EEb
- fun:_ZN5blink22WebPluginContainerImpl14reportGeometryEv
- fun:_ZN5blink22WebPluginContainerImpl12setFrameRectERKN7WebCore7IntRectE
- ...
- fun:_ZN9TestShell4dumpEv
-}
-{
- bug_144118_b
- Memcheck:Unaddressable
- fun:_ZNK3WTF6OwnPtrIN5blink14ScrollbarGroupEEcvMS3_PS2_Ev
- fun:_ZN5blink22WebPluginContainerImpl14reportGeometryEv
- fun:_ZN5blink22WebPluginContainerImpl12setFrameRectERKN7WebCore7IntRectE
- ...
- fun:_ZN9TestShell4dumpEv
-}
-{
- bug_144913
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN8chromeos30BluetoothAdapterClientStubImplC1Ev
- fun:_ZN8chromeos22BluetoothAdapterClient6CreateENS_28DBusClientImplementationTypeEPN4dbus3BusEPNS_22BluetoothManagerClientE
- fun:_ZN8chromeos21DBusThreadManagerImplC1ENS_28DBusClientImplementationTypeE
- fun:_ZN8chromeos17DBusThreadManager10InitializeEv
- fun:_ZN8chromeos23KioskModeIdleLogoutTest5SetUpEv
-}
-{
- bug_144913_b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN8chromeos17DBusThreadManager10InitializeEv
- fun:_ZN8chromeos23KioskModeIdleLogoutTest5SetUpEv
-}
-{
- bug_144913_c
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN8chromeos21DBusThreadManagerImplC1ENS_28DBusClientImplementationTypeE
- fun:_ZN8chromeos17DBusThreadManager10InitializeEv
- fun:_ZN8chromeos23KioskModeIdleLogoutTest5SetUpEv
-}
-{
- bug_144930
- Memcheck:Leak
- fun:_Znw*
- fun:_ZL20cachedPaintLuminancef
-}
-{
- bug_144930_b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZL21cachedDeviceLuminancef
-}
-{
- bug_145244
- Memcheck:Uninitialized
- fun:_ZN7WebCore15StyleRuleImport17requestStyleSheetEPNS_13CSSStyleSheetERKNS_16CSSParserContextE
- fun:_ZN7WebCore18StyleSheetContents26requestImportedStyleSheetsEPNS_13CSSStyleSheetE
-}
-{
- bug_145645
- Memcheck:Leak
- fun:malloc
- fun:_ZN3WTF10fastMallocEm
- fun:_ZN3WTF10RefCountedIN7WebCore18InjectedScriptHostEEnwEm
- fun:_ZN7WebCore18InjectedScriptHost6createEv
- fun:_ZN7WebCore21InjectedScriptManagerC1EPFbPNS_11ScriptStateEE
- fun:_ZN7WebCore21InjectedScriptManager15createForWorkerEv
- fun:_ZN7WebCore25WorkerInspectorControllerC1EPNS_13WorkerContextE
-}
-{
- bug_145650a
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN14WebDataService10AddKeywordERK15TemplateURLData
- fun:_ZN18TemplateURLService11AddNoNotifyEP11TemplateURLb
-}
-{
- bug_145650b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN14WebDataService13RemoveKeywordEl
- fun:_ZN18TemplateURLService14RemoveNoNotifyEP11TemplateURL
- fun:_ZN18TemplateURLService6RemoveEP11TemplateURL
- fun:_ZN9protector71DefaultSearchProviderChangeTest_CurrentSearchProviderRemovedByUser_Test19RunTestOnMainThreadEv
-}
-{
- bug_145650c
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN14WebDataService13UpdateKeywordERK15TemplateURLData
- fun:_ZN18TemplateURLService32SetDefaultSearchProviderNoNotifyEP11TemplateURL
-}
-{
- bug_125692a
- Memcheck:Uninitialized
- fun:_ZN2v88internal11StoreBuffer28IteratePointersInStoreBufferEPFvPPNS0_10HeapObjectES3_E
- fun:_ZN2v88internal11StoreBuffer25IteratePointersToNewSpaceEPFvPPNS0_10HeapObjectES3_E
- fun:_ZN2v88internal20MarkCompactCollector29EvacuateNewSpaceAndCandidatesEv
- fun:_ZN2v88internal20MarkCompactCollector11SweepSpacesEv
- fun:_ZN2v88internal20MarkCompactCollector14CollectGarbageEv
- fun:_ZN2v88internal4Heap11MarkCompactEPNS0_8GCTracerE
-}
-{
- bug_125692b
- Memcheck:Uninitialized
- fun:_ZN2v88internal11StoreBuffer7CompactEv
- fun:_ZN2v88internal11StoreBuffer19PrepareForIterationEv
- fun:_ZN2v88internal11StoreBuffer25IteratePointersToNewSpaceEPFvPPNS0_10HeapObjectES3_E
- fun:_ZN2v88internal20MarkCompactCollector29EvacuateNewSpaceAndCandidatesEv
- fun:_ZN2v88internal20MarkCompactCollector11SweepSpacesEv
- fun:_ZN2v88internal20MarkCompactCollector14CollectGarbageEv
- fun:_ZN2v88internal4Heap11MarkCompactEPNS0_8GCTracerE
- fun:_ZN2v88internal4Heap24PerformGarbageCollectionENS0_16GarbageCollectorEPNS0_8GCTracerE
- fun:_ZN2v88internal4Heap14CollectGarbageENS0_15AllocationSpaceENS0_16GarbageCollectorEPKcS5_
- fun:_ZN2v88internal4Heap14CollectGarbageENS0_15AllocationSpaceEPKc
- fun:_ZN2v88internal4Heap17CollectAllGarbageEiPKc
- fun:_ZN2v88internal4Heap16IdleNotificationEi
- fun:_ZN2v88internal2V816IdleNotificationEi
- fun:_ZN2v82V816IdleNotificationEi
- fun:_ZN16RenderThreadImpl11IdleHandlerEv
-}
-{
- bug_145693
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN10extensions18PermissionsUpdater17RecordOAuth2GrantEPKNS_9ExtensionE
- fun:_ZN10extensions18PermissionsUpdater22GrantActivePermissionsEPKNS_9ExtensionEb
- fun:_ZN10extensions12CrxInstaller25ReportSuccessFromUIThreadEv
-}
-{
- bug_145695
- Memcheck:Leak
- fun:malloc
- fun:NaClDescImcBoundDescAcceptConn
- fun:RevRpcHandlerBase
- fun:NaClThreadInterfaceStart
-}
-{
- bug_145696
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN10extensions9TabHelper23OnInlineWebstoreInstallEiiRKSsRK4GURL
-}
-{
- bug_145697
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN18SecurityFilterPeer40CreateSecurityFilterPeerForDeniedRequestEN12ResourceType4TypeEPN11webkit_glue20ResourceLoaderBridge4PeerEi
- fun:_ZN12_GLOBAL__N_124RendererResourceDelegate17OnRequestCompleteEPN11webkit_glue20ResourceLoaderBridge4PeerEN12ResourceType4TypeERKN3net16URLRequestStatusE
- fun:_ZN7content18ResourceDispatcher17OnRequestCompleteEiRKN3net16URLRequestStatusERKSsRKN4base9TimeTicksE
-}
-{
- bug_145699
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN17OAuth2ApiCallFlow24CreateAccessTokenFetcherEv
- fun:_ZN17OAuth2ApiCallFlow20BeginMintAccessTokenEv
- fun:_ZN17OAuth2ApiCallFlow12BeginApiCallEv
- fun:_ZN17OAuth2ApiCallFlow5StartEv
- fun:_ZN19OAuth2MintTokenFlow13FireAndForgetEv
-}
-{
- bug_145703
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN7content16SiteInstanceImpl10GetProcessEv
- fun:_ZN7content18RenderViewHostImplC1EPNS_12SiteInstanceEPNS_22RenderViewHostDelegateEPNS_24RenderWidgetHostDelegateEibPNS_23SessionStorageNamespaceE
- fun:_ZN7content21RenderViewHostFactory6CreateEPNS_12SiteInstanceEPNS_22RenderViewHostDelegateEPNS_24RenderWidgetHostDelegateEibPNS_23SessionStorageNamespaceE
- fun:_ZN7content22RenderFrameHostManager4InitEPNS_14BrowserContextEPNS_12SiteInstanceEi
- fun:_ZN7content15WebContentsImpl4InitERKNS_11WebContents12CreateParamsE
- fun:_ZN7content15TestWebContents6CreateEPNS_14BrowserContextEPNS_12SiteInstanceE
- fun:_ZN7content17WebContentsTester21CreateTestWebContentsEPNS_14BrowserContextEPNS_12SiteInstanceE
-}
-{
- bug_145704
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN2v88internal5Debug17CreateScriptCacheEv
- fun:_ZN2v88internal5Debug16GetLoadedScriptsEv
- fun:_ZN2v88internal29Runtime_DebugGetLoadedScriptsENS0_9ArgumentsEPNS0_7IsolateE
-}
-{
- bug_145705
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN10extensions16SettingsFrontendC1ERK13scoped_refptrINS_22SettingsStorageFactoryEEP7Profile
- fun:_ZN10extensions16SettingsFrontend6CreateEP7Profile
- fun:_ZN16ExtensionServiceC1E*
-}
-{
- bug_145708
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN27ExtensionDevToolsClientHostC1EPN7content11WebContentsERKSsS4_i
- fun:_ZN22AttachDebuggerFunction7RunImplEv
- fun:_ZN17ExtensionFunction3RunEv
- fun:_ZN27ExtensionFunctionDispatcher8DispatchERK31ExtensionHostMsg_Request_ParamsPN7content14RenderViewHostE
- fun:_ZN10extensions13ExtensionHost9OnRequestERK31ExtensionHostMsg_Request_Params
-}
-{
- bug_145712
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN5blink25NotificationPresenterImpl17requestPermissionEPN7WebCore22Scri ptExecutionContextEN3WTF10PassRefPtrINS1_12VoidCallbackEEE
- fun:_ZN7WebCore18NotificationCenter17requestPermissionEN3WTF10PassRefPtrINS_1 2VoidCallbackEEE
- fun:_ZN7WebCore20V8NotificationCenter25requestPermissionCallbackERKN2v89Argum entsE
-}
-{
- bug_145723
- Memcheck:Leak
- fun:_Znw*
- fun:_Z20NewExtensionFunctionI25TabsExecuteScriptFunctionEP17ExtensionFunctionv
- fun:_ZN25ExtensionFunctionRegistry11NewFunctionERKSs
- fun:_ZN27ExtensionFunctionDispatcher23CreateExtensionFunctionERK31ExtensionHostMsg_Request_ParamsPKN10extensions9ExtensionEiRKNS3_10ProcessMapEPNS3_12ExtensionAPIEPvPN3IPC6SenderEPN7content14RenderViewHostEi
- fun:_ZN27ExtensionFunctionDispatcher8DispatchERK31ExtensionHostMsg_Request_ParamsPN7content14RenderViewHostE
- fun:_ZN10extensions13ExtensionHost9OnRequestERK31ExtensionHostMsg_Request_Params
-}
-{
- bug_145735
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorIcE8allocateEmPKv
- fun:_ZNSt12_Vector_baseIcSaIcEE11_M_allocateEm
- fun:_ZNSt12_Vector_baseIcSaIcEEC2EmRKS0_
- fun:_ZNSt6vectorIcSaIcEEC1EmRKcRKS0_
- fun:_ZN4base5files12_GLOBAL__N_121InotifyReaderCallbackEPNS1_13InotifyReaderEii
-}
-{
- bug_146464
- Memcheck:Leak
- fun:realloc
- fun:add_codeset.isra.10
- ...
- fun:XCreatePixmap
- fun:XCreateBitmapFromData
- ...
- fun:_ZN4aura19RootWindowHostLinuxC1EPNS_22RootWindowHostDelegateERKN3gfx4RectE
-}
-{
- bug_146950
- Memcheck:Leak
- fun:malloc
- fun:get_peer_sock_name
- fun:_xcb_get_auth_info
- fun:xcb_connect_to_display_with_auth_info
- fun:_XConnectXCB
- fun:XOpenDisplay
- fun:_ZN4base18MessagePumpAuraX1118GetDefaultXDisplayEv
-}
-{
- bug_147755_a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN12PluginFinder18GetPluginInstallerERKN6webkit13WebPluginInfoE
- fun:_ZN11PluginPrefs30EnablePluginIfPossibleCallbackE*
-}
-{
- bug_147755_b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN12PluginFinder17GetPluginMetadataERKN6webkit13WebPluginInfoE
- fun:_ZN11PluginPrefs12EnablePluginE*
- fun:_ZN15PluginPrefsTest25EnablePluginSynchronouslyE*
- fun:_ZN44PluginPrefsTest_UnifiedPepperFlashState_Test8TestBodyEv
-}
-{
- bug_149734a
- Memcheck:Leak
- fun:malloc
- fun:_ZN3WTF10fastMallocEm
- fun:_ZN3WTF16VectorBufferBaseIN7WebCore9AttributeEE14allocateBufferEm
- fun:_ZN3WTF12VectorBufferIN7WebCore9AttributeELm4EE14allocateBufferEm
- fun:_ZN3WTF6VectorIN7WebCore9AttributeELm4EE22reserveInitialCapacityEm
- fun:_ZN7WebCore20ElementAttributeData13cloneDataFromERKS0_RKNS_7ElementERS3_
-}
-{
- bug_149734b
- Memcheck:Leak
- fun:malloc
- fun:_ZN3WTF10fastMallocEm
- fun:_ZN3WTF16VectorBufferBaseIN7WebCore9AttributeEE14allocateBufferEm
- fun:_ZN3WTF12VectorBufferIN7WebCore9AttributeELm4EE14allocateBufferEm
- fun:_ZN3WTF6VectorIN7WebCore9AttributeELm4EE15reserveCapacityEm
- fun:_ZN3WTF6VectorIN7WebCore9AttributeELm4EE14expandCapacityEm
- fun:_ZN3WTF6VectorIN7WebCore9AttributeELm4EE14expandCapacityEmPKS2_
- fun:_ZN3WTF6VectorIN7WebCore9AttributeELm4EE14appendSlowCaseIS2_EEvRKT_
- fun:_ZN7WebCore20ElementAttributeData12addAttributeERKNS_9AttributeEPNS_7ElementENS_30SynchronizationOfLazyAttributeE
-}
-{
- bug_150995
- Memcheck:Leak
- fun:_Zna*
- fun:_ZN14webkit_support12_GLOBAL__N_113DoLibpngWrite*
- fun:_ZN14webkit_support26EncodeWithCompressionLevel*
- fun:_ZN14webkit_support6EncodeEPKhNS_12_GLOBAL__N_111ColorFormat*
- fun:_ZN14webkit_support25EncodeBGRAPNGWithChecksum*
- fun:_ZNK9TestShell9dumpImageEP8SkCanvas
- fun:_ZN9TestShell4dumpEv
- fun:_ZN9TestShell12testFinishedEP11WebViewHost
- fun:_ZN11WebViewHost12testFinishedEv
- fun:_ZN13WebTestRunner10TestRunner9WorkQueue15processWorkSoonEv
-}
-{
- bug_151006
- Memcheck:Leak
- fun:malloc
- fun:uprv_malloc_46
- fun:_ZN6icu_467UMemorynwEm
- fun:_ZN6icu_4610DateFormat6createENS0_6EStyleES1_RKNS_6LocaleE
- fun:_ZN6icu_4610DateFormat22createDateTimeInstanceENS0_6EStyleES1_RKNS_6LocaleE
- fun:udat_open_46
- fun:_ZNK7WebCore9LocaleICU14openDateFormatE16UDateFormatStyleS1_
- fun:_ZN7WebCore9LocaleICU24initializeDateTimeFormatEv
- fun:_ZN7WebCore9LocaleICU15shortTimeFormatEv
- fun:_ZN7WebCore19DateTimeEditElement6layoutERKNS_9StepRangeERKNS_14DateComponentsERNS_9LocalizerE
- fun:_ZN7WebCore19DateTimeEditElement13setEmptyValueERKNS_9StepRangeERKNS_14DateComponentsERNS_9LocalizerE
- fun:_ZN7WebCore13TimeInputType20updateInnerTextValueEv
- fun:_ZN7WebCore13TimeInputType19createShadowSubtreeEv
- fun:_ZN7WebCore16HTMLInputElement10updateTypeEv
- fun:_ZN7WebCore16HTMLInputElement14parseAttributeERKNS_9AttributeE
- fun:_ZN7WebCore7Element16attributeChangedERKNS_9AttributeE
- fun:_ZN7WebCore13StyledElement16attributeChangedERKNS_9AttributeE
- fun:_ZN7WebCore7Element19parserSetAttributesERKN3WTF6VectorINS_9AttributeELm0EEENS_27FragmentScriptingPermissionE
- fun:_ZN7WebCore20HTMLConstructionSite17createHTMLElementEPNS_15AtomicHTMLTokenE
- fun:_ZN7WebCore20HTMLConstructionSite28insertSelfClosingHTMLElementEPNS_15AtomicHTMLTokenE
- fun:_ZN7WebCore15HTMLTreeBuilder24processStartTagForInBodyEPNS_15AtomicHTMLTokenE
- fun:_ZN7WebCore15HTMLTreeBuilder15processStartTagEPNS_15AtomicHTMLTokenE
-}
-{
- bug_151007
- Memcheck:Leak
- fun:malloc
- fun:_ZN3WTF10fastMallocEm
- fun:_ZN3WTF10RefCountedIN7WebCore15AtomicHTMLTokenEEnwEm
- fun:_ZN7WebCore15AtomicHTMLToken6createERNS_9HTMLTokenE
- fun:_ZN7WebCore15HTMLTreeBuilder22constructTreeFromTokenERNS_9HTMLTokenE
- fun:_ZN7WebCore18HTMLDocumentParser13pumpTokenizerENS0_15SynchronousModeE
- fun:_ZN7WebCore18HTMLDocumentParser23pumpTokenizerIfPossibleENS0_15SynchronousModeE
- fun:_ZN7WebCore18HTMLDocumentParser6insertERKNS_15SegmentedStringE
- fun:_ZN7WebCore18HTMLDocumentParser21parseDocumentFragmentERKN3WTF6StringEPNS_16DocumentFragmentEPNS_7ElementENS_27FragmentScriptingPermissionE
- fun:_ZN7WebCore16DocumentFragment9parseHTMLERKN3WTF6StringEPNS_7ElementENS_27FragmentScriptingPermissionE
- fun:_ZN7WebCore31createFragmentForInnerOuterHTMLERKN3WTF6StringEPNS_7ElementENS_27FragmentScriptingPermissionERi
- fun:_ZN7WebCore11HTMLElement12setInnerHTMLERKN3WTF6StringERi
- fun:_ZN7WebCore21HTMLElementV8InternalL19innerHTMLAttrSetterEN2v85LocalINS1_6StringEEENS2_INS1_5ValueEEERKNS1_12AccessorInfoE
- fun:_ZN2v88internal21StoreCallbackPropertyENS0_9ArgumentsEPNS0_7IsolateE
- ...
- fun:_ZN2v88internalL6InvokeEbNS0_6HandleINS0_10JSFunctionEEENS1_INS0_6ObjectEEEiPS5_Pb
-}
-{
- bug_151908
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN6webkit3gpu18GLInProcessContext22CreateOffscreenContextEPS1_RKN3gfx4SizeES2_PKcPKiNS3_13GpuPreferenceE
- fun:_ZN6webkit3gpu46WebGraphicsContext3DInProcessCommandBufferImpl10InitializeEN5blink20WebGraphicsContext3D10AttributesEPS3_
- fun:_ZN14webkit_support23CreateGraphicsContext3DERKN5blink20WebGraphicsContext3D10AttributesEPNS0_7WebViewE
- fun:_ZN11WebViewHost19createOutputSurfaceEv
- fun:_ZN5blink11WebViewImpl19createOutputSurfaceEv
- fun:_ZN5blink20WebLayerTreeViewImpl19createOutputSurfaceEv
-}
-{
- bug_155404
- Memcheck:Uninitialized
- fun:_ZN2v88internalL21ProfilerSignalHandlerEiP7siginfoPv
- obj:/lib/libpthread-2.11.1.so
-}
-{
- bug_156829
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7content23AudioInputDeviceManager23EnumerateOnDeviceThread*
-}
-{
- bug_158510
- Memcheck:Uninitialized
- fun:_ZN7WebCore11RenderTable6layoutEv
- ...
- fun:_ZN7WebCore11RenderBlock6layoutEv
-}
-{
- bug_158514
- Memcheck:Uninitialized
- ...
- fun:_ZN2v88internal16ProfileGenerator16RecordTickSampleERKNS0_10TickSampleE
- fun:_ZN2v88internal23ProfilerEventsProcessor12ProcessTicksEj
- fun:_ZN2v88internal23ProfilerEventsProcessor3RunEv
- fun:_ZN2v88internalL11ThreadEntryEPv
-}
-{
- bug_159005
- Memcheck:Uninitialized
- fun:_ZN7WebCore13RenderMarquee18updateMarqueeStyleEv
- fun:_ZN7WebCore11RenderLayer12styleChangedENS_15StyleDifferenceEPKNS_11RenderStyleE
- fun:_ZN7WebCore22RenderLayerModelObject14styleDidChangeENS_15StyleDifferenceEPKNS_11RenderStyleE
- fun:_ZN7WebCore9RenderBox14styleDidChangeENS_15StyleDifferenceEPKNS_11RenderStyleE
- fun:_ZN7WebCore11RenderBlock14styleDidChangeENS_15StyleDifferenceEPKNS_11RenderStyleE
- fun:_ZN7WebCore12RenderObject8setStyleEN3WTF10PassRefPtrINS_11RenderStyleEEE
-}
-{
- bug_160877
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN7content*DummyListenSocketC1Ev
- fun:_ZNK7content*DummyListenSocketFactory15CreateAndListenEPN3net18StreamListenSocket8DelegateE
- ...
- fun:_ZN3net10HttpServerC1ERKNS_25StreamListenSocketFactoryEPNS0_8DelegateE
- fun:_ZN7content23DevToolsHttpHandlerImpl4InitEv
-}
-{
- bug_162825
- Memcheck:Uninitialized
- fun:bcmp
- fun:_ZNK3gpu5gles221ShaderTranslatorCache26ShaderTranslatorInitParamsltERKS2_
- fun:_ZNKSt4lessIN3gpu5gles221ShaderTranslatorCache26ShaderTranslatorInitParamsEEclERKS3_S6_
- ...
- fun:_ZNSt3mapIN3gpu5gles221ShaderTranslatorCache26ShaderTranslatorInitParamsEPNS1_16ShaderTranslatorESt4lessIS3_ESaISt4pairIKS3_S5_EEE4findERS9_
- ...
- fun:_ZN3gpu5gles216GLES2DecoderImpl26InitializeShaderTranslatorEv
-}
-{
- bug_162828
- Memcheck:Leak
- fun:malloc
- fun:_Z15sk_malloc_flagsmj
- fun:_Z15sk_malloc_throwm
- fun:_ZN6SkMask10AllocImageEm
- fun:_ZL17drawRectsIntoMaskPK6SkRectiP6SkMask
- fun:_ZN20SkBlurMaskFilterImpl17filterRectsToNineEPK6SkRectiRK8SkMatrixRK7SkIRectPN12SkMaskFilter9NinePatchE
- fun:_ZN12SkMaskFilter10filterPathERK6SkPathRK8SkMatrixRK12SkRasterClipP9SkBounderP9SkBlitterN7SkPaint5StyleE
- fun:_ZNK6SkDraw8drawPathERK6SkPathRK7SkPaintPK8SkMatrixb
-}
-{
- bug_163922
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN10extensions16SettingsFrontendC1ERK13scoped_refptrINS_22SettingsStorageFactoryEEP7Profile
- fun:_ZN10extensions16SettingsFrontend6CreateEP7Profile
- fun:_ZN16ExtensionServiceC1E*
- fun:_ZN10extensions19ExtensionSystemImpl6Shared4InitEb
- fun:_ZN10extensions19ExtensionSystemImpl21InitForRegularProfileEb
- fun:_ZN14ProfileManager22DoFinalInitForServicesEP7Profileb
- fun:_ZN14ProfileManager11DoFinalInitEP7Profileb
- fun:_ZN14ProfileManager10AddProfileEP7Profile
- fun:_ZN14ProfileManager10GetProfileE*
-}
-{
- bug_163924
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN28JSONAsynchronousUnpackerImpl22StartProcessOnIOThreadEN7content13BrowserThread2IDERKSs
-}
-{
- bug_164176
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN18BrowserProcessImpl21PreMainMessageLoopRunEv
- fun:_ZN22ChromeBrowserMainParts25PreMainMessageLoopRunImplEv
- fun:_ZN22ChromeBrowserMainParts21PreMainMessageLoopRunEv
- fun:_ZN7content15BrowserMainLoop13CreateThreadsEv
- fun:_ZN7content21BrowserMainRunnerImpl10InitializeERKNS_18MainFunctionParamsE
- fun:_ZN7content11BrowserMainERKNS_18MainFunctionParamsE
- fun:_ZN7content23RunNamedProcessTypeMainERKSsRKNS_18MainFunctionParamsEPNS_19ContentMainDelegateE
- fun:_ZN7content21ContentMainRunnerImpl3RunEv
- fun:_ZN7content11ContentMainEiPPKcPNS_19ContentMainDelegateE
- fun:ChromeMain
-}
-{
- bug_164178
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN3net25MultiThreadedCertVerifier6VerifyEPNS_15X509CertificateERKSsiPNS_6CRLSetEPNS_16CertVerifyResultERKN4base8CallbackIFviEEEPPvRKNS_11BoundNetLogE
- fun:_ZN3net25SingleRequestCertVerifier6VerifyEPNS_15X509CertificateERKSsiPNS_6CRLSetEPNS_16CertVerifyResultERKN4base8CallbackIFviEEERKNS_11BoundNetLogE
- fun:_ZN3net18SSLClientSocketNSS12DoVerifyCertEi
- fun:_ZN3net18SSLClientSocketNSS15DoHandshakeLoopEi
- fun:_ZN3net18SSLClientSocketNSS21OnHandshakeIOCompleteEi
-}
-{
- bug_164179
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN3net10URLFetcher6CreateERK4GURLNS0_11RequestTypeEPNS_18URLFetcherDelegateE
- fun:_ZN18WebResourceService10StartFetchEv
-}
-{
- bug_164198
- Memcheck:Uninitialized
- fun:_ZN7WebCore9RenderBox15paintFillLayersERKNS_9PaintInfoERKNS_5ColorEPKNS_9FillLayerERKNS_10LayoutRectENS_24BackgroundBleedAvoidanceENS_17CompositeOperatorEPNS_12RenderObjectE
- ...
- fun:_ZN7WebCore11RenderBlock11paintObjectERNS_9PaintInfoERKNS_11LayoutPointE
- fun:_ZN7WebCore11RenderBlock5paintERNS_9PaintInfoERKNS_11LayoutPointE
- fun:_ZN7WebCore11RenderLayer18paintLayerContentsEPNS_15GraphicsContextERKNS0_17LayerPaintingInfoEj
- fun:_ZN7WebCore11RenderLayer31paintLayerContentsAndReflectionEPNS_15GraphicsContextERKNS0_17LayerPaintingInfoEj
- fun:_ZN7WebCore11RenderLayer10paintLayerEPNS_15GraphicsContextERKNS0_17LayerPaintingInfoEj
- fun:_ZN7WebCore11RenderLayer9paintListEPN3WTF6VectorIPS0_Lm0EEEPNS_15GraphicsContextERKNS0_17LayerPaintingInfoEj
- fun:_ZN7WebCore11RenderLayer18paintLayerContentsEPNS_15GraphicsContextERKNS0_17LayerPaintingInfoEj
- fun:_ZN7WebCore11RenderLayer31paintLayerContentsAndReflectionEPNS_15GraphicsContextERKNS0_17LayerPaintingInfoEj
- fun:_ZN7WebCore11RenderLayer10paintLayerEPNS_15GraphicsContextERKNS0_17LayerPaintingInfoEj
-}
-{
- bug_166470
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base4BindIMN11dom_storage17DomStorageContextEFvRK4GURLE13scoped_refptrIS2_ES3_EENS_8CallbackINS_8internal9BindStateINSB_13FunctorTraitsIT_E12RunnableTypeENSF_7RunTypeEFvNSB_19CallbackParamTraitsIT0_E11StorageTypeENSI_IT1_E11StorageTypeEEE14UnboundRunTypeEEESE_RKSJ_RKSM_
- fun:_ZN7content21DOMStorageContextImpl18DeleteLocalStorageERK4GURL
- ...
- fun:_ZN10extensions11DataDeleter13StartDeletingEP7ProfileRKSsRK4GURL
- fun:_ZN16ExtensionService18UninstallExtensionESsbPSbItN4base20string16_char_traitsESaItEE
-}
-{
- bug_166470c
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN11dom_storage19DomStorageNamespace24DeleteLocalStorageOriginERK4GURL
- fun:_ZN11dom_storage17DomStorageContext18DeleteLocalStorageERK4GURL
-}
-{
- bug_166470d
- Memcheck:Leak
- ...
- fun:_ZN7fileapi26GetOriginIdentifierFromURLERK4GURL
- fun:_ZN11dom_storage14DomStorageArea26DatabaseFileNameFromOriginERK4GURL
- fun:_ZN11dom_storage14DomStorageAreaC1E*
- fun:_ZN11dom_storage19DomStorageNamespace24DeleteLocalStorageOriginERK4GURL
- fun:_ZN11dom_storage17DomStorageContext18DeleteLocalStorageERK4GURL
-}
-{
- bug_166709
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base4BindIMNS_12_GLOBAL__N_121PostTaskAndReplyRelayEFvvENS_8internal17UnretainedWrapper*
- fun:_ZN4base8internal20PostTaskAndReplyImpl16PostTaskAndReplyERKN15tracked_objects8Location*
- ...
- fun:_ZN16ExtensionService12AddExtensionEPKN10extensions9ExtensionE
- fun:_ZN52BackgroundApplicationListModelTest_ExplicitTest_Test8TestBodyEv
-}
-{
- bug_166709b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base12_GLOBAL__N_112CreateThreadEmbPNS_14PlatformThread8DelegateEPmNS_14ThreadPriorityE
- fun:_ZN4base14PlatformThread6CreateEmPNS0_8DelegateEPm
- fun:_ZN4base12SimpleThread5StartEv
- fun:_ZN4base19SequencedWorkerPool6WorkerC1ERK13scoped_refptrIS0_EiRKSs
- fun:_ZN4base19SequencedWorkerPool5Inner30FinishStartingAdditionalThreadEi
- fun:_ZN4base19SequencedWorkerPool5Inner10ThreadLoopEPNS0_6WorkerE
- fun:_ZN4base19SequencedWorkerPool6Worker3RunEv
- fun:_ZN4base12SimpleThread10ThreadMainEv
- fun:_ZN4base12_GLOBAL__N_110ThreadFuncEPv
-}
-{
- bug_166709c
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base8internal20PostTaskAndReplyImpl16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEESA_
- fun:_ZN4base10TaskRunner16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEES9_
- fun:_ZN7content13BrowserThread28PostBlockingPoolTaskAndReplyERKN15tracked_objects8LocationERKN4base8CallbackIFvvEEESA_
- fun:_ZN10extensions11ImageLoader15LoadImagesAsyncEPKNS_9ExtensionERKSt6vectorINS0_19ImageRepresentationESaIS5_EERKN4base8CallbackIFvRKN3gfx5ImageEEEE
-}
-{
- bug_166818
- Memcheck:Leak
- fun:malloc
- fun:g_malloc
- ...
- fun:gdk_pixbuf_loader_load_module
- fun:gdk_pixbuf_loader_close
- fun:_ZN2ui12_GLOBAL__N_110LoadPixbufEPN4base22RefCountedStaticMemoryEb
- fun:_ZN2ui14ResourceBundle19GetNativeImageNamedEiNS0_8ImageRTLE
- fun:_ZN2ui14ResourceBundle19GetNativeImageNamedEi
-}
-{
- bug_166819
- Memcheck:Leak
- fun:_Znw*
- fun:_ZNK3sql10Connection21GetUntrackedStatementEPKc
- fun:_ZNK3sql10Connection21DoesTableOrIndexExistEPKcS2_
- fun:_ZNK3sql10Connection14DoesTableExistEPKc
- fun:_ZN3sql9MetaTable14DoesTableExistEPNS_10ConnectionE
- ...
- fun:_ZN7history16TopSitesDatabase4InitE*
- fun:_ZN7history15TopSitesBackend16InitDBOnDBThreadE*
-}
-{
- bug_166819b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZNK3sql10Connection21GetUntrackedStatementEPKc
- fun:_ZNK3sql10Connection21DoesTableOrIndexExistEPKcS2_
- fun:_ZNK3sql10Connection14DoesTableExistEPKc
- fun:_ZN7history17ShortcutsDatabase11EnsureTableEv
- fun:_ZN7history17ShortcutsDatabase4InitEv
- fun:_ZN7history16ShortcutsBackend12InitInternalEv
-}
-{
- bug_166976a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base19SequencedWorkerPool5Inner30FinishStartingAdditionalThreadEi
- fun:_ZN4base19SequencedWorkerPool5Inner10ThreadLoopEPNS0_6WorkerE
- fun:_ZN4base19SequencedWorkerPool6Worker3RunEv
- fun:_ZN4base12SimpleThread10ThreadMainEv
- fun:_ZN4base12_GLOBAL__N_110ThreadFuncEPv
-}
-{
- bug_166976b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorISt10_List_nodeIPN4base13WaitableEvent6WaiterEEE8allocateEmPKv
- fun:_ZNSt10_List_baseIPN4base13WaitableEvent6WaiterESaIS3_EE11_M_get_nodeEv
- fun:_ZNSt4listIPN4base13WaitableEvent6WaiterESaIS3_EE14_M_create_nodeERKS3_
- fun:_ZNSt4listIPN4base13WaitableEvent6WaiterESaIS3_EE9_M_insertESt14_List_iteratorIS3_ERKS3_
- fun:_ZNSt4listIPN4base13WaitableEvent6WaiterESaIS3_EE9push_backERKS3_
- fun:_ZN4base13WaitableEvent7EnqueueEPNS0_6WaiterE
- fun:_ZN4base13WaitableEvent9TimedWaitERKNS_9TimeDeltaE
- fun:_ZN4base13WaitableEvent4WaitEv
- ...
- fun:_ZN4base19SequencedWorkerPool6WorkerC1ERK13scoped_refptrIS0_EiRKSs
- fun:_ZN4base19SequencedWorkerPool5Inner30FinishStartingAdditionalThreadEi
- fun:_ZN4base19SequencedWorkerPool5Inner10ThreadLoopEPNS0_6WorkerE
- fun:_ZN4base19SequencedWorkerPool6Worker3RunEv
-}
-{
- bug_167175a
- Memcheck:Leak
- ...
- fun:g_*
- ...
- fun:_ZN16BrowserWindowGtk11InitWidgetsEv
- fun:_ZN16BrowserWindowGtk4InitEv
- fun:_ZN13BrowserWindow19CreateBrowserWindowEP7Browser
-}
-{
- bug_167175b
- Memcheck:Leak
- fun:malloc
- obj:/lib/libpng12.so.0.42.0
- fun:png_create_read_struct_2
- ...
- fun:_ZN15ReloadButtonGtkC1EP18LocationBarViewGtkP7Browser
- fun:_ZN17BrowserToolbarGtk4InitEP10_GtkWindow
- fun:_ZN16BrowserWindowGtk11InitWidgetsEv
- fun:_ZN16BrowserWindowGtk4InitEv
- fun:_ZN13BrowserWindow19CreateBrowserWindowEP7Browser
-}
-{
- bug_167175d
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorISbItN4base20string16_char_traitsESaItEEE8allocateEmPKv
- fun:_ZNSt12_Vector_baseISbItN4base20string16_char_traitsESaItEESaIS3_EE11_M_allocateEm
- ...
- fun:_ZN15WrenchMenuModel5BuildEbb
- fun:_ZN15WrenchMenuModelC1EPN2ui19AcceleratorProviderEP7Browserbb
- fun:_ZN17BrowserToolbarGtkC1EP7BrowserP16BrowserWindowGtk
- fun:_ZN16BrowserWindowGtk11InitWidgetsEv
- fun:_ZN16BrowserWindowGtk4InitEv
- fun:_ZN13BrowserWindow19CreateBrowserWindowEP7Browser
-}
-{
- bug_170340
- Memcheck:Uninitialized
- fun:_ZN3WTF12AtomicString3addEPKt
- fun:_ZN3WTF12AtomicStringC1EPKt
- fun:_ZN7WebCore18HTMLPreloadScanner12processTokenEv
- fun:_ZN7WebCore18HTMLPreloadScanner4scanEv
- fun:_ZN7WebCore18HTMLDocumentParser13pumpTokenizerENS0_15SynchronousModeE
- fun:_ZN7WebCore18HTMLDocumentParser23pumpTokenizerIfPossibleENS0_15SynchronousModeE
- fun:_ZN7WebCore18HTMLDocumentParser6appendERKNS_15SegmentedStringE
- fun:_ZN7WebCore25DecodedDataDocumentParser5flushEPNS_14DocumentWriterE
- fun:_ZN7WebCore14DocumentWriter3endEv
- fun:_ZN7WebCore14DocumentLoader15finishedLoadingEv
-}
-{
- bug_171722
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN3net12_GLOBAL__N_120URLRequestFtpJobTest9AddSocketEPNS_13MockReadWriteILNS_17MockReadWriteTypeE0EEEmPNS2_ILS3_1EEEm
-}
-{
- bug_172005
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7leveldb10VersionSet11LogAndApplyEPNS_11VersionEditEPNS_4port5MutexE
- fun:_ZN7leveldb2DB4OpenERKNS_7OptionsERKSsPPS0_
- fun:_ZN11dom_storage22SessionStorageDatabase9TryToOpenEPPN7leveldb2DBE
- fun:_ZN11dom_storage22SessionStorageDatabase8LazyOpenEb
- fun:_ZN11dom_storage22SessionStorageDatabase24ReadNamespacesAndOriginsEPSt3mapISsSt6vectorI4GURLSaIS3_EESt4lessISsESaISt4pairIKSsS5_EEE
- fun:_ZN11dom_storage17DomStorageContext36FindUnusedNamespacesInCommitSequenceERKSt3setISsSt4lessISsESaISsEES7_
-}
-{
- bug_172005b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7leveldb6DBImplC1ERKNS_7OptionsERKSs
- fun:_ZN7leveldb2DB4OpenERKNS_7OptionsERKSsPPS0_
- fun:_ZN11dom_storage22SessionStorageDatabase9TryToOpenEPPN7leveldb2DBE
- fun:_ZN11dom_storage22SessionStorageDatabase8LazyOpenEb
- fun:_ZN11dom_storage22SessionStorageDatabase24ReadNamespacesAndOriginsEPSt3mapISsSt6vectorI4GURLSaIS3_EESt4lessISsESaISt4pairIKSsS5_EEE
- fun:_ZN11dom_storage17DomStorageContext36FindUnusedNamespacesInCommitSequenceERKSt3setISsSt4lessISsESaISsEES7_
-}
-{
- bug_172025
- Memcheck:Uninitialized
- fun:_ZN11WebViewHost19didCreateDataSourceEPN5blink8WebFrameEPNS0_13WebDataSourceE
- fun:_ZN5blink21FrameLoaderClientImpl20createDocumentLoaderERKN7WebCore15ResourceRequestERKNS1_14SubstituteDataE
- fun:_ZN7WebCore11FrameLoader4initEv
- fun:_ZN7WebCore5Frame4initEv
- fun:_ZN5blink12WebFrameImpl21initializeAsMainFrameEPN7WebCore4PageE
- fun:_ZN5blink11WebViewImpl19initializeMainFrameEPNS_14WebFrameClientE
- fun:_ZN9TestShell15createNewWindowERKN5blink6WebURLEP16DRTDevToolsAgentPN13WebTestRunner17WebTestInterfacesE
- fun:_ZN9TestShell16createMainWindowEv
- fun:_ZN9TestShell10initializeEv
-}
-{
- bug_173096
- Memcheck:Uninitialized
- fun:bcmp
- fun:_ZN2cc19LayerTreeDebugState5equalERKS0_S2_
- fun:_ZN2cc13LayerTreeHost13setDebugStateERKNS_19LayerTreeDebugStateE
- fun:_ZN5blink20WebLayerTreeViewImpl*set*
- fun:_ZN5blink11WebViewImpl33setIsAcceleratedCompositingActiveEb
- fun:_ZN5blink11WebViewImpl20setRootGraphicsLayerEPN7WebCore13GraphicsLayerE
- fun:_ZN5blink16ChromeClientImpl23attachRootGraphicsLayerEPN7WebCore5FrameEPNS1_13GraphicsLayerE
- fun:_ZN7WebCore21RenderLayerCompositor15attachRootLayerENS0_19RootLayerAttachmentE
- fun:_ZN7WebCore21RenderLayerCompositor15ensureRootLayerEv
- fun:_ZN7WebCore21RenderLayerCompositor21enableCompositingModeEb
- fun:_ZN7WebCore21RenderLayerCompositor13updateBackingEPNS_11RenderLayerENS0_24CompositingChangeRepaintE
- fun:_ZN7WebCore21RenderLayerCompositor27updateLayerCompositingStateEPNS_11RenderLayerENS0_24CompositingChangeRepaintE
- fun:_ZN7WebCore11RenderLayer12styleChangedENS_15StyleDifferenceEPKNS_11RenderStyleE
- fun:_ZN7WebCore22RenderLayerModelObject14styleDidChangeENS_15StyleDifferenceEPKNS_11RenderStyleE
- fun:_ZN7WebCore9RenderBox14styleDidChangeENS_15StyleDifferenceEPKNS_11RenderStyleE
-}
-{
- bug_175100
- Memcheck:Leak
- ...
- fun:_ZN20OneClickSigninHelper14DidStopLoadingEPN7content14RenderViewHostE
- fun:_ZN*OneClickSigninHelperTest*
-}
-{
- bug_175815
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base5Value18CreateIntegerValueEi
- fun:_ZNK4base16FundamentalValue8DeepCopyEv
- fun:_ZN4base8internal12_GLOBAL__N_125DictionaryHiddenRootValue26RemoveWithoutPathExpansionERKSsPPNS_5ValueE
- fun:_ZN4base15DictionaryValue6RemoveERKSsPPNS_5ValueE
- fun:_ZN32PluginFinderTest_JsonSyntax_Test8TestBodyEv
-}
-{
- bug_175823
- Memcheck:Leak
- ...
- fun:_ZN18ValueStoreFrontend*
-}
-{
- bug_175985
- Memcheck:Uninitialized
- fun:_ZN2cc13LayerTreeHost13setDebugStateERKNS_19LayerTreeDebugStateE
- ...
- fun:_ZN5blink20WebLayerTreeViewImpl*
-}
-{
- bug_176270
- Memcheck:Uninitialized
- fun:_ZNK2cc19LayerTreeDebugState20recordRenderingStatsEv
-}
-{
- bug_176616_a
- Memcheck:Uninitialized
- fun:_ZN13WebTestRunner16WebTestProxyBase19didCreateDataSourceEPN5blink8WebFrameEPNS1_13WebDataSourceE
- fun:_ZN13WebTestRunner12WebTestProxyI11WebViewHostP9TestShellE19didCreateDataSourceEPN5blink8WebFrameEPNS5_13WebDataSourceE
- fun:_ZN5blink21FrameLoaderClientImpl20createDocumentLoaderERKN7WebCore15ResourceRequestERKNS1_14SubstituteDataE
- fun:_ZN7WebCore11FrameLoader4initEv
- fun:_ZN7WebCore5Frame4initEv
- fun:_ZN5blink12WebFrameImpl21initializeAsMainFrameEPN7WebCore4PageE
- fun:_ZN5blink11WebViewImpl19initializeMainFrameEPNS_14WebFrameClientE
- fun:_ZN9TestShell15createNewWindowERKN5blink6WebURLEP16DRTDevToolsAgentPN13WebTestRunner17WebTestInterfacesE
- fun:_ZN9TestShell16createMainWindowEv
- fun:_ZN9TestShell10initializeEP25MockWebKitPlatformSupport
-}
-{
- bug_176616_b
- Memcheck:Uninitialized
- fun:_ZN13WebTestRunner10TestRunner5resetEv
- fun:_ZN13WebTestRunner14TestInterfaces8resetAllEv
- fun:_ZN13WebTestRunner17WebTestInterfaces8resetAllEv
- fun:_ZN9TestShell19resetTestControllerEv
- fun:_ZL7runTestR9TestShellR10TestParamsRKSsb
-}
-{
- bug_176619_a
- Memcheck:Uninitialized
- fun:_ZN3WTF6StringC1EPKt
- fun:_ZN7WebCore12WebVTTParser22constructTreeFromTokenEPNS_8DocumentE
- fun:_ZN7WebCore12WebVTTParser33createDocumentFragmentFromCueTextERKN3WTF6StringE
- fun:_ZN7WebCore12TextTrackCue20createWebVTTNodeTreeEv
- fun:_ZN7WebCore12TextTrackCue22createCueRenderingTreeEv
- fun:_ZN7WebCore12TextTrackCue17updateDisplayTreeEf
-}
-{
- bug_176619_b
- Memcheck:Uninitialized
- fun:_ZN7WebCore12WebVTTParser13collectDigitsERKN3WTF6StringEPj
- fun:_ZN7WebCore12WebVTTParser16collectTimeStampERKN3WTF6StringEPj
- fun:_ZN7WebCore12WebVTTParser22constructTreeFromTokenEPNS_8DocumentE
- fun:_ZN7WebCore12WebVTTParser33createDocumentFragmentFromCueTextERKN3WTF6StringE
- fun:_ZN7WebCore12TextTrackCue20createWebVTTNodeTreeEv
- fun:_ZN7WebCore12TextTrackCue22createCueRenderingTreeEv
- fun:_ZN7WebCore12TextTrackCue17updateDisplayTreeEf
-}
-{
- bug_176621
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN13WebTestRunner10TestPlugin6createEPN5blink8WebFrameERKNS1_15WebPluginParamsEPNS_15WebTestDelegateE
- fun:_ZN13WebTestRunner16WebTestProxyBase12createPluginEPN5blink8WebFrameERKNS1_15WebPluginParamsE
- fun:_ZN13WebTestRunner12WebTestProxyI11WebViewHostP9TestShellE12createPluginEPN5blink8WebFrameERKNS5_15WebPluginParamsE
- fun:_ZN5blink21FrameLoaderClientImpl12createPluginERKN7WebCore7IntSizeEPNS1_17HTMLPlugInElementERKNS1_4KURLERKN3WTF6VectorINSA_6String*
- fun:_ZN7WebCore14SubframeLoader10loadPluginEPNS_22HTMLPlugInImageElementERKNS_4KURLERKN3WTF6StringERKNS6_6VectorIS7*
-}
-{
- bug_176888
- Memcheck:Leak
- fun:malloc
- fun:strdup
- fun:p11_kit_registered_module_to_name
- fun:gnutls_pkcs11_init
- fun:gnutls_global_init
- fun:_ZN12_GLOBAL__N_117GcryptInitializer4InitEv
- fun:_ZN12_GLOBAL__N_117GcryptInitializerC1Ev
- fun:_ZN4base25DefaultLazyInstanceTraitsIN12_GLOBAL__N_117GcryptInitializerEE3NewEPv
-}
-{
- bug_176889_a
- Memcheck:Uninitialized
- fun:inflateReset2
- fun:inflateInit2_
- fun:png_create_read_struct_2
- obj:/usr/lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-png.so
- obj:/usr/lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0.2600.1
- fun:gdk_pixbuf_loader*
-}
-{
- bug_176889_b
- Memcheck:Uninitialized
- fun:sse2_composite_over_8888_8888
- ...
- fun:gdk_pixbuf_loader_close
-}
-{
- bug_176889_c
- Memcheck:Uninitialized
- fun:sse2_combine_over_u
- ...
- fun:gdk_pixbuf_loader_close
-}
-{
- bug_176889_d
- Memcheck:Uninitialized
- obj:*/librsvg-2.so*
- fun:rsvg_handle_get_pixbuf_sub
- obj:*/libpixbufloader-svg.so
- fun:gdk_pixbuf_loader_close
-}
-{
- bug_176889_e
- Memcheck:Uninitialized
- fun:gdk_pixbuf_saturate_and_pixelate
-}
-{
- bug_176889_f
- Memcheck:Uninitialized
- fun:cache_magic_matchlet_compare
- fun:__gio_xdg_cache_get_mime_type_for_data
- fun:g_content_type_guess
- obj:/usr/lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0.2600.1
- obj:/usr/lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0.2600.1
- fun:gdk_pixbuf_loader_close
-}
-{
- bug_176891a
- Memcheck:Leak
- fun:calloc
- fun:nss_ZAlloc
- fun:nssCryptokiObject_Create
- fun:create_objects_from_handles
- fun:find_objects
- fun:find_objects_by_template
- fun:nssToken_FindCertificateByEncodedCertificate
- fun:PK11_FindCertFromDERCertItem
- fun:_ZN24mozilla_security_manager12_GLOBAL__N_125nsPKCS12Blob_ImportHelper*
-}
-{
- bug_176891b
- Memcheck:Leak
- ...
- fun:nssPKIObject_Create
- fun:nssTrustDomain_FindTrustForCertificate
- fun:STAN_DeleteCertTrustMatchingSlot
- fun:SEC_DeletePermCertificate
- ...
- fun:_ZN3net15NSSCertDatabase16DeleteCertAndKeyEPKNS_15X509CertificateE
-}
-{
- bug_177213
- Memcheck:Leak
- ...
- fun:_ZN10extensionsL9SerializeERKSt6vectorINS_10UserScriptESaIS1_EE
-}
-{
- bug_179758_a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base54WeakPtrTest_NonOwnerThreadCanCopyAndAssignWeakPtr_Test8TestBodyEv
-}
-{
- bug_179758_b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base58WeakPtrTest_NonOwnerThreadCanCopyAndAssignWeakPtrBase_Test8TestBodyEv
-}
-{
- bug_180381
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN4base8FilePath31StripTrailingSeparatorsInternalEv
- fun:_ZNK4base8FilePath7DirNameEv
- fun:_ZN11dom_storage18DomStorageDatabase18GetJournalFilePathERKN4base8FilePathE
- fun:_ZN11dom_storage27LocalStorageDatabaseAdapter11DeleteFilesEv
- fun:_ZN11dom_storage14DomStorageArea12DeleteOriginEv
- fun:_ZN11dom_storage19DomStorageNamespace24DeleteLocalStorageOriginERK4GURL
- fun:_ZN11dom_storage17DomStorageContext18DeleteLocalStorageERK4GURL
-}
-{
- bug_181038
- Memcheck:Leak
- ...
- fun:_ZN3gfx9GLApiBase17glCompileShaderFnEj
- fun:_ZN3gpu5gles214ProgramManager18ForceCompileShaderEPKSsPNS0_6ShaderEPNS0_16ShaderTranslatorEPNS0_11FeatureInfoE
- fun:_ZN3gpu5gles214ProgramManager15DoCompileShaderEPNS0_6ShaderEPNS0_16ShaderTranslatorEPNS0_11FeatureInfoE
- fun:_ZN3gpu5gles216GLES2DecoderImpl15DoCompileShaderEj
-}
-{
- bug_181038_link
- Memcheck:Leak
- fun:malloc
- ...
- fun:_ZN3gfx9GLApiBase15glLinkProgramFnEj
- fun:_ZN3gpu5gles27Program4LinkEPNS0_13ShaderManagerEPNS0_16ShaderTranslatorES5_PNS0_11FeatureInfoE
- fun:_ZN3gpu5gles216GLES2DecoderImpl13DoLinkProgramEj
- fun:_ZN3gpu5gles216GLES2DecoderImpl17HandleLinkProgramEjRKNS0_4cmds11LinkProgramE
- fun:_ZN3gpu5gles216GLES2DecoderImpl9DoCommandEjjPKv
- fun:_ZN3gpu13CommandParser14ProcessCommandEv
- fun:_ZN3gpu12GpuScheduler10PutChangedEv
- fun:_ZN6webkit3gpu18GLInProcessContext12PumpCommandsEv
-}
-{
- bug_181082
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN12_GLOBAL__N_124ResourceLoaderBridgeImpl5StartEPN11webkit_glue20ResourceLoaderBridge4PeerE
- fun:_ZN11webkit_glue16WebURLLoaderImpl7Context5StartERKN5blink13WebURLRequestEPNS_20ResourceLoaderBridge16SyncLoadResponseEPNS_25WebKitPlatformSupportImplE
- fun:_ZN11webkit_glue16WebURLLoaderImpl18loadAsynchronouslyERKN5blink13WebURLRequestEPNS1_18WebURLLoaderClientE
- fun:_ZN7WebCore22ResourceHandleInternal5start*
- ...
- fun:_ZN7WebCore14CachedResource4loadEPNS_20CachedResourceLoaderERKNS_21ResourceLoaderOptionsE
- fun:_ZN7WebCore20CachedResourceLoader15requestResourceENS_14CachedResource4TypeERNS_21CachedResourceRequestE
-}
-{
- bug_181680
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore11ScriptState10forContextEN2v85LocalINS1_7ContextEEE
- fun:_ZN7WebCore17ScriptDebugServer12breakProgramEN2v86HandleINS1_6ObjectEEENS2_INS1_5ValueEEE
- fun:_ZN7WebCore17ScriptDebugServer18handleV8DebugEventERKN2v85Debug12EventDetailsE
- fun:_ZN7WebCore17ScriptDebugServer20v8DebugEventCallbackERKN2v85Debug12EventDetailsE
- fun:_ZN2v88internal8Debugger18CallCEventCallbackENS_10DebugEventENS0_6HandleINS0_6ObjectEEES5_PNS_5Debug10ClientDataE
-}
-{
- bug_181680b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore11ScriptState10forContextEN2v86HandleINS1_7ContextEEE
- fun:_ZN7WebCore17ScriptDebugServer18handleProgramBreakEN2v86HandleINS1_6ObjectEEENS2_INS1_5ValueEEENS2_INS1_5ArrayEEE
-}
-{
- bug_184264
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore24createDragImageFromImageEPNS_5ImageENS_27RespectImageOrientationEnumE
- fun:_ZN7WebCore5Frame21dragImageForSelectionEv
- fun:_ZN7WebCore27createDragImageForSelectionEPNS_5FrameE
- fun:_ZN7WebCore14DragController9startDragEPNS_5FrameERKNS_9DragStateENS_13DragOperationERKNS_18PlatformMouseEventERKNS_8IntPointE
- fun:_ZN7WebCore12EventHandler10handleDragERKNS_28MouseEventWithHitTestResultsENS_19CheckDragHysteresisE
- fun:_ZN7WebCore12EventHandler23handleMouseDraggedEventERKNS_28MouseEventWithHitTestResultsE
- fun:_ZN7WebCore12EventHandler20handleMouseMoveEventERKNS_18PlatformMouseEventEPNS_13HitTestResultEb
- fun:_ZN7WebCore12EventHandler28passMouseMoveEventToSubframeERNS_28MouseEventWithHitTestResultsEPNS_5FrameEPNS_13HitTestResultE
- fun:_ZN7WebCore12EventHandler20handleMouseMoveEventERKNS_18PlatformMouseEventEPNS_13HitTestResultEb
- fun:_ZN7WebCore12EventHandler10mouseMovedERKNS_18PlatformMouseEventE
-}
-{
- bug_195160_a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIiEE8allocateEmPKv
- fun:_ZNSt8_Rb_treeIiiSt9_IdentityIiESt4lessIiESaIiEE11_M_get_nodeEv
- fun:_ZNSt8_Rb_treeIiiSt9_IdentityIiESt4lessIiESaIiEE14_M_create_nodeERKi
- fun:_ZNSt8_Rb_treeIiiSt9_IdentityIiESt4lessIiESaIiEE10_M_insert_EPKSt18_Rb_tree_node_baseS8_RKi
- fun:_ZNSt8_Rb_treeIiiSt9_IdentityIiESt4lessIiESaIiEE16_M_insert_uniqueERKi
- fun:_ZNSt3setIiSt4lessIiESaIiEE6insertERKi
- fun:_ZN10extensions10URLMatcher14UpdateTriggersEv
- fun:_ZN10extensions10URLMatcher28UpdateInternalDatastructuresEv
- fun:_ZN10extensions10URLMatcher16AddConditionSetsERKSt6vectorI13scoped_refptrINS_22URLMatcherConditionSetEESaIS4_EE
- fun:_ZN12_GLOBAL__N_113FilterBuilder5BuildEv
- fun:_ZN12_GLOBAL__N_134LoadWhitelistsOnBlockingPoolThreadE12ScopedVectorI19ManagedModeSiteListE
-}
-{
- bug_195160_b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPN10extensions13StringPatternEEE8allocateEmPKv
- fun:_ZNSt8_Rb_treeIPN10extensions13StringPatternES2_St9_IdentityIS2_ENS0_26URLMatcherConditionFactory27StringPatternPointerCompareESaIS2_EE11_M_get_nodeEv
- fun:_ZNSt8_Rb_treeIPN10extensions13StringPatternES2_St9_IdentityIS2_ENS0_26URLMatcherConditionFactory27StringPatternPointerCompareESaIS2_EE14_M_create_nodeERKS2_
- fun:_ZNSt8_Rb_treeIPN10extensions13StringPatternES2_St9_IdentityIS2_ENS0_26URLMatcherConditionFactory27StringPatternPointerCompareESaIS2_EE10_M_insert_EPKSt18_Rb_tree_node_baseSB_RKS2_
- fun:_ZNSt8_Rb_treeIPN10extensions13StringPatternES2_St9_IdentityIS2_ENS0_26URLMatcherConditionFactory27StringPatternPointerCompareESaIS2_EE16_M_insert_uniqueERKS2_
- fun:_ZNSt3setIPN10extensions13StringPatternENS0_26URLMatcherConditionFactory27StringPatternPointerCompareESaIS2_EE6insertERKS2_
- fun:_ZN10extensions26URLMatcherConditionFactory15CreateConditionENS_19URLMatcherCondition9CriterionERKSs
- fun:_ZN10extensions26URLMatcherConditionFactory35CreateHostSuffixPathPrefixConditionERKSsS2_
- fun:_ZN6policy12URLBlacklist18CreateConditionSetEPN10extensions10URLMatcherEiRKSsS5_btS5_
- fun:_ZN12_GLOBAL__N_113FilterBuilder10AddPatternERKSsi
- fun:_ZN12_GLOBAL__N_113FilterBuilder11AddSiteListEP19ManagedModeSiteList
- fun:_ZN12_GLOBAL__N_134LoadWhitelistsOnBlockingPoolThreadE12ScopedVectorI19ManagedModeSiteListE
-}
-{
- bug_195160_c
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base8internal20PostTaskAndReplyImpl16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEESA_
- fun:_ZN4base10TaskRunner16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEES9_
- fun:_ZN4base26PostTaskAndReplyWithResultI10scoped_ptrIN20ManagedModeURLFilter8ContentsENS_14DefaultDeleterIS3_EEES6_EEbPNS_10TaskRunnerERKN15tracked_objects8LocationERKNS_8CallbackIFT_vEEERKNSD_IFvT0_EEE
- fun:_ZN20ManagedModeURLFilter14LoadWhitelistsE12ScopedVectorI19ManagedModeSiteListE
-}
-{
- bug_222363
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN18WebDatabaseService12LoadDatabaseERKN4base8CallbackIFvN3sql10InitStatusEEEE
-}
-{
- bug_222876
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN21WebDataServiceWrapperC1EP7Profile
- fun:_ZNK21WebDataServiceFactory23BuildServiceInstanceForEPN7content14BrowserContextE
- fun:_ZN33BrowserContextKeyedServiceFactory27GetServiceForBrowserContextEPN7content14BrowserContextEb
- fun:_ZN21WebDataServiceFactory13GetForProfileEP7ProfileNS0_17ServiceAccessTypeE
- ...
- fun:_ZN12TokenService10InitializeEPKcP7Profile
-}
-{
- bug_222880
- Memcheck:Leak
- fun:malloc
- fun:_ZN3WTF10fastMallocEm
- fun:_ZN3WTF16VectorBufferBaseINS_6RefPtrIN7WebCore7ArchiveEEEE14allocateBufferEm
- ...
- fun:_ZN7WebCore7Archive18addSubframeArchiveEN3WTF10PassRefPtrIS0_EE
- fun:_ZN7WebCore11MHTMLParser22parseArchiveWithHeaderEPNS_10MIMEHeaderE
- fun:_ZN7WebCore11MHTMLParser12parseArchiveEv
- fun:_ZN7WebCore12MHTMLArchive6createERKNS_4KURLEPNS_12SharedBufferE
-}
-{
- bug_222883
- Memcheck:Uninitialized
- fun:_ZN2v88internal15ScavengeVisitor15ScavengePointerEPPNS0_6ObjectE.isra.*
- fun:_ZN2v88internal15ScavengeVisitor13VisitPointersEPPNS0_6ObjectES4_
- fun:_ZNK2v88internal13StandardFrame18IterateExpressionsEPNS0_13ObjectVisitorE
- ...
- fun:_ZN2v88internal4Heap8ScavengeEv
- fun:_ZN2v88internal4Heap24PerformGarbageCollectionENS0_16GarbageCollectorEPNS0_8GCTracer*
-}
-{
- bug_222887
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN6webkit3gpu18GLInProcessContext10InitializeERKN3gfx4SizeEPS1_PKcPKiNS2_13GpuPreferenceE
- fun:_ZN6webkit3gpu18GLInProcessContext22CreateOffscreenContextEPS1_RKN3gfx4SizeES2_PKcPKiNS3_13GpuPreferenceE
- fun:_ZN6webkit3gpu46WebGraphicsContext3DInProcessCommandBufferImpl10InitializeEN5blink20WebGraphicsContext3D10AttributesEPS3_
- fun:_ZN25TestWebKitPlatformSupport32createOffscreenGraphicsContext3DERKN5blink20WebGraphicsContext3D10AttributesE
- fun:_ZN7WebCore17GraphicsContext3D6createENS0_10AttributesEPNS_10HostWindowENS0_11RenderStyleE
-}
-{
- bug_222898
- Memcheck:Leak
- fun:malloc
- ...
- fun:_ZN3WTF9BitVector13OutOfLineBits6createEm
- fun:_ZN3WTF9BitVector15resizeOutOfLineEm
- fun:_ZN3WTF9BitVector10ensureSizeEm
- fun:_ZN3WTF9BitVectorC1Em
- fun:_ZN7WebCore10UseCounter10didObserveENS0_7FeatureE
- fun:_ZN7WebCore10UseCounter7observeEPNS_8DocumentENS0_7FeatureE
-}
-{
- bug_224747
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base8internal20PostTaskAndReplyImpl16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEESA_
- ...
- fun:_ZN64BackgroundApplicationListModelTest_AddRemovePermissionsTest_Test8TestBodyEv
-}
-{
- bug_225028
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN31SafeBrowsingDatabaseFactoryImpl26CreateSafeBrowsingDatabaseEbbbb
- fun:_ZN20SafeBrowsingDatabase6CreateEbbbb
- fun:_ZN27SafeBrowsingDatabaseManager11GetDatabaseEv
-}
-{
- bug_225596
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN8chromeos12input_method22InputMethodManagerImpl4InitERK13scoped_refptrIN4base19SequencedTaskRunnerEES7_
- fun:_ZN8chromeos12input_method10InitializeERK13scoped_refptrIN4base19SequencedTaskRunnerEES6_
- fun:_ZN8chromeos12input_method48InputMethodConfigurationTest_TestInitialize_Test8TestBodyEv
-}
-{
- bug_226254
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base4BindIMN10extensions16UserScriptMaster14ScriptReloader*
- fun:_ZN10extensions16UserScriptMaster14ScriptReloader9StartLoad*
- fun:_ZN10extensions16UserScriptMaster9StartLoadEv
- fun:_ZN10extensions16UserScriptMaster7ObserveEiRKN7content18NotificationSourceERKNS1_19NotificationDetailsE
-}
-{
- bug_227278a
- Memcheck:Uninitialized
- ...
- fun:_ZN7content35CompositingIOSurfaceTransformerTest13RunResizeTestERK8SkBitmapRKN3gfx4RectERKNS4_4SizeE
- fun:_ZN7content65CompositingIOSurfaceTransformerTest_ResizesTexturesCorrectly_Test8TestBodyEv
-}
-{
- bug_227278b
- Memcheck:Uninitialized
- ...
- fun:_ZN7content35CompositingIOSurfaceTransformerTest25RunTransformRGBToYV12TestERK8SkBitmapRKN3gfx4RectERKNS4_4SizeE
- fun:_ZN7content60CompositingIOSurfaceTransformerTest_TransformsRGBToYV12_Test8TestBodyEv
-}
-{
- bug_227278c
- Memcheck:Uninitialized
- fun:BitSetNextSetBit
- fun:RegistersReInterfere
- fun:RegistersMerge
- fun:glpPPShaderLinearizeStreamMgr
- fun:glpPPShaderLinearize
- fun:glePrepareShaderForEmulation
- fun:gleSetVPTransformFuncAll
- fun:gleVPRenderQuadsSmooth
- fun:gleDrawArraysOrElements_ExecCore
- fun:glDrawArrays_Exec
- fun:glDrawArrays
- fun:_ZN7content12_GLOBAL__N_18DrawQuadEffffbff
- fun:_ZN7content31CompositingIOSurfaceTransformer14ResizeBilinearEjRKN3gfx4RectERKNS1_4SizeEPj
- fun:_ZN7content35CompositingIOSurfaceTransformerTest13RunResizeTestERK8SkBitmapRKN3gfx4RectERKNS4_4SizeE
- fun:_ZN7content65CompositingIOSurfaceTransformerTest_ResizesTexturesCorrectly_Test8TestBodyEv
-}
-{
- bug_227278d
- Memcheck:Uninitialized
- fun:glViewport_Exec
- fun:glViewport
- fun:_ZN7content12_GLOBAL__N_139SetTransformationsForOffScreenRenderingERKN3gfx4SizeE
- fun:_ZN7content31CompositingIOSurfaceTransformer18TransformRGBToYV12EjRKN3gfx4RectERKNS1_4SizeEPjS8_S8_PS5_S9_
- fun:_ZN7content35CompositingIOSurfaceTransformerTest25RunTransformRGBToYV12TestERK8SkBitmapRKN3gfx4RectERKNS4_4SizeE
- fun:_ZN7content60CompositingIOSurfaceTransformerTest_TransformsRGBToYV12_Test8TestBodyEv
-}
-{
- bug_227278e
- Memcheck:Free
- fun:_ZdlPv
- fun:_ZN12BindingTableD2Ev
- fun:_ZN14TGenericLinkerD0Ev
- fun:ShDestruct
- fun:gleFreeProgramObject
- fun:gleUnbindDeleteHashNameAndObject
- fun:glDeleteObjectARB_Exec
- fun:glDeleteProgram
- fun:_ZN7content34CompositingIOSurfaceShaderPrograms5ResetEv
- fun:_ZN7content35CompositingIOSurfaceTransformerTestD2Ev
- fun:_ZN7content69CompositingIOSurfaceTransformerTest_ShaderProgramsCompileAndLink_TestD2Ev
- fun:_ZN7content69CompositingIOSurfaceTransformerTest_ShaderProgramsCompileAndLink_TestD1Ev
- fun:_ZN7content69CompositingIOSurfaceTransformerTest_ShaderProgramsCompileAndLink_TestD0Ev
- fun:_ZN7testing4Test11DeleteSelf_Ev
-}
-{
- bug_233541
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN22DiskCacheTestWithCache13CreateBackendEjPN4base6ThreadE
- fun:_ZN22DiskCacheTestWithCache13InitDiskCacheEv
- fun:_ZN22DiskCacheTestWithCache9InitCacheEv
- fun:*DiskCacheBackendTest_SimpleDoom*
-}
-{
- bug_234845
- Memcheck:Leak
- fun:malloc
- fun:PORT_Alloc_Util
- fun:pk11_CreateSymKey
- fun:PK11_KeyGenWithTemplate
- fun:pk11_TokenKeyGenWithFlagsAndKeyType
- fun:pk11_RawPBEKeyGenWithKeyType
- fun:PK11_PBEKeyGen
- fun:PK11_ExportEncryptedPrivKeyInfo
- fun:_ZN6crypto12ECPrivateKey25ExportEncryptedPrivateKeyERKSsiPSt6vectorIhSaIhEE
-}
-{
- bug_235584
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base4Bind*
- fun:_ZN3net18SSLClientSocketNSS4Core21OnHandshakeIOCompleteEi
- fun:_ZN3net18SSLClientSocketNSS4Core28OnGetDomainBoundCertCompleteEi
-}
-{
- bug_236791
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN3ash4test53FocusCyclerTest_CycleFocusThroughWindowWithPanes_Test8TestBodyEv
-}
-{
- bug_238170a
- Memcheck:Uninitialized
- fun:_ZN7WebCore20ElementRuleCollector20collectMatchingRulesERKNS_12MatchRequestERNS_13StyleResolver9RuleRangeE
- fun:_ZN7WebCore20ElementRuleCollector19hasAnyMatchingRulesEPNS_7RuleSetE
-}
-{
- bug_238170b
- Memcheck:Uninitialized
- fun:_ZN7WebCore20ElementRuleCollector20collectMatchingRulesERKNS_12MatchRequestERNS_13StyleResolver9RuleRangeE
- fun:_ZN7WebCore13StyleResolver16matchAuthorRulesERNS_20ElementRuleCollectorEb
-}
-{
- bug_238170c
- Memcheck:Uninitialized
- fun:_ZN7WebCore23ReplaceSelectionCommand7doApplyEv
- fun:_ZN7WebCore20CompositeEditCommand5applyEv
- fun:_ZN7WebCore12applyCommandEN3WTF10PassRefPtrINS_20CompositeEditCommandEEE
-}
-{
- bug_238547
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorIPN4base11PendingTaskEE8allocateEmPKv
- fun:_ZNSt11_Deque_baseIN4base11PendingTaskESaIS1_EE15_M_allocate_mapEm
- fun:_ZNSt5dequeIN4base11PendingTaskESaIS1_EE17_M_reallocate_mapEmb
- fun:_ZNSt5dequeIN4base11PendingTaskESaIS1_EE22_M_reserve_map_at_backEm
- fun:_ZNSt5dequeIN4base11PendingTaskESaIS1_EE16_M_push_back_auxERKS1_
- fun:_ZNSt5dequeIN4base11PendingTaskESaIS1_EE9push_backERKS1_
- fun:_ZNSt5queueIN4base11PendingTaskESt5dequeIS1_SaIS1_EEE4pushERKS1_
- ...
- fun:_ZN4base*MessageLoop*15PostDelayedTaskERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEENS_9TimeDeltaE
-}
-{
- bug_239141
- Memcheck:Leak
- fun:malloc
- ...
- fun:_ZN3WTF9BitVector13OutOfLineBits6createEm
- fun:_ZN3WTF9BitVector15resizeOutOfLineEm
- fun:_ZN3WTF9BitVector10ensureSizeEm
- fun:_ZN3WTF9BitVectorC1Em
- fun:_ZN7WebCore10UseCounter17recordMeasurementENS0_7FeatureE
-}
-{
- bug_241044
- Memcheck:Uninitialized
- fun:_ZN7WebCore8Settings29setOpenGLMultisamplingEnabledEb
- fun:_ZN5blink15WebSettingsImpl29setOpenGLMultisamplingEnabledEb
- fun:_ZN7content19ApplyWebPreferencesERK14WebPreferencesPN5blink7WebViewE
- fun:_ZN7content14RenderViewImpl22OnUpdateWebPreferencesERK14WebPreferences
- fun:_ZN7content14RenderViewImpl20SetWebkitPreferencesERK14WebPreferences
-}
-{
- bug_241892a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore11CSSSelector8RareData6createEN3WTF10PassRefPtrINS2_16AtomicStringImplEEE
- fun:_ZN7WebCore11CSSSelector14createRareDataEv
- ...
- fun:_Z10cssyyparsePN7WebCore9CSSParserE
- fun:_ZN7WebCore9CSSParser10parseSheetEPNS_18StyleSheetContentsE*
- fun:_ZN7WebCore18StyleSheetContents17parseStringAtLineERKN3WTF6StringEib
- fun:_ZN7WebCore12StyleElement11createSheetE*
- fun:_ZN7WebCore12StyleElement7processEPNS_7ElementE
-}
-{
- bug_241892b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore11CSSSelector8RareData6createEN3WTF10PassRefPtrINS2_16AtomicStringImplEEE
- fun:_ZN7WebCore11CSSSelector14createRareDataEv
- ...
- fun:_Z10cssyyparsePN7WebCore9CSSParserE
- fun:_ZN7WebCore9CSSParser13parseSelectorERKN3WTF6StringERNS_15CSSSelectorListE
-}
-{
- bug_241892c
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore11CSSSelector8RareData6createEN3WTF10PassRefPtrINS2_16AtomicStringImplEEE
- fun:_ZN7WebCore11CSSSelector14createRareDataEv
- fun:_ZN7WebCore11CSSSelector12setAttributeERKNS_13QualifiedNameE
- fun:_ZN7WebCore17CSSParserSelector12setAttributeERKNS_13QualifiedNameE
- fun:_Z10cssyyparsePN7WebCore9CSSParserE
- fun:_ZN7WebCore9CSSParser10parseSheetEPNS_18StyleSheetContentsERKN3WTF6StringERKNS3_12TextPositionEPNS0_17SourceDataHandlerEb
- fun:_ZN7WebCore18StyleSheetContents21parseStringAtPositionERKN3WTF6StringERKNS1_12TextPositionEb
- fun:_ZN7WebCore12StyleElement11createSheetEPNS_7ElementERKN3WTF6StringE
- fun:_ZN7WebCore12StyleElement7processEPNS_7ElementE
- fun:_ZN7WebCore12StyleElement17processStyleSheetEPNS_8DocumentEPNS_7ElementE
- fun:_ZN7WebCore16HTMLStyleElement26didNotifySubtreeInsertionsEPNS_13ContainerNodeE
- fun:_ZN7WebCore26ChildNodeInsertionNotifier6notifyEPNS_4NodeE
- fun:_ZN7WebCoreL24updateTreeAfterInsertionEPNS_13ContainerNodeEPNS_4NodeENS_14AttachBehaviorE
- fun:_ZN7WebCore13ContainerNode11appendChildEN3WTF10PassRefPtrINS_4NodeEEERiNS_14AttachBehaviorE
- fun:_ZN7WebCore4Node11appendChildEN3WTF10PassRefPtrIS0_EERiNS_14AttachBehaviorE
- fun:_ZN7WebCore6V8Node23appendChildMethodCustomERKN2v820FunctionCallbackInfoINS1_5ValueEEE
- fun:_ZN7WebCore14NodeV8InternalL37appendChildMethodCallbackForMainWorldERKN2v820FunctionCallbackInfoINS1_5ValueEEE
-}
-{
- bug_241892d
- Memcheck:Leak
- fun:malloc
- fun:_ZN3WTF10fastMallocEm
- fun:_ZN3WTF10RefCountedIN7WebCore11CSSSelector8RareDataEEnwEm
- fun:_ZN7WebCore11CSSSelector8RareData6createEN3WTF10PassRefPtrINS2_10StringImplEEE
- fun:_ZN7WebCore11CSSSelector14createRareDataEv
- ...
- fun:_Z10cssyyparsePN7WebCore9CSSParserE
-}
-{
- bug_241932
- Memcheck:Leak
- fun:calloc
- fun:_ZN3WTF13tryFastCallocEmm
- fun:_ZN3WTF9RawBufferC1EjjNS0_20InitializationPolicyE
- fun:_ZN3WTF19ArrayBufferContentsC1EjjNS_9RawBuffer20InitializationPolicyE
- fun:_ZN3WTF11ArrayBuffer6createEPKvj
- fun:_ZN7WebCore12_GLOBAL__N_16Reader17doReadArrayBufferEv
- fun:_ZN7WebCore12_GLOBAL__N_16Reader15readArrayBufferEPN2v86HandleINS2_5ValueEEE
- fun:_ZN7WebCore12_GLOBAL__N_16Reader4readEPN2v86HandleINS2_5ValueEEERNS0_16CompositeCreatorE
- fun:_ZN7WebCore12_GLOBAL__N_112Deserializer13doDeserializeEv
- fun:_ZN7WebCore12_GLOBAL__N_112Deserializer11deserializeEv
- fun:_ZN7WebCore21SerializedScriptValue11deserializeEPN2v87IsolateEPN3WTF6VectorINS4_6RefPtrINS_11MessagePortEEELm1EEE
- fun:_ZN7WebCore14V8MessageEvent20dataAttrGetterCustomEN2v85LocalINS1_6StringEEERKNS1_12AccessorInfoE
- fun:_ZN7WebCore22MessageEventV8InternalL22dataAttrGetterCallbackEN2v85LocalINS1_6StringEEERKNS1_12AccessorInfoE
-}
-{
- bug_242672
- Memcheck:Leak
- fun:malloc
- ...
- fun:_ZN3WTF9BitVector13OutOfLineBits6createEm
- fun:_ZN3WTF9BitVector15resizeOutOfLineEm
- fun:_ZN3WTF9BitVector10ensureSizeEm
- fun:_ZN7WebCore10UseCounterC1Ev
- fun:_ZN7WebCore4PageC1ERNS0_11PageClientsE
-}
-{
- bug_243132
- Memcheck:Leak
- fun:malloc
- fun:_ZN3WTF10fastMallocEm
- fun:_ZN3WTF10StringImpl19createUninitializedEjRPh
- ...
- fun:_ZN7WebCoreL24valueForGridTrackBreadthERKNS_10GridLengthEPKNS_11RenderStyleEPNS_10RenderViewE
- fun:_ZN7WebCoreL21valueForGridTrackSizeERKNS_13GridTrackSizeEPKNS_11RenderStyleEPNS_10RenderViewE
- fun:_ZN7WebCoreL21valueForGridTrackListERKN3WTF6VectorINS_13GridTrackSizeELm0EEERKNS0_7HashMap*
- fun:_ZNK7WebCore27CSSComputedStyleDeclaration19getPropertyCSSValueENS_13CSSPropertyIDENS_13EUpdateLayoutE
- fun:_ZNK7WebCore27CSSComputedStyleDeclaration19getPropertyCSSValueENS_13CSSPropertyIDE
- fun:_ZNK7WebCore27CSSComputedStyleDeclaration16getPropertyValueENS_13CSSPropertyIDE
- fun:_ZN7WebCore27CSSComputedStyleDeclaration16getPropertyValueERKN3WTF6StringE
-}
-{
- bug_243137
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore11RenderStyle6createEv
- fun:_ZN7WebCore13StyleResolver15styleForElementEPNS_7ElementEPNS_11RenderStyle*
- fun:_ZN7WebCore7Element16styleForRendererEv
- fun:_ZN7WebCore20NodeRenderingContext32createRendererForElementIfNeededEv
- fun:_ZN7WebCore7Element22createRendererIfNeededEv
- fun:_ZN7WebCore7Element6attachEv
- fun:_ZN7WebCore22HTMLPlugInImageElement6attachEv
-}
-{
- bug_243753
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7fileapi28SandboxFileSystemBackendTest11GetRootPathERK4GURLNS_14FileSystemTypeEbPN4base8FilePathE
-}
-{
- bug_245714
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7content17WorkerServiceImplC1Ev
- fun:_ZN22DefaultSingletonTraitsIN7content17WorkerServiceImplEE3NewEv
- fun:_ZN9SingletonIN7content17WorkerServiceImplE22DefaultSingletonTraitsIS1_ES1_E3getEv
- fun:_ZN7content17WorkerServiceImpl11GetInstanceEv
- fun:_ZN7content19WorkerMessageFilter16OnChannelClosingEv
- fun:_ZN3IPC12ChannelProxy7Context15OnChannelClosedEv
-}
-{
- bug_245714b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7content17WorkerServiceImplC1Ev
- fun:_ZN22DefaultSingletonTraitsIN7content17WorkerServiceImplEE3NewEv
- fun:_ZN9SingletonIN7content17WorkerServiceImplE22DefaultSingletonTraitsIS1_ES1_E3getEv
- fun:_ZN7content17WorkerServiceImpl11GetInstanceEv
- fun:_ZN7content22ResourceRequestDetailsC1EPKN3net10URLRequestEi
- fun:_ZN7content26ResourceDispatcherHostImpl18DidReceiveResponseEPNS_14ResourceLoaderE
- fun:_ZN7content14ResourceLoader23CompleteResponseStartedEv
- fun:_ZN7content14ResourceLoader17OnResponseStartedEPN3net10URLRequestE
- fun:_ZN3net10URLRequest21NotifyResponseStartedEv
-}
-{
- bug_245714c
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7content17WorkerServiceImplC1Ev
- fun:_ZN22DefaultSingletonTraitsIN7content17WorkerServiceImplEE3NewEv
- fun:_ZN9SingletonIN7content17WorkerServiceImplE22DefaultSingletonTraitsIS1_ES1_E3getEv
- fun:_ZN7content17WorkerServiceImpl11GetInstanceEv
- fun:_ZN7content22ResourceRequestDetailsC1EPKN3net10URLRequestEi
- fun:_ZN7content23ResourceRedirectDetailsC1EPKN3net10URLRequestEiRK4GURL
- fun:_ZN7content26ResourceDispatcherHostImpl18DidReceiveRedirectEPNS_14ResourceLoaderERK4GURL
- fun:_ZN7content14ResourceLoader18OnReceivedRedirectEPN3net10URLRequestERK4GURLPb
- fun:_ZN3net10URLRequest22NotifyReceivedRedirectERK4GURLPb
- fun:_ZN3net13URLRequestJob21NotifyHeadersCompleteEv
- fun:_ZN3net17URLRequestHttpJob21NotifyHeadersCompleteEv
- fun:_ZN3net17URLRequestHttpJob14SaveNextCookieEv
- fun:_ZN3net17URLRequestHttpJob35SaveCookiesAndNotifyHeadersCompleteEi
- fun:_ZN3net17URLRequestHttpJob16OnStartCompletedEi
-}
-{
- bug_245828
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base8internal20PostTaskAndReplyImpl16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEESA_
- fun:_ZN4base10TaskRunner16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEES9_
- fun:_ZN7content13BrowserThread16PostTaskAndReplyENS0_2IDERKN15tracked_objects8LocationERKN4base8CallbackIFvvEEESB_
- fun:_ZN7content23DevToolsHttpHandlerImpl4StopEv
- fun:_ZN7content21ShellDevToolsDelegate4StopEv
- fun:_ZN7content21ShellBrowserMainParts22PostMainMessageLoopRunEv
- fun:_ZN7content15BrowserMainLoop25ShutdownThreadsAndCleanUpEv
- fun:_ZN7content21BrowserMainRunnerImpl8ShutdownEv
- fun:_Z16ShellBrowserMainRKN7content18MainFunctionParams*
- fun:_ZN7content17ShellMainDelegate10RunProcessERKSsRKNS_18MainFunctionParamsE
- fun:_ZN7content23RunNamedProcessTypeMainERKSsRKNS_18MainFunctionParamsEPNS_19ContentMainDelegateE
- fun:_ZN7content21ContentMainRunnerImpl3RunEv
- fun:_ZN7content11ContentMainEiPPKcPNS_19ContentMainDelegateE
-}
-{
- bug_245866
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base23EnsureProcessTerminatedEi
- fun:_ZN7content6Zygote17HandleReapRequestEiRK6Pickle14PickleIterator
- fun:_ZN7content6Zygote24HandleRequestFromBrowserEi
- fun:_ZN7content6Zygote15ProcessRequestsEv
- fun:_ZN7content10ZygoteMainERKNS_18MainFunctionParamsEPNS_18ZygoteForkDelegateE
- fun:_ZN7content9RunZygoteERKNS_18MainFunctionParamsEPNS_19ContentMainDelegateE
- fun:_ZN7content23RunNamedProcessTypeMainERKSsRKNS_18MainFunctionParamsEPNS_19ContentMainDelegateE
- fun:_ZN7content21ContentMainRunnerImpl3RunEv
- fun:_ZN7content11ContentMainEiPPKcPNS_19ContentMainDelegateE
-}
-{
- bug_246148
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN7content16SiteInstanceImpl10GetProcessEv
- fun:_ZN7content18RenderViewHostImplC1EPNS_12SiteInstanceEPNS_22RenderViewHostDelegateEPNS_24RenderWidgetHostDelegateEiibPNS_23SessionStorageNamespaceE
- fun:_ZN7content21RenderViewHostFactory6CreateEPNS_12SiteInstanceEPNS_22RenderViewHostDelegateEPNS_24RenderWidgetHostDelegateEiibPNS_23SessionStorageNamespaceE
- fun:_ZN7content22RenderFrameHostManager4InitEPNS_14BrowserContextEPNS_12SiteInstanceEii
- fun:_ZN7content15WebContentsImpl4InitERKNS_11WebContents12CreateParamsE
- fun:_ZN7content15TestWebContents6CreateEPNS_14BrowserContextEPNS_12SiteInstanceE
- fun:_ZN7content17WebContentsTester21CreateTestWebContentsEPNS_14BrowserContextEPNS_12SiteInstanceE
- fun:_ZN8autofill12_GLOBAL__N_128AutofillDialogControllerTest5SetUpEv
-}
-{
- bug_246153
- Memcheck:Uninitialized
- fun:_ZN7WebCore8Settings29setOpenGLMultisamplingEnabledEb
- fun:_ZN5blink15WebSettingsImpl29setOpenGLMultisamplingEnabledEb
- fun:_ZN7content19ApplyWebPreferencesERK14WebPreferencesPN5blink7WebViewE
- ...
- fun:_ZN7content14RenderViewImpl10InitializeEPNS_20RenderViewImplParamsE
- fun:_ZN7content14RenderViewImpl6CreateE*
- fun:_ZN7content16RenderThreadImpl15OnCreateNewViewERK18ViewMsg_New_Params
-}
-{
- bug_247525a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7fileapi24SandboxFileSystemBackendC1EPN5quota17QuotaManagerProxyEPN4base19SequencedTaskRunnerERKNS4_8FilePathERKNS_17FileSystemOptionsEPNS1_20SpecialStoragePolicyE
- fun:_ZN7fileapi17FileSystemContextC1E10scoped_ptrINS_21FileSystemTaskRunnersEN4base14DefaultDeleterIS2_EEEPNS_19ExternalMountPointsEPN5quota20SpecialStoragePolicyEPNS9_17QuotaManagerProxyE12ScopedVectorINS_17FileSystemBackendEERKNS3_8FilePathERKNS_17FileSystemOptionsE
- fun:_ZN7content23CreateFileSystemContextERKN4base8FilePathEbPN7fileapi19ExternalMountPointsEPN5quota20SpecialStoragePolicyEPNS7_17QuotaManagerProxyE
- fun:_ZN7content20StoragePartitionImpl6CreateEPNS_14BrowserContextEbRKN4base8FilePathE
- fun:_ZN7content23StoragePartitionImplMap3GetERKSsS2_b
- fun:_ZN7content12_GLOBAL__N_129GetStoragePartitionFromConfigEPNS_14BrowserContextERKSsS4_b
- fun:_ZN7content14BrowserContext19GetStoragePartitionEPS0_PNS_12SiteInstanceE
- fun:_ZN7content24NavigationControllerImpl26GetSessionStorageNamespaceEPNS_12SiteInstanceE
- fun:_ZN7content22RenderFrameHostManager4InitEPNS_14BrowserContextEPNS_12SiteInstanceEii
- fun:_ZN7content15WebContentsImpl4InitERKNS_11WebContents12CreateParamsE
- fun:_ZN7content15TestWebContents6CreateEPNS_14BrowserContextEPNS_12SiteInstanceE
- fun:_ZN7content25RenderViewHostTestHarness21CreateTestWebContentsEv
- fun:_ZN7content25RenderViewHostTestHarness5SetUpEv
- fun:_ZN31ChromeRenderViewHostTestHarness5SetUpEv
-}
-{
- bug_247525b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN8appcache19AppCacheStorageImpl10InitializeERKN4base8FilePathEPNS1_16MessageLoopProxyES6_
- fun:_ZN8appcache15AppCacheService10InitializeERKN4base8FilePathEPNS1_16MessageLoopProxyES6_
- fun:_ZN7content21ChromeAppCacheService20InitializeOnIOThreadERKN4base8FilePathEPNS_15ResourceContextEPN3net23URLRequestContextGetterE13scoped_refptrIN5quota20SpecialStoragePolicyEE
-}
-{
- bug_247525c
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7content20StoragePartitionImpl6CreateEPNS_14BrowserContextEbRKN4base8FilePathE
- fun:_ZN7content23StoragePartitionImplMap3GetERKSsS2_b
- fun:_ZN7content12_GLOBAL__N_129GetStoragePartitionFromConfigEPNS_14BrowserContextERKSsS4_b
- fun:_ZN7content14BrowserContext19GetStoragePartitionEPS0_PNS_12SiteInstanceE
- fun:_ZN7content24NavigationControllerImpl26GetSessionStorageNamespaceEPNS_12SiteInstanceE
- fun:_ZN7content22RenderFrameHostManager4InitEPNS_14BrowserContextEPNS_12SiteInstanceEii
- fun:_ZN7content15WebContentsImpl4InitERKNS_11WebContents12CreateParamsE
- fun:_ZN7content15TestWebContents6CreateEPNS_14BrowserContextEPNS_12SiteInstanceE
- fun:_ZN7content25RenderViewHostTestHarness21CreateTestWebContentsEv
- fun:_ZN7content25RenderViewHostTestHarness5SetUpEv
- fun:_ZN31ChromeRenderViewHostTestHarness5SetUpEv
-}
-{
- bug_250529_a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN14TestingProfile20CreateRequestContextEv
- fun:_ZN12_GLOBAL__N_130ProfileSyncServiceTypedUrlTest5SetUpEv
-}
-{
- bug_250529_b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN14TestingProfile20CreateRequestContextEv
- fun:_ZN30ProfileSyncServicePasswordTest5SetUpEv
-}
-{
- bug_250533
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN3net21TestURLRequestContext4InitEv
- fun:_ZN3net21TestURLRequestContextC1Ev
- fun:_ZN3net27TestURLRequestContextGetter20GetURLRequestContextEv
- fun:_ZN11jingle_glue26ProxyResolvingClientSocketC1EPN3net19ClientSocketFactoryERK13scoped_refptrINS1_23URLRequestContextGetterEERKNS1_9SSLConfigERKNS1_12HostPortPairE
- fun:_ZN11jingle_glue23XmppClientSocketFactory27CreateTransportClientSocketERKN3net12HostPortPairE
- fun:_ZN11jingle_glue17ChromeAsyncSocket7ConnectERKN9talk_base13SocketAddressE
-}
-{
- bug_250533_b
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN3net18HttpNetworkSessionC1ERKNS0_6ParamsE
- fun:_ZN11jingle_glue26ProxyResolvingClientSocketC1EPN3net19ClientSocketFactoryERK13scoped_refptrINS1_23URLRequestContextGetterEERKNS1_9SSLConfigERKNS1_12HostPortPairE
- fun:_ZN11jingle_glue23XmppClientSocketFactory27CreateTransportClientSocketERKN3net12HostPortPairE
- fun:_ZN11jingle_glue17ChromeAsyncSocket7ConnectERKN9talk_base13SocketAddressE
-}
-{
- bug_250688
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKN3net9HostCache3KeyES2_INS4_5EntryEN4base9TimeTicksEEEEE8allocateEmPKv
- fun:_ZNSt8_Rb_treeIN3net9HostCache3KeyESt4pairIKS2_S3_INS1_5EntryEN4base9TimeTicksEEESt10_Select1stIS9_ESt4lessIS2_ESaIS9_EE11_M_get_nodeEv
- fun:_ZNSt8_Rb_treeIN3net9HostCache3KeyESt4pairIKS2_S3_INS1_5EntryEN4base9TimeTicksEEESt10_Select1stIS9_ESt4lessIS2_ESaIS9_EE14_M_create_nodeERKS9_
- fun:_ZNSt8_Rb_treeIN3net9HostCache3KeyESt4pairIKS2_S3_INS1_5EntryEN4base9TimeTicksEEESt10_Select1stIS9_ESt4lessIS2_ESaIS9_EE10_M_insert_EPKSt18_Rb_tree_node_baseSI_RKS9_
- fun:_ZNSt8_Rb_treeIN3net9HostCache3KeyESt4pairIKS2_S3_INS1_5EntryEN4base9TimeTicksEEESt10_Select1stIS9_ESt4lessIS2_ESaIS9_EE16_M_insert_uniqueERKS9_
- fun:_ZNSt3mapIN3net9HostCache3KeyESt4pairINS1_5EntryEN4base9TimeTicksEESt4lessIS2_ESaIS3_IKS2_S7_EEE6insertERKSB_
- fun:_ZN3net13ExpiringCacheINS_9HostCache3KeyENS1_5EntryEN4base9TimeTicksESt4lessIS5_ENS1_15EvictionHandlerEE3PutERKS2_RKS3_RKS5_SF_
- fun:_ZN3net9HostCache3SetERKNS0_3KeyERKNS0_5EntryEN4base9TimeTicksENS7_9TimeDeltaE
- fun:_ZN3net20MockHostResolverBase11ResolveProcEmRKNS_12HostResolver11RequestInfoEPNS_11AddressListE
- fun:_ZN3net20MockHostResolverBase10ResolveNowEm
-}
-{
- bug_251004_a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base8internal20PostTaskAndReplyImpl16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEESA_
- fun:_ZN4base10TaskRunner16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEES9_
- fun:_ZN3net10FileStream7Context14CloseAndDeleteEv
-}
-{
- bug_251034
- Memcheck:Leak
- ...
- fun:_ZN3gpu5gles216ShaderTranslator4InitE12ShShaderType12ShShaderSpecPK18ShBuiltInResourcesNS0_25ShaderTranslatorInterface22GlslImplementationTypeENS7_27GlslBuiltInFunctionBehaviorE
- fun:_ZN3gpu5gles221ShaderTranslatorCache13GetTranslatorE12ShShaderType12ShShaderSpecPK18ShBuiltInResourcesNS0_25ShaderTranslatorInterface22GlslImplementationTypeENS7_27GlslBuiltInFunctionBehaviorE
- fun:_ZN3gpu5gles216GLES2DecoderImpl26InitializeShaderTranslatorEv
- fun:_ZN3gpu5gles216GLES2DecoderImpl10InitializeERK13scoped_refptrIN3gfx9GLSurfaceEERKS2_INS3_9GLContextEEbRKNS3_4SizeERKNS0_18DisallowedFeaturesEPKcRKSt6vectorIiSaIiEE
- fun:_ZN3gpu22InProcessCommandBuffer21InitializeOnGpuThreadEbmRKN3gfx4SizeEPKcRKSt6vectorIiSaIiEENS1_13GpuPreferenceE
-}
-{
- bug_252054
- Memcheck:Unaddressable
- fun:_ZNK7WebCore32PlatformSpeechSynthesisUtterance6clientEv
- fun:_ZN7WebCore15SpeechSynthesis17didFinishSpeakingEN3WTF10PassRefPtrINS_32PlatformSpeechSynthesisUtteranceEEE
- fun:_ZN7WebCore29PlatformSpeechSynthesizerMock16speakingFinishedEPNS_5TimerIS0_EE
- fun:_ZN7WebCore5TimerINS_29PlatformSpeechSynthesizerMockEE5firedEv
- fun:_ZN7WebCore12ThreadTimers24sharedTimerFiredInternalEv
- fun:_ZN7WebCore12ThreadTimers16sharedTimerFiredEv
- fun:_ZN11webkit_glue25WebKitPlatformSupportImpl9DoTimeoutEv
-}
-{
- bug_252036
- Memcheck:Uninitialized
- fun:_ZN2cc9Scheduler27SetupNextBeginFrameIfNeededEv
- fun:_ZN2cc9Scheduler23ProcessScheduledActionsEv
-}
-{
- bug_252209
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7content18ResourceDispatcher12CreateBridgeERKN11webkit_glue20ResourceLoaderBridge11RequestInfoE
- fun:_ZN7content11ChildThread12CreateBridgeERKN11webkit_glue20ResourceLoaderBridge11RequestInfoE
- fun:_ZN7content25WebKitPlatformSupportImpl20CreateResourceLoaderERKN11webkit_glue20ResourceLoaderBridge11RequestInfoE
- fun:_ZN11webkit_glue16WebURLLoaderImpl7Context5StartERKN5blink13WebURLRequestEPNS_20ResourceLoaderBridge16SyncLoadResponseEPNS_25WebKitPlatformSupportImplE
- fun:_ZN11webkit_glue16WebURLLoaderImpl18loadAsynchronouslyERKN5blink13WebURLRequestEPNS1_18WebURLLoaderClientE
- fun:_ZN7WebCore22ResourceHandleInternal5startENS_17StoredCredentialsE
- fun:_ZN7WebCore14ResourceHandle5startENS_17StoredCredentialsE
- fun:_ZN7WebCore14ResourceHandle6createERKNS_15ResourceRequestEPNS_20ResourceHandleClientEbbNS_17StoredCredentialsE
-}
-{
- bug_252228
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN12_GLOBAL__N_125WorkerGlobalScopeObserver6createEPN7WebCore17WorkerGlobalScopeEN3WTF10PassRefPtrIN5blink31WorkerAllowMainThreadBridgeBaseEEE
- fun:_ZN5blink31WorkerAllowMainThreadBridgeBaseC1EPN7WebCore17WorkerGlobalScopeEPNS_13WebWorkerBaseE
- fun:*Allow*MainThreadBridge*
-}
-{
- bug_252241_a
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN7content20WebKitTestController20PrepareForLayoutTestERK4GURLRKN4base8FilePathEbRKSs
- fun:_Z16ShellBrowserMainRKN7content18MainFunctionParams*
- fun:_ZN7content17ShellMainDelegate10RunProcessERKSsRKNS_18MainFunctionParamsE
- fun:_ZN7content23RunNamedProcessTypeMainERKSsRKNS_18MainFunctionParamsEPNS_19ContentMainDelegateE
- fun:_ZN7content21ContentMainRunnerImpl3RunEv
- fun:_ZN7content11ContentMainEiPPKcPNS_19ContentMainDelegateE
-}
-{
- bug_252241_b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7content19ContentMainDelegate26CreateContentUtilityClientEv
- fun:_ZN7content24ContentClientInitializer3SetERKSsPNS_19ContentMainDelegateE
- fun:_ZN7content21ContentMainRunnerImpl10InitializeEiPPKcPNS_19ContentMainDelegateE
- fun:_ZN7content11ContentMainEiPPKcPNS_19ContentMainDelegateE
-}
-{
- bug_252641_a
- Memcheck:Uninitialized
- fun:pthread_rwlock_init$UNIX2003
- fun:_ZN3re25MutexC2Ev
- fun:_ZN3re25MutexC1Ev
- ...
- fun:_ZN11leveldb_env19ParseMethodAndErrorEPKcPNS_8MethodIDEPi
-}
-{
- bug_253797
- Memcheck:Uninitialized
- fun:_ZNSt11char_traitsIcE6lengthEPKc
- fun:_ZN4base8internal17StringPieceDetail*
- fun:_ZN4base16BasicStringPieceISsEC1EPKc
- fun:_ZN8autofill22AutofillQueryXmlParser13CharacterDataEPN4buzz15XmlParseContextEPKci
- fun:_ZN4buzz9XmlParser18ExpatCharacterDataEPKci
- fun:_ZN4buzzL21CharacterDataCallbackEPvPKci
- obj:*libexpat.so*
- obj:*libexpat.so*
- obj:*libexpat.so*
- obj:*libexpat.so*
- fun:XML_ParseBuffer
- fun:_ZN4buzz9XmlParser5ParseEPKcmb
- fun:_ZN8autofill12_GLOBAL__N_126AutofillQueryXmlParserTest13ParseQueryXMLERKSsb
- fun:_ZN8autofill12_GLOBAL__N_149AutofillQueryXmlParserTest_ParseAutofillFlow_Test8TestBodyEv
-}
-{
- bug_255718
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base4BindIMNS_12_GLOBAL__N_121PostTaskAndReplyRelayEFvvENS_8internal17UnretainedWrapperIS2_EEEENS_8CallbackINS5_9BindStateINS5_13FunctorTraitsIT_E12RunnableTypeENSC_7RunTypeEFvNS5_19CallbackParamTraitsIT0_E11StorageTypeEEE14UnboundRunTypeEEESB_RKSG_
- fun:_ZN4base8internal20PostTaskAndReplyImpl16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEESA_
- fun:_ZN4base10TaskRunner16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEES9_
- fun:_ZN4base26PostTaskAndReplyWithResultIN5quota15QuotaStatusCodeES2_EEbPNS_10TaskRunnerERKN15tracked_objects8LocationERKNS_8CallbackIFT_vEEERKNS9_IFvT0_EEE
- fun:_ZN7fileapi21FileSystemQuotaClient16DeleteOriginDataERK4GURLN5quota11StorageTypeERKN4base8CallbackIFvNS4_15QuotaStatusCodeEEEE
- fun:_ZN5quota12QuotaManager17OriginDataDeleter3RunEv
- fun:_ZN5quota9QuotaTask5StartEv
- fun:_ZN5quota12QuotaManager16DeleteOriginDataERK4GURLNS_11StorageTypeEiRKN4base8CallbackIFvNS_15QuotaStatusCodeEEEE
- fun:_ZN7content12_GLOBAL__N_134ClearQuotaManagedOriginsOnIOThreadERK13scoped_refptrIN5quota12QuotaManagerEERKSt3setI4GURLSt4lessIS8_ESaIS8_EENS2_11StorageTypeE
- fun:_ZN7content12_GLOBAL__N_121ClearOriginOnIOThreadEjRK4GURLRK13scoped_refptrIN3net23URLRequestContextGetterEERKS4_IN5quota12QuotaManagerEE
-}
-{
- bug_258466
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN22ChromeBrowserMainParts25PreMainMessageLoopRunImplEv
- fun:_ZN22ChromeBrowserMainParts21PreMainMessageLoopRunEv
- fun:_ZN7content15BrowserMainLoop13CreateThreadsEv
- fun:_ZN7content21BrowserMainRunnerImpl10InitializeERKNS_18MainFunctionParamsE
- fun:_ZN7content11BrowserMainERKNS_18MainFunctionParamsE
- fun:_ZN7content23RunNamedProcessTypeMainERKSsRKNS_18MainFunctionParamsEPNS_19ContentMainDelegateE
- fun:_ZN7content21ContentMainRunnerImpl3RunEv
- fun:_ZN7content11ContentMainEiPPKcPNS_19ContentMainDelegateE
- fun:ChromeMain
-}
-{
- bug_258132a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN5ppapi5proxy15PPP_Class_Proxy19CreateProxiedObjectEPK18PPB_Var_DeprecatedPNS0_10DispatcherEill
- fun:_ZN5ppapi5proxy24PPB_Var_Deprecated_Proxy27OnMsgCreateObjectDeprecatedEillNS0_24SerializedVarReturnValueE
-}
-{
- bug_258132b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN5ppapi5proxy26PluginProxyMultiThreadTest7RunTestEv
- fun:_ZN5ppapi*ThreadAwareCallback*Test_*
-}
-{
- bug_259188
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore16V8PerIsolateData6createEPN2v87IsolateE
- fun:_ZN7WebCore16V8PerIsolateData17ensureInitializedEPN2v87IsolateE
- fun:_ZN5blink10initializeEPNS_8PlatformE
-}
-{
- bug_259303
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN3IPC7Message23EnsureFileDescriptorSetEv
- fun:_ZN3IPC7Message19file_descriptor_setEv
- fun:_ZN3IPC7Channel11ChannelImpl24WillDispatchInputMessageEPNS_7MessageE
- fun:_ZN3IPC8internal13ChannelReader17DispatchInputDataEPKci
- fun:_ZN3IPC8internal13ChannelReader23ProcessIncomingMessagesEv
- fun:_ZN3IPC7Channel11ChannelImpl28OnFileCanReadWithoutBlockingEi
- fun:_ZN4base19MessagePumpLibevent21FileDescriptorWatcher28OnFileCanReadWithoutBlockingEiPS0_
- fun:_ZN4base19MessagePumpLibevent22OnLibeventNotificationEisPv
-}
-{
- bug_259357d
- Memcheck:Uninitialized
- ...
- fun:_ZN3gpu5gles239ShaderTranslatorTest_OptionsString_Test8TestBodyEv
-}
-{
- bug_259357f
- Memcheck:Uninitialized
- fun:_ZNK3gpu12AsyncAPIMock6IsArgsclEPKv
- fun:_ZNK7testing8internal12TrulyMatcherIN3gpu12AsyncAPIMock6IsArgsEE15MatchAndExplainIPKvEEbRT_PNS_19MatchResultListenerE
- fun:_ZNK7testing18PolymorphicMatcherINS_8internal12TrulyMatcherIN3gpu12AsyncAPIMock6IsArgsEEEE15MonomorphicImplIPKvE15MatchAndExplainESA_PNS_19MatchResultListenerE
- fun:_ZNK7testing8internal11MatcherBaseIPKvE15MatchAndExplainES3_PNS_19MatchResultListenerE
- fun:_ZNK7testing8internal11MatcherBaseIPKvE7MatchesES3_
- fun:_ZN7testing8internal11TuplePrefixILm3EE7MatchesINSt3tr15tupleIINS_7MatcherIjEES7_NS6_IPKvEEEEENS5_IIjjS9_EEEEEbRKT_RKT0_
- fun:_ZN7testing8internal12TupleMatchesINSt3tr15tupleIINS_7MatcherIjEES5_NS4_IPKvEEEEENS3_IIjjS7_EEEEEbRKT_RKT0_
- fun:_ZNK7testing8internal16TypedExpectationIFN3gpu5error5ErrorEjjPKvEE7MatchesERKNSt3tr15tupleIIjjS6_EEE
- fun:_ZNK7testing8internal16TypedExpectationIFN3gpu5error5ErrorEjjPKvEE21ShouldHandleArgumentsERKNSt3tr15tupleIIjjS6_EEE
- fun:_ZNK7testing8internal18FunctionMockerBaseIFN3gpu5error5ErrorEjjPKvEE29FindMatchingExpectationLockedERKNSt3tr15tupleIIjjS6_EEE
- fun:_ZN7testing8internal18FunctionMockerBaseIFN3gpu5error5ErrorEjjPKvEE30UntypedFindMatchingExpectationES6_PS6_PbPSoSB_
- fun:_ZN7testing8internal25UntypedFunctionMockerBase17UntypedInvokeWithEPKv
- fun:_ZN7testing8internal18FunctionMockerBaseIFN3gpu5error5ErrorEjjPKvEE10InvokeWithERKNSt3tr15tupleIIjjS6_EEE
- fun:_ZN7testing8internal14FunctionMockerIFN3gpu5error5ErrorEjjPKvEE6InvokeEjjS6_
- fun:_ZN3gpu12AsyncAPIMock9DoCommandEjjPKv
- fun:_ZN3gpu13CommandParser14ProcessCommandEv
- fun:_ZN3gpu12GpuScheduler10PutChangedEv
-}
-{
- bug_259789
- Memcheck:Uninitialized
- fun:_ZN7WebCore12_GLOBAL__N_116adjustAttributesERKNS_17GraphicsContext3D10AttributesEPNS_8SettingsE
- fun:_ZN7WebCore21WebGLRenderingContext19maybeRestoreContextEPNS_5TimerIS0_EE
- fun:_ZN7WebCore5TimerINS_21WebGLRenderingContextEE5firedEv
- fun:_ZN7WebCore12ThreadTimers24sharedTimerFiredInternalEv
- fun:_ZN7WebCore12ThreadTimers16sharedTimerFiredEv
- fun:_ZN11webkit_glue25WebKitPlatformSupportImpl9DoTimeoutEv
-}
-{
- bug_259789b
- Memcheck:Uninitialized
- fun:_ZN7WebCore12_GLOBAL__N_116adjustAttributesERKNS_17GraphicsContext3D10AttributesEPNS_8SettingsE
- fun:_ZN7WebCore21WebGLRenderingContext6createEPNS_17HTMLCanvasElementEPNS_22WebGLContextAttributesE
- fun:_ZN7WebCore17HTMLCanvasElement10getContextERKN3WTF6StringEPNS_23CanvasContextAttributesE
-}
-{
- bug_259799
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN5blink16EditorClientImpl23requestCheckingOfStringEN3WTF10PassRefPtrIN7WebCore19TextCheckingRequestEEE
- fun:_ZN7WebCore12SpellChecker13invokeRequestEN3WTF10PassRefPtrINS_17SpellCheckRequestEEE
- fun:_ZN7WebCore12SpellChecker18requestCheckingForEN3WTF10PassRefPtrINS_17SpellCheckRequestEEE
- fun:_ZN7WebCore6Editor40markAllMisspellingsAndBadGrammarInRangesEjPNS_5RangeES2_
- fun:_ZN7WebCore6Editor33markMisspellingsAfterTypingToWordERKNS_15VisiblePositionERKNS_16VisibleSelectionE
- fun:_ZN7WebCore13TypingCommand27markMisspellingsAfterTypingENS0_14ETypingCommandE
- fun:_ZN7WebCore13TypingCommand24typingAddedToOpenCommandENS0_14ETypingCommandE
- fun:_ZN7WebCore13TypingCommand28insertTextRunWithoutNewlinesERKN3WTF6StringEb
- fun:_ZNK7WebCore26TypingCommandLineOperationclEmmb
-}
-{
- bug_262875
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN3sql10Connection18GetCachedStatementERKNS_11StatementIDEPKc
- ...
- fun:_ZN15webkit_database15DatabaseTracker23UpgradeToCurrentVersionEv
- fun:_ZN15webkit_database15DatabaseTracker8LazyInitEv
- fun:_ZN15webkit_database15DatabaseTracker23GetAllOriginIdentifiersEPSt6vectorISsSaISsEE
- fun:_ZN15webkit_database12_GLOBAL__N_120GetOriginsOnDBThreadEPNS_15DatabaseTrackerEPSt3setI4GURLSt4lessIS4_ESaIS4_EE
-}
-{
- bug_262934
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7GrGpuGL12ProgramCache10getProgramERK15GrGLProgramDescPPK13GrEffectStageS7_
- fun:_ZN7GrGpuGL18flushGraphicsStateEN5GrGpu8DrawTypeEPK20GrDeviceCoordTexture
- fun:_ZN5GrGpu22setupClipAndFlushStateENS_8DrawTypeEPK20GrDeviceCoordTexturePN11GrDrawState18AutoRestoreEffectsE
- fun:_ZN5GrGpu6onDrawERKN12GrDrawTarget8DrawInfoE
- ...
- fun:_ZN9GrContext22readRenderTargetPixelsEP14GrRenderTargetiiii13GrPixelConfigPvmj
-}
-{
- bug_268258
- Memcheck:Leak
- fun:malloc
- fun:_ZN3WTF10fastMallocEm
- fun:_ZN3WTF10StringImpl12createStaticEPKcjj
- fun:_ZN7WebCore*Names*init*
-}
-{
- bug_268267
- Memcheck:Leak
- fun:_Znw*
- fun:_ZNK4base8internal18WeakReferenceOwner6GetRefEv
- fun:_ZN4base14WeakPtrFactoryINS_12_GLOBAL__N_16TargetEE10GetWeakPtrEv
- fun:_ZN4base45WeakPtrTest_MoveOwnershipAfterInvalidate_Test8TestBodyEv
-}
-{
- bug_269201
- Memcheck:Unaddressable
- ...
- fun:_ZN4base8internal17IncomingTaskQueue18AddToIncomingQueueERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEENS_9TimeDeltaEb
- fun:_ZN4base11MessageLoop8PostTaskERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEE
- fun:_ZN8printing8PrintJob21UpdatePrintedDocumentEPNS_15PrintedDocumentE
- fun:_ZN8printing8PrintJob4StopEv
-}
-{
- bug_269844
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorIPN4base11PendingTaskEE8allocateEmPKv
- fun:_ZNSt11_Deque_baseIN4base11PendingTaskESaIS1_EE15_M_allocate_mapEm
- fun:_ZNSt5dequeIN4base11PendingTaskESaIS1_EE17_M_reallocate_mapEmb
- ...
- fun:_ZN4base8internal17IncomingTaskQueue15PostPendingTaskEPNS_11PendingTaskE
- fun:_ZN4base8internal17IncomingTaskQueue18AddToIncomingQueueERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEENS_9TimeDeltaEb
- fun:_ZN4base11MessageLoop8PostTaskERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEE
-}
-{
- bug_272596
- Memcheck:Leak
- ...
- fun:nssPKIObjectCollection_AddInstanceAsObject
- fun:nssToken_TraverseCertificates
- fun:NSSTrustDomain_TraverseCertificates
- fun:PK11_ListCerts
- fun:_ZN3net15NSSCertDatabase9ListCertsEPSt6vectorI13scoped_refptrINS_15X509CertificateEESaIS4_EE
- fun:_ZN8chromeos12_GLOBAL__N_119LoadNSSCertificatesEPSt6vectorI13scoped_refptrIN3net15X509CertificateEESaIS5_EE
-}
-{
- bug_273398
- Memcheck:Leak
- ...
- fun:_ZN6Pickle6ResizeEm
- fun:_ZN6PickleC1Ev
- fun:_ZN7content14ZygoteHostImpl20GetTerminationStatusEibPi
- fun:_ZN7content20ChildProcessLauncher25GetChildTerminationStatusEbPi
-}
-{
- bug_274193
- Memcheck:Leak
- ...
- fun:_mesa_glsl_compile_shader
- fun:compile_shader
- fun:_mesa_CompileShaderARB
- fun:shared_dispatch_stub_529
- fun:_ZN3gfx9GLApiBase17glCompileShaderFnEj
- fun:_ZN3gpu5gles214ProgramManager15DoCompileShaderEPNS0_6ShaderEPNS0_16ShaderTranslatorEPNS0_11FeatureInfoE
- fun:_ZN3gpu5gles216GLES2DecoderImpl15DoCompileShaderEj
- fun:_ZN3gpu5gles216GLES2DecoderImpl19HandleCompileShaderEjRKNS0_4cmds13CompileShaderE
- fun:_ZN3gpu5gles216GLES2DecoderImpl9DoCommandEjjPKv
- fun:_ZN3gpu13CommandParser14ProcessCommandEv
-}
-{
- bug_288787
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN10extensions22ManagedValueStoreCache16ExtensionTracker7ObserveEiRKN7content18NotificationSourceERKNS2_19NotificationDetailsE
- fun:_ZN7content23NotificationServiceImpl6NotifyEiRKNS_18NotificationSourceERKNS_19NotificationDetailsE
- fun:_ZN16ExtensionService23NotifyExtensionUnloadedEPKN10extensions9ExtensionEN14extension_misc23UnloadedExtensionReasonE
- fun:_ZN16ExtensionService16DisableExtensionERKSsN10extensions9Extension13DisableReasonE
- fun:_ZN22theme_service_internal40ThemeServiceTest_DisableUnusedTheme_Test8TestBodyEv
-}
-{
- bug_288804
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKN3net12HostPortPairESt3mapINS3_15SpdySettingsIdsES2_INS3_17SpdySettingsFlagsEjESt4lessIS7_ESaIS2_IKS7_S9_EEEEEE8allocateEmPKv
- fun:_ZNSt8_Rb_treeIN3net12HostPortPairESt4pairIKS1_St3mapINS0_15SpdySettingsIdsES2_INS0_17SpdySettingsFlagsEjESt4lessIS5_ESaIS2_IKS5_S7_EEEESt10_Select1stISE_ES8_IS1_ESaISE_EE11_M_get_nodeEv
- fun:_ZNSt8_Rb_treeIN3net12HostPortPairESt4pairIKS1_St3mapINS0_15SpdySettingsIdsES2_INS0_17SpdySettingsFlagsEjESt4lessIS5_ESaIS2_IKS5_S7_EEEESt10_Select1stISE_ES8_IS1_ESaISE_EE14_M_create_nodeERKSE_
- fun:_ZNSt8_Rb_treeIN3net12HostPortPairESt4pairIKS1_St3mapINS0_15SpdySettingsIdsES2_INS0_17SpdySettingsFlagsEjESt4lessIS5_ESaIS2_IKS5_S7_EEEESt10_Select1stISE_ES8_IS1_ESaISE_EE13_M_clone_nodeEPKSt13_Rb_tree_nodeISE_E
- fun:_ZNSt8_Rb_treeIN3net12HostPortPairESt4pairIKS1_St3mapINS0_15SpdySettingsIdsES2_INS0_17SpdySettingsFlagsEjESt4lessIS5_ESaIS2_IKS5_S7_EEEESt10_Select1stISE_ES8_IS1_ESaISE_EE7_M_copyEPKSt13_Rb_tree_nodeISE_EPSL_
- fun:_ZNSt8_Rb_treeIN3net12HostPortPairESt4pairIKS1_St3mapINS0_15SpdySettingsIdsES2_INS0_17SpdySettingsFlagsEjESt4lessIS5_ESaIS2_IKS5_S7_EEEESt10_Select1stISE_ES8_IS1_ESaISE_EEaSERKSJ_
- fun:_ZNSt3mapIN3net12HostPortPairES_INS0_15SpdySettingsIdsESt4pairINS0_17SpdySettingsFlagsEjESt4lessIS2_ESaIS3_IKS2_S5_EEES6_IS1_ESaIS3_IKS1_SB_EEEaSERKSG_
- fun:_ZN18chrome_browser_net27HttpServerPropertiesManager24UpdatePrefsFromCacheOnIOERKN4base8CallbackIFvvEEE
- fun:_ZN18chrome_browser_net27HttpServerPropertiesManager24UpdatePrefsFromCacheOnIOEv
-}
-{
- bug_290364
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base13WaitableEventC1Ebb
- fun:_ZN4base12_GLOBAL__N_112ThreadParamsC1Ev
- fun:_ZN4base12_GLOBAL__N_112CreateThreadEmbPNS_14PlatformThread8DelegateEPNS_20PlatformThreadHandleENS_14ThreadPriorityE
- fun:_ZN4base14PlatformThread6CreateEmPNS0_8DelegateEPNS_20PlatformThreadHandleE
- fun:_ZN4base12SimpleThread5StartEv
- fun:_ZN4base19SequencedWorkerPool6WorkerC1ERK13scoped_refptrIS0_EiRKSs
- fun:_ZN4base19SequencedWorkerPool5Inner30FinishStartingAdditionalThreadEi
- fun:_ZN4base19SequencedWorkerPool5Inner10ThreadLoopEPNS0_6WorkerE
- fun:_ZN4base19SequencedWorkerPool6Worker3RunEv
- fun:_ZN4base12SimpleThread10ThreadMainEv
- fun:_ZN4base12_GLOBAL__N_110ThreadFuncEPv
-}
-{
- bug_290405
- Memcheck:Uninitialized
- fun:_ZNK16GrGradientEffect9onIsEqualERK8GrEffect
- fun:_ZNK8GrEffect7isEqualERKS_
- fun:_ZNK13GrEffectStage13DeferredStage7isEqualERKS_b
- fun:_ZNK11GrDrawState13DeferredState7isEqualERKS_
- fun:_ZNK19GrInOrderDrawBuffer13needsNewStateEv
- fun:_ZN19GrInOrderDrawBuffer6onDrawERKN12GrDrawTarget8DrawInfoE
- fun:_ZN12GrDrawTarget20drawIndexedInstancesE15GrPrimitiveTypeiiiPK6SkRect
- fun:_ZN13GrTextContext11flushGlyphsEv
-}
-{
- bug_290407
- Memcheck:Leak
- fun:calloc
- fun:_swrast_new_soft_renderbuffer
- fun:_mesa_BindRenderbufferEXT
- fun:shared_dispatch_stub_939
- fun:_ZN3gfx9GLApiBase23glBindRenderbufferEXTFnEjj
- fun:_ZN3gpu5gles216GLES2DecoderImpl18DoBindRenderbufferEjj
- fun:_ZN3gpu5gles216GLES2DecoderImpl22HandleBindRenderbufferEjRKNS0_4cmds16BindRenderbufferE
- fun:_ZN3gpu5gles216GLES2DecoderImpl9DoCommandEjjPKv
- fun:_ZN3gpu13CommandParser14ProcessCommandEv
-}
-{
- bug_290435
- Memcheck:Uninitialized
- fun:_ZN7WebCore12AudioContext20scheduleNodeDeletionEv
- fun:_ZN7WebCore12AudioContext21handlePostRenderTasksEv
- fun:_ZN7WebCore20AudioDestinationNode6renderEPNS_8AudioBusES2_m
- fun:_ZN7WebCore27OfflineAudioDestinationNode13offlineRenderEv
-}
-{
- bug_290440
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore11ScriptState10forContextEN2v86HandleINS1_7ContextEEE
- fun:_ZN7WebCore32scriptStateFromWorkerGlobalScopeEPNS_17WorkerGlobalScopeE
- ...
- fun:_ZN7WebCore13WorkerRunLoop9runInModeEPNS_17WorkerGlobalScopeERKNS_13ModePredicateENS0_8WaitModeE
- fun:_ZN7WebCore13WorkerRunLoop3runEPNS_17WorkerGlobalScopeE
- fun:_ZN7WebCore12WorkerThread12runEventLoopEv
-}
-{
- bug_290443
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore11ScriptState10forContextEN2v86HandleINS1_7ContextEEE
- fun:_ZN7WebCore11ScriptState7currentEv
- fun:_ZN7WebCore20ImageBitmapFactories17ImageBitmapLoaderC1EPS0_N3WTF10PassRefPtrINS_21ScriptPromiseResolverEEERKNS_7IntRectE
- fun:_ZN7WebCore20ImageBitmapFactories17ImageBitmapLoader6createEPS0_N3WTF10PassRefPtrINS_21ScriptPromiseResolverEEERKNS_7IntRectE
- fun:_ZN7WebCore20ImageBitmapFactories17createImageBitmapEPNS_11EventTargetEPNS_4BlobERNS_14ExceptionStateE
- fun:_ZN7WebCore27WorkerGlobalScopeV8InternalL24createImageBitmap1MethodERKN2v820FunctionCallbackInfoINS1_5ValueEEE
- fun:_ZN7WebCore27WorkerGlobalScopeV8InternalL23createImageBitmapMethodERKN2v820FunctionCallbackInfoINS1_5ValueEEE
- fun:_ZN7WebCore27WorkerGlobalScopeV8InternalL31createImageBitmapMethodCallbackERKN2v820FunctionCallbackInfoINS1_5ValueEEE
-}
-{
- bug_290451
- Memcheck:Uninitialized
- fun:_ZN4base17MD5DigestToBase16ERKNS_9MD5DigestE
- fun:_ZN7content16WebKitTestRunner11CaptureDumpEv
- fun:_ZN7content16WebKitTestRunner12testFinishedEv
- fun:_ZN13WebTestRunner10TestRunner18completeNotifyDoneEv
- fun:_ZN13WebTestRunner10TestRunner10notifyDoneERKSt6vectorINS_10CppVariantESaIS2_EEPS2_
- fun:_ZN13WebTestRunner13CppBoundClass14MemberCallbackINS_10TestRunnerEE3runERKSt6vectorINS_10CppVariantESaIS5_EEPS5_
- fun:_ZN13WebTestRunner13CppBoundClass6invokeEPvPK10_NPVariantmPS2_
- fun:_ZN13WebTestRunner11CppNPObject6invokeEP8NPObjectPvPK10_NPVariantjPS4_
-}
-{
- bug_290559a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7content12_GLOBAL__N_123WaitableCallbackResultsC1Ev
- fun:_ZN7content12_GLOBAL__N_123WaitableCallbackResults11MaybeCreateEN5blink22WebFileSystemCallbacksE
- ...
- fun:_ZN2v88internal25FunctionCallbackArguments4Call*
-}
-{
- bug_290559b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7content12_GLOBAL__N_123WaitableCallbackResultsC1Ev
- fun:_ZN7content12_GLOBAL__N_123WaitableCallbackResults11MaybeCreateEN5blink22WebFileSystemCallbacksE
- ...
- fun:_ZN7WebCore*SyncV8Internal*FunctionCallbackInfo*
-}
-{
- bug_293024_b
- Memcheck:Leak
- fun:malloc
- fun:_ZN3WTF10fastMallocEm
- fun:_ZN3WTF24ThreadSafeRefCountedBasenwEm
- fun:_ZN5blink12_GLOBAL__N_131AllowFileSystemMainThreadBridge6createEPN7WebCore17WorkerGlobalScopeEPNS_13WebWorkerBaseERKN3WTF6StringE
- fun:_ZN5blink22WorkerFileSystemClient15allowFileSystem*
- ...
- fun:_ZN2v88internal25FunctionCallbackArguments4CallEPFvRKNS_20FunctionCallbackInfoINS_5ValueEEEE
-}
-{
- bug_293033
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore11ScriptState10forContextEN2v86HandleINS1_7ContextEEE
- ...
- fun:_ZN7WebCore*V8InternalL*MethodERKN2v820FunctionCallbackInfoINS1_5ValueEEE
- fun:_ZN7WebCore*V8InternalL*MethodCallbackERKN2v820FunctionCallbackInfoINS1_5ValueEEE
-}
-{
- bug_293049
- Memcheck:Uninitialized
- fun:_ZNK7WebCore8Document24webkitPointerLockElementEv
- fun:_ZN7WebCore18DocumentV8InternalL39webkitPointerLockElementAttributeGetterEN2v85LocalINS1_6StringEEERKNS1_20PropertyCallbackInfoINS1_5ValueEEE
- fun:_ZN7WebCore18DocumentV8InternalL47webkitPointerLockElementAttributeGetterCallbackEN2v85LocalINS1_6StringEEERKNS1_20PropertyCallbackInfoINS1_5ValueEEE
- fun:_ZN2v88internal25PropertyCallbackArguments4CallEPFvNS_5LocalINS_6StringEEERKNS_20PropertyCallbackInfoINS_5ValueEEEES4_
-}
-{
- bug_293058_a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7content12_GLOBAL__N_123WaitableCallbackResultsC1Ev
- fun:_ZN7content12_GLOBAL__N_123WaitableCallbackResults11MaybeCreateERKN5blink22WebFileSystemCallbacksE
- fun:_ZN7content17WebFileSystemImpl*
-}
-{
- bug_293058_b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7content12_GLOBAL__N_123WaitableCallbackResultsC1Ev
- fun:_ZN7content12_GLOBAL__N_123WaitableCallbackResults11MaybeCreateERKN5blink22WebFileSystemCallbacksE
- fun:_ZN7content17WebFileSystemImpl16createFileWriterERKN5blink6WebURLEPNS1_19WebFileWriterClientENS1_22WebFileSystemCallbacksE
- fun:_ZN7WebCore17DOMFileSystemSync12createWriterEPKNS_13FileEntrySyncERNS_14ExceptionStateE
- fun:_ZN7WebCore13FileEntrySync12createWriterERNS_14ExceptionStateE
-}
-{
- bug_293088
- Memcheck:Unaddressable
- fun:_ZNK3WTF6RefPtrIN7WebCore19TextResourceDecoderEE3getEv
- fun:_ZNK7WebCore8Document7decoderEv
- fun:_ZN7WebCore25DecodedDataDocumentParser5flushEv
- fun:_ZN7WebCore14DocumentWriter3endEv
- fun:_ZN7WebCore14DocumentLoader10endWritingEPNS_14DocumentWriterE
- fun:_ZN7WebCore14DocumentLoader15finishedLoadingEd
- fun:_ZN7WebCore14DocumentLoader14notifyFinishedEPNS_8ResourceE
- fun:_ZN7WebCore8Resource11checkNotifyEv
- fun:_ZN7WebCore8Resource13finishOnePartEv
- fun:_ZN7WebCore8Resource6finishEd
- fun:_ZN7WebCore14ResourceLoader16didFinishLoadingEPN5blink12WebURLLoaderEd
- fun:_ZN11webkit_glue16WebURLLoaderImpl7Context18OnCompletedRequestEibRKSsRKN4base9TimeTicksE
- fun:_ZN7content18ResourceDispatcher17OnRequestCompleteEiibRKSsRKN4base9TimeTicksE
-}
-{
- bug_298143
- Memcheck:Uninitialized
- ...
- fun:_ZN7WebCore25TypeConversionsV8Internal*AttributeGetterE*
-}
-{
- bug_298887
- Memcheck:Leak
- ...
- fun:_ZN2ui25KeyboardCodeFromXKeyEventEP7_XEvent
- fun:_ZN2ui22KeyboardCodeFromNativeERKP7_XEvent
- fun:_ZN12_GLOBAL__N_121XModifierStateWatcher20UpdateStateFromEventERKP7_XEvent
- fun:_ZN2ui20EventFlagsFromNativeERKP7_XEvent
- fun:_ZN2ui8KeyEventC1ERKP7_XEventb
- fun:_ZN8chromeos31KeyboardDrivenEventRewriterTest25GetRewrittenEventAsStringEN2ui12KeyboardCodeEiNS1_9EventTypeEhj
- fun:_ZN8chromeos48KeyboardDrivenEventRewriterTest_PassThrough_Test8TestBodyEv
-}
-{
- bug_299647
- Memcheck:Unaddressable
- fun:_ZNK3WTF6OwnPtrIN7WebCore19AnimationControllerEE3getEv
- fun:_ZNK7WebCore5Frame9animationEv
- fun:_ZNK7WebCore12RenderObject9animationEv
- fun:_ZN7WebCore12RenderObject15willBeDestroyedEv
- fun:_ZN7WebCore22RenderLayerModelObject15willBeDestroyedEv
- fun:_ZN7WebCore20RenderBoxModelObject15willBeDestroyedEv
- fun:_ZN7WebCore9RenderBox15willBeDestroyedEv
- fun:_ZN7WebCore11RenderBlock15willBeDestroyedEv
- fun:_ZN7WebCore16RenderFullScreen15willBeDestroyedEv
- fun:_ZN7WebCore12RenderObject7destroyEv
- fun:_ZN7WebCore22FullscreenElementStack21setFullScreenRendererEPNS_16RenderFullScreenE
- fun:_ZN7WebCore22FullscreenElementStack19documentWasDetachedEv
- fun:_ZN7WebCore25DocumentLifecycleNotifier25notifyDocumentWasDetachedEv
- fun:_ZN7WebCore8Document6detachERKNS_4Node13AttachContextE
- fun:_ZN7WebCore8Document21prepareForDestructionEv
- fun:_ZN7WebCore5Frame7setViewEN3WTF10PassRefPtrINS_9FrameViewEEE
- fun:_ZN7WebCore5Frame10createViewERKNS_7IntSizeERKNS_5ColorEbS3_bNS_13ScrollbarModeEbS7_b
- fun:_ZN5blink12WebFrameImpl15createFrameViewEv
- fun:_ZN5blink21FrameLoaderClientImpl31transitionToCommittedForNewPageEv
- fun:_ZN7WebCore11FrameLoader21commitProvisionalLoadEv
- fun:_ZN7WebCore14DocumentLoader13commitIfReadyEv
- fun:_ZN7WebCore14DocumentLoader15finishedLoadingEd
-}
-{
- bug_299804
- Memcheck:Uninitialized
- fun:_ZN24GrConfigConversionEffect30TestForPreservingPMConversionsEP9GrContextPNS_12PMConversionES3_
- fun:_ZN12_GLOBAL__N_119test_pm_conversionsEP9GrContextPiS2_
- fun:_ZN9GrContext19createPMToUPMEffectEP9GrTexturebRK8SkMatrix
- fun:_ZN9GrContext22readRenderTargetPixelsEP14GrRenderTargetiiii13GrPixelConfigPvmj
- fun:_ZN11SkGpuDevice12onReadPixelsERK8SkBitmapiiN8SkCanvas10Config8888E
- fun:_ZN12SkBaseDevice10readPixelsEP8SkBitmapiiN8SkCanvas10Config8888E
- fun:_ZN8SkCanvas10readPixelsEP8SkBitmapiiNS_10Config8888E
- fun:_ZN14DeferredDevice12onReadPixelsERK8SkBitmapiiN8SkCanvas10Config8888E
- fun:_ZN12SkBaseDevice10readPixelsEP8SkBitmapiiN8SkCanvas10Config8888E
- fun:_ZN8SkCanvas10readPixelsEP8SkBitmapiiNS_10Config8888E
- fun:_ZN7WebCore15GraphicsContext10readPixelsEP8SkBitmapiiN8SkCanvas10Config8888E
- fun:_ZN7WebCore12getImageDataILNS_8MultiplyE1EEEN3WTF10PassRefPtrINS2_17Uint8ClampedArrayEEERKNS_7IntRectEPNS_15GraphicsContextERKNS_7IntSizeE
- fun:_ZNK7WebCore11ImageBuffer24getUnmultipliedImageDataERKNS_7IntRectENS0_16CoordinateSystemE
- fun:_ZNK7WebCore24CanvasRenderingContext2D12getImageDataENS_11ImageBuffer16CoordinateSystemEffffRNS_14ExceptionStateE
- fun:_ZNK7WebCore24CanvasRenderingContext2D12getImageDataEffffRNS_14ExceptionStateE
- fun:_ZN7WebCore34CanvasRenderingContext2DV8InternalL18getImageDataMethodERKN2v820FunctionCallbackInfoINS1_5ValueEEE
- fun:_ZN7WebCore34CanvasRenderingContext2DV8InternalL26getImageDataMethodCallbackERKN2v820FunctionCallbackInfoINS1_5ValueEEE
- fun:_ZN2v88internal25FunctionCallbackArguments4CallEPFvRKNS_20FunctionCallbackInfoINS_5ValueEEEE
- fun:_ZN2v88internalL19HandleApiCallHelperILb0EEEPNS0_11MaybeObjectENS0_12_GLOBAL__N_116BuiltinArgumentsILNS0_21BuiltinExtraArgumentsE1EEEPNS0_7IsolateE
-}
-{
- bug_301900
- Memcheck:Unaddressable
- fun:_Z7GrCrashPKc
- fun:_ZN19GrInOrderDrawBuffer6onDrawERKN12GrDrawTarget8DrawInfoE
- fun:_ZN12GrDrawTarget20drawIndexedInstancesE15GrPrimitiveTypeiiiPK6SkRect
- fun:_ZN19GrInOrderDrawBuffer10onDrawRectERK6SkRectPK8SkMatrixPS1_S5_
- fun:_ZN12GrDrawTarget8drawRectERK6SkRectPK8SkMatrixPS1_S5_
- ...
- fun:_ZN13SkGPipeReader8playbackEPKvmjPm
- fun:_ZN22DeferredPipeController8playbackEb
- fun:_ZN14DeferredDevice20flushPendingCommandsE12PlaybackMode
- fun:_ZN14DeferredDevice14onAccessBitmapEv
- fun:_ZN12SkBaseDevice12accessBitmapEb
- fun:_ZN12SkBaseDevice10readPixelsEP8SkBitmapiiN8SkCanvas10Config8888E
- fun:_ZN8SkCanvas10readPixelsEP8SkBitmapiiNS_10Config8888E
- fun:_ZN7WebCore15GraphicsContext10readPixelsEP8SkBitmapiiN8SkCanvas10Config8888E
-}
-{
- bug_309468
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN19TranslateBubbleView25CreateViewBeforeTranslateEv
- fun:_ZN19TranslateBubbleView4InitEv
- fun:_ZN5views18BubbleDelegateView12CreateBubbleEPS0_
- fun:_ZN23TranslateBubbleViewTest5SetUpEv
-}
-{
- bug_309477
- Memcheck:Uninitialized
- fun:_ZN13WebTestRunner11EventSender5resetEv
- fun:_ZN13WebTestRunner14TestInterfaces26resetTestHelperControllersEv
- fun:_ZN13WebTestRunner14TestInterfaces8resetAllEv
- ...
- fun:_ZN7content26ShellRenderProcessObserver17WebKitInitializedEv
- fun:_ZN7content16RenderThreadImpl23EnsureWebKitInitializedEv
- fun:_ZN7content16RenderThreadImpl15OnCreateNewViewERK18ViewMsg_New_Params
-}
-{
- bug_310351
- Memcheck:Leak
- ...
- fun:_ZN3WTF12PthreadStatenwEm
- fun:_ZN3WTFL35establishIdentifierForPthreadHandleERK*
- fun:_ZN3WTF13currentThreadEv
- fun:_ZN3WTF20initializeMainThreadEPFvPFvPvES0_E
-}
-{
- bug_312332
- Memcheck:Uninitialized
- ...
- fun:_ZNK7WebCore17RenderTextControl29computeIntrinsicLogicalWidthsERNS_10LayoutUnitES2_
- fun:_ZN7WebCore17RenderTextControl29computePreferredLogicalWidthsEv
- ...
- fun:_ZN7WebCore11RenderBlock6layoutEv
-}
-{
- bug_317166
- Memcheck:Leak
- fun:malloc
- fun:_dl_close_worker
- fun:_dl_close
- fun:_dl_catch_error
- fun:_dlerror_run
- fun:dlclose
- obj:/usr/lib/x86_64-linux-gnu/libasound.so.2.0.0
- fun:snd_config_searcha_hooks
- fun:snd_config_searchva_hooks
- obj:/usr/lib/x86_64-linux-gnu/libasound.so.2.0.0
- fun:snd_config_search_definition
- obj:/usr/lib/x86_64-linux-gnu/libasound.so.2.0.0
- fun:_ZN5media11AlsaWrapper7PcmOpenEPP8_snd_pcmPKc15_snd_pcm_streami
- fun:_ZN9alsa_utilL10OpenDeviceEPN5media11AlsaWrapperEPKc15_snd_pcm_streamii15_snd_pcm_formati
- fun:_ZN9alsa_util18OpenPlaybackDeviceEPN5media11AlsaWrapperEPKcii15_snd_pcm_formati
- fun:_ZN5media19AlsaPcmOutputStream16AutoSelectDeviceEj
- fun:_ZN5media19AlsaPcmOutputStream4OpenEv
- fun:_ZN5media25AudioOutputDispatcherImpl19CreateAndOpenStreamEv
- fun:_ZN5media25AudioOutputDispatcherImpl10OpenStreamEv
- fun:_ZN5media20AudioOutputResampler10OpenStreamEv
- fun:_ZN5media16AudioOutputProxy4OpenEv
- fun:_ZN5media18AudioStreamHandler20AudioStreamContainer4PlayEv
-}
-{
- bug_321976
- Memcheck:Leak
- ...
- fun:nssList_Create
- fun:nssTrustDomain_UpdateCachedTokenCerts
- fun:nssSlot_Refresh
- fun:nssSlot_IsTokenPresent
- fun:pk11_IsPresentCertLoad
- fun:SECMOD_OpenNewSlot
- fun:_ZN6crypto12_GLOBAL__N_116NSSInitSingleton10OpenUserDBERKN4base8FilePathEPKc
- fun:_ZN6crypto12_GLOBAL__N_116NSSInitSingleton13OpenTestNSSDBEv
- fun:_ZN6crypto15ScopedTestNSSDBC1Ev
-}
-{
- bug_327672
- Memcheck:Uninitialized
- fun:_ZNK7WebCore18StyleSheetContents11isCacheableEv
- fun:_ZN7WebCore9LinkStyle16setCSSStyleSheetERKN3WTF6StringERKNS_4KURLES4_PKNS_21CSSStyleSheetResourceE
- fun:_ZN7WebCore21CSSStyleSheetResource11checkNotifyEv
- ...
- fun:_ZN11webkit_glue16WebURLLoaderImpl7Context18OnCompletedRequestEibRKSsRKN4base9TimeTicksE
-}
-{
- bug_328987
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base8internal20PostTaskAndReplyImpl16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEESA_
- fun:_ZN4base10TaskRunner16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEES9_
- fun:_ZN4base26PostTaskAndReplyWithResultIN3net20WifiPHYLayerProtocolES2_EEbPNS_10TaskRunnerERKN15tracked_objects8LocationERKNS_8CallbackIFT_vEEERKNS9_IFvT0_EEE
- fun:_ZN22MetricsNetworkObserver25ProbeWifiPHYLayerProtocolEv
- fun:_ZN22MetricsNetworkObserverC1Ev
- fun:_ZN10MetricsLogC1ERKSsi
-}
diff --git a/chromium/tools/valgrind/memcheck/suppressions_linux.txt b/chromium/tools/valgrind/memcheck/suppressions_linux.txt
deleted file mode 100644
index 6ce46070e6f..00000000000
--- a/chromium/tools/valgrind/memcheck/suppressions_linux.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-# There are three kinds of suppressions in this file:
-# 1. Third party stuff we have no control over.
-#
-# 2. Intentional unit test errors, stuff that is somehow a false positive
-# in our own code, or stuff that is so trivial it's not worth fixing.
-#
-# 3. Suppressions for real chromium bugs that are not yet fixed.
-# These should all be in chromium's bug tracking system.
-# Periodically we should sweep this file and the bug tracker clean by
-# running overnight and removing outdated bugs/suppressions.
-#
-# TODO(rnk): Should we move all of the Linux-only system library suppressions
-# over from suppressions.txt? We'd avoid wasting time parsing and matching
-# suppressions on non-Linux, which is basically just Mac.
-#
-#-----------------------------------------------------------------------
-
-# 1. Third party stuff we have no control over.
-
-# 2. Intentional unit test errors, stuff that is somehow a false positive
-# in our own code, or stuff that is so trivial it's not worth fixing.
-
-# 3. Suppressions for real chromium bugs that are not yet fixed.
-
diff --git a/chromium/tools/valgrind/memcheck/suppressions_mac.txt b/chromium/tools/valgrind/memcheck/suppressions_mac.txt
deleted file mode 100644
index 59acb66fdae..00000000000
--- a/chromium/tools/valgrind/memcheck/suppressions_mac.txt
+++ /dev/null
@@ -1,2378 +0,0 @@
-# There are three kinds of suppressions in this file:
-# 1. Third party stuff we have no control over.
-#
-# 2. Intentional unit test errors, stuff that is somehow a false positive
-# in our own code, or stuff that is so trivial it's not worth fixing.
-#
-# 3. Suppressions for real chromium bugs that are not yet fixed.
-# These should all be in chromium's bug tracking system.
-# Periodically we should sweep this file and the bug tracker clean by
-# running overnight and removing outdated bugs/suppressions.
-#-----------------------------------------------------------------------
-
-# 1. Third party stuff we have no control over.
-{
- FIXME mac kevent libevent probably needs valgrind hooks
- Memcheck:Param
- kevent(changelist)
- fun:kevent
- fun:event_base_new
-}
-{
- # CoreAudio leak. See http://crbug.com/9351
- bug_9351
- Memcheck:Leak
- ...
- fun:_ZN12HALCADClient19AddPropertyListenerEmPK26AudioObjectPropertyAddressPFlmmS2_PvES3_
- ...
- fun:_ZN9HALSystem16CheckOutInstanceEv
- ...
-}
-{
- bug_18215
- Memcheck:Uninitialized
- fun:_DPSNextEvent
- fun:-[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:]
- fun:-[NSApplication run]
-}
-{
- # Also filed with Apple as rdar://7255382
- bug_20459b
- Memcheck:Leak
- fun:malloc_zone_malloc
- fun:_CFRuntimeCreateInstance
- fun:__CFArrayInit
- fun:CFArrayCreateMutableCopy
- ...
- fun:_ZN8Security12KeychainCore5Trust8evaluate*
-}
-{
- # See also http://openradar.appspot.com/radar?id=1169404
- bug_79533b
- Memcheck:Uninitialized
- ...
- fun:_Z*19cssm_DataAbortQuery17cssm_dl_db_handlel
- fun:CSSM_DL_DataAbortQuery
- fun:_ZN11SSDLSession14DataAbortQueryEll
- fun:_Z*19cssm_DataAbortQuery17cssm_dl_db_handlel
- fun:CSSM_DL_DataAbortQuery
- fun:tpDbFindIssuerCrl
- fun:tpVerifyCertGroupWithCrls
-}
-{
- # QTKit leak. See http://crbug.com/100772 and rdar://10319535.
- bug_100772
- Memcheck:Leak
- fun:calloc
- fun:QTMLCreateMutex
- fun:WarholCreateGlobals
- fun:INIT_QuickTimeLibInternal
- fun:pthread_once
- fun:INIT_QuickTimeLib
- fun:EnterMovies_priv
- fun:EnterMovies
- fun:TundraUnitInputFromTSFileEntry
- fun:TundraUnitVDIGInputEntry
- fun:TundraUnitCreateFromDescription
- fun:+[QTCaptureVDIGDevice _refreshDevices]
- fun:+[QTCaptureVDIGDevice devicesWithIOType:]
- fun:+[QTCaptureDevice devicesWithIOType:]
- fun:+[QTCaptureDevice inputDevices]
- fun:+[QTCaptureDevice inputDevicesWithMediaType:]
- ...
-}
-{
- # See http://crbug.com/141293
- bug_141293
- Memcheck:Uninitialized
- fun:deflateEnd
- fun:deflateSetDictionary
- fun:deflate
- fun:png_write_finish_row
- ...
- fun:png_write_find_filter
- fun:_cg_png_write_row
- fun:writeOnePng
- fun:_CGImagePluginWritePNG
- fun:CGImageDestinationFinalize
- fun:+[NSBitmapImageRep(NSBitmapImageFileTypeExtensions) representationOfImageRepsInArray:usingType:properties:]
- fun:-[NSBitmapImageRep(NSBitmapImageFileTypeExtensions) representationUsingType:properties:]
- fun:_ZN3gfx8internal24Get1xPNGBytesFromNSImageEP7NSImage
-}
-# Intentional leaks in AppKit, for an OS-level cache. Only appear on the first
-# run of each reboot.
-{
- bug_257276
- Memcheck:Leak
- fun:malloc_zone_calloc
- fun:ripr_Path
- fun:ripc_DrawPath
- fun:CGContextDrawPath
- fun:CGContextStrokePath
- fun:-[NSLayoutManager(NSTextViewSupport) _drawLineForGlyphRange:inContext:from:to:at:thickness:lineOrigin:breakForDescenders:flipped:]
- fun:-[NSLayoutManager(NSTextViewSupport) _drawLineForGlyphRange:type:baselineOffset:lineFragmentRect:lineFragmentGlyphRange:containerOrigin:isStrikethrough:]
- fun:-[NSLayoutManager(NSTextViewSupport) drawUnderlineForGlyphRange:underlineType:baselineOffset:lineFragmentRect:lineFragmentGlyphRange:containerOrigin:]
- fun:-[NSLayoutManager(NSTextViewSupport) _lineGlyphRange:type:lineFragmentRect:lineFragmentGlyphRange:containerOrigin:isStrikethrough:]
- fun:-[NSLayoutManager(NSTextViewSupport) underlineGlyphRange:underlineType:lineFragmentRect:lineFragmentGlyphRange:containerOrigin:]
- fun:-[NSLayoutManager(NSPrivate) _drawGlyphsForGlyphRange:atPoint:parameters:]
- fun:-[NSLayoutManager(NSTextViewSupport) drawGlyphsForGlyphRange:atPoint:]
- fun:-[NSStringDrawingTextStorage drawTextContainer:withRect:graphicsContext:baselineMode:scrollable:padding:]
- fun:_NSStringDrawingCore
- fun:-[NSString(NSExtendedStringDrawing) drawWithRect:options:attributes:]
- fun:-[HyperlinkButtonCell drawTitle:withFrame:inView:]
-}
-{
- bug_257276_b
- Memcheck:Leak
- fun:malloc_zone_malloc
- fun:_CFRuntimeCreateInstance
- fun:CFNumberCreate
- fun:get_colorspace
- fun:initImagePng
- fun:_CGImagePluginInitPNG
- fun:makeImagePlus
- fun:CGImageSourceCreateImageAtIndex
- fun:CGImageCreateWithPNGDataProvider
- fun:setCursorFromBundle
- fun:CoreCursorSet
- fun:-[NSCursor set]
-}
-
-# 2. Intentional unit test errors, stuff that is somehow a false positive
-# in our own code, or stuff that is so trivial it's not worth fixing.
-{
- # Mac Sandbox test cases are registered in a global map. This code is only
- # used in the unit test binary.
- Mac_Sandbox_Intentional_Leak1
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7content8internal19RegisterSandboxTestINS_*
- ...
- fun:_ZN16ImageLoaderMachO18doModInitFunctionsERKN11ImageLoader11LinkContextE
- fun:_ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj
- fun:_ZN11ImageLoader15runInitializersERKNS_11LinkContextE
- fun:_ZN4dyld24initializeMainExecutableEv
-}
-{
- # __cxa_get_globals leaks a structure when called for the first time
- __cxa_get_globals one-time leak
- Memcheck:Leak
- ...
- fun:__cxa_get_globals
-}
-{
- # Intentional leak of a time-based self-deleting object.
- bug_264886
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base26MessagePumpInstrumentation6CreateERKNS_9TimeDeltaES3_
- fun:_ZN4base24MessagePumpCFRunLoopBase21EnableInstrumentationEv
- fun:_ZN4base24MessagePumpNSApplicationC2Ev
- fun:_ZN4base24MessagePumpCrApplicationC2Ev
- fun:_ZN4base24MessagePumpCrApplicationC1Ev
- fun:_ZN4base14MessagePumpMac6CreateEv
-}
-
-# 3. Suppressions for real chromium bugs that are not yet fixed.
-{
- bug_17297
- Memcheck:Leak
- fun:malloc
- ...
- fun:+[NSColor keyboardFocusIndicatorColor]
- fun:+[NSColor colorWithCatalogName:colorName:]
- fun:+[NSCatalogColor newWithCoder:zone:]
- fun:-[NSColor initWithCoder:]
-}
-{
- bug_18218
- Memcheck:Leak
- fun:malloc
- fun:__addHandler2
- fun:__NSFinalizeThreadData
- fun:_pthread_tsd_cleanup
- fun:_pthread_exit
- fun:thread_start
-}
-{
- bug_20582
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base19MessagePumpLibevent19WatchFileDescriptorEibNS0_4ModeEPNS0_21FileDescriptorWatcherEPNS0_7WatcherE
- fun:_ZN4base16MessageLoopForIO19WatchFileDescriptorEibNS_4ModeEPN4base19MessagePumpLibevent21FileDescriptorWatcherEPNS2_7WatcherE
- fun:_ZN3IPC7Channel11ChannelImpl23ProcessOutgoingMessagesEv
-}
-{
- bug_21479a
- Memcheck:Leak
- fun:malloc_zone_malloc
- fun:_CFRuntimeCreateInstance
- fun:CFPasteboardCreate
- fun:CFPasteboardCreateUnique
- fun:+[NSPasteboard _pasteboardWithName:]
- fun:+[NSPasteboard pasteboardWithUniqueName]
-}
-{
- bug_21479b
- Memcheck:Leak
- fun:malloc_zone_malloc
- fun:_CFRuntimeCreateInstance
- fun:CFPasteboardCreate
- fun:+[NSPasteboard _pasteboardWithName:]
- fun:-[FindPasteboard findPboard]
-}
-{
- bug_27315
- Memcheck:Leak
- fun:_Znw*
- fun:_ZNSt8_Rb_treeIlSt4pairIKlPN4llvm8PassInfoEESt10_Select1stIS5_ESt4lessIlESaIS5_EE9_M_insertEPSt18_Rb_tree_node_baseSD_RKS5_
- fun:_ZNSt8_Rb_treeIlSt4pairIKlPN4llvm8PassInfoEESt10_Select1stIS5_ESt4lessIlESaIS5_EE13insert_uniqueERKS5_
- fun:_ZN4llvm16RegisterPassBase12registerPassEv
- fun:_Z41__static_initialization_and_destruction_0ii
- fun:_ZN16ImageLoaderMachO18doModInitFunctionsERKN11ImageLoader11LinkContextE
- fun:_ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj
- fun:_ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj
- fun:_ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj
- fun:_ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj
- fun:_ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj
- fun:_ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj
- fun:_ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj
- fun:_ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj
- fun:_ZN11ImageLoader15runInitializersERKNS_11LinkContextE
-}
-{
- bug_27644
- Memcheck:Leak
- ...
- fun:_ZN19WebSharedWorkerStub9OnConnectEii
-}
-{
- bug_28847a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN13WorkerService12CreateWorkerERK4GURLbbRKSbItN4base20string16_char_traitsESaItEEiiPN3IPC7Message6SenderEi
- fun:_ZN21ResourceMessageFilter14OnCreateWorkerERK4GURLbRKSbItN4base20string16_char_traitsESaItEEiPi
-}
-{
- bug_28847b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN16ChildProcessHost6LaunchERKSt6vectorISt4pairISsSsESaIS2_EEP11CommandLine
- fun:_ZN17WorkerProcessHost4InitEv
- fun:_ZN13WorkerService12CreateWorkerERK4GURLbbRKSbItN4base20string16_char_traitsESaItEEiiPN3IPC7Message6SenderEi
- fun:_ZN21ResourceMessageFilter14OnCreateWorkerERK4GURLbRKSbItN4base20string16_char_traitsESaItEEiPi
-}
-{
- bug_28072a
- Memcheck:Leak
- ...
- fun:CSBackupSetItemExcluded
- fun:_ZN8mac_util22SetFileBackupExclusionE*
- fun:_ZN7history15HistoryDatabase4InitE*
- fun:_ZN7history14HistoryBackend8InitImplEv
- fun:_ZN7history14HistoryBackend4InitEb
-}
-{
- bug_28072b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7history14HistoryBackend8InitImplEv
- fun:_ZN7history14HistoryBackend4InitEb
-}
-{
- bug_28072c
- Memcheck:Unaddressable
- ...
- fun:CSBackupSetItemExcluded
- fun:_ZN8mac_util22SetFileBackupExclusionE*
- fun:_ZN7history15HistoryDatabase4InitE*
- fun:_ZN7history14HistoryBackend8InitImplEv
- fun:_ZN7history14HistoryBackend4InitEb
-}
-{
- bug_28072d
- Memcheck:Unaddressable
- ...
- fun:CSBackupSetItemExcluded
- fun:_ZN4base3mac22SetFileBackupExclusionE*
- fun:_ZN7history15HistoryDatabase4InitE*
- fun:_ZN7history14HistoryBackend8InitImplERKSs
- fun:_ZN7history14HistoryBackend4InitERKSsb
-}
-
-# Note: bug 31634 happens very sporatically.
-{
- bug_31634
- Memcheck:Leak
- fun:malloc_zone_malloc
- fun:_CFRuntimeCreateInstance
- fun:__CFDictionaryInit
- fun:CFDictionaryCreate
- fun:classDescription
-}
-{
- bug_35164
- Memcheck:Uninitialized
- ...
- fun:gl_context_init_client_state
- fun:ogl_begin_rendering
- fun:CARenderOGLRender
- fun:view_draw
-}
-{
- bug_35625
- Memcheck:Leak
- fun:malloc_zone_malloc
- fun:_CFRuntimeCreateInstance
- fun:CGTypeCreateInstanceWithAllocator
- fun:CGTypeCreateInstance
- fun:CGFunctionCreate
- fun:CGGradientGetFunction
- fun:CGContextDrawLinearGradient
- ...
- fun:-[NSView _drawRect:clip:]
- fun:-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:]
-}
-{
- bug_40429
- Memcheck:Leak
- fun:calloc
- fun:_internal_class_createInstanceFromZone
- fun:_internal_class_createInstance
- fun:+[NSObject allocWithZone:]
- ...
- fun:_decodeObjectBinary
- fun:_decodeObject
- fun:-[NSButtonCell initWithCoder:]
- fun:_decodeObjectBinary
- fun:_decodeObject
- fun:-[NSControl initWithCoder:]
- fun:-[NSButton initWithCoder:]
- fun:_decodeObjectBinary
- fun:-[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:]
- fun:-[NSArray(NSArray) initWithCoder:]
- fun:_decodeObjectBinary
- fun:_decodeObject
- fun:-[NSView initWithCoder:]
- fun:_decodeObjectBinary
- fun:_decodeObject
-}
-{
- bug_40429b
- Memcheck:Leak
- fun:calloc
- fun:_internal_class_createInstanceFromZone
- ...
- fun:+[NSObject allocWithZone:]
- ...
- fun:_decodeObjectBinary
- fun:_decodeObject
- fun:-[NSNibConnector initWithCoder:]
- fun:-[NSNibControlConnector initWithCoder:]
- fun:_decodeObjectBinary
- fun:-[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:]
- fun:-[NSArray(NSArray) initWithCoder:]
- fun:_decodeObjectBinary
- fun:_decodeObject
- fun:-[NSIBObjectData initWithCoder:]
- fun:_decodeObjectBinary
-}
-{
- bug_40429c
- Memcheck:Leak
- fun:calloc
- fun:_internal_class_createInstanceFromZone
- fun:_internal_class_createInstance
- fun:+[NSObject allocWithZone:]
- fun:_decodeObjectBinary
- fun:_decodeObject
- fun:-[NSButtonCell initWithCoder:]
- fun:_decodeObjectBinary
- fun:_decodeObject
- fun:-[NSControl initWithCoder:]
- fun:-[NSButton initWithCoder:]
- fun:_decodeObjectBinary
- fun:-[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:]
- fun:-[NSArray(NSArray) initWithCoder:]
- fun:_decodeObjectBinary
- fun:_decodeObject
- fun:-[NSView initWithCoder:]
- fun:_decodeObjectBinary
- fun:_decodeObject
- fun:-[NSResponder initWithCoder:]
- fun:-[NSView initWithCoder:]
-}
-{
- bug_40659
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN19extension_file_util13LoadExtensionE*
- fun:_ZN12CrxInstaller15CompleteInstallEv
-}
-{
- bug_47949_a
- Memcheck:Uninitialized
- ...
- fun:ripc_DrawRects
- fun:CGContextFillRects
- fun:CGContextFillRect
- fun:NSRectFill
- fun:_ZN18FocusIndicationFix40currentOSHasSetFocusRingStyleInBitmapBugEv
-}
-{
- bug_47949_b
- Memcheck:Uninitialized
- ...
- fun:ripc_DrawRects
- fun:CGContextFillRects
- fun:CGContextFillRect
- fun:NSRectFill
- fun:_ZN18FocusIndicationFix40currentOSHasSetFocusRingStyleInBitmapBugEv
-}
-{
- bug_47949_c
- Memcheck:Leak
- ...
- fun:ripc_DrawRects
- fun:CGContextFillRects
- fun:CGContextFillRect
- fun:NSRectFill
- fun:_ZN18FocusIndicationFix40currentOSHasSetFocusRingStyleInBitmapBugEv
-}
-{
- bug_50286
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN11ProfileImpl14InitExtensionsEv
- fun:_ZN14ProfileManager10AddProfileEP7Profileb
- fun:_ZN14ProfileManager10GetProfileE*
- fun:_ZN14ProfileManager10GetProfileE*
- fun:_ZN14ProfileManager17GetDefaultProfileE*
- fun:_ZN12_GLOBAL__N_113CreateProfileE*
- fun:_Z11BrowserMainRK18MainFunctionParams
- fun:ChromeMain
- fun:main
-}
-{
- bug_50297_a
- Memcheck:Uninitialized
- fun:_ZN3IPC7Channel11ChannelImpl23ProcessIncomingMessagesEv
- fun:_ZN3IPC7Channel11ChannelImpl28OnFileCanReadWithoutBlockingEi
- fun:_ZN4base19MessagePumpLibevent21FileDescriptorWatcher28OnFileCanReadWithoutBlockingEiPS0_
- ...
- fun:event_process_active
- fun:event_base_loop
- fun:_ZN4base19MessagePumpLibevent3RunEPNS_11MessagePump8DelegateE
- fun:_ZN4base11MessageLoop11RunInternalEv
-}
-{
- bug_50297_b
- Memcheck:Uninitialized
- fun:_ZN6Pickle8FindNextEmPKcS1_
- fun:_ZN3IPC7Message8FindNextEPKcS2_
- fun:_ZN3IPC7Channel11ChannelImpl23ProcessIncomingMessagesEv
- fun:_ZN3IPC7Channel11ChannelImpl28OnFileCanReadWithoutBlockingEi
- fun:_ZN4base19MessagePumpLibevent21FileDescriptorWatcher28OnFileCanReadWithoutBlockingEiPS0_
- ...
- fun:event_process_active
- fun:event_base_loop
- fun:_ZN4base19MessagePumpLibevent3RunEPNS_11MessagePump8DelegateE
- fun:_ZN4base11MessageLoop11RunInternalEv
-}
-{
- bug_50638_a
- Memcheck:Uninitialized
- fun:gleUpdateViewScissorData
- ...
- fun:cgl_set_surface
- fun:ogl_attach_surface
- fun:ogl_render_fade_transition
- fun:ogl_render_layer_
- ...
- fun:ogl_render_layers
- fun:CARenderOGLRender
- fun:view_draw
-}
-{
- bug_50638_b
- Memcheck:Uninitialized
- fun:gleUpdateViewScissorData
- fun:cgl_set_surface
- fun:ogl_attach_surface
- fun:ogl_render_layer_contents_bg
- fun:ogl_render_layer_image_
- fun:ogl_render_layer_
- fun:ogl_render_layer_image_
- fun:ogl_render_layer_
- fun:ogl_render_layer_image_
- fun:ogl_render_layer_
- fun:ogl_render_layers
- fun:CARenderOGLRender
- fun:view_draw
-}
-{
- bug_50968
- Memcheck:Unaddressable
- fun:sqlite3PcacheClearSyncFlags
- fun:syncJournal
- fun:pagerStress
- fun:sqlite3PcacheFetch
- fun:sqlite3PagerAcquire2
- fun:sqlite3PagerAcquire
- fun:btreeGetPage
- fun:allocateBtreePage
- fun:btreeCreateTable
- fun:sqlite3BtreeCreateTable
- fun:sqlite3VdbeExec
- fun:sqlite3Step
- fun:sqlite3_step
- fun:sqlite3_exec
- fun:_ZN3sql10Connection7ExecuteEPKc
- fun:_ZN17TokenServiceTable4InitEv
- fun:_ZN11WebDatabase4InitE*
- fun:_ZN14WebDataService29InitializeDatabaseIfNecessaryEv
-}
-{
- bug_52681_a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN16ChildProcessHost13CreateChannelEv
- fun:_ZN18UtilityProcessHost12StartProcessE*
- fun:_ZN18UtilityProcessHost22StartExtensionUnpackerE*
-}
-{
- bug_52681_b
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN16ChildProcessHost13CreateChannelEv
- fun:_ZN18UtilityProcessHost12StartProcessE*
- fun:_ZN18UtilityProcessHost22StartExtensionUnpackerE*
- fun:_ZN26SandboxedUnpacker22StartProcessOnIOThreadE*
-}
-{
- bug_53742_a
- Memcheck:Uninitialized
- ...
- fun:_ZN16AudioQueueObject12ConvertInputEP9AQCommandRmb
- fun:_ZN16AudioQueueObject12RunConverterEi
- fun:_ZN18AQConverterManager17AQConverterThread3RunEv
- fun:_ZN18AQConverterManager17AQConverterThread20ConverterThreadEntryEPv
- fun:_ZN9CAPThread5EntryEPS_
- fun:_pthread_start
- fun:thread_start
-}
-{
- bug_53742_b
- Memcheck:Uninitialized
- fun:_ZN16AudioQueueObject12ConvertInputEP9AQCommandRmb
- fun:_ZN16AudioQueueObject5ResetEv
- fun:_ZN16AudioQueueObject4StopEb
-}
-{
- bug_53989_a
- Memcheck:Uninitialized
- fun:glvm_function_new
- fun:glvmCreateModularFunction
- fun:gleGetVertexSubmitFuncObjectAndKey
- fun:gleSetVertexArrayFunc
- fun:gleDrawArraysOrElements_ExecCore
- fun:gleDrawArraysOrElements_IMM_Exec
- fun:gl_context_draw
- fun:ogl_array_flush
- fun:ogl_primitives_end_
- ...
- fun:CARenderOGLRender
- fun:view_draw
- fun:view_display_link
- fun:link_callback
-}
-{
- bug_53989_b
- Memcheck:Uninitialized
- fun:glvm_function_hash_value_6
- fun:glvm_hash_set_*
- fun:glvm*ModularFunction*Cache
- fun:gleGetVertexSubmitFuncObjectAndKey
- fun:gleSetVertexArrayFunc
- fun:gleDrawArraysOrElements_ExecCore
- fun:gleDrawArraysOrElements_IMM_Exec
- fun:gl_context_draw
- fun:ogl_array_flush
- fun:ogl_primitives_end_
- ...
- fun:CARenderOGLRender
- fun:view_draw
- fun:view_display_link
-}
-{
- bug_53989_c
- Memcheck:Uninitialized
- ...
- fun:gleGetVertexSubmitFuncObjectAndKey
- fun:gleSetVertexArrayFunc
- fun:gleDrawArraysOrElements_ExecCore
- fun:gleDrawArraysOrElements_IMM_Exec
- fun:gl_context_draw
- fun:ogl_array_flush
- fun:ogl_primitives_end_
- ...
- fun:CARenderOGLRender
- fun:view_draw
- fun:view_display_link
- fun:link_callback
-}
-{
- bug_55773
- Memcheck:Unaddressable
- fun:sseCGSFill8by1
- fun:argb32_mark_constshape
- fun:argb32_mark
- fun:ripl_BltShape
- fun:ripc_Render
- fun:ripc_DrawRects
- fun:CGContextFillRects
- fun:CGContextFillRect
- fun:NSRectFill
- fun:-[NSView _drawRect:clip:]
- fun:-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:]
- fun:-[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
- fun:-[NSNextStepFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
- fun:-[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:]
- fun:-[NSView displayIfNeeded]
- fun:-[NSWindow displayIfNeeded]
- fun:-[NSWindow _reallyDoOrderWindow:relativeTo:findKey:forCounter:force:isModal:]
- fun:-[NSWindow orderWindow:relativeTo:]
- fun:-[NSWindow addChildWindow:ordered:]
- fun:-[GTMWindowSheetController(PrivateMethods) beginSystemSheet:withInfo:modalForView:withParameters:]
- fun:-[GTMWindowSheetController beginSystemSheet:modalForView:withParameters:]
- fun:-[GTMWindowSheetController beginSheet:modalForView:modalDelegate:didEndSelector:contextInfo:]
-}
-{
- bug_58860_a
- Memcheck:Unaddressable
- fun:memcpy
- ...
- fun:FSFindFolder
- fun:_ZN12_GLOBAL__N_124GetPluginCommonDirectoryE*
- fun:_ZN6webkit5npapi10PluginList20GetPluginDirectoriesE*
- fun:_ZN6webkit5npapi10PluginList11LoadPluginsEb
- fun:_ZN6webkit5npapi10PluginList10GetPluginsEbPSt6vectorI13WebPluginInfoSaIS2_EE
- fun:_ZN13PluginUpdater30GetPreferencesDataOnFileThreadEPv
-}
-{
- bug_58860_b
- Memcheck:Unaddressable
- ...
- fun:FSFindFolder
- fun:_ZN12_GLOBAL__N_124GetPluginCommonDirectoryE*
- fun:_ZN6webkit5npapi10PluginList20GetPluginDirectoriesE*
- fun:_ZN6webkit5npapi10PluginList11LoadPluginsEb
- fun:_ZN6webkit5npapi10PluginList10GetPluginsEbPSt6vectorI13WebPluginInfoSaIS2_EE
- fun:_ZN13PluginUpdater30GetPreferencesDataOnFileThreadEPv
-}
-{
- bug_51682a
- Memcheck:Leak
- fun:malloc
- fun:__cxa_get_globals
- fun:__cxa_allocate_exception
- fun:_ZN8Security9CssmError7throwMeEi
- fun:_ZN9RSASigner6verifyEPKvmS1_m
- fun:_ZN16SignatureContext5finalERKN8Security8CssmDataE
- fun:_ZL20cssm_VerifyDataFinallyPK9cssm_data
- fun:CSSM_VerifyDataFinal
- fun:_ZN4base17SignatureVerifier11VerifyFinalEv
- fun:_ZN36SignatureVerifierTest_BasicTest_Test8TestBodyEv
-}
-{
- bug_51682b
- Memcheck:Leak
- fun:malloc
- fun:__cxa_get_globals
- fun:__cxa_allocate_exception
- fun:_ZN8Security9CssmError7throwMeEi
- ...
- fun:SecTrustEvaluate
-}
-{
- bug_51682c
- Memcheck:Leak
- fun:realloc
- fun:_ZN16DefaultAllocator7reallocEPvm
- fun:_ZN8Security28CssmAllocatorMemoryFunctions12relayReallocEPvmS1_
- fun:_ZNK8Security19CssmMemoryFunctions7reallocEPvm
- fun:_ZN8Security28CssmMemoryFunctionsAllocator7reallocEPvm
- fun:_ZN10Attachment13upcallReallocElPvj
- fun:_ZN8Security13PluginSession7reallocEPvm
- fun:_ZN17DecodedExtensions12addExtensionERK9cssm_databPvbPK22SecAsn1Template_structPS1_
- fun:_ZN17DecodedExtensions13decodeFromNssEPP17NSS_CertExtension
- fun:_ZN11DecodedCertC2ER18AppleX509CLSessionRKN8Security8CssmDataE
- fun:_ZN18AppleX509CLSession22CertGetFirstFieldValueERKN8Security8CssmDataES3_RjRP9cssm_data
- fun:_Z27cssm_CertGetFirstFieldValuelPK9cssm_dataS1_PlPjPPS_
- fun:CSSM_CL_CertGetFirstFieldValue
-}
-{
- bug_60873
- Memcheck:Uninitialized
- fun:UTF8ToCString
- fun:_Z16UTF8ToClassicHFSPKcmmmPh
- fun:_Z14PathMakeFSSpecPKcP6FSSpecPh
- fun:NativePathNameToFSSpec
- fun:ConvertProfLocation
- fun:GetProfileLocationOfSuite
- fun:_CMGetProfileOfSuite
- fun:CMGetProfileByAVID
- fun:CMSCreateDisplayProfile
- fun:create
- fun:CMSTransformCreate
- fun:createBase
- fun:initialize
- fun:createColorTransform
- fun:CGColorTransformCreateMutable
- fun:CGBitmapColorTransformCreate
- fun:__CGBitmapContextDelegateCreate
- fun:__CGBitmapContextDelegateCreate
- fun:createBitmapContext
- fun:CGBitmapContextCreate
- fun:_ZN4skia12_GLOBAL__N_1L16CGContextForDataEPvii
- fun:_ZN4skia20BitmapPlatformDevice*
-}
-{
- bug_61737
- Memcheck:Uninitialized
- fun:_ZN2v88internal9preparser9PreParserINS0_7ScannerENS0_21PartialParserRecorderEE36ParseMemberWithNewPrefixesExpressionEPiPb
- fun:_ZN2v88internal9preparser9PreParserINS0_7ScannerENS0_21PartialParserRecorderEE14ParseNewPrefixEPiPb
- fun:_ZN2v88internal9preparser9PreParserINS0_7ScannerENS0_21PartialParserRecorderEE18ParseNewExpressionEPb
- fun:_ZN2v88internal9preparser9PreParserINS0_7ScannerENS0_21PartialParserRecorderEE27ParseLeftHandSideExpressionEPb
- fun:_ZN2v88internal9preparser9PreParserINS0_7ScannerENS0_21PartialParserRecorderEE22ParsePostfixExpressionEPb
- fun:_ZN2v88internal9preparser9PreParserINS0_7ScannerENS0_21PartialParserRecorderEE20ParseUnaryExpressionEPb
- fun:_ZN2v88internal9preparser9PreParserINS0_7ScannerENS0_21PartialParserRecorderEE21ParseBinaryExpressionEibPb
- fun:_ZN2v88internal9preparser9PreParserINS0_7ScannerENS0_21PartialParserRecorderEE26ParseConditionalExpressionEbPb
- fun:_ZN2v88internal9preparser9PreParserINS0_7ScannerENS0_21PartialParserRecorderEE25ParseAssignmentExpressionEbPb
- ...
- fun:_ZN2v88internal9preparser9PreParserINS0_7ScannerENS0_21PartialParserRecorderEE19ParseSourceElementsEiPb
- fun:_ZN2v88internal9preparser9PreParserINS0_7ScannerENS0_21PartialParserRecorderEE15PreParseProgramEPS3_PS4_b
- fun:_ZN2v88internal9ParserApi15PartialPreParseENS0_6HandleINS0_6StringEEEPN7unibrow15CharacterStreamEPNS_9ExtensionE
- fun:_ZN2v88internal8Compiler7CompileENS0_6HandleINS0_6StringEEENS2_INS0_6ObjectEEEiiPNS_9ExtensionEPNS0_14ScriptDataImplES6_NS0_11NativesFlagE
-}
-{
- bug_61929
- Memcheck:Leak
- fun:calloc
- fun:IOAlloc
- fun:CMOpenOrNewAccess
- fun:CMOpenProfile
- fun:_CMGetProfileOfSuite
- fun:CMGetProfileByAVID
- fun:CMSCreateDisplayProfile
- fun:create
- fun:CMSTransformCreate
- fun:createBase
- fun:initialize
- fun:createColorTransform
- fun:CGColorTransformCreateMutable
- fun:CGBitmapColorTransformCreate
- fun:__CGBitmapContextDelegateCreate
- fun:__CGBitmapContextDelegateCreate
- fun:createBitmapContext
- fun:CGBitmapContextCreate
-}
-{
- bug_63024a
- Memcheck:Uninitialized
- fun:memcpy
- fun:_ZN8Security13NameValuePair9CloneDataERKNS_8CssmDataE
- fun:_ZN8Security13NameValuePairC2ERKNS_8CssmDataE
- fun:_ZN8Security19NameValueDictionary12MakeFromDataERKNS_8CssmDataE
- fun:_ZN8Security19NameValueDictionaryC2ERKNS_8CssmDataE
- fun:_ZN8Security12KeychainCore12CCallbackMgr7consumeEjjRKNS_8CssmDataE
- fun:_ZN8Security14SecurityServer16NotificationPort7receiveERKNS_12MachPlusPlus7MessageE
- fun:_ZN8Security12MachPlusPlus10CFAutoPort10cfCallbackEP12__CFMachPortPvlS4_
-}
-{
- bug_63024b
- Memcheck:Uninitialized
- fun:_ZN8Security19NameValueDictionary12MakeFromDataERKNS_8CssmDataE
- fun:_ZN8Security19NameValueDictionaryC2ERKNS_8CssmDataE
- fun:_ZN8Security12KeychainCore12CCallbackMgr7consumeEjjRKNS_8CssmDataE
- fun:_ZN8Security14SecurityServer16NotificationPort7receiveERKNS_12MachPlusPlus7MessageE
- fun:_ZN8Security12MachPlusPlus10CFAutoPort10cfCallbackEP12__CFMachPortPvlS4_
-}
-{
- bug_63024c
- Memcheck:Free
- fun:_ZdlPv
- fun:_ZN8Security19NameValueDictionaryD2Ev
- fun:_ZN8Security12KeychainCore12CCallbackMgr7consumeEjjRKNS_8CssmDataE
- fun:_ZN8Security14SecurityServer16NotificationPort7receiveERKNS_12MachPlusPlus7MessageE
- fun:_ZN8Security12MachPlusPlus10CFAutoPort10cfCallbackEP12__CFMachPortPvlS4_
-}
-{
- bug_63670
- Memcheck:Uninitialized
- fun:NSIntersectionRect
- fun:-[BrowserWindowController tabContentsViewFrameWillChange:frameRect:]
- fun:-[TabStripController tabContentsViewFrameWillChange:frameRect:]
- fun:-[TabContentsController tabContentsViewFrameWillChange:]
- fun:-[ResizeNotificationView setFrame:]
- fun:-[TabStripController swapInTabAtIndex:]
- fun:-[TabStripController selectTabWithContents:previousContents:atIndex:userGesture:]
- fun:_ZN27TabStripModelObserverBridge13TabSelectedAtEP18TabContentsWrapperS1_ib
- fun:_ZN13TabStripModel26ChangeSelectedContentsFromEP18TabContentsWrapperib
- fun:_ZN13TabStripModel19InsertTabContentsAtEiP18TabContentsWrapperi
- fun:_ZN13TabStripModel14AddTabContentsEP18TabContentsWrapperiji
- fun:_ZN7browser8NavigateEPNS_14NavigateParamsE
- fun:_ZN11BrowserInit17LaunchWithProfile17OpenTabsInBrowserEP7BrowserbRKSt6vectorINS0_3TabESaIS4_EE
- fun:_ZN11BrowserInit17LaunchWithProfile17OpenURLsInBrowserEP7BrowserbRKSt6vectorI4GURLSaIS4_EE
- fun:_ZN11BrowserInit17LaunchWithProfile17ProcessLaunchURLsEbRKSt6vectorI4GURLSaIS2_EE
- fun:_ZN11BrowserInit17LaunchWithProfile6LaunchEP7Profileb
- fun:_ZN11BrowserInit13LaunchBrowserE*
- fun:_ZN11BrowserInit18ProcessCmdLineImplE*
- fun:_ZN11BrowserInit5StartE*
-}
-{
- bug_64463
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base16MessageLoopProxy22currentEv
- fun:_ZN3net12CertVerifier7RequestC2EPS0_PNS_15X509CertificateERKSsiPNS_16CertVerifyResultEP14CallbackRunnerI6Tuple1IiEE
-}
-{
- bug_65940
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN3IPC11SyncChannelC2ERKNS_13ChannelHandleENS_7Channel4ModeEPNS4_8ListenerEP11MessageLoopbPN4base13WaitableEventE
- fun:_ZN3IPC11SyncChannelC1ERKNS_13ChannelHandleENS_7Channel4ModeEPNS4_8ListenerEP11MessageLoopbPN4base13WaitableEventE
- fun:_ZN11ChildThread4InitEv
- fun:_ZN11ChildThreadC2Ev
- fun:_ZN13UtilityThreadC2Ev
- fun:_ZN13UtilityThreadC1Ev
-}
-{
- bug_67291
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN16ExtensionInfoMap12AddExtensionEPK9Extension
-}
-{
- bug_68090
- Memcheck:Uninitialized
- fun:_ZL10AddEncHashP12EncHashTablePKhij
- fun:_Z16BuildMacEncTablev
- fun:_ZN15TParsingContext13GetParseProcsEv
- fun:_ZN19TSFNTParsingContext13GetParseProcsEv
- fun:_ZN18TCIDParsingContext13GetParseProcsEv
- fun:_ZN16TType1OTFCIDFont20ParseCFFCIDFontDictsERK19TType1CFFDescriptorP32Type1ProtectionEvaluationContextRVt
- fun:_ZN16TType1OTFCIDFont15ParseCFFCIDFontERK19TType1CFFDescriptorP32Type1ProtectionEvaluationContext
- fun:_ZN16TType1OTFCIDFontC2ERK19TType1CFFDescriptor
- fun:_ZN10TType1Font7GetFontEPK5TFont
- fun:_ZN12TType1StrikeC2EPK5TFontmPK13FontVariationRK15StrikeTransform
- fun:_ZN12TType1Strike9GetStrikeERK18TStrikeDescription
- fun:_Z19Type1GetStrikeSpecsmPK18TStrikeDescriptionP11StrikeSpecs
- fun:_ZNK19TConcreteFontScaler14GetFontMetricsEv
- ...
- fun:_ZNK9TBaseFont20CalculateFontMetricsEb
- fun:_ZNK9TBaseFont15InitFontMetricsEv
- fun:_ZNK9TBaseFont16GetStrikeMetricsEfPK17CGAffineTransformb
-}
-{
- bug_73036
- Memcheck:Leak
- fun:malloc_zone_calloc
- fun:_internal_class_createInstanceFromZone
- fun:NSAllocateObject
- fun:+[NSHashTable alloc]
- fun:+[NSTrackingArea initialize]
- fun:_class_initialize
- fun:_class_lookupMethodAndLoadCache
- fun:objc_msgSend
-}
-{
- bug_73299_b
- Memcheck:Leak
- fun:_Znw*
- ...
- fun:_ZN24BrowserRenderProcessHost4InitEb
- fun:_ZN14RenderViewHost16CreateRenderViewERKSbItN4base20string16_char_traitsESaItEE
- fun:_ZN13ExtensionHost19CreateRenderViewNowEv
- fun:_ZN13ExtensionHost20ProcessCreationQueue14ProcessOneHostEv
-}
-{
- bug_75136a
- Memcheck:Unaddressable
- ...
- fun:CFBundlePreflightExecutable
-}
-{
- bug_75136b
- Memcheck:Unaddressable
- ...
- fun:CFBundlePreflightExecutable
-}
-{
- bug_75142a
- Memcheck:Unaddressable
- ...
- fun:CGContextShowGlyphsWithAdvances
-}
-{
- bug_75142b
- Memcheck:Leak
- ...
- fun:CGContextShowGlyphsWithAdvances
-}
-{
- bug_75714_a
- Memcheck:Unaddressable
- ...
- fun:argb32_mark
- fun:ripl_BltShape
- ...
- fun:ripc_Render*
- ...
- fun:-[NSView _drawRect:clip:]
- fun:-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:]
- ...
- fun:-[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
- fun:-[NSNextStepFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
- fun:-[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:]
- fun:-[NSView displayIfNeeded]
-}
-{
- bug_75714_b
- Memcheck:Unaddressable
- ...
- fun:argb32_mark
- fun:ripl_BltShape
- fun:ripc_Render
- ...
- fun:-[NSView _drawRect:clip:]
- fun:-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:]
- ...
- fun:-[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
- fun:-[NSNextStepFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
- fun:-[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:]
- fun:-[NSView displayIfNeeded]
-}
-{
- bug_75714_c
- Memcheck:Unaddressable
- ...
- fun:argb32_image
- fun:ripd_Mark
- fun:ripl_BltImage
- ...
- fun:ripc_Render*
- ...
- fun:-[NSView _drawRect:clip:]
- fun:-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:]
- ...
- fun:-[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
- fun:-[NSNextStepFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
- fun:-[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:]
- fun:-[NSView displayIfNeeded]
-}
-{
- bug_77265_a
- Memcheck:Leak
- fun:calloc
- ...
- fun:-[BubbleView drawRect:]
- fun:-[NSView _drawRect:clip:]
- fun:-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:]
- fun:-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:]
- fun:-[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
- fun:-[NSNextStepFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
- fun:-[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:]
- fun:-[NSView displayIfNeeded]
- fun:-[NSWindow _setFrameCommon:display:stashSize:]
- fun:-[NSWindow setFrame:display:]
- fun:-[NSWindow setValue:forKey:]
- fun:-[NSObject(NSKeyValueCoding) setValue:forKeyPath:]
- fun:-[NSInFlightAnimation advanceToTime:]
- fun:-[NSAnimationManager animationTimerFired:]
- fun:__NSFireTimer
-}
-{
- bug_77265_b
- Memcheck:Leak
- fun:calloc
- fun:CGClipStackCreateMutableCopy
- fun:maybeCopyClipState
- fun:CGGStateClipToRect
- fun:CGContextClipToRect
- fun:CGContextClipToRects
- fun:NSRectClipList
- fun:-[NSView _drawRect:clip:]
- fun:-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:]
- fun:-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:]
- fun:-[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
- fun:-[NSNextStepFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
- fun:-[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:]
- fun:-[NSView displayIfNeeded]
- fun:-[NSWindow _setFrameCommon:display:stashSize:]
- fun:-[NSWindow setFrame:display:]
- fun:-[NSWindow setValue:forKey:]
- fun:-[NSObject(NSKeyValueCoding) setValue:forKeyPath:]
- fun:-[NSInFlightAnimation advanceToTime:]
- fun:-[NSAnimationManager animationTimerFired:]
- fun:__NSFireTimer
-}
-{
- bug_77265_c
- Memcheck:Leak
- fun:calloc
- fun:CGClipStackCreateMutableCopy
- fun:maybeCopyClipState
- fun:CGGStateClipToRect
- fun:CGContextClipToRect
- fun:NSRectClip
- fun:-[NSFocusState flush]
- fun:-[NSView lockFocusIfCanDraw]
- fun:-[NSView lockFocus]
- fun:-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:]
- fun:-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:]
- fun:-[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
- fun:-[NSNextStepFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
- fun:-[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:]
- fun:-[NSView displayIfNeeded]
- fun:-[NSWindow _setFrameCommon:display:stashSize:]
- fun:-[NSWindow setFrame:display:]
- fun:-[NSWindow setValue:forKey:]
- fun:-[NSObject(NSKeyValueCoding) setValue:forKeyPath:]
- fun:-[NSInFlightAnimation advanceToTime:]
- fun:-[NSAnimationManager animationTimerFired:]
- fun:__NSFireTimer
-}
-{
- bug_77388_a
- Memcheck:Uninitialized
- ...
- fun:PrivateMPEntryPoint
- fun:_pthread_start
- fun:thread_start
-}
-{
- bug_77388_b
- Memcheck:Uninitialized
- ...
- fun:PrivateMPEntryPoint
- fun:_pthread_start
- fun:thread_start
-}
-{
- bug_77388_c
- Memcheck:Param
- access_extended(entries)
- fun:accessx_np
- ...
- fun:PrivateMPEntryPoint
- fun:_pthread_start
- fun:thread_start
-}
-{
- bug_77388_d
- Memcheck:Uninitialized
- fun:TestAndSetClear
- fun:TestAndClear
- fun:_ZN5TNode28UnregisterChangeNotificationERK11TCountedPtrI21TClientChangeNotifierEmb
- fun:NodeUnregisterChangeNotification
- fun:NodeUnRegisterChildChangedNotification
- fun:-[NSNavFBENode _unregisterForChildChangedNotifications]
- fun:_commonTearDown_NSNavFBENode
- fun:-[NSNavFBENode dealloc]
- fun:CFRelease
- fun:__CFSetDeallocate
- fun:_CFRelease
- fun:-[NSOutlineView dealloc]
- fun:-[NSTrackableOutlineView dealloc]
-}
-{
- bug_79994
- Memcheck:Uninitialized
- ...
- fun:gleUpdateState
- fun:gleInitializeContext
- fun:gliCreateContext
- fun:CGLRestoreDispatchFunction
- fun:CGLCreateContext
-}
-{
- bug_80239_a
- Memcheck:Unaddressable
- ...
- fun:CGLCreateContext
- fun:-[NSOpenGLContext initWithFormat:shareContext:]
- fun:-[AcceleratedPluginView initWithRenderWidgetHostViewMac:pluginHandle:]
- fun:_ZN23RenderWidgetHostViewMac30AllocateFakePluginWindowHandleEbb
- fun:_ZN23RenderWidgetHostViewMac21GetCompositingSurfaceEv
- fun:_ZN16RenderWidgetHost21GetCompositingSurfaceEv
- fun:_ZN14RenderViewHost16CreateRenderViewERKSbItN4base20string16_char_traitsESaItEE
- fun:_ZN15WebContentsImpl32CreateRenderViewForRenderManagerEP14RenderViewHost
- fun:_ZN22RenderFrameHostManager14InitRenderViewEP14RenderViewHostRK15NavigationEntry
-}
-{
- bug_80239_b
- Memcheck:Unaddressable
- ...
- fun:CVDisplayLinkSetCurrentCGDisplayFromOpenGLContext
- fun:-[AcceleratedPluginView initWithRenderWidgetHostViewMac:pluginHandle:]
- fun:_ZN23RenderWidgetHostViewMac30AllocateFakePluginWindowHandleEbb
- fun:_ZN23RenderWidgetHostViewMac21GetCompositingSurfaceEv
- fun:_ZN16RenderWidgetHost21GetCompositingSurfaceEv
- fun:_ZN14RenderViewHost16CreateRenderViewERKSbItN4base20string16_char_traitsESaItEE
- fun:_ZN15WebContentsImpl32CreateRenderViewForRenderManagerEP14RenderViewHost
-}
-{
- bug_82328
- Memcheck:Unaddressable
- fun:CGSFillDRAM64
- fun:argb32_mark_pixelshape
- ...
- fun:ripc_DrawImages
- fun:CGContextDrawImages
- fun:_ZN11CUIRenderer19DrawWindowFrameDarkEPK10CUIContext
- fun:_ZN11CUIRenderer4DrawE6CGRectP9CGContextPK14__CFDictionaryPS5_
- fun:_NSDrawThemeBackground
-}
-{
- bug_82682
- Memcheck:Leak
- ...
- fun:_ZN6webkit5npapi12_GLOBAL__N_119ReadPlistPluginInfoE*
-}
-{
- bug_84329
- Memcheck:Unaddressable
- fun:_ZN3WTF17ChromiumThreading16callOnMainThreadEPFvPvES1_
- fun:_ZN3WTF16callOnMainThreadEPFvPvES0_
- fun:_ZN5blink13WebWorkerBase24dispatchTaskToMainThreadEN3WTF10PassOwnPtrIN7WebCore22ScriptExecutionContext4TaskEEE
- fun:_ZN5blink13WebWorkerBase21reportPendingActivityEb
-}
-{
- bug_86303a
- Memcheck:Unaddressable
- ...
- fun:objc_msgSend*
-}
-{
- bug_86303b
- Memcheck:Unaddressable
- ...
- fun:-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:]
- fun:-[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
- fun:-[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
- fun:-[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
- fun:-[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
- fun:-[NSThemeFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
- fun:-[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:]
- fun:-[NSView displayIfNeeded]
- fun:-[NSWindow displayIfNeeded]
- fun:_handleWindowNeedsDisplay
-}
-{
- bug_87461
- Memcheck:Leak
- ...
- fun:_ZN15StatusBubbleMac6CreateEv
- fun:_ZN15StatusBubbleMacC2EP8NSWindowP11objc_object
- fun:-[BrowserWindowController initWithBrowser:takeOwnership:]
- fun:-[BrowserWindowController initWithBrowser:]
- fun:_ZN13BrowserWindow19CreateBrowserWindowEP7Browser
- fun:_ZN7Browser19CreateBrowserWindowEv
- fun:_ZN7Browser17InitBrowserWindowEv
- fun:_ZN7Browser6CreateEP7Profile
- fun:_ZN11BrowserInit17LaunchWithProfile17OpenTabsInBrowserEP7BrowserbRKSt6vectorINS0_3TabESaIS4_EE
- fun:_ZN11BrowserInit17LaunchWithProfile17OpenURLsInBrowserEP7BrowserbRKSt6vectorI4GURLSaIS4_EE
- fun:_ZN11BrowserInit17LaunchWithProfile17ProcessLaunchURLsEbRKSt6vectorI4GURLSaIS2_EE
- fun:_ZN11BrowserInit17LaunchWithProfile6LaunchEP7ProfileRKSt6vectorI4GURLSaIS4_EEb
- fun:_ZN11BrowserInit13LaunchBrowserE*
- fun:_ZN11BrowserInit18ProcessCmdLineImplE*
- fun:_ZN11BrowserInit5StartE*
-}
-{
- bug_87629
- Memcheck:Leak
- ...
- fun:realloc
- fun:new_sem_from_pool
-}
-{
- bug_90976
- Memcheck:Unaddressable
- ...
- fun:_CFPropertyListCreateFromXMLData
- fun:CFPropertyListCreateFromStream
- fun:+[CFXPreferencesPropertyListSource createPlistFromFile:statInfo:]
- fun:-[CFXPreferencesPropertyListSource synchronize]
- fun:CFPreferencesSynchronize
- fun:_CSBackupSettingsIsPathExcluded
- fun:CSBackupIsItemExcluded
- fun:pager_open_journal
- fun:pager_write
- fun:sqlite3PagerWrite
- fun:newDatabase
- fun:sqlite3BtreeBeginTrans
- fun:sqlite3VdbeExec
- fun:sqlite3Step
- fun:sqlite3_step
- fun:sqlite3_exec
- fun:_ZN3sql10Connection7ExecuteEPKc
-}
-{
- bug_91889_a
- Memcheck:Unaddressable
- fun:_ZN4base12_GLOBAL__N_122StackDumpSignalHandlerEiP9__siginfoP17__darwin_ucontext
- obj:*
- fun:IOCFUnserialize
- fun:IORegistryEntrySearchCFProperty
- fun:_ZN12_GLOBAL__N_121SearchPortForPropertyEjPK10__CFString
- fun:_ZN12_GLOBAL__N_123CollectPCIVideoCardInfoEP7GPUInfo
- fun:_ZN18gpu_info_collector30CollectPreliminaryGraphicsInfoEP7GPUInfo
- fun:_ZN14GpuDataManagerC2Ev
- fun:_ZN14GpuDataManagerC1Ev
- fun:_ZN22DefaultSingletonTraitsI14GpuDataManagerE3NewEv
- fun:_ZN9SingletonI14GpuDataManager22DefaultSingletonTraitsIS0_ES0_E3getEv
- fun:_ZN14GpuDataManager11GetInstanceEv
- fun:_ZN19GpuBlacklistUpdater17SetupOnFileThreadEv
-}
-{
- bug_91889_b
- Memcheck:Unaddressable
- fun:IOCFUnserializeparse
- fun:IOCFUnserialize
- fun:IORegistryEntrySearchCFProperty
- fun:_ZN12_GLOBAL__N_121SearchPortForPropertyEjPK10__CFString
- fun:_ZN12_GLOBAL__N_123CollectPCIVideoCardInfoEP7GPUInfo
- fun:_ZN18gpu_info_collector30CollectPreliminaryGraphicsInfoEP7GPUInfo
- fun:_ZN14GpuDataManagerC2Ev
- fun:_ZN14GpuDataManagerC1Ev
- fun:_ZN22DefaultSingletonTraitsI14GpuDataManagerE3NewEv
- fun:_ZN9SingletonI14GpuDataManager22DefaultSingletonTraitsIS0_ES0_E3getEv
- fun:_ZN14GpuDataManager11GetInstanceEv
- fun:_ZN19GpuBlacklistUpdater17SetupOnFileThreadEv
-}
-{
- bug_91889_c
- Memcheck:Unaddressable
- fun:_ZN4base12_GLOBAL__N_122StackDumpSignalHandlerEiP9__siginfoP17__darwin_ucontext
- obj:*
- obj:*
- fun:IOCFUnserialize
- fun:IORegistryEntrySearchCFProperty
- fun:_ZN12_GLOBAL__N_121SearchPortForPropertyEjPK10__CFString
- fun:_ZN12_GLOBAL__N_123CollectPCIVideoCardInfoEP7GPUInfo
- fun:_ZN18gpu_info_collector30CollectPreliminaryGraphicsInfoEP7GPUInfo
- fun:_ZN14GpuDataManagerC2Ev
- fun:_ZN14GpuDataManagerC1Ev
- fun:_ZN22DefaultSingletonTraitsI14GpuDataManagerE3NewEv
- fun:_ZN9SingletonI14GpuDataManager22DefaultSingletonTraitsIS0_ES0_E3getEv
- fun:_ZN14GpuDataManager11GetInstanceEv
- fun:_ZN19GpuBlacklistUpdater17SetupOnFileThreadEv
-}
-{
- bug_91892
- Memcheck:Leak
- fun:_Znw*
- fun:sendSimpleEventToSelf
- fun:aeInitializeFromHIToolbox
- fun:INIT_AppleEvents
- fun:_FirstEventTime
- fun:RunCurrentEventLoopInMode
- fun:ReceiveNextEventCommon
- fun:BlockUntilNextEventMatchingListInMode
- fun:_DPSNextEvent
- fun:-[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:]
- fun:-[NSApplication run]
- fun:_ZN4base24MessagePumpNSApplication5DoRunEPNS_11MessagePump8DelegateE
- fun:_ZN4base24MessagePumpCFRunLoopBase3RunEPNS_11MessagePump8DelegateE
- fun:_ZN4base11MessageLoop11RunInternalEv
- fun:_ZN4base11MessageLoop10RunHandlerEv
- fun:_ZN4base11MessageLoop13RunAllPendingEv
- fun:_ZN20InProcessBrowserTest23RunTestOnMainThreadLoopEv
-}
-{
- bug_92579a
- Memcheck:Unaddressable
- fun:_ZN15CVCGDisplayLink17setCurrentDisplayEj
- fun:CVDisplayLinkSetCurrentCGDisplayFromOpenGLContext
-}
-{
- bug_92579b
- Memcheck:Unaddressable
- fun:_ZN15CVCGDisplayLink17setCurrentDisplayEj
- fun:_ZN15CVCGDisplayLink18initWithCGDisplaysEPjlPi
- fun:CVDisplayLinkCreateWithCGDisplays
- fun:CVDisplayLinkCreateWithActiveCGDisplays
-}
-{
- bug_92579c
- Memcheck:Unaddressable
- fun:IOCFUnserializeparse
- fun:IOCFUnserialize
- fun:IORegistryEntryCreateCFProperties
- fun:_ZN15CVCGDisplayLink17setCurrentDisplayEj
- fun:_ZN15CVCGDisplayLink18initWithCGDisplaysEPjlPi
- fun:CVDisplayLinkCreateWithCGDisplays
- fun:CVDisplayLinkCreateWithActiveCGDisplays
- fun:-[AcceleratedPluginView initWithRenderWidgetHostViewMac:pluginHandle:]
-}
-{
- bug_93036
- Memcheck:Unaddressable
- fun:+[NSPICTImageRep _verifyDataIsPICT:]
- fun:+[NSImageRep imageRepClassForData:]
- fun:-[NSImage initWithData:]
- fun:_ZN2ui14ResourceBundle19GetNativeImageNamedEi
- fun:-[BookmarkBarController initWithBrowser:initialWidth:delegate:resizeDelegate:]
-}
-{
- bug_93932_a
- Memcheck:Overlap
- fun:memcpy
- fun:vp8_decode_update_thread_context
- fun:update_context_from_thread
- ...
- fun:ff_thread_decode_frame
- fun:avcodec_decode_video2
- fun:_ZN5media23FFmpegVideoDecodeEngine6DecodeERK13scoped_refptrINS_6BufferEEPS1_INS_10VideoFrameEE
- fun:_ZN5media18FFmpegVideoDecoder14DoDecodeBufferERK13scoped_refptrINS_6BufferEE
-}
-{
- bug_93932_b
- Memcheck:Overlap
- fun:memcpy
- fun:vp8_decode_update_thread_context
- fun:update_context_from_thread
- fun:frame_thread_free
- fun:avcodec_close
- ...
- fun:_ZN5media23FFmpegVideoDecodeEngineD0Ev
- fun:_ZN10scoped_ptrIN5media23FFmpegVideoDecodeEngineEE5resetEPS1_
- fun:_ZN5media27FFmpegVideoDecodeEngineTestD2Ev
- fun:_ZN5media51FFmpegVideoDecodeEngineTest_DecodeFrame_Normal_TestD0Ev
-}
-{
- bug_96300
- Memcheck:Leak
- ...
- fun:_ZN8Security12KeychainCore5Trust8evaluate*
- fun:SecTrustEvaluate
- fun:_ZN3net17CertVerifyProcMac14VerifyInternal*
- fun:_ZN3net14CertVerifyProc6Verify*CertVerifyResult*
-}
-{
- bug_96559a
- Memcheck:Uninitialized
- fun:PyObject_Realloc
-}
-{
- bug_96559b
- Memcheck:Unaddressable
- fun:PyObject_Realloc
-}
-{
- bug_96559c
- Memcheck:Uninitialized
- fun:PyObject_Realloc
-}
-{
- bug_96559d
- Memcheck:Uninitialized
- fun:PyObject_Free
-}
-{
- bug_96559e
- Memcheck:Unaddressable
- fun:PyObject_Free
-}
-{
- bug_96559f
- Memcheck:Uninitialized
- fun:PyObject_Free
-}
-{
- bug_96671
- Memcheck:Uninitialized
- ...
- fun:_ZNK12MockKeychain26SearchCreateFromAttributesEPKvmPK24SecKeychainAttributeListPP26OpaqueSecKeychainSearchRef
- fun:_ZN14KeychainSearch17FindMatchingItemsEPSt6vectorIP24OpaqueSecKeychainItemRefSaIS2_EE
-}
-{
- bug_96689
- Memcheck:Uninitialized
- fun:_ZN3net11SSLHostInfo10ParseInnerERKSs
- fun:_ZN3net11SSLHostInfo5ParseERKSs
- fun:_ZN3net25DiskCacheBasedSSLHostInfo22DoWaitForDataReadyDoneEv
- fun:_ZN3net25DiskCacheBasedSSLHostInfo6DoLoopEi
- fun:_ZN3net25DiskCacheBasedSSLHostInfo12OnIOCompleteEPNS0_22CacheOperationDataShimEi
-}
-{
- bug_100022
- Memcheck:Unaddressable
- ...
- fun:_ZNK11ImageLoader15containsAddressEPKv
- fun:_ZN4dyld14bindLazySymbolEPK11mach_headerPm
- fun:stub_binding_helper_interface2
- obj:/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Resources/libRIP.A.dylib
- obj:/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Resources/libRIP.A.dylib
- fun:CGContextDrawImage
- fun:_Z23PlotISImageRefInContextPvP9CGContext6CGRectssPK8RGBColormPK20_ISImageRefCallbacks
- fun:PlotIconRefInContext
-}
-{
- bug_100983
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base18StatisticsRecorder31RegisterOrDeleteDuplicateRangesEPNS_9HistogramE
- fun:_ZN4base18StatisticsRecorder25RegisterOrDeleteDuplicateEPNS_9HistogramE
- fun:_ZN10disk_cache14StatsHistogram10FactoryGetERKSs
- fun:_ZN10disk_cache5Stats4InitEPNS_11BackendImplEPj
- fun:_ZN10disk_cache11BackendImpl8SyncInitEv
- fun:_ZN10disk_cache9BackendIO23ExecuteBackendOperationEv
-}
-{
- bug_101359
- Memcheck:Leak
- fun:malloc
- fun:CGFontNameTableCreate
- fun:get_name_table
- fun:CGFontCopyPostScriptName
- fun:CGFontCreateFontsWithURL
-}
-{
- bug_102327_a
- Memcheck:Unaddressable
- fun:_ZNK15tracked_objects10ThreadData26OnThreadTerminationCleanupEv
- fun:_ZN15tracked_objects10ThreadData19OnThreadTerminationEPv
- fun:_pthread_tsd_cleanup
- fun:_pthread_exit
- fun:thread_start
-}
-{
- bug_102327_b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN15tracked_objects10ThreadData10InitializeEv
- fun:_ZN15tracked_objects10ThreadData23InitializeThreadContextERKSs
-}
-{
- bug_102621
- Memcheck:Uninitialized
- ...
- fun:-[NSPasteboard(ChimeraPasteboardURLUtils) getURLs:andTitles:convertingFilenames:]
- fun:_ZN2ui33PopulateURLAndTitleFromPasteboardEP4GURLPSbItN4base20string16_char_traitsESaItEEP12NSPasteboarda
- fun:_ZN24WebDragDestTest_URL_Test8TestBodyEv
-}
-{
- bug_102920
- Memcheck:Unaddressable
- fun:MDItemCreate
- fun:CSBackupSetItemExcluded
- fun:_ZN4base3mac22SetFileBackupExclusionE*
- fun:_ZN7history17ThumbnailDatabase4InitE*
- fun:_ZN7history14HistoryBackend8InitImplERKSs
- fun:_ZN7history14HistoryBackend4InitERKSsb
-}
-{
- bug_104756
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN3IPC11SyncMessage13GenerateReplyEPKNS_7MessageE
- fun:_ZN3IPC17SyncMessageSchemaI6Tuple1IbES1_IRSt6vectorIN6webkit13WebPluginInfoESaIS5_EEEE32DispatchDelayReplyWithSendParamsI19RenderMessageFilterMSC_FvbPNS_7MessageEEEEbbRKS2_PKSD_PT_T0_
- fun:_ZN22ViewHostMsg_GetPlugins18DispatchDelayReplyI19RenderMessageFilterMS1_FvbPN3IPC7MessageEEEEbPKS3_PT_T0_
- fun:_ZN19RenderMessageFilter17OnMessageReceivedERKN3IPC7MessageEPb
- fun:_ZN20BrowserMessageFilter15DispatchMessageERKN3IPC7MessageE
-}
-{
- bug_104786
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKjiEEE8allocateEmPKv
- fun:_ZNSt8_Rb_treeIjSt4pairIKjiESt10_Select1stIS2_ESt4lessIjESaIS2_EE11_M_get_nodeEv
- fun:_ZNSt8_Rb_treeIjSt4pairIKjiESt10_Select1stIS2_ESt4lessIjESaIS2_EE14_M_create_nodeERKS2_
- fun:_ZNSt8_Rb_treeIjSt4pairIKjiESt10_Select1stIS2_ESt4lessIjESaIS2_EE9_M_insertEPSt18_Rb_tree_node_baseSA_RKS2_
- fun:_ZNSt8_Rb_treeIjSt4pairIKjiESt10_Select1stIS2_ESt4lessIjESaIS2_EE13insert_uniqueERKS2_
- fun:_ZNSt8_Rb_treeIjSt4pairIKjiESt10_Select1stIS2_ESt4lessIjESaIS2_EE13insert_uniqueESt17_Rb_tree_iteratorIS2_ERKS2_
- fun:_ZNSt3mapIjiSt4lessIjESaISt4pairIKjiEEE6insertESt17_Rb_tree_iteratorIS4_ERKS4_
- fun:_ZNSt3mapIjiSt4lessIjESaISt4pairIKjiEEEixERS3_
- fun:_ZN18RenderWidgetHelper17AllocTransportDIBEmbPN4base14FileDescriptorE
- fun:_ZN19RenderMessageFilter19OnAllocTransportDIBEmbPN4base14FileDescriptorE
-}
-{
- bug_105022
- Memcheck:Leak
- fun:malloc_zone_malloc
- fun:malloc_set_zone_name
- fun:init__zone0
- fun:setenv$UNIX2003
- fun:_ZN12_GLOBAL__N_115EnvironmentImpl10SetVarImplEPKcRKSs
- fun:_ZN12_GLOBAL__N_115EnvironmentImpl6SetVarEPKcRKSs
- fun:_Z18AppendToPythonPath*FilePath
- fun:_ZN*3net15LocalTestServer13SetPythonPathEv
- fun:_ZN3net15LocalTestServer5StartEv
- fun:_ZN12_GLOBAL__N_132MimeTypeTests_MimeTypeTests_Test8TestBodyEv
-}
-{
- bug_105323
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN15tracked_objects10ThreadData3GetEv
- fun:_ZN15tracked_objects10ThreadData32TallyRunOnWorkerThreadIfTrackingEPKNS_6BirthsERKNS_11TrackedTimeES6_S6_
- fun:_ZN4base12_GLOBAL__N_112WorkerThread10ThreadMainEv
- fun:_ZN4base12_GLOBAL__N_110ThreadFuncEPv
-}
-{
- bug_105339
- Memcheck:Leak
- fun:malloc_zone_malloc
- fun:_malloc_internal
- fun:_cache_addForwardEntry
- fun:lookUpMethod
- fun:class_respondsToSelector
-}
-{
- bug_105341_a
- Memcheck:Leak
- fun:malloc_zone_malloc
- fun:_CFRuntimeCreateInstance
- fun:allocWorld
- fun:create
- fun:aquireColorWorldByAttributes
- fun:acquireColorWorld
- fun:CMSTransformConvert*
- fun:CGCMSInterfaceTransformConvert*
-}
-{
- bug_105341_b
- Memcheck:Leak
- fun:calloc
- fun:_ZN9CMMMemMgr3NewEm
- ...
- fun:create
- fun:aquireColorWorldByAttributes
- fun:acquireColorWorld
- fun:CMSTransformConvert*
- fun:CGCMSInterfaceTransformConvert*
-}
-{
- bug_105342
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN15TSessionManager20CreateSessionManagerEv
- fun:pthread_once
- fun:_ZN15TSessionManagerC1Ev
- fun:_ZN13TFontMetadata24CreateMetadataForFontURLEPK7__CFURLb
- ...
- fun:XTRegisterFont
- fun:SendActivateFontsMessage
-}
-{
- bug_105523
- Memcheck:Leak
- fun:malloc_zone_malloc
- fun:_CFRuntimeCreateInstance
- fun:allocGeneric
- fun:create
- fun:CMSCreateDataProvider
- fun:create_generic_color_space
- fun:CGColorSpaceCreateWithIndex
-}
-{
- bug_105524_a
- Memcheck:Uninitialized
- fun:_ZNK7WebCore13InlineTextBox17expansionBehaviorEv
- fun:_ZNK7WebCore13InlineTextBox16constructTextRunEPNS_11RenderStyleERKNS_4FontEPKtiiPNS_24BufferForAppendingHyphenE
- fun:_ZNK7WebCore13InlineTextBox16constructTextRunEPNS_11RenderStyleERKNS_4FontEPNS_24BufferForAppendingHyphenE
- fun:_ZNK7WebCore13InlineTextBox17positionForOffsetEi
- fun:_ZN7WebCore10RenderText14localCaretRectEPNS_9InlineBoxEiPi
- fun:_ZNK7WebCore15VisiblePosition14localCaretRectERPNS_12RenderObjectE
- fun:_ZN7WebCore9CaretBase15updateCaretRectEPNS_8DocumentERKNS_15VisiblePositionE
- fun:_ZN7WebCore14FrameSelection14localCaretRectEv
- fun:_ZN7WebCore14FrameSelection18recomputeCaretRectEv
- fun:_ZN7WebCore14FrameSelection16updateAppearanceEv
- fun:_ZN7WebCore14FrameSelection12setSelectionERKNS_16VisibleSelectionEjNS0_19CursorAlignOnScrollENS_15TextGranularityE
- fun:_ZN7WebCore14FrameSelection12setSelectionERKNS_16VisibleSelectionENS_15TextGranularityE
- fun:_ZN7WebCore14FrameSelection34setNonDirectionalSelectionIfNeededERKNS_16VisibleSelectionENS_15TextGranularityENS0_23EndPointsAdjustmentModeE
- fun:_ZN7WebCore12EventHandler49updateSelectionForMouseDownDispatchingSelectStartEPNS_4NodeERKNS_16VisibleSelectionENS_15TextGranularityE
- fun:_ZN7WebCore12EventHandler32handleMousePressEventSingleClickERKNS_28MouseEventWithHitTestResultsE
- fun:_ZN7WebCore12EventHandler21handleMousePressEventERKNS_28MouseEventWithHitTestResultsE
- fun:_ZN7WebCore12EventHandler21handleMousePressEventERKNS_18PlatformMouseEventE
- fun:_ZN7WebCore12EventHandler29passMousePressEventToSubframeERNS_28MouseEventWithHitTestResultsEPNS_5FrameE
- fun:_ZN7WebCore12EventHandler21handleMousePressEventERKNS_18PlatformMouseEventE
- fun:_ZN5blink11WebViewImpl9mouseDownERKNS_13WebMouseEventE
- fun:_ZN5blink11WebViewImpl16handleInputEventERKNS_13WebInputEventE
- fun:_ZN46ContextMenuCapturing_ContextMenuCapturing_Test8TestBodyEv
-}
-{
- bug_105524_b
- Memcheck:Uninitialized
- fun:_ZNK7WebCore13InlineTextBox17expansionBehaviorEv
- fun:_ZNK7WebCore13InlineTextBox16constructTextRunEPNS_11RenderStyleERKNS_4FontEPKtiiPNS_24BufferForAppendingHyphenE
- fun:_ZN7WebCore13InlineTextBox5paintERNS_9PaintInfoERKNS_8IntPointEii
- fun:_ZN7WebCore13InlineFlowBox5paintERNS_9PaintInfoERKNS_8IntPointEii
- fun:_ZN7WebCore13RootInlineBox5paintERNS_9PaintInfoERKNS_8IntPointEii
- fun:_ZNK7WebCore17RenderLineBoxList5paintEPNS_20RenderBoxModelObjectERNS_9PaintInfoERKNS_8IntPointE
- fun:_ZN7WebCore11RenderBlock13paintContentsERNS_9PaintInfoERKNS_8IntPointE
- fun:_ZN7WebCore11RenderBlock11paintObjectERNS_9PaintInfoERKNS_8IntPointE
- fun:_ZN7WebCore11RenderBlock5paintERNS_9PaintInfoERKNS_8IntPointE
- fun:_ZN7WebCore11RenderBlock13paintChildrenERNS_9PaintInfoERKNS_8IntPointE
- fun:_ZN7WebCore11RenderBlock13paintContentsERNS_9PaintInfoERKNS_8IntPointE
- fun:_ZN7WebCore11RenderBlock11paintObjectERNS_9PaintInfoERKNS_8IntPointE
- fun:_ZN7WebCore11RenderBlock5paintERNS_9PaintInfoERKNS_8IntPointE
- fun:_ZN7WebCore11RenderLayer10paintLayerEPS0_PNS_15GraphicsContextERKNS_7IntRectEjPNS_12RenderObjectEPNS_12RenderRegionEPN3WTF7HashMapIPNS_24OverlapTestRequestClientES4_NSB_7PtrHashISE_EENSB_10HashTraitsISE_EENSH_IS4_EEEEj
- fun:_ZN7WebCore11RenderLayer9paintListEPN3WTF6VectorIPS0_Lm0EEES3_PNS_15GraphicsContextERKNS_7IntRectEjPNS_12RenderObjectEPNS_12RenderRegionEPNS1_7HashMapIPNS_24OverlapTestRequestClientES8_NS1_7PtrHashISH_EENS1_10HashTraitsISH_EENSK_IS8_EEEEj
- fun:_ZN7WebCore11RenderLayer10paintLayerEPS0_PNS_15GraphicsContextERKNS_7IntRectEjPNS_12RenderObjectEPNS_12RenderRegionEPN3WTF7HashMapIPNS_24OverlapTestRequestClientES4_NSB_7PtrHashISE_EENSB_10HashTraitsISE_EENSH_IS4_EEEEj
- fun:_ZN7WebCore11RenderLayer5paintEPNS_15GraphicsContextERKNS_7IntRectEjPNS_12RenderObjectEPNS_12RenderRegionEj
- fun:_ZN7WebCore9FrameView13paintContentsEPNS_15GraphicsContextERKNS_7IntRectE
- fun:_ZN7WebCore10ScrollView5paintEPNS_15GraphicsContextERKNS_7IntRectE
- fun:_ZN5blink12WebFrameImpl16paintWithContextERN7WebCore15GraphicsContextERKNS_7WebRectE
- fun:_ZN5blink12WebFrameImpl5paintEP9CGContextRKNS_7WebRectE
- fun:_ZN5blink11WebViewImpl5paintEP9CGContextRKNS_7WebRectE
-}
-{
- bug_105525
- Memcheck:Leak
- ...
- fun:CGContextDrawPath
- fun:CGContextFillPath
- fun:_NSDrawWindowBackgroundRegion
- fun:-[NSThemeFrame drawWindowBackgroundRegion:]
-}
-{
- bug_105526_read_a
- Memcheck:Unaddressable
- fun:CGSSetWindowColorSpace
- fun:_ZN10WindowData16UpdateColorSpaceEh
- fun:_ZN10WindowData18FinishConstructionEmymPK4RectPhjP15OpaqueWindowPtrP16OpaqueControlRef
- fun:_ZN10WindowData10InitializeEP14OpaqueEventRef
- fun:_ZN14AppleWindowDef10InitializeEP14OpaqueEventRef
- fun:_ZN8HIObject24HandleClassHIObjectEventEP25OpaqueEventHandlerCallRefP14OpaqueEventRefPv
- fun:_ZN8HIObject9EventHookEP25OpaqueEventHandlerCallRefP14OpaqueEventRefPv
- fun:_ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec
- fun:_ZL30SendEventToEventTargetInternalP14OpaqueEventRefP20OpaqueEventTargetRefP14HandlerCallRec
- fun:SendEventToEventTargetWithOptions
- fun:_ZN8HIObject6CreateEPK10__CFStringP14OpaqueEventRefPPS_
- fun:HIObjectCreate
-}
-{
- bug_105526_read_b
- Memcheck:Unaddressable
- obj:*
- fun:_ZN10WindowData16UpdateColorSpaceEh
- fun:_ZN10WindowData18FinishConstructionEmymPK4RectPhjP15OpaqueWindowPtrP16OpaqueControlRef
- fun:_ZN10WindowData10InitializeEP14OpaqueEventRef
- fun:_ZN14AppleWindowDef10InitializeEP14OpaqueEventRef
- fun:_ZN8HIObject24HandleClassHIObjectEventEP25OpaqueEventHandlerCallRefP14OpaqueEventRefPv
- fun:_ZN8HIObject9EventHookEP25OpaqueEventHandlerCallRefP14OpaqueEventRefPv
- fun:_ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec
- fun:_ZL30SendEventToEventTargetInternalP14OpaqueEventRefP20OpaqueEventTargetRefP14HandlerCallRec
- fun:SendEventToEventTargetWithOptions
- fun:_ZN8HIObject6CreateEPK10__CFStringP14OpaqueEventRefPPS_
- fun:HIObjectCreate
-}
-{
- bug_105526_write
- Memcheck:Unaddressable
- fun:CGSColorProfileRelease
- fun:CGSSetWindowColorSpace
- fun:_ZN10WindowData16UpdateColorSpaceEh
- fun:_ZN10WindowData18FinishConstructionEmymPK4RectPhjP15OpaqueWindowPtrP16OpaqueControlRef
- fun:_ZN10WindowData10InitializeEP14OpaqueEventRef
- fun:_ZN14AppleWindowDef10InitializeEP14OpaqueEventRef
- fun:_ZN8HIObject24HandleClassHIObjectEventEP25OpaqueEventHandlerCallRefP14OpaqueEventRefPv
- fun:_ZN8HIObject9EventHookEP25OpaqueEventHandlerCallRefP14OpaqueEventRefPv
- fun:_ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec
- fun:_ZL30SendEventToEventTargetInternalP14OpaqueEventRefP20OpaqueEventTargetRefP14HandlerCallRec
- fun:SendEventToEventTargetWithOptions
- fun:_ZN8HIObject6CreateEPK10__CFStringP14OpaqueEventRefPPS_
- fun:HIObjectCreate
-}
-{
- bug_105527_a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN16TCFStringUniquer19CreateStringUniquerEv
- fun:pthread_once
- fun:_ZN16TCFStringUniquerC1Ev
- fun:_ZNK6TCFStr15GetUniqueStringEv
- fun:_ZNK17TClientFontEntity14CopyFamilyNameEb
- fun:_ZNK11TFontEntity14CopyPropertiesEPK7__CFSetb
- fun:_ZNK21TLocalFontRegistryImp37CopyPropertiesForFontsMatchingRequestEPK14__CFDictionaryPK7__CFSetj
- fun:XTCopyFontsWithProperties
- fun:_ZL20CopyFaceURLsForFontsPK9__CFArrayj
- fun:XTRegisterFonts
- fun:XTRegisterFont
- fun:SendActivateFontsMessage
-}
-{
- bug_105527_b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN18TLocalFontRegistry14CreateRegistryEv
- fun:pthread_once
- fun:_ZN18TLocalFontRegistryC2Ev
- fun:XTRegisterFonts
- fun:XTRegisterFont
- fun:SendActivateFontsMessage
-}
-{
- bug_105527_c
- Memcheck:Leak
- fun:malloc_zone_malloc
- fun:_CFRuntimeCreateInstance
- fun:CFBasicHashCreate
- fun:__CFSetCreateGeneric
- fun:CFSetCreate
- fun:_ZN16TBasicFontEntity21CreateBasicPropertiesEv
- fun:pthread_once
- fun:_ZN16TBasicFontEntity18GetBasicPropertiesEv
- fun:XTCopyFontsWithProperties
-}
-{
- bug_105527_d
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN19TGlobalFontRegistry14CreateRegistryEv
- fun:pthread_once
- fun:_ZN19TGlobalFontRegistryC2Ev
- fun:XTCopyFontWithName
- fun:_ZNK17TDescriptorSource35CopyFontDescriptorPerPostscriptNameEPK10__CFStringm
-}
-{
- bug_105527_e
- Memcheck:Leak
- fun:calloc
- fun:CGFontFinderCreate
- fun:cg_font_library_link_symbol
- fun:load_vtable
- fun:pthread_once
- fun:CGFontGetVTable
- fun:CGFontCreateFontsWithPath
- fun:CGFontCreateFontsWithURL
- fun:_Z18CreateFontsFromURLPK7__CFURL
- fun:_ZNK21TLocalFontRegistryImp12RegisterFontEPK7__CFURLPK14__CFDictionaryjj
- fun:_ZNK21TLocalFontRegistryImp13RegisterFontsEPK9__CFArrayPK14__CFDictionaryjjPS2_
- fun:_ZNK18TLocalFontRegistry13RegisterFontsEPK9__CFArrayPK14__CFDictionaryjjPS2_
- fun:XTRegisterFonts
- fun:XTRegisterFont
- fun:SendActivateFontsMessage
-}
-{
- bug_105580
- Memcheck:Leak
- fun:malloc_zone_malloc
- fun:malloc_set_zone_name
- fun:malloc_default_purgeable_zone
- ...
- fun:_ZN4base30EnableTerminationOnOutOfMemoryEv
- fun:_ZN7leveldb12_GLOBAL__N_111ChromiumEnvC2Ev
- ...
- fun:_ZN4base25DefaultLazyInstanceTraitsIN7leveldb12_GLOBAL__N_111ChromiumEnvEE3NewEPv
- ...
- fun:_ZN4base12LazyInstanceIN7leveldb12_GLOBAL__N_111ChromiumEnvENS_*
- ...
- fun:_ZN7leveldb7OptionsC2Ev
- ...
- fun:_ZN7fileapi27FileSystemDirectoryDatabase4InitEv
- fun:_ZN7fileapi27FileSystemDirectoryDatabase11GetFileInfoExPNS0_8FileInfoE
- fun:_ZN7fileapi59FileSystemDirectoryDatabaseTest_TestMissingFileGetInfo_Test8TestBodyEv
-}
-{
- bug_105938_a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore23v8StringToWebCoreStringIN3WTF12AtomicStringEEET_N2v86HandleINS4_6StringEEENS_12ExternalModeE
- ...
- fun:_ZN2v88internalL6InvokeEbNS0_6HandleINS0_10JSFunctionEEENS1_INS0_6ObjectEEEiPS5_Pb
- fun:_ZN2v88internal9Execution4CallENS0_6HandleINS0_6ObjectEEES4_iPS4_Pbb
- fun:_ZN2v86Script3RunEv
- fun:_ZN7WebCore7V8Proxy9runScriptEN2v86HandleINS1_6ScriptE*
- fun:_ZN7WebCore7V8Proxy8evaluateERKNS_16ScriptSourceCodeEPNS_4NodeE
- fun:_ZN7WebCore16ScriptController8evaluateERKNS_16ScriptSourceCodeE
-}
-{
- bug_105938_b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore23v8StringToWebCoreStringIN3WTF6StringEEET_N2v86HandleINS4_6StringEEENS_12ExternalModeE
- ...
- fun:_ZN2v88internalL6InvokeEbNS0_6HandleINS0_10JSFunctionEEENS1_INS0_6ObjectEEEiPS5_Pb
- fun:_ZN2v88internal9Execution4CallENS0_6HandleINS0_6ObjectEEES4_iPS4_Pbb
- fun:_ZN2v86Script3RunEv
- fun:_ZN7WebCore7V8Proxy9runScriptEN2v86HandleINS1_6ScriptE*
- fun:_ZN7WebCore7V8Proxy8evaluateERKNS_16ScriptSourceCodeEPNS_4NodeE
- fun:_ZN7WebCore16ScriptController8evaluateERKNS_16ScriptSourceCodeE
-}
-{
- bug_105938_c
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore23v8StringToWebCoreStringIN3WTF12AtomicStringEEET_N2v86HandleINS4_6StringEEENS_12ExternalModeE
- ...
- fun:_ZN2v88internalL6InvokeEbNS0_6HandleINS0_10JSFunctionEEENS1_INS0_6ObjectEEEiPS5_Pb
- fun:_ZN2v88internal9Execution4CallENS0_6HandleINS0_6ObjectEEES4_iPS4_Pbb
- fun:_ZN2v88Function4CallENS_6HandleINS_6ObjectEEEiPNS1_INS_5ValueEEE
- fun:_ZN7WebCore7V8Proxy24instrumentedCallFunctionEPNS_4PageEN2v86HandleINS3_8FunctionEEENS4_INS3_6ObjectEEEiPNS4_INS3_5ValueEEE
- fun:_ZN7WebCore7V8Proxy12callFunctionEN2v86HandleINS1_8FunctionEEENS2_INS1_6ObjectEEEiPNS2_INS1_5ValueEEE
- fun:_ZN7WebCore19V8LazyEventListener20callListenerFunctionEPNS_22ScriptExecutionContextEN2v86HandleINS3_5ValueEEEPNS_5EventE
- fun:_ZN7WebCore23V8AbstractEventListener18invokeEventHandlerEPNS_22ScriptExecutionContextEPNS_5EventEN2v86HandleINS5_5ValueEEE
- fun:_ZN7WebCore23V8AbstractEventListener11handleEventEPNS_22ScriptExecutionContextEPNS_5EventE
- fun:_ZN7WebCore11EventTarget18fireEventListenersEPNS_5EventEPNS_15EventTargetDataERN3WTF6VectorINS_23RegisteredEventListenerELm1EEE
-}
-{
- bug_107179
- Memcheck:Uninitialized
- fun:_ZNK7WebCore13InlineTextBox17expansionBehaviorEv
- fun:_ZNK7WebCore13InlineTextBox16constructTextRunEPNS_11RenderStyleERKNS_4FontEPKtiiPNS_24BufferForAppendingHyphenE
- fun:_ZN7WebCore13InlineTextBox5paintERNS_9PaintInfoERKNS_8IntPointEii
- fun:_ZN7WebCore13InlineFlowBox5paintERNS_9PaintInfoERKNS_8IntPointEii
- fun:_ZN7WebCore13RootInlineBox5paintERNS_9PaintInfoERKNS_8IntPointEii
- fun:_ZNK7WebCore17RenderLineBoxList5paintEPNS_20RenderBoxModelObjectERNS_9PaintInfoERKNS_8IntPointE
- fun:_ZN7WebCore11RenderBlock13paintContentsERNS_9PaintInfoERKNS_8IntPointE
- fun:_ZN7WebCore11RenderBlock11paintObjectERNS_9PaintInfoERKNS_8IntPointE
- fun:_ZN7WebCore11RenderBlock5paintERNS_9PaintInfoERKNS_8IntPointE
- fun:_ZN7WebCore11RenderBlock13paintChildrenERNS_9PaintInfoERKNS_8IntPointE
- fun:_ZN7WebCore11RenderBlock13paintContentsERNS_9PaintInfoERKNS_8IntPointE
- fun:_ZN7WebCore11RenderBlock11paintObjectERNS_9PaintInfoERKNS_8IntPointE
- fun:_ZN7WebCore11RenderBlock5paintERNS_9PaintInfoERKNS_8IntPointE
- ...
- fun:_ZN7WebCore11RenderLayer5paintEPNS_15GraphicsContextERKNS_7IntRectEjPNS_12RenderObjectEPNS_12RenderRegionEj
- fun:_ZN7WebCore9FrameView13paintContentsEPNS_15GraphicsContextERKNS_7IntRectE
- fun:_ZN7WebCore10ScrollView5paintEPNS_15GraphicsContextERKNS_7IntRectE
- fun:_ZN5blink12WebFrameImpl16paintWithContextERN7WebCore15GraphicsContextERKNS_7WebRectE
-}
-{
- bug_107541_a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZL14NewFromFontRefPK8__CTFontPKc
- fun:_Z26SkCreateTypefaceFromCTFontPK8__CTFont
- fun:_ZN7WebCoreL10setupPaintEP7SkPaintPKNS_14SimpleFontDataEPKNS_4FontE*
- fun:_ZNK7WebCore4Font10drawGlyphsEPNS_15GraphicsContextEPKNS_14SimpleFontDataERKNS_11GlyphBufferEiiRKNS_10FloatPointE
- fun:_ZNK7WebCore4Font15drawGlyphBufferEPNS_15GraphicsContextERKNS_7TextRunERKNS_11GlyphBufferERKNS_10FloatPointE
- fun:_ZNK7WebCore4Font14drawSimpleTextEPNS_15GraphicsContextERKNS_7TextRunERKNS_10FloatPointEii
- fun:_ZNK7WebCore4Font8drawTextEPNS_15GraphicsContextERKNS_7TextRunERKNS_10FloatPoint*
- fun:_ZN7WebCore15GraphicsContext8drawTextERKNS_4FontERKNS_7TextRunERKNS_10FloatPoint*
- fun:_ZN7WebCoreL20paintTextWithShadowsEPNS_15GraphicsContextERKNS_4FontERKNS_7TextRunERKN3WTF12AtomicStringEiiiiRKNS_10FloatPointERKNS_9FloatRectEPKNS_10ShadowDataEbb
- fun:_ZN7WebCore13InlineTextBox5paintERNS_9PaintInfoERKNS_*
- fun:_ZN7WebCore13InlineFlowBox5paintERNS_9PaintInfoERKNS_*
- fun:_ZN7WebCore13RootInlineBox5paintERNS_9PaintInfoERKNS_*
- fun:_ZNK7WebCore17RenderLineBoxList5paintEPNS_20RenderBoxModelObjectERNS_9PaintInfoERKNS_*
- fun:_ZN7WebCore11RenderBlock13paintContentsERNS_9PaintInfoERKNS_*
- fun:_ZN7WebCore11RenderBlock11paintObjectERNS_9PaintInfoERKNS_*
- fun:_ZN7WebCore11RenderBlock5paintERNS_9PaintInfoERKNS_*
- ...
- fun:_ZN7WebCore11RenderBlock13paintChildrenERNS_9PaintInfoERKNS_*
- fun:_ZN7WebCore11RenderBlock13paintContentsERNS_9PaintInfoERKNS_*
- fun:_ZN7WebCore11RenderBlock11paintObjectERNS_9PaintInfoERKNS_*
- fun:_ZN7WebCore11RenderBlock5paintERNS_9PaintInfoERKNS_*
-}
-{
- bug_107541_b
- Memcheck:Leak
- fun:calloc
- fun:CGGlyphBitmapCreate
- ...
- fun:CGFontCreateGlyphBitmap*
- fun:create_missing_bitmaps
- fun:CGGlyphLockLockGlyphBitmaps
- ...
- fun:draw_glyphs
- fun:CGContextShowGlyphs
- fun:_ZN9Offscreen5getCGERK19SkScalerContext_MacRK7SkGlyph*
- fun:_ZN19SkScalerContext_Mac13generateImageERK7SkGlyph
- fun:_ZN15SkScalerContext8getImageERK7SkGlyph
- fun:_ZN12SkGlyphCache9findImageERK7SkGlyph
- fun:_ZL22D1G_NoBounder_RectClipRK12SkDraw1GlyphiiRK7SkGlyph
- fun:_ZNK6SkDraw*draw*TextE*
- fun:_ZN8SkDevice*draw*TextE*
- fun:_ZN8SkCanvas*draw*TextE*
-}
-{
- bug_107541_c
- Memcheck:Leak
- fun:_Znw*
- fun:_ZL14NewFromFontRefPK8__CTFontPKc
- fun:_ZL11NewFromNamePKcN10SkTypeface5StyleE
- fun:_ZL15create_typefacePK10SkTypefacePKcNS_5StyleE
- fun:_ZN10SkFontHost14CreateTypefaceEPK10SkTypefacePKcNS0_5StyleE
- fun:_ZN10SkTypeface14CreateFromNameEPKcNS_5StyleE
- fun:_ZN3gfx8internal16SkiaTextRenderer22SetFontFamilyWithStyleERKSsi
- fun:_ZN3gfx13RenderTextMac14DrawVisualTextEPNS_6CanvasE
- fun:_ZN3gfx10RenderText4DrawEPNS_6CanvasE
- fun:_ZN3gfx43RenderTextTest_SelectionKeepsLigatures_Test8TestBodyEv
-}
-{
- bug_109994
- Memcheck:Leak
- ...
- fun:_class_lookupMethodAndLoadCache
- fun:objc_msgSend
- ...
- fun:_class_initialize
- fun:_class_initialize
- fun:_class_lookupMethodAndLoadCache
- fun:objc_msgSend
- fun:_ZN15ChromeTestSuite10InitializeEv
- fun:_ZN4base9TestSuite3RunEv
- fun:_ZN17UnitTestTestSuite3RunEv
-}
-{
- bug_112078
- Memcheck:Uninitialized
- fun:glViewport_Exec
- fun:glViewport
- fun:-[AcceleratedPluginView globalFrameDidChange:]
- fun:-[AcceleratedPluginView renewGState]
- fun:-[NSView _invalidateGStatesForTree]
- fun:-[NSView(NSInternal) _setHidden:setNeedsDisplay:]
- fun:-[NSView _setHidden:]
- fun:_ZN*23RenderWidgetHostViewMac17MovePluginWindows*
- fun:_ZN*27RenderWidgetHostViewMacTest24AddAcceleratedPluginViewEii
- fun:_ZN*53RenderWidgetHostViewMacTest_FocusAcceleratedView_Test8TestBodyEv
-}
-{
- bug_112086
- Memcheck:Uninitialized
- fun:x_zone_size
- fun:find_registered_purgeable_zone
- fun:malloc_make_purgeable
-}
-{
- bug_117310
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7WebCore23v8StringToWebCoreStringIN3WTF12AtomicStringEEET_N2v86HandleINS4_6StringEEENS_12ExternalModeE
- fun:_ZN7WebCore29v8StringToAtomicWebCoreStringEN2v86HandleINS0_6StringEEE
- fun:_ZN7WebCore11V8DOMWindow19namedPropertyGetterEN2v85LocalINS1_6StringEEERKNS1_12AccessorInfoE
- fun:_ZN2v88internal8JSObject26GetPropertyWithInterceptorEPNS0_10JSReceiverEPNS0_6StringEP18PropertyAttributes
- fun:_ZN2v88internal6Object11GetPropertyEPS1_PNS0_12LookupResultEPNS0_6StringEP18PropertyAttributes
- fun:_ZN2v88internal6Object11GetPropertyENS0_6HandleIS1_EES3_PNS0_12LookupResultENS2_INS0_6StringEEEP18PropertyAttributes
- fun:_ZN2v88internal6LoadIC4LoadENS0_16InlineCacheStateENS0_6HandleINS0_6ObjectEEENS3_INS0_6StringEEE
- fun:_ZN2v88internal11LoadIC_MissENS0_9ArgumentsEPNS0_7IsolateE
- obj:*
- obj:*
- obj:*
- obj:*
- fun:_ZN2v88internalL6InvokeEbNS0_6HandleINS0_10JSFunctionEEENS1_INS0_6ObjectEEEiPS5_Pb
- fun:_ZN2v88internal9Execution4CallENS0_6HandleINS0_6ObjectEEES4_iPS4_Pbb
- fun:_ZN2v88Function4CallENS_6HandleINS_6ObjectEEEiPNS1_INS_5ValueEEE
- fun:_ZN7WebCore7V8Proxy24instrumentedCallFunctionEPNS_5FrameEN2v86HandleINS3_8FunctionEEENS4_INS3_6ObjectEEEiPNS4_INS3_5ValueEEE
- fun:_ZN7WebCore7V8Proxy12callFunctionEN2v86HandleINS1_8FunctionEEENS2_INS1_6ObjectEEEiPNS2_INS1_5ValueEEE
- fun:_ZN7WebCore19V8LazyEventListener20callListenerFunctionEPNS_22ScriptExecutionContextEN2v86HandleINS3_5ValueEEEPNS_5EventE
- fun:_ZN7WebCore23V8AbstractEventListener18invokeEventHandlerEPNS_22ScriptExecutionContextEPNS_5EventEN2v86HandleINS5_5ValueEEE
- fun:_ZN7WebCore23V8AbstractEventListener11handleEventEPNS_22ScriptExecutionContextEPNS_5EventE
- fun:_ZN7WebCore11EventTarget18fireEventListenersEPNS_5EventEPNS_15EventTargetDataERN3WTF6VectorINS_23RegisteredEventListenerELm1EEE
-}
-{
- bug_127499_a
- Memcheck:Uninitialized
- ...
- fun:VDADecoderCreate
- fun:_ZN3gfx30VideoDecodeAccelerationSupport6CreateEiiiPKvm
- fun:_ZN3gfx46VideoDecodeAccelerationSupportTest_Create_Test8TestBodyEv
-}
-{
- bug_127499_b
- Memcheck:Leak
- ...
- fun:VDADecoderCreate
- fun:_ZN3gfx30VideoDecodeAccelerationSupport6CreateEiiiPKvm
- fun:_ZN3gfx46VideoDecodeAccelerationSupportTest_Create_Test8TestBodyEv
-}
-{
- bug_127499_c
- Memcheck:Free
- ...
- fun:VTDecompressionSessionInvalidate
- fun:VDADecoderDestroy
- fun:_ZN3gfx30VideoDecodeAccelerationSupport7DestroyEv
- fun:_ZN3gfx46VideoDecodeAccelerationSupportTest_Create_Test8TestBodyEv
-}
-{
- bug_127499_d
- Memcheck:Uninitialized
- ...
- fun:VTDecompressionSessionInvalidate
- fun:VDADecoderDestroy
- fun:_ZN3gfx30VideoDecodeAccelerationSupport7DestroyEv
- fun:_ZN3gfx46VideoDecodeAccelerationSupportTest_Create_Test8TestBodyEv
-}
-{
- bug_127499_e
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN4base17LoadNativeLibraryE*
- fun:_ZN12_GLOBAL__N_117InitializeVdaApisEv
- fun:_ZN3gfx30VideoDecodeAccelerationSupport6CreateEiiiPKvm
- fun:_ZN3gfx46VideoDecodeAccelerationSupportTest_Create_Test8TestBodyEv
-}
-{
- bug_127499_f
- Memcheck:Leak
- fun:malloc_zone_malloc
- fun:_CFRuntimeCreateInstance
- fun:CFBasicHashCreate
- fun:__CFDictionaryCreateGeneric
- fun:CFDictionaryCreate
- fun:-[__NSPlaceholderDictionary initWithObjects:forKeys:count:]
- fun:+[NSDictionary dictionaryWithObjectsAndKeys:]
- fun:_ZN3gfx30VideoDecodeAccelerationSupport6CreateEiiiPKvm
- fun:_ZN3gfx46VideoDecodeAccelerationSupportTest_Create_Test8TestBodyEv
-}
-{
- bug_131361
- Memcheck:Overlap
- fun:memcpy
- ...
- fun:_ZN2v88internal18GvnBasicBlockState32*
-}
-{
- bug_139633
- Memcheck:Uninitialized
- fun:_ZL19ConvertYUVToRGB32_ChhhPh
- fun:LinearScaleYUVToRGB32RowWithRange_C
- fun:_ZN5media23ScaleYUVToRGB32WithRectEPKhS1_S1_Phiiiiiiiiiii
- fun:_ZN8remoting29ConvertAndScaleYUVToRGB32RectEPKhS1_S1_iiRK7SkTSizeIiERK7SkIRectPhiS5_S8_S8_
- fun:_ZN8remoting10DecoderVp811RenderFrameERK7SkTSizeIiERK7SkIRectPhiP8SkRegion
- fun:_ZN8remoting13DecoderTester11RenderFrameEv
- fun:_ZN8remoting13DecoderTester14ReceivedPacketEPNS_11VideoPacketE
- fun:_ZN8remoting13DecoderTester20ReceivedScopedPacketE10scoped_ptrINS_11VideoPacketEE
-}
-{
- bug_148865
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN7content16RenderThreadImpl4InitEv
- fun:_ZN7content16RenderThreadImplC2ERKSs
- fun:_ZN7content16RenderThreadImplC1ERKSs
- fun:_ZN7content21WebRTCAudioDeviceTest5SetUpEv
-}
-{
- bug_159190
- Memcheck:Uninitialized
- ...
- fun:_ZNK19TConcreteFontScaler15CopyGlyphBitmapEtjP6CGRectPm
- ...
- fun:_ZN9Offscreen5getCGERK19SkScalerContext_MacRK7SkGlyphtPmb
- fun:_ZN19SkScalerContext_Mac13generateImageERK7SkGlyph
-}
-{
- bug_171722_mac
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN3net12_GLOBAL__N_120URLRequestFtpJobTest9AddSocketEPNS_13MockReadWriteILNS_17MockReadWriteTypeE0EEEmPNS2_ILS3_1EEEm
- ...
-}
-{
- bug_173779
- Memcheck:Uninitialized
- ...
- fun:img_data_lock
- fun:CGSImageDataLock
- fun:ripc_AcquireImage
- fun:ripc_DrawImage*
- fun:CGContextDrawImage*
- ...
- fun:_ZN11CUIRenderer4DrawE6CGRectP9CGContextPK14__CFDictionaryPS5_
-}
-{
- bug_177540
- Memcheck:Uninitialized
- fun:_ZN3WTF20TCMalloc_ThreadCache10DeallocateENS_11HardenedSLLEm
-}
-{
- bug_231969
- Memcheck:Uninitialized
- fun:rangematch
- fun:fnmatch1
- fun:fnmatch1
- fun:fnmatch$UNIX2003
- fun:_ZN4base14FileEnumerator4NextEv
- fun:_ZN10disk_cache15SimpleIndexFile15RestoreFromDiskERKN4base8FilePathE
-}
-{
- bug_244420
- Memcheck:Uninitialized
- ...
- fun:_ZN9talk_baseL8ToStringIyEESsRKT_
- fun:_ZN7content23VideoDestinationHandler4OpenEPNS_28MediaStreamDependencyFactoryEPNS_28MediaStreamRegistryInterfaceERKSsPPNS_20FrameWriterInterfaceE
- fun:_ZN7content37VideoDestinationHandlerTest_Open_Test8TestBodyEv
-}
-{
- bug_244437
- Memcheck:Uninitialized
- fun:_ZN5mediaL23FromInterleavedInternalIssLs0EEEvPKviiPNS_8AudioBusEff
- fun:_ZN5media8AudioBus22FromInterleavedPartialEPKviii
- fun:_ZN5media8AudioBus15FromInterleavedEPKvii
- fun:_ZN7content19WebRtcAudioRenderer14SourceCallbackEiPN5media8AudioBusE
-}
-{
- bug_246567
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN2v88internal24PerThreadAssertScopeBase10AssertDataEv
- fun:_ZN2v88internal20PerThreadAssertScopeILNS0_19PerThreadAssertTypeE1ELb1EE9IsAllowedEv
- ...
- fun:_ZN3net15ProxyResolverV87Context6InitV8ERK13scoped_refptrINS_23ProxyResolverScriptDataEE
- fun:_ZN3net15ProxyResolverV812SetPacScriptERK13scoped_refptrINS_23ProxyResolverScriptDataEERKN4base8CallbackIFviEEE
- fun:_ZN3net22ProxyResolverV8Tracing3Job20ExecuteProxyResolverEv
- fun:_ZN3net22ProxyResolverV8Tracing3Job15ExecuteBlockingEv
-}
-{
- bug_246567b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN2v88internal24PerThreadAssertScopeBase10AssertDataEv
- fun:_ZN2v88internal20PerThreadAssertScopeILNS0_19PerThreadAssertTypeE1ELb1EE9IsAllowedEv
- fun:_ZN2v88internal11HandleScope12CreateHandleINS0*
- fun:_ZN2v88internal6Handle*
-}
-# Maybe related to bug_105527_a?
-{
- bug_247506a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN16TCFStringUniquer19CreateStringUniquerEv
- fun:pthread_once
- fun:_ZN16TCFStringUniquerC1Ev
- fun:_ZN19TCFResurrectContext17ResurrectCFStringEv
- fun:_ZN19TCFResurrectContext9ResurrectEv
- fun:_ZN19TCFResurrectContext21ResurrectCFDictionaryEv
- fun:_ZN19TCFResurrectContext9ResurrectEv
- fun:_ZNK22TGlobalFontRegistryImp20RendezvousWithServerEv
- fun:_ZN22TGlobalFontRegistryImpC2Ev
- fun:_ZN19TGlobalFontRegistry14CreateRegistryEv
-}
-# Maybe related to bug_105527_b ?
-{
- bug_247506b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN18TLocalFontRegistry14CreateRegistryEv
- fun:pthread_once
- fun:_ZN18TLocalFontRegistryC2Ev
- fun:XTCopyFontWithName
- fun:_ZNK17TDescriptorSource35CopyFontDescriptorPerPostscriptNameEPK10__CFStringm
- fun:_ZNK11TDescriptor32CreateMatchingDescriptorInternalEPK7__CFSet
- fun:_ZN11TDescriptor12InitBaseFontEv
-}
-# Maybe related to bug_105342 ?
-{
- bug_247506c
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN15TSessionManager20CreateSessionManagerEv
- fun:pthread_once
- fun:_ZN15TSessionManagerC1Ev
- fun:_ZNK22TGlobalFontRegistryImp13GetServerPortEv
- fun:_ZNK22TGlobalFontRegistryImp20RendezvousWithServerEv
- fun:_ZN22TGlobalFontRegistryImpC2Ev
- fun:_ZN19TGlobalFontRegistry14CreateRegistryEv
- fun:pthread_once
- fun:_ZN19TGlobalFontRegistryC2Ev
- fun:XTCopyFontWithName
-}
-{
- bug_247506d
- Memcheck:Leak
- fun:malloc_zone_calloc
- fun:_calloc_internal
- fun:_cache_malloc
- fun:_cache_fill
- fun:lookUpMethod
- fun:_class_lookupMethodAndLoadCache
- fun:objc_msgSend
- ...
- fun:_ZL17SetupMenuTrackingR14MenuSelectDatah5PointdP8MenuDatamtPK4RectS6_jS6_PK10__CFString
- fun:_ZL19PopUpMenuSelectCoreP8MenuData5PointdS1_tjPK4RecttmS4_S4_PK10__CFStringPP13OpaqueMenuRefPt
- fun:_HandlePopUpMenuSelection7
-}
-{
- bug_247506e
- Memcheck:Leak
- fun:calloc
- fun:_ZN11TMemoryHeap6CallocEmm
- fun:_Z14AllocateMemorymP11TMemoryHeapb
- fun:_Z13CacheAllocatemb
- fun:_Z16BuildMacEncTablev
- fun:_ZN15TParsingContext13GetParseProcsEv
- fun:_ZN19TSFNTParsingContext13GetParseProcsEv
- fun:_ZN18TCIDParsingContext13GetParseProcsEv
- fun:_ZN16TType1OTFCIDFont20ParseCFFCIDFontDictsERK19TType1CFFDescriptorP32Type1ProtectionEvaluationContextRVt
-}
-{
- bug_247506f
- Memcheck:Leak
- fun:malloc_zone_calloc
- fun:_calloc_internal
- fun:_objc_insertMethods
- fun:_objc_read_categories_from_image
- fun:_read_images
- fun:map_images_nolock
- fun:map_images
- fun:_ZN4dyldL18notifyBatchPartialE17dyld_image_statesbPFPKcS0_jPK15dyld_image_infoE
- fun:_ZN11ImageLoader4linkERKNS_11LinkContextEbbRKNS_10RPathChainE
- fun:_ZN4dyld4linkEP11ImageLoaderbRKNS0_10RPathChainE
-}
-{
- bug_247506g
- Memcheck:Leak
- fun:malloc_zone_malloc
- fun:malloc_set_zone_name
- fun:malloc_default_purgeable_zone
- fun:ImageIO_Malloc
- fun:copyImageBlockSetPNG
- fun:ImageProviderCopyImageBlockSetCallback
- fun:CGImageProviderCopyImageBlockSet
- fun:img_blocks_create
- fun:img_blocks_extent
- fun:img_data_lock
- fun:CGSImageDataLock
- fun:ripc_AcquireImage
- fun:ripc_DrawImage
- fun:CGContextDrawImage
- fun:__-[NSImageRep drawInRect:fromRect:operation:fraction:respectFlipped:hints:]_block_invoke_1
- fun:-[NSImageRep drawInRect:fromRect:operation:fraction:respectFlipped:hints:]
- fun:_ZN12_GLOBAL__N_129NSImageOrNSImageRepToSkBitmapEP7NSImageP10NSImageRep7_NSSizeb
- fun:_ZN3gfx20NSImageRepToSkBitmapEP10NSImageRep7_NSSizeb
- fun:_ZN3gfx27ImageSkiaFromResizedNSImageEP7NSImage7_NSSize
- fun:_ZN3gfx20ImageSkiaFromNSImageEP7NSImage
- fun:_ZNK3gfx5Image11ToImageSkiaEv
- fun:_ZNK3gfx5Image10ToSkBitmapEv
-}
-{
- bug_247506h
- Memcheck:Leak
- fun:malloc
- fun:_ZN11TMemoryHeap6MallocEm
- fun:_Z14AllocateMemorymP11TMemoryHeapb
- fun:_Z13GetGrowBufferm
- fun:_ZN31TFractionalMetricsRenderContextC2EPK10TType1FontPKht
- fun:_ZNK10TType1Font13GetRawMetricsERK18TType1FontInstancePKhtR10_t_CharSBW
- fun:_ZNK10TType1Font23RenderFractionalMetricsERK15TType1TransformtPKhtR22GlyphFractionalMetrics
- fun:_ZNK13TType1CIDFont20GetFractionalMetricsERK15TType1TransformtP22GlyphFractionalMetrics
- fun:_ZNK12TType1Strike10GetMetricsERK21TRenderingDescriptionmPKtRK19TDestinationMapping
- fun:_Z20Type1GetGlyphMetricsmPK18TStrikeDescriptionPK21TRenderingDescriptionmPKtPvm
- fun:_ZNK19TConcreteFontScaler25GetGlyphIdealAdvanceWidthEt
-}
-{
- bug_247506i
- Memcheck:Leak
- fun:malloc_zone_malloc
- fun:_CFRuntimeCreateInstance
- fun:CFBasicHashCreate
- fun:__CFDictionaryCreateGeneric
- fun:CFDictionaryCreateMutable
- fun:utDeactivateAllSelectedIMInDoc
- fun:MyDeactivateTSMDocument
- fun:_ReactivateTSMDocumentAfterMenuTracking
-}
-{
- bug_247506j
- Memcheck:Leak
- fun:malloc_zone_calloc
- fun:ripr_Rectangles
- fun:ripc_DrawRects
- fun:CGContextFillRects
- fun:NSRectFillListWithColorsUsingOperation
- fun:NSDrawColorTiledRects
-}
-{
- bug_247506k
- Memcheck:Leak
- fun:malloc
- fun:_ZN11TMemoryHeap6MallocEm
- fun:_Z24Type1InterpretCharStringP11_t_FontInstP10_t_BCProcsP17_t_T1CharDataDescP9_t_CharIOP9_t_RunRecP12_t_PathProcsP6T1Args
- fun:_ZL14ATMCharOutlineP11_t_FontInstP10_t_BCProcsPvP9_t_CharIOP12_t_PathProcsmS3_
- fun:_ZN21MPathRenderingContext13RenderOutlineERK11_t_FontInstb
- fun:_ZN28TPathMetricsRenderingContext11MakeOutlineERK11_t_FontInstbR10FixedPointS4_S4_
- fun:_ZNK10TType1Font20RenderOutlineMetricsERK15TType1TransformtPKhtR21GlyphRenderingMetrics
- fun:_ZNK13TType1CIDFont17GetOutlineMetricsERK15TType1TransformtP21GlyphRenderingMetrics
- fun:_ZNK12TType1Strike10GetMetricsERK21TRenderingDescriptionmPKtRK19TDestinationMapping
- fun:_Z20Type1GetGlyphMetricsmPK18TStrikeDescriptionPK21TRenderingDescriptionmPKtPvm
- fun:_ZNK19TConcreteFontScaler19GetGlyphIdealBoundsEt
- fun:FPFontGetGlyphIdealBounds
-}
-{
- bug_257501
- Memcheck:Uninitialized
- fun:rangematch
- fun:fnmatch1
- fun:fnmatch1
- fun:fnmatch$UNIX2003
- fun:_ZN4base14FileEnumerator4NextEv
- fun:_ZN10disk_cache15SimpleIndexFile19SyncRestoreFromDiskERKN4base8FilePathE
- fun:_ZN10disk_cache15SimpleIndexFile20SyncLoadIndexEntriesERKN4base8FilePathE13scoped_refptrINS1_22SingleThreadTaskRunnerEERKNS1_8CallbackIFv10scoped_ptrIN9__gnu_cxx8hash_mapIyNS_13EntryMetadataENSA_4hashIyEESt8equal_toIyESaISC_EEENS1_14DefaultDeleterISI_EEEbEEE
-}
-{
- bug_280583
- Memcheck:Unaddressable
- ...
- fun:_ZN6libyuv21ScaleARGBBilinearDownEiiiiiPKhPhiiii
- fun:_ZN6libyuv16ScaleARGBAnySizeEiiiiiiiiPKhPhiiiiNS_10FilterModeE
- fun:_ZN6libyuv9ScaleARGBEPKhiiiPhiiiiiiiNS_10FilterModeE
- fun:ARGBScale
- fun:_ZN7content20DesktopCaptureDevice4Core18OnCaptureCompletedEPN6webrtc12DesktopFrameE
- fun:_ZN6webrtc12_GLOBAL__N_117ScreenCapturerMac7CaptureERKNS_13DesktopRegionE
- fun:_ZN7content20DesktopCaptureDevice4Core9DoCaptureEv
-}
-{
- bug_292913_a
- Memcheck:Leak
- fun:malloc_zone_malloc
- fun:_CFRuntimeCreateInstance
- fun:_ZN7TCFBaseI11TDescriptorEnwEm
- fun:_ZNK17TDescriptorSource14CopyDescriptorEPK7__CFURL
- fun:_ZNK17TDescriptorSource32CopySystemWideFallbackDescriptorEP6CGFontPKtl
- fun:_ZNK17TDescriptorSource32CopySystemWideFallbackDescriptorEP6CGFontPK10__CFString7CFRange
- fun:_ZNK12TFontCascade24CreateSystemWideFallbackEPK8__CTFontPK10__CFString7CFRange
- fun:_ZNK12TFontCascade14CreateFallbackEPK8__CTFontPK10__CFString7CFRange
- ...
- fun:_ZN3gfx13RenderTextMac12EnsureLayoutEv
-}
-{
- bug_292913_b
- Memcheck:Uninitialized
- fun:_ZL10AddEncHashP12EncHashTablePKhij
- fun:_Z16BuildMacEncTablev
- fun:_ZN15TParsingContext13GetParseProcsEv
- fun:_ZN19TSFNTParsingContext13GetParseProcsEv
- fun:_ZN18TCIDParsingContext13GetParseProcsEv
- fun:_ZN16TType1OTFCIDFont20ParseCFFCIDFontDictsERK19TType1CFFDescriptorP32Type1ProtectionEvaluationContextRVt
- fun:_ZN16TType1OTFCIDFont15ParseCFFCIDFontERK19TType1CFFDescriptorP32Type1ProtectionEvaluationContext
- fun:_ZN16TType1OTFCIDFontC2ERK19TType1CFFDescriptor
- fun:_ZN10TType1Font7GetFontEPK5TFont
-}
-{
- bug_310761_a
- Memcheck:Leak
- fun:malloc
- fun:_NPN_Get*Identifier
- fun:_ZN5blink11WebBindings*get*Identifier*
-}
-{
- bug_310761_b
- Memcheck:Leak
- fun:malloc
- fun:_ZN3WTF10fastMallocEm
- fun:_ZN7WebCore*TerminatedArrayBuilder*
- fun:_ZN7WebCore7RuleSet19compactPendingRules*
-}
-{
- bug_320918
- Memcheck:Leak
- fun:malloc
- fun:_ZN3WTF10fastMallocEm
- fun:_ZN3WTF11LinkedStackIN7WebCore8RuleDataEEnwEm
- fun:_ZN7WebCore7RuleSet12addToRuleSet*
- fun:_ZN7WebCore7RuleSet21findBestRuleSetAndAdd*
- fun:_ZN7WebCore7RuleSet7addRule*
- fun:_ZN7WebCore7RuleSet13addChildRules*
- fun:_ZN7WebCore7RuleSet17addRulesFromSheet*
- fun:_ZN7WebCore21CSSDefaultStyleSheets16loadDefaultStyle*
-}
diff --git a/chromium/tools/valgrind/memcheck_analyze.py b/chromium/tools/valgrind/memcheck_analyze.py
deleted file mode 100755
index 0b011296a3c..00000000000
--- a/chromium/tools/valgrind/memcheck_analyze.py
+++ /dev/null
@@ -1,634 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-# memcheck_analyze.py
-
-''' Given a valgrind XML file, parses errors and uniques them.'''
-
-import gdb_helper
-
-from collections import defaultdict
-import hashlib
-import logging
-import optparse
-import os
-import re
-import subprocess
-import sys
-import time
-from xml.dom.minidom import parse
-from xml.parsers.expat import ExpatError
-
-import common
-
-# Global symbol table (yuck)
-TheAddressTable = None
-
-# These are regexps that define functions (using C++ mangled names)
-# we don't want to see in stack traces while pretty printing
-# or generating suppressions.
-# Just stop printing the stack/suppression frames when the current one
-# matches any of these.
-_BORING_CALLERS = common.BoringCallers(mangled=True, use_re_wildcards=True)
-
-def getTextOf(top_node, name):
- ''' Returns all text in all DOM nodes with a certain |name| that are children
- of |top_node|.
- '''
-
- text = ""
- for nodes_named in top_node.getElementsByTagName(name):
- text += "".join([node.data for node in nodes_named.childNodes
- if node.nodeType == node.TEXT_NODE])
- return text
-
-def getCDATAOf(top_node, name):
- ''' Returns all CDATA in all DOM nodes with a certain |name| that are children
- of |top_node|.
- '''
-
- text = ""
- for nodes_named in top_node.getElementsByTagName(name):
- text += "".join([node.data for node in nodes_named.childNodes
- if node.nodeType == node.CDATA_SECTION_NODE])
- if (text == ""):
- return None
- return text
-
-def shortenFilePath(source_dir, directory):
- '''Returns a string with the string prefix |source_dir| removed from
- |directory|.'''
- prefixes_to_cut = ["build/src/", "valgrind/coregrind/", "out/Release/../../"]
-
- if source_dir:
- prefixes_to_cut.append(source_dir)
-
- for p in prefixes_to_cut:
- index = directory.rfind(p)
- if index != -1:
- directory = directory[index + len(p):]
-
- return directory
-
-# Constants that give real names to the abbreviations in valgrind XML output.
-INSTRUCTION_POINTER = "ip"
-OBJECT_FILE = "obj"
-FUNCTION_NAME = "fn"
-SRC_FILE_DIR = "dir"
-SRC_FILE_NAME = "file"
-SRC_LINE = "line"
-
-def gatherFrames(node, source_dir):
- frames = []
- for frame in node.getElementsByTagName("frame"):
- frame_dict = {
- INSTRUCTION_POINTER : getTextOf(frame, INSTRUCTION_POINTER),
- OBJECT_FILE : getTextOf(frame, OBJECT_FILE),
- FUNCTION_NAME : getTextOf(frame, FUNCTION_NAME),
- SRC_FILE_DIR : shortenFilePath(
- source_dir, getTextOf(frame, SRC_FILE_DIR)),
- SRC_FILE_NAME : getTextOf(frame, SRC_FILE_NAME),
- SRC_LINE : getTextOf(frame, SRC_LINE)
- }
-
- # Ignore this frame and all the following if it's a "boring" function.
- enough_frames = False
- for regexp in _BORING_CALLERS:
- if re.match("^%s$" % regexp, frame_dict[FUNCTION_NAME]):
- enough_frames = True
- break
- if enough_frames:
- break
-
- frames += [frame_dict]
-
- global TheAddressTable
- if TheAddressTable != None and frame_dict[SRC_LINE] == "":
- # Try using gdb
- TheAddressTable.Add(frame_dict[OBJECT_FILE],
- frame_dict[INSTRUCTION_POINTER])
- return frames
-
-class ValgrindError:
- ''' Takes a <DOM Element: error> node and reads all the data from it. A
- ValgrindError is immutable and is hashed on its pretty printed output.
- '''
-
- def __init__(self, source_dir, error_node, commandline, testcase):
- ''' Copies all the relevant information out of the DOM and into object
- properties.
-
- Args:
- error_node: The <error></error> DOM node we're extracting from.
- source_dir: Prefix that should be stripped from the <dir> node.
- commandline: The command that was run under valgrind
- testcase: The test case name, if known.
- '''
-
- # Valgrind errors contain one <what><stack> pair, plus an optional
- # <auxwhat><stack> pair, plus an optional <origin><what><stack></origin>,
- # plus (since 3.5.0) a <suppression></suppression> pair.
- # (Origin is nicely enclosed; too bad the other two aren't.)
- # The most common way to see all three in one report is
- # a syscall with a parameter that points to uninitialized memory, e.g.
- # Format:
- # <error>
- # <unique>0x6d</unique>
- # <tid>1</tid>
- # <kind>SyscallParam</kind>
- # <what>Syscall param write(buf) points to uninitialised byte(s)</what>
- # <stack>
- # <frame>
- # ...
- # </frame>
- # </stack>
- # <auxwhat>Address 0x5c9af4f is 7 bytes inside a block of ...</auxwhat>
- # <stack>
- # <frame>
- # ...
- # </frame>
- # </stack>
- # <origin>
- # <what>Uninitialised value was created by a heap allocation</what>
- # <stack>
- # <frame>
- # ...
- # </frame>
- # </stack>
- # </origin>
- # <suppression>
- # <sname>insert_a_suppression_name_here</sname>
- # <skind>Memcheck:Param</skind>
- # <skaux>write(buf)</skaux>
- # <sframe> <fun>__write_nocancel</fun> </sframe>
- # ...
- # <sframe> <fun>main</fun> </sframe>
- # <rawtext>
- # <![CDATA[
- # {
- # <insert_a_suppression_name_here>
- # Memcheck:Param
- # write(buf)
- # fun:__write_nocancel
- # ...
- # fun:main
- # }
- # ]]>
- # </rawtext>
- # </suppression>
- # </error>
- #
- # Each frame looks like this:
- # <frame>
- # <ip>0x83751BC</ip>
- # <obj>/data/dkegel/chrome-build/src/out/Release/base_unittests</obj>
- # <fn>_ZN7testing8internal12TestInfoImpl7RunTestEPNS_8TestInfoE</fn>
- # <dir>/data/dkegel/chrome-build/src/testing/gtest/src</dir>
- # <file>gtest-internal-inl.h</file>
- # <line>655</line>
- # </frame>
- # although the dir, file, and line elements are missing if there is
- # no debug info.
-
- self._kind = getTextOf(error_node, "kind")
- self._backtraces = []
- self._suppression = None
- self._commandline = commandline
- self._testcase = testcase
- self._additional = []
-
- # Iterate through the nodes, parsing <what|auxwhat><stack> pairs.
- description = None
- for node in error_node.childNodes:
- if node.localName == "what" or node.localName == "auxwhat":
- description = "".join([n.data for n in node.childNodes
- if n.nodeType == n.TEXT_NODE])
- elif node.localName == "xwhat":
- description = getTextOf(node, "text")
- elif node.localName == "stack":
- assert description
- self._backtraces.append([description, gatherFrames(node, source_dir)])
- description = None
- elif node.localName == "origin":
- description = getTextOf(node, "what")
- stack = node.getElementsByTagName("stack")[0]
- frames = gatherFrames(stack, source_dir)
- self._backtraces.append([description, frames])
- description = None
- stack = None
- frames = None
- elif description and node.localName != None:
- # The lastest description has no stack, e.g. "Address 0x28 is unknown"
- self._additional.append(description)
- description = None
-
- if node.localName == "suppression":
- self._suppression = getCDATAOf(node, "rawtext");
-
- def __str__(self):
- ''' Pretty print the type and backtrace(s) of this specific error,
- including suppression (which is just a mangled backtrace).'''
- output = ""
- if (self._commandline):
- output += self._commandline + "\n"
-
- output += self._kind + "\n"
- for backtrace in self._backtraces:
- output += backtrace[0] + "\n"
- filter = subprocess.Popen("c++filt -n", stdin=subprocess.PIPE,
- stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT,
- shell=True,
- close_fds=True)
- buf = ""
- for frame in backtrace[1]:
- buf += (frame[FUNCTION_NAME] or frame[INSTRUCTION_POINTER]) + "\n"
- (stdoutbuf, stderrbuf) = filter.communicate(buf.encode('latin-1'))
- demangled_names = stdoutbuf.split("\n")
-
- i = 0
- for frame in backtrace[1]:
- output += (" " + demangled_names[i])
- i = i + 1
-
- global TheAddressTable
- if TheAddressTable != None and frame[SRC_FILE_DIR] == "":
- # Try using gdb
- foo = TheAddressTable.GetFileLine(frame[OBJECT_FILE],
- frame[INSTRUCTION_POINTER])
- if foo[0] != None:
- output += (" (" + foo[0] + ":" + foo[1] + ")")
- elif frame[SRC_FILE_DIR] != "":
- output += (" (" + frame[SRC_FILE_DIR] + "/" + frame[SRC_FILE_NAME] +
- ":" + frame[SRC_LINE] + ")")
- else:
- output += " (" + frame[OBJECT_FILE] + ")"
- output += "\n"
-
- for additional in self._additional:
- output += additional + "\n"
-
- assert self._suppression != None, "Your Valgrind doesn't generate " \
- "suppressions - is it too old?"
-
- if self._testcase:
- output += "The report came from the `%s` test.\n" % self._testcase
- output += "Suppression (error hash=#%016X#):\n" % self.ErrorHash()
- output += (" For more info on using suppressions see "
- "http://dev.chromium.org/developers/tree-sheriffs/sheriff-details-chromium/memory-sheriff#TOC-Suppressing-memory-reports")
-
- # Widen suppression slightly to make portable between mac and linux
- # TODO(timurrrr): Oops, these transformations should happen
- # BEFORE calculating the hash!
- supp = self._suppression;
- supp = supp.replace("fun:_Znwj", "fun:_Znw*")
- supp = supp.replace("fun:_Znwm", "fun:_Znw*")
- supp = supp.replace("fun:_Znaj", "fun:_Zna*")
- supp = supp.replace("fun:_Znam", "fun:_Zna*")
-
- # Make suppressions even less platform-dependent.
- for sz in [1, 2, 4, 8]:
- supp = supp.replace("Memcheck:Addr%d" % sz, "Memcheck:Unaddressable")
- supp = supp.replace("Memcheck:Value%d" % sz, "Memcheck:Uninitialized")
- supp = supp.replace("Memcheck:Cond", "Memcheck:Uninitialized")
-
- # Split into lines so we can enforce length limits
- supplines = supp.split("\n")
- supp = None # to avoid re-use
-
- # Truncate at line 26 (VG_MAX_SUPP_CALLERS plus 2 for name and type)
- # or at the first 'boring' caller.
- # (https://bugs.kde.org/show_bug.cgi?id=199468 proposes raising
- # VG_MAX_SUPP_CALLERS, but we're probably fine with it as is.)
- newlen = min(26, len(supplines));
-
- # Drop boring frames and all the following.
- enough_frames = False
- for frameno in range(newlen):
- for boring_caller in _BORING_CALLERS:
- if re.match("^ +fun:%s$" % boring_caller, supplines[frameno]):
- newlen = frameno
- enough_frames = True
- break
- if enough_frames:
- break
- if (len(supplines) > newlen):
- supplines = supplines[0:newlen]
- supplines.append("}")
-
- for frame in range(len(supplines)):
- # Replace the always-changing anonymous namespace prefix with "*".
- m = re.match("( +fun:)_ZN.*_GLOBAL__N_.*\.cc_" +
- "[0-9a-fA-F]{8}_[0-9a-fA-F]{8}(.*)",
- supplines[frame])
- if m:
- supplines[frame] = "*".join(m.groups())
-
- output += "\n".join(supplines) + "\n"
-
- return output
-
- def UniqueString(self):
- ''' String to use for object identity. Don't print this, use str(obj)
- instead.'''
- rep = self._kind + " "
- for backtrace in self._backtraces:
- for frame in backtrace[1]:
- rep += frame[FUNCTION_NAME]
-
- if frame[SRC_FILE_DIR] != "":
- rep += frame[SRC_FILE_DIR] + "/" + frame[SRC_FILE_NAME]
- else:
- rep += frame[OBJECT_FILE]
-
- return rep
-
- # This is a device-independent hash identifying the suppression.
- # By printing out this hash we can find duplicate reports between tests and
- # different shards running on multiple buildbots
- def ErrorHash(self):
- return int(hashlib.md5(self.UniqueString()).hexdigest()[:16], 16)
-
- def __hash__(self):
- return hash(self.UniqueString())
- def __eq__(self, rhs):
- return self.UniqueString() == rhs
-
-def log_is_finished(f, force_finish):
- f.seek(0)
- prev_line = ""
- while True:
- line = f.readline()
- if line == "":
- if not force_finish:
- return False
- # Okay, the log is not finished but we can make it up to be parseable:
- if prev_line.strip() in ["</error>", "</errorcounts>", "</status>"]:
- f.write("</valgrindoutput>\n")
- return True
- return False
- if '</valgrindoutput>' in line:
- # Valgrind often has garbage after </valgrindoutput> upon crash.
- f.truncate()
- return True
- prev_line = line
-
-class MemcheckAnalyzer:
- ''' Given a set of Valgrind XML files, parse all the errors out of them,
- unique them and output the results.'''
-
- SANITY_TEST_SUPPRESSIONS = {
- "Memcheck sanity test 01 (memory leak).": 1,
- "Memcheck sanity test 02 (malloc/read left).": 1,
- "Memcheck sanity test 03 (malloc/read right).": 1,
- "Memcheck sanity test 04 (malloc/write left).": 1,
- "Memcheck sanity test 05 (malloc/write right).": 1,
- "Memcheck sanity test 06 (new/read left).": 1,
- "Memcheck sanity test 07 (new/read right).": 1,
- "Memcheck sanity test 08 (new/write left).": 1,
- "Memcheck sanity test 09 (new/write right).": 1,
- "Memcheck sanity test 10 (write after free).": 1,
- "Memcheck sanity test 11 (write after delete).": 1,
- "Memcheck sanity test 12 (array deleted without []).": 1,
- "Memcheck sanity test 13 (single element deleted with []).": 1,
- "Memcheck sanity test 14 (malloc/read uninit).": 1,
- "Memcheck sanity test 15 (new/read uninit).": 1,
- }
-
- # Max time to wait for memcheck logs to complete.
- LOG_COMPLETION_TIMEOUT = 180.0
-
- def __init__(self, source_dir, show_all_leaks=False, use_gdb=False):
- '''Create a parser for Memcheck logs.
-
- Args:
- source_dir: Path to top of source tree for this build
- show_all_leaks: Whether to show even less important leaks
- use_gdb: Whether to use gdb to resolve source filenames and line numbers
- in the report stacktraces
- '''
- self._source_dir = source_dir
- self._show_all_leaks = show_all_leaks
- self._use_gdb = use_gdb
-
- # Contains the set of unique errors
- self._errors = set()
-
- # Contains the time when the we started analyzing the first log file.
- # This variable is used to skip incomplete logs after some timeout.
- self._analyze_start_time = None
-
-
- def Report(self, files, testcase, check_sanity=False):
- '''Reads in a set of files and prints Memcheck report.
-
- Args:
- files: A list of filenames.
- check_sanity: if true, search for SANITY_TEST_SUPPRESSIONS
- '''
- # Beyond the detailed errors parsed by ValgrindError above,
- # the xml file contain records describing suppressions that were used:
- # <suppcounts>
- # <pair>
- # <count>28</count>
- # <name>pango_font_leak_todo</name>
- # </pair>
- # <pair>
- # <count>378</count>
- # <name>bug_13243</name>
- # </pair>
- # </suppcounts
- # Collect these and print them at the end.
- #
- # With our patch for https://bugs.kde.org/show_bug.cgi?id=205000 in,
- # the file also includes records of the form
- # <load_obj><obj>/usr/lib/libgcc_s.1.dylib</obj><ip>0x27000</ip></load_obj>
- # giving the filename and load address of each binary that was mapped
- # into the process.
-
- global TheAddressTable
- if self._use_gdb:
- TheAddressTable = gdb_helper.AddressTable()
- else:
- TheAddressTable = None
- cur_report_errors = set()
- suppcounts = defaultdict(int)
- badfiles = set()
-
- if self._analyze_start_time == None:
- self._analyze_start_time = time.time()
- start_time = self._analyze_start_time
-
- parse_failed = False
- for file in files:
- # Wait up to three minutes for valgrind to finish writing all files,
- # but after that, just skip incomplete files and warn.
- f = open(file, "r+")
- pid = re.match(".*\.([0-9]+)$", file)
- if pid:
- pid = pid.groups()[0]
- found = False
- running = True
- firstrun = True
- skip = False
- origsize = os.path.getsize(file)
- while (running and not found and not skip and
- (firstrun or
- ((time.time() - start_time) < self.LOG_COMPLETION_TIMEOUT))):
- firstrun = False
- f.seek(0)
- if pid:
- # Make sure the process is still running so we don't wait for
- # 3 minutes if it was killed. See http://crbug.com/17453
- ps_out = subprocess.Popen("ps p %s" % pid, shell=True,
- stdout=subprocess.PIPE).stdout
- if len(ps_out.readlines()) < 2:
- running = False
- else:
- skip = True
- running = False
- found = log_is_finished(f, False)
- if not running and not found:
- logging.warn("Valgrind process PID = %s is not running but its "
- "XML log has not been finished correctly.\n"
- "Make it up by adding some closing tags manually." % pid)
- found = log_is_finished(f, not running)
- if running and not found:
- time.sleep(1)
- f.close()
- if not found:
- badfiles.add(file)
- else:
- newsize = os.path.getsize(file)
- if origsize > newsize+1:
- logging.warn(str(origsize - newsize) +
- " bytes of junk were after </valgrindoutput> in %s!" %
- file)
- try:
- parsed_file = parse(file);
- except ExpatError, e:
- parse_failed = True
- logging.warn("could not parse %s: %s" % (file, e))
- lineno = e.lineno - 1
- context_lines = 5
- context_start = max(0, lineno - context_lines)
- context_end = lineno + context_lines + 1
- context_file = open(file, "r")
- for i in range(0, context_start):
- context_file.readline()
- for i in range(context_start, context_end):
- context_data = context_file.readline().rstrip()
- if i != lineno:
- logging.warn(" %s" % context_data)
- else:
- logging.warn("> %s" % context_data)
- context_file.close()
- continue
- if TheAddressTable != None:
- load_objs = parsed_file.getElementsByTagName("load_obj")
- for load_obj in load_objs:
- obj = getTextOf(load_obj, "obj")
- ip = getTextOf(load_obj, "ip")
- TheAddressTable.AddBinaryAt(obj, ip)
-
- commandline = None
- preamble = parsed_file.getElementsByTagName("preamble")[0];
- for node in preamble.getElementsByTagName("line"):
- if node.localName == "line":
- for x in node.childNodes:
- if x.nodeType == node.TEXT_NODE and "Command" in x.data:
- commandline = x.data
- break
-
- raw_errors = parsed_file.getElementsByTagName("error")
- for raw_error in raw_errors:
- # Ignore "possible" leaks for now by default.
- if (self._show_all_leaks or
- getTextOf(raw_error, "kind") != "Leak_PossiblyLost"):
- error = ValgrindError(self._source_dir,
- raw_error, commandline, testcase)
- if error not in cur_report_errors:
- # We haven't seen such errors doing this report yet...
- if error in self._errors:
- # ... but we saw it in earlier reports, e.g. previous UI test
- cur_report_errors.add("This error was already printed in "
- "some other test, see 'hash=#%016X#'" % \
- error.ErrorHash())
- else:
- # ... and we haven't seen it in other tests as well
- self._errors.add(error)
- cur_report_errors.add(error)
-
- suppcountlist = parsed_file.getElementsByTagName("suppcounts")
- if len(suppcountlist) > 0:
- suppcountlist = suppcountlist[0]
- for node in suppcountlist.getElementsByTagName("pair"):
- count = getTextOf(node, "count");
- name = getTextOf(node, "name");
- suppcounts[name] += int(count)
-
- if len(badfiles) > 0:
- logging.warn("valgrind didn't finish writing %d files?!" % len(badfiles))
- for file in badfiles:
- logging.warn("Last 20 lines of %s :" % file)
- os.system("tail -n 20 '%s' 1>&2" % file)
-
- if parse_failed:
- logging.error("FAIL! Couldn't parse Valgrind output file")
- return -2
-
- common.PrintUsedSuppressionsList(suppcounts)
-
- retcode = 0
- if cur_report_errors:
- logging.error("FAIL! There were %s errors: " % len(cur_report_errors))
-
- if TheAddressTable != None:
- TheAddressTable.ResolveAll()
-
- for error in cur_report_errors:
- logging.error(error)
-
- retcode = -1
-
- # Report tool's insanity even if there were errors.
- if check_sanity:
- remaining_sanity_supp = MemcheckAnalyzer.SANITY_TEST_SUPPRESSIONS
- for (name, count) in suppcounts.iteritems():
- if (name in remaining_sanity_supp and
- remaining_sanity_supp[name] == count):
- del remaining_sanity_supp[name]
- if remaining_sanity_supp:
- logging.error("FAIL! Sanity check failed!")
- logging.info("The following test errors were not handled: ")
- for (name, count) in remaining_sanity_supp.iteritems():
- logging.info(" * %dx %s" % (count, name))
- retcode = -3
-
- if retcode != 0:
- return retcode
-
- logging.info("PASS! No errors found!")
- return 0
-
-
-def _main():
- '''For testing only. The MemcheckAnalyzer class should be imported instead.'''
- parser = optparse.OptionParser("usage: %prog [options] <files to analyze>")
- parser.add_option("", "--source-dir",
- help="path to top of source tree for this build"
- "(used to normalize source paths in baseline)")
-
- (options, args) = parser.parse_args()
- if len(args) == 0:
- parser.error("no filename specified")
- filenames = args
-
- analyzer = MemcheckAnalyzer(options.source_dir, use_gdb=True)
- return analyzer.Report(filenames, None)
-
-
-if __name__ == "__main__":
- sys.exit(_main())
diff --git a/chromium/tools/valgrind/regrind.sh b/chromium/tools/valgrind/regrind.sh
deleted file mode 100755
index 0f90ba737f0..00000000000
--- a/chromium/tools/valgrind/regrind.sh
+++ /dev/null
@@ -1,138 +0,0 @@
-#!/bin/sh
-# Copyright (c) 2012 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.
-
-# Scape errors from the valgrind bots, reproduce them locally,
-# save logs as regrind-TESTNAME.log, and display any errors found.
-# Also save files regrind-failed.txt listing failed tests,
-# and regrind-failed-map.txt showing which bot URLs have which failed tests
-# (handy when filing bugs).
-#
-# Only scrapes linux layout bot at the moment.
-# TODO: handle layout tests that don't have obvious path to test file
-# TODO: extend script to handle more kinds of errors and more tests
-
-# where the valgrind layout bot results live
-LAYOUT_URL="http://build.chromium.org/p/chromium.memory.fyi/builders/Webkit%20Linux%20(valgrind%20layout)"
-# how many builds back to check
-LAYOUT_COUNT=250
-
-# regexp to match valgrind errors
-PATTERN="are definitely|uninitialised|Unhandled exception|\
-Invalid read|Invalid write|Invalid free|Source and desti|Mismatched free|\
-unaddressable byte|vex x86|the 'impossible' happened|\
-valgrind:.*: Assertion.*failed|VALGRIND INTERNAL ERROR"
-
-usage() {
- echo "Usage: regrind.sh [--noscrape][--norepro][--keep]"
- echo "--noscrape: don't scrape bots, just use old regrind-failed.txt"
- echo "--norepro: don't reproduce locally"
- echo "--keep: keep temp files"
- exit 1
-}
-
-# Given a log on stdin, list all the tests that failed in that log.
-layout_list_failed_tests() {
- grep "Command:.*LayoutTests" |
- sed 's/<.*>//' |
- sed 's/.*LayoutTests/LayoutTests/' |
- sort -u |
- tr -d '\015'
-}
-
-# Generate a list of failed tests in regrind-failed.txt by scraping bot.
-# Scrape most recent first, so if user interrupts, he is left with fresh-ish data.
-scrape_layout() {
- rm -f regrind-*.tmp* regrind-failed.txt regrind-failed-map.txt
- touch regrind-failed.txt
-
- # First, grab the number of the latest complete build.
- wget -q -O regrind-builds.html "$LAYOUT_URL"
- latest=`grep "<li><font .*" < regrind-builds.html | head -1 | sed 's/.*#//;s/<.*//'`
-
- echo "Fetching $LAYOUT_COUNT logs from bot"
- # Scrape the desired number of runs (150 is about one cycle)
- first=`expr $latest - $LAYOUT_COUNT`
- i=$latest
- while test $i -ge $first
- do
- url="$LAYOUT_URL/builds/$i/steps/valgrind%20test:%20layout/logs/stdio"
- wget -q -O regrind-$i.tmp "$url"
- # Did any tests fail in this file?
- layout_list_failed_tests < regrind-$i.tmp > regrind-$i.tmp.failed
- if test -s regrind-$i.tmp.failed
- then
- # Yes. Log them to stdout,
- echo "$url"
- cat regrind-$i.tmp.failed
- # to the table regrind-failed-map.txt,
- cat regrind-$i.tmp.failed | sed "s,^,$url ," >> regrind-failed-map.txt
- # and, if not already there, to regrind-failed.txt.
- for test in `cat regrind-$i.tmp.failed`
- do
- fgrep "$test" regrind-failed.txt > /dev/null 2>&1 || echo "$test" >> regrind-failed.txt
- done
- else
- rm regrind-$i.tmp.failed
- fi
- # Sleep 1/3 sec per fetch
- case $i in
- *[036]) sleep 1;;
- esac
- i=`expr $i - 1`
- done
-
- # Finally, munge the logs to identify tests that probably failed.
- sh c.sh -l regrind-*.tmp > regrind-errfiles.txt
- cat `cat regrind-errfiles.txt` | layout_list_failed_tests > regrind-failed.txt
-}
-
-# Run the tests identified in regrind-failed.txt locally under valgrind.
-# Save logs in regrind-$TESTNAME.log.
-repro_layout() {
- echo Running `wc -l < regrind-failed.txt` layout tests.
- for test in `cat regrind-failed.txt`
- do
- logname="`echo $test | tr / _`"
- echo "sh tools/valgrind/valgrind_webkit_tests.sh $test"
- sh tools/valgrind/valgrind_webkit_tests.sh "$test" > regrind-"$logname".log 2>&1
- egrep "$PATTERN" < regrind-"$logname".log | sed 's/==.*==//'
- done
-}
-
-do_repro=1
-do_scrape=1
-do_cleanup=1
-while test ! -z "$1"
-do
- case "$1" in
- --noscrape) do_scrape=0;;
- --norepro) do_repro=0;;
- --keep) do_cleanup=0;;
- *) usage;;
- esac
- shift
-done
-
-echo "WARNING: This script is not supported and may be out of date"
-
-if test $do_scrape = 0 && test $do_repro = 0
-then
- usage
-fi
-
-if test $do_scrape = 1
-then
- scrape_layout
-fi
-
-if test $do_repro = 1
-then
- repro_layout
-fi
-
-if test $do_cleanup = 1
-then
- rm -f regrind-errfiles.txt regrind-*.tmp*
-fi
diff --git a/chromium/tools/valgrind/reliability/url_list.txt b/chromium/tools/valgrind/reliability/url_list.txt
deleted file mode 100644
index ac531225602..00000000000
--- a/chromium/tools/valgrind/reliability/url_list.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-www.google.com
-maps.google.com
-news.google.com
-www.youtube.com
-build.chromium.org/p/chromium/waterfall
-build.chromium.org/p/chromium.memory/console
-build.chromium.org/f/chromium/perf/dashboard/overview.html
-www.slashdot.org
-www.ibanez.co.jp/japan/index.html
-www.bbc.co.uk/arabic/
-www.uni.edu/becker/chinese2.html
diff --git a/chromium/tools/valgrind/scan-build.py b/chromium/tools/valgrind/scan-build.py
deleted file mode 100755
index b58b6cc447e..00000000000
--- a/chromium/tools/valgrind/scan-build.py
+++ /dev/null
@@ -1,227 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 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.
-
-import argparse
-import errno
-import os
-import re
-import sys
-import urllib
-import urllib2
-
-# Where all the data lives.
-ROOT_URL = "http://build.chromium.org/p/chromium.memory.fyi/builders"
-
-# TODO(groby) - support multi-line search from the command line. Useful when
-# scanning for classes of failures, see below.
-SEARCH_STRING = """<p class=\"failure result\">
-Failed memory test: content
-</p>"""
-
-# Location of the log cache.
-CACHE_DIR = "buildlogs.tmp"
-
-# If we don't find anything after searching |CUTOFF| logs, we're probably done.
-CUTOFF = 100
-
-def EnsurePath(path):
- """Makes sure |path| does exist, tries to create it if it doesn't."""
- try:
- os.makedirs(path)
- except OSError as exception:
- if exception.errno != errno.EEXIST:
- raise
-
-
-class Cache(object):
- def __init__(self, root_dir):
- self._root_dir = os.path.abspath(root_dir)
-
- def _LocalName(self, name):
- """If name is a relative path, treat it as relative to cache root.
- If it is absolute and under cache root, pass it through.
- Otherwise, raise error.
- """
- if os.path.isabs(name):
- assert os.path.commonprefix([name, self._root_dir]) == self._root_dir
- else:
- name = os.path.join(self._root_dir, name)
- return name
-
- def _FetchLocal(self, local_name):
- local_name = self._LocalName(local_name)
- EnsurePath(os.path.dirname(local_name))
- if os.path.exists(local_name):
- f = open(local_name, 'r')
- return f.readlines();
- return None
-
- def _FetchRemote(self, remote_name):
- try:
- response = urllib2.urlopen(remote_name)
- except:
- print "Could not fetch", remote_name
- raise
- return response.read()
-
- def Update(self, local_name, remote_name):
- local_name = self._LocalName(local_name)
- EnsurePath(os.path.dirname(local_name))
- blob = self._FetchRemote(remote_name)
- f = open(local_name, "w")
- f.write(blob)
- return blob.splitlines()
-
- def FetchData(self, local_name, remote_name):
- result = self._FetchLocal(local_name)
- if result:
- return result
- # If we get here, the local cache does not exist yet. Fetch, and store.
- return self.Update(local_name, remote_name)
-
-
-class Builder(object):
- def __init__(self, waterfall, name):
- self._name = name
- self._waterfall = waterfall
-
- def Name(self):
- return self._name
-
- def LatestBuild(self):
- return self._waterfall.GetLatestBuild(self._name)
-
- def GetBuildPath(self, build_num):
- return "%s/%s/builds/%d" % (
- self._waterfall._root_url, urllib.quote(self._name), build_num)
-
- def _FetchBuildLog(self, build_num):
- local_build_path = "builds/%s" % self._name
- local_build_file = os.path.join(local_build_path, "%d.log" % build_num)
- return self._waterfall._cache.FetchData(local_build_file,
- self.GetBuildPath(build_num))
-
- def _CheckLog(self, build_num, tester):
- log_lines = self._FetchBuildLog(build_num)
- return any(tester(line) for line in log_lines)
-
- def ScanLogs(self, tester):
- occurrences = []
- build = self.LatestBuild()
- no_results = 0
- while build != 0 and no_results < CUTOFF:
- if self._CheckLog(build, tester):
- occurrences.append(build)
- else:
- no_results = no_results + 1
- build = build - 1
- return occurrences
-
-
-class Waterfall(object):
- def __init__(self, root_url, cache_dir):
- self._root_url = root_url
- self._builders = {}
- self._top_revision = {}
- self._cache = Cache(cache_dir)
-
- def Builders(self):
- return self._builders.values()
-
- def Update(self):
- self._cache.Update("builders", self._root_url)
- self.FetchInfo()
-
- def FetchInfo(self):
- if self._top_revision:
- return
-
- html = self._cache.FetchData("builders", self._root_url)
-
- """ Search for both builders and latest build number in HTML
- <td class="box"><a href="builders/<builder-name>"> identifies a builder
- <a href="builders/<builder-name>/builds/<build-num>"> is the latest build.
- """
- box_matcher = re.compile('.*a href[^>]*>([^<]*)\<')
- build_matcher = re.compile('.*a href=\"builders/(.*)/builds/([0-9]+)\".*')
- last_builder = ""
- for line in html:
- if 'a href="builders/' in line:
- if 'td class="box"' in line:
- last_builder = box_matcher.match(line).group(1)
- self._builders[last_builder] = Builder(self, last_builder)
- else:
- result = build_matcher.match(line)
- builder = result.group(1)
- assert builder == urllib.quote(last_builder)
- self._top_revision[last_builder] = int(result.group(2))
-
- def GetLatestBuild(self, name):
- self.FetchInfo()
- assert self._top_revision
- return self._top_revision[name]
-
-
-class MultiLineChange(object):
- def __init__(self, lines):
- self._tracked_lines = lines
- self._current = 0
-
- def __call__(self, line):
- """ Test a single line against multi-line change.
-
- If it matches the currently active line, advance one line.
- If the current line is the last line, report a match.
- """
- if self._tracked_lines[self._current] in line:
- self._current = self._current + 1
- if self._current == len(self._tracked_lines):
- self._current = 0
- return True
- else:
- self._current = 0
- return False
-
-
-def main(argv):
- # Create argument parser.
- parser = argparse.ArgumentParser()
- commands = parser.add_mutually_exclusive_group(required=True)
- commands.add_argument("--update", action='store_true')
- commands.add_argument("--find", metavar='search term')
- args = parser.parse_args()
-
- path = os.path.abspath(os.path.dirname(argv[0]))
- cache_path = os.path.join(path, CACHE_DIR)
-
- fyi = Waterfall(ROOT_URL, cache_path)
-
- if args.update:
- fyi.Update()
- for builder in fyi.Builders():
- print "Updating", builder.Name()
- builder.ScanLogs(lambda x:False)
-
- if args.find:
- tester = MultiLineChange(args.find.splitlines())
- fyi.FetchInfo()
-
- print "SCANNING FOR ", args.find
- for builder in fyi.Builders():
- print "Scanning", builder.Name()
- occurrences = builder.ScanLogs(tester)
- if occurrences:
- min_build = min(occurrences)
- path = builder.GetBuildPath(min_build)
- print "Earliest occurrence in build %d" % min_build
- print "Latest occurrence in build %d" % max(occurrences)
- print "Latest build: %d" % builder.LatestBuild()
- print path
- print "%d total" % len(occurrences)
-
-
-if __name__ == "__main__":
- sys.exit(main(sys.argv))
-
diff --git a/chromium/tools/valgrind/suppressions.py b/chromium/tools/valgrind/suppressions.py
deleted file mode 100755
index 48955984d2c..00000000000
--- a/chromium/tools/valgrind/suppressions.py
+++ /dev/null
@@ -1,1018 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-# suppressions.py
-
-"""Post-process Valgrind suppression matcher.
-
-Suppressions are defined as follows:
-
-# optional one-line comments anywhere in the suppressions file.
-{
- <Short description of the error>
- Toolname:Errortype
- fun:function_name
- obj:object_filename
- fun:wildcarded_fun*_name
- # an ellipsis wildcards zero or more functions in a stack.
- ...
- fun:some_other_function_name
-}
-
-If ran from the command line, suppressions.py does a self-test
-of the Suppression class.
-"""
-
-import os
-import re
-import sys
-
-sys.path.insert(0, os.path.join(os.path.dirname(__file__),
- '..', 'python', 'google'))
-import path_utils
-
-
-ELLIPSIS = '...'
-
-
-def GetSuppressions():
- suppressions_root = path_utils.ScriptDir()
- JOIN = os.path.join
-
- result = {}
-
- supp_filename = JOIN(suppressions_root, "memcheck", "suppressions.txt")
- vg_common = ReadSuppressionsFromFile(supp_filename)
- supp_filename = JOIN(suppressions_root, "tsan", "suppressions.txt")
- tsan_common = ReadSuppressionsFromFile(supp_filename)
- result['common_suppressions'] = vg_common + tsan_common
-
- supp_filename = JOIN(suppressions_root, "memcheck", "suppressions_linux.txt")
- vg_linux = ReadSuppressionsFromFile(supp_filename)
- supp_filename = JOIN(suppressions_root, "tsan", "suppressions_linux.txt")
- tsan_linux = ReadSuppressionsFromFile(supp_filename)
- result['linux_suppressions'] = vg_linux + tsan_linux
-
- supp_filename = JOIN(suppressions_root, "memcheck", "suppressions_mac.txt")
- vg_mac = ReadSuppressionsFromFile(supp_filename)
- supp_filename = JOIN(suppressions_root, "tsan", "suppressions_mac.txt")
- tsan_mac = ReadSuppressionsFromFile(supp_filename)
- result['mac_suppressions'] = vg_mac + tsan_mac
-
- supp_filename = JOIN(suppressions_root, "tsan", "suppressions_win32.txt")
- tsan_win = ReadSuppressionsFromFile(supp_filename)
- result['win_suppressions'] = tsan_win
-
- supp_filename = JOIN(suppressions_root, "..", "heapcheck", "suppressions.txt")
- result['heapcheck_suppressions'] = ReadSuppressionsFromFile(supp_filename)
-
- supp_filename = JOIN(suppressions_root, "drmemory", "suppressions.txt")
- result['drmem_suppressions'] = ReadSuppressionsFromFile(supp_filename)
- supp_filename = JOIN(suppressions_root, "drmemory", "suppressions_full.txt")
- result['drmem_full_suppressions'] = ReadSuppressionsFromFile(supp_filename)
-
- return result
-
-
-def GlobToRegex(glob_pattern, ignore_case=False):
- """Translate glob wildcards (*?) into regex syntax. Escape the rest."""
- regex = ''
- for char in glob_pattern:
- if char == '*':
- regex += '.*'
- elif char == '?':
- regex += '.'
- elif ignore_case and char.isalpha():
- regex += '[%s%s]' % (char.lower(), char.upper())
- else:
- regex += re.escape(char)
- return ''.join(regex)
-
-
-def StripAndSkipCommentsIterator(lines):
- """Generator of (line_no, line) pairs that strips comments and whitespace."""
- for (line_no, line) in enumerate(lines):
- line = line.strip() # Drop \n
- if line.startswith('#'):
- continue # Comments
- # Skip comment lines, but not empty lines, they indicate the end of a
- # suppression. Add one to the line number as well, since most editors use
- # 1-based numberings, and enumerate is 0-based.
- yield (line_no + 1, line)
-
-
-class Suppression(object):
- """This class represents a single stack trace suppression.
-
- Attributes:
- description: A string representing the error description.
- type: A string representing the error type, e.g. Memcheck:Leak.
- stack: The lines comprising the stack trace for the suppression.
- regex: The actual regex used to match against scraped reports.
- """
-
- def __init__(self, description, type, stack, defined_at, regex):
- """Inits Suppression.
-
- description, type, stack, regex: same as class attributes
- defined_at: file:line identifying where the suppression was defined
- """
- self.description = description
- self.type = type
- self.stack = stack
- self.defined_at = defined_at
- self.regex = re.compile(regex, re.MULTILINE)
-
- def Match(self, suppression_from_report):
- """Returns bool indicating whether this suppression matches
- the suppression generated from Valgrind error report.
-
- We match our suppressions against generated suppressions
- (not against reports) since they have the same format
- while the reports are taken from XML, contain filenames,
- they are demangled, and are generally more difficult to
- parse.
-
- Args:
- suppression_from_report: list of strings (function names).
- Returns:
- True if the suppression is not empty and matches the report.
- """
- if not self.stack:
- return False
- lines = [f.strip() for f in suppression_from_report]
- return self.regex.match('\n'.join(lines) + '\n') is not None
-
-
-def FilenameToTool(filename):
- """Return the name of the tool that a file is related to, or None.
-
- Example mappings:
- tools/heapcheck/suppressions.txt -> heapcheck
- tools/valgrind/tsan/suppressions.txt -> tsan
- tools/valgrind/drmemory/suppressions.txt -> drmemory
- tools/valgrind/drmemory/suppressions_full.txt -> drmemory
- tools/valgrind/memcheck/suppressions.txt -> memcheck
- tools/valgrind/memcheck/suppressions_mac.txt -> memcheck
- """
- filename = os.path.abspath(filename)
- parts = filename.split(os.sep)
- tool = parts[-2]
- if tool in ('heapcheck', 'drmemory', 'memcheck', 'tsan'):
- return tool
- return None
-
-
-def ReadSuppressionsFromFile(filename):
- """Read suppressions from the given file and return them as a list"""
- tool_to_parser = {
- "drmemory": ReadDrMemorySuppressions,
- "memcheck": ReadValgrindStyleSuppressions,
- "tsan": ReadValgrindStyleSuppressions,
- "heapcheck": ReadValgrindStyleSuppressions,
- }
- tool = FilenameToTool(filename)
- assert tool in tool_to_parser, (
- "unknown tool %s for filename %s" % (tool, filename))
- parse_func = tool_to_parser[tool]
-
- # Consider non-existent files to be empty.
- if not os.path.exists(filename):
- return []
-
- input_file = file(filename, 'r')
- try:
- return parse_func(input_file, filename)
- except SuppressionError:
- input_file.close()
- raise
-
-
-class ValgrindStyleSuppression(Suppression):
- """A suppression using the Valgrind syntax.
-
- Most tools, even ones that are not Valgrind-based, use this syntax, ie
- Heapcheck, TSan, etc.
-
- Attributes:
- Same as Suppression.
- """
-
- def __init__(self, description, type, stack, defined_at):
- """Creates a suppression using the Memcheck, TSan, and Heapcheck syntax."""
- regex = '{\n.*\n%s\n' % type
- for line in stack:
- if line == ELLIPSIS:
- regex += '(.*\n)*'
- else:
- regex += GlobToRegex(line)
- regex += '\n'
- regex += '(.*\n)*'
- regex += '}'
-
- # In the recent version of valgrind-variant we've switched
- # from memcheck's default Addr[1248]/Value[1248]/Cond suppression types
- # to simply Unaddressable/Uninitialized.
- # The suppression generator no longer gives us "old" types thus
- # for the "new-type" suppressions:
- # * Memcheck:Unaddressable should also match Addr* reports,
- # * Memcheck:Uninitialized should also match Cond and Value reports,
- #
- # We also want to support legacy suppressions (e.g. copied from
- # upstream bugs etc), so:
- # * Memcheck:Addr[1248] suppressions should match Unaddressable reports,
- # * Memcheck:Cond and Memcheck:Value[1248] should match Uninitialized.
- # Please note the latest two rules only apply to the
- # tools/valgrind/waterfall.sh suppression matcher and the real
- # valgrind-variant Memcheck will not suppress
- # e.g. Addr1 printed as Unaddressable with Addr4 suppression.
- # Be careful to check the access size while copying legacy suppressions!
- for sz in [1, 2, 4, 8]:
- regex = regex.replace("\nMemcheck:Addr%d\n" % sz,
- "\nMemcheck:(Addr%d|Unaddressable)\n" % sz)
- regex = regex.replace("\nMemcheck:Value%d\n" % sz,
- "\nMemcheck:(Value%d|Uninitialized)\n" % sz)
- regex = regex.replace("\nMemcheck:Cond\n",
- "\nMemcheck:(Cond|Uninitialized)\n")
- regex = regex.replace("\nMemcheck:Unaddressable\n",
- "\nMemcheck:(Addr.|Unaddressable)\n")
- regex = regex.replace("\nMemcheck:Uninitialized\n",
- "\nMemcheck:(Cond|Value.|Uninitialized)\n")
-
- return super(ValgrindStyleSuppression, self).__init__(
- description, type, stack, defined_at, regex)
-
- def __str__(self):
- """Stringify."""
- lines = [self.description, self.type] + self.stack
- return "{\n %s\n}\n" % "\n ".join(lines)
-
-
-class SuppressionError(Exception):
- def __init__(self, message, happened_at):
- self._message = message
- self._happened_at = happened_at
-
- def __str__(self):
- return 'Error reading suppressions at %s!\n%s' % (
- self._happened_at, self._message)
-
-
-def ReadValgrindStyleSuppressions(lines, supp_descriptor):
- """Given a list of lines, returns a list of suppressions.
-
- Args:
- lines: a list of lines containing suppressions.
- supp_descriptor: should typically be a filename.
- Used only when printing errors.
- """
- result = []
- cur_descr = ''
- cur_type = ''
- cur_stack = []
- in_suppression = False
- nline = 0
- for line in lines:
- nline += 1
- line = line.strip()
- if line.startswith('#'):
- continue
- if not in_suppression:
- if not line:
- # empty lines between suppressions
- pass
- elif line.startswith('{'):
- in_suppression = True
- pass
- else:
- raise SuppressionError('Expected: "{"',
- "%s:%d" % (supp_descriptor, nline))
- elif line.startswith('}'):
- result.append(
- ValgrindStyleSuppression(cur_descr, cur_type, cur_stack,
- "%s:%d" % (supp_descriptor, nline)))
- cur_descr = ''
- cur_type = ''
- cur_stack = []
- in_suppression = False
- elif not cur_descr:
- cur_descr = line
- continue
- elif not cur_type:
- if (not line.startswith("Memcheck:") and
- not line.startswith("ThreadSanitizer:") and
- (line != "Heapcheck:Leak")):
- raise SuppressionError(
- 'Expected "Memcheck:TYPE", "ThreadSanitizer:TYPE" '
- 'or "Heapcheck:Leak", got "%s"' % line,
- "%s:%d" % (supp_descriptor, nline))
- supp_type = line.split(':')[1]
- if not supp_type in ["Addr1", "Addr2", "Addr4", "Addr8",
- "Cond", "Free", "Jump", "Leak", "Overlap", "Param",
- "Value1", "Value2", "Value4", "Value8",
- "Race", "UnlockNonLocked", "InvalidLock",
- "Unaddressable", "Uninitialized"]:
- raise SuppressionError('Unknown suppression type "%s"' % supp_type,
- "%s:%d" % (supp_descriptor, nline))
- cur_type = line
- continue
- elif re.match("^fun:.*|^obj:.*|^\.\.\.$", line):
- cur_stack.append(line.strip())
- elif len(cur_stack) == 0 and cur_type == "Memcheck:Param":
- cur_stack.append(line.strip())
- else:
- raise SuppressionError(
- '"fun:function_name" or "obj:object_file" or "..." expected',
- "%s:%d" % (supp_descriptor, nline))
- return result
-
-
-def PresubmitCheckSuppressions(supps):
- """Check a list of suppressions and return a list of SuppressionErrors.
-
- Mostly useful for separating the checking logic from the Presubmit API for
- testing.
- """
- known_supp_names = {} # Key: name, Value: suppression.
- errors = []
- for s in supps:
- if re.search("<.*suppression.name.here>", s.description):
- # Suppression name line is
- # <insert_a_suppression_name_here> for Memcheck,
- # <Put your suppression name here> for TSan,
- # name=<insert_a_suppression_name_here> for DrMemory
- errors.append(
- SuppressionError(
- "You've forgotten to put a suppression name like bug_XXX",
- s.defined_at))
- continue
-
- if s.description in known_supp_names:
- errors.append(
- SuppressionError(
- 'Suppression named "%s" is defined more than once, '
- 'see %s' % (s.description,
- known_supp_names[s.description].defined_at),
- s.defined_at))
- else:
- known_supp_names[s.description] = s
- return errors
-
-
-def PresubmitCheck(input_api, output_api):
- """A helper function useful in PRESUBMIT.py
- Returns a list of errors or [].
- """
- sup_regex = re.compile('suppressions.*\.txt$')
- filenames = [f.AbsoluteLocalPath() for f in input_api.AffectedFiles()
- if sup_regex.search(f.LocalPath())]
-
- errors = []
-
- # TODO(timurrrr): warn on putting suppressions into a wrong file,
- # e.g. TSan suppression in a memcheck file.
-
- for f in filenames:
- try:
- supps = ReadSuppressionsFromFile(f)
- errors.extend(PresubmitCheckSuppressions(supps))
- except SuppressionError as e:
- errors.append(e)
-
- return [output_api.PresubmitError(str(e)) for e in errors]
-
-
-class DrMemorySuppression(Suppression):
- """A suppression using the DrMemory syntax.
-
- Attributes:
- instr: The instruction to match.
- Rest inherited from Suppression.
- """
-
- def __init__(self, name, report_type, instr, stack, defined_at):
- """Constructor."""
- self.instr = instr
-
- # Construct the regex.
- regex = '{\n'
- if report_type == 'LEAK':
- regex += '(POSSIBLE )?LEAK'
- else:
- regex += report_type
- regex += '\nname=.*\n'
-
- # TODO(rnk): Implement http://crbug.com/107416#c5 .
- # drmemory_analyze.py doesn't generate suppressions with an instruction in
- # them, so these suppressions will always fail to match. We should override
- # Match to fetch the instruction from the report and try to match against
- # that.
- if instr:
- regex += 'instruction=%s\n' % GlobToRegex(instr)
-
- for line in stack:
- if line == ELLIPSIS:
- regex += '(.*\n)*'
- elif '!' in line:
- (mod, func) = line.split('!')
- if func == ELLIPSIS: # mod!ellipsis frame
- regex += '(%s\!.*\n)+' % GlobToRegex(mod, ignore_case=True)
- else: # mod!func frame
- # Ignore case for the module match, but not the function match.
- regex += '%s\!%s\n' % (GlobToRegex(mod, ignore_case=True),
- GlobToRegex(func, ignore_case=False))
- else:
- regex += GlobToRegex(line)
- regex += '\n'
- regex += '(.*\n)*' # Match anything left in the stack.
- regex += '}'
- return super(DrMemorySuppression, self).__init__(name, report_type, stack,
- defined_at, regex)
-
- def __str__(self):
- """Stringify."""
- text = self.type + "\n"
- if self.description:
- text += "name=%s\n" % self.description
- if self.instr:
- text += "instruction=%s\n" % self.instr
- text += "\n".join(self.stack)
- text += "\n"
- return text
-
-
-# Possible DrMemory error report types. Keep consistent with suppress_name
-# array in drmemory/drmemory/report.c.
-DRMEMORY_ERROR_TYPES = [
- 'UNADDRESSABLE ACCESS',
- 'UNINITIALIZED READ',
- 'INVALID HEAP ARGUMENT',
- 'GDI USAGE ERROR',
- 'HANDLE LEAK',
- 'LEAK',
- 'POSSIBLE LEAK',
- 'WARNING',
- ]
-
-
-# Regexes to match valid drmemory frames.
-DRMEMORY_FRAME_PATTERNS = [
- re.compile(r"^.*\!.*$"), # mod!func
- re.compile(r"^.*!\.\.\.$"), # mod!ellipsis
- re.compile(r"^\<.*\+0x.*\>$"), # <mod+0xoffs>
- re.compile(r"^\<not in a module\>$"),
- re.compile(r"^system call .*$"),
- re.compile(r"^\*$"), # wildcard
- re.compile(r"^\.\.\.$"), # ellipsis
- ]
-
-
-def ReadDrMemorySuppressions(lines, supp_descriptor):
- """Given a list of lines, returns a list of DrMemory suppressions.
-
- Args:
- lines: a list of lines containing suppressions.
- supp_descriptor: should typically be a filename.
- Used only when parsing errors happen.
- """
- lines = StripAndSkipCommentsIterator(lines)
- suppressions = []
- for (line_no, line) in lines:
- if not line:
- continue
- if line not in DRMEMORY_ERROR_TYPES:
- raise SuppressionError('Expected a DrMemory error type, '
- 'found %r instead\n Valid error types: %s' %
- (line, ' '.join(DRMEMORY_ERROR_TYPES)),
- "%s:%d" % (supp_descriptor, line_no))
-
- # Suppression starts here.
- report_type = line
- name = ''
- instr = None
- stack = []
- defined_at = "%s:%d" % (supp_descriptor, line_no)
- found_stack = False
- for (line_no, line) in lines:
- if not found_stack and line.startswith('name='):
- name = line.replace('name=', '')
- elif not found_stack and line.startswith('instruction='):
- instr = line.replace('instruction=', '')
- else:
- # Unrecognized prefix indicates start of stack trace.
- found_stack = True
- if not line:
- # Blank line means end of suppression.
- break
- if not any([regex.match(line) for regex in DRMEMORY_FRAME_PATTERNS]):
- raise SuppressionError(
- ('Unexpected stack frame pattern at line %d\n' +
- 'Frames should be one of the following:\n' +
- ' module!function\n' +
- ' module!...\n' +
- ' <module+0xhexoffset>\n' +
- ' <not in a module>\n' +
- ' system call Name\n' +
- ' *\n' +
- ' ...\n') % line_no, defined_at)
- stack.append(line)
-
- if len(stack) == 0: # In case we hit EOF or blank without any stack frames.
- raise SuppressionError('Suppression "%s" has no stack frames, ends at %d'
- % (name, line_no), defined_at)
- if stack[-1] == ELLIPSIS:
- raise SuppressionError('Suppression "%s" ends in an ellipsis on line %d' %
- (name, line_no), defined_at)
-
- suppressions.append(
- DrMemorySuppression(name, report_type, instr, stack, defined_at))
-
- return suppressions
-
-
-def ParseSuppressionOfType(lines, supp_descriptor, def_line_no, report_type):
- """Parse the suppression starting on this line.
-
- Suppressions start with a type, have an optional name and instruction, and a
- stack trace that ends in a blank line.
- """
-
-
-
-def TestStack(stack, positive, negative, suppression_parser=None):
- """A helper function for SelfTest() that checks a single stack.
-
- Args:
- stack: the stack to match the suppressions.
- positive: the list of suppressions that must match the given stack.
- negative: the list of suppressions that should not match.
- suppression_parser: optional arg for the suppression parser, default is
- ReadValgrindStyleSuppressions.
- """
- if not suppression_parser:
- suppression_parser = ReadValgrindStyleSuppressions
- for supp in positive:
- parsed = suppression_parser(supp.split("\n"), "positive_suppression")
- assert parsed[0].Match(stack.split("\n")), (
- "Suppression:\n%s\ndidn't match stack:\n%s" % (supp, stack))
- for supp in negative:
- parsed = suppression_parser(supp.split("\n"), "negative_suppression")
- assert not parsed[0].Match(stack.split("\n")), (
- "Suppression:\n%s\ndid match stack:\n%s" % (supp, stack))
-
-
-def TestFailPresubmit(supp_text, error_text, suppression_parser=None):
- """A helper function for SelfTest() that verifies a presubmit check fires.
-
- Args:
- supp_text: suppression text to parse.
- error_text: text of the presubmit error we expect to find.
- suppression_parser: optional arg for the suppression parser, default is
- ReadValgrindStyleSuppressions.
- """
- if not suppression_parser:
- suppression_parser = ReadValgrindStyleSuppressions
- try:
- supps = suppression_parser(supp_text.split("\n"), "<presubmit suppression>")
- except SuppressionError, e:
- # If parsing raised an exception, match the error text here.
- assert error_text in str(e), (
- "presubmit text %r not in SuppressionError:\n%r" %
- (error_text, str(e)))
- else:
- # Otherwise, run the presubmit checks over the supps. We expect a single
- # error that has text matching error_text.
- errors = PresubmitCheckSuppressions(supps)
- assert len(errors) == 1, (
- "expected exactly one presubmit error, got:\n%s" % errors)
- assert error_text in str(errors[0]), (
- "presubmit text %r not in SuppressionError:\n%r" %
- (error_text, str(errors[0])))
-
-
-def SelfTest():
- """Tests the Suppression.Match() capabilities."""
-
- test_memcheck_stack_1 = """{
- test
- Memcheck:Leak
- fun:absolutly
- fun:brilliant
- obj:condition
- fun:detection
- fun:expression
- }"""
-
- test_memcheck_stack_2 = """{
- test
- Memcheck:Uninitialized
- fun:absolutly
- fun:brilliant
- obj:condition
- fun:detection
- fun:expression
- }"""
-
- test_memcheck_stack_3 = """{
- test
- Memcheck:Unaddressable
- fun:absolutly
- fun:brilliant
- obj:condition
- fun:detection
- fun:expression
- }"""
-
- test_memcheck_stack_4 = """{
- test
- Memcheck:Addr4
- fun:absolutly
- fun:brilliant
- obj:condition
- fun:detection
- fun:expression
- }"""
-
- test_heapcheck_stack = """{
- test
- Heapcheck:Leak
- fun:absolutly
- fun:brilliant
- obj:condition
- fun:detection
- fun:expression
- }"""
-
- test_tsan_stack = """{
- test
- ThreadSanitizer:Race
- fun:absolutly
- fun:brilliant
- obj:condition
- fun:detection
- fun:expression
- }"""
-
-
- positive_memcheck_suppressions_1 = [
- "{\nzzz\nMemcheck:Leak\nfun:absolutly\n}",
- "{\nzzz\nMemcheck:Leak\nfun:ab*ly\n}",
- "{\nzzz\nMemcheck:Leak\nfun:absolutly\nfun:brilliant\n}",
- "{\nzzz\nMemcheck:Leak\n...\nfun:brilliant\n}",
- "{\nzzz\nMemcheck:Leak\n...\nfun:detection\n}",
- "{\nzzz\nMemcheck:Leak\nfun:absolutly\n...\nfun:detection\n}",
- "{\nzzz\nMemcheck:Leak\nfun:ab*ly\n...\nfun:detection\n}",
- "{\nzzz\nMemcheck:Leak\n...\nobj:condition\n}",
- "{\nzzz\nMemcheck:Leak\n...\nobj:condition\nfun:detection\n}",
- "{\nzzz\nMemcheck:Leak\n...\nfun:brilliant\nobj:condition\n}",
- ]
-
- positive_memcheck_suppressions_2 = [
- "{\nzzz\nMemcheck:Uninitialized\nfun:absolutly\n}",
- "{\nzzz\nMemcheck:Uninitialized\nfun:ab*ly\n}",
- "{\nzzz\nMemcheck:Uninitialized\nfun:absolutly\nfun:brilliant\n}",
- # Legacy suppression types
- "{\nzzz\nMemcheck:Value1\n...\nfun:brilliant\n}",
- "{\nzzz\nMemcheck:Cond\n...\nfun:detection\n}",
- "{\nzzz\nMemcheck:Value8\nfun:absolutly\nfun:brilliant\n}",
- ]
-
- positive_memcheck_suppressions_3 = [
- "{\nzzz\nMemcheck:Unaddressable\nfun:absolutly\n}",
- "{\nzzz\nMemcheck:Unaddressable\nfun:absolutly\nfun:brilliant\n}",
- "{\nzzz\nMemcheck:Unaddressable\nfun:absolutly\nfun:brilliant\n}",
- # Legacy suppression types
- "{\nzzz\nMemcheck:Addr1\n...\nfun:brilliant\n}",
- "{\nzzz\nMemcheck:Addr8\n...\nfun:detection\n}",
- ]
-
- positive_memcheck_suppressions_4 = [
- "{\nzzz\nMemcheck:Addr4\nfun:absolutly\n}",
- "{\nzzz\nMemcheck:Unaddressable\nfun:absolutly\n}",
- "{\nzzz\nMemcheck:Addr4\nfun:absolutly\nfun:brilliant\n}",
- "{\nzzz\nMemcheck:Unaddressable\n...\nfun:brilliant\n}",
- "{\nzzz\nMemcheck:Addr4\n...\nfun:detection\n}",
- ]
-
- positive_heapcheck_suppressions = [
- "{\nzzz\nHeapcheck:Leak\n...\nobj:condition\n}",
- "{\nzzz\nHeapcheck:Leak\nfun:absolutly\n}",
- ]
-
- positive_tsan_suppressions = [
- "{\nzzz\nThreadSanitizer:Race\n...\nobj:condition\n}",
- "{\nzzz\nThreadSanitizer:Race\nfun:absolutly\n}",
- ]
-
- negative_memcheck_suppressions_1 = [
- "{\nzzz\nMemcheck:Leak\nfun:abnormal\n}",
- "{\nzzz\nMemcheck:Leak\nfun:ab*liant\n}",
- "{\nzzz\nMemcheck:Leak\nfun:brilliant\n}",
- "{\nzzz\nMemcheck:Leak\nobj:condition\n}",
- "{\nzzz\nMemcheck:Addr8\nfun:brilliant\n}",
- ]
-
- negative_memcheck_suppressions_2 = [
- "{\nzzz\nMemcheck:Cond\nfun:abnormal\n}",
- "{\nzzz\nMemcheck:Value2\nfun:abnormal\n}",
- "{\nzzz\nMemcheck:Uninitialized\nfun:ab*liant\n}",
- "{\nzzz\nMemcheck:Value4\nfun:brilliant\n}",
- "{\nzzz\nMemcheck:Leak\nobj:condition\n}",
- "{\nzzz\nMemcheck:Addr8\nfun:brilliant\n}",
- "{\nzzz\nMemcheck:Unaddressable\nfun:brilliant\n}",
- ]
-
- negative_memcheck_suppressions_3 = [
- "{\nzzz\nMemcheck:Addr1\nfun:abnormal\n}",
- "{\nzzz\nMemcheck:Uninitialized\nfun:absolutly\n}",
- "{\nzzz\nMemcheck:Addr2\nfun:ab*liant\n}",
- "{\nzzz\nMemcheck:Value4\nfun:brilliant\n}",
- "{\nzzz\nMemcheck:Leak\nobj:condition\n}",
- "{\nzzz\nMemcheck:Addr8\nfun:brilliant\n}",
- ]
-
- negative_memcheck_suppressions_4 = [
- "{\nzzz\nMemcheck:Addr1\nfun:abnormal\n}",
- "{\nzzz\nMemcheck:Addr4\nfun:abnormal\n}",
- "{\nzzz\nMemcheck:Unaddressable\nfun:abnormal\n}",
- "{\nzzz\nMemcheck:Addr1\nfun:absolutly\n}",
- "{\nzzz\nMemcheck:Addr2\nfun:ab*liant\n}",
- "{\nzzz\nMemcheck:Value4\nfun:brilliant\n}",
- "{\nzzz\nMemcheck:Leak\nobj:condition\n}",
- "{\nzzz\nMemcheck:Addr8\nfun:brilliant\n}",
- ]
-
- negative_heapcheck_suppressions = [
- "{\nzzz\nMemcheck:Leak\nfun:absolutly\n}",
- "{\nzzz\nHeapcheck:Leak\nfun:brilliant\n}",
- ]
-
- negative_tsan_suppressions = [
- "{\nzzz\nThreadSanitizer:Leak\nfun:absolutly\n}",
- "{\nzzz\nThreadSanitizer:Race\nfun:brilliant\n}",
- ]
-
- TestStack(test_memcheck_stack_1,
- positive_memcheck_suppressions_1,
- negative_memcheck_suppressions_1)
- TestStack(test_memcheck_stack_2,
- positive_memcheck_suppressions_2,
- negative_memcheck_suppressions_2)
- TestStack(test_memcheck_stack_3,
- positive_memcheck_suppressions_3,
- negative_memcheck_suppressions_3)
- TestStack(test_memcheck_stack_4,
- positive_memcheck_suppressions_4,
- negative_memcheck_suppressions_4)
- TestStack(test_heapcheck_stack, positive_heapcheck_suppressions,
- negative_heapcheck_suppressions)
- TestStack(test_tsan_stack, positive_tsan_suppressions,
- negative_tsan_suppressions)
-
- # TODO(timurrrr): add TestFailPresubmit tests.
-
- ### DrMemory self tests.
-
- # http://crbug.com/96010 suppression.
- stack_96010 = """{
- UNADDRESSABLE ACCESS
- name=<insert_a_suppression_name_here>
- *!TestingProfile::FinishInit
- *!TestingProfile::TestingProfile
- *!BrowserAboutHandlerTest_WillHandleBrowserAboutURL_Test::TestBody
- *!testing::Test::Run
- }"""
-
- suppress_96010 = [
- "UNADDRESSABLE ACCESS\nname=zzz\n...\n*!testing::Test::Run\n",
- ("UNADDRESSABLE ACCESS\nname=zzz\n...\n" +
- "*!BrowserAboutHandlerTest_WillHandleBrowserAboutURL_Test::TestBody\n"),
- "UNADDRESSABLE ACCESS\nname=zzz\n...\n*!BrowserAboutHandlerTest*\n",
- "UNADDRESSABLE ACCESS\nname=zzz\n*!TestingProfile::FinishInit\n",
- # No name should be needed
- "UNADDRESSABLE ACCESS\n*!TestingProfile::FinishInit\n",
- # Whole trace
- ("UNADDRESSABLE ACCESS\n" +
- "*!TestingProfile::FinishInit\n" +
- "*!TestingProfile::TestingProfile\n" +
- "*!BrowserAboutHandlerTest_WillHandleBrowserAboutURL_Test::TestBody\n" +
- "*!testing::Test::Run\n"),
- ]
-
- negative_96010 = [
- # Wrong type
- "UNINITIALIZED READ\nname=zzz\n*!TestingProfile::FinishInit\n",
- # No ellipsis
- "UNADDRESSABLE ACCESS\nname=zzz\n*!BrowserAboutHandlerTest*\n",
- ]
-
- TestStack(stack_96010, suppress_96010, negative_96010,
- suppression_parser=ReadDrMemorySuppressions)
-
- # Invalid heap arg
- stack_invalid = """{
- INVALID HEAP ARGUMENT
- name=asdf
- *!foo
- }"""
- suppress_invalid = [
- "INVALID HEAP ARGUMENT\n*!foo\n",
- ]
- negative_invalid = [
- "UNADDRESSABLE ACCESS\n*!foo\n",
- ]
-
- TestStack(stack_invalid, suppress_invalid, negative_invalid,
- suppression_parser=ReadDrMemorySuppressions)
-
- # Suppress only ntdll
- stack_in_ntdll = """{
- UNADDRESSABLE ACCESS
- name=<insert_a_suppression_name_here>
- ntdll.dll!RtlTryEnterCriticalSection
- }"""
- stack_not_ntdll = """{
- UNADDRESSABLE ACCESS
- name=<insert_a_suppression_name_here>
- notntdll.dll!RtlTryEnterCriticalSection
- }"""
-
- suppress_in_ntdll = [
- "UNADDRESSABLE ACCESS\nntdll.dll!RtlTryEnterCriticalSection\n",
- ]
- suppress_in_any = [
- "UNADDRESSABLE ACCESS\n*!RtlTryEnterCriticalSection\n",
- ]
-
- TestStack(stack_in_ntdll, suppress_in_ntdll + suppress_in_any, [],
- suppression_parser=ReadDrMemorySuppressions)
- # Make sure we don't wildcard away the "not" part and match ntdll.dll by
- # accident.
- TestStack(stack_not_ntdll, suppress_in_any, suppress_in_ntdll,
- suppression_parser=ReadDrMemorySuppressions)
-
- # Suppress a POSSIBLE LEAK with LEAK.
- stack_foo_possible = """{
- POSSIBLE LEAK
- name=foo possible
- *!foo
- }"""
- suppress_foo_possible = [ "POSSIBLE LEAK\n*!foo\n" ]
- suppress_foo_leak = [ "LEAK\n*!foo\n" ]
- TestStack(stack_foo_possible, suppress_foo_possible + suppress_foo_leak, [],
- suppression_parser=ReadDrMemorySuppressions)
-
- # Don't suppress LEAK with POSSIBLE LEAK.
- stack_foo_leak = """{
- LEAK
- name=foo leak
- *!foo
- }"""
- TestStack(stack_foo_leak, suppress_foo_leak, suppress_foo_possible,
- suppression_parser=ReadDrMemorySuppressions)
-
- # Test case insensitivity of module names.
- stack_user32_mixed_case = """{
- LEAK
- name=<insert>
- USER32.dll!foo
- user32.DLL!bar
- user32.dll!baz
- }"""
- suppress_user32 = [ # Module name case doesn't matter.
- "LEAK\nuser32.dll!foo\nuser32.dll!bar\nuser32.dll!baz\n",
- "LEAK\nUSER32.DLL!foo\nUSER32.DLL!bar\nUSER32.DLL!baz\n",
- ]
- no_suppress_user32 = [ # Function name case matters.
- "LEAK\nuser32.dll!FOO\nuser32.dll!BAR\nuser32.dll!BAZ\n",
- "LEAK\nUSER32.DLL!FOO\nUSER32.DLL!BAR\nUSER32.DLL!BAZ\n",
- ]
- TestStack(stack_user32_mixed_case, suppress_user32, no_suppress_user32,
- suppression_parser=ReadDrMemorySuppressions)
-
- # Test mod!... frames.
- stack_kernel32_through_ntdll = """{
- LEAK
- name=<insert>
- kernel32.dll!foo
- KERNEL32.dll!bar
- kernel32.DLL!baz
- ntdll.dll!quux
- }"""
- suppress_mod_ellipsis = [
- "LEAK\nkernel32.dll!...\nntdll.dll!quux\n",
- "LEAK\nKERNEL32.DLL!...\nntdll.dll!quux\n",
- ]
- no_suppress_mod_ellipsis = [
- # Need one or more matching frames, not zero, unlike regular ellipsis.
- "LEAK\nuser32.dll!...\nkernel32.dll!...\nntdll.dll!quux\n",
- ]
- TestStack(stack_kernel32_through_ntdll, suppress_mod_ellipsis,
- no_suppress_mod_ellipsis,
- suppression_parser=ReadDrMemorySuppressions)
-
- # Test that the presubmit checks work.
- forgot_to_name = """
- UNADDRESSABLE ACCESS
- name=<insert_a_suppression_name_here>
- ntdll.dll!RtlTryEnterCriticalSection
- """
- TestFailPresubmit(forgot_to_name, 'forgotten to put a suppression',
- suppression_parser=ReadDrMemorySuppressions)
-
- named_twice = """
- UNADDRESSABLE ACCESS
- name=http://crbug.com/1234
- *!foo
-
- UNADDRESSABLE ACCESS
- name=http://crbug.com/1234
- *!bar
- """
- TestFailPresubmit(named_twice, 'defined more than once',
- suppression_parser=ReadDrMemorySuppressions)
-
- forgot_stack = """
- UNADDRESSABLE ACCESS
- name=http://crbug.com/1234
- """
- TestFailPresubmit(forgot_stack, 'has no stack frames',
- suppression_parser=ReadDrMemorySuppressions)
-
- ends_in_ellipsis = """
- UNADDRESSABLE ACCESS
- name=http://crbug.com/1234
- ntdll.dll!RtlTryEnterCriticalSection
- ...
- """
- TestFailPresubmit(ends_in_ellipsis, 'ends in an ellipsis',
- suppression_parser=ReadDrMemorySuppressions)
-
- bad_stack_frame = """
- UNADDRESSABLE ACCESS
- name=http://crbug.com/1234
- fun:memcheck_style_frame
- """
- TestFailPresubmit(bad_stack_frame, 'Unexpected stack frame pattern',
- suppression_parser=ReadDrMemorySuppressions)
-
- # Test FilenameToTool.
- filenames_to_tools = {
- "tools/heapcheck/suppressions.txt": "heapcheck",
- "tools/valgrind/tsan/suppressions.txt": "tsan",
- "tools/valgrind/drmemory/suppressions.txt": "drmemory",
- "tools/valgrind/drmemory/suppressions_full.txt": "drmemory",
- "tools/valgrind/memcheck/suppressions.txt": "memcheck",
- "tools/valgrind/memcheck/suppressions_mac.txt": "memcheck",
- "asdf/tools/valgrind/memcheck/suppressions_mac.txt": "memcheck",
- "foo/bar/baz/tools/valgrind/memcheck/suppressions_mac.txt": "memcheck",
- "foo/bar/baz/tools/valgrind/suppressions.txt": None,
- "tools/valgrind/suppressions.txt": None,
- }
- for (filename, expected_tool) in filenames_to_tools.items():
- filename.replace('/', os.sep) # Make the path look native.
- tool = FilenameToTool(filename)
- assert tool == expected_tool, (
- "failed to get expected tool for filename %r, expected %s, got %s" %
- (filename, expected_tool, tool))
-
- # Test ValgrindStyleSuppression.__str__.
- supp = ValgrindStyleSuppression("http://crbug.com/1234", "Memcheck:Leak",
- ["...", "fun:foo"], "supp.txt:1")
- # Intentional 3-space indent. =/
- supp_str = ("{\n"
- " http://crbug.com/1234\n"
- " Memcheck:Leak\n"
- " ...\n"
- " fun:foo\n"
- "}\n")
- assert str(supp) == supp_str, (
- "str(supp) != supp_str:\nleft: %s\nright: %s" % (str(supp), supp_str))
-
- # Test DrMemorySuppression.__str__.
- supp = DrMemorySuppression(
- "http://crbug.com/1234", "LEAK", None, ["...", "*!foo"], "supp.txt:1")
- supp_str = ("LEAK\n"
- "name=http://crbug.com/1234\n"
- "...\n"
- "*!foo\n")
- assert str(supp) == supp_str, (
- "str(supp) != supp_str:\nleft: %s\nright: %s" % (str(supp), supp_str))
-
- supp = DrMemorySuppression(
- "http://crbug.com/1234", "UNINITIALIZED READ", "test 0x08(%eax) $0x01",
- ["ntdll.dll!*", "*!foo"], "supp.txt:1")
- supp_str = ("UNINITIALIZED READ\n"
- "name=http://crbug.com/1234\n"
- "instruction=test 0x08(%eax) $0x01\n"
- "ntdll.dll!*\n"
- "*!foo\n")
- assert str(supp) == supp_str, (
- "str(supp) != supp_str:\nleft: %s\nright: %s" % (str(supp), supp_str))
-
-
-if __name__ == '__main__':
- SelfTest()
- print 'PASS'
diff --git a/chromium/tools/valgrind/test_suppressions.py b/chromium/tools/valgrind/test_suppressions.py
deleted file mode 100755
index d02d0c90445..00000000000
--- a/chromium/tools/valgrind/test_suppressions.py
+++ /dev/null
@@ -1,182 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-import argparse
-from collections import defaultdict
-import os
-import re
-import subprocess
-import sys
-
-import suppressions
-
-
-def ReadReportsFromFile(filename):
- """ Returns a list of (report_hash, report) and the URL of the report on the
- waterfall.
- """
- input_file = file(filename, 'r')
- # reports is a list of (error hash, report) pairs.
- reports = []
- in_suppression = False
- cur_supp = []
- # This stores the last error hash found while reading the file.
- last_hash = ""
- for line in input_file:
- line = line.strip()
- line = line.replace("</span><span class=\"stdout\">", "")
- line = line.replace("</span><span class=\"stderr\">", "")
- line = line.replace("&lt;", "<")
- line = line.replace("&gt;", ">")
- if in_suppression:
- if line == "}":
- cur_supp += ["}"]
- reports += [[last_hash, "\n".join(cur_supp)]]
- in_suppression = False
- cur_supp = []
- last_hash = ""
- else:
- cur_supp += [" "*3 + line]
- elif line == "{":
- in_suppression = True
- cur_supp = ["{"]
- elif line.find("Suppression (error hash=#") == 0:
- last_hash = line[25:41]
- # The line at the end of the file is assumed to store the URL of the report.
- return reports,line
-
-def Demangle(names):
- """ Demangle a list of C++ symbols, return a list of human-readable symbols.
- """
- # -n is not the default on Mac.
- args = ['c++filt', '-n']
- pipe = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
- stdout, _ = pipe.communicate(input='\n'.join(names))
- demangled = stdout.split("\n")
- # Each line ends with a newline, so the final entry of the split output
- # will always be ''.
- assert len(demangled) == len(names)
- return demangled
-
-def GetSymbolsFromReport(report):
- """Extract all symbols from a suppression report."""
- symbols = []
- prefix = "fun:"
- prefix_len = len(prefix)
- for line in report.splitlines():
- index = line.find(prefix)
- if index != -1:
- symbols.append(line[index + prefix_len:])
- return symbols
-
-def PrintTopSymbols(symbol_reports, top_count):
- """Print the |top_count| symbols with the most occurrences."""
- boring_symbols=['malloc', '_Znw*', 'TestBody']
- sorted_reports = sorted(filter(lambda x:x[0] not in boring_symbols,
- symbol_reports.iteritems()),
- key=lambda x:len(x[1]), reverse=True)
- symbols = symbol_reports.keys()
- demangled = Demangle(symbols)
- assert len(demangled) == len(symbols)
- symboltable = dict(zip(symbols, demangled))
-
- print "\n"
- print "Top %d symbols" % top_count
- for (symbol, suppressions) in sorted_reports[:top_count]:
- print "%4d occurrences : %s" % (len(suppressions), symboltable[symbol])
-
-def main(argv):
- supp = suppressions.GetSuppressions()
-
- # all_reports is a map {report: list of urls containing this report}
- all_reports = defaultdict(list)
- report_hashes = {}
- symbol_reports = defaultdict(list)
-
- # Create argument parser.
- parser = argparse.ArgumentParser()
- parser.add_argument('--top-symbols', type=int, default=0,
- help='Print a list of the top <n> symbols')
- parser.add_argument('--symbol-filter', action='append',
- help='Filter out all suppressions not containing the specified symbol(s). '
- 'Matches against the mangled names.')
- parser.add_argument('--exclude-symbol', action='append',
- help='Filter out all suppressions containing the specified symbol(s). '
- 'Matches against the mangled names.')
-
- parser.add_argument('reports', metavar='report file', nargs='+',
- help='List of report files')
- args = parser.parse_args(argv)
-
- for f in args.reports:
- f_reports, url = ReadReportsFromFile(f)
- for (hash, report) in f_reports:
- all_reports[report] += [url]
- report_hashes[report] = hash
-
- reports_count = 0
- for r in all_reports:
- cur_supp = supp['common_suppressions']
- if all([re.search("%20Mac%20|mac_valgrind", url)
- for url in all_reports[r]]):
- # Include mac suppressions if the report is only present on Mac
- cur_supp += supp['mac_suppressions']
- elif all([re.search("Windows%20", url) for url in all_reports[r]]):
- # Include win32 suppressions if the report is only present on Windows
- cur_supp += supp['win_suppressions']
- elif all([re.search("Linux%20", url) for url in all_reports[r]]):
- cur_supp += supp['linux_suppressions']
- # Separate from OS matches as we want to match "Linux%20Heapcheck" twice:
- if all([re.search("%20Heapcheck", url)
- for url in all_reports[r]]):
- cur_supp += supp['heapcheck_suppressions']
- if all(["DrMemory" in url for url in all_reports[r]]):
- cur_supp += supp['drmem_suppressions']
- if all(["DrMemory%20full" in url for url in all_reports[r]]):
- cur_supp += supp['drmem_full_suppressions']
-
- # Test if this report is already suppressed
- skip = False
- for s in cur_supp:
- if s.Match(r.split("\n")):
- skip = True
- break
-
- # Skip reports if none of the symbols are in the report.
- if args.symbol_filter and all(not s in r for s in args.symbol_filter):
- skip = True
- if args.exclude_symbol and any(s in r for s in args.exclude_symbol):
- skip = True
-
- if not skip:
- reports_count += 1
- print "==================================="
- print "This report observed at"
- for url in all_reports[r]:
- print " %s" % url
- print "didn't match any suppressions:"
- print "Suppression (error hash=#%s#):" % (report_hashes[r])
- print r
- print "==================================="
-
- if args.top_symbols > 0:
- symbols = GetSymbolsFromReport(r)
- for symbol in symbols:
- symbol_reports[symbol].append(report_hashes[r])
-
- if reports_count > 0:
- print ("%d unique reports don't match any of the suppressions" %
- reports_count)
- if args.top_symbols > 0:
- PrintTopSymbols(symbol_reports, args.top_symbols)
-
- else:
- print "Congratulations! All reports are suppressed!"
- # TODO(timurrrr): also make sure none of the old suppressions
- # were narrowed too much.
-
-
-if __name__ == "__main__":
- main(sys.argv[1:])
diff --git a/chromium/tools/valgrind/tsan/OWNERS b/chromium/tools/valgrind/tsan/OWNERS
deleted file mode 100644
index 72e8ffc0db8..00000000000
--- a/chromium/tools/valgrind/tsan/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-*
diff --git a/chromium/tools/valgrind/tsan/PRESUBMIT.py b/chromium/tools/valgrind/tsan/PRESUBMIT.py
deleted file mode 100644
index 999dc1de7d4..00000000000
--- a/chromium/tools/valgrind/tsan/PRESUBMIT.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (c) 2012 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.
-"""
-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
-for more details on the presubmit API built into gcl.
-"""
-
-
-def CheckChange(input_api, output_api):
- """Checks the TSan suppressions files for bad suppressions."""
-
- # TODO(timurrrr): find out how to do relative imports
- # and remove this ugly hack. Also, the CheckChange function won't be needed.
- tools_vg_path = input_api.os_path.join(input_api.PresubmitLocalPath(), '..')
- import sys
- old_path = sys.path
- try:
- sys.path = sys.path + [tools_vg_path]
- import suppressions
- return suppressions.PresubmitCheck(input_api, output_api)
- finally:
- sys.path = old_path
-
-
-def CheckChangeOnUpload(input_api, output_api):
- return CheckChange(input_api, output_api)
-
-
-def CheckChangeOnCommit(input_api, output_api):
- return CheckChange(input_api, output_api)
-
-
-def GetPreferredTrySlaves():
- return ['linux_tsan']
diff --git a/chromium/tools/valgrind/tsan/ignores.txt b/chromium/tools/valgrind/tsan/ignores.txt
deleted file mode 100644
index 6d3f73de630..00000000000
--- a/chromium/tools/valgrind/tsan/ignores.txt
+++ /dev/null
@@ -1,189 +0,0 @@
-# This file lists the functions, object files and source files
-# which should be ignored (i.e. not instrumented) by ThreadSanitizer.
-# See http://code.google.com/p/data-race-test/wiki/ThreadSanitizerIgnores.
-
-# ignore these libraries
-obj:*/libfreetype*
-obj:*/libdbus*
-
-# we ignore the whole NSS library for now since
-# its instrumentation is very slow.
-# TODO(timurrrr): investigate whether we need to instrument it
-obj:*/libnss*
-obj:*/nss/*
-
-# ignore pulseaudio - We don't have symbols there and it can be slow otherwise
-obj:*/libpulse*.so*
-
-# ignore this standard stuff
-fun:clone
-fun:fork
-fun:pthread_*
-fun_r:_pthread_exit
-fun_r:_pthread_free_pthread_onstack
-fun_r:random_r
-fun_r:random
-fun_r:rand
-fun_r:srand
-fun:__new_exitfn
-fun:_dl_*
-fun:__dl_*
-fun:*_setjmp*
-
-# dark magic with 'errno' here.
-fun:sys_*
-
-# ignore libc's printf functions
-fun_r:_IO_*
-fun:fwrite
-fun:fflush
-
-# False reports on std::string internals, see
-# http://code.google.com/p/data-race-test/issues/detail?id=40
-fun:*_M_mutateE*
-fun_r:*_M_set_length_and_sharable*
-fun:*_M_is_leaked*
-fun:*_M_is_shared*
-fun:*_M_set_leaked*
-fun:*_M_set_sharable*
-
-# Comparison of std::strings sometimes takes a lot of time but we don't really
-# need precise stack traces there.
-fun_hist:_ZStltIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_
-fun_hist:_ZNKSs7compareERKSs
-
-# Don't instrument intercepts
-src:*ts_valgrind_intercepts.c
-
-##################################################################
-# Don't instrument synchronization code
-src:*base/threading/thread_local_storage*
-src:*base/stats_counters*
-src:*base/synchronization/condition_variable*
-src:*base/synchronization/lock*
-src:*base/synchronization/waitable_event*
-
-# Don't instrument code dealing with atomics (base::subtle)
-fun:*base*subtle*Release_Store*
-fun:*base*subtle*NoBarrier_CompareAndSwap*
-fun:*base*subtle*NoBarrier_Load*
-# Keep some mangling so we don't match NoBarrier_AtomicIncrement
-fun:*base*subtle23Barrier_AtomicIncrement*
-
-# MD5 computations are very slow due since sums are computed by
-# repeatedly calling tiny functions and is unlikely to race with
-# anything.
-src:*base/md5*
-
-# Don't instrument tcmalloc
-src:*/tcmalloc/*
-
-# This function is heavy in net_unittests
-fun_r:*disk_cache*BackendImpl*CheckAllEntries*
-
-# V8 is a hot-spot under ThreadSanitizer.
-# Lots of tiny functions there...
-# TODO(timurrrr):
-# Can we miss data races on V8 objects due to non thread-safe API calls
-# if we don't instrument v8::internals?
-fun_r:*v8*internal*
-
-# unibrow namespace contains lots of tiny unicode conversion functions.
-fun_hist:*unibrow*
-
-# Histogram has tiny functions that can be called frequently
-fun_hist:*Histogram*
-# Recursively ignore Histrogram::Add and friends, see http://crbug.com/62694.
-fun_r:*4base*9Histogram*3Add*
-fun_r:*4base*16HistogramSamples*3Add*
-fun_r:*4base*13HistogramBase*7AddTime*
-
-# TODO(timurrrr): SKIA - needs separate testing?
-# SKIA unittest is single-threaded...
-# SKIA uses un-annotated atomic refcount and other sync stuff
-# some functions are HEAVY like png, jpeg decoding
-src:*third_party/skia*
-
-# WebKit hotspot
-fun:*png_write*
-
-# This function generates 25% of memory accesses in net_unittests
-fun:*icu_4_2*UnicodeSet*add*
-
-# SQLite has lots of tiny functions and produce too many segments on some tests.
-# See http://crbug.com/56511
-fun_hist:*sqlite*
-
-# There's some weird failure test going on in this tiny test function in sqlite
-fun_r:threadLockingTest
-
-# Ignore accesses below GetCurrentThreadIdentifier.
-# There is a benign race which is hard to suppress properly,
-# see http://crbug.com/44580
-fun_r:*BrowserThread*GetCurrentThreadIdentifier*
-
-# BrowserThread accesses MessageLoop::current() in ::CurrentlyOn.
-# We can't use suppressions to hide these reports since the concurrent stack
-# is simply "base::Thread::ThreadMain"
-# See http://crbug.com/63678
-fun_r:*BrowserThread*CurrentlyOn*
-
-# zlib is smarter than we are, see http://www.zlib.net/zlib_faq.html#faq36
-fun_r:inflate
-# zlib-related reports, not investigated yet. See http://crbug.com/70932
-fun_r:*remoting*CompressorZlib*Process*
-
-# X11 reads the _XErrorFunction callback in a racey way, see
-# http://crbug.com/65278
-fun:XSetErrorHandler
-
-fun:*IPC*Logging*Enable*
-fun:*IPC*Logging*Disable*
-
-# TSan doesn't support lockf and hence shared memory locks in this function;
-# http://crbug.com/45083
-fun_r:*base*StatsTable*AddCounter*
-
-# TSan doesn't understand internal libc locks, see http://crbug.com/71435
-fun_r:mbsrtowcs
-
-# gethostbyname2_r is thread-safe, however ThreadSanitizer reports races inside it and
-# (sometimes) in __nss_* functions below it.
-# This may be related to
-# https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/59449
-fun_r:gethostbyname2_r*
-
-# TODO(timurrrr): remove this when TSan is updated past r3232
-fun_r:gaih_inet
-
-# Strange reports below _IO_getline, every time in "Concurrent access".
-# Probably the reports are there since we're missing the libc internal locks
-fun_r:_IO_getline*
-
-# A benign race in glib on something called "contention_counter".
-fun:g_slice_alloc
-
-# A benign race in glibc on "random_time_bits".
-fun:__gen_tempname
-
-# A probably-benign race on '__have_o_cloexec' in opendir/__alloc_dir,
-# see http://crbug.com/125928.
-fun_r:__alloc_dir
-fun_r:opendir
-
-# The sqlite cache is racing against a few different stacktraces,
-# so let's ignore it recursively. See http://crbug.com/84094
-fun_r:pcache1Fetch
-
-# "Suppress" a data race in TraceLog::GetCategory which has
-# fun:MessageLoop::RunTask at the top of the "current" stack which we don't want
-# to suppress. See http://crbug.com/98926
-fun:*base*debug*TraceLog*GetCategoryInternal*
-
-# libc threading on GCC 4.6
-fun:arena_thread_freeres
-
-# __strncasecmp_l_ssse3 overreads the buffer causing TSan to report a data race
-# on another object. See http://crbug.com/177074
-fun:*strncasecmp*
-fun:*strcasecmp*
diff --git a/chromium/tools/valgrind/tsan/ignores_win32.txt b/chromium/tools/valgrind/tsan/ignores_win32.txt
deleted file mode 100644
index f38b00f4541..00000000000
--- a/chromium/tools/valgrind/tsan/ignores_win32.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-# This file lists the functions, object files and source files
-# which should be ignored (i.e. not instrumented) by ThreadSanitizer on Windows.
-
-# We ignore security libraries for now since their instrumentation is very slow.
-# TODO(timurrrr): investigate whether we need to instrument them
-obj:*CRYPT32.dll
-obj:*RPCRT4.dll
-fun_r:*SHA256*
-fun_r:*BCryptGenerateSymmetricKey*
-fun_r:*CryptAcquireContext*
-
-obj:*WINHTTP.dll
-obj:*imagehlp.dll
-
-# Instrumenting IP Helper API causes crashes.
-# TODO(szym): investigate http://crbug.com/146119
-obj:*IPHLPAPI.dll
-
-# Use less detailed instrumentation of STL
-fun_hist:*std::*<*
-# Don't instrument some stl internals - they shouldn't be useful
-fun_r:*std::_Debug*
-fun_r:*std::_Lockit*
-
-# Benign race on mutex unlock
-fun:_Mtxunlock
-
-# Benign race during clock initialization
-fun_r:*InitializeClock*
-
-# Some unknown Windows guts
-fun_r:Ordinal_*
-fun:unnamedImageEntryPoint
-fun_r:RtlDestroyQueryDebugBuffer
-fun:_updatetlocinfoEx_nolock
-
-# Strange reports on net_unittests, maybe related to raising
-# a debug exception by PlatformThread
-# TODO(timurrrr): investigate
-fun_r:*PlatformThread*SetName*
-
-# Recursively ignore Histrogram::Add and friends, see http://crbug.com/62694.
-fun_r:base::Histogram::Add
-fun_r:base::HistogramSamples::Add
-fun_r:base::HistogramBase::AddTime
-
-# ffmpegsumo.dll appears to read a few bytes beyond the end of the buffer.
-fun:_ff_prefetch_mmxext
-
-# Shows up as a race in SHELL32.dll when deleting a directory while opening an
-# unrelated file in another thread. Revealed by DiskCacheBackendTest.DeleteOld.
-# See: https://code.google.com/p/data-race-test/issues/detail?id=114
-fun_r:SHFileOperationW
-
-# Ignore internal file I/O synchronization: crbug.com/146724
-fun_r:_lock_file
-fun_r:_lock_file2
-fun_r:_lock
-fun_r:_flsbuf
-fun_r:_unlock_file
-fun_r:_getstream
-
-# http://crbug.com/272065
-obj:*NLAapi.dll
diff --git a/chromium/tools/valgrind/tsan/suppressions.txt b/chromium/tools/valgrind/tsan/suppressions.txt
deleted file mode 100644
index a4061a38060..00000000000
--- a/chromium/tools/valgrind/tsan/suppressions.txt
+++ /dev/null
@@ -1,1141 +0,0 @@
-# There are a few kinds of suppressions in this file.
-# 1. third party stuff we have no control over
-#
-# 2. intentional unit test errors, or stuff that is somehow a false positive
-# in our own code, or stuff that is so trivial it's not worth fixing
-#
-# 3. Suppressions for real chromium bugs that are not yet fixed.
-# These should all be in chromium's bug tracking system (but a few aren't yet).
-# Periodically we should sweep this file and the bug tracker clean by
-# running overnight and removing outdated bugs/suppressions.
-#-----------------------------------------------------------------------
-
-# 1. third party stuff we have no control over
-############################
-# 1.1 Benign races in libc
-
-# A benign race inside the implementation of internal libc mutex
-{
- Benign races in __lll_*lock_*_private
- ThreadSanitizer:Race
- fun:__lll_*lock_*_private
-}
-
-# Benign races below thread-safe time-conversion functions
-{
- fun:__tz*
- ThreadSanitizer:Race
- fun:__tz*
-}
-{
- fun:tzset*
- ThreadSanitizer:Race
- ...
- fun:tzset*
-}
-
-# Benign race in thread-safe function
-{
- fun:mkstemp*
- ThreadSanitizer:Race
- ...
- fun:mkstemp*
-}
-
-# We already ignore memory accesses inside ld
-# but we also need to ignore accesses below it.
-{
- fun:_dl_close
- ThreadSanitizer:Race
- ...
- fun:_dl_close
-}
-
-# fprintf is thread-safe. The benign races happen on the internal lock.
-{
- Benign race below fprintf (1)
- ThreadSanitizer:Race
- ...
- fun:buffered_vfprintf
- ...
- fun:fprintf
-}
-{
- Benign race below fprintf (2)
- ThreadSanitizer:Race
- fun:new_do_write
- fun:vfprintf
-}
-
-{
- fun:timegm
- ThreadSanitizer:Race
- ...
- fun:timegm
-}
-
-{
- fun:mktime
- ThreadSanitizer:Race
- ...
- fun:mktime
-}
-
-# See crbug.com/84244 for benign races in nss.
-{
- Benign race in nss (PR_EnterMonitor)
- ThreadSanitizer:Race
- fun:PR_EnterMonitor
-}
-{
- Benign race in nss (PR_ExitMonitor)
- ThreadSanitizer:Race
- fun:PR_ExitMonitor
-}
-
-{
- False positive on strncasecmp OOB read
- ThreadSanitizer:Race
- fun:__strncasecmp_l_ssse3
- fun:base::strncasecmp
-}
-{
- False positive on strcasecmp OOB read
- ThreadSanitizer:Race
- fun:__strcasecmp_l_ssse3
- fun:base::strcasecmp
-}
-
-{
- Benign race in get_nprocs, uses barriers
- ThreadSanitizer:Race
- fun:get_nprocs
-}
-
-{
- False positives, glibc just uses internal atomics
- ThreadSanitizer:Race
- ...
- fun:getaddrinfo
-}
-
-############################
-# 1.2 Benign races in ICU
-{
- Two writes, same value (ICU gGlobalMutex, gMutexesInUse)
- ThreadSanitizer:Race
- ...
- fun:umtx_init_46
-}
-
-{
- Two writes, same value (ICU gHeapInUse)
- ThreadSanitizer:Race
- fun:uprv_malloc_46
-}
-
-# http://bugs.icu-project.org/trac/ticket/10295
-{
- Two writes, same value (ICU gLibCleanupFunctions[*])
- ThreadSanitizer:Race
- fun:ucln_registerCleanup_46
-}
-
-# Reading a pointer to a mutex being initialized in a concurrent thread.
-{
- A benign race in umtx_lock_46
- ThreadSanitizer:Race
- fun:umtx_lock_46
-}
-
-############################
-# 1.3 Benign races in SQLLite
-# TODO(timurrr|oshima): following four suppressions could be obsolete.
-{
- Two writes, same value (SQLLite pthreadMutexAlloc)
- ThreadSanitizer:Race
- ...
- fun:pthreadMutexAlloc
-}
-
-{
- Two writes, same value (under sqlite3Malloc)
- ThreadSanitizer:Race
- ...
- fun:sqlite3Malloc*
-}
-
-{
- bug_84094_a (Could be benign. See bug for details)
- ThreadSanitizer:Race
- ...
- fun:pcache1Fetch
- fun:sqlite3PcacheFetch
-}
-
-{
- bug_84094_b (Could be benign. See bug for details)
- ThreadSanitizer:Race
- fun:sqlite3StatusSet
- fun:pcache1Alloc
-}
-
-{
- bug_84094_c (Could be benign. See bug for details)
- ThreadSanitizer:Race
- ...
- fun:pcache1Unpin
- fun:pcacheUnpin
- fun:sqlite3PcacheMakeClean
- fun:sqlite3PcacheCleanAll
-}
-
-############################
-# 1.4 Real races in third_party
-{
- Nvidia GL driver destroys an invalid lock
- ThreadSanitizer:InvalidLock
- fun:pthread_mutex_destroy
- obj:*nvidia*/libGL.so.*
-}
-
-# http://code.google.com/p/v8/issues/detail?id=361
-{
- V8: race on Locker::active_
- ThreadSanitizer:Race
- fun:v8::Locker::*
-}
-
-{
- bug_23244 (libevent)
- ThreadSanitizer:Race
- fun:event_*
- fun:event_*
-}
-
-{
- bug_28396 (libevent) (1)
- ThreadSanitizer:Race
- fun:detect_monotonic
- fun:event_base_new
-}
-
-{
- bug_28396 (libevent) (2)
- ThreadSanitizer:Race
- fun:gettime
- fun:event_base_loop
-}
-
-{
- bug_28765 (tcmalloc)
- ThreadSanitizer:Race
- ...
- fun:*tcmalloc*ThreadCache*DeleteCache*
-}
-
-{
- bug_70938
- ThreadSanitizer:Race
- ...
- obj:*libdbus*
-}
-
-{
- bug_84467a (Could be benign. See bug for details)
- ThreadSanitizer:Race
- fun:unixTempFileDir
-}
-
-{
- bug_84467b
- ThreadSanitizer:Race
- fun:getenv
- fun:unixTempFileDir
-}
-
-{
- bug_84467c
- ThreadSanitizer:Race
- fun:__add_to_environ
- fun:::EnvironmentImpl::SetVarImpl
- fun:::EnvironmentImpl::SetVar
-}
-
-{
- bug_84726_a
- ThreadSanitizer:Race
- fun:qsort_r
- fun:qsort
- fun:_xdg_mime_alias_read_from_file
-}
-
-{
- bug_84726_b
- ThreadSanitizer:Race
- fun:qsort_r
- fun:qsort
- fun:_cairo_bentley_ottmann_tessellate_polygon
-}
-
-{
- bug_177061
- ThreadSanitizer:Race
- ...
- fun:*cairo*
-}
-
-# 2. intentional unit test errors, or stuff that is somehow a false positive
-############################
-# 2.1 Data races in tests
-{
- bug_30582
- ThreadSanitizer:Race
- fun:*LongCallbackD*
- fun:*WorkerThreadTickerTest_LongCallback_Test*TestBody*
-}
-
-{
- bug_61731
- ThreadSanitizer:Race
- fun:*Log*
- ...
- fun:*Worker*
- ...
- obj:*ipc_tests
-}
-
-{
- bug_68481 [test-only race on bool]
- ThreadSanitizer:Race
- ...
- fun:tracked_objects::ThreadData::ShutdownSingleThreadedCleanup
- fun:tracked_objects::TrackedObjectsTest_MinimalStartupShutdown_Test::*
-}
-
-# TODO(timurrrr): bug item
-{
- Data race on bool in AssertReporter [test-only]
- ThreadSanitizer:Race
- ...
- fun:*AssertReporter*warn*
-}
-
-# TODO(timurrrr): bug item
-{
- Data race on WatchdogCounter [test-only]
- ThreadSanitizer:Race
- ...
- fun:*WatchdogCounter*larm*
-}
-
-# TODO(timurrrr): bug item
-{
- Data race on counter in WorkQueue [test-only]
- ThreadSanitizer:Race
- ...
- fun:*WorkQueue*
-}
-
-# TODO(timurrrr): bug item
-{
- Data race on vfptr in base/watchdog_unittest
- ThreadSanitizer:Race
- ...
- fun:*WatchdogTest_*arm*Test_Test*TestBody*
-}
-
-# TODO(timurrrr): bug item
-{
- Data race on bool in chrome/browser/net/url_fetcher_unittest (1)
- ThreadSanitizer:Race
- fun:*URLFetcherCancelTest*TestContextReleased*
-}
-{
- Data race on bool in chrome/browser/net/url_fetcher_unittest (2)
- ThreadSanitizer:Race
- fun:*CancelTestURLRequestContext*CancelTestURLRequestContext*
-}
-
-{
- ThreadSanitizer sanity test (ToolsSanityTest.DataRace)
- ThreadSanitizer:Race
- fun:*TOOLS_SANITY_TEST_CONCURRENT_THREAD::ThreadMain
-}
-
-{
- Benign race (or even a false positive) on atomics in ThreadCollisionWarner
- ThreadSanitizer:Race
- fun:base::subtle::NoBarrier_Store
- fun:base::ThreadCollisionWarner::Leave
-}
-
-############################
-# 2.2 Benign races in Chromium
-{
- bug_61179 [benign race on tracked_objects::Births]
- ThreadSanitizer:Race
- fun:tracked_objects::Births::*Birth*
-}
-
-# 3. Suppressions for real chromium bugs that are not yet fixed.
-############################
-# Real races in Chromium
-{
- bug_24419
- ThreadSanitizer:Race
- fun:*BrowserProcessImpl*nspector*iles*
-}
-
-{
- bug_37496
- ThreadSanitizer:Race
- ...
- fun:*browser_sync*SyncShareIntercept*Observe*
-}
-
-{
- bug_41314
- ThreadSanitizer:Race
- ...
- fun:base::LaunchApp*
- fun:ChildProcessLauncher::Context::LaunchInternal*
-}
-
-{
- bug_57266a
- ThreadSanitizer:Race
- ...
- fun:*vp8*_*
-}
-
-{
- bug_57266b
- ThreadSanitizer:Race
- ...
- obj:*libffmpegsumo.*
- fun:ThreadSanitizerStartThread
-}
-
-{
- bug_57266c
- ThreadSanitizer:Race
- fun:thread_encoding_proc
-}
-
-{
- bug_64075a
- ThreadSanitizer:Race
- fun:disk_cache::EntryImpl::GetDataSize*
- fun:net::HttpCache::Transaction::*
-}
-
-{
- bug_64075b
- ThreadSanitizer:Race
- fun:disk_cache::EntryImpl::UpdateSize*
- ...
- fun:disk_cache::EntryImpl::WriteDataImpl*
-}
-{
- bug_66835a
- ThreadSanitizer:Race
- fun:getenv
- fun:::EnvironmentImpl::GetVarImpl
- fun:::EnvironmentImpl::GetVar
- fun:ShellIntegrationLinux::GetDesktopName
- fun:::GetIsDefaultWebClient
- fun:ShellIntegration::GetDefaultBrowser
- fun:::RecordDefaultBrowserUMAStat
- fun:base::internal::RunnableAdapter::Run
-}
-{
- bug_66835b
- ThreadSanitizer:Race
- fun:__add_to_environ
- fun:g_setenv
- ...
- fun:giop_init
- fun:CORBA_ORB_init
- fun:gconf_orb_get
- ...
- fun:gconf_activate_server
- ...
- fun:gconf_engine_get_fuller
- fun:gconf_engine_get_entry
- ...
- fun:GConfTitlebarListener::GConfTitlebarListener
- fun:DefaultSingletonTraits::New
- fun:Singleton::get
- fun:GConfTitlebarListener::GetInstance
- fun:BrowserTitlebar::Init
- fun:BrowserWindowGtk::InitWidgets
- fun:BrowserWindowGtk::Init
- fun:BrowserWindow::CreateBrowserWindow
- fun:::CreateBrowserWindow
- fun:Browser::Browser
- fun:StartupBrowserCreatorImpl::OpenTabsInBrowser
- fun:StartupBrowserCreatorImpl::ProcessSpecifiedURLs
- fun:StartupBrowserCreatorImpl::ProcessStartupURLs
- fun:StartupBrowserCreatorImpl::ProcessLaunchURLs
- fun:StartupBrowserCreatorImpl::Launch
-}
-
-{
- bug_67957
- ThreadSanitizer:Race
- fun:Replace_memcpy
- fun:memcpy
- fun:extensions::Serialize
- fun:extensions::UserScriptMaster::ScriptReloader::RunLoad
-}
-
-{
- bug_72548
- ThreadSanitizer:Race
- ...
- fun:JSC::Yarr::Interpreter::*Disjunction*
- fun:JSC::Yarr::Interpreter::interpret*
- fun:JSC::Yarr::interpret*
-}
-
-{
- bug_86916
- ThreadSanitizer:Race
- fun:loopfilter_frame
- fun:loopfilter_thread
-}
-
-{
- bug_89141
- ThreadSanitizer:Race
- fun:base::Thread::message_loop
- fun:content::BrowserThread::IsMessageLoopValid
- fun:ThreadWatcherList::StartWatching
- fun:ThreadWatcherList::InitializeAndStartWatching
-}
-{
- bug_93932_a
- ThreadSanitizer:Race
- ...
- fun:avcodec_close
- ...
- fun:media::FFmpegVideoDecoder::*
- ...
- fun:media::FFmpegVideoDecode*Test::*
-}
-{
- bug_93932_b
- ThreadSanitizer:Race
- ...
- fun:ff_thread_decode_frame
- fun:avcodec_decode_video2
- ...
- fun:media::FFmpegVideoDecoder::Decode*
-}
-{
- bug_93932_c
- ThreadSanitizer:Race
- fun:Replace_memcpy
- fun:memcpy
- fun:media::CopyPlane
- ...
- fun:media::FFmpegVideoDecoder::Decode*
-}
-{
- bug_93932_d
- ThreadSanitizer:Race
- fun:frame_worker_thread
-}
-{
- bug_93932_e
- ThreadSanitizer:Race
- fun:Replace_memcpy
- fun:memcpy
- fun:ff_thread_decode_frame
- ...
- fun:media::FFmpegVideoDecoder::Decode*
-}
-{
- bug_93932_f
- ThreadSanitizer:Race
- ...
- fun:ff_thread_flush
- ...
- fun:media::FFmpegVideoDecoder::Reset
-}
-{
- bug_93932_g
- ThreadSanitizer:Race
- ...
- fun:ff_frame_thread_free
- ...
- fun:avcodec_close
-}
-{
- bug_93932_h
- ThreadSanitizer:Race
- ...
- fun:render_slice
- fun:vp3_decode_frame
- fun:frame_worker_thread
-}
-{
- bug_93932_i
- ThreadSanitizer:Race
- ...
- fun:ff_thread_flush
- ...
- fun:media::FFmpegVideoDecoder::DoReset
-}
-{
- bug_93932_j
- ThreadSanitizer:Race
- ...
- fun:base::MD5Update
- fun:media::VideoFrame::HashFrameForTesting
- fun:media::PipelineIntegrationTestBase::OnVideoRendererPaint
-}
-{
- bug_93932_k
- ThreadSanitizer:Race
- ...
- fun:media::FFmpegVideoDecoder::Decode
- fun:media::FFmpegVideoDecoder::DecodeBuffer
- fun:media::FFmpegVideoDecoder::DoDecryptOrDecodeBuffer
- fun:media::FFmpegVideoDecoder::DoDecryptOrDecodeBuffer
-}
-{
- bug_100020
- ThreadSanitizer:Race
- fun:linked_ptr_internal::join
- fun:linked_ptr::copy
- ...
- fun:HostContentSettingsMap::GetDefaultContentSetting
-}
-{
- bug_102327_a
- ThreadSanitizer:Race
- fun:tracked_objects::ThreadData::Initialize
- fun:tracked_objects::ThreadData::InitializeThreadContext
- fun:base::Thread::ThreadMain
- fun:base::::ThreadFunc
-}
-{
- bug_102327_b
- ThreadSanitizer:Race
- ...
- fun:tracked_objects::ThreadData::TallyABirthIfActive
- fun:base::PosixDynamicThreadPool::PendingTask::PendingTask
- fun:base::PosixDynamicThreadPool::WaitForTask
- fun:base::::WorkerThread::ThreadMain
- fun:base::::ThreadFunc
-}
-{
- bug_102327_c
- ThreadSanitizer:Race
- fun:tracked_objects::ThreadData::TrackingStatus
-}
-{
- bug_102327_d
- ThreadSanitizer:Race
- fun:tracked_objects::ThreadData::SnapshotMaps
-}
-{
- bug_102327_e
- ThreadSanitizer:Race
- fun:tracked_objects::Births::birth_count
- fun:tracked_objects::ThreadData::SnapshotExecutedTasks
-}
-{
- bug_102327_f
- ThreadSanitizer:Race
- fun:tracked_objects::DeathData::RecordDeath
-}
-{
- bug_103711a
- ThreadSanitizer:Race
- fun:webrtc::Trace::SetLevelFilter
-}
-{
- bug_103711b
- ThreadSanitizer:Race
- fun:webrtc::TraceImpl::TraceCheck
-}
-{
- bug_103711c
- ThreadSanitizer:Race
- fun:webrtc::ThreadPosix::*
-}
-{
- bug_103711d
- ThreadSanitizer:Race
- fun:webrtc::FileWrapper*::*
- ...
- fun:webrtc::TraceImpl::StaticInstance
- fun:webrtc::Trace::ReturnTrace
- fun:webrtc::voe::SharedData::~SharedData
- fun:webrtc::VoiceEngineImpl::~VoiceEngineImpl
- ...
- fun:webrtc::VoiceEngine::Delete
- fun:WebRTCAutoDelete::reset
- ...
- fun:content::WebRTCAudioDeviceTest_Construct_Test::TestBody
-}
-{
- bug_103711e
- ThreadSanitizer:Race
- ...
- fun:content::WebRTCAudioDeviceTest::OnMessageReceived
- ...
- fun:IPC::*
- fun:IPC::Channel::ChannelImpl::OnFileCanReadWithoutBlocking
- ...
- fun:base::MessagePumpLibevent::FileDescriptorWatcher::OnFileCanReadWithoutBlocking
- fun:base::MessagePumpLibevent::OnLibeventNotification
- fun:event_process_active
- fun:event_base_loop
-}
-{
- bug_103711f
- ThreadSanitizer:Race
- fun:webrtc::TracePosix::AddTime
- fun:webrtc::TraceImpl::AddImpl
- fun:webrtc::Trace::Add
- fun:webrtc::ThreadPosix::Run
-}
-{
- bug_103711g
- ThreadSanitizer:Race
- fun:content::WebRTCAudioDeviceTest::SetUp
-}
-{
- bug_103711h
- ThreadSanitizer:Race
- fun:webrtc::EventWrapper::~EventWrapper
- fun:webrtc::EventPosix::~EventPosix
- fun:webrtc::ProcessThreadImpl::~ProcessThreadImpl
- fun:webrtc::ProcessThread::DestroyProcessThread
- fun:webrtc::voe::SharedData::~SharedData
- fun:webrtc::VoiceEngineImpl::~VoiceEngineImpl
- fun:webrtc::VoiceEngine::Delete
- fun:WebRTCAutoDelete::reset
- fun:WebRTCAutoDelete::~WebRTCAutoDelete
- fun:content::WebRTCAudioDeviceTest_Construct_Test::TestBody
-}
-{
- bug_103711i
- ThreadSanitizer:Race
- fun:webrtc::ProcessThreadImpl::Process
- fun:webrtc::ProcessThreadImpl::Run
- fun:webrtc::ThreadPosix::Run
- fun:StartThread
-}
-{
- bug_103711j
- ThreadSanitizer:Race
- fun:webrtc::ProcessThreadImpl::Stop
- fun:webrtc::VoEBaseImpl::TerminateInternal
- fun:webrtc::VoEBaseImpl::Terminate
- fun:content::WebRTCAudioDeviceTest_PlayLocalFile_Test::TestBody
-}
-{
- bug_104769
- ThreadSanitizer:Race
- fun:timeout_correct
- fun:event_base_loop
- fun:base::MessagePumpLibevent::Run
- fun:base::MessageLoop::RunInternal
- fun:base::MessageLoop::RunHandler
-}
-{
- bug_104776_maybe_benign
- ThreadSanitizer:Race
- fun:base::StatisticsRecorder::StatisticsRecorder
- fun:::BrowserMainRunnerImpl::Initialize
- fun:BrowserMain
- fun:::RunNamedProcessTypeMain
- fun:::ContentMainRunnerImpl::Run
- fun:content::ContentMain
- fun:ChromeMain
- fun:main
-}
-{
- bug_106196
- ThreadSanitizer:Race
- fun:tracked_objects::ThreadData::InitializeAndSetTrackingStatus
- fun:*ChildThread::OnSetProfilerStatus
- fun:DispatchToMethod
-}
-{
- bug_107903_a
- ThreadSanitizer:Race
- ...
- fun:TestProfileSyncService::~TestProfileSyncService
- fun:scoped_ptr::reset
- fun:ProfileSyncServiceAutofillTest::TearDown
-}
-{
- bug_107903_b
- ThreadSanitizer:Race
- ...
- fun:syncer::SyncManager::SyncInternal::ShutdownOnSyncThread
- fun:syncer::SyncManager::ShutdownOnSyncThread
- fun:browser_sync::SyncBackendHost::Core::DoShutdown
- fun:base::internal::RunnableAdapter::Run
-}
-{
- bug_107903_c
- ThreadSanitizer:Race
- fun:syncable::DirectoryChangeDelegate::~DirectoryChangeDelegate
- fun:syncer::SyncManager::SyncInternal::~SyncInternal
- fun:syncer::SyncManager::~SyncManager
- fun:scoped_ptr::reset
- fun:browser_sync::SyncBackendHost::Core::DoShutdown
- fun:base::internal::RunnableAdapter::Run
-}
-{
- bug_108408
- ThreadSanitizer:Race
- fun:base::subtle::RefCountedBase::AddRef
- fun:base::RefCounted::AddRef
- fun:net::HttpCache::Transaction::DoCacheWriteData
- fun:net::HttpCache::Transaction::DoLoop
- fun:net::HttpCache::Transaction::ReadFromNetwork
- fun:net::HttpCache::Transaction::Read
- fun:net::URLRequestHttpJob::ReadRawData
- fun:net::URLRequestJob::ReadRawDataHelper
- fun:net::URLRequestJob::Read
- fun:net::URLRequest::Read
- fun:ResourceDispatcherHost::Read
- fun:ResourceDispatcherHost::StartReading
- fun:ResourceDispatcherHost::ResumeRequest
- fun:base::internal::RunnableAdapter::Run
-}
-{
- bug_108539
- ThreadSanitizer:Race
- fun:tracked_objects::ThreadData::InitializeAndSetTrackingStatus
- fun:tracked_objects::ThreadData::ShutdownSingleThreadedCleanup
- fun:tracked_objects::TrackedObjectsTest::TrackedObjectsTest
- fun:tracked_objects::TrackedObjectsTest_MinimalStartupShutdown_Test::TrackedObjectsTest_MinimalStartupShutdown_Test
-}
-{
- bug_112419
- ThreadSanitizer:Race
- ...
- fun:::OCSPTrySendAndReceive
- fun:pkix_pl_Pk11CertStore_GetCRL
- fun:pkix_CrlChecker_CheckExternal
- fun:PKIX_RevocationChecker_Check
- fun:pkix_CheckChain
- fun:pkix_Build_ValidateEntireChain
- fun:pkix_BuildForwardDepthFirstSearch
- fun:pkix_Build_InitiateBuildChain
- fun:PKIX_BuildChain
- fun:CERT_PKIXVerifyCert
- fun:net::::PKIXVerifyCert
- fun:net::X509Certificate::VerifyInternal
- fun:net::X509Certificate::Verify
- fun:net::CertVerifierWorker::Run
- fun:base::internal::RunnableAdapter::Run
-}
-{
- bug_113717
- ThreadSanitizer:Race
- fun:std::swap
- fun:content::RenderThreadImpl::Send
- fun:content::RenderWidget::Send
- fun:content::RenderViewImpl::Send
- fun:content::RenderWidget::DoDeferredUpdate
- fun:content::RenderWidget::DoDeferredUpdateAndSendInputAck
- fun:content::RenderWidget::InvalidationCallback
- fun:base::internal::RunnableAdapter::Run
-}
-{
- bug_115540
- ThreadSanitizer:Race
- fun:base::Thread::message_loop
- fun:content::BrowserThreadImpl::PostTaskHelper
- fun:content::BrowserThread::PostTask
- fun:AudioRendererHost::OnCreated
- fun:media::AudioOutputController::DoCreate
-}
-{
- bug_116559
- ThreadSanitizer:Race
- fun:logging::::LoggingTest_Dcheck_Test::TestBody
- fun:testing::internal::HandleSehExceptionsInMethodIfSupported
-}
-{
- bug_118319_a
- ThreadSanitizer:Race
- fun:content::BrowserThreadImpl::~BrowserThreadImpl
- fun:content::BrowserProcessSubThread::~BrowserProcessSubThread
- fun:scoped_ptr::reset
- fun:content::BrowserMainLoop::ShutdownThreadsAndCleanUp
- fun:::BrowserMainRunnerImpl::Shutdown
- fun:BrowserMain
- fun:::RunNamedProcessTypeMain
- fun:::ContentMainRunnerImpl::Run
- fun:content::ContentMain
- fun:ChromeMain
- fun:main
-}
-{
- bug_118319_b
- ThreadSanitizer:Race
- fun:base::Thread::message_loop
- fun:content::BrowserThreadImpl::PostTaskHelper
- fun:content::BrowserThread::PostTask
- fun:PluginLoaderPosix::GetPluginsToLoad
- fun:base::internal::RunnableAdapter::Run
-}
-{
- bug_118319_c
- ThreadSanitizer:Race
- fun:base::Thread::ThreadMain
- fun:base::::ThreadFunc
-}
-{
- bug_125928_a
- ThreadSanitizer:Race
- fun:__alloc_dir
- fun:opendir
- fun:g_dir_open
- fun:pango_find_map
- fun:itemize_state_process_run
- fun:pango_itemize_with_base_dir
- fun:pango_layout_check_lines
- fun:pango_layout_get_unknown_glyphs_count
- fun:find_invisible_char
- fun:gtk_entry_init
- fun:g_type_create_instance
- fun:g_object_constructor
- fun:g_object_newv
- fun:g_object_new
- ...
- fun:ThemeServiceFactory::BuildServiceInstanceFor
- fun:BrowserContextKeyedServiceFactory::GetServiceForBrowserContext
- fun:ThemeServiceFactory::GetForProfile
- fun:ExtensionService::GarbageCollectExtensions
- fun:ExtensionService::InitAfterImport
- fun:ExtensionService::Observe
- fun:NotificationServiceImpl::Notify
- fun:ProfileManager::OnImportFinished
- fun:ChromeBrowserMainParts::PreMainMessageLoopRunImpl
- fun:ChromeBrowserMainParts::PreMainMessageLoopRun
- fun:content::BrowserMainLoop::CreateThreads
- fun:::BrowserMainRunnerImpl::Initialize
- fun:BrowserMain
- fun:::RunNamedProcessTypeMain
- fun:::ContentMainRunnerImpl::Run
-}
-{
- bug_125928_b
- ThreadSanitizer:Race
- fun:__alloc_dir
- fun:opendir
- fun:base::FileEnumerator::ReadDirectory
- fun:base::FileEnumerator::Next
- fun:::GetPrefsCandidateFilesFromFolder
- fun:ExternalPrefLoader::ReadStandaloneExtensionPrefFiles
- fun:ExternalPrefLoader::LoadOnFileThread
- fun:base::internal::RunnableAdapter::Run
-}
-{
- bug_121574
- ThreadSanitizer:Race
- fun:base::Thread::message_loop
- fun:content::BrowserThreadImpl::PostTaskHelper
- fun:content::BrowserThread::PostTask
- fun:ProcessSingleton::LinuxWatcher::SocketReader::FinishWithACK
- fun:ProcessSingleton::LinuxWatcher::HandleMessage
- fun:base::internal::RunnableAdapter::Run
-}
-{
- bug_131001
- ThreadSanitizer:Race
- ...
- fun:media::AudioOutputMixer::StopStream
- fun:media::AudioOutputProxy::Stop
- fun:media::AudioOutputController::DoStopCloseAndClearStream
- fun:media::AudioOutputController::DoClose
- fun:base::internal::RunnableAdapter::Run
-}
-{
- bug_137701
- ThreadSanitizer:Race
- ...
- fun:_output_*
- fun:_vsnprintf_helper
-}
-{
- bug_137973_a
- ThreadSanitizer:Race
- fun:media::Pipeline::OnVideoTimeUpdate
- fun:base::internal::RunnableAdapter::Run
-}
-{
- bug_137973_b
- ThreadSanitizer:Race
- fun:media::Pipeline::SetState
- fun:media::Pipeline::StopTask
- fun:base::internal::RunnableAdapter::Run
-}
-{
- bug_137973_c
- ThreadSanitizer:Race
- fun:media::Pipeline::SetState
- fun:media::Pipeline::SeekTask
- fun:base::internal::RunnableAdapter::Run
-}
-{
- bug_144894
- ThreadSanitizer:Race
- fun:av_parser_close
- fun:avcodec_open2
- fun:avformat_find_stream_info
- fun:media::FFmpegConfigHelper::SetupStreamConfigs
- fun:media::FFmpegConfigHelper::Parse
- fun:media::WebMStreamParser::ParseInfoAndTracks
- fun:media::WebMStreamParser::Parse
- fun:media::ChunkDemuxer::AppendData
- fun:media::MockMediaSource::AppendAtTime
- fun:media::PipelineIntegrationTest_MediaSource_ConfigChange_WebM_Test::TestBody
-}
-{
- bug_172292
- ThreadSanitizer:Race
- fun:testing::internal::CmpHelperGE
- fun:ThreadWatcherTest_MultipleThreadsResponding_Test::TestBody
- fun:testing::internal::HandleSehExceptionsInMethodIfSupported
-}
-{
- bug_172297
- ThreadSanitizer:Race
- fun:CustomThreadWatcher::UpdateState
- fun:*
- fun:base::internal::RunnableAdapter::Run
-}
-{
- bug_172306
- ThreadSanitizer:Race
- fun:ThreadWatcher::OnPongMessage
- fun:CustomThreadWatcher::OnPongMessage
- fun:base::internal::RunnableAdapter::Run
-}
-{
- bug_175467
- ThreadSanitizer:Race
- ...
- fun:file_util::OpenFile
- fun:visitedlink::VisitedLinkMaster::InitFromFile
- fun:visitedlink::VisitedLinkMaster::InitFromFile
- fun:visitedlink::VisitedLinkMaster::InitFromFile
- fun:visitedlink::VisitedLinkMaster::Init
- fun:visitedlink::VisitedLinkEventsTest::CreateBrowserContext
- fun:content::RenderViewHostTestHarness::SetUp
-}
-{
- bug_178433a
- ThreadSanitizer:Race
- fun:scoped_refptr::operator->
- fun:base::WaitableEvent::Signal
- fun:base::debug::TraceSamplingThread::ThreadMain
- fun:base::::ThreadFunc
-}
-{
- bug_178433b
- ThreadSanitizer:Race
- fun:base::internal::scoped_ptr_impl::get
- ...
- fun:base::debug::TraceSamplingThread::ThreadMain
-}
-{
- bug_225123
- ThreadSanitizer:Race
- fun:setlocale
- ...
- fun:gfx::GtkInitFromCommandLine
-}
-{
- bug_239350
- ThreadSanitizer:Race
- fun:av_buffer_unref
- fun:av_frame_unref
- ...
-}
-{
- bug_256792
- ThreadSanitizer:Race
- fun:media::AudioManagerAlsa::~AudioManagerAlsa
- fun:content::MockAudioManager::~MockAudioManager
- fun:content::MockAudioManager::~MockAudioManager
- fun:base::DefaultDeleter*
- fun:base::internal::scoped_ptr_impl::~scoped_ptr_impl
- fun:scoped_ptr::~scoped_ptr
- fun:content::MediaStreamManagerTest::~MediaStreamManagerTest
- fun:content::MediaStreamManagerTest_MakeAndCancelMediaAccessRequest_Test::~MediaStreamManagerTest_MakeAndCancelMediaAccessRequest_Test
- fun:content::MediaStreamManagerTest_MakeAndCancelMediaAccessRequest_Test::~MediaStreamManagerTest_MakeAndCancelMediaAccessRequest_Test
- fun:testing::Test::DeleteSelf_
- fun:testing::internal::HandleSehExceptionsInMethodIfSupported
-}
-{
- bug_258935
- ThreadSanitizer:Race
- fun:base::Thread::StopSoon
- fun:base::Thread::Stop
- fun:content::UtilityMainThread::~UtilityMainThread
- fun:content::UtilityMainThread::~UtilityMainThread
- fun:base::DefaultDeleter::operator*
- fun:base::internal::scoped_ptr_impl::~scoped_ptr_impl
- fun:scoped_ptr::~scoped_ptr
- fun:content::UtilityProcessHostImpl::~UtilityProcessHostImpl
- fun:content::UtilityProcessHostImpl::~UtilityProcessHostImpl
- fun:content::BrowserChildProcessHostImpl::OnChildDisconnected
- fun:content::ChildProcessHostImpl::OnChannelError
- fun:IPC::Channel::ChannelImpl::ClosePipeOnError
- fun:IPC::Channel::ChannelImpl::OnFileCanReadWithoutBlocking
- fun:base::MessagePumpLibevent::FileDescriptorWatcher::OnFileCanReadWithoutBlocking
- fun:base::MessagePumpLibevent::OnLibeventNotification
-}
-{
- bug_268924_a
- ThreadSanitizer:Race
- fun:base::PowerMonitor::PowerMonitor
- fun:content::ChildThread::Init
- fun:content::ChildThread::ChildThread
- fun:content::UtilityThreadImpl::UtilityThreadImpl
-}
-{
- bug_268924_b
- ThreadSanitizer:Race
- ...
- fun:base::PowerMonitor::*
- fun:content::PowerMonitorMessageBroadcaster::~PowerMonitorMessageBroadcaster
- fun:content::BrowserChildProcessHostImpl::~BrowserChildProcessHostImpl
- fun:content::BrowserChildProcessHostImpl::~BrowserChildProcessHostImpl
-}
-{
- bug_295418
- ThreadSanitizer:Race
- ...
- fun:testing::internal::UntypedFunctionMockerBase::UntypedInvokeWith
- fun:testing::internal::FunctionMockerBase::InvokeWith
- fun:testing::internal::FunctionMocker::Invoke
- fun:content::::MockWebRtcAudioCapturerSink::CaptureData
- fun:content::::MockWebRtcAudioCapturerSink::CaptureData
- fun:content::WebRtcAudioCapturerSinkOwner::CaptureData
- fun:content::WebRtcLocalAudioTrack::Capture
- fun:content::WebRtcAudioCapturer::TrackOwner::Capture
- fun:content::WebRtcAudioCapturer::Capture
- fun:content::::FakeAudioThread::ThreadMain
- fun:base::::ThreadFunc
-}
-{
- bug_313726
- ThreadSanitizer:Race
- fun:MessageLoopHelper::TimerExpired
- fun:base::internal::RunnableAdapter::Run
-}
diff --git a/chromium/tools/valgrind/tsan/suppressions_win32.txt b/chromium/tools/valgrind/tsan/suppressions_win32.txt
deleted file mode 100644
index c6dea2da994..00000000000
--- a/chromium/tools/valgrind/tsan/suppressions_win32.txt
+++ /dev/null
@@ -1,321 +0,0 @@
-############################
-# Reports on the guts of Windows
-{
- UuidCreate
- ThreadSanitizer:Race
- ...
- fun:UuidCreate
-}
-
-{
- ILFindLastID
- ThreadSanitizer:Race
- ...
- fun:ILFindLastID
-}
-
-{
- RpcServerUnregisterIf
- ThreadSanitizer:Race
- ...
- fun:RpcServerUnregisterIf
-}
-
-# http://code.google.com/p/data-race-test/issues/detail?id=45
-{
- accessing an invalid lock in unnamedImageEntryPoint
- ThreadSanitizer:InvalidLock
- fun:unnamedImageEntryPoint
-}
-
-{
- accessing an invalid lock in CoFreeAllLibraries
- ThreadSanitizer:InvalidLock
- fun:CoFreeAllLibraries
-}
-
-{
- bug_158099_mmdevice_endpoint_shutdown_too_fast
- ThreadSanitizer:Race
- fun:GetLocalIdFromEndpointId
- ...
-}
-
-############################
-# Chromium
-
-{
- Benign race durung InitializeClock
- ThreadSanitizer:Race
- ...
- fun:*InitializeClock*
-}
-
-{
- bug_62560
- ThreadSanitizer:Race
- ...
- fun:_initterm
- fun:doexit
-}
-
-{
- accessing an invalid lock under exit/doexit
- ThreadSanitizer:InvalidLock
- fun:*~Lock*
- ...
- fun:doexit
- fun:exit
-}
-{
- bug_81793a
- ThreadSanitizer:Race
- ...
- fun:NetTestSuite::InitializeTestThread
-}
-{
- bug_81793b
- ThreadSanitizer:Race
- ...
- fun:base::MessageLoop::CalculateDelayedRuntime
- fun:base::MessageLoop::Post*Task
-}
-{
- bug_93932a
- ThreadSanitizer:Race
- fun:avcodec_default_release_buffer
- fun:ff_mpeg4video_split
-}
-{
- bug_93932b
- ThreadSanitizer:Race
- ...
- fun:avcodec_close
- fun:media::FFmpegVideoDecoder::ReleaseFFmpegResources
-}
-{
- bug_93932d
- ThreadSanitizer:Race
- fun:memcpy
- fun:media::CopyPlane
-}
-{
- bug_93932e
- ThreadSanitizer:Race
- ...
- fun:ff_thread_finish_setup
- fun:ptw32_threadStart@4
-}
-{
- bug_93932f
- ThreadSanitizer:Race
- ...
- fun:ff_vp3_h_loop_filter_c
- ...
- fun:ff_thread_flush
- fun:media::FFmpegVideoDecoder::Flush
-}
-{
- bug_93932g
- ThreadSanitizer:Race
- ...
- fun:av_parser_close
- ...
- fun:BaseThreadInitThunk
-}
-{
- bug_93932h
- ThreadSanitizer:Race
- ...
- fun:av_parser_close
- ...
- fun:base::internal::RunnableAdapter::Run
-}
-{
- bug_93932i
- ThreadSanitizer:Race
- fun:ff_simple_idct_add_mmx
- ...
- fun:BaseThreadInitThunk
-}
-{
- bug_144928_a
- ThreadSanitizer:Race
- fun:google_breakpad::CrashGenerationServer::Handle*
- fun:google_breakpad::CrashGenerationServer::OnPipeConnected
- fun:RtlSetTimer
- fun:RtlSetTimer
- fun:TpReleaseTimer
- fun:TpReleaseTimer
- fun:RtlMultiByteToUnicodeSize
- fun:TpCallbackMayRunLong
- fun:TpCallbackMayRunLong
- fun:BaseThreadInitThunk
-}
-{
- bug_144928_b
- ThreadSanitizer:Race
- fun:google_breakpad::CrashGenerationServer::~CrashGenerationServer
- fun:google_breakpad::CrashGenerationServer::`scalar deleting destructor'
- fun:base::DefaultDeleter*
- fun:base::internal::scoped_ptr_impl::~scoped_ptr_impl
- fun:remoting::BreakpadWinDeathTest::~BreakpadWinDeathTest
- fun:remoting::BreakpadWinDeathTest_TestAccessViolation_Test::`scalar deleting destructor'
- fun:testing::Test::DeleteSelf_
- fun:testing::internal::HandleExceptionsInMethodIfSupported
-}
-
-{
- bug_146119
- ThreadSanitizer:Race
- ...
- fun:GetAdaptersAddresses
- ...
- fun:base::internal::RunnableAdapter::Run
-}
-
-{
- bug_157076_a
- ThreadSanitizer:Race
- fun:win32thread_worker
- fun:_callthreadstartex
- fun:_threadstartex
- fun:BaseThreadInitThunk
-}
-
-{
- bug_157076_b
- ThreadSanitizer:Race
- fun:memset
- fun:_free_dbg_nolock
- fun:_free_dbg
- fun:_aligned_free_dbg
- fun:_aligned_free
-}
-
-{
- bug_157076_c
- ThreadSanitizer:Race
- fun:memset
- fun:_heap_alloc_dbg_impl
- fun:_nh_malloc_dbg_impl
- fun:_nh_malloc_dbg
- fun:_malloc_dbg
- fun:_aligned_offset_malloc_dbg
- fun:_aligned_malloc
- fun:base::AlignedAlloc
-}
-
-{
- bug_170334
- ThreadSanitizer:Race
- ...
- fun:net::NetworkChangeNotifierWinTest::~NetworkChangeNotifierWinTest
-}
-
-{
- bug_239350
- ThreadSanitizer:Race
- ...
- fun:av_freep
- fun:av_buffer_unref
- fun:av_frame_unref
- ...
-}
-{
- bug_287796
- ThreadSanitizer:Race
- fun:ServerLicensingOpenW
- fun:NdrPointerFree
- fun:NdrPointerFree
- fun:NdrPointerFree
- fun:NdrPointerFree
- fun:NdrPointerFree
- fun:NdrUserMarshalMemorySize
- fun:NdrPointerFree
- fun:I_RpcReceive
- fun:I_RpcReceive
- fun:I_RpcReceive
- fun:NdrRpcSsDefaultFree
- fun:NdrRpcSsDefaultFree
- fun:NdrOleFree
- fun:NdrNonEncapsulatedUnionBufferSize
- fun:NdrNonEncapsulatedUnionBufferSize
-}
-{
- bug_314654_a
- ThreadSanitizer:Race
- ...
- fun:CoCreateInstanceEx
- fun:CoCreateInstanceEx
- fun:CoCreateInstanceEx
- fun:CoCreateInstance
- fun:base::win::ScopedComPtr::CreateInstance
- fun:media::CoreAudioUtil::CreateDeviceEnumerator
-}
-{
- bug_314654_b
- ThreadSanitizer:Race
- fun:.text
- fun:.text
- fun:CoSetState
- fun:CoSetState
- fun:CoGetComCatalog
- fun:CoGetComCatalog
- fun:CoGetComCatalog
- fun:CoInitializeSecurity
- fun:CoTaskMemFree
- fun:CoCreateInstanceEx
- fun:CoCreateInstanceEx
- fun:CoCreateInstanceEx
- fun:CoCreateInstanceEx
- fun:CoCreateInstanceEx
- fun:CoCreateInstance
- fun:base::win::ScopedComPtr::CreateInstance
-}
-{
- bug_326282
- ThreadSanitizer:Race
- ...
- fun:file_util::OpenFile
- fun:base::ReadFileToString
-}
-{
- bug_328521_a
- ThreadSanitizer:Race
- fun:PR_Lock
- fun:pk11_getKeyFromList
- fun:pk11_CreateSymKey
- fun:pk11_ImportSymKeyWithTempl
- fun:PK11_ImportSymKey
- fun:crypto::HMAC::Init
- fun:crypto::HMAC::Init
- fun:crypto::HMAC::Init
- fun:crypto::HMAC::Init
- fun:remoting::protocol::AuthenticationMethod::ApplyHashFunction
- fun:remoting::MakeHostPinHash
- fun:`anonymous namespace'::VerifyGetPinHashResponse
- fun:`anonymous namespace'::VerifyGetPinHashResponse
- fun:`anonymous namespace'::VerifyGetPinHashResponse
- fun:`anonymous namespace'::VerifyGetPinHashResponse
- fun:remoting::NativeMessagingHostTest_All_Test::TestBody
-}
-{
- bug_328521_b
- ThreadSanitizer:Race
- fun:PR_Lock
- fun:sftk_SessionFromHandle
- fun:NSC_GenerateKeyPair
- fun:PK11_GenerateKeyPairWithOpFlags
- fun:PK11_GenerateKeyPairWithFlags
- fun:PK11_GenerateKeyPair
- fun:crypto::RSAPrivateKey::CreateWithParams
- fun:crypto::RSAPrivateKey::CreateWithParams
- fun:crypto::RSAPrivateKey::Create
- fun:crypto::RSAPrivateKey::Create
- fun:remoting::RsaKeyPair::Generate
- fun:remoting::NativeMessagingHost::ProcessGenerateKeyPair
- fun:remoting::NativeMessagingHost::ProcessMessage
- fun:remoting::NativeMessagingHost::ProcessMessage
- fun:base::internal::RunnableAdapter::Run
-}
diff --git a/chromium/tools/valgrind/tsan_analyze.py b/chromium/tools/valgrind/tsan_analyze.py
deleted file mode 100755
index 2c744e23019..00000000000
--- a/chromium/tools/valgrind/tsan_analyze.py
+++ /dev/null
@@ -1,271 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-# tsan_analyze.py
-
-''' Given a ThreadSanitizer output file, parses errors and uniques them.'''
-
-import gdb_helper
-
-from collections import defaultdict
-import hashlib
-import logging
-import optparse
-import os
-import re
-import subprocess
-import sys
-import time
-
-import common
-
-# Global symbol table (ugh)
-TheAddressTable = None
-
-class _StackTraceLine(object):
- def __init__(self, line, address, binary):
- self.raw_line_ = line
- self.address = address
- self.binary = binary
- def __str__(self):
- global TheAddressTable
- file, line = TheAddressTable.GetFileLine(self.binary, self.address)
- if (file is None) or (line is None):
- return self.raw_line_
- else:
- return self.raw_line_.replace(self.binary, '%s:%s' % (file, line))
-
-class TsanAnalyzer(object):
- ''' Given a set of ThreadSanitizer output files, parse all the errors out of
- them, unique them and output the results.'''
-
- LOAD_LIB_RE = re.compile('--[0-9]+-- ([^(:]*) \((0x[0-9a-f]+)\)')
- TSAN_LINE_RE = re.compile('==[0-9]+==\s*[#0-9]+\s*'
- '([0-9A-Fa-fx]+):'
- '(?:[^ ]* )*'
- '([^ :\n]+)'
- '')
- THREAD_CREATION_STR = ("INFO: T.* "
- "(has been created by T.* at this point|is program's main thread)")
-
- SANITY_TEST_SUPPRESSION = ("ThreadSanitizer sanity test "
- "(ToolsSanityTest.DataRace)")
- TSAN_RACE_DESCRIPTION = "Possible data race"
- TSAN_WARNING_DESCRIPTION = ("Unlocking a non-locked lock"
- "|accessing an invalid lock"
- "|which did not acquire this lock")
- RACE_VERIFIER_LINE = "Confirmed a race|unexpected race"
- TSAN_ASSERTION = "Assertion failed: "
-
- def __init__(self, use_gdb=False):
- '''Reads in a set of files.'''
-
- self._use_gdb = use_gdb
- self._cur_testcase = None
-
- def ReadLine(self):
- self.line_ = self.cur_fd_.readline()
- self.stack_trace_line_ = None
- if not self._use_gdb:
- return
- global TheAddressTable
- match = TsanAnalyzer.LOAD_LIB_RE.match(self.line_)
- if match:
- binary, ip = match.groups()
- TheAddressTable.AddBinaryAt(binary, ip)
- return
- match = TsanAnalyzer.TSAN_LINE_RE.match(self.line_)
- if match:
- address, binary_name = match.groups()
- stack_trace_line = _StackTraceLine(self.line_, address, binary_name)
- TheAddressTable.Add(stack_trace_line.binary, stack_trace_line.address)
- self.stack_trace_line_ = stack_trace_line
-
- def ReadSection(self):
- """ Example of a section:
- ==4528== WARNING: Possible data race: {{{
- ==4528== T20 (L{}):
- ==4528== #0 MyTest::Foo1
- ==4528== #1 MyThread::ThreadBody
- ==4528== Concurrent write happened at this point:
- ==4528== T19 (L{}):
- ==4528== #0 MyTest::Foo2
- ==4528== #1 MyThread::ThreadBody
- ==4528== }}}
- ------- suppression -------
- {
- <Put your suppression name here>
- ThreadSanitizer:Race
- fun:MyTest::Foo1
- fun:MyThread::ThreadBody
- }
- ------- end suppression -------
- """
- result = [self.line_]
- if re.search("{{{", self.line_):
- while not re.search('}}}', self.line_):
- self.ReadLine()
- if self.stack_trace_line_ is None:
- result.append(self.line_)
- else:
- result.append(self.stack_trace_line_)
- self.ReadLine()
- if re.match('-+ suppression -+', self.line_):
- # We need to calculate the suppression hash and prepend a line like
- # "Suppression (error hash=#0123456789ABCDEF#):" so the buildbot can
- # extract the suppression snippet.
- supp = ""
- while not re.match('-+ end suppression -+', self.line_):
- self.ReadLine()
- supp += self.line_
- self.ReadLine()
- if self._cur_testcase:
- result.append("The report came from the `%s` test.\n" % \
- self._cur_testcase)
- result.append("Suppression (error hash=#%016X#):\n" % \
- (int(hashlib.md5(supp).hexdigest()[:16], 16)))
- result.append(" For more info on using suppressions see "
- "http://dev.chromium.org/developers/how-tos/using-valgrind/threadsanitizer#TOC-Suppressing-data-races\n")
- result.append(supp)
- else:
- self.ReadLine()
-
- return result
-
- def ReadTillTheEnd(self):
- result = [self.line_]
- while self.line_:
- self.ReadLine()
- result.append(self.line_)
- return result
-
- def ParseReportFile(self, filename):
- '''Parses a report file and returns a list of ThreadSanitizer reports.
-
-
- Args:
- filename: report filename.
- Returns:
- list of (list of (str iff self._use_gdb, _StackTraceLine otherwise)).
- '''
- ret = []
- self.cur_fd_ = open(filename, 'r')
-
- while True:
- # Read ThreadSanitizer reports.
- self.ReadLine()
- if not self.line_:
- break
-
- while True:
- tmp = []
- while re.search(TsanAnalyzer.RACE_VERIFIER_LINE, self.line_):
- tmp.append(self.line_)
- self.ReadLine()
- while re.search(TsanAnalyzer.THREAD_CREATION_STR, self.line_):
- tmp.extend(self.ReadSection())
- if re.search(TsanAnalyzer.TSAN_RACE_DESCRIPTION, self.line_):
- tmp.extend(self.ReadSection())
- ret.append(tmp) # includes RaceVerifier and thread creation stacks
- elif (re.search(TsanAnalyzer.TSAN_WARNING_DESCRIPTION, self.line_) and
- not common.IsWindows()): # workaround for http://crbug.com/53198
- tmp.extend(self.ReadSection())
- ret.append(tmp)
- else:
- break
-
- tmp = []
- if re.search(TsanAnalyzer.TSAN_ASSERTION, self.line_):
- tmp.extend(self.ReadTillTheEnd())
- ret.append(tmp)
- break
-
- match = re.search("used_suppression:\s+([0-9]+)\s(.*)", self.line_)
- if match:
- count, supp_name = match.groups()
- count = int(count)
- self.used_suppressions[supp_name] += count
- self.cur_fd_.close()
- return ret
-
- def GetReports(self, files):
- '''Extracts reports from a set of files.
-
- Reads a set of files and returns a list of all discovered
- ThreadSanitizer race reports. As a side effect, populates
- self.used_suppressions with appropriate info.
- '''
-
- global TheAddressTable
- if self._use_gdb:
- TheAddressTable = gdb_helper.AddressTable()
- else:
- TheAddressTable = None
- reports = []
- self.used_suppressions = defaultdict(int)
- for file in files:
- reports.extend(self.ParseReportFile(file))
- if self._use_gdb:
- TheAddressTable.ResolveAll()
- # Make each line of each report a string.
- reports = map(lambda(x): map(str, x), reports)
- return [''.join(report_lines) for report_lines in reports]
-
- def Report(self, files, testcase, check_sanity=False):
- '''Reads in a set of files and prints ThreadSanitizer report.
-
- Args:
- files: A list of filenames.
- check_sanity: if true, search for SANITY_TEST_SUPPRESSIONS
- '''
-
- # We set up _cur_testcase class-wide variable to avoid passing it through
- # about 5 functions.
- self._cur_testcase = testcase
- reports = self.GetReports(files)
- self._cur_testcase = None # just in case, shouldn't be used anymore
-
- common.PrintUsedSuppressionsList(self.used_suppressions)
-
-
- retcode = 0
- if reports:
- sys.stdout.flush()
- sys.stderr.flush()
- logging.info("FAIL! Found %i report(s)" % len(reports))
- for report in reports:
- logging.info('\n' + report)
- sys.stdout.flush()
- retcode = -1
-
- # Report tool's insanity even if there were errors.
- if (check_sanity and
- TsanAnalyzer.SANITY_TEST_SUPPRESSION not in self.used_suppressions):
- logging.error("FAIL! Sanity check failed!")
- retcode = -3
-
- if retcode != 0:
- return retcode
-
- logging.info("PASS: No reports found")
- return 0
-
-
-def main():
- '''For testing only. The TsanAnalyzer class should be imported instead.'''
- parser = optparse.OptionParser("usage: %prog <files to analyze>")
-
- (options, args) = parser.parse_args()
- if not args:
- parser.error("no filename specified")
- filenames = args
-
- logging.getLogger().setLevel(logging.INFO)
- analyzer = TsanAnalyzer(use_gdb=True)
- return analyzer.Report(filenames, None)
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/valgrind/tsan_v2/ignores.txt b/chromium/tools/valgrind/tsan_v2/ignores.txt
deleted file mode 100644
index 45d08bac602..00000000000
--- a/chromium/tools/valgrind/tsan_v2/ignores.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-# The rules in this file are only applied at compile time.
-# Because the Chrome buildsystem does not automatically touch the files
-# mentioned here, changing this file requires clobbering all TSan v2 bots.
-#
-# Please think twice before you add or remove these rules.
-# Data races should typically go to suppressions.txt.
-
-# See http://crbug.com/102327
-fun:*ThreadData*Initialize*
-
-# See http://crbug.com/172104
-fun:*v8*internal*ThreadEntry*
diff --git a/chromium/tools/valgrind/tsan_v2/suppressions.txt b/chromium/tools/valgrind/tsan_v2/suppressions.txt
deleted file mode 100644
index 656ecbaef37..00000000000
--- a/chromium/tools/valgrind/tsan_v2/suppressions.txt
+++ /dev/null
@@ -1,137 +0,0 @@
-# False positives in libflashplayer.so and libglib.so. Since we don't
-# instrument them, we cannot reason about the synchronization in them.
-race:libflashplayer.so
-race:libglib*.so
-
-# Intentional race in ToolsSanityTest.DataRace in base_unittests.
-race:base/tools_sanity_unittest.cc
-
-# Data race on WatchdogCounter [test-only]
-race:base/threading/watchdog_unittest.cc
-
-# Races in libevent, http://crbug.com/23244
-race:libevent/event.c
-
-# http://crbug.com/46840
-race:base::HistogramSamples::IncreaseSum
-
-# http://crbug.com/84094
-race:sqlite3StatusSet
-race:pcache1EnforceMaxPage
-race:pcache1AllocPage
-
-# http://crbug.com/102327.
-# Test-only race, won't fix.
-race:tracked_objects::ThreadData::ShutdownSingleThreadedCleanup
-
-# http://crbug.com/115540
-race:*GetCurrentThreadIdentifier
-
-# http://crbug.com/120808
-race:base/threading/watchdog.cc
-
-# http://crbug.com/157586
-race:third_party/libvpx/source/libvpx/vp8/decoder/threading.c
-
-# http://crbug.com/158718
-race:third_party/ffmpeg/libavcodec/pthread.c
-race:third_party/ffmpeg/libavcodec/pthread_frame.c
-race:third_party/ffmpeg/libavcodec/vp8.c
-race:third_party/ffmpeg/libavutil/mem.c
-race:*HashFrameForTesting
-race:third_party/ffmpeg/libavcodec/h264pred.c
-race:media::ReleaseData
-
-# http://crbug.com/158922
-race:third_party/libvpx/source/libvpx/vp8/encoder/*
-
-# See http://crbug.com/181502
-race:_M_rep
-race:_M_is_leaked
-
-# http://crbug.com/189177
-race:thread_manager
-race:v8::Locker::Initialize
-
-# http://crbug.com/223352
-race:uprv_malloc_46
-race:uprv_realloc_46
-
-# http://crbug.com/239359
-race:media::TestInputCallback::OnData
-
-# http://crbug.com/244368
-race:skia::BeginPlatformPaint
-
-# http://crbug.com/244385
-race:unixTempFileDir
-
-# http://crbug.com/244755
-race:v8::internal::Zone::NewExpand
-
-# http://crbug.com/244774
-race:webrtc::RTPReceiver::ProcessBitrate
-race:webrtc::RTPSender::ProcessBitrate
-race:webrtc::VideoCodingModuleImpl::Decode
-race:webrtc::RTPSender::SendOutgoingData
-race:webrtc::VP8EncoderImpl::GetEncodedPartitions
-race:webrtc::VP8EncoderImpl::Encode
-race:webrtc::ViEEncoder::DeliverFrame
-
-# http://crbug.com/244856
-race:AutoPulseLock
-
-# http://crbug.com/246968
-race:webrtc::VideoCodingModuleImpl::RegisterPacketRequestCallback
-
-# http://crbug.com/246970
-race:webrtc::EventPosix::StartTimer
-
-# http://crbug.com/246974
-race:content::GpuWatchdogThread::CheckArmed
-
-# http://crbug.com/257396
-race:base::debug::TraceEventTestFixture_TraceSamplingScope_Test::TestBody
-
-# http://crbug.com/257543
-race:*GetObjectFromEntryAddress
-
-# http://crbug.com/268924
-race:base::g_power_monitor
-race:base::PowerMonitor::PowerMonitor
-race:base::PowerMonitor::AddObserver
-
-# http://crbug.com/268941
-race:tracked_objects::ThreadData::tls_index_
-
-# http://crbug.com/268946
-race:CommandLine::HasSwitch
-race:CommandLine::current_process_commandline_
-
-# http://crbug.com/270037
-race:gLibCleanupFunctions
-
-# http://crbug.com/272095
-race:base::g_top_manager
-
-# http://crbug.com/272987
-race:webrtc::MediaStreamTrack<webrtc::AudioTrackInterface>::set_enabled
-
-# http://crbug.com/273047
-race:base::*::g_lazy_tls_ptr
-race:IPC::SyncChannel::ReceivedSyncMsgQueue::lazy_tls_ptr_
-
-# http://crbug.com/280466
-race:content::WebRtcAudioCapturer::SetCapturerSource
-
-# http://crbug.com/290964
-race:PostponeInterruptsScope
-
-# http://crbug.com/296883
-race:net::URLFetcherCore::Stop
-
-# http://crbug.com/310851
-race:net::ProxyResolverV8Tracing::Job::~Job
-
-# http://crbug.com/313726
-race:CallbackWasCalled
diff --git a/chromium/tools/valgrind/unused_suppressions.py b/chromium/tools/valgrind/unused_suppressions.py
deleted file mode 100755
index 0f336f136d0..00000000000
--- a/chromium/tools/valgrind/unused_suppressions.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 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.
-
-import sys
-import urllib2
-
-import suppressions
-
-
-def main():
- supp = suppressions.GetSuppressions()
-
- all_supps = []
- for supps in supp.values():
- all_supps += [s.description for s in supps]
- sys.stdout.write(urllib2.urlopen(
- 'http://chromium-build-logs.appspot.com/unused_suppressions',
- '\n'.join(all_supps)).read())
- return 0
-
-if __name__ == "__main__":
- sys.exit(main())
diff --git a/chromium/tools/valgrind/valgrind.sh b/chromium/tools/valgrind/valgrind.sh
deleted file mode 100755
index 4034c4bc2c3..00000000000
--- a/chromium/tools/valgrind/valgrind.sh
+++ /dev/null
@@ -1,124 +0,0 @@
-#!/bin/bash
-
-# Copyright (c) 2012 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.
-
-# This is a small script for manually launching valgrind, along with passing
-# it the suppression file, and some helpful arguments (automatically attaching
-# the debugger on failures, etc). Run it from your repo root, something like:
-# $ sh ./tools/valgrind/valgrind.sh ./out/Debug/chrome
-#
-# This is mostly intended for running the chrome browser interactively.
-# To run unit tests, you probably want to run chrome_tests.sh instead.
-# That's the script used by the valgrind buildbot.
-
-export THISDIR=`dirname $0`
-
-setup_memcheck() {
- RUN_COMMAND="valgrind"
- GDB=gdb
- EXE_INFO=$(file $1)
- if [[ $? -eq 0 ]]; then
- # Prefer a gdb that matches the executable if it's available.
- if [[ "$EXE_INFO" == *32-bit* && -x /usr/bin/gdb32 ]]; then
- GDB="/usr/bin/gdb32";
- elif [[ "$EXE_INFO" == *64-bit* && -x /usr/bin/gdb64 ]]; then
- GDB="/usr/bin/gdb64";
- fi
- fi
-
- # Prompt to attach gdb when there was an error detected.
- DEFAULT_TOOL_FLAGS=("--db-command=$GDB -nw %f %p" "--db-attach=yes" \
- # Keep the registers in gdb in sync with the code.
- "--vex-iropt-register-updates=allregs-at-mem-access" \
- # Overwrite newly allocated or freed objects
- # with 0x41 to catch inproper use.
- "--malloc-fill=41" "--free-fill=41" \
- # Increase the size of stacks being tracked.
- "--num-callers=30")
-}
-
-setup_tsan() {
- RUN_COMMAND="valgrind-tsan.sh"
- IGNORE_FILE="$THISDIR/tsan/ignores.txt"
- DEFAULT_TOOL_FLAGS=("--announce-threads" "--pure-happens-before=yes" \
- "--ignore=$IGNORE_FILE")
-}
-
-setup_unknown() {
- echo "Unknown tool \"$TOOL_NAME\" specified, the result is not guaranteed"
- DEFAULT_TOOL_FLAGS=()
-}
-
-set -e
-
-if [ $# -eq 0 ]; then
- echo "usage: <command to run> <arguments ...>"
- exit 1
-fi
-
-TOOL_NAME="memcheck"
-declare -a DEFAULT_TOOL_FLAGS[0]
-
-# Select a tool different from memcheck with --tool=TOOL as a first argument
-TMP_STR=`echo $1 | sed 's/^\-\-tool=//'`
-if [ "$TMP_STR" != "$1" ]; then
- TOOL_NAME="$TMP_STR"
- shift
-fi
-
-if echo "$@" | grep "\-\-tool" ; then
- echo "--tool=TOOL must be the first argument" >&2
- exit 1
-fi
-
-case $TOOL_NAME in
- memcheck*) setup_memcheck "$1";;
- tsan*) setup_tsan;;
- *) setup_unknown;;
-esac
-
-
-SUPPRESSIONS="$THISDIR/$TOOL_NAME/suppressions.txt"
-
-CHROME_VALGRIND=`sh $THISDIR/locate_valgrind.sh`
-if [ "$CHROME_VALGRIND" = "" ]
-then
- # locate_valgrind.sh failed
- exit 1
-fi
-echo "Using valgrind binaries from ${CHROME_VALGRIND}"
-
-set -x
-PATH="${CHROME_VALGRIND}/bin:$PATH"
-# We need to set these variables to override default lib paths hard-coded into
-# Valgrind binary.
-export VALGRIND_LIB="$CHROME_VALGRIND/lib/valgrind"
-export VALGRIND_LIB_INNER="$CHROME_VALGRIND/lib/valgrind"
-
-# G_SLICE=always-malloc: make glib use system malloc
-# NSS_DISABLE_UNLOAD=1: make nss skip dlclosing dynamically loaded modules,
-# which would result in "obj:*" in backtraces.
-# NSS_DISABLE_ARENA_FREE_LIST=1: make nss use system malloc
-# G_DEBUG=fatal_warnings: make GTK abort on any critical or warning assertions.
-# If it crashes on you in the Options menu, you hit bug 19751,
-# comment out the G_DEBUG=fatal_warnings line.
-#
-# GTEST_DEATH_TEST_USE_FORK=1: make gtest death tests valgrind-friendly
-#
-# When everyone has the latest valgrind, we might want to add
-# --show-possibly-lost=no
-# to ignore possible but not definite leaks.
-
-G_SLICE=always-malloc \
-NSS_DISABLE_UNLOAD=1 \
-NSS_DISABLE_ARENA_FREE_LIST=1 \
-G_DEBUG=fatal_warnings \
-GTEST_DEATH_TEST_USE_FORK=1 \
-$RUN_COMMAND \
- --trace-children=yes \
- --leak-check=yes \
- --suppressions="$SUPPRESSIONS" \
- "${DEFAULT_TOOL_FLAGS[@]}" \
- "$@"
diff --git a/chromium/tools/valgrind/valgrind_test.py b/chromium/tools/valgrind/valgrind_test.py
deleted file mode 100644
index be96b9df654..00000000000
--- a/chromium/tools/valgrind/valgrind_test.py
+++ /dev/null
@@ -1,1235 +0,0 @@
-# Copyright (c) 2012 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.
-
-"""Runs an exe through Valgrind and puts the intermediate files in a
-directory.
-"""
-
-import datetime
-import glob
-import logging
-import optparse
-import os
-import re
-import shutil
-import stat
-import subprocess
-import sys
-import tempfile
-
-import common
-
-import drmemory_analyze
-import memcheck_analyze
-import tsan_analyze
-
-class BaseTool(object):
- """Abstract class for running Valgrind-, PIN-based and other dynamic
- error detector tools.
-
- Always subclass this and implement ToolCommand with framework- and
- tool-specific stuff.
- """
-
- def __init__(self):
- temp_parent_dir = None
- self.log_parent_dir = ""
- if common.IsWindows():
- # gpu process on Windows Vista+ runs at Low Integrity and can only
- # write to certain directories (http://crbug.com/119131)
- #
- # TODO(bruening): if scripts die in middle and don't clean up temp
- # dir, we'll accumulate files in profile dir. should remove
- # really old files automatically.
- profile = os.getenv("USERPROFILE")
- if profile:
- self.log_parent_dir = profile + "\\AppData\\LocalLow\\"
- if os.path.exists(self.log_parent_dir):
- self.log_parent_dir = common.NormalizeWindowsPath(self.log_parent_dir)
- temp_parent_dir = self.log_parent_dir
- # Generated every time (even when overridden)
- self.temp_dir = tempfile.mkdtemp(prefix="vg_logs_", dir=temp_parent_dir)
- self.log_dir = self.temp_dir # overridable by --keep_logs
- self.option_parser_hooks = []
- # TODO(glider): we may not need some of the env vars on some of the
- # platforms.
- self._env = {
- "G_SLICE" : "always-malloc",
- "NSS_DISABLE_UNLOAD" : "1",
- "NSS_DISABLE_ARENA_FREE_LIST" : "1",
- "GTEST_DEATH_TEST_USE_FORK": "1",
- }
-
- def ToolName(self):
- raise NotImplementedError, "This method should be implemented " \
- "in the tool-specific subclass"
-
- def Analyze(self, check_sanity=False):
- raise NotImplementedError, "This method should be implemented " \
- "in the tool-specific subclass"
-
- def RegisterOptionParserHook(self, hook):
- # Frameworks and tools can add their own flags to the parser.
- self.option_parser_hooks.append(hook)
-
- def CreateOptionParser(self):
- # Defines Chromium-specific flags.
- self._parser = optparse.OptionParser("usage: %prog [options] <program to "
- "test>")
- self._parser.disable_interspersed_args()
- self._parser.add_option("-t", "--timeout",
- dest="timeout", metavar="TIMEOUT", default=10000,
- help="timeout in seconds for the run (default 10000)")
- self._parser.add_option("", "--build-dir",
- help="the location of the compiler output")
- self._parser.add_option("", "--source-dir",
- help="path to top of source tree for this build"
- "(used to normalize source paths in baseline)")
- self._parser.add_option("", "--gtest_filter", default="",
- help="which test case to run")
- self._parser.add_option("", "--gtest_repeat",
- help="how many times to run each test")
- self._parser.add_option("", "--gtest_print_time", action="store_true",
- default=False,
- help="show how long each test takes")
- self._parser.add_option("", "--ignore_exit_code", action="store_true",
- default=False,
- help="ignore exit code of the test "
- "(e.g. test failures)")
- self._parser.add_option("", "--keep_logs", action="store_true",
- default=False,
- help="store memory tool logs in the <tool>.logs "
- "directory instead of /tmp.\nThis can be "
- "useful for tool developers/maintainers.\n"
- "Please note that the <tool>.logs directory "
- "will be clobbered on tool startup.")
-
- # To add framework- or tool-specific flags, please add a hook using
- # RegisterOptionParserHook in the corresponding subclass.
- # See ValgrindTool and ThreadSanitizerBase for examples.
- for hook in self.option_parser_hooks:
- hook(self, self._parser)
-
- def ParseArgv(self, args):
- self.CreateOptionParser()
-
- # self._tool_flags will store those tool flags which we don't parse
- # manually in this script.
- self._tool_flags = []
- known_args = []
-
- """ We assume that the first argument not starting with "-" is a program
- name and all the following flags should be passed to the program.
- TODO(timurrrr): customize optparse instead
- """
- while len(args) > 0 and args[0][:1] == "-":
- arg = args[0]
- if (arg == "--"):
- break
- if self._parser.has_option(arg.split("=")[0]):
- known_args += [arg]
- else:
- self._tool_flags += [arg]
- args = args[1:]
-
- if len(args) > 0:
- known_args += args
-
- self._options, self._args = self._parser.parse_args(known_args)
-
- self._timeout = int(self._options.timeout)
- self._source_dir = self._options.source_dir
- if self._options.keep_logs:
- # log_parent_dir has trailing slash if non-empty
- self.log_dir = self.log_parent_dir + "%s.logs" % self.ToolName()
- if os.path.exists(self.log_dir):
- shutil.rmtree(self.log_dir)
- os.mkdir(self.log_dir)
- logging.info("Logs are in " + self.log_dir)
-
- self._ignore_exit_code = self._options.ignore_exit_code
- if self._options.gtest_filter != "":
- self._args.append("--gtest_filter=%s" % self._options.gtest_filter)
- if self._options.gtest_repeat:
- self._args.append("--gtest_repeat=%s" % self._options.gtest_repeat)
- if self._options.gtest_print_time:
- self._args.append("--gtest_print_time")
-
- return True
-
- def Setup(self, args):
- return self.ParseArgv(args)
-
- def ToolCommand(self):
- raise NotImplementedError, "This method should be implemented " \
- "in the tool-specific subclass"
-
- def Cleanup(self):
- # You may override it in the tool-specific subclass
- pass
-
- def Execute(self):
- """ Execute the app to be tested after successful instrumentation.
- Full execution command-line provided by subclassers via proc."""
- logging.info("starting execution...")
- proc = self.ToolCommand()
- for var in self._env:
- common.PutEnvAndLog(var, self._env[var])
- return common.RunSubprocess(proc, self._timeout)
-
- def RunTestsAndAnalyze(self, check_sanity):
- exec_retcode = self.Execute()
- analyze_retcode = self.Analyze(check_sanity)
-
- if analyze_retcode:
- logging.error("Analyze failed.")
- logging.info("Search the log for '[ERROR]' to see the error reports.")
- return analyze_retcode
-
- if exec_retcode:
- if self._ignore_exit_code:
- logging.info("Test execution failed, but the exit code is ignored.")
- else:
- logging.error("Test execution failed.")
- return exec_retcode
- else:
- logging.info("Test execution completed successfully.")
-
- if not analyze_retcode:
- logging.info("Analysis completed successfully.")
-
- return 0
-
- def Main(self, args, check_sanity, min_runtime_in_seconds):
- """Call this to run through the whole process: Setup, Execute, Analyze"""
- start_time = datetime.datetime.now()
- retcode = -1
- if self.Setup(args):
- retcode = self.RunTestsAndAnalyze(check_sanity)
- shutil.rmtree(self.temp_dir, ignore_errors=True)
- self.Cleanup()
- else:
- logging.error("Setup failed")
- end_time = datetime.datetime.now()
- runtime_in_seconds = (end_time - start_time).seconds
- hours = runtime_in_seconds / 3600
- seconds = runtime_in_seconds % 3600
- minutes = seconds / 60
- seconds = seconds % 60
- logging.info("elapsed time: %02d:%02d:%02d" % (hours, minutes, seconds))
- if (min_runtime_in_seconds > 0 and
- runtime_in_seconds < min_runtime_in_seconds):
- logging.error("Layout tests finished too quickly. "
- "It should have taken at least %d seconds. "
- "Something went wrong?" % min_runtime_in_seconds)
- retcode = -1
- return retcode
-
- def Run(self, args, module, min_runtime_in_seconds=0):
- MODULES_TO_SANITY_CHECK = ["base"]
-
- # TODO(timurrrr): this is a temporary workaround for http://crbug.com/47844
- if self.ToolName() == "tsan" and common.IsMac():
- MODULES_TO_SANITY_CHECK = []
-
- check_sanity = module in MODULES_TO_SANITY_CHECK
- return self.Main(args, check_sanity, min_runtime_in_seconds)
-
-
-class ValgrindTool(BaseTool):
- """Abstract class for running Valgrind tools.
-
- Always subclass this and implement ToolSpecificFlags() and
- ExtendOptionParser() for tool-specific stuff.
- """
- def __init__(self):
- super(ValgrindTool, self).__init__()
- self.RegisterOptionParserHook(ValgrindTool.ExtendOptionParser)
-
- def UseXML(self):
- # Override if tool prefers nonxml output
- return True
-
- def SelfContained(self):
- # Returns true iff the tool is distibuted as a self-contained
- # .sh script (e.g. ThreadSanitizer)
- return False
-
- def ExtendOptionParser(self, parser):
- parser.add_option("", "--suppressions", default=[],
- action="append",
- help="path to a valgrind suppression file")
- parser.add_option("", "--indirect", action="store_true",
- default=False,
- help="set BROWSER_WRAPPER rather than "
- "running valgrind directly")
- parser.add_option("", "--indirect_webkit_layout", action="store_true",
- default=False,
- help="set --wrapper rather than running Dr. Memory "
- "directly.")
- parser.add_option("", "--trace_children", action="store_true",
- default=False,
- help="also trace child processes")
- parser.add_option("", "--num-callers",
- dest="num_callers", default=30,
- help="number of callers to show in stack traces")
- parser.add_option("", "--generate_dsym", action="store_true",
- default=False,
- help="Generate .dSYM file on Mac if needed. Slow!")
-
- def Setup(self, args):
- if not BaseTool.Setup(self, args):
- return False
- if common.IsMac():
- self.PrepareForTestMac()
- return True
-
- def PrepareForTestMac(self):
- """Runs dsymutil if needed.
-
- Valgrind for Mac OS X requires that debugging information be in a .dSYM
- bundle generated by dsymutil. It is not currently able to chase DWARF
- data into .o files like gdb does, so executables without .dSYM bundles or
- with the Chromium-specific "fake_dsym" bundles generated by
- build/mac/strip_save_dsym won't give source file and line number
- information in valgrind.
-
- This function will run dsymutil if the .dSYM bundle is missing or if
- it looks like a fake_dsym. A non-fake dsym that already exists is assumed
- to be up-to-date.
- """
- test_command = self._args[0]
- dsym_bundle = self._args[0] + '.dSYM'
- dsym_file = os.path.join(dsym_bundle, 'Contents', 'Resources', 'DWARF',
- os.path.basename(test_command))
- dsym_info_plist = os.path.join(dsym_bundle, 'Contents', 'Info.plist')
-
- needs_dsymutil = True
- saved_test_command = None
-
- if os.path.exists(dsym_file) and os.path.exists(dsym_info_plist):
- # Look for the special fake_dsym tag in dsym_info_plist.
- dsym_info_plist_contents = open(dsym_info_plist).read()
-
- if not re.search('^\s*<key>fake_dsym</key>$', dsym_info_plist_contents,
- re.MULTILINE):
- # fake_dsym is not set, this is a real .dSYM bundle produced by
- # dsymutil. dsymutil does not need to be run again.
- needs_dsymutil = False
- else:
- # fake_dsym is set. dsym_file is a copy of the original test_command
- # before it was stripped. Copy it back to test_command so that
- # dsymutil has unstripped input to work with. Move the stripped
- # test_command out of the way, it will be restored when this is
- # done.
- saved_test_command = test_command + '.stripped'
- os.rename(test_command, saved_test_command)
- shutil.copyfile(dsym_file, test_command)
- shutil.copymode(saved_test_command, test_command)
-
- if needs_dsymutil:
- if self._options.generate_dsym:
- # Remove the .dSYM bundle if it exists.
- shutil.rmtree(dsym_bundle, True)
-
- dsymutil_command = ['dsymutil', test_command]
-
- # dsymutil is crazy slow. Ideally we'd have a timeout here,
- # but common.RunSubprocess' timeout is only checked
- # after each line of output; dsymutil is silent
- # until the end, and is then killed, which is silly.
- common.RunSubprocess(dsymutil_command)
-
- if saved_test_command:
- os.rename(saved_test_command, test_command)
- else:
- logging.info("No real .dSYM for test_command. Line numbers will "
- "not be shown. Either tell xcode to generate .dSYM "
- "file, or use --generate_dsym option to this tool.")
-
- def ToolCommand(self):
- """Get the valgrind command to run."""
- # Note that self._args begins with the exe to be run.
- tool_name = self.ToolName()
-
- # Construct the valgrind command.
- if self.SelfContained():
- proc = ["valgrind-%s.sh" % tool_name]
- else:
- if 'CHROME_VALGRIND' in os.environ:
- path = os.path.join(os.environ['CHROME_VALGRIND'], "bin", "valgrind")
- else:
- path = "valgrind"
- proc = [path, "--tool=%s" % tool_name]
-
- proc += ["--num-callers=%i" % int(self._options.num_callers)]
-
- if self._options.trace_children:
- proc += ["--trace-children=yes"]
- proc += ["--trace-children-skip='*dbus-daemon*'"]
- proc += ["--trace-children-skip='*dbus-launch*'"]
- proc += ["--trace-children-skip='*perl*'"]
- proc += ["--trace-children-skip='*python*'"]
- # This is really Python, but for some reason Valgrind follows it.
- proc += ["--trace-children-skip='*lsb_release*'"]
-
- proc += self.ToolSpecificFlags()
- proc += self._tool_flags
-
- suppression_count = 0
- for suppression_file in self._options.suppressions:
- if os.path.exists(suppression_file):
- suppression_count += 1
- proc += ["--suppressions=%s" % suppression_file]
-
- if not suppression_count:
- logging.warning("WARNING: NOT USING SUPPRESSIONS!")
-
- logfilename = self.log_dir + ("/%s." % tool_name) + "%p"
- if self.UseXML():
- proc += ["--xml=yes", "--xml-file=" + logfilename]
- else:
- proc += ["--log-file=" + logfilename]
-
- # The Valgrind command is constructed.
-
- # Valgrind doesn't play nice with the Chrome sandbox. Empty this env var
- # set by runtest.py to disable the sandbox.
- if os.environ.get("CHROME_DEVEL_SANDBOX", None):
- logging.info("Removing CHROME_DEVEL_SANDBOX fron environment")
- os.environ["CHROME_DEVEL_SANDBOX"] = ''
-
- # Handle --indirect_webkit_layout separately.
- if self._options.indirect_webkit_layout:
- # Need to create the wrapper before modifying |proc|.
- wrapper = self.CreateBrowserWrapper(proc, webkit=True)
- proc = self._args
- proc.append("--wrapper")
- proc.append(wrapper)
- return proc
-
- if self._options.indirect:
- wrapper = self.CreateBrowserWrapper(proc)
- os.environ["BROWSER_WRAPPER"] = wrapper
- logging.info('export BROWSER_WRAPPER=' + wrapper)
- proc = []
- proc += self._args
- return proc
-
- def ToolSpecificFlags(self):
- raise NotImplementedError, "This method should be implemented " \
- "in the tool-specific subclass"
-
- def CreateBrowserWrapper(self, proc, webkit=False):
- """The program being run invokes Python or something else that can't stand
- to be valgrinded, and also invokes the Chrome browser. In this case, use a
- magic wrapper to only valgrind the Chrome browser. Build the wrapper here.
- Returns the path to the wrapper. It's up to the caller to use the wrapper
- appropriately.
- """
- command = " ".join(proc)
- # Add the PID of the browser wrapper to the logfile names so we can
- # separate log files for different UI tests at the analyze stage.
- command = command.replace("%p", "$$.%p")
-
- (fd, indirect_fname) = tempfile.mkstemp(dir=self.log_dir,
- prefix="browser_wrapper.",
- text=True)
- f = os.fdopen(fd, "w")
- f.write('#!/bin/bash\n'
- 'echo "Started Valgrind wrapper for this test, PID=$$" >&2\n')
-
- f.write('DIR=`dirname $0`\n'
- 'TESTNAME_FILE=$DIR/testcase.$$.name\n\n')
-
- if webkit:
- # Webkit layout_tests pass the URL as the first line of stdin.
- f.write('tee $TESTNAME_FILE | %s "$@"\n' % command)
- else:
- # Try to get the test case name by looking at the program arguments.
- # i.e. Chromium ui_tests used --test-name arg.
- # TODO(timurrrr): This doesn't handle "--test-name Test.Name"
- # TODO(timurrrr): ui_tests are dead. Where do we use the non-webkit
- # wrapper now? browser_tests? What do they do?
- f.write('for arg in $@\ndo\n'
- ' if [[ "$arg" =~ --test-name=(.*) ]]\n then\n'
- ' echo ${BASH_REMATCH[1]} >$TESTNAME_FILE\n'
- ' fi\n'
- 'done\n\n'
- '%s "$@"\n' % command)
-
- f.close()
- os.chmod(indirect_fname, stat.S_IRUSR|stat.S_IXUSR)
- return indirect_fname
-
- def CreateAnalyzer(self):
- raise NotImplementedError, "This method should be implemented " \
- "in the tool-specific subclass"
-
- def GetAnalyzeResults(self, check_sanity=False):
- # Glob all the files in the log directory
- filenames = glob.glob(self.log_dir + "/" + self.ToolName() + ".*")
-
- # If we have browser wrapper, the logfiles are named as
- # "toolname.wrapper_PID.valgrind_PID".
- # Let's extract the list of wrapper_PIDs and name it ppids
- ppids = set([int(f.split(".")[-2]) \
- for f in filenames if re.search("\.[0-9]+\.[0-9]+$", f)])
-
- analyzer = self.CreateAnalyzer()
- if len(ppids) == 0:
- # Fast path - no browser wrapper was set.
- return analyzer.Report(filenames, None, check_sanity)
-
- ret = 0
- for ppid in ppids:
- testcase_name = None
- try:
- f = open(self.log_dir + ("/testcase.%d.name" % ppid))
- testcase_name = f.read().strip()
- f.close()
- wk_layout_prefix="third_party/WebKit/LayoutTests/"
- wk_prefix_at = testcase_name.rfind(wk_layout_prefix)
- if wk_prefix_at != -1:
- testcase_name = testcase_name[wk_prefix_at + len(wk_layout_prefix):]
- except IOError:
- pass
- print "====================================================="
- print " Below is the report for valgrind wrapper PID=%d." % ppid
- if testcase_name:
- print " It was used while running the `%s` test." % testcase_name
- else:
- print " You can find the corresponding test"
- print " by searching the above log for 'PID=%d'" % ppid
- sys.stdout.flush()
-
- ppid_filenames = [f for f in filenames \
- if re.search("\.%d\.[0-9]+$" % ppid, f)]
- # check_sanity won't work with browser wrappers
- assert check_sanity == False
- ret |= analyzer.Report(ppid_filenames, testcase_name)
- print "====================================================="
- sys.stdout.flush()
-
- if ret != 0:
- print ""
- print "The Valgrind reports are grouped by test names."
- print "Each test has its PID printed in the log when the test was run"
- print "and at the beginning of its Valgrind report."
- print "Hint: you can search for the reports by Ctrl+F -> `=#`"
- sys.stdout.flush()
-
- return ret
-
-
-# TODO(timurrrr): Split into a separate file.
-class Memcheck(ValgrindTool):
- """Memcheck
- Dynamic memory error detector for Linux & Mac
-
- http://valgrind.org/info/tools.html#memcheck
- """
-
- def __init__(self):
- super(Memcheck, self).__init__()
- self.RegisterOptionParserHook(Memcheck.ExtendOptionParser)
-
- def ToolName(self):
- return "memcheck"
-
- def ExtendOptionParser(self, parser):
- parser.add_option("--leak-check", "--leak_check", type="string",
- default="yes", # --leak-check=yes is equivalent of =full
- help="perform leak checking at the end of the run")
- parser.add_option("", "--show_all_leaks", action="store_true",
- default=False,
- help="also show less blatant leaks")
- parser.add_option("", "--track_origins", action="store_true",
- default=False,
- help="Show whence uninitialized bytes came. 30% slower.")
-
- def ToolSpecificFlags(self):
- ret = ["--gen-suppressions=all", "--demangle=no"]
- ret += ["--leak-check=%s" % self._options.leak_check]
-
- if self._options.show_all_leaks:
- ret += ["--show-reachable=yes"]
- else:
- ret += ["--show-possibly-lost=no"]
-
- if self._options.track_origins:
- ret += ["--track-origins=yes"]
-
- # TODO(glider): this is a temporary workaround for http://crbug.com/51716
- # Let's see whether it helps.
- if common.IsMac():
- ret += ["--smc-check=all"]
-
- return ret
-
- def CreateAnalyzer(self):
- use_gdb = common.IsMac()
- return memcheck_analyze.MemcheckAnalyzer(self._source_dir,
- self._options.show_all_leaks,
- use_gdb=use_gdb)
-
- def Analyze(self, check_sanity=False):
- ret = self.GetAnalyzeResults(check_sanity)
-
- if ret != 0:
- logging.info("Please see http://dev.chromium.org/developers/how-tos/"
- "using-valgrind for the info on Memcheck/Valgrind")
- return ret
-
-
-class PinTool(BaseTool):
- """Abstract class for running PIN tools.
-
- Always subclass this and implement ToolSpecificFlags() and
- ExtendOptionParser() for tool-specific stuff.
- """
- def PrepareForTest(self):
- pass
-
- def ToolSpecificFlags(self):
- raise NotImplementedError, "This method should be implemented " \
- "in the tool-specific subclass"
-
- def ToolCommand(self):
- """Get the PIN command to run."""
-
- # Construct the PIN command.
- pin_cmd = os.getenv("PIN_COMMAND")
- if not pin_cmd:
- raise RuntimeError, "Please set PIN_COMMAND environment variable " \
- "with the path to pin.exe"
- proc = pin_cmd.split(" ")
-
- proc += self.ToolSpecificFlags()
-
- # The PIN command is constructed.
-
- # PIN requires -- to separate PIN flags from the executable name.
- # self._args begins with the exe to be run.
- proc += ["--"]
-
- proc += self._args
- return proc
-
-
-class ThreadSanitizerBase(object):
- """ThreadSanitizer
- Dynamic data race detector for Linux, Mac and Windows.
-
- http://code.google.com/p/data-race-test/wiki/ThreadSanitizer
-
- Since TSan works on both Valgrind (Linux, Mac) and PIN (Windows), we need
- to have multiple inheritance
- """
-
- INFO_MESSAGE="Please see http://dev.chromium.org/developers/how-tos/" \
- "using-valgrind/threadsanitizer for the info on " \
- "ThreadSanitizer"
-
- def __init__(self):
- super(ThreadSanitizerBase, self).__init__()
- self.RegisterOptionParserHook(ThreadSanitizerBase.ExtendOptionParser)
-
- def ToolName(self):
- return "tsan"
-
- def UseXML(self):
- return False
-
- def SelfContained(self):
- return True
-
- def ExtendOptionParser(self, parser):
- parser.add_option("", "--hybrid", default="no",
- dest="hybrid",
- help="Finds more data races, may give false positive "
- "reports unless the code is annotated")
- parser.add_option("", "--announce-threads", default="yes",
- dest="announce_threads",
- help="Show the the stack traces of thread creation")
- parser.add_option("", "--free-is-write", default="no",
- dest="free_is_write",
- help="Treat free()/operator delete as memory write. "
- "This helps finding more data races, but (currently) "
- "this may give false positive reports on std::string "
- "internals, see http://code.google.com/p/data-race-test"
- "/issues/detail?id=40")
-
- def EvalBoolFlag(self, flag_value):
- if (flag_value in ["1", "true", "yes"]):
- return True
- elif (flag_value in ["0", "false", "no"]):
- return False
- raise RuntimeError, "Can't parse flag value (%s)" % flag_value
-
- def ToolSpecificFlags(self):
- ret = []
-
- ignore_files = ["ignores.txt"]
- for platform_suffix in common.PlatformNames():
- ignore_files.append("ignores_%s.txt" % platform_suffix)
- for ignore_file in ignore_files:
- fullname = os.path.join(self._source_dir,
- "tools", "valgrind", "tsan", ignore_file)
- if os.path.exists(fullname):
- fullname = common.NormalizeWindowsPath(fullname)
- ret += ["--ignore=%s" % fullname]
-
- # This should shorten filepaths for local builds.
- ret += ["--file-prefix-to-cut=%s/" % self._source_dir]
-
- # This should shorten filepaths on bots.
- ret += ["--file-prefix-to-cut=build/src/"]
- ret += ["--file-prefix-to-cut=out/Release/../../"]
-
- # This should shorten filepaths for functions intercepted in TSan.
- ret += ["--file-prefix-to-cut=scripts/tsan/tsan/"]
- ret += ["--file-prefix-to-cut=src/tsan/tsan/"]
-
- ret += ["--gen-suppressions=true"]
-
- if self.EvalBoolFlag(self._options.hybrid):
- ret += ["--hybrid=yes"] # "no" is the default value for TSAN
-
- if self.EvalBoolFlag(self._options.announce_threads):
- ret += ["--announce-threads"]
-
- if self.EvalBoolFlag(self._options.free_is_write):
- ret += ["--free-is-write=yes"]
- else:
- ret += ["--free-is-write=no"]
-
-
- # --show-pc flag is needed for parsing the error logs on Darwin.
- if platform_suffix == 'mac':
- ret += ["--show-pc=yes"]
- ret += ["--show-pid=no"]
-
- boring_callers = common.BoringCallers(mangled=False, use_re_wildcards=False)
- # TODO(timurrrr): In fact, we want "starting from .." instead of "below .."
- for bc in boring_callers:
- ret += ["--cut_stack_below=%s" % bc]
-
- return ret
-
-
-class ThreadSanitizerPosix(ThreadSanitizerBase, ValgrindTool):
- def ToolSpecificFlags(self):
- proc = ThreadSanitizerBase.ToolSpecificFlags(self)
- # The -v flag is needed for printing the list of used suppressions and
- # obtaining addresses for loaded shared libraries on Mac.
- proc += ["-v"]
- return proc
-
- def CreateAnalyzer(self):
- use_gdb = common.IsMac()
- return tsan_analyze.TsanAnalyzer(use_gdb)
-
- def Analyze(self, check_sanity=False):
- ret = self.GetAnalyzeResults(check_sanity)
-
- if ret != 0:
- logging.info(self.INFO_MESSAGE)
- return ret
-
-
-class ThreadSanitizerWindows(ThreadSanitizerBase, PinTool):
-
- def __init__(self):
- super(ThreadSanitizerWindows, self).__init__()
- self.RegisterOptionParserHook(ThreadSanitizerWindows.ExtendOptionParser)
-
- def ExtendOptionParser(self, parser):
- parser.add_option("", "--suppressions", default=[],
- action="append",
- help="path to TSan suppression file")
-
-
- def ToolSpecificFlags(self):
- add_env = {
- "CHROME_ALLOCATOR" : "WINHEAP",
- }
- for k,v in add_env.iteritems():
- logging.info("export %s=%s", k, v)
- os.putenv(k, v)
-
- proc = ThreadSanitizerBase.ToolSpecificFlags(self)
- # On PIN, ThreadSanitizer has its own suppression mechanism
- # and --log-file flag which work exactly on Valgrind.
- suppression_count = 0
- for suppression_file in self._options.suppressions:
- if os.path.exists(suppression_file):
- suppression_count += 1
- suppression_file = common.NormalizeWindowsPath(suppression_file)
- proc += ["--suppressions=%s" % suppression_file]
-
- if not suppression_count:
- logging.warning("WARNING: NOT USING SUPPRESSIONS!")
-
- logfilename = self.log_dir + "/tsan.%p"
- proc += ["--log-file=" + common.NormalizeWindowsPath(logfilename)]
-
- # TODO(timurrrr): Add flags for Valgrind trace children analog when we
- # start running complex tests (e.g. UI) under TSan/Win.
-
- return proc
-
- def Analyze(self, check_sanity=False):
- filenames = glob.glob(self.log_dir + "/tsan.*")
- analyzer = tsan_analyze.TsanAnalyzer()
- ret = analyzer.Report(filenames, None, check_sanity)
- if ret != 0:
- logging.info(self.INFO_MESSAGE)
- return ret
-
-
-class DrMemory(BaseTool):
- """Dr.Memory
- Dynamic memory error detector for Windows.
-
- http://dev.chromium.org/developers/how-tos/using-drmemory
- It is not very mature at the moment, some things might not work properly.
- """
-
- def __init__(self, full_mode, pattern_mode):
- super(DrMemory, self).__init__()
- self.full_mode = full_mode
- self.pattern_mode = pattern_mode
- self.RegisterOptionParserHook(DrMemory.ExtendOptionParser)
-
- def ToolName(self):
- return "drmemory"
-
- def ExtendOptionParser(self, parser):
- parser.add_option("", "--suppressions", default=[],
- action="append",
- help="path to a drmemory suppression file")
- parser.add_option("", "--follow_python", action="store_true",
- default=False, dest="follow_python",
- help="Monitor python child processes. If off, neither "
- "python children nor any children of python children "
- "will be monitored.")
- parser.add_option("", "--indirect", action="store_true",
- default=False,
- help="set BROWSER_WRAPPER rather than "
- "running Dr. Memory directly on the harness")
- parser.add_option("", "--indirect_webkit_layout", action="store_true",
- default=False,
- help="set --wrapper rather than running valgrind "
- "directly.")
- parser.add_option("", "--use_debug", action="store_true",
- default=False, dest="use_debug",
- help="Run Dr. Memory debug build")
- parser.add_option("", "--trace_children", action="store_true",
- default=True,
- help="TODO: default value differs from Valgrind")
-
- def ToolCommand(self):
- """Get the tool command to run."""
- # WINHEAP is what Dr. Memory supports as there are issues w/ both
- # jemalloc (http://code.google.com/p/drmemory/issues/detail?id=320) and
- # tcmalloc (http://code.google.com/p/drmemory/issues/detail?id=314)
- add_env = {
- "CHROME_ALLOCATOR" : "WINHEAP",
- "JSIMD_FORCEMMX" : "1", # http://code.google.com/p/drmemory/issues/detail?id=540
- }
- for k,v in add_env.iteritems():
- logging.info("export %s=%s", k, v)
- os.putenv(k, v)
-
- drmem_cmd = os.getenv("DRMEMORY_COMMAND")
- if not drmem_cmd:
- raise RuntimeError, "Please set DRMEMORY_COMMAND environment variable " \
- "with the path to drmemory.exe"
- proc = drmem_cmd.split(" ")
-
- # By default, don't run python (this will exclude python's children as well)
- # to reduce runtime. We're not really interested in spending time finding
- # bugs in the python implementation.
- # With file-based config we must update the file every time, and
- # it will affect simultaneous drmem uses by this user. While file-based
- # config has many advantages, here we may want this-instance-only
- # (http://code.google.com/p/drmemory/issues/detail?id=334).
- drconfig_cmd = [ proc[0].replace("drmemory.exe", "drconfig.exe") ]
- drconfig_cmd += ["-quiet"] # suppress errors about no 64-bit libs
- run_drconfig = True
- if self._options.follow_python:
- logging.info("Following python children")
- # -unreg fails if not already registered so query for that first
- query_cmd = drconfig_cmd + ["-isreg", "python.exe"]
- query_proc = subprocess.Popen(query_cmd, stdout=subprocess.PIPE,
- shell=True)
- (query_out, query_err) = query_proc.communicate()
- if re.search("exe not registered", query_out):
- run_drconfig = False # all set
- else:
- drconfig_cmd += ["-unreg", "python.exe"]
- else:
- logging.info("Excluding python children")
- drconfig_cmd += ["-reg", "python.exe", "-norun"]
- if run_drconfig:
- drconfig_retcode = common.RunSubprocess(drconfig_cmd, self._timeout)
- if drconfig_retcode:
- logging.error("Configuring whether to follow python children failed " \
- "with %d.", drconfig_retcode)
- raise RuntimeError, "Configuring python children failed "
-
- suppression_count = 0
- supp_files = self._options.suppressions
- if self.full_mode:
- supp_files += [s.replace(".txt", "_full.txt") for s in supp_files]
- for suppression_file in supp_files:
- if os.path.exists(suppression_file):
- suppression_count += 1
- proc += ["-suppress", common.NormalizeWindowsPath(suppression_file)]
-
- if not suppression_count:
- logging.warning("WARNING: NOT USING SUPPRESSIONS!")
-
- # Un-comment to dump Dr.Memory events on error
- #proc += ["-dr_ops", "-dumpcore_mask", "-dr_ops", "0x8bff"]
-
- # Un-comment and comment next line to debug Dr.Memory
- #proc += ["-dr_ops", "-no_hide"]
- #proc += ["-dr_ops", "-msgbox_mask", "-dr_ops", "15"]
- #Proc += ["-dr_ops", "-stderr_mask", "-dr_ops", "15"]
- # Ensure we see messages about Dr. Memory crashing!
- proc += ["-dr_ops", "-stderr_mask", "-dr_ops", "12"]
-
- if self._options.use_debug:
- proc += ["-debug"]
-
- proc += ["-logdir", common.NormalizeWindowsPath(self.log_dir)]
-
- if self.log_parent_dir:
- # gpu process on Windows Vista+ runs at Low Integrity and can only
- # write to certain directories (http://crbug.com/119131)
- symcache_dir = os.path.join(self.log_parent_dir, "drmemory.symcache")
- elif self._options.build_dir:
- # The other case is only possible with -t cmdline.
- # Anyways, if we omit -symcache_dir the -logdir's value is used which
- # should be fine.
- symcache_dir = os.path.join(self._options.build_dir, "drmemory.symcache")
- if symcache_dir:
- if not os.path.exists(symcache_dir):
- try:
- os.mkdir(symcache_dir)
- except OSError:
- logging.warning("Can't create symcache dir?")
- if os.path.exists(symcache_dir):
- proc += ["-symcache_dir", common.NormalizeWindowsPath(symcache_dir)]
-
- # Use -no_summary to suppress DrMemory's summary and init-time
- # notifications. We generate our own with drmemory_analyze.py.
- proc += ["-batch", "-no_summary"]
-
- # Un-comment to disable interleaved output. Will also suppress error
- # messages normally printed to stderr.
- #proc += ["-quiet", "-no_results_to_stderr"]
-
- proc += ["-callstack_max_frames", "40"]
-
- # disable leak scan for now
- proc += ["-no_count_leaks", "-no_leak_scan"]
-
- # make callstacks easier to read
- proc += ["-callstack_srcfile_prefix",
- "build\\src,chromium\\src,crt_build\\self_x86"]
- proc += ["-callstack_modname_hide",
- "*drmemory*,chrome.dll"]
-
- boring_callers = common.BoringCallers(mangled=False, use_re_wildcards=False)
- # TODO(timurrrr): In fact, we want "starting from .." instead of "below .."
- proc += ["-callstack_truncate_below", ",".join(boring_callers)]
-
- if self.pattern_mode:
- proc += ["-pattern", "0xf1fd", "-no_count_leaks", "-redzone_size", "0x20"]
- elif not self.full_mode:
- proc += ["-light"]
-
- proc += self._tool_flags
-
- # DrM i#850/851: The new -callstack_use_top_fp_selectively has bugs.
- proc += ["-no_callstack_use_top_fp_selectively"]
-
- # Dr.Memory requires -- to separate tool flags from the executable name.
- proc += ["--"]
-
- if self._options.indirect or self._options.indirect_webkit_layout:
- # TODO(timurrrr): reuse for TSan on Windows
- wrapper_path = os.path.join(self._source_dir,
- "tools", "valgrind", "browser_wrapper_win.py")
- wrapper = " ".join(["python", wrapper_path] + proc)
- self.CreateBrowserWrapper(wrapper)
- logging.info("browser wrapper = " + " ".join(proc))
- if self._options.indirect_webkit_layout:
- proc = self._args
- # Layout tests want forward slashes.
- wrapper = wrapper.replace('\\', '/')
- proc += ["--wrapper", wrapper]
- return proc
- else:
- proc = []
-
- # Note that self._args begins with the name of the exe to be run.
- self._args[0] = common.NormalizeWindowsPath(self._args[0])
- proc += self._args
- return proc
-
- def CreateBrowserWrapper(self, command):
- os.putenv("BROWSER_WRAPPER", command)
-
- def Analyze(self, check_sanity=False):
- # Use one analyzer for all the log files to avoid printing duplicate reports
- #
- # TODO(timurrrr): unify this with Valgrind and other tools when we have
- # http://code.google.com/p/drmemory/issues/detail?id=684
- analyzer = drmemory_analyze.DrMemoryAnalyzer()
-
- ret = 0
- if not self._options.indirect and not self._options.indirect_webkit_layout:
- filenames = glob.glob(self.log_dir + "/*/results.txt")
-
- ret = analyzer.Report(filenames, None, check_sanity)
- else:
- testcases = glob.glob(self.log_dir + "/testcase.*.logs")
- # If we have browser wrapper, the per-test logdirs are named as
- # "testcase.wrapper_PID.name".
- # Let's extract the list of wrapper_PIDs and name it ppids.
- # NOTE: ppids may contain '_', i.e. they are not ints!
- ppids = set([f.split(".")[-2] for f in testcases])
-
- for ppid in ppids:
- testcase_name = None
- try:
- f = open("%s/testcase.%s.name" % (self.log_dir, ppid))
- testcase_name = f.read().strip()
- f.close()
- except IOError:
- pass
- print "====================================================="
- print " Below is the report for drmemory wrapper PID=%s." % ppid
- if testcase_name:
- print " It was used while running the `%s` test." % testcase_name
- else:
- # TODO(timurrrr): hm, the PID line is suppressed on Windows...
- print " You can find the corresponding test"
- print " by searching the above log for 'PID=%s'" % ppid
- sys.stdout.flush()
- ppid_filenames = glob.glob("%s/testcase.%s.logs/*/results.txt" %
- (self.log_dir, ppid))
- ret |= analyzer.Report(ppid_filenames, testcase_name, False)
- print "====================================================="
- sys.stdout.flush()
-
- logging.info("Please see http://dev.chromium.org/developers/how-tos/"
- "using-drmemory for the info on Dr. Memory")
- return ret
-
-
-# RaceVerifier support. See
-# http://code.google.com/p/data-race-test/wiki/RaceVerifier for more details.
-class ThreadSanitizerRV1Analyzer(tsan_analyze.TsanAnalyzer):
- """ TsanAnalyzer that saves race reports to a file. """
-
- TMP_FILE = "rvlog.tmp"
-
- def __init__(self, source_dir, use_gdb):
- super(ThreadSanitizerRV1Analyzer, self).__init__(use_gdb)
- self.out = open(self.TMP_FILE, "w")
-
- def Report(self, files, testcase, check_sanity=False):
- reports = self.GetReports(files)
- for report in reports:
- print >>self.out, report
- if len(reports) > 0:
- logging.info("RaceVerifier pass 1 of 2, found %i reports" % len(reports))
- return -1
- return 0
-
- def CloseOutputFile(self):
- self.out.close()
-
-
-class ThreadSanitizerRV1Mixin(object):
- """RaceVerifier first pass.
-
- Runs ThreadSanitizer as usual, but hides race reports and collects them in a
- temporary file"""
-
- def __init__(self):
- super(ThreadSanitizerRV1Mixin, self).__init__()
- self.RegisterOptionParserHook(ThreadSanitizerRV1Mixin.ExtendOptionParser)
-
- def ExtendOptionParser(self, parser):
- parser.set_defaults(hybrid="yes")
-
- def CreateAnalyzer(self):
- use_gdb = common.IsMac()
- self.analyzer = ThreadSanitizerRV1Analyzer(self._source_dir, use_gdb)
- return self.analyzer
-
- def Cleanup(self):
- super(ThreadSanitizerRV1Mixin, self).Cleanup()
- self.analyzer.CloseOutputFile()
-
-
-class ThreadSanitizerRV2Mixin(object):
- """RaceVerifier second pass."""
-
- def __init__(self):
- super(ThreadSanitizerRV2Mixin, self).__init__()
- self.RegisterOptionParserHook(ThreadSanitizerRV2Mixin.ExtendOptionParser)
-
- def ExtendOptionParser(self, parser):
- parser.add_option("", "--race-verifier-sleep-ms",
- dest="race_verifier_sleep_ms", default=10,
- help="duration of RaceVerifier delays")
-
- def ToolSpecificFlags(self):
- proc = super(ThreadSanitizerRV2Mixin, self).ToolSpecificFlags()
- proc += ['--race-verifier=%s' % ThreadSanitizerRV1Analyzer.TMP_FILE,
- '--race-verifier-sleep-ms=%d' %
- int(self._options.race_verifier_sleep_ms)]
- return proc
-
- def Cleanup(self):
- super(ThreadSanitizerRV2Mixin, self).Cleanup()
- os.unlink(ThreadSanitizerRV1Analyzer.TMP_FILE)
-
-
-class ThreadSanitizerRV1Posix(ThreadSanitizerRV1Mixin, ThreadSanitizerPosix):
- pass
-
-
-class ThreadSanitizerRV2Posix(ThreadSanitizerRV2Mixin, ThreadSanitizerPosix):
- pass
-
-
-class ThreadSanitizerRV1Windows(ThreadSanitizerRV1Mixin,
- ThreadSanitizerWindows):
- pass
-
-
-class ThreadSanitizerRV2Windows(ThreadSanitizerRV2Mixin,
- ThreadSanitizerWindows):
- pass
-
-
-class RaceVerifier(object):
- """Runs tests under RaceVerifier/Valgrind."""
-
- MORE_INFO_URL = "http://code.google.com/p/data-race-test/wiki/RaceVerifier"
-
- def RV1Factory(self):
- if common.IsWindows():
- return ThreadSanitizerRV1Windows()
- else:
- return ThreadSanitizerRV1Posix()
-
- def RV2Factory(self):
- if common.IsWindows():
- return ThreadSanitizerRV2Windows()
- else:
- return ThreadSanitizerRV2Posix()
-
- def ToolName(self):
- return "tsan"
-
- def Main(self, args, check_sanity, min_runtime_in_seconds):
- logging.info("Running a TSan + RaceVerifier test. For more information, " +
- "see " + self.MORE_INFO_URL)
- cmd1 = self.RV1Factory()
- ret = cmd1.Main(args, check_sanity, min_runtime_in_seconds)
- # Verify race reports, if there are any.
- if ret == -1:
- logging.info("Starting pass 2 of 2. Running the same binary in " +
- "RaceVerifier mode to confirm possible race reports.")
- logging.info("For more information, see " + self.MORE_INFO_URL)
- cmd2 = self.RV2Factory()
- ret = cmd2.Main(args, check_sanity, min_runtime_in_seconds)
- else:
- logging.info("No reports, skipping RaceVerifier second pass")
- logging.info("Please see " + self.MORE_INFO_URL + " for more information " +
- "on RaceVerifier")
- return ret
-
- def Run(self, args, module, min_runtime_in_seconds=0):
- return self.Main(args, False, min_runtime_in_seconds)
-
-
-class EmbeddedTool(BaseTool):
- """Abstract class for tools embedded directly into the test binary.
- """
- # TODO(glider): need to override Execute() and support process chaining here.
-
- def ToolCommand(self):
- # In the simplest case just the args of the script.
- return self._args
-
-
-class Asan(EmbeddedTool):
- """AddressSanitizer, a memory error detector.
-
- More information at
- http://dev.chromium.org/developers/testing/addresssanitizer
- """
- def __init__(self):
- super(Asan, self).__init__()
- self._timeout = 1200
- if common.IsMac():
- self._env["DYLD_NO_PIE"] = "1"
-
-
- def ToolName(self):
- return "asan"
-
- def ToolCommand(self):
- # TODO(glider): use pipes instead of the ugly wrapper here once they
- # are supported.
- procs = [os.path.join(self._source_dir, "tools", "valgrind",
- "asan", "asan_wrapper.sh")]
- procs.extend(self._args)
- return procs
-
- def Analyze(sels, unused_check_sanity):
- return 0
-
-
-class ToolFactory:
- def Create(self, tool_name):
- if tool_name == "memcheck":
- return Memcheck()
- if tool_name == "tsan":
- if common.IsWindows():
- return ThreadSanitizerWindows()
- else:
- return ThreadSanitizerPosix()
- if tool_name == "drmemory" or tool_name == "drmemory_light":
- # TODO(timurrrr): remove support for "drmemory" when buildbots are
- # switched to drmemory_light OR make drmemory==drmemory_full the default
- # mode when the tool is mature enough.
- return DrMemory(False, False)
- if tool_name == "drmemory_full":
- return DrMemory(True, False)
- if tool_name == "drmemory_pattern":
- return DrMemory(False, True)
- if tool_name == "tsan_rv":
- return RaceVerifier()
- if tool_name == "asan":
- return Asan()
- try:
- platform_name = common.PlatformNames()[0]
- except common.NotImplementedError:
- platform_name = sys.platform + "(Unknown)"
- raise RuntimeError, "Unknown tool (tool=%s, platform=%s)" % (tool_name,
- platform_name)
-
-def CreateTool(tool):
- return ToolFactory().Create(tool)
diff --git a/chromium/tools/valgrind/waterfall.sh b/chromium/tools/valgrind/waterfall.sh
deleted file mode 100755
index bce3e637b0f..00000000000
--- a/chromium/tools/valgrind/waterfall.sh
+++ /dev/null
@@ -1,222 +0,0 @@
-#!/bin/bash
-
-# Copyright (c) 2011 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.
-
-# This script can be used by waterfall sheriffs to fetch the status
-# of Valgrind bots on the memory waterfall and test if their local
-# suppressions match the reports on the waterfall.
-
-set -e
-
-THISDIR=$(dirname "${0}")
-LOGS_DIR=$THISDIR/waterfall.tmp
-WATERFALL_PAGE="http://build.chromium.org/p/chromium.memory/builders"
-WATERFALL_FYI_PAGE="http://build.chromium.org/p/chromium.memory.fyi/builders"
-
-download() {
- # Download a file.
- # $1 = URL to download
- # $2 = Path to the output file
- # {{{1
- if [ "$(which curl)" != "" ]
- then
- if ! curl -s -o "$2" "$1"
- then
- echo
- echo "Failed to download '$1'... aborting"
- exit 1
- fi
- elif [ "$(which wget)" != "" ]
- then
- if ! wget "$1" -O "$2" -q
- then
- echo
- echo "Failed to download '$1'... aborting"
- exit 1
- fi
- else
- echo "Need either curl or wget to download stuff... aborting"
- exit 1
- fi
- # }}}
-}
-
-fetch_logs() {
- # Fetch Valgrind logs from the waterfall {{{1
-
- # TODO(timurrrr,maruel): use JSON, see
- # http://build.chromium.org/p/chromium.memory/json/help
-
- rm -rf "$LOGS_DIR" # Delete old logs
- mkdir "$LOGS_DIR"
-
- echo "Fetching the list of builders..."
- download $1 "$LOGS_DIR/builders"
- SLAVES=$(grep "<a href=\"builders\/" "$LOGS_DIR/builders" | \
- grep 'td class="box"' | \
- sed "s/.*<a href=\"builders\///" | sed "s/\".*//" | \
- sort | uniq)
-
- for S in $SLAVES
- do
- SLAVE_URL=$1/$S
- SLAVE_NAME=$(echo $S | sed -e "s/%20/ /g" -e "s/%28/(/g" -e "s/%29/)/g")
- echo -n "Fetching builds by slave '${SLAVE_NAME}'"
- download $SLAVE_URL?numbuilds=${NUMBUILDS} "$LOGS_DIR/slave_${S}"
-
- # We speed up the 'fetch' step by skipping the builds/tests which succeeded.
- # TODO(timurrrr): OTOH, we won't be able to check
- # if some suppression is not used anymore.
- #
- # The awk script here joins the lines ending with </td> to make it possible
- # to find the failed builds.
- LIST_OF_BUILDS=$(cat "$LOGS_DIR/slave_$S" | \
- awk 'BEGIN { buf = "" }
- {
- if ($0 ~ /<\/td>/) { buf = (buf $0); }
- else {
- if (buf) { print buf; buf="" }
- print $0
- }
- }
- END {if (buf) print buf}' | \
- grep "success\|failure" | \
- head -n $NUMBUILDS | \
- grep "failure" | \
- grep -v "failed compile" | \
- sed "s/.*\/builds\///" | sed "s/\".*//")
-
- for BUILD in $LIST_OF_BUILDS
- do
- # We'll fetch a few tiny URLs now, let's use a temp file.
- TMPFILE=$(mktemp -t memory_waterfall.XXXXXX)
- download $SLAVE_URL/builds/$BUILD "$TMPFILE"
-
- REPORT_FILE="$LOGS_DIR/report_${S}_${BUILD}"
- rm -f $REPORT_FILE 2>/dev/null || true # make sure it doesn't exist
-
- REPORT_URLS=$(grep -o "[0-9]\+/steps/\(memory\|heapcheck\).*/logs/[0-9A-F]\{16\}" \
- "$TMPFILE" \
- || true) # `true` is to succeed on empty output
- FAILED_TESTS=$(grep -o "[0-9]\+/steps/\(memory\|heapcheck\).*/logs/[A-Za-z0-9_.]\+" \
- "$TMPFILE" | grep -v "[0-9A-F]\{16\}" \
- | grep -v "stdio" || true)
-
- for REPORT in $REPORT_URLS
- do
- download "$SLAVE_URL/builds/$REPORT/text" "$TMPFILE"
- echo "" >> "$TMPFILE" # Add a newline at the end
- cat "$TMPFILE" | tr -d '\r' >> "$REPORT_FILE"
- done
-
- for FAILURE in $FAILED_TESTS
- do
- echo -n "FAILED:" >> "$REPORT_FILE"
- echo "$FAILURE" | sed -e "s/.*\/logs\///" -e "s/\/.*//" \
- >> "$REPORT_FILE"
- done
-
- rm "$TMPFILE"
- echo $SLAVE_URL/builds/$BUILD >> "$REPORT_FILE"
- done
- echo " DONE"
- done
- # }}}
-}
-
-match_suppressions() {
- PYTHONPATH=$THISDIR/../python/google \
- python "$THISDIR/test_suppressions.py" $@ "$LOGS_DIR/report_"*
-}
-
-match_gtest_excludes() {
- for PLATFORM in "Linux" "Chromium%20Mac" "Chromium%20OS"
- do
- echo
- echo "Test failures on ${PLATFORM}:" | sed "s/%20/ /"
- grep -h -o "^FAILED:.*" -R "$LOGS_DIR"/*${PLATFORM}* | \
- grep -v "FAILS\|FLAKY" | sort | uniq | \
- sed -e "s/^FAILED://" -e "s/^/ /"
- # Don't put any operators between "grep | sed" and "RESULT=$PIPESTATUS"
- RESULT=$PIPESTATUS
-
- if [ "$RESULT" == 1 ]
- then
- echo " None!"
- else
- echo
- echo " Note: we don't check for failures already excluded locally yet"
- echo " TODO(timurrrr): don't list tests we've already excluded locally"
- fi
- done
- echo
- echo "Note: we don't print FAILS/FLAKY tests and 1200s-timeout failures"
-}
-
-usage() {
- cat <<EOF
-usage: $0 fetch|match options
-
-This script can be used by waterfall sheriffs to fetch the status
-of Valgrind bots on the memory waterfall and test if their local
-suppressions match the reports on the waterfall.
-
-OPTIONS:
- -h Show this message
- -n N Fetch N builds from each slave.
-
-COMMANDS:
- fetch Fetch Valgrind logs from the memory waterfall
- match Test the local suppression files against the downloaded logs
-
-EOF
-}
-
-NUMBUILDS=3
-
-CMD=$1
-if [ $# != 0 ]; then
- shift
-fi
-
-# Arguments for "match" are handled in match_suppressions
-if [ "$CMD" != "match" ]; then
- while getopts “hn:” OPTION
- do
- case $OPTION in
- h)
- usage
- exit
- ;;
- n)
- NUMBUILDS=$OPTARG
- ;;
- ?)
- usage
- exit
- ;;
- esac
- done
- shift $((OPTIND-1))
- if [ $# != 0 ]; then
- usage
- exit 1
- fi
-fi
-
-if [ "$CMD" = "fetch" ]; then
- echo "Fetching $NUMBUILDS builds"
- fetch_logs $WATERFALL_PAGE
- fetch_logs $WATERFALL_FYI_PAGE
-elif [ "$CMD" = "match" ]; then
- match_suppressions $@
- match_gtest_excludes
-elif [ "$CMD" = "blame" ]; then
- echo The blame command died of bitrot. If you need it, please reimplement it.
- echo Reimplementation is blocked on http://crbug.com/82688
-else
- usage
- exit 1
-fi
diff --git a/chromium/tools/vim/chromium.ycm_extra_conf.py b/chromium/tools/vim/chromium.ycm_extra_conf.py
deleted file mode 100644
index ac9582d0b1c..00000000000
--- a/chromium/tools/vim/chromium.ycm_extra_conf.py
+++ /dev/null
@@ -1,203 +0,0 @@
-# Copyright (c) 2012 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.
-
-# Autocompletion config for YouCompleteMe in Chromium.
-#
-# USAGE:
-#
-# 1. Install YCM [https://github.com/Valloric/YouCompleteMe]
-# (Googlers should check out [go/ycm])
-#
-# 2. Point to this config file in your .vimrc:
-# let g:ycm_global_ycm_extra_conf =
-# '<chrome_depot>/src/tools/vim/chromium.ycm_extra_conf.py'
-#
-# 3. Profit
-#
-#
-# Usage notes:
-#
-# * You must use ninja & clang to build Chromium.
-#
-# * You must have run gyp_chromium and built Chromium recently.
-#
-#
-# Hacking notes:
-#
-# * The purpose of this script is to construct an accurate enough command line
-# for YCM to pass to clang so it can build and extract the symbols.
-#
-# * Right now, we only pull the -I and -D flags. That seems to be sufficient
-# for everything I've used it for.
-#
-# * That whole ninja & clang thing? We could support other configs if someone
-# were willing to write the correct commands and a parser.
-#
-# * This has only been tested on gPrecise.
-
-
-import os
-import subprocess
-
-
-# Flags from YCM's default config.
-flags = [
-'-DUSE_CLANG_COMPLETER',
-'-std=c++11',
-'-x',
-'c++',
-]
-
-
-def PathExists(*args):
- return os.path.exists(os.path.join(*args))
-
-
-def FindChromeSrcFromFilename(filename):
- """Searches for the root of the Chromium checkout.
-
- Simply checks parent directories until it finds .gclient and src/.
-
- Args:
- filename: (String) Path to source file being edited.
-
- Returns:
- (String) Path of 'src/', or None if unable to find.
- """
- curdir = os.path.normpath(os.path.dirname(filename))
- while not (PathExists(curdir, 'src') and PathExists(curdir, 'src', 'DEPS')
- and (PathExists(curdir, '.gclient')
- or PathExists(curdir, 'src', '.git'))):
- nextdir = os.path.normpath(os.path.join(curdir, '..'))
- if nextdir == curdir:
- return None
- curdir = nextdir
- return os.path.join(curdir, 'src')
-
-
-# Largely copied from ninja-build.vim (guess_configuration)
-def GetNinjaOutputDirectory(chrome_root):
- """Returns either <chrome_root>/out/Release or <chrome_root>/out/Debug.
-
- The configuration chosen is the one most recently generated/built."""
- root = os.path.join(chrome_root, 'out')
- debug_path = os.path.join(root, 'Debug')
- release_path = os.path.join(root, 'Release')
-
- def is_release_15s_newer(test_path):
- try:
- debug_mtime = os.path.getmtime(os.path.join(debug_path, test_path))
- except os.error:
- debug_mtime = 0
- try:
- rel_mtime = os.path.getmtime(os.path.join(release_path, test_path))
- except os.error:
- rel_mtime = 0
- return rel_mtime - debug_mtime >= 15
-
- if is_release_15s_newer('build.ninja') or is_release_15s_newer('protoc'):
- return release_path
- return debug_path
-
-
-def GetClangCommandFromNinjaForFilename(chrome_root, filename):
- """Returns the command line to build |filename|.
-
- Asks ninja how it would build the source file. If the specified file is a
- header, tries to find its companion source file first.
-
- Args:
- chrome_root: (String) Path to src/.
- filename: (String) Path to source file being edited.
-
- Returns:
- (List of Strings) Command line arguments for clang.
- """
- if not chrome_root:
- return []
-
- # Generally, everyone benefits from including Chromium's src/, because all of
- # Chromium's includes are relative to that.
- chrome_flags = ['-I' + os.path.join(chrome_root)]
-
- # Header files can't be built. Instead, try to match a header file to its
- # corresponding source file.
- if filename.endswith('.h'):
- alternates = ['.cc', '.cpp']
- for alt_extension in alternates:
- alt_name = filename[:-2] + alt_extension
- if os.path.exists(alt_name):
- filename = alt_name
- break
- else:
- # If this is a standalone .h file with no source, the best we can do is
- # try to use the default flags.
- return chrome_flags
-
- # Ninja needs the path to the source file from the output build directory.
- # Cut off the common part and /.
- subdir_filename = filename[len(chrome_root)+1:]
- rel_filename = os.path.join('..', '..', subdir_filename)
-
- out_dir = GetNinjaOutputDirectory(chrome_root)
-
- # Ask ninja how it would build our source file.
- p = subprocess.Popen(['ninja', '-v', '-C', out_dir, '-t',
- 'commands', rel_filename + '^'],
- stdout=subprocess.PIPE)
- stdout, stderr = p.communicate()
- if p.returncode:
- return chrome_flags
-
- # Ninja might execute several commands to build something. We want the last
- # clang command.
- clang_line = None
- for line in reversed(stdout.split('\n')):
- if 'clang' in line:
- clang_line = line
- break
- else:
- return chrome_flags
-
- # Parse out the -I and -D flags. These seem to be the only ones that are
- # important for YCM's purposes.
- for flag in clang_line.split(' '):
- if flag.startswith('-I'):
- # Relative paths need to be resolved, because they're relative to the
- # output dir, not the source.
- if flag[2] == '/':
- chrome_flags.append(flag)
- else:
- abs_path = os.path.normpath(os.path.join(out_dir, flag[2:]))
- chrome_flags.append('-I' + abs_path)
- elif flag.startswith('-') and flag[1] in 'DWFfmO':
- if flag == '-Wno-deprecated-register' or flag == '-Wno-header-guard':
- # These flags causes libclang (3.3) to crash. Remove it until things
- # are fixed.
- continue
- chrome_flags.append(flag)
-
- return chrome_flags
-
-
-def FlagsForFile(filename):
- """This is the main entry point for YCM. Its interface is fixed.
-
- Args:
- filename: (String) Path to source file being edited.
-
- Returns:
- (Dictionary)
- 'flags': (List of Strings) Command line flags.
- 'do_cache': (Boolean) True if the result should be cached.
- """
- chrome_root = FindChromeSrcFromFilename(filename)
- chrome_flags = GetClangCommandFromNinjaForFilename(chrome_root,
- filename)
- final_flags = flags + chrome_flags
-
- return {
- 'flags': final_flags,
- 'do_cache': True
- }
diff --git a/chromium/tools/vim/filetypes.vim b/chromium/tools/vim/filetypes.vim
deleted file mode 100644
index 3e7c8f9eada..00000000000
--- a/chromium/tools/vim/filetypes.vim
+++ /dev/null
@@ -1,9 +0,0 @@
-" To get syntax highlighting and tab settings for gyp(i) and DEPS files,
-" add the following to your .vimrc file:
-" so /path/to/src/tools/vim/filetypes.vim
-
-augroup filetype
- au! BufRead,BufNewFile *.gyp set filetype=python expandtab tabstop=2 shiftwidth=2
- au! BufRead,BufNewFile *.gypi set filetype=python expandtab tabstop=2 shiftwidth=2
- au! BufRead,BufNewFile DEPS set filetype=python expandtab tabstop=2 shiftwidth=2
-augroup END
diff --git a/chromium/tools/vim/ninja-build.vim b/chromium/tools/vim/ninja-build.vim
deleted file mode 100644
index 852c5a99eb0..00000000000
--- a/chromium/tools/vim/ninja-build.vim
+++ /dev/null
@@ -1,129 +0,0 @@
-" Copyright (c) 2012 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.
-"
-" Adds a "Compile this file" function, using ninja. On Mac, binds Cmd-k to
-" this command. On Windows, Ctrl-F7 (which is the same as the VS default).
-" On Linux, <Leader>o, which is \o by default ("o"=creates .o files)
-"
-" Adds a "Build this target" function, using ninja. This is not bound
-" to any key by default, but can be used via the :CrBuild command.
-" It builds 'chrome' by default, but :CrBuild target1 target2 etc works as well.
-"
-" Requires that gyp has already generated build.ninja files, and that ninja is
-" in your path (which it is automatically if depot_tools is in your path).
-"
-" Add the following to your .vimrc file:
-" so /path/to/src/tools/vim/ninja-build.vim
-
-python << endpython
-import os
-import vim
-
-
-def path_to_current_buffer():
- """Returns the absolute path of the current buffer."""
- return vim.current.buffer.name
-
-
-def path_to_source_root():
- """Returns the absolute path to the chromium source root."""
- candidate = os.path.dirname(path_to_current_buffer())
- # This is a list of files that need to identify the src directory. The shorter
- # it is, the more likely it's wrong (checking for just "build/common.gypi"
- # would find "src/v8" for files below "src/v8", as "src/v8/build/common.gypi"
- # exists). The longer it is, the more likely it is to break when we rename
- # directories.
- fingerprints = ['chrome', 'net', 'v8', 'build', 'skia']
- while candidate and not all(
- [os.path.isdir(os.path.join(candidate, fp)) for fp in fingerprints]):
- candidate = os.path.dirname(candidate)
- return candidate
-
-
-def guess_configuration():
- """Default to the configuration with either a newer build.ninja or a newer
- protoc."""
- root = os.path.join(path_to_source_root(), 'out')
- def is_release_15s_newer(test_path):
- try:
- debug_mtime = os.path.getmtime(os.path.join(root, 'Debug', test_path))
- except os.error:
- debug_mtime = 0
- try:
- rel_mtime = os.path.getmtime(os.path.join(root, 'Release', test_path))
- except os.error:
- rel_mtime = 0
- return rel_mtime - debug_mtime >= 15
- configuration = 'Debug'
- if is_release_15s_newer('build.ninja') or is_release_15s_newer('protoc'):
- configuration = 'Release'
- return configuration
-
-
-def compute_ninja_command_for_current_buffer(configuration=None):
- """Returns the shell command to compile the file in the current buffer."""
- if not configuration: configuration = guess_configuration()
- build_dir = os.path.join(path_to_source_root(), 'out', configuration)
-
- # ninja needs filepaths for the ^ syntax to be relative to the
- # build directory.
- file_to_build = path_to_current_buffer()
- file_to_build = os.path.relpath(file_to_build, build_dir)
-
- build_cmd = ' '.join(['ninja', '-C', build_dir, file_to_build + '^'])
- if sys.platform == 'win32':
- # Escape \ for Vim, and ^ for both Vim and shell.
- build_cmd = build_cmd.replace('\\', '\\\\').replace('^', '^^^^')
- vim.command('return "%s"' % build_cmd)
-
-
-def compute_ninja_command_for_targets(targets='', configuration=None):
- if not configuration: configuration = guess_configuration()
- build_dir = os.path.join(path_to_source_root(), 'out', configuration)
- build_cmd = ' '.join(['ninja', '-C', build_dir, targets])
- vim.command('return "%s"' % build_cmd)
-endpython
-
-fun! s:MakeWithCustomCommand(build_cmd)
- let l:oldmakepgr = &makeprg
- let &makeprg=a:build_cmd
- silent make | cwindow
- if !has('gui_running')
- redraw!
- endif
- let &makeprg = l:oldmakepgr
-endfun
-
-fun! s:NinjaCommandForCurrentBuffer()
- python compute_ninja_command_for_current_buffer()
-endfun
-
-fun! s:NinjaCommandForTargets(targets)
- python compute_ninja_command_for_targets(vim.eval('a:targets'))
-endfun
-
-fun! CrCompileFile()
- call s:MakeWithCustomCommand(s:NinjaCommandForCurrentBuffer())
-endfun
-
-fun! CrBuild(...)
- let l:targets = a:0 > 0 ? join(a:000, ' ') : ''
- if (l:targets !~ '\i')
- let l:targets = 'chrome'
- endif
- call s:MakeWithCustomCommand(s:NinjaCommandForTargets(l:targets))
-endfun
-
-command! CrCompileFile call CrCompileFile()
-command! -nargs=* CrBuild call CrBuild(<q-args>)
-
-if has('mac')
- map <D-k> :CrCompileFile<cr>
- imap <D-k> <esc>:CrCompileFile<cr>
-elseif has('win32')
- map <C-F7> :CrCompileFile<cr>
- imap <C-F7> <esc>:CrCompileFile<cr>
-elseif has('unix')
- map <Leader>o :CrCompileFile<cr>
-endif
diff --git a/chromium/tools/win/static_initializers/static_initializers.gyp b/chromium/tools/win/static_initializers/static_initializers.gyp
new file mode 100644
index 00000000000..724091f23a8
--- /dev/null
+++ b/chromium/tools/win/static_initializers/static_initializers.gyp
@@ -0,0 +1,28 @@
+# Copyright 2014 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.
+
+{
+ 'variables': {
+ 'chromium_code': 1,
+ },
+ 'conditions': [
+ ['not msvs_express', {
+ 'targets': [
+ {
+ 'target_name': 'static_initializers',
+ 'type': 'executable',
+ 'sources': [
+ 'static_initializers.cc',
+ ],
+ 'include_dirs': [
+ '$(VSInstallDir)/DIA SDK/include',
+ ],
+ },
+ ],
+ }, {
+ 'targets': [],
+ }],
+ ]
+}
+
diff --git a/chromium/tools/win/toolchain/7z/7z.dll b/chromium/tools/win/toolchain/7z/7z.dll
deleted file mode 100755
index cea996e4f53..00000000000
--- a/chromium/tools/win/toolchain/7z/7z.dll
+++ /dev/null
Binary files differ
diff --git a/chromium/tools/win/toolchain/7z/7z.exe b/chromium/tools/win/toolchain/7z/7z.exe
deleted file mode 100755
index b55fefe6d97..00000000000
--- a/chromium/tools/win/toolchain/7z/7z.exe
+++ /dev/null
Binary files differ
diff --git a/chromium/tools/win/toolchain/7z/LICENSE b/chromium/tools/win/toolchain/7z/LICENSE
deleted file mode 100644
index 9c2341363fb..00000000000
--- a/chromium/tools/win/toolchain/7z/LICENSE
+++ /dev/null
@@ -1,57 +0,0 @@
- 7-Zip
- ~~~~~
- License for use and distribution
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- 7-Zip Copyright (C) 1999-2012 Igor Pavlov.
-
- Licenses for files are:
-
- 1) 7z.dll: GNU LGPL + unRAR restriction
- 2) All other files: GNU LGPL
-
- The GNU LGPL + unRAR restriction means that you must follow both
- GNU LGPL rules and unRAR restriction rules.
-
-
- Note:
- You can use 7-Zip on any computer, including a computer in a commercial
- organization. You don't need to register or pay for 7-Zip.
-
-
- GNU LGPL information
- --------------------
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You can receive a copy of the GNU Lesser General Public License from
- http://www.gnu.org/
-
-
- unRAR restriction
- -----------------
-
- The decompression engine for RAR archives was developed using source
- code of unRAR program.
- All copyrights to original unRAR code are owned by Alexander Roshal.
-
- The license for original unRAR code has the following restriction:
-
- The unRAR sources cannot be used to re-create the RAR compression algorithm,
- which is proprietary. Distribution of modified unRAR sources in separate form
- or as a part of other software is permitted, provided that it is clearly
- stated in the documentation and source comments that the code may
- not be used to develop a RAR (WinRAR) compatible archiver.
-
-
- --
- Igor Pavlov
-
diff --git a/chromium/tools/win/toolchain/get_toolchain_if_necessary.py b/chromium/tools/win/toolchain/get_toolchain_if_necessary.py
deleted file mode 100644
index da21f95983d..00000000000
--- a/chromium/tools/win/toolchain/get_toolchain_if_necessary.py
+++ /dev/null
@@ -1,138 +0,0 @@
-# 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.
-
-import ctypes.wintypes
-import hashlib
-import json
-import os
-import subprocess
-import sys
-
-
-BASEDIR = os.path.dirname(os.path.abspath(__file__))
-
-
-GetFileAttributes = ctypes.windll.kernel32.GetFileAttributesW
-GetFileAttributes.argtypes = (ctypes.wintypes.LPWSTR,)
-GetFileAttributes.restype = ctypes.wintypes.DWORD
-FILE_ATTRIBUTE_HIDDEN = 0x2
-FILE_ATTRIBUTE_SYSTEM = 0x4
-
-
-def IsHidden(file_path):
- """Returns whether the given |file_path| has the 'system' or 'hidden'
- attribute set."""
- p = GetFileAttributes(file_path)
- assert p != 0xffffffff
- return bool(p & (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM))
-
-
-def GetFileList(root):
- """Gets a normalized list of files under |root|."""
- assert not os.path.isabs(root)
- assert os.path.normpath(root) == root
- file_list = []
- for base, _, files in os.walk(root):
- paths = [os.path.join(base, f) for f in files]
- file_list.extend(x.lower() for x in paths if not IsHidden(x))
- return sorted(file_list)
-
-
-def MakeTimestampsFileName(root):
- return os.path.join(root, '..', '.timestamps')
-
-
-def CalculateHash(root):
- """Calculates the sha1 of the paths to all files in the given |root| and the
- contents of those files, and returns as a hex string."""
- file_list = GetFileList(root)
-
- # Check whether we previously saved timestamps in $root/../.timestamps. If
- # we didn't, or they don't match, then do the full calculation, otherwise
- # return the saved value.
- timestamps_file = MakeTimestampsFileName(root)
- timestamps_data = {'files': [], 'sha1': ''}
- if os.path.exists(timestamps_file):
- with open(timestamps_file, 'rb') as f:
- try:
- timestamps_data = json.load(f)
- except ValueError:
- # json couldn't be loaded, empty data will force a re-hash.
- pass
-
- matches = len(file_list) == len(timestamps_data['files'])
- if matches:
- for disk, cached in zip(file_list, timestamps_data['files']):
- if disk != cached[0] or os.stat(disk).st_mtime != cached[1]:
- matches = False
- break
- if matches:
- return timestamps_data['sha1']
-
- digest = hashlib.sha1()
- for path in file_list:
- digest.update(path)
- with open(path, 'rb') as f:
- digest.update(f.read())
- return digest.hexdigest()
-
-
-def SaveTimestampsAndHash(root, sha1):
- """Save timestamps and the final hash to be able to early-out more quickly
- next time."""
- file_list = GetFileList(root)
- timestamps_data = {
- 'files': [[f, os.stat(f).st_mtime] for f in file_list],
- 'sha1': sha1,
- }
- with open(MakeTimestampsFileName(root), 'wb') as f:
- json.dump(timestamps_data, f)
-
-
-def main():
- if sys.platform not in ('win32', 'cygwin'):
- return 0
-
- if len(sys.argv) != 1:
- print >> sys.stderr, 'Unexpected arguments.'
- return 1
-
- # Move to same location as .gclient. This is a no-op when run via gclient.
- os.chdir(os.path.normpath(os.path.join(BASEDIR, '..\\..\\..\\..')))
- toolchain_dir = 'src\\third_party\\win_toolchain'
- target_dir = os.path.join(toolchain_dir, 'files')
-
- sha1path = os.path.join(toolchain_dir, 'toolchain.sha1')
- desired_hash = ''
- if os.path.isfile(sha1path):
- with open(sha1path, 'rb') as f:
- desired_hash = f.read().strip()
-
- # If the current hash doesn't match what we want in the file, nuke and pave.
- # Typically this script is only run when the .sha1 one file is updated, but
- # directly calling "gclient runhooks" will also run it, so we cache
- # based on timestamps to make that case fast.
- current_hash = CalculateHash(target_dir)
- if current_hash != desired_hash:
- print 'Windows toolchain out of date or doesn\'t exist, updating...'
- if os.path.isdir(target_dir):
- subprocess.check_call('rmdir /s/q "%s"' % target_dir, shell=True)
- subprocess.check_call([
- sys.executable,
- 'src\\tools\\win\\toolchain\\toolchain2013.py',
- '--targetdir', target_dir])
- current_hash = CalculateHash(target_dir)
- if current_hash != desired_hash:
- print >> sys.stderr, (
- 'Got wrong hash after pulling a new toolchain. '
- 'Wanted \'%s\', got \'%s\'.' % (
- desired_hash, current_hash))
- return 1
- SaveTimestampsAndHash(target_dir, current_hash)
-
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/tools/win/toolchain/toolchain.py b/chromium/tools/win/toolchain/toolchain.py
deleted file mode 100644
index 1c16fb1632b..00000000000
--- a/chromium/tools/win/toolchain/toolchain.py
+++ /dev/null
@@ -1,714 +0,0 @@
-# Copyright 2012 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.
-
-# Extracts a Windows toolchain suitable for building Chrome from various
-# downloadable pieces.
-
-
-import ctypes
-from optparse import OptionParser
-import os
-import shutil
-import subprocess
-import sys
-import tempfile
-import urllib2
-
-
-g_temp_dirs = []
-
-
-def GetLongPathName(path):
- """Converts any 8dot3 names in the path to the full name."""
- buf = ctypes.create_unicode_buffer(260)
- size = ctypes.windll.kernel32.GetLongPathNameW(unicode(path), buf, 260)
- if (size > 260):
- raise SystemExit('Long form of path longer than 260 chars: %s' % path)
- return buf.value
-
-
-def RunOrDie(command):
- rc = subprocess.call(command, shell=True)
- if rc != 0:
- raise SystemExit('%s failed.' % command)
-
-
-def TempDir():
- """Generate a temporary directory (for downloading or extracting to) and keep
- track of the directory that's created for cleaning up later."""
- global g_temp_dirs
- temp = tempfile.mkdtemp()
- g_temp_dirs.append(temp)
- return temp
-
-
-def DeleteAllTempDirs():
- """Remove all temporary directories created by |TempDir()|."""
- global g_temp_dirs
- if g_temp_dirs:
- sys.stdout.write('Cleaning up temporaries...\n')
- for temp in g_temp_dirs:
- # shutil.rmtree errors out on read only attributes.
- RunOrDie('rmdir /s/q "%s"' % temp)
- g_temp_dirs = []
-
-
-def Download(url, local_path):
- """Download a large-ish binary file and print some status information while
- doing so."""
- sys.stdout.write('Downloading %s...\n' % url)
- req = urllib2.urlopen(url)
- content_length = int(req.headers.get('Content-Length', 0))
- bytes_read = 0
- terminator = '\r' if sys.stdout.isatty() else '\n'
- with open(local_path, 'wb') as file:
- while True:
- chunk = req.read(1024 * 1024)
- if not chunk:
- break
- bytes_read += len(chunk)
- file.write(chunk)
- sys.stdout.write('... %d/%d%s' % (bytes_read, content_length, terminator))
- sys.stdout.flush()
- sys.stdout.write('\n')
- if content_length and content_length != bytes_read:
- raise SystemExit('Got incorrect number of bytes downloading %s' % url)
-
-
-def DownloadSDK71Iso():
- sdk7_temp_dir = TempDir()
- target_path = os.path.join(sdk7_temp_dir, 'GRMSDKX_EN_DVD.iso')
- Download(
- ('http://download.microsoft.com/download/'
- 'F/1/0/F10113F5-B750-4969-A255-274341AC6BCE/GRMSDKX_EN_DVD.iso'),
- target_path)
- return target_path
-
-
-def DownloadWDKIso():
- wdk_temp_dir = TempDir()
- target_path = os.path.join(wdk_temp_dir, 'GRMWDK_EN_7600_1.ISO')
- Download(
- ('http://download.microsoft.com/download/'
- '4/A/2/4A25C7D5-EFBE-4182-B6A9-AE6850409A78/GRMWDK_EN_7600_1.ISO'),
- target_path)
- return target_path
-
-
-def DownloadSDKUpdate():
- sdk_update_temp_dir = TempDir()
- target_path = os.path.join(sdk_update_temp_dir, 'VC-Compiler-KB2519277.exe')
- Download(
- ('http://download.microsoft.com/download/'
- '7/5/0/75040801-126C-4591-BCE4-4CD1FD1499AA/VC-Compiler-KB2519277.exe'),
- target_path)
- return target_path
-
-
-def DownloadDirectXSDK():
- dxsdk_temp_dir = TempDir()
- target_path = os.path.join(dxsdk_temp_dir, 'DXSDK_Jun10.exe')
- Download(
- ('http://download.microsoft.com/download/'
- 'A/E/7/AE743F1F-632B-4809-87A9-AA1BB3458E31/DXSDK_Jun10.exe'),
- target_path)
- return target_path
-
-
-def DownloadVS2012ExIso():
- ex_temp_dir = TempDir()
- target_path = os.path.join(ex_temp_dir, 'VS2012_WDX_ENU.iso')
- Download(
- ('http://download.microsoft.com/download/'
- '1/F/5/1F519CC5-0B90-4EA3-8159-33BFB97EF4D9/VS2012_WDX_ENU.iso'),
- target_path)
- return target_path
-
-
-def DownloadSDK8():
- """Download the Win8 SDK. This one is slightly different than the simple
- ones above. There is no .ISO distribution for the Windows 8 SDK. Rather, a
- tool is provided that is a download manager. This is used to download the
- various .msi files to a target location. Unfortunately, this tool requires
- elevation for no obvious reason even when only downloading, so this function
- will trigger a UAC elevation if the script is not run from an elevated
- prompt."""
- # Use the long path name here because because 8dot3 names don't seem to work.
- sdk_temp_dir = GetLongPathName(TempDir())
- target_path = os.path.join(sdk_temp_dir, 'sdksetup.exe')
- standalone_path = os.path.join(sdk_temp_dir, 'Standalone')
- Download(
- ('http://download.microsoft.com/download/'
- 'F/1/3/F1300C9C-A120-4341-90DF-8A52509B23AC/standalonesdk/sdksetup.exe'),
- target_path)
- sys.stdout.write(
- 'Running sdksetup.exe to download Win8 SDK (may request elevation)...\n')
- count = 0
- while count < 5:
- rc = os.system(target_path + ' /quiet '
- '/features OptionId.WindowsDesktopSoftwareDevelopmentKit '
- '/layout ' + standalone_path)
- if rc == 0:
- return standalone_path
- count += 1
- sys.stdout.write('Windows 8 SDK failed to download, retrying.\n')
- raise SystemExit("After multiple retries, couldn't download Win8 SDK")
-
-
-def DownloadVS2012Update3():
- """Download Update3 to VS2012. See notes in DownloadSDK8."""
- update3_dir = TempDir()
- target_path = os.path.join(update3_dir, 'VS2012.3.iso')
- Download(
- ('http://download.microsoft.com/download/'
- 'D/4/8/D48D1AC2-A297-4C9E-A9D0-A218E6609F06/VS2012.3.iso'),
- target_path)
- return target_path
-
-
-class SourceImages2010(object):
- def __init__(self, sdk8_path, wdk_iso, sdk7_update, sdk7_path, dxsdk_path):
- self.sdk8_path = sdk8_path
- self.wdk_iso = wdk_iso
- self.sdk7_update = sdk7_update
- self.sdk7_path = sdk7_path
- self.dxsdk_path = dxsdk_path
-
-
-def GetSourceImages2010(local_dir):
- """Download all distribution archives for the components we need."""
- if local_dir:
- return SourceImages2010(
- sdk8_path=os.path.join(local_dir, 'Standalone'),
- wdk_iso=os.path.join(local_dir, 'GRMWDK_EN_7600_1.ISO'),
- sdk7_update=os.path.join(local_dir, 'VC-Compiler-KB2519277.exe'),
- sdk7_path=os.path.join(local_dir, 'GRMSDKX_EN_DVD.ISO'),
- dxsdk_path=os.path.join(local_dir, 'DXSDK_Jun10.exe'))
- else:
- # Note that we do the Win8 SDK first so that its silly UAC prompt
- # happens before the user wanders off to get coffee.
- sdk8_path = DownloadSDK8()
- wdk_iso = DownloadWDKIso()
- sdk7_update = DownloadSDKUpdate()
- sdk7_path = DownloadSDK71Iso()
- dxsdk_path = DownloadDirectXSDK()
- return SourceImages2010(
- sdk8_path, wdk_iso, sdk7_update, sdk7_path, dxsdk_path)
-
-
-class SourceImages2012():
- def __init__(self, ex_path, update_path, wdk_iso):
- self.ex_path = ex_path
- self.update_path = update_path
- self.wdk_iso = wdk_iso
-
-
-def GetSourceImages2012(local_dir):
- """Download all distribution archives for the components we need."""
- if local_dir:
- return SourceImages2012(
- ex_path=os.path.join(local_dir, 'VS2012_WDX_ENU.iso'),
- update_path=os.path.join(local_dir, 'VS2012.3.iso'),
- wdk_iso=os.path.join(local_dir, 'GRMWDK_EN_7600_1.ISO'))
- else:
- ex_path = DownloadVS2012ExIso()
- wdk_iso = DownloadWDKIso()
- update_path = DownloadVS2012Update3()
- return SourceImages2012(
- ex_path=ex_path,
- update_path=update_path,
- wdk_iso=wdk_iso)
-
-
-def ExtractIso(iso_path):
- """Use 7zip to extract the contents of the given .iso (or self-extracting
- .exe)."""
- target_path = TempDir()
- sys.stdout.write('Extracting %s...\n' % iso_path)
- sys.stdout.flush()
- # TODO(scottmg): Do this (and exe) manually with python code.
- # Note that at the beginning of main() we set the working directory to 7z's
- # location.
- RunOrDie('7z x "%s" -y "-o%s" >nul' % (iso_path, target_path))
- return target_path
-
-
-ExtractExe = ExtractIso
-
-
-def ExtractMsi(msi_path):
- """Use msiexec to extract the contents of the given .msi file."""
- sys.stdout.write('Extracting %s...\n' % msi_path)
- target_path = TempDir()
- RunOrDie('msiexec /a "%s" /qn TARGETDIR="%s"' % (msi_path, target_path))
- return target_path
-
-
-class ExtractedComponents2010(object):
- def __init__(self,
- vc_x86, vc_x64,
- buildtools_x86, buildtools_x64, libs_x86, libs_x64, headers,
- update_x86, update_x64,
- sdk_path, metro_sdk_path,
- dxsdk):
- self.vc_x86 = vc_x86
- self.vc_x64 = vc_x64
- self.buildtools_x86 = buildtools_x86
- self.buildtools_x64 = buildtools_x64
- self.libs_x86 = libs_x86
- self.libs_x64 = libs_x64
- self.headers = headers
- self.update_x86 = update_x86
- self.update_x64 = update_x64
- self.sdk_path = sdk_path
- self.metro_sdk_path = metro_sdk_path
- self.dxsdk = dxsdk
-
-
-def ExtractComponents2010(images):
- """Given the paths to the images, extract the required parts, and return
- an object containing paths to all the pieces."""
- extracted_sdk7 = ExtractIso(images.sdk7_path)
- extracted_vc_x86 = \
- ExtractMsi(os.path.join(extracted_sdk7,
- r'Setup\vc_stdx86\vc_stdx86.msi'))
- extracted_vc_x64 = \
- ExtractMsi(os.path.join(extracted_sdk7,
- r'Setup\vc_stdamd64\vc_stdamd64.msi'))
-
- extracted_wdk = ExtractIso(images.wdk_iso)
- extracted_buildtools_x86 = \
- ExtractMsi(os.path.join(extracted_wdk, r'WDK\buildtools_x86fre.msi'))
- extracted_buildtools_x64 = \
- ExtractMsi(os.path.join(extracted_wdk, r'WDK\buildtools_x64fre.msi'))
- extracted_libs_x86 = \
- ExtractMsi(os.path.join(extracted_wdk, r'WDK\libs_x86fre.msi'))
- extracted_libs_x64 = \
- ExtractMsi(os.path.join(extracted_wdk, r'WDK\libs_x64fre.msi'))
- extracted_headers = \
- ExtractMsi(os.path.join(extracted_wdk, r'WDK\headers.msi'))
-
- extracted_update = ExtractExe(images.sdk7_update)
- extracted_update_x86 = \
- ExtractMsi(os.path.join(extracted_update, 'vc_stdx86.msi'))
- extracted_update_x64 = \
- ExtractMsi(os.path.join(extracted_update, 'vc_stdamd64.msi'))
-
- sdk_msi_path = os.path.join(
- images.sdk8_path,
- r'Installers\Windows Software Development Kit-x86_en-us.msi')
- extracted_sdk_path = ExtractMsi(sdk_msi_path)
-
- sdk_metro_msi_path = os.path.join(
- images.sdk8_path,
- 'Installers',
- 'Windows Software Development Kit for Metro style Apps-x86_en-us.msi')
- extracted_metro_sdk_path = ExtractMsi(sdk_metro_msi_path)
-
- extracted_dxsdk = ExtractExe(images.dxsdk_path)
-
- return ExtractedComponents2010(
- vc_x86=extracted_vc_x86,
- vc_x64=extracted_vc_x64,
- buildtools_x86=extracted_buildtools_x86,
- buildtools_x64=extracted_buildtools_x64,
- libs_x86=extracted_libs_x86,
- libs_x64=extracted_libs_x64,
- headers=extracted_headers,
- update_x86=extracted_update_x86,
- update_x64=extracted_update_x64,
- sdk_path=extracted_sdk_path,
- metro_sdk_path=extracted_metro_sdk_path,
- dxsdk=extracted_dxsdk)
-
-
-class ExtractedComponents2012(object):
- def __init__(self,
- vc_x86, vc_x86_res, librarycore,
- vc_x86_update, vc_x86_res_update, librarycore_update,
- sdk_path, metro_sdk_path,
- buildtools_x86, buildtools_x64, libs_x86, libs_x64, headers):
- self.vc_x86 = vc_x86
- self.vc_x86_res = vc_x86_res
- self.librarycore = librarycore
- self.vc_x86_update = vc_x86_update
- self.vc_x86_res_update = vc_x86_res_update
- self.librarycore_update = librarycore_update
- self.buildtools_x86 = buildtools_x86
- self.buildtools_x64 = buildtools_x64
- self.libs_x86 = libs_x86
- self.libs_x64 = libs_x64
- self.headers = headers
- self.sdk_path = sdk_path
- self.metro_sdk_path = metro_sdk_path
-
-
-def ExtractComponents2012(images):
- """Given the paths to the images, extract the required parts and return an
- object containing paths to all the pieces."""
- extracted_ex = ExtractIso(images.ex_path)
-
- extracted_compilercore = ExtractMsi(os.path.join(
- extracted_ex,
- r'packages\vc_compilerCore86\vc_compilerCore86.msi'))
-
- extracted_compilercore_res = ExtractMsi(os.path.join(
- extracted_ex,
- r'packages\vc_compilerCore86res\vc_compilerCore86res.msi'))
-
- extracted_librarycore = ExtractMsi(os.path.join(
- extracted_ex,
- r'packages\vc_librarycore86\vc_librarycore86.msi'))
-
- extracted_wdk = ExtractIso(images.wdk_iso)
- extracted_buildtools_x86 = \
- ExtractMsi(os.path.join(extracted_wdk, r'WDK\buildtools_x86fre.msi'))
- extracted_buildtools_x64 = \
- ExtractMsi(os.path.join(extracted_wdk, r'WDK\buildtools_x64fre.msi'))
- extracted_libs_x86 = \
- ExtractMsi(os.path.join(extracted_wdk, r'WDK\libs_x86fre.msi'))
- extracted_libs_x64 = \
- ExtractMsi(os.path.join(extracted_wdk, r'WDK\libs_x64fre.msi'))
- extracted_headers = \
- ExtractMsi(os.path.join(extracted_wdk, r'WDK\headers.msi'))
-
- sdk_msi_path = os.path.join(
- extracted_ex, 'packages', 'Windows_SDK',
- r'Windows Software Development Kit-x86_en-us.msi')
- extracted_sdk_path = ExtractMsi(sdk_msi_path)
-
- sdk_metro_msi_path = os.path.join(
- extracted_ex, 'packages', 'Windows_SDK',
- 'Windows Software Development Kit for Metro style Apps-x86_en-us.msi')
- extracted_metro_sdk_path = ExtractMsi(sdk_metro_msi_path)
-
- extracted_update = ExtractIso(images.update_path)
-
- extracted_compilercore_update = ExtractMsi(os.path.join(
- extracted_update, r'packages\vc_compilercore86\vc_compilercore86.msi'))
-
- extracted_compilercore_res_update = ExtractMsi(os.path.join(
- extracted_update,
- r'packages\vc_compilercore86res\enu\vc_compilercore86res.msi'))
-
- extracted_librarycore_update = ExtractMsi(os.path.join(
- extracted_update, r'packages\vc_librarycore86\vc_librarycore86.msi'))
-
- return ExtractedComponents2012(
- vc_x86=extracted_compilercore,
- vc_x86_res=extracted_compilercore_res,
- librarycore=extracted_librarycore,
- vc_x86_update=extracted_compilercore_update,
- vc_x86_res_update=extracted_compilercore_res_update,
- librarycore_update=extracted_compilercore_update,
- sdk_path=extracted_sdk_path,
- metro_sdk_path=extracted_metro_sdk_path,
- buildtools_x86=extracted_buildtools_x86,
- buildtools_x64=extracted_buildtools_x64,
- libs_x86=extracted_libs_x86,
- libs_x64=extracted_libs_x64,
- headers=extracted_headers)
-
-
-def PullFrom(list_of_path_pairs, source_root, target_dir):
- """Each pair in |list_of_path_pairs| is (from, to). Join the 'from' with
- |source_root| and the 'to' with |target_dir| and perform a recursive copy."""
- for source, destination in list_of_path_pairs:
- full_source = os.path.join(source_root, source)
- full_target = os.path.join(target_dir, destination)
- rc = os.system('robocopy /s "%s" "%s" >nul' % (full_source, full_target))
- if (rc & 8) != 0 or (rc & 16) != 0:
- # ref: http://ss64.com/nt/robocopy-exit.html
- raise SystemExit("Couldn't copy %s to %s" % (full_source, full_target))
-
-
-def CopyToFinalLocation2010(extracted, target_dir):
- """Copy all the directories we need to the target location."""
- sys.stdout.write('Pulling together required pieces...\n')
-
- # Note that order is important because some of the older ones are
- # overwritten by updates.
- from_sdk = [(r'Windows Kits\8.0', r'win8sdk')]
- PullFrom(from_sdk, extracted.sdk_path, target_dir)
-
- from_metro_sdk = [(r'Windows Kits\8.0', r'win8sdk')]
- PullFrom(from_sdk, extracted.metro_sdk_path, target_dir)
-
- from_buildtools_x86 = [
- (r'WinDDK\7600.16385.win7_wdk.100208-1538\bin\x86', r'WDK\bin'),
- ]
- PullFrom(from_buildtools_x86, extracted.buildtools_x86, target_dir)
-
- from_buildtools_x64 = [
- (r'WinDDK\7600.16385.win7_wdk.100208-1538\bin\amd64', r'WDK\bin'),
- ]
- PullFrom(from_buildtools_x64, extracted.buildtools_x64, target_dir)
-
- from_libs_x86 = [
- (r'WinDDK\7600.16385.win7_wdk.100208-1538\lib', r'WDK\lib'),
- ]
- PullFrom(from_libs_x86, extracted.libs_x86, target_dir)
-
- from_libs_x64 = [
- (r'WinDDK\7600.16385.win7_wdk.100208-1538\lib', r'WDK\lib'),
- ]
- PullFrom(from_libs_x64, extracted.libs_x64, target_dir)
-
- from_headers = [
- (r'WinDDK\7600.16385.win7_wdk.100208-1538\inc', r'WDK\inc'),
- ]
- PullFrom(from_headers, extracted.headers, target_dir)
-
- # The compiler update to get the SP1 compiler is a bit of a mess. See
- # http://goo.gl/n1DeO. The summary is that update for the standalone compiler
- # binary installs a broken set of headers. So, add an empty ammintrin.h since
- # we don't actually need the contents of it (for Chromium).
-
- from_sdk7_x86 = [
- (r'Program Files\Microsoft Visual Studio 10.0', '.'),
- (r'Win\System', r'VC\bin'),
- ]
- PullFrom(from_sdk7_x86, extracted.vc_x86, target_dir)
-
- from_sdk7_x64 =[
- (r'Program Files(64)\Microsoft Visual Studio 10.0', '.'),
- (r'Win\System64', r'VC\bin\amd64'),
- ]
- PullFrom(from_sdk7_x64, extracted.vc_x64, target_dir)
-
- from_vcupdate_x86 = [
- (r'Program Files\Microsoft Visual Studio 10.0', '.'),
- (r'Win\System', r'VC\bin'),
- ]
- PullFrom(from_vcupdate_x86, extracted.update_x86, target_dir)
-
- from_vcupdate_x64 = [
- (r'Program Files(64)\Microsoft Visual Studio 10.0', '.'),
- (r'Win\System64', r'VC\bin\amd64'),
- ]
- PullFrom(from_vcupdate_x64, extracted.update_x64, target_dir)
-
- sys.stdout.write('Stubbing ammintrin.h...\n')
- open(os.path.join(target_dir, r'VC\include\ammintrin.h'), 'w').close()
-
- from_dxsdk = [
- (r'DXSDK\Include', r'DXSDK\Include'),
- (r'DXSDK\Lib', r'DXSDK\Lib'),
- (r'DXSDK\Redist', r'DXSDK\Redist'),
- ]
- PullFrom(from_dxsdk, extracted.dxsdk, target_dir)
-
-
-def CopyToFinalLocation2012(extracted, target_dir):
- """Copy all directories we need to the target location."""
- sys.stdout.write('Pulling together required pieces...\n')
-
- # Note that order is important because some of the older ones are
- # overwritten by updates.
- from_sdk = [(r'Windows Kits\8.0', r'win8sdk')]
- PullFrom(from_sdk, extracted.sdk_path, target_dir)
-
- from_metro_sdk = [(r'Windows Kits\8.0', r'win8sdk')]
- PullFrom(from_sdk, extracted.metro_sdk_path, target_dir)
-
- # Stock compiler.
- from_compiler = [(r'Program Files\Microsoft Visual Studio 11.0', '.')]
- PullFrom(from_compiler, extracted.vc_x86, target_dir)
-
- from_compiler_res = [(r'Program Files\Microsoft Visual Studio 11.0', '.')]
- PullFrom(from_compiler_res, extracted.vc_x86_res, target_dir)
-
- from_library = [(r'Program Files\Microsoft Visual Studio 11.0', '.')]
- PullFrom(from_library, extracted.librarycore, target_dir)
-
- # WDK.
- from_buildtools_x86 = [
- (r'WinDDK\7600.16385.win7_wdk.100208-1538\bin\x86', r'WDK\bin'),
- ]
- PullFrom(from_buildtools_x86, extracted.buildtools_x86, target_dir)
-
- from_buildtools_x64 = [
- (r'WinDDK\7600.16385.win7_wdk.100208-1538\bin\amd64', r'WDK\bin'),
- ]
- PullFrom(from_buildtools_x64, extracted.buildtools_x64, target_dir)
-
- from_libs_x86 = [(r'WinDDK\7600.16385.win7_wdk.100208-1538\lib', r'WDK\lib')]
- PullFrom(from_libs_x86, extracted.libs_x86, target_dir)
-
- from_libs_x64 = [(r'WinDDK\7600.16385.win7_wdk.100208-1538\lib', r'WDK\lib')]
- PullFrom(from_libs_x64, extracted.libs_x64, target_dir)
-
- from_headers = [(r'WinDDK\7600.16385.win7_wdk.100208-1538\inc', r'WDK\inc')]
- PullFrom(from_headers, extracted.headers, target_dir)
-
- # Update bits.
- from_compiler = [(r'Program Files\Microsoft Visual Studio 11.0', '.')]
- PullFrom(from_compiler, extracted.vc_x86_update, target_dir)
-
- from_compiler_res = [(r'Program Files\Microsoft Visual Studio 11.0', '.')]
- PullFrom(from_compiler_res, extracted.vc_x86_res_update, target_dir)
-
- from_library = [(r'Program Files\Microsoft Visual Studio 11.0', '.')]
- PullFrom(from_library, extracted.librarycore_update, target_dir)
-
-
-def PatchAsyncInfo(target_dir):
- """Apply patch from
- http://www.chromium.org/developers/how-tos/build-instructions-windows for
- asyncinfo.h."""
- # This is only required for the 2010 compiler.
- sys.stdout.write('Patching asyncinfo.h...\n')
- asyncinfo_h_path = os.path.join(
- target_dir, r'win8sdk\Include\winrt\asyncinfo.h')
- with open(asyncinfo_h_path, 'rb') as f:
- asyncinfo_h = f.read()
- patched = asyncinfo_h.replace(
- 'enum class AsyncStatus {', 'enum AsyncStatus {')
- with open(asyncinfo_h_path, 'wb') as f:
- f.write(patched)
-
-
-def GenerateSetEnvCmd(target_dir, vsversion):
- """Generate a batch file that gyp expects to exist to set up the compiler
- environment. This is normally generated by a full install of the SDK, but we
- do it here manually since we do not do a full install."""
- with open(os.path.join(
- target_dir, r'win8sdk\bin\SetEnv.cmd'), 'w') as file:
- file.write('@echo off\n')
- file.write(':: Generated by tools\\win\\toolchain\\toolchain.py.\n')
- file.write(':: Targeting VS%s.\n' % vsversion)
- # Common to x86 and x64
- file.write('set PATH=%s;%%PATH%%\n' % (
- os.path.join(target_dir, r'Common7\IDE')))
- file.write('set INCLUDE=%s;%s;%s\n' % (
- os.path.join(target_dir, r'win8sdk\Include\um'),
- os.path.join(target_dir, r'win8sdk\Include\shared'),
- os.path.join(target_dir, r'VC\include')))
- file.write('if "%1"=="/x64" goto x64\n')
-
- # x86 only.
- file.write('set PATH=%s;%s;%s;%%PATH%%\n' % (
- os.path.join(target_dir, r'win8sdk\bin\x86'),
- os.path.join(target_dir, r'VC\bin'),
- os.path.join(target_dir, r'WDK\bin')))
- file.write('set LIB=%s;%s\n' % (
- os.path.join(target_dir, r'VC\lib'),
- os.path.join(target_dir, r'win8sdk\Lib\win8\um\x86')))
- file.write('goto done\n')
-
- # Unfortunately, 2012 Express does not include a native 64 bit compiler,
- # so we have to use the x86->x64 cross.
- if vsversion == '2012':
- # x64 only.
- file.write(':x64\n')
- file.write('set PATH=%s;%s;%s;%%PATH%%\n' % (
- os.path.join(target_dir, r'win8sdk\bin\x64'),
- os.path.join(target_dir, r'VC\bin\x86_amd64'),
- os.path.join(target_dir, r'WDK\bin\amd64')))
- file.write('set LIB=%s;%s\n' % (
- os.path.join(target_dir, r'VC\lib\amd64'),
- os.path.join(target_dir, r'win8sdk\Lib\win8\um\x64')))
- else:
- # x64 only.
- file.write(':x64\n')
- file.write('set PATH=%s;%s;%s;%%PATH%%\n' % (
- os.path.join(target_dir, r'win8sdk\bin\x64'),
- os.path.join(target_dir, r'VC\bin\amd64'),
- os.path.join(target_dir, r'WDK\bin\amd64')))
- file.write('set LIB=%s;%s\n' % (
- os.path.join(target_dir, r'VC\lib\amd64'),
- os.path.join(target_dir, r'win8sdk\Lib\win8\um\x64')))
-
- file.write(':done\n')
-
-
-def GenerateTopLevelEnv(target_dir, vsversion):
- """Generate a batch file that sets up various environment variables that let
- the Chromium build files and gyp find SDKs and tools."""
- with open(os.path.join(target_dir, r'env.bat'), 'w') as file:
- file.write('@echo off\n')
- file.write(':: Generated by tools\\win\\toolchain\\toolchain.py.\n')
- file.write(':: Targeting VS%s.\n' % vsversion)
- file.write('set GYP_DEFINES=windows_sdk_path="%s" '
- 'component=shared_library\n' % (
- os.path.join(target_dir, 'win8sdk')))
- file.write('set GYP_MSVS_VERSION=%se\n' % vsversion)
- file.write('set GYP_MSVS_OVERRIDE_PATH=%s\n' % target_dir)
- file.write('set GYP_GENERATORS=ninja\n')
- file.write('set GYP_PARALLEL=1\n')
- file.write('set WDK_DIR=%s\n' % os.path.join(target_dir, r'WDK'))
- if vsversion == '2010':
- file.write('set DXSDK_DIR=%s\n' % os.path.join(target_dir, r'DXSDK'))
- file.write('set WindowsSDKDir=%s\n' %
- os.path.join(target_dir, r'win8sdk'))
- if vsversion == '2012':
- # TODO: For 2010 too.
- base = os.path.join(target_dir, r'VC\redist')
- paths = [
- r'Debug_NonRedist\x64\Microsoft.VC110.DebugCRT',
- r'Debug_NonRedist\x86\Microsoft.VC110.DebugCRT',
- r'x64\Microsoft.VC110.CRT',
- r'x86\Microsoft.VC110.CRT',
- ]
- additions = ';'.join(os.path.join(base, x) for x in paths)
- file.write('set PATH=%s;%%PATH%%\n' % additions)
- file.write('echo Environment set for toolchain in %s.\n' % target_dir)
- file.write('cd /d %s\\..\n' % target_dir)
-
-
-def main():
- parser = OptionParser()
- parser.add_option('--targetdir', metavar='DIR',
- help='put toolchain into DIR',
- default=os.path.abspath('win_toolchain'))
- parser.add_option('--vsversion', metavar='VSVERSION',
- help='select VS version: 2010 or 2012', default='2010')
- parser.add_option('--noclean', action='store_false', dest='clean',
- help='do not remove temp files',
- default=True)
- parser.add_option('--local', metavar='DIR',
- help='use downloaded files from DIR')
- options, args = parser.parse_args()
- try:
- target_dir = os.path.abspath(options.targetdir)
- if os.path.exists(target_dir):
- sys.stderr.write('%s already exists. Please [re]move it or use '
- '--targetdir to select a different target.\n' %
- target_dir)
- return 1
- # Set the working directory to 7z subdirectory. 7-zip doesn't find its
- # codec dll very well, so this is the simplest way to make sure it runs
- # correctly, as we don't otherwise care about working directory.
- os.chdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), '7z'))
- assert options.vsversion in ('2010', '2012')
- if options.vsversion == '2012':
- images = GetSourceImages2012(options.local)
- extracted = ExtractComponents2012(images)
- CopyToFinalLocation2012(extracted, target_dir)
- else:
- images = GetSourceImages2010(options.local)
- extracted = ExtractComponents2010(images)
- CopyToFinalLocation2010(extracted, target_dir)
- PatchAsyncInfo(target_dir)
-
- GenerateSetEnvCmd(target_dir, options.vsversion)
- GenerateTopLevelEnv(target_dir, options.vsversion)
- finally:
- if options.clean:
- DeleteAllTempDirs()
-
- sys.stdout.write(
- '\nIn a (clean) cmd shell, you can now run\n\n'
- ' %s\\env.bat\n\n'
- 'then\n\n'
- " gclient runhooks (or gclient sync if you haven't pulled deps yet)\n"
- ' ninja -C out\Debug chrome\n\n'
- 'Note that this script intentionally does not modify any global\n'
- 'settings like the registry, or system environment variables, so you\n'
- 'will need to run the above env.bat whenever you start a new\n'
- 'shell.\n\n' % target_dir)
-
-
-if __name__ == '__main__':
- main()
diff --git a/chromium/tools/win/toolchain/toolchain2013.py b/chromium/tools/win/toolchain/toolchain2013.py
deleted file mode 100644
index 9b886d4a70a..00000000000
--- a/chromium/tools/win/toolchain/toolchain2013.py
+++ /dev/null
@@ -1,229 +0,0 @@
-# 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.
-
-# Extracts a Windows VS2013 toolchain from various downloadable pieces.
-
-
-from toolchain import *
-
-
-def GetIsoUrl(pro):
- """Get the .iso path."""
- prefix = 'http://download.microsoft.com/download/'
- if pro:
- return (prefix +
- 'A/F/1/AF128362-A6A8-4DB3-A39A-C348086472CC/VS2013_RTM_PRO_ENU.iso')
- else:
- return (prefix +
- '7/2/E/72E0F986-D247-4289-B9DC-C4FB07374894/VS2013_RTM_DskExp_ENU.iso')
-
-
-def DownloadMainIso(url):
- temp_dir = TempDir()
- target_path = os.path.join(temp_dir, os.path.basename(url))
- Download(url, target_path)
- return target_path
-
-
-def GetSourceImage(local_dir, pro):
- url = GetIsoUrl(pro)
- if local_dir:
- return os.path.join(local_dir, os.path.basename(url))
- else:
- return DownloadMainIso(url)
-
-
-def ExtractMsiList(iso_dir, packages):
- results = []
- for (package, skippable) in packages:
- path_to_package = os.path.join(iso_dir, 'packages', package)
- if not os.path.exists(path_to_package) and skippable:
- sys.stdout.write('Pro-only %s skipped.\n' % package)
- continue
- results.append(ExtractMsi(path_to_package))
- return results
-
-
-def ExtractComponents(image):
- extracted_iso = ExtractIso(image)
- results = ExtractMsiList(extracted_iso, [
- (r'vcRuntimeAdditional_amd64\vc_runtimeAdditional_x64.msi', False),
- (r'vcRuntimeAdditional_x86\vc_runtimeAdditional_x86.msi', False),
- (r'vcRuntimeDebug_amd64\vc_runtimeDebug_x64.msi', False),
- (r'vcRuntimeDebug_x86\vc_runtimeDebug_x86.msi', False),
- (r'vcRuntimeMinimum_amd64\vc_runtimeMinimum_x64.msi', False),
- (r'vcRuntimeMinimum_x86\vc_runtimeMinimum_x86.msi', False),
- (r'vc_compilerCore86\vc_compilerCore86.msi', False),
- (r'vc_compilerCore86res\vc_compilerCore86res.msi', False),
- (r'vc_compilerx64nat\vc_compilerx64nat.msi', True),
- (r'vc_compilerx64natres\vc_compilerx64natres.msi', True),
- (r'vc_compilerx64x86\vc_compilerx64x86.msi', True),
- (r'vc_compilerx64x86res\vc_compilerx64x86res.msi', True),
- (r'vc_librarycore86\vc_librarycore86.msi', False),
- (r'vc_libraryDesktop\x64\vc_LibraryDesktopX64.msi', False),
- (r'vc_libraryDesktop\x86\vc_LibraryDesktopX86.msi', False),
- (r'vc_libraryextended\vc_libraryextended.msi', True),
- (r'Windows_SDK\Windows Software Development Kit-x86_en-us.msi', False),
- ('Windows_SDK\\'
- r'Windows Software Development Kit for Metro style Apps-x86_en-us.msi',
- False),
- ])
- return results
-
-
-def CopyToFinalLocation(extracted_dirs, target_dir):
- sys.stdout.write('Copying to final location...\n')
- mappings = {
- 'Program Files\\Microsoft Visual Studio 12.0\\': '.\\',
- 'Windows Kits\\8.0\\': 'win8sdk\\',
- 'System64\\': 'sys64\\',
- 'System\\': 'sys32\\',
- }
- matches = []
- for extracted_dir in extracted_dirs:
- for root, dirnames, filenames in os.walk(extracted_dir):
- for filename in filenames:
- matches.append((extracted_dir, os.path.join(root, filename)))
-
- copies = []
- for prefix, full_path in matches:
- partial_path = full_path[len(prefix) + 1:] # +1 for trailing \
- #print 'partial_path', partial_path
- for map_from, map_to in mappings.iteritems():
- #print 'map_from:', map_from, ', map_to:', map_to
- if partial_path.startswith(map_from):
- target_path = os.path.join(map_to, partial_path[len(map_from):])
- copies.append((full_path, os.path.join(target_dir, target_path)))
-
- for full_source, full_target in copies:
- target_dir = os.path.dirname(full_target)
- if not os.path.isdir(target_dir):
- os.makedirs(target_dir)
- shutil.copy2(full_source, full_target)
-
-
-def GenerateSetEnvCmd(target_dir, pro):
- """Generate a batch file that gyp expects to exist to set up the compiler
- environment. This is normally generated by a full install of the SDK, but we
- do it here manually since we do not do a full install."""
- with open(os.path.join(
- target_dir, r'win8sdk\bin\SetEnv.cmd'), 'w') as file:
- file.write('@echo off\n')
- file.write(':: Generated by tools\\win\\toolchain\\toolchain2013.py.\n')
- # Common to x86 and x64
- file.write('set PATH=%~dp0..\\..\\Common7\\IDE;%PATH%\n')
- file.write('set INCLUDE=%~dp0..\\..\\win8sdk\\Include\\um;'
- '%~dp0..\\..\\win8sdk\\Include\\shared;'
- '%~dp0..\\..\\VC\\include;'
- '%~dp0..\\..\\VC\\atlmfc\\include\n')
- file.write('if "%1"=="/x64" goto x64\n')
-
- # x86. If we're Pro, then use the amd64_x86 cross (we don't support x86
- # host at all).
- if pro:
- file.write('set PATH=%~dp0..\\..\\win8sdk\\bin\\x86;'
- '%~dp0..\\..\\VC\\bin\\amd64_x86;'
- '%~dp0..\\..\\VC\\bin\\amd64;' # Needed for mspdb120.dll.
- '%PATH%\n')
- else:
- file.write('set PATH=%~dp0..\\..\\win8sdk\\bin\\x86;'
- '%~dp0..\\..\\VC\\bin;%PATH%\n')
- file.write('set LIB=%~dp0..\\..\\VC\\lib;'
- '%~dp0..\\..\\win8sdk\\Lib\\win8\\um\\x86;'
- '%~dp0..\\..\\VC\\atlmfc\\lib\n')
- file.write('goto done\n')
-
- # Express does not include a native 64 bit compiler, so we have to use
- # the x86->x64 cross.
- if not pro:
- # x86->x64 cross.
- file.write(':x64\n')
- file.write('set PATH=%~dp0..\\..\\win8sdk\\bin\\x64;'
- '%~dp0..\\..\\VC\\bin\\x86_amd64;'
- '%PATH%\n')
- else:
- # x64 native.
- file.write(':x64\n')
- file.write('set PATH=%~dp0..\\..\\win8sdk\\bin\\x64;'
- '%~dp0..\\..\\VC\\bin\\amd64;'
- '%PATH%\n')
- file.write('set LIB=%~dp0..\\..\\VC\\lib\\amd64;'
- '%~dp0..\\..\\win8sdk\\Lib\\win8\\um\\x64;'
- '%~dp0..\\..\\VC\\atlmfc\\lib\\amd64\n')
- file.write(':done\n')
-
-
-def GenerateTopLevelEnv(target_dir, pro):
- """Generate a batch file that sets up various environment variables that let
- the Chromium build files and gyp find SDKs and tools."""
- with open(os.path.join(target_dir, r'env.bat'), 'w') as file:
- file.write('@echo off\n')
- file.write(':: Generated by tools\\win\\toolchain\\toolchain2013.py.\n')
- file.write('set GYP_DEFINES=windows_sdk_path="%~dp0win8sdk" '
- 'component=shared_library\n')
- file.write('set GYP_MSVS_VERSION=2013%s\n' % '' if pro else 'e')
- file.write('set GYP_MSVS_OVERRIDE_PATH=%~dp0\n')
- file.write('set GYP_GENERATORS=ninja\n')
- file.write('set WindowsSDKDir=%~dp0win8sdk\n')
- paths = [
- r'Debug_NonRedist\x64\Microsoft.VC120.DebugCRT',
- r'Debug_NonRedist\x86\Microsoft.VC120.DebugCRT',
- r'x64\Microsoft.VC120.CRT',
- r'x86\Microsoft.VC120.CRT',
- ]
- additions = ';'.join(('%~dp0' + x) for x in paths)
- file.write('set PATH=%s;%%PATH%%\n' % additions)
- file.write('echo Environment set for toolchain in %~dp0.\n')
- file.write('cd /d %~dp0..\n')
-
-
-def main():
- parser = OptionParser()
- parser.add_option('--targetdir', metavar='DIR',
- help='put toolchain into DIR',
- default=os.path.abspath('win_toolchain_2013'))
- parser.add_option('--noclean', action='store_false', dest='clean',
- help='do not remove temp files',
- default=True)
- parser.add_option('--local', metavar='DIR',
- help='use downloaded files from DIR')
- parser.add_option('--express', metavar='EXPRESS',
- help='use VS Express instead of Pro', action='store_true')
- options, args = parser.parse_args()
- try:
- target_dir = os.path.abspath(options.targetdir)
- if os.path.exists(target_dir):
- sys.stderr.write('%s already exists. Please [re]move it or use '
- '--targetdir to select a different target.\n' %
- target_dir)
- return 1
- pro = not options.express
- # Set the working directory to 7z subdirectory. 7-zip doesn't find its
- # codec dll very well, so this is the simplest way to make sure it runs
- # correctly, as we don't otherwise care about working directory.
- os.chdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), '7z'))
- image = GetSourceImage(options.local, pro)
- extracted = ExtractComponents(image)
- CopyToFinalLocation(extracted, target_dir)
-
- GenerateSetEnvCmd(target_dir, pro)
- GenerateTopLevelEnv(target_dir, pro)
- finally:
- if options.clean:
- DeleteAllTempDirs()
-
- sys.stdout.write(
- '\nIn a (clean) cmd shell, you can now run\n\n'
- ' %s\\env.bat\n\n'
- 'then\n\n'
- " gclient runhooks (or gclient sync if you haven't pulled deps yet)\n"
- ' ninja -C out\Debug chrome\n\n'
- 'Note that this script intentionally does not modify any global\n'
- 'settings like the registry, or system environment variables, so you\n'
- 'will need to run the above env.bat whenever you start a new\n'
- 'shell.\n\n' % target_dir)
-
-
-if __name__ == '__main__':
- main()
diff --git a/chromium/tools/xdisplaycheck/xdisplaycheck.cc b/chromium/tools/xdisplaycheck/xdisplaycheck.cc
deleted file mode 100644
index 8c432d1957f..00000000000
--- a/chromium/tools/xdisplaycheck/xdisplaycheck.cc
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright (c) 2012 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.
-//
-// This is a small program that tries to connect to the X server. It
-// continually retries until it connects or 30 seconds pass. If it fails
-// to connect to the X server or fails to find needed functiona, it returns
-// an error code of -1.
-//
-// This is to help verify that a useful X server is available before we start
-// start running tests on the build bots.
-
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-#include <X11/Xlib.h>
-
-#if defined(USE_AURA)
-#include <X11/extensions/XInput2.h>
-#endif
-
-void Sleep(int duration_ms) {
- struct timespec sleep_time, remaining;
-
- // Contains the portion of duration_ms >= 1 sec.
- sleep_time.tv_sec = duration_ms / 1000;
- duration_ms -= sleep_time.tv_sec * 1000;
-
- // Contains the portion of duration_ms < 1 sec.
- sleep_time.tv_nsec = duration_ms * 1000 * 1000; // nanoseconds.
-
- while (nanosleep(&sleep_time, &remaining) == -1 && errno == EINTR)
- sleep_time = remaining;
-}
-
-class XScopedDisplay {
- public:
- XScopedDisplay() : display_(NULL) {}
- ~XScopedDisplay() {
- if (display_) XCloseDisplay(display_);
- }
-
- void set(Display* display) { display_ = display; }
- Display* display() { return display_; }
-
- private:
- Display* display_;
-};
-
-int main(int argc, char* argv[]) {
- XScopedDisplay scoped_display;
- if (argv[1] && strcmp(argv[1], "--noserver") == 0) {
- scoped_display.set(XOpenDisplay(NULL));
- if (scoped_display.display()) {
- fprintf(stderr, "Found unexpected connectable display %s\n",
- XDisplayName(NULL));
- }
- // Return success when we got an unexpected display so that the code
- // without the --noserver is the same, but slow, rather than inverted.
- return !scoped_display.display();
- }
-
- int kNumTries = 78; // 78*77/2 * 10 = 30s of waiting
- int tries;
- for (tries = 0; tries < kNumTries; ++tries) {
- scoped_display.set(XOpenDisplay(NULL));
- if (scoped_display.display())
- break;
- Sleep(10 * tries);
- }
-
- if (!scoped_display.display()) {
- fprintf(stderr, "Failed to connect to %s\n", XDisplayName(NULL));
- return -1;
- }
-
- fprintf(stderr, "Connected after %d retries\n", tries);
-
-#if defined(USE_AURA)
- // Check for XInput2
- int opcode, event, err;
- if (!XQueryExtension(scoped_display.display(), "XInputExtension", &opcode,
- &event, &err)) {
- fprintf(stderr,
- "Failed to get XInputExtension on %s.\n", XDisplayName(NULL));
- return -1;
- }
-
- int major = 2, minor = 0;
- if (XIQueryVersion(scoped_display.display(), &major, &minor) == BadRequest) {
- fprintf(stderr,
- "Server does not have XInput2 on %s.\n", XDisplayName(NULL));
- return -1;
- }
-
- // Ask for the list of devices. This can cause some Xvfb to crash.
- int count = 0;
- XIDeviceInfo* devices =
- XIQueryDevice(scoped_display.display(), XIAllDevices, &count);
- if (devices)
- XIFreeDeviceInfo(devices);
-
- fprintf(stderr,
- "XInput2 verified initially sane on %s.\n", XDisplayName(NULL));
-#endif
- return 0;
-}
-
-#if defined(LEAK_SANITIZER)
-// XOpenDisplay leaks memory if it takes more than one try to connect. This
-// causes LSan bots to fail. We don't care about memory leaks in xdisplaycheck
-// anyway, so just disable LSan completely.
-extern "C" int __lsan_is_turned_off() { return 1; }
-#endif