From 9d08e81aa5def63a5e34f464aae099f7c29f0ac5 Mon Sep 17 00:00:00 2001 From: James Petts Date: Wed, 23 Oct 2019 08:45:26 +0100 Subject: [PATCH] =?UTF-8?q?perf:=20=E2=9A=A1=EF=B8=8F=20Throttle=20UI=20re?= =?UTF-8?q?fresh=20of=20synced=20WL=20value=20in=20vtk=20port=20(#1070)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- extensions/vtk/package.json | 3 ++- extensions/vtk/src/OHIFVTKViewport.js | 4 ++++ extensions/vtk/src/commandsModule.js | 13 +++++++++++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/extensions/vtk/package.json b/extensions/vtk/package.json index c20049c17..67ed9d7de 100644 --- a/extensions/vtk/package.json +++ b/extensions/vtk/package.json @@ -48,7 +48,8 @@ }, "dependencies": { "@babel/runtime": "^7.5.5", - "react-vtkjs-viewport": "^0.3.1" + "react-vtkjs-viewport": "^0.3.1", + "lodash.throttle": "^4.1.1" }, "devDependencies": { "@ohif/core": "^1.4.0", diff --git a/extensions/vtk/src/OHIFVTKViewport.js b/extensions/vtk/src/OHIFVTKViewport.js index 43fb860f3..e2c48a49a 100644 --- a/extensions/vtk/src/OHIFVTKViewport.js +++ b/extensions/vtk/src/OHIFVTKViewport.js @@ -213,6 +213,10 @@ class OHIFVTKViewport extends Component { volumeMapper.setSampleDistance(sampleDistance); + // Be generous to surpress warnings, as the logging really hurts performance. + // TODO: maybe we should auto adjust samples to 1000. + volumeMapper.setMaximumSamplesPerRay(4000); + volumeCache[displaySetInstanceUid] = volumeActor; return volumeActor; diff --git a/extensions/vtk/src/commandsModule.js b/extensions/vtk/src/commandsModule.js index 428b5975d..de21e0dd3 100644 --- a/extensions/vtk/src/commandsModule.js +++ b/extensions/vtk/src/commandsModule.js @@ -9,6 +9,7 @@ import { import setMPRLayout from './utils/setMPRLayout.js'; import setViewportToVTK from './utils/setViewportToVTK.js'; import Constants from 'vtk.js/Sources/Rendering/Core/VolumeMapper/Constants.js'; +import throttle from 'lodash.throttle'; const { BlendMode } = Constants; @@ -102,15 +103,23 @@ const actions = { }); }, enableLevelTool: () => { + function updateVOI(apis, windowWidth, windowCenter) { + apis.forEach(api => { + api.updateVOI(windowWidth, windowCenter); + }); + } + + const throttledUpdateVOIs = throttle(updateVOI, 16, { trailing: true }); // ~ 60 fps + const callbacks = { setOnLevelsChanged: ({ windowCenter, windowWidth }) => { apis.forEach(api => { const renderWindow = api.genericRenderWindow.getRenderWindow(); renderWindow.render(); - - api.updateVOI(windowWidth, windowCenter); }); + + throttledUpdateVOIs(apis, windowWidth, windowCenter); }, };