prepareInternalCacheSync(drawer) {
            let internalCache = this._getInternalCacheRef(drawer);
            if (this._checkInternalCacheUpToDate(internalCache, drawer)) {
                return internalCache;
            }

            // Force reset
            if (internalCache) {
                internalCache.destroy();
            }

            $.console.assert(this._tRef, "Data Create called from drawing loop needs tile reference!");
            const transformedData = drawer.internalCacheCreate(this, this._tRef);
            $.console.assert(transformedData !== undefined, "[DrawerBase.internalCacheCreate] must return a value if usePrivateCache is enabled!");

            const drawerID = drawer.getId();
            internalCache = this[DRAWER_INTERNAL_CACHE][drawerID] = new $.InternalCacheRecord(transformedData,
                drawerID, (data) => drawer.internalCacheFree(data));
            return internalCache;
        }
Internal cache is defined by a Drawer. Sync preparation happens directly before rendering.
Must not be called if drawer.options.usePrivateCache == false. Called inside getDataForRendering
by cache itself if preloadCache == false (without support for async behavior).
@private
@param {OpenSeadragon.DrawerBase} drawer
@return {OpenSeadragon.InternalCacheRecord} reference to the cache