Skip to content

Commit 6de1ae4

Browse files
committed
add supplyDefaults bypass 'axrange' optimization to Plotly.update
1 parent 145cad3 commit 6de1ae4

File tree

2 files changed

+28
-20
lines changed

2 files changed

+28
-20
lines changed

src/plot_api/plot_api.js

+25-20
Original file line numberDiff line numberDiff line change
@@ -1716,22 +1716,7 @@ exports.relayout = function relayout(gd, astr, val) {
17161716
seq.push(subroutines.layoutReplot);
17171717
}
17181718
else if(Object.keys(aobj).length) {
1719-
var flagList = Object.keys(flags).filter(function(k) { return flags[k]; });
1720-
1721-
// Optimization mostly for large splom traces where
1722-
// Plots.supplyDefaults can take > 100ms
1723-
if(flagList[0] === 'axrange' && flagList.length === 1) {
1724-
for(var k in specs.rangesAltered) {
1725-
var axName = Axes.id2name(k);
1726-
var axIn = gd.layout[axName];
1727-
var axOut = gd._fullLayout[axName];
1728-
axOut.autorange = axIn.autorange;
1729-
axOut.range = axIn.range.slice();
1730-
axOut.cleanRange();
1731-
}
1732-
} else {
1733-
Plots.supplyDefaults(gd);
1734-
}
1719+
axRangeSupplyDefaultsByPass(gd, flags, specs) || Plots.supplyDefaults(gd);
17351720

17361721
if(flags.legend) seq.push(subroutines.doLegend);
17371722
if(flags.layoutstyle) seq.push(subroutines.layoutStyles);
@@ -1759,6 +1744,28 @@ exports.relayout = function relayout(gd, astr, val) {
17591744
});
17601745
};
17611746

1747+
// Optimization mostly for large splom traces where
1748+
// Plots.supplyDefaults can take > 100ms
1749+
function axRangeSupplyDefaultsByPass(gd, flags, specs) {
1750+
var k;
1751+
1752+
if(!flags.axrange) return false;
1753+
1754+
for(k in flags) {
1755+
if(k !== 'axrange' && flags[k]) return false;
1756+
}
1757+
1758+
for(k in specs.rangesAltered) {
1759+
var axName = Axes.id2name(k);
1760+
var axIn = gd.layout[axName];
1761+
var axOut = gd._fullLayout[axName];
1762+
axOut.autorange = axIn.autorange;
1763+
axOut.range = axIn.range.slice();
1764+
axOut.cleanRange();
1765+
}
1766+
return true;
1767+
}
1768+
17621769
function addAxRangeSequence(seq, rangesAltered) {
17631770
// N.B. leave as sequence of subroutines (for now) instead of
17641771
// subroutine of its own so that finalDraw always gets
@@ -2182,15 +2189,13 @@ exports.update = function update(gd, traceUpdate, layoutUpdate, _traces) {
21822189
}
21832190
else {
21842191
seq.push(Plots.previousPromises);
2185-
Plots.supplyDefaults(gd);
2192+
axRangeSupplyDefaultsByPass(gd, relayoutFlags, relayoutSpecs) || Plots.supplyDefaults(gd);
21862193

21872194
if(restyleFlags.style) seq.push(subroutines.doTraceStyle);
21882195
if(restyleFlags.colorbars) seq.push(subroutines.doColorBars);
21892196
if(relayoutFlags.legend) seq.push(subroutines.doLegend);
21902197
if(relayoutFlags.layoutstyle) seq.push(subroutines.layoutStyles);
2191-
if(relayoutFlags.axrange) {
2192-
addAxRangeSequence(seq, relayoutSpecs.rangesAltered);
2193-
}
2198+
if(relayoutFlags.axrange) addAxRangeSequence(seq, relayoutSpecs.rangesAltered);
21942199
if(relayoutFlags.ticks) seq.push(subroutines.doTicksRelayout);
21952200
if(relayoutFlags.modebar) seq.push(subroutines.doModeBar);
21962201
if(relayoutFlags.camera) seq.push(subroutines.doCamera);

test/jasmine/tests/plot_api_test.js

+3
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,7 @@ describe('Test plot api', function() {
533533
spyOn(subroutines, m);
534534
});
535535
spyOn(Axes, 'doTicks');
536+
spyOn(Plots, 'supplyDefaults').and.callThrough();
536537
});
537538

538539
function mock(gd) {
@@ -542,6 +543,7 @@ describe('Test plot api', function() {
542543
Axes.doTicks.calls.reset();
543544

544545
supplyAllDefaults(gd);
546+
Plots.supplyDefaults.calls.reset();
545547
Plots.doCalcdata(gd);
546548
gd.emit = function() {};
547549
return gd;
@@ -650,6 +652,7 @@ describe('Test plot api', function() {
650652
expect(Axes.doTicks).toHaveBeenCalledTimes(1);
651653
expect(Axes.doTicks.calls.allArgs()[0][1]).toEqual(['x']);
652654
expect(Axes.doTicks.calls.allArgs()[0][2]).toBe(true, 'skip-axis-title argument');
655+
expect(Plots.supplyDefaults).not.toHaveBeenCalled();
653656
}
654657

655658
var specs = [

0 commit comments

Comments
 (0)