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

Side by Side Diff: chrome/test/functional/media_test_matrix.py

Issue 6673078: Initial checkin of media test matrix class, which will be used for media perf test later. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Updates based on CR comments Created 9 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 #!/usr/bin/python
2
3 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file.
6
7 import csv
8 import os
9 import random
10
11 NOT_AVAILABLE_STRING = 'not available'
12 MAX_VIDEO_INDEX = 15
13
14
15 class MediaTestMatrix:
16 """This class reads video test matrix file and stores them.
17
18 Video test matrix contains different video titles as column and different
19 video codec (such as "webm" as columns. The matrix entry contains video
20 specification such as "320x240 50 fps VP8 / no audio 1 MBit/s PSNR 36.70"
21 or "not available". It also provides methods to generate information based
22 on the client's needs. For example, "video" tag or "audio" tag is returned
23 based on what kinds of media it is. This matrix is for managing different
24 kinds of media files in media testing.
25 """
26 # Video extensions such as "webm".
27 __exts = []
28 # Video specification dictionary or video descriptions.
29 # The key is extentions.
30 __specs = {}
31 # Video titles such as "bear".
32 __video_titles = []
33
34 def ReadData(self, csv_file):
35 """Reads CSV file and stores in list specs and extensions.
36
37 CSV file should have the following format:
38 "ext","title1","title2",....
39 "0.webm", "description1","descrption2", "not available" (when it is not
40 available).
41
42 Video files are stored less than and equal to 15th row.
43 Audio files are stored more then 15th row.
dennis_jeffrey 2011/03/18 17:47:50 "more then" --> "more than"
imasaki1 2011/03/18 21:54:25 Removed since we use video/audio tag.
44 Args:
dennis_jeffrey 2011/03/18 17:47:50 Put a blank line right before the "Args:" line.
imasaki1 2011/03/18 21:54:25 Done.
45 csv_file : CSV file name contains video matrix information described
46 above.
dennis_jeffrey 2011/03/18 17:47:50 Since this function raises csv.Error in line 68 be
imasaki1 2011/03/18 21:54:25 Done.
47 """
48 # Clean up all data.
49 self.__exts = []
50 self.__specs = {}
51 self.__video_titles = []
52 file = open(csv_file, 'rb')
53 reader = csv.reader(file)
54 for counter, row in enumerate(reader):
55 if counter == 0:
56 # First row is comment
57 pass
58 if counter == 1:
dennis_jeffrey 2011/03/18 17:47:50 "if" --> "elif"
imasaki1 2011/03/18 21:54:25 Done.
59 # Second row is for header (video titles).
60 for title in row[1:]:
61 self.__video_titles.append(title)
62 self.__specs[title] = []
63 else:
64 # Error checking is done here based on the number of titles
65 if len(self.__video_titles) != len(row) - 1:
66 print "Row %d should have %d columns but have %d columns" % (counter,
dennis_jeffrey 2011/03/18 17:47:50 "but have" --> "but has"
imasaki1 2011/03/18 21:54:25 Done.
67 len(self.__video_titles), len(row))
68 raise csv.Error
69 # First column should contain extension.
70 self.__exts.append(row[0])
71 for i in range(len(row)-1):
72 self.__specs[self.__video_titles[i]].append(row[i + 1])
73 file.close()
74
75 def __GenerateMediaInfo(self, sub_type, name, media_test_matrix_home_url):
76 """Generate media information from matrix generated by CSV file.
77
78 Args:
79 sub_type: index of the extensions (rows in the CSV file).
80 name: the name of the video file (column name in the CSV file).
81 media_test_matrix_home_url: url of the matrix home that used
82 to generate link.
83
84 Returns:
85 a tuple of (info, url, link, tag, is_video, nickname).
86 info: description of the video (an entry in the matrix).
87 url: URL of the video or audio.
88 link: href tag for video or audio.
89 is_video: True if the file is video; False otherwise.
90 tag: a tag string can be used to display video or audio.
dennis_jeffrey 2011/03/18 17:47:50 Put the line for "tag" above the line for "is_vide
imasaki1 2011/03/18 21:54:25 Done.
91 nickname: nickname of the video for presentation.
92 """
93 if name is "none":
dennis_jeffrey 2011/03/18 17:47:50 Use single quotes instead of double quotes here.
imasaki1 2011/03/18 21:54:25 Done.
94 return
95 cur_video = name
96 # All videos are placed up to the rows (below 15th row).
dennis_jeffrey 2011/03/18 17:47:50 # All videos are placed up to row MAX_VIDEO_INDEX.
imasaki1 2011/03/18 21:54:25 Removed since we are not using MAX_VIDEO_INDEX any
97 is_video = sub_type <= self.__GetMaxValue(True)
98 file = os.path.join(cur_video, cur_video + self.__exts[sub_type])
99 # Specs were generated from CSV file in readFile().
100 info = self.__specs[cur_video][sub_type]
101 url = media_test_matrix_home_url + file
102 link = '<b><a href="%s">%s</a>&nbsp;&nbsp;%s</b>' % (url, file, info)
103 type = ['audio', 'video'][is_video]
104 tag_attr = "id='v' controls autoplay playbackRate=1 loop valign=top"
dennis_jeffrey 2011/03/18 17:47:50 Please use single quotes to surround the outer str
imasaki1 2011/03/18 21:54:25 Done.
105 tag = "<%s %s src='%s'>" % (type, tag_attr, file)
dennis_jeffrey 2011/03/18 17:47:50 Same comment as line 104 above.
imasaki1 2011/03/18 21:54:25 Done.
106 nickname = cur_video + self.__exts[sub_type]
107 return (info, url, link, tag, is_video, nickname)
108
109 def __GetMaxValue(self, video_only):
110 """Get maximum index value of exts for video or audio.
111
112 Args:
113 video_only: True if the max value is for video.
114
115 Returns:
116 the max index value of exts for video or audio.
117 """
118 return [len(self.__exts) - 1, MAX_VIDEO_INDEX][video_only]
119
120 def GenerateRandomMediaInfo(self, number_of_tries=10, video_only=False,
121 video_matrix_home_url=''):
122 """Generate random video info that can be used for playing this media.
123
124 Args:
125 video_only: True if generate random video only.
126 media_test_matrix_home_url: url of the matrix home that used
127 to generate link.
128
129 Returns:
130 a list of a tuples (info, url, link, tag, is_video, nickname).
131 info: description of the video (an entry in the matrix).
132 url: URL of the video/audio.
133 link: href tag for video or audio.
134 tag: a tag string can be used to display video or audio.
135 is_video: True if the file is video; False otherwise.
136 nickname: nickname of the video for presentation.
137 """
138 # Try number_of_tries times to find avaialble video/audio.
dennis_jeffrey 2011/03/18 17:47:50 "avaialble" --> "available"
imasaki1 2011/03/18 21:54:25 Done.
139 for i in range(number_of_tries):
140 sub_type = random.randint(0, self.__GetMaxValue(video_only))
141 name = self.__video_titles[random.randint(0, len(self.__video_titles)-1)]
142 (info, url, link, tag,
143 is_video, nickname) = self.__GenerateMediaInfo(sub_type,
144 name,
145 video_matrix_home_url)
dennis_jeffrey 2011/03/18 17:47:50 I think lines 143-145 might look better like this:
imasaki1 2011/03/18 21:54:25 Changed as well as other places.
146 if NOT_AVAILABLE_STRING not in info:
147 return (info, url, link, tag, is_video, nickname)
dennis_jeffrey 2011/03/18 17:47:50 Remove one of the extra spaces after the word "ret
imasaki1 2011/03/18 21:54:25 Done.
148 # Gives up after that (very small chance)
dennis_jeffrey 2011/03/18 17:47:50 Put period at end of sentence.
imasaki1 2011/03/18 21:54:25 Done.
149 return None
150
151 def GenerateAllMediaInfos(self, video_only, media_matrix_home_url=''):
152 """Generate all video infos that can be used for playing this media.
153
154 Args:
155 video_only: True if generate random video only (not audio).
156
157 Returns:
158 a list of a tuples (info, url, link, tag, is_video, nickname).
159 info: description of the video (an entry in the matrix).
160 url: URL of the video/audio.
161 is_video: True if the file is video; False otherwise.
dennis_jeffrey 2011/03/18 17:47:50 What about the "link" and "tag" tuple items?
imasaki1 2011/03/18 21:54:25 Done.
162 nickname: nickname of the video for presentation (such as bear.webm).
163 """
164 video_infos = []
165
166 for i in range(0, len(self.__video_titles)-1):
167 name = self.__video_titles[i]
168 for sub_type in range(self.__GetMaxValue(video_only)):
169 (info, url, link, tag,
170 is_video, nickname) = self.__GenerateMediaInfo(sub_type,
171 name,
172 media_matrix_home_url)
dennis_jeffrey 2011/03/18 17:47:50 Similar comment as line 145 above.
imasaki1 2011/03/18 21:54:25 Done.
173 if NOT_AVAILABLE_STRING not in info:
174 video_infos.append([info, url, link, tag, is_video, nickname])
175 return video_infos
176
177 def GenerateAllMediaInfosInCompactForm(self, video_only,
178 media_matrix_home_url=''):
179 """Generate all media information in compact form.
180
181 Compact form contains only url, nickname and tag.
182
183 Args:
184 video_only: True if generate random video only.
185
186 Returns:
187 a list of a tuples (url, nickname, tag).
188 url: URL of the video/audio.
189 nickname: nickname of the video/audio for presentation
190 (such as bear.webm).
191 tag: HTML5 tag for the video/audio.
192 """
193 video_infos = []
194 for i in range(0, len(self.__video_titles)-1):
195 name = self.__video_titles[i]
196 for sub_type in range(self.__GetMaxValue(video_only)):
197 (info, url, link, tag,
198 is_video, nickname) = self.__GenerateMediaInfo(sub_type,
199 name,
200 media_matrix_home_url)
dennis_jeffrey 2011/03/18 17:47:50 Similar comment as line 145 above.
imasaki1 2011/03/18 21:54:25 Done.
201 tag = ['audio', 'video'][is_video]
202 if NOT_AVAILABLE_STRING not in info:
203 video_infos.append([url, nickname, tag])
204 return video_infos
205
dennis_jeffrey 2011/03/18 17:47:50 Functions GenerateAllMediaInfosInCompactForm, Gene
imasaki1 2011/03/18 21:54:25 I agree. I will add TODO
206 @staticmethod
207 def LookForMediaInfoByNickName(compact_list, target):
208 """Look for video by its nickname in the compact_list.
209
210 Args:
211 compact_list: a list generated by GenerateAllMediaInfosInCompactForm.
212 target: a target nickname string to look for.
213
214 Returns:
215 A tuple (info, url, link, tag, is_video, nickname) where nickname.
dennis_jeffrey 2011/03/18 17:47:50 I don't understand what you mean by "where nicknam
imasaki1 2011/03/18 21:54:25 Done.
216 url: URL of the video/audio.
217 tag: HTML5 tag for the video/audio.
218 nickname: nickname of the video/audio for presentation
219 (such as bear.webm).
dennis_jeffrey 2011/03/18 17:47:50 What about the "info", "link", and "is_video" tupl
imasaki1 2011/03/18 21:54:25 It is using compact form where we do not need thes
220 """
221 for url, nickname, tag in compact_list:
222 if target == nickname:
223 return (url, nickname, tag)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698