WebKit Bugzilla
Attachment 358307 Details for
Bug 193132
: Refactor 'platforms' table to contain group information.
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-193132-20190103213221.patch (text/plain), 25.31 KB, created by
dewei_zhu
on 2019-01-03 21:32:22 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
dewei_zhu
Created:
2019-01-03 21:32:22 PST
Size:
25.31 KB
patch
obsolete
>Subversion Revision: 239567 >diff --git a/Websites/perf.webkit.org/ChangeLog b/Websites/perf.webkit.org/ChangeLog >index 0936909761a24f17dcf3aa9b7a42ee14d24be505..18f6b37916fbac3ca6e2ed4d37fae5c60f44cfac 100644 >--- a/Websites/perf.webkit.org/ChangeLog >+++ b/Websites/perf.webkit.org/ChangeLog >@@ -1,3 +1,52 @@ >+2019-01-03 Dewei Zhu <dewei_zhu@apple.com> >+ >+ Refactor 'platforms' table to contain group infomation. >+ https://bugs.webkit.org/show_bug.cgi?id=193132 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Group 'platforms' so that bisecting can use commit sets from other platforms which are in the same platform group. >+ This will help to enhance the bisecting capability to higher granularity. >+ Added admin page to manage platform groups. >+ Updated platform admin page to allow update platform group. >+ SQL query to update existing database: >+ ''' >+ BEGIN; >+ CREATE TABLE platform_groups ( >+ platformgroup_id serial PRIMARY KEY, >+ platformgroup_name varchar(64) NOT NULL, >+ CONSTRAINT platform_group_name_must_be_unique UNIQUE (platformgroup_name)); >+ >+ ALTER TABLE platforms ADD COLUMN platform_group integer REFERENCES platform_groups DEFAULT NULL; >+ END; >+ ''' >+ >+ * init-database.sql: Added 'platform_group' column to 'platforms' table. >+ Added 'platform_groups' table. >+ * public/admin/platform-groups.php: Added a page to manage platform groups. >+ * public/admin/platforms.php: Added support to update platform group in admin page. >+ * public/include/admin-header.php: Added link to page that maneges platform groups. >+ * public/include/manifest-generator.php: Added 'platformGroup' in manifest. >+ * public/v3/index.html: Included 'platform-groups.js'. >+ * public/v3/models/analysis-task.js: >+ (AnalysisTask.prototype.async.commitSetsFromTestGroupsAndMeasurementSet): >+ Included measurement commit sets from other platforms in the same platform group. >+ (AnalysisTask.prototype._commitSetForOtherPlatformsInSameGroup): >+ Helper function to find measurment commit set for other platforms in same platform group. >+ * public/v3/models/manifest.js: Added step to build 'PlatformGroup' instances. >+ * public/v3/models/platform-group.js: Added 'PlatformGroup' to represent entries in 'platform_groups' table. >+ (PlatformGroup): >+ (PlatformGroup.prototype.addPlatform): >+ (PlatformGroup.prototype.platforms): >+ * public/v3/models/platform.js: Added itself to 'PlatformGroup' in constructor if it belongs >+ to a group. >+ (Platform.prototype.group): Return the platform group of current platform. >+ * public/v3/models/time-series.js: Added helper function to show view between a given time range. >+ (TimeSeries.prototype.viewBetweenTime): >+ * server-tests/api-manifest-tests.js: Updated unit test to also test platform group initialization. >+ * tools/js/database.js: Added prefix for 'platform_groups'. >+ * tools/js/v3-models.js: Added import for platform group. >+ > 2018-12-14 Dewei Zhu <dewei_zhu@apple.com> > > Extend commits table to contain testability information. >diff --git a/Websites/perf.webkit.org/init-database.sql b/Websites/perf.webkit.org/init-database.sql >index c7b7d60bc9c1b10046807769e45a3725fba0447b..fc504a3b2a7c07003499ae344e72dc0e24489c6d 100644 >--- a/Websites/perf.webkit.org/init-database.sql >+++ b/Websites/perf.webkit.org/init-database.sql >@@ -12,6 +12,7 @@ DROP TABLE IF EXISTS build_slaves CASCADE; > DROP TABLE IF EXISTS builders CASCADE; > DROP TABLE IF EXISTS repositories CASCADE; > DROP TABLE IF EXISTS platforms CASCADE; >+DROP TABLE IF EXISTS platform_groups CASCADE; > DROP TABLE IF EXISTS test_metrics CASCADE; > DROP TABLE IF EXISTS tests CASCADE; > DROP TABLE IF EXISTS reports CASCADE; >@@ -34,9 +35,15 @@ DROP TABLE IF EXISTS build_requests CASCADE; > DROP TYPE IF EXISTS build_request_status_type CASCADE; > > >+CREATE TABLE platform_groups ( >+ platformgroup_id serial PRIMARY KEY, >+ platformgroup_name varchar(64) NOT NULL, >+ CONSTRAINT platform_group_name_must_be_unique UNIQUE (platformgroup_name)); >+ > CREATE TABLE platforms ( > platform_id serial PRIMARY KEY, > platform_name varchar(64) NOT NULL, >+ platform_group integer REFERENCES platform_groups DEFAULT NULL, > platform_hidden boolean NOT NULL DEFAULT FALSE); > > CREATE TABLE repositories ( >diff --git a/Websites/perf.webkit.org/public/admin/platform-groups.php b/Websites/perf.webkit.org/public/admin/platform-groups.php >new file mode 100644 >index 0000000000000000000000000000000000000000..e4135d2cc30d4ce5468070d37599668f58151210 >--- /dev/null >+++ b/Websites/perf.webkit.org/public/admin/platform-groups.php >@@ -0,0 +1,27 @@ >+<?php >+ >+require('../include/admin-header.php'); >+ >+if ($db) { >+ if ($action == 'add') { >+ if ($db->insert_row('platform_groups', 'platformgroup', array('name' => $_POST['name']))) { >+ notice('Inserted the new platform group'); >+ regenerate_manifest(); >+ } else >+ notice('Could not add the platform group.'); >+ } else if ($action == 'update') { >+ if (update_field('platform_groups', 'platformgroup', 'name')) >+ regenerate_manifest(); >+ else >+ notice('Invalid parameters.'); >+ } >+ >+ $page = new AdministrativePage($db, 'platform_groups', 'platformgroup', array('name' => array('size' => 50, 'editing_mode' => 'string'))); >+ >+ $page->render_table('name'); >+ $page->render_form_to_add(); >+} >+ >+require('../include/admin-footer.php'); >+ >+?> >diff --git a/Websites/perf.webkit.org/public/admin/platforms.php b/Websites/perf.webkit.org/public/admin/platforms.php >index 5c0b9bfaa03bf94bdfadb7ea57155b94a6bf1b76..7b5c20163e150ad643c7e50d82e7840c850a3f4b 100644 >--- a/Websites/perf.webkit.org/public/admin/platforms.php >+++ b/Websites/perf.webkit.org/public/admin/platforms.php >@@ -59,7 +59,8 @@ function merge_platforms($platform_to_merge, $destination_platform) { > if ($db) { > if ($action == 'update') { > if (update_field('platforms', 'platform', 'name') >- || update_field('platforms', 'platform', 'hidden')) >+ || update_field('platforms', 'platform', 'hidden') >+ || update_field('platforms', 'platform', 'group')) > regenerate_manifest(); > else > notice('Invalid parameters.'); >@@ -94,9 +95,37 @@ END; > return array($content); > } > >+ $platform_group_options = $db->fetch_table('platform_groups', 'platformgroup_name'); >+ array_push($platform_group_options, array('platformgroup_id' => NULL, 'platformgroup_name' => '<No Group>')); >+ function platform_group_list($platform_row) >+ { >+ global $platform_group_options; >+ $id = $platform_row['platform_id']; >+ $platform_group_id = $platform_row['platform_group']; >+ $content = <<< END >+<form method="POST"><input type="hidden" name="id" value="$id"> >+<select name="group"> >+END; >+ >+ foreach ($platform_group_options as &$group_option) { >+ $selection_string = $group_option['platformgroup_id'] == $platform_group_id ? " selected" : ""; >+ $content .= <<< END >+<option value="{$group_option['platformgroup_id']}"{$selection_string}>{$group_option['platformgroup_name']}</option> >+END; >+ } >+ >+ $content .= <<< END >+</select> >+<button type="submit" name="action" value="update">Update</button> >+</form> >+END; >+ return array($content); >+ } >+ > $page = new AdministrativePage($db, 'platforms', 'platform', array( > 'name' => array('editing_mode' => 'string'), > 'hidden' => array('editing_mode' => 'boolean'), >+ 'platform group' => array('custom' => function ($platform_row) { return platform_group_list($platform_row); }), > 'merge into' => array('custom' => function ($platform_row) { return merge_list($platform_row); }), > )); > >diff --git a/Websites/perf.webkit.org/public/include/admin-header.php b/Websites/perf.webkit.org/public/include/admin-header.php >index c4d37bf0d4b164d0c6c2defae23fbd31f458248a..58a78ea74b264015ca918efeb49b11207b18cd9f 100644 >--- a/Websites/perf.webkit.org/public/include/admin-header.php >+++ b/Websites/perf.webkit.org/public/include/admin-header.php >@@ -15,6 +15,7 @@ require_once('manifest-generator.php'); > <h1><a href="/">WebKit Perf Monitor</a></h1> > <ul> > <li><a href="/admin/platforms">Platforms</a></li> >+ <li><a href="/admin/platform-groups">Platform Groups</a></li> > <li><a href="/admin/tests">Tests</a></li> > <li><a href="/admin/aggregators">Aggregators</a></li> > <li><a href="/admin/builders">Builders</a></li> >diff --git a/Websites/perf.webkit.org/public/include/manifest-generator.php b/Websites/perf.webkit.org/public/include/manifest-generator.php >index 446fae7d8b319437990b7d30558a0bb53dc2dc2d..60237f32e6f1454d11856f12eae3a80741d5f55b 100644 >--- a/Websites/perf.webkit.org/public/include/manifest-generator.php >+++ b/Websites/perf.webkit.org/public/include/manifest-generator.php >@@ -33,12 +33,14 @@ class ManifestGenerator { > $platforms = (object)$this->platforms($platform_table, false); > $dashboard = (object)$this->platforms($platform_table, true); > $repositories = (object)$this->repositories($repositories_table, $repositories_with_commit); >+ $platform_groups = (object)$this->platform_groups(); > > $this->manifest = array( > 'siteTitle' => config('siteTitle', 'Performance Dashboard'), > 'tests' => &$tests, > 'metrics' => &$metrics, > 'all' => &$platforms, >+ 'platformGroups' => &$platform_groups, > 'dashboard' => &$dashboard, > 'repositories' => &$repositories, > 'builders' => (object)$this->builders(), >@@ -115,7 +117,6 @@ class ManifestGenerator { > array_push($current_platform_entry['last_modified'], intval($metric_row['last_modified'])); > } > } >- $configurations = array(); > > $platforms = array(); > if ($platform_table) { >@@ -127,6 +128,7 @@ class ManifestGenerator { > $platforms[$id] = array( > 'name' => $platform_row['platform_name'], > 'metrics' => $platform_metrics[$id]['metrics'], >+ 'group' => $platform_row['platform_group'], > 'lastModified' => $platform_metrics[$id]['last_modified']); > } > } >@@ -134,6 +136,16 @@ class ManifestGenerator { > return $platforms; > } > >+ private function platform_groups() { >+ $platform_groups_table = $this->db->fetch_table('platform_groups'); >+ if (!$platform_groups_table) >+ return array(); >+ $platform_groups = array(); >+ foreach ($platform_groups_table as &$row) >+ $platform_groups[$row['platformgroup_id']] = array('name' => $row['platformgroup_name']); >+ return $platform_groups; >+ } >+ > private function repositories($repositories_table, $repositories_with_commit) { > $repositories = array(); > if (!$repositories_table) >diff --git a/Websites/perf.webkit.org/public/v3/index.html b/Websites/perf.webkit.org/public/v3/index.html >index e731077f6ebe00407adb068c7ffcbf61ea66cdcc..f531003ed5e673509e437e4811bb09f8ac3372d3 100644 >--- a/Websites/perf.webkit.org/public/v3/index.html >+++ b/Websites/perf.webkit.org/public/v3/index.html >@@ -56,6 +56,7 @@ Run tools/bundle-v3-scripts to speed up the load time for production.`); > <script src="models/data-model.js"></script> > <script src="models/commit-log.js"></script> > <script src="models/platform.js"></script> >+ <script src="models/platform-group.js"></script> > <script src="models/builder.js"></script> > <script src="models/test.js"></script> > <script src="models/metric.js"></script> >diff --git a/Websites/perf.webkit.org/public/v3/models/analysis-task.js b/Websites/perf.webkit.org/public/v3/models/analysis-task.js >index dbb7c2e090a6607c530f9dd89987ab345223280d..3009a6e0a0241b1330e4f89a3873ae89b3a3b7b3 100644 >--- a/Websites/perf.webkit.org/public/v3/models/analysis-task.js >+++ b/Websites/perf.webkit.org/public/v3/models/analysis-task.js >@@ -169,7 +169,6 @@ class AnalysisTask extends LabeledObject { > > async commitSetsFromTestGroupsAndMeasurementSet() > { >- > const platform = this.platform(); > const metric = this.metric(); > if (!platform || !metric) >@@ -178,6 +177,7 @@ class AnalysisTask extends LabeledObject { > const lastModified = platform.lastModified(metric); > const measurementSet = MeasurementSet.findSet(platform.id(), metric.id(), lastModified); > const fetchingMeasurementSetPromise = measurementSet.fetchBetween(this.startTime(), this.endTime()); >+ const fetchingMeasurementSetForOtherPlatformInSameGroupPromises = this._commitSetForOtherPlatformsInSameGroup(); > > const allTestGroupsInTask = await TestGroup.fetchForTask(this.id()); > const allCommitSetsInTask = new Set; >@@ -189,8 +189,27 @@ class AnalysisTask extends LabeledObject { > const series = measurementSet.fetchedTimeSeries('current', false, false); > const startPoint = series.findById(this.startMeasurementId()); > const endPoint = series.findById(this.endMeasurementId()); >+ const commitSetList = Array.from(series.viewBetweenPoints(startPoint, endPoint)).map((point) => point.commitSet()); >+ const arrayOfCommitSetList = await Promise.all(fetchingMeasurementSetForOtherPlatformInSameGroupPromises); >+ >+ return [...commitSetList.concat(...arrayOfCommitSetList), ...allCommitSetsInTask]; >+ } > >- return Array.from(series.viewBetweenPoints(startPoint, endPoint)).map((point) => point.commitSet()); >+ _commitSetForOtherPlatformsInSameGroup() >+ { >+ const metric = this.metric(); >+ if (!metric || !this.platform() || !this.platform().group()) >+ return []; >+ const otherPlatforms = this.platform().group().platforms().filter((platform) => platform != this.platform()); >+ return otherPlatforms.map(async (platform) => { >+ const lastModified = platform.lastModified(metric); >+ const measurementSet = MeasurementSet.findSet(platform.id(), metric.id(), lastModified); >+ await measurementSet.fetchBetween(this.startTime(), this.endTime()); >+ const series = measurementSet.fetchedTimeSeries('current', false, false); >+ const timeSeriesView = series.viewBetweenTime(this.startTime(), this.endTime()); >+ >+ return timeSeriesView ? Array.from(timeSeriesView).map((point) => point.commitSet()) : []; >+ }); > } > > static categories() >diff --git a/Websites/perf.webkit.org/public/v3/models/manifest.js b/Websites/perf.webkit.org/public/v3/models/manifest.js >index 09aea5c78c8425b0f897846e37b9d48b8fc80ab8..d31e94f43aa2f70ee60e83a2680bd1caf2d6015a 100644 >--- a/Websites/perf.webkit.org/public/v3/models/manifest.js >+++ b/Websites/perf.webkit.org/public/v3/models/manifest.js >@@ -10,6 +10,7 @@ class Manifest { > CommitLog.clearStaticMap(); > Metric.clearStaticMap(); > Platform.clearStaticMap(); >+ PlatformGroup.clearStaticMap(); > Repository.clearStaticMap(); > CommitSet.clearStaticMap(); > Test.clearStaticMap(); >@@ -50,12 +51,14 @@ class Manifest { > raw.test = Test.findById(raw.test); > }); > >+ buildObjectsFromIdMap(rawResponse.platformGroups, PlatformGroup); > buildObjectsFromIdMap(rawResponse.all, Platform, (raw) => { > raw.lastModifiedByMetric = {}; > raw.lastModified.forEach((lastModified, index) => { > raw.lastModifiedByMetric[raw.metrics[index]] = lastModified; > }); > raw.metrics = raw.metrics.map((id) => { return Metric.findById(id); }); >+ raw.group = PlatformGroup.findById(raw.group); > }); > buildObjectsFromIdMap(rawResponse.builders, Builder); > buildObjectsFromIdMap(rawResponse.repositories, Repository); >diff --git a/Websites/perf.webkit.org/public/v3/models/platform-group.js b/Websites/perf.webkit.org/public/v3/models/platform-group.js >new file mode 100644 >index 0000000000000000000000000000000000000000..7ae9d630211314913a7e2240b9ac1fb86ba6cf61 >--- /dev/null >+++ b/Websites/perf.webkit.org/public/v3/models/platform-group.js >@@ -0,0 +1,15 @@ >+'use strict'; >+ >+class PlatformGroup extends LabeledObject { >+ constructor(id, object) >+ { >+ super(id, object); >+ this.ensureNamedStaticMap('name')[object.name] = this; >+ this._platforms = new Set; >+ } >+ addPlatform(platform) {this._platforms.add(platform);} >+ platforms() { return Array.from(this._platforms); } >+} >+ >+if (typeof module != 'undefined') >+ module.exports.PlatformGroup = PlatformGroup; >diff --git a/Websites/perf.webkit.org/public/v3/models/platform.js b/Websites/perf.webkit.org/public/v3/models/platform.js >index c54b65a1fab543916d6b9d3900af68aa17fcb882..f01dc25fad6b9340ff13a591eb81e7d5c25fdc2f 100644 >--- a/Websites/perf.webkit.org/public/v3/models/platform.js >+++ b/Websites/perf.webkit.org/public/v3/models/platform.js >@@ -12,6 +12,10 @@ class Platform extends LabeledObject { > > for (var metric of this._metrics) > metric.addPlatform(this); >+ >+ this._group = object.group; >+ if (this._group) >+ this._group.addPlatform(this); > } > > static findByName(name) >@@ -42,6 +46,8 @@ class Platform extends LabeledObject { > console.assert(metric instanceof Metric); > return this._lastModifiedByMetric[metric.id()]; > } >+ >+ group() { return this._group; } > } > > if (typeof module != 'undefined') >diff --git a/Websites/perf.webkit.org/public/v3/models/time-series.js b/Websites/perf.webkit.org/public/v3/models/time-series.js >index 2f76d53c9843cc51388ed9e23d2b7d49aae89050..93889a6c3aff72b542e639b56b4c6d6146c69d6f 100644 >--- a/Websites/perf.webkit.org/public/v3/models/time-series.js >+++ b/Websites/perf.webkit.org/public/v3/models/time-series.js >@@ -71,6 +71,19 @@ class TimeSeries { > findById(id) { return this._data.find(function (point) { return point.id == id }); } > > findPointAfterTime(time) { return this._data.find(function (point) { return point.time >= time; }); } >+ viewBetweenTime(startTime, endTime) >+ { >+ const startPoint = this.findPointAfterTime(startTime); >+ if (!startPoint) >+ return null; >+ let endPoint = this.findPointAfterTime(endTime); >+ if (!endPoint) >+ endPoint = this.lastPoint(); >+ else if (endPoint.time > endTime) >+ endPoint = this.previousPoint(endPoint); >+ >+ return this.viewBetweenPoints(startPoint, endPoint); >+ } > > viewBetweenPoints(firstPoint, lastPoint) > { >diff --git a/Websites/perf.webkit.org/server-tests/api-manifest-tests.js b/Websites/perf.webkit.org/server-tests/api-manifest-tests.js >index 275a429794adc3b4cea0051b16e1fbc5ef723dd1..129c5c423cdc68926ab129b7d898763eb6998232 100644 >--- a/Websites/perf.webkit.org/server-tests/api-manifest-tests.js >+++ b/Websites/perf.webkit.org/server-tests/api-manifest-tests.js >@@ -14,7 +14,7 @@ describe('/api/manifest', function () { > it("should generate an empty manifest when database is empty", () => { > return TestServer.remoteAPI().getJSON('/api/manifest').then((manifest) => { > assert.deepEqual(Object.keys(manifest).sort(), ['all', 'bugTrackers', 'builders', 'dashboard', 'dashboards', >- 'fileUploadSizeLimit', 'metrics', 'repositories', 'siteTitle', 'status', 'summaryPages', 'testAgeToleranceInHours', 'tests', 'triggerables']); >+ 'fileUploadSizeLimit', 'metrics', 'platformGroups', 'repositories', 'siteTitle', 'status', 'summaryPages', 'testAgeToleranceInHours', 'tests', 'triggerables']); > > assert.deepStrictEqual(manifest, { > siteTitle: TestServer.testConfig().siteTitle, >@@ -25,6 +25,7 @@ describe('/api/manifest', function () { > dashboards: {}, > fileUploadSizeLimit: 2097152, // 2MB during testing. > metrics: {}, >+ platformGroups: {}, > repositories: {}, > testAgeToleranceInHours: null, > tests: {}, >@@ -185,8 +186,10 @@ describe('/api/manifest', function () { > db.insert('test_metrics', {id: 7, test: 2, name: 'Malloc', aggregator: 200}), > db.insert('test_metrics', {id: 8, test: 3, name: 'Time'}), > db.insert('test_metrics', {id: 9, test: 4, name: 'Time'}), >- db.insert('platforms', {id: 23, name: 'iOS 9 iPhone 5s'}), >- db.insert('platforms', {id: 46, name: 'Trunk Mavericks'}), >+ db.insert('platform_groups', {id: 1, name: 'ios'}), >+ db.insert('platform_groups', {id: 2, name: 'mac'}), >+ db.insert('platforms', {id: 23, name: 'iOS 9 iPhone 5s', group: 1}), >+ db.insert('platforms', {id: 46, name: 'Trunk Mavericks', group: 2}), > db.insert('test_configurations', {id: 101, metric: 5, platform: 46, type: 'current'}), > db.insert('test_configurations', {id: 102, metric: 6, platform: 46, type: 'current'}), > db.insert('test_configurations', {id: 103, metric: 7, platform: 46, type: 'current'}), >@@ -214,16 +217,18 @@ describe('/api/manifest', function () { > > let manifest = Manifest._didFetchManifest(content); > >- let someTest = Test.findById(1); >- let someTestMetric = Metric.findById(5); >- let someOtherTest = Test.findById(2); >- let someOtherTestTime = Metric.findById(6); >- let someOtherTestMalloc = Metric.findById(7); >- let childTest = Test.findById(3); >- let childTestMetric = Metric.findById(8); >- let grandChildTest = Test.findById(4); >- let ios9iphone5s = Platform.findById(23); >- let mavericks = Platform.findById(46); >+ const someTest = Test.findById(1); >+ const someTestMetric = Metric.findById(5); >+ const someOtherTest = Test.findById(2); >+ const someOtherTestTime = Metric.findById(6); >+ const someOtherTestMalloc = Metric.findById(7); >+ const childTest = Test.findById(3); >+ const childTestMetric = Metric.findById(8); >+ const grandChildTest = Test.findById(4); >+ const ios9iphone5s = Platform.findById(23); >+ const mavericks = Platform.findById(46); >+ const iosGroup = PlatformGroup.findById(1); >+ const macGroup = PlatformGroup.findById(2); > assert(someTest); > assert(someTestMetric); > assert(someOtherTest); >@@ -234,6 +239,8 @@ describe('/api/manifest', function () { > assert(grandChildTest); > assert(ios9iphone5s); > assert(mavericks); >+ assert(iosGroup); >+ assert(macGroup); > > assert.equal(mavericks.name(), 'Trunk Mavericks'); > assert(mavericks.hasTest(someTest)); >@@ -244,6 +251,7 @@ describe('/api/manifest', function () { > assert(mavericks.hasMetric(someOtherTestTime)); > assert(mavericks.hasMetric(someOtherTestMalloc)); > assert(mavericks.hasMetric(childTestMetric)); >+ assert.equal(mavericks.group(), macGroup); > > assert.equal(ios9iphone5s.name(), 'iOS 9 iPhone 5s'); > assert(ios9iphone5s.hasTest(someTest)); >@@ -254,6 +262,15 @@ describe('/api/manifest', function () { > assert(!ios9iphone5s.hasMetric(someOtherTestTime)); > assert(!ios9iphone5s.hasMetric(someOtherTestMalloc)); > assert(!ios9iphone5s.hasMetric(childTestMetric)); >+ assert.equal(ios9iphone5s.group(), iosGroup); >+ >+ const macPlatforms = macGroup.platforms(); >+ assert.equal(macPlatforms.length, 1); >+ assert.equal(macPlatforms[0], mavericks); >+ >+ const iosPlatforms = iosGroup.platforms(); >+ assert.equal(iosPlatforms.length, 1); >+ assert.equal(iosPlatforms[0], ios9iphone5s); > > assert.equal(someTest.name(), 'SomeTest'); > assert.equal(someTest.parentTest(), null); >diff --git a/Websites/perf.webkit.org/tools/js/database.js b/Websites/perf.webkit.org/tools/js/database.js >index ee8d4ffe643651cfecfd11bfc648885d8a422fa5..0f36f3699b7cd78360ca117cfe0dafd6dfdc75b9 100644 >--- a/Websites/perf.webkit.org/tools/js/database.js >+++ b/Websites/perf.webkit.org/tools/js/database.js >@@ -148,6 +148,7 @@ const tableToPrefixMap = { > 'triggerable_repository_groups': 'repositorygroup', > 'triggerable_repositories': 'trigrepo', > 'platforms': 'platform', >+ 'platform_groups': 'platformgroup', > 'reports': 'report', > 'repositories': 'repository', > 'commit_sets': 'commitset', >diff --git a/Websites/perf.webkit.org/tools/js/v3-models.js b/Websites/perf.webkit.org/tools/js/v3-models.js >index f208e848f0563350c3acb551ff8982a3c8ff4280..6a11dbc67ff635622a38e771894e9285a3757707 100644 >--- a/Websites/perf.webkit.org/tools/js/v3-models.js >+++ b/Websites/perf.webkit.org/tools/js/v3-models.js >@@ -24,6 +24,7 @@ importFromV3('models/measurement-cluster.js', 'MeasurementCluster'); > importFromV3('models/measurement-set.js', 'MeasurementSet'); > importFromV3('models/metric.js', 'Metric'); > importFromV3('models/platform.js', 'Platform'); >+importFromV3('models/platform-group.js', 'PlatformGroup'); > importFromV3('models/repository.js', 'Repository'); > importFromV3('models/commit-set.js', 'MeasurementCommitSet'); > importFromV3('models/commit-set.js', 'CommitSet');
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 193132
:
358307
|
358308