Skip to content

Commit 9284072

Browse files
author
Bastien Abadie
committed
frontend: Support suite & platform filters.
1 parent 77a5e47 commit 9284072

File tree

3 files changed

+71
-13
lines changed

3 files changed

+71
-13
lines changed

frontend/src/base.html

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,19 @@ <h2>
106106
<a href="#view=zero&third_party=on&cpp=on&js=on=java=on&rust=on">View the zero coverage report</a>
107107
&bull;
108108
<input type="text" name="revision" placeholder="Mercurial revision" value="{{revision}}"></input>
109+
&bull;
110+
<select name="platform">
111+
<option value="all">All platforms</option>
112+
{{#platforms}}
113+
<option {{#selected}}selected="selected"{{/selected}} value="{{name}}">{{name}}</option>
114+
{{/platforms}}
115+
</select>
116+
<select name="suite">
117+
<option value="all">All test suites</option>
118+
{{#suites}}
119+
<option {{#selected}}selected="selected"{{/selected}} value="{{name}}">{{name}}</option>
120+
{{/suites}}
121+
</select>
109122
</script>
110123

111124
<script id="menu_zero" type="x-tmpl-mustache">

frontend/src/common.js

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,9 @@ function cache_set(cache, key, value) {
5959
}
6060

6161
let path_coverage_cache = {};
62-
export async function get_path_coverage(path, changeset) {
63-
let data = cache_get(path_coverage_cache, `${changeset}_${path}`);
62+
export async function get_path_coverage(path, changeset, platform, suite) {
63+
let cache_key = `${changeset}_${path}_${platform}_${suite}`;
64+
let data = cache_get(path_coverage_cache, cache_key);
6465
if (data) {
6566
return data;
6667
}
@@ -69,33 +70,47 @@ export async function get_path_coverage(path, changeset) {
6970
if (changeset && changeset !== REV_LATEST) {
7071
params += `&changeset=${changeset}`;
7172
}
73+
if (platform && platform !== 'all') {
74+
params += `&platform=${platform}`;
75+
}
76+
if (suite && suite !== 'all') {
77+
params += `&suite=${suite}`;
78+
}
7279
let response = await fetch(`${COVERAGE_BACKEND_HOST}/v2/path?${params}`).catch(alert);
7380
if (response.status !== 200) {
7481
throw new Error(response.status + ' - ' + response.statusText);
7582
}
7683
data = await response.json();
7784

78-
cache_set(path_coverage_cache, `${changeset}_${path}`, data);
85+
cache_set(path_coverage_cache, cache_key, data);
7986

8087
return data;
8188
}
8289

8390
let history_cache = {};
84-
export async function get_history(path) {
91+
export async function get_history(path, platform, suite) {
8592
// Backend needs path without trailing /
8693
if (path && path.endsWith('/')) {
8794
path = path.substring(0, path.length-1);
8895
}
8996

90-
let data = cache_get(history_cache, path);
97+
let cache_key = `${path}_${platform}_${suite}`;
98+
let data = cache_get(history_cache, cache_key);
9199
if (data) {
92100
return data;
93101
}
94102

95-
let response = await fetch(`${COVERAGE_BACKEND_HOST}/v2/history?path=${path}`);
103+
let params = `path=${path}`;
104+
if (platform && platform !== 'all') {
105+
params += `&platform=${platform}`;
106+
}
107+
if (suite && suite !== 'all') {
108+
params += `&suite=${suite}`;
109+
}
110+
let response = await fetch(`${COVERAGE_BACKEND_HOST}/v2/history?${params}`);
96111
data = await response.json();
97112

98-
cache_set(history_cache, path, data);
113+
cache_set(history_cache, cache_key, data);
99114

100115
// Check data has coverage values
101116
// These values are missing when going above 2 levels right now
@@ -126,6 +141,22 @@ export async function get_zero_coverage_data() {
126141
}
127142

128143

144+
let filters_cache = {};
145+
export async function get_filters() {
146+
let data = cache_get(filters_cache, '');
147+
if (data) {
148+
return data;
149+
}
150+
151+
let response = await fetch(`${COVERAGE_BACKEND_HOST}/v2/filters`);
152+
data = await response.json();
153+
154+
cache_set(filters_cache, '', data);
155+
156+
return data;
157+
}
158+
159+
129160
// Option handling.
130161

131162
function is_enabled(opt) {

frontend/src/index.js

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {REV_LATEST, DOM_READY, main, show, hide, message, get_path_coverage, get_history, get_zero_coverage_data, build_navbar, render, get_source} from './common.js';
1+
import {REV_LATEST, DOM_READY, main, show, hide, message, get_path_coverage, get_history, get_zero_coverage_data, build_navbar, render, get_source, get_filters} from './common.js';
22
import {buildRoute, readRoute, updateRoute} from './route.js';
33
import {zero_coverage_display, zero_coverage_menu} from './zero_coverage_report.js';
44
import './style.css';
@@ -10,9 +10,21 @@ const VIEW_ZERO_COVERAGE = 'zero';
1010
const VIEW_BROWSER = 'browser';
1111

1212

13-
function browser_menu(revision) {
13+
function browser_menu(revision, filters, route) {
1414
let context = {
1515
revision,
16+
platforms: filters.platforms.map((p) => {
17+
return {
18+
'name': p,
19+
'selected': p == route.platform,
20+
}
21+
}),
22+
suites: filters.suites.map((s) => {
23+
return {
24+
'name': s,
25+
'selected': s == route.suite,
26+
}
27+
}),
1628
};
1729
render('menu_browser', context, 'menu');
1830
}
@@ -159,9 +171,10 @@ async function load() {
159171
}
160172

161173
try {
162-
var [coverage, history] = await Promise.all([
163-
get_path_coverage(route.path, route.revision),
164-
get_history(route.path),
174+
var [coverage, history, filters] = await Promise.all([
175+
get_path_coverage(route.path, route.revision, route.platform, route.suite),
176+
get_history(route.path, route.platform, route.suite),
177+
get_filters(),
165178
]);
166179
} catch (err) {
167180
console.warn('Failed to load coverage', err);
@@ -177,6 +190,7 @@ async function load() {
177190
route,
178191
coverage,
179192
history,
193+
filters,
180194
};
181195
}
182196

@@ -187,7 +201,7 @@ async function display(data) {
187201
await zero_coverage_display(data.zero_coverage, data.path);
188202

189203
} else if (data.view === VIEW_BROWSER) {
190-
browser_menu(data.revision);
204+
browser_menu(data.revision, data.filters, data.route);
191205

192206
if (data.coverage.type === 'directory') {
193207
hide('message');

0 commit comments

Comments
 (0)