blob: 7c8eeb31eba8f7ab4be1f9bcfce76c5a87897eb3 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
export class MobileThrottlingSelector {
/**
* @param {function(!Array<!MobileThrottling.MobileThrottlingConditionsGroup>):!MobileThrottling.ConditionsList} populateCallback
* @param {function(number)} selectCallback
*/
constructor(populateCallback, selectCallback) {
this._populateCallback = populateCallback;
this._selectCallback = selectCallback;
MobileThrottling.throttlingManager().addEventListener(
MobileThrottling.ThrottlingManager.Events.RateChanged, this._conditionsChanged, this);
SDK.multitargetNetworkManager.addEventListener(
SDK.MultitargetNetworkManager.Events.ConditionsChanged, this._conditionsChanged, this);
/** @type {!MobileThrottling.ConditionsList} */
this._options = this._populateOptions();
this._conditionsChanged();
}
/**
* @param {!MobileThrottling.Conditions} conditions
*/
optionSelected(conditions) {
SDK.multitargetNetworkManager.setNetworkConditions(conditions.network);
MobileThrottling.throttlingManager().setCPUThrottlingRate(conditions.cpuThrottlingRate);
}
/**
* @return {!MobileThrottling.ConditionsList}
*/
_populateOptions() {
const disabledGroup = {title: Common.UIString('Disabled'), items: [MobileThrottling.NoThrottlingConditions]};
const presetsGroup = {title: Common.UIString('Presets'), items: MobileThrottling.mobilePresets};
const advancedGroup = {title: Common.UIString('Advanced'), items: MobileThrottling.advancedMobilePresets};
return this._populateCallback([disabledGroup, presetsGroup, advancedGroup]);
}
_conditionsChanged() {
const networkConditions = SDK.multitargetNetworkManager.networkConditions();
const cpuThrottlingRate = MobileThrottling.throttlingManager().cpuThrottlingRate();
for (let index = 0; index < this._options.length; ++index) {
const option = this._options[index];
if (option && option.network === networkConditions && option.cpuThrottlingRate === cpuThrottlingRate) {
this._selectCallback(index);
return;
}
}
this._selectCallback(this._options.indexOf(MobileThrottling.CustomConditions));
}
}
/* Legacy exported object */
self.MobileThrottling = self.MobileThrottling || {};
/* Legacy exported object */
MobileThrottling = MobileThrottling || {};
/** @constructor */
MobileThrottling.MobileThrottlingSelector = MobileThrottlingSelector;