Skip to content

Commit 2e7cf95

Browse files
author
Richard Neomy
committed
improves discarding tabs on startup
1 parent 94ae2b0 commit 2e7cf95

File tree

3 files changed

+29
-17
lines changed

3 files changed

+29
-17
lines changed

v3/worker/core/prefs.mjs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ const prefs = {
1616
'pinned': false, // pinned = true => do not discard if tab is pinned
1717
'startup-unpinned': false,
1818
'startup-pinned': false,
19-
'startup-release-pinned': false
19+
'startup-release-pinned': false,
20+
'startup-discarding-period': 10 // in seconds
2021
};
2122

2223
const storage = (prefs, type = 'managed') => new Promise(resolve => {

v3/worker/modes/number.mjs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ const number = {
1111
'online': false,
1212
'number': 0,
1313
'period': 0,
14-
'max.single.discard': Infinity
14+
'max.single.discard': Infinity,
15+
'ignore.meta.data': true
1516
}
1617
};
1718
const pluginFilters = {}; // this object adds custom filters to the number-based discarding
@@ -158,8 +159,9 @@ number.check = async (filterTabsFrom, ops = {}) => {
158159
}
159160
});
160161
}
161-
if (filterTabsFrom) {
162-
tbs = tbs.filter(tb => filterTabsFrom.some(t => t.id === tb.id));
162+
if (filterTabsFrom && filterTabsFrom.length) {
163+
const ids = filterTabsFrom.map(t => t.id);
164+
tbs = tbs.filter(tb => ids.includes(tb.id));
163165
}
164166

165167
// do not discard if number of tabs is smaller than required
@@ -176,14 +178,15 @@ number.check = async (filterTabsFrom, ops = {}) => {
176178
allFrames: true
177179
},
178180
files: ['/data/inject/meta.js']
179-
}).then(r => r.map(o => o.result), () => undefined);
181+
}).then(r => r.map(o => o.result), () => []);
180182
// remove protected tabs (e.g. addons.mozilla.org)
181-
if (!ms) {
182-
log('discarding aborted', 'metadata fetch error');
183-
icon(tb, 'metadata fetch error');
184-
continue;
183+
if (ms.length === 0) {
184+
if (ops['ignore.meta.data'] === true && tb.url.startsWith('http') !== true) {
185+
log('discarding aborted', 'metadata fetch error', tb.url);
186+
icon(tb, 'metadata fetch error');
187+
continue;
188+
}
185189
}
186-
187190
const meta = Object.assign({}, ...ms);
188191
log('number check', 'got meta data of tab');
189192
meta.forms = ms.some(o => o.forms);
@@ -201,7 +204,7 @@ number.check = async (filterTabsFrom, ops = {}) => {
201204
continue;
202205
}
203206
// is this tab loaded
204-
if (meta.ready !== true) {
207+
if (meta.ready !== true && ops['ignore.ready.state'] !== true) {
205208
log('discarding aborted', 'tab is not ready');
206209
continue;
207210
}

v3/worker/plugins/startup/core.mjs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,25 @@ const observe = () => {
2323
number.check(tbs.filter(t => t.status !== 'unloaded'), number.IGNORE);
2424
const rst = tbs.filter(t => t.status === 'unloaded');
2525
if (rst.length) {
26-
const observe = (id, info) => {
26+
const observe = (id, info, tab) => {
2727
if (info.status === 'complete') {
28-
const tbs = rst.filter(t => t.id === id);
29-
if (tbs.length) {
30-
number.check(tbs, number.IGNORE);
28+
if (rst.some(t => t.id === id)) {
29+
number.check([tab], number.IGNORE);
3130
}
3231
}
3332
};
33+
const remove = alarm => {
34+
if (alarm.name === 'remove.startup.discarding.observer') {
35+
chrome.tabs.onUpdated.removeListener(observe);
36+
chrome.alarms.onAlarm.removeListener(remove);
37+
}
38+
};
3439
chrome.tabs.onUpdated.addListener(observe);
35-
// we do discard for the next 10 seconds
36-
setTimeout(() => chrome.tabs.onUpdated.removeListener(observe), 10000);
40+
// we keep discarding for the next 10 seconds
41+
chrome.alarms.create('remove.startup.discarding.observer', {
42+
when: Date.now() + prefs['startup-discarding-period'] * 1000
43+
});
44+
chrome.alarms.onAlarm.addListener(remove);
3745
}
3846
});
3947
}

0 commit comments

Comments
 (0)