Skip to content

Commit

Permalink
Feat/loading speed (#136)
Browse files Browse the repository at this point in the history
* logging

* Loading on interaction

* image loading finished

* comments
  • Loading branch information
danielschwartz4 authored Mar 15, 2024
1 parent 962845e commit 533986e
Showing 1 changed file with 27 additions and 82 deletions.
109 changes: 27 additions & 82 deletions extensions/cornerstone/src/init.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,8 @@ import interleaveTopToBottom from './utils/interleaveTopToBottom';
import initContextMenu from './initContextMenu';
import initDoubleClick from './initDoubleClick';
import { CornerstoneServices } from './types';
import initViewTiming from './utils/initViewTiming';

import * as stackPrefetch from '@newlantern/extension-default/src/stackPrefetch';
import * as imageLoading from '@newlantern/extension-default/src/imageLoading';

// TODO: Cypress tests are currently grabbing this from the window?
window.cornerstone = cornerstone;
Expand Down Expand Up @@ -107,6 +106,11 @@ export default async function init({
window.extensionManager = extensionManager;
window.commandsManager = commandsManager;

let priorityCounter = 1000000;
let interactionPriorityCounter = 1000000;
const enabledElementCounter = 0;
const STUDY_STACKS = [];

if (
appConfig.showWarningMessageForCrossOrigin &&
!window.crossOriginIsolated &&
Expand Down Expand Up @@ -217,10 +221,6 @@ export default async function init({
commandsManager,
});

const priorityCounter = 1000000;
const enabledElementCounter = 0;
const STUDY_STACKS = [];

/**
* When a viewport gets a new display set, this call will go through all the
* active tools in the toolbar, and call any commands registered in the
Expand Down Expand Up @@ -260,6 +260,12 @@ export default async function init({
const commands = button?.listeners?.[evt.type];
commandsManager.run(commands, { viewportId, evt });
});

// Prioritize loading of active element
const viewportInfo = cornerstoneViewportService.getViewportInfo(viewportId);
const { imageIds } = viewportInfo.getViewportData().data as any;

imageLoading.prefetchEnable({ uid: viewportId, imageIds }, priorityCounter--);
};

/**
Expand Down Expand Up @@ -296,86 +302,25 @@ export default async function init({
};

eventTarget.addEventListener(EVENTS.STACK_VIEWPORT_NEW_STACK, evt => {
// const { element, imageIds } = evt.detail;
// const { viewportId } = cornerstone.getEnabledElement(element);
// stackPrefetch.enable({ uid: viewportId, imageIds }, priorityCounter--);
const { element } = evt.detail;
cornerstoneTools.utilities.stackContextPrefetch.enable(element);
const { element, imageIds } = evt.detail;
const { viewportId } = cornerstone.getEnabledElement(element);

element.addEventListener(EVENTS.STACK_VIEWPORT_SCROLL, scrollEvt => {
// prioritize maxNumRequests before or after current index based on direction
// Add to interaction requestMap
imageLoading.scrollInteraction(
scrollEvt.detail,
interactionPriorityCounter--,
imageIds,
viewportId
);
});

imageLoading.prefetchEnable({ uid: viewportId, imageIds }, priorityCounter--);
});
eventTarget.addEventListener(EVENTS.IMAGE_LOAD_FAILED, imageLoadFailedHandler);
eventTarget.addEventListener(EVENTS.IMAGE_LOAD_ERROR, imageLoadFailedHandler);

function elementEnabledHandler(evt) {
// enabledElementCounter++;
// if (enabledElementCounter === cornerstone.getEnabledElements().length) {
// const dataSource = extensionManager.getActiveDataSource()[0];
// const { viewports } = viewportGridService.getState();
// const viewportDisplaySetIds = [];
// viewports.forEach(viewport => {
// viewport.displaySetInstanceUIDs.forEach(displaySetInstanceUID => {
// viewportDisplaySetIds.push(displaySetInstanceUID);
// });
// });
// const viewportInfos = Array.from(viewports.values());
// const displaySetInstanceUID = viewportInfos[0].displaySetInstanceUIDs[0];
// if (displaySetInstanceUID) {
// const displaySet = displaySetService.getDisplaySetByUID(displaySetInstanceUID);
// if (displaySet) {
// const { StudyInstanceUID } = displaySet;
// displaySetService
// .getActiveDisplaySets()
// .filter(
// ds =>
// ds.StudyInstanceUID === StudyInstanceUID &&
// !viewportDisplaySetIds.includes(ds.displaySetInstanceUID)
// )
// .sort((a, b) => a.SeriesNumber - b.SeriesNumber)
// .filter(ds => !STUDY_STACKS.some(stack => stack.uid === ds.displaySetInstanceUID))
// .forEach((displaySet, index) => {
// const imageIds = dataSource.getImageIdsForDisplaySet(displaySet);
// STUDY_STACKS.push({
// uid: displaySet.displaySetInstanceUID,
// imageIds,
// });
// });
// }
// }
// setTimeout(() => {
// console.log('All elements are enabled. Start prefetching images.');
// STUDY_STACKS.forEach(stack => stackPrefetch.enable(stack, priorityCounter));
// }, 2000);
// eventTarget.removeEventListener(EVENTS.ELEMENT_ENABLED, elementEnabledHandler);
// }
const { element } = evt.detail;

element.addEventListener(EVENTS.CAMERA_RESET, resetCrosshairs);

eventTarget.addEventListener(EVENTS.STACK_VIEWPORT_NEW_STACK, toolbarEventListener);

initViewTiming({ element, eventTarget });
}

function elementDisabledHandler(evt) {
const { element } = evt.detail;

element.removeEventListener(EVENTS.CAMERA_RESET, resetCrosshairs);

// TODO - consider removing the callback when all elements are gone
// eventTarget.removeEventListener(
// EVENTS.STACK_VIEWPORT_NEW_STACK,
// newStackCallback
// );

// enabledElementCounter = 0;
// STUDY_STACKS = [];
}

// eventTarget.addEventListener(EVENTS.ELEMENT_ENABLED, elementEnabledHandler);
eventTarget.addEventListener(EVENTS.ELEMENT_ENABLED, elementEnabledHandler.bind(null));

// eventTarget.addEventListener(EVENTS.ELEMENT_DISABLED, elementDisabledHandler);
eventTarget.addEventListener(EVENTS.ELEMENT_DISABLED, elementDisabledHandler.bind(null));

viewportGridService.subscribe(
viewportGridService.EVENTS.ACTIVE_VIEWPORT_ID_CHANGED,
activeViewportEventListener
Expand Down

0 comments on commit 533986e

Please sign in to comment.