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

Side by Side Diff: tools/perf/profile_creators/profile_generator.py

Issue 1020703002: Telemetry: Remove the class ProfileCreator. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Handles generating profiles and transferring them to/from mobile devices.""" 5 """Handles generating profiles and transferring them to/from mobile devices."""
6 6
7 import logging 7 import logging
8 import optparse 8 import optparse
9 import os 9 import os
10 import shutil 10 import shutil
11 import stat 11 import stat
12 import sys 12 import sys
13 import tempfile 13 import tempfile
14 14
15 from profile_creators import profile_creator 15 from profile_creators import profile_extender
16 from telemetry.core import browser_options 16 from telemetry.core import browser_options
17 from telemetry.core import discover 17 from telemetry.core import discover
18 from telemetry.core import util 18 from telemetry.core import util
19 from telemetry.user_story import user_story_runner 19 from telemetry.user_story import user_story_runner
20 20
21 21
22 def _DiscoverProfileCreatorClasses(): 22 def _DiscoverProfileExtenderClasses():
23 profile_creators_dir = os.path.abspath(os.path.join(util.GetBaseDir(), 23 profile_extenders_dir = os.path.abspath(os.path.join(util.GetBaseDir(),
24 os.pardir, 'perf', 'profile_creators')) 24 os.pardir, 'perf', 'profile_creators'))
25 base_dir = os.path.abspath(os.path.join(profile_creators_dir, os.pardir)) 25 base_dir = os.path.abspath(os.path.join(profile_extenders_dir, os.pardir))
26 26
27 profile_creators_unfiltered = discover.DiscoverClasses( 27 profile_extenders_unfiltered = discover.DiscoverClasses(
28 profile_creators_dir, base_dir, profile_creator.ProfileCreator) 28 profile_extenders_dir, base_dir, profile_extender.ProfileExtender)
29 29
30 # Remove '_creator' suffix from keys. 30 # Remove 'extender' suffix from keys.
31 profile_creators = {} 31 profile_extenders = {}
32 for test_name, test_class in profile_creators_unfiltered.iteritems(): 32 for test_name, test_class in profile_extenders_unfiltered.iteritems():
33 assert test_name.endswith('_creator') 33 assert test_name.endswith('_extender')
34 test_name = test_name[:-len('_creator')] 34 test_name = test_name[:-len('_extender')]
35 profile_creators[test_name] = test_class 35 profile_extenders[test_name] = test_class
36 return profile_creators 36 return profile_extenders
37 37
38 38
39 def _IsPseudoFile(directory, paths): 39 def _IsPseudoFile(directory, paths):
40 """Filter function for shutil.copytree() to reject socket files and symlinks 40 """Filter function for shutil.copytree() to reject socket files and symlinks
41 since those can't be copied around on bots.""" 41 since those can't be copied around on bots."""
42 def IsSocket(full_path): 42 def IsSocket(full_path):
43 """Check if a file at a given path is a socket.""" 43 """Check if a file at a given path is a socket."""
44 try: 44 try:
45 if stat.S_ISSOCK(os.stat(full_path).st_mode): 45 if stat.S_ISSOCK(os.stat(full_path).st_mode):
46 return True 46 return True
(...skipping 10 matching lines...) Expand all
57 continue 57 continue
58 if not IsSocket(full_path) and not os.path.islink(full_path): 58 if not IsSocket(full_path) and not os.path.islink(full_path):
59 continue 59 continue
60 60
61 logging.warning('Ignoring pseudo file: %s' % full_path) 61 logging.warning('Ignoring pseudo file: %s' % full_path)
62 ignore_list.append(path) 62 ignore_list.append(path)
63 63
64 return ignore_list 64 return ignore_list
65 65
66 66
67 def GenerateProfiles(profile_creator_class, profile_creator_name, options): 67 def GenerateProfiles(profile_extender_class, profile_creator_name, options):
68 """Generate a profile""" 68 """Generate a profile"""
69 69
70 temp_output_directory = tempfile.mkdtemp() 70 temp_output_directory = tempfile.mkdtemp()
71 options.output_profile_path = temp_output_directory 71 options.output_profile_path = temp_output_directory
72 72
73 profile_creator_instance = profile_creator_class() 73 profile_creator_instance = profile_extender_class()
74 try: 74 try:
75 profile_creator_instance.Run(options) 75 profile_creator_instance.Run(options)
76 except Exception as e: 76 except Exception as e:
77 logging.exception('Profile creation failed.') 77 logging.exception('Profile creation failed.')
78 shutil.rmtree(temp_output_directory) 78 shutil.rmtree(temp_output_directory)
79 raise e 79 raise e
80 80
81 # Everything is a-ok, move results to final destination. 81 # Everything is a-ok, move results to final destination.
82 generated_profiles_dir = os.path.abspath(options.output_dir) 82 generated_profiles_dir = os.path.abspath(options.output_dir)
83 if not os.path.exists(generated_profiles_dir): 83 if not os.path.exists(generated_profiles_dir):
84 os.makedirs(generated_profiles_dir) 84 os.makedirs(generated_profiles_dir)
85 out_path = os.path.join(generated_profiles_dir, profile_creator_name) 85 out_path = os.path.join(generated_profiles_dir, profile_creator_name)
86 if os.path.exists(out_path): 86 if os.path.exists(out_path):
87 shutil.rmtree(out_path) 87 shutil.rmtree(out_path)
88 88
89 shutil.copytree(temp_output_directory, out_path, ignore=_IsPseudoFile) 89 shutil.copytree(temp_output_directory, out_path, ignore=_IsPseudoFile)
90 shutil.rmtree(temp_output_directory) 90 shutil.rmtree(temp_output_directory)
91 sys.stderr.write("SUCCESS: Generated profile copied to: '%s'.\n" % out_path) 91 sys.stderr.write("SUCCESS: Generated profile copied to: '%s'.\n" % out_path)
92 92
93 return 0 93 return 0
94 94
95 95
96 def AddCommandLineArgs(parser): 96 def AddCommandLineArgs(parser):
97 user_story_runner.AddCommandLineArgs(parser) 97 user_story_runner.AddCommandLineArgs(parser)
98 98
99 profile_creators = _DiscoverProfileCreatorClasses().keys() 99 profile_extenders = _DiscoverProfileExtenderClasses().keys()
100 legal_profile_creators = '|'.join(profile_creators) 100 legal_profile_creators = '|'.join(profile_extenders)
101 group = optparse.OptionGroup(parser, 'Profile generation options') 101 group = optparse.OptionGroup(parser, 'Profile generation options')
102 group.add_option('--profile-type-to-generate', 102 group.add_option('--profile-type-to-generate',
103 dest='profile_type_to_generate', 103 dest='profile_type_to_generate',
104 default=None, 104 default=None,
105 help='Type of profile to generate. ' 105 help='Type of profile to generate. '
106 'Supported values: %s' % legal_profile_creators) 106 'Supported values: %s' % legal_profile_creators)
107 parser.add_option_group(group) 107 parser.add_option_group(group)
108 108
109 109
110 def ProcessCommandLineArgs(parser, args): 110 def ProcessCommandLineArgs(parser, args):
111 user_story_runner.ProcessCommandLineArgs(parser, args) 111 user_story_runner.ProcessCommandLineArgs(parser, args)
112 112
113 if not args.profile_type_to_generate: 113 if not args.profile_type_to_generate:
114 parser.error("Must specify --profile-type-to-generate option.") 114 parser.error("Must specify --profile-type-to-generate option.")
115 115
116 profile_creators = _DiscoverProfileCreatorClasses().keys() 116 profile_extenders = _DiscoverProfileExtenderClasses().keys()
117 if args.profile_type_to_generate not in profile_creators: 117 if args.profile_type_to_generate not in profile_extenders:
118 legal_profile_creators = '|'.join(profile_creators) 118 legal_profile_creators = '|'.join(profile_extenders)
119 parser.error("Invalid profile type, legal values are: %s." % 119 parser.error("Invalid profile type, legal values are: %s." %
120 legal_profile_creators) 120 legal_profile_creators)
121 121
122 if not args.browser_type: 122 if not args.browser_type:
123 parser.error("Must specify --browser option.") 123 parser.error("Must specify --browser option.")
124 124
125 if not args.output_dir: 125 if not args.output_dir:
126 parser.error("Must specify --output-dir option.") 126 parser.error("Must specify --output-dir option.")
127 127
128 if args.browser_options.dont_override_profile: 128 if args.browser_options.dont_override_profile:
129 parser.error("Can't use existing profile when generating profile.") 129 parser.error("Can't use existing profile when generating profile.")
130 130
131 131
132 def Main(): 132 def Main():
133 options = browser_options.BrowserFinderOptions() 133 options = browser_options.BrowserFinderOptions()
134 parser = options.CreateParser( 134 parser = options.CreateParser(
135 "%%prog <--profile-type-to-generate=...> <--browser=...> <--output-dir>") 135 "%%prog <--profile-type-to-generate=...> <--browser=...> <--output-dir>")
136 AddCommandLineArgs(parser) 136 AddCommandLineArgs(parser)
137 _, _ = parser.parse_args() 137 _, _ = parser.parse_args()
138 ProcessCommandLineArgs(parser, options) 138 ProcessCommandLineArgs(parser, options)
139 139
140 # Generate profile. 140 # Generate profile.
141 profile_creators = _DiscoverProfileCreatorClasses() 141 profile_extenders = _DiscoverProfileExtenderClasses()
142 profile_creator_class = profile_creators[options.profile_type_to_generate] 142 profile_extender_class = profile_extenders[options.profile_type_to_generate]
143 return GenerateProfiles(profile_creator_class, 143 return GenerateProfiles(profile_extender_class,
144 options.profile_type_to_generate, options) 144 options.profile_type_to_generate, options)
OLDNEW
« no previous file with comments | « tools/perf/profile_creators/profile_extender.py ('k') | tools/perf/profile_creators/small_profile_creator.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698