ongames.cc">would only play Halo: Campaign Evolved on handheld with upscaling" style="max-width:100%;border-radius:12px;margin-bottom:25px">
I would only play Halo: Campaign Evolved on handheld with upscaling
I’ve been playing Halo: Campaign Evolved on the rather beefy Asus ROG Xbox Ally X without upscaling and things aren’t looking pretty. Well, they are looking quite pretty, but they certainly aren’t running pretty. You’ll definitely want some upscaling to do that, and in my testing, FSR Medium is the best way to go.
Strangely, there isn’t an option to disable upscaling altogether in Halo Campaign Evolved as of the time of writing. There are instead ‘native’ modes with TSR, FSR or DLSS. This essentially acts like anti-aliasing, without any of the performance benefits of upscaling.
With TSR set to native, I saw an average fps of 20 and 1% lows of 14.3 fps.
With FSR set to native, I saw a similar 22 average fps and lows of 19 fps. I would have assumed these would be identical, but they are similar enough to be within some degree of variance. Either way, FSR might be a better shout if it’s taxing the silicon a little less.
I’ve been testing with the Asus ROG Xbox Ally X in performance mode, whilst plugged in, running at around 17 W. This is arguably the best mode for the handheld, being decently performant without being too loud. The ROG Xbox Ally X is no slouch in specs, kitted out with the Zen 5 AMD Ryzen Z2 Extreme and 24 GB of LPDDR5X memory. It’s on the higher end of the gaming handheld market right now.
There are some handheld-specific settings for Halo: Campaign Evolved. For instance, it has a very low graphical mode, which I couldn’t access outside of the plucky ROG Xbox Ally X. This tones down the graphics quality but gives you better performance in return.
My money would be on TSR between the three available upscalers. Over three separate gaming tests, I saw an average fps of 31 and lows of 25.6 fps on TSR Ultra, which is a bit higher than native. Personally, I’d like lows in the 30s for smoother gameplay, and FSR can get you that… at a cost.
Avg FPS
1% Low FPS
| Product | Value |
|---|---|
| FSR Low | 49 Avg FPS, 39 1% Low FPS |
| FSR Medium | 43 Avg FPS, 34 1% Low FPS |
| FSR Ultra | 33 Avg FPS, 27 1% Low FPS |
| FSR Native | 22 Avg FPS, 19 1% Low FPS |
| TSR Low | 33 Avg FPS, 30 1% Low FPS |
| TSR Medium | 32 Avg FPS, 28 1% Low FPS |
| TSR Ultra | 31 Avg FPS, 26 1% Low FPS |
| TSR Native | 20 Avg FPS, 14 1% Low FPS |
Avg FPS
1% Low FPS
| Product | Value |
|---|---|
| FSR Low | 32 Avg FPS, 27 1% Low FPS |
| FSR Medium | 26 Avg FPS, 22 1% Low FPS |
| FSR Ultra | 23 Avg FPS, 27 1% Low FPS |
| FSR Native | 16 Avg FPS, 14 1% Low FPS |
| TSR Low | 29 Avg FPS, 23 1% Low FPS |
| TSR Medium | 29 Avg FPS, 25 1% Low FPS |
| TSR Ultra | 29 Avg FPS, 25 1% Low FPS |
| TSR Native | 16 Avg FPS, 14 1% Low FPS |
Avg FPS
1% Low FPS
| Product | Value |
|---|---|
| FSR Low | 28 Avg FPS, 24 1% Low FPS |
| FSR Medium | 24 Avg FPS, 23 1% Low FPS |
| FSR Ultra | 21 Avg FPS, 18 1% Low FPS |
| FSR Native | 14 Avg FPS, 12 1% Low FPS |
| TSR Low | 29 Avg FPS, 24 1% Low FPS |
| TSR Medium | 28 Avg FPS, 25 1% Low FPS |
| TSR Ultra | 27 Avg FPS, 24 1% Low FPS |
| TSR Native | 15 Avg FPS, 14 1% Low FPS |

window.iFrameResizer = {heightCalculationMethod: ‘taggedElement’};(function() {window.fvAnimateCharts = function(chartWrapper) {if (!chartWrapper) return;function animateBars(chartElement) {if (!chartElement) return;var bars = chartElement.querySelectorAll(‘.fv-bar, .fv-stacked-segment’);bars.forEach(function(bar, index) {bar.style.setProperty(‘width’, ‘0%’, ‘important’);bar.style.setProperty(‘transition’, ‘none’, ‘important’);var targetWidth = bar.dataset.targetWidth;if (targetWidth === undefined) return;void bar.offsetWidth;var targetMargin = bar.dataset.targetMargin;var baseMargin = bar.dataset.baseMargin;if (baseMargin !== undefined) {bar.style.setProperty(‘margin-left’, baseMargin + ‘%’, ‘important’);}setTimeout(function() {var marginTransition = baseMargin !== undefined ? ‘, margin-left 0.8s ease-out’ : ”;bar.style.setProperty(‘transition’, ‘opacity 0.2s ease, width 0.8s ease-out’ + marginTransition, ‘important’);bar.style.setProperty(‘width’, targetWidth + ‘%’, ‘important’);if (targetMargin !== undefined && baseMargin !== undefined) {bar.style.setProperty(‘margin-left’, targetMargin + ‘%’, ‘important’);}}, index * 50 + 50);});}function animateLineChart(chartElement) {if (!chartElement) return;var lineSvg = chartElement.querySelector(‘svg’);if (!lineSvg) return;var paths = lineSvg.querySelectorAll(‘.riv-line-path’);paths.forEach(function(p, i) {if (typeof p.getTotalLength === ‘function’) {var len = p.getTotalLength();p.style.transition = ‘none’;p.style.strokeDasharray = len;p.style.strokeDashoffset = len;p.getBoundingClientRect();setTimeout(function() {p.style.transition = ‘stroke-dashoffset 1s ease-out ‘ + (i * 0.1) + ‘s, stroke-width 0.2s, opacity 0.2s’;p.style.strokeDashoffset = ‘0’;}, 100);}});var dots = lineSvg.querySelectorAll(‘.riv-dot’);dots.forEach(function(dot, i) {dot.style.opacity = ‘0’;setTimeout(function() {dot.style.transition = ‘opacity 0.3s ease’;dot.style.opacity = ‘1’;}, 500 + i * 10);});}var charts = chartWrapper.querySelectorAll(‘.fv-chart-item’);charts.forEach(function(chart) {if (window.getComputedStyle(chart).display === ‘none’) return;var chartType = chart.dataset.chartType;if (chartType === ‘Line’) {animateLineChart(chart);} else if (chartType !== ‘Pie’) {animateBars(chart);}});};function initialize(uniqueId, isSlideshow) {var root = document.getElementById(uniqueId);if (!root && !isSlideshow) return;function setupWrapper(chartWrapper) {if (!chartWrapper) return;function checkMobileView() {var width = chartWrapper.getBoundingClientRect().width;var isMobileDevice = window.screen && Math.min(window.screen.width, window.screen.height) <= 599;var isMobile;if (width === 0) {isMobile = isMobileDevice || window.matchMedia('(max-width: 599px)').matches;} else {isMobile = isMobileDevice || width rightNum) {winner = ‘left’;if (rightNum > 0) {var diff = Math.round(((leftNum – rightNum) / rightNum) * 100);pctDiffStr = ‘+’ + diff.toLocaleString() + ‘%’;}} else if (rightNum > leftNum) {winner = ‘right’;if (leftNum > 0) {var diff = Math.round(((rightNum – leftNum) / leftNum) * 100);pctDiffStr = ‘+’ + diff.toLocaleString() + ‘%’;}}}var leftDisplay = data.productData[leftProduct] && data.productData[leftProduct].displayValue !== undefined ? data.productData[leftProduct].displayValue : (leftIsNum ? leftNum.toLocaleString() : (leftVal !== undefined ? leftVal : ‘-‘));var rightDisplay = data.productData[rightProduct] && data.productData[rightProduct].displayValue !== undefined ? data.productData[rightProduct].displayValue : (rightIsNum ? rightNum.toLocaleString() : (rightVal !== undefined ? rightVal : ‘-‘));var unit = (data.productData[leftProduct] && data.productData[leftProduct].unit) ||(data.productData[rightProduct] && data.productData[rightProduct].unit) || ”;var leftTextStr = leftDisplay;var rightTextStr = rightDisplay;var leftBar = row.querySelector(‘.fv-versus-bar-left’);var rightBar = row.querySelector(‘.fv-versus-bar-right’);var leftText = row.querySelector(‘.fv-inside-left’);var rightText = row.querySelector(‘.fv-inside-right’);var labelText = row.querySelector(‘.fv-versus-label span’);var leftWrapper = row.querySelector(‘.fv-versus-bar-left-wrapper’);var rightWrapper = row.querySelector(‘.fv-versus-bar-right-wrapper’);var existingPctDiffs = row.querySelectorAll(‘.fv-versus-pct-diff’);existingPctDiffs.forEach(function(el) { el.remove(); });if (winner === ‘left’ && pctDiffStr) {var pctSpan = document.createElement(‘span’);pctSpan.className = ‘fv-versus-pct-diff’;pctSpan.style.color = ‘rgba(255, 255, 255, 0.9)’;pctSpan.textContent = pctDiffStr;if (leftBar) leftBar.insertBefore(pctSpan, leftBar.firstChild);} else if (winner === ‘right’ && pctDiffStr) {var pctSpan = document.createElement(‘span’);pctSpan.className = ‘fv-versus-pct-diff’;pctSpan.style.color = ‘rgba(255, 255, 255, 0.9)’;pctSpan.textContent = pctDiffStr;if (rightBar) rightBar.appendChild(pctSpan);}if (leftBar) {leftBar.style.backgroundColor = leftColor;leftBar.dataset.targetWidth = leftWidth;leftBar.style.setProperty(‘–target-width’, leftWidth + ‘%’);leftBar.style.width = leftWidth + ‘%’;}if (rightBar) {rightBar.style.backgroundColor = rightColor;rightBar.dataset.targetWidth = rightWidth;rightBar.style.setProperty(‘–target-width’, rightWidth + ‘%’);rightBar.style.width = rightWidth + ‘%’;}if (leftText) {leftText.innerHTML = leftTextStr;}if (rightText) {rightText.innerHTML = rightTextStr;}if (labelText) {labelText.textContent = data.attribute + (unit ? ‘ (‘ + unit + ‘)’ : ”);}});}if (leftSelect) leftSelect.addEventListener(‘change’, updateVersusChart);if (rightSelect) rightSelect.addEventListener(‘change’, updateVersusChart);});var barRows = chartWrapper.querySelectorAll(‘.fv-bar-row’);var globalCaptionEl = chartWrapper.querySelector(‘.rv-chart-caption’);var fallbackCaptionHtml = globalCaptionEl ? globalCaptionEl.innerHTML : ”;barRows.forEach(function(row) {var commentaryEl = row.querySelector(‘[data-commentary-key]’);if (commentaryEl) {var commentaryText = commentaryEl.textContent;if (commentaryText && commentaryText.trim().length > 0) {row.addEventListener(‘mouseenter’, function() {if (!chartWrapper.classList.contains(‘mobile-view’) && globalCaptionEl) {globalCaptionEl.innerHTML = commentaryText;globalCaptionEl.classList.add(‘fv-bar-active-caption’);}});row.addEventListener(‘mouseleave’, function() {if (!chartWrapper.classList.contains(‘mobile-view’) && globalCaptionEl) {globalCaptionEl.innerHTML = fallbackCaptionHtml;globalCaptionEl.classList.remove(‘fv-bar-active-caption’);}});}}});var charts = chartWrapper.querySelectorAll(‘.fv-chart-item’);var dropdown = chartWrapper.querySelector(‘.fv-dropdown-title’);var prevBtn = chartWrapper.querySelector(‘.fv-carousel-nav-btn.prev’);var nextBtn = chartWrapper.querySelector(‘.fv-carousel-nav-btn.next’);var carouselTitle = chartWrapper.querySelector(‘.fv-carousel-title-controls .fv-benchmark-title’);var counter = chartWrapper.querySelector(‘.fv-carousel-counter’);var subheadEl = chartWrapper.querySelector(‘.fv-chart-subhead’);var captionEl = chartWrapper.querySelector(‘.rv-chart-caption’);var footerContentEl = chartWrapper.querySelector(‘.fv-footer-content’);var bottomBarEl = chartWrapper.querySelector(‘.fv-bottom-bar’);var logoEl = chartWrapper.querySelector(‘.fv-logo’);if (charts.length > 1 && (dropdown || prevBtn)) {var currentChartIndex = 0;var titles = [];if (dropdown) {titles = Array.from(dropdown.options).map(function(o) { return o.text; });} else {charts.forEach(function(c) {titles.push(c.getAttribute(‘data-title’) || ”);});}function showInternalChart(index) {if (index = charts.length) index = 0;currentChartIndex = index;charts.forEach(function(c, i) {c.style.display = i === index ? ‘block’ : ‘none’;if (i === index) {var cType = c.dataset.chartType;if (cType === ‘Line’) {} else if (cType !== ‘Pie’) {window.fvAnimateCharts(chartWrapper);}var labelsOnTop = chartWrapper.dataset.barLabelsOnTop === ‘true’;if (labelsOnTop && (cType === ‘Bar’ || cType === ‘Stacked Bar’ || cType === ‘Versus’)) {chartWrapper.classList.add(‘labels-on-top’);} else {chartWrapper.classList.remove(‘labels-on-top’);}}});if (dropdown) dropdown.value = index;if (carouselTitle && titles[index]) carouselTitle.textContent = titles[index];if (counter) counter.textContent = (index + 1) + ‘ of ‘ + charts.length;var activeChart = charts[index];if (activeChart) {var newSubhead = activeChart.getAttribute(‘data-subhead’);var newCaption = activeChart.getAttribute(‘data-caption’);var currentChartType = activeChart.getAttribute(‘data-chart-type’);var hideGlobalCaption = currentChartType === ‘Countdown’ || currentChartType === ‘Image Comparison’ || currentChartType === ‘Shop the Collection’;if (subheadEl) subheadEl.textContent = newSubhead || ”;if (captionEl) {captionEl.textContent = newCaption || ”;fallbackCaptionHtml = newCaption || ”;}if (footerContentEl) {if (newCaption && newCaption.trim().length > 0 && !hideGlobalCaption) {footerContentEl.style.display = ‘block’;if (bottomBarEl) bottomBarEl.style.display = ‘flex’;} else {footerContentEl.style.display = ‘none’;if (bottomBarEl && !logoEl) {bottomBarEl.style.display = ‘none’;}}}}}if (dropdown) dropdown.addEventListener(‘change’, function(e) { showInternalChart(parseInt(e.target.value)); });if (prevBtn) prevBtn.addEventListener(‘click’, function() { showInternalChart(currentChartIndex – 1); });if (nextBtn) nextBtn.addEventListener(‘click’, function() { showInternalChart(currentChartIndex + 1); });}var imageCompareWrappers = chartWrapper.querySelectorAll(‘.fv-image-compare-wrapper’);imageCompareWrappers.forEach(function(wrapper) {var inner = wrapper.querySelector(‘.fv-image-compare-inner’) || wrapper;var slider = wrapper.querySelector(‘.fv-image-compare-slider’);var fgImage = wrapper.querySelector(‘.fv-image-compare-fg’);var bgImage = wrapper.querySelector(‘.fv-image-compare-bg’);var labelLeft = wrapper.querySelector(‘.fv-image-compare-label-left’);var labelRight = wrapper.querySelector(‘.fv-image-compare-label-right’);var isDragging = false;var scale = 1;var panX = 0;var panY = 0;var isPanning = false;var hasPanned = false;var lastClientX = 0;var lastClientY = 0;var initialDistance = null;var lastCenterX = null;var lastCenterY = null;function updateTransform() {if (wrapper.classList.contains(‘fv-image-compare-fullscreen’)) {inner.style.setProperty(‘transform’, ‘translate(‘ + panX + ‘px, ‘ + panY + ‘px) scale(‘ + scale + ‘)’, ‘important’);} else {inner.style.removeProperty(‘transform’);scale = 1;panX = 0;panY = 0;}}function constrainPan() {var rect = wrapper.getBoundingClientRect();var maxPanX = Math.max(0, (rect.width * scale – rect.width) / 2);var maxPanY = Math.max(0, (rect.height * scale – rect.height) / 2);panX = Math.max(-maxPanX, Math.min(panX, maxPanX));panY = Math.max(-maxPanY, Math.min(panY, maxPanY));}wrapper.addEventListener(‘wheel’, function(e) {if (!wrapper.classList.contains(‘fv-image-compare-fullscreen’)) return;e.preventDefault();var zoomSensitivity = 0.005;var zoomFactor = Math.exp(-e.deltaY * zoomSensitivity);var newScale = Math.max(1, Math.min(scale * zoomFactor, 5));if (newScale === scale) return;var rect = wrapper.getBoundingClientRect();var mouseX = e.clientX – rect.left – rect.width / 2;var mouseY = e.clientY – rect.top – rect.height / 2;var ratio = newScale / scale;panX = mouseX – (mouseX – panX) * ratio;panY = mouseY – (mouseY – panY) * ratio;scale = newScale;constrainPan();updateTransform();}, { passive: false });wrapper.addEventListener(‘mousedown’, function(e) {if (!wrapper.classList.contains(‘fv-image-compare-fullscreen’) || scale 2 || Math.abs(dy) > 2) {hasPanned = true;}lastClientX = e.clientX;lastClientY = e.clientY;panX += dx;panY += dy;constrainPan();updateTransform();});window.addEventListener(‘mouseup’, function() {isPanning = false;});wrapper.addEventListener(‘touchstart’, function(e) {if (!wrapper.classList.contains(‘fv-image-compare-fullscreen’)) return;if (e.touches.length === 2) {e.preventDefault();var dx = e.touches[0].clientX – e.touches[1].clientX;var dy = e.touches[0].clientY – e.touches[1].clientY;initialDistance = Math.sqrt(dx * dx + dy * dy);var rect = wrapper.getBoundingClientRect();lastCenterX = (e.touches[0].clientX + e.touches[1].clientX) / 2 – rect.left – rect.width / 2;lastCenterY = (e.touches[0].clientY + e.touches[1].clientY) / 2 – rect.top – rect.height / 2;hasPanned = true;} else if (e.touches.length === 1 && scale > 1) {if (e.target.closest(‘.fv-image-compare-slider’) || e.target.closest(‘button’)) return;isPanning = true;hasPanned = false;lastClientX = e.touches[0].clientX;lastClientY = e.touches[0].clientY;}}, { passive: false });wrapper.addEventListener(‘touchmove’, function(e) {if (!wrapper.classList.contains(‘fv-image-compare-fullscreen’)) return;if (e.touches.length === 2 && initialDistance !== null) {e.preventDefault();var dx = e.touches[0].clientX – e.touches[1].clientX;var dy = e.touches[0].clientY – e.touches[1].clientY;var distance = Math.sqrt(dx * dx + dy * dy);if (initialDistance > 0) {var zoomFactor = distance / initialDistance;var newScale = Math.max(1, Math.min(scale * zoomFactor, 5));var rect = wrapper.getBoundingClientRect();var centerX = (e.touches[0].clientX + e.touches[1].clientX) / 2 – rect.left – rect.width / 2;var centerY = (e.touches[0].clientY + e.touches[1].clientY) / 2 – rect.top – rect.height / 2;var ratio = newScale / scale;panX = centerX – (centerX – panX) * ratio;panY = centerY – (centerY – panY) * ratio;if (lastCenterX !== null && lastCenterY !== null) {panX += (centerX – lastCenterX);panY += (centerY – lastCenterY);}scale = newScale;lastCenterX = centerX;lastCenterY = centerY;constrainPan();updateTransform();}initialDistance = distance;} else if (e.touches.length === 1 && isPanning) {e.preventDefault();var dx = e.touches[0].clientX – lastClientX;var dy = e.touches[0].clientY – lastClientY;if (Math.abs(dx) > 2 || Math.abs(dy) > 2) {hasPanned = true;}lastClientX = e.touches[0].clientX;lastClientY = e.touches[0].clientY;panX += dx;panY += dy;constrainPan();updateTransform();}}, { passive: false });wrapper.addEventListener(‘touchend’, function(e) {if (e.touches.length < 2) {initialDistance = null;}if (e.touches.length === 0) {isPanning = false;}});function handleMove(clientX) {var rect = inner.getBoundingClientRect();var x = Math.max(0, Math.min(clientX – rect.left, rect.width));var percent = Math.max(0, Math.min((x / rect.width) * 100, 100));if (slider) slider.style.setProperty('left', percent + '%', 'important');if (fgImage) fgImage.style.setProperty('clip-path', 'polygon(0 0, ' + percent + '% 0, ' + percent + '% 100%, 0 100%)', 'important');if (labelLeft) {if (percent 90) {labelRight.style.setProperty(‘opacity’, ‘0’, ‘important’);} else {labelRight.style.setProperty(‘opacity’, ‘1’, ‘important’);}}}function onMouseMove(e) {if (!isDragging) return;handleMove(e.clientX);}function onTouchMove(e) {if (!isDragging) return;e.preventDefault();handleMove(e.touches[0].clientX);}function stopDragging() {isDragging = false;window.removeEventListener(‘mousemove’, onMouseMove);window.removeEventListener(‘mouseup’, stopDragging);window.removeEventListener(‘touchmove’, onTouchMove);window.removeEventListener(‘touchend’, stopDragging);}if (slider) {var startDrag = function(clientX) {isDragging = true;handleMove(clientX);window.addEventListener(‘mousemove’, onMouseMove);window.addEventListener(‘mouseup’, stopDragging);};var startTouchDrag = function(clientX) {isDragging = true;handleMove(clientX);window.addEventListener(‘touchmove’, onTouchMove, { passive: false });window.addEventListener(‘touchend’, stopDragging);};slider.addEventListener(‘mousedown’, function(e) {e.preventDefault();startDrag(e.clientX);});slider.addEventListener(‘touchstart’, function(e) {e.preventDefault();startTouchDrag(e.touches[0].clientX);}, { passive: false });}var expandBtn = wrapper.querySelector(‘.fv-image-compare-expand-btn’);var closeBtn = wrapper.querySelector(‘.fv-image-compare-close-btn’);if (expandBtn) {if (window !== window.parent) {expandBtn.style.display = ‘none’;} else {expandBtn.addEventListener(‘click’, function(e) {e.stopPropagation();wrapper.classList.add(‘fv-image-compare-fullscreen’);document.body.style.overflow = ‘hidden’;if (fgImage && fgImage.dataset.highresSrc) {fgImage.src = fgImage.dataset.highresSrc;fgImage.removeAttribute(‘srcset’);fgImage.removeAttribute(‘sizes’);}if (bgImage && bgImage.dataset.highresSrc) {bgImage.src = bgImage.dataset.highresSrc;bgImage.removeAttribute(‘srcset’);bgImage.removeAttribute(‘sizes’);}});}}if (closeBtn) {closeBtn.addEventListener(‘click’, function(e) {e.stopPropagation();wrapper.classList.remove(‘fv-image-compare-fullscreen’);document.body.style.overflow = ”;updateTransform();});}document.addEventListener(‘keydown’, function(e) {if (e.key === ‘Escape’ && wrapper.classList.contains(‘fv-image-compare-fullscreen’)) {wrapper.classList.remove(‘fv-image-compare-fullscreen’);document.body.style.overflow = ”;updateTransform();}});});var hotspots = chartWrapper.querySelectorAll(‘.fv-stl-hotspot-btn’);var allProductsModal = chartWrapper.querySelector(‘.fv-stl-all-products-modal’);var shopAllBtn = chartWrapper.querySelector(‘.fv-stl-shop-all-btn’);var allProductsList = chartWrapper.querySelector(‘.fv-stl-all-products-list’);var stlContainer = chartWrapper.querySelector(‘.fv-stl-container’);function closeAllModals() {if (allProductsModal) {allProductsModal.classList.remove(‘is-active’);var items = allProductsModal.querySelectorAll(‘.fv-stl-all-products-item’);items.forEach(function(item) {item.classList.remove(‘is-highlighted’);});if (stlContainer) {setTimeout(function() {if (!allProductsModal.classList.contains(‘is-active’)) {stlContainer.style.minHeight = ”;if (‘parentIFrame’ in window) {window.parentIFrame.size();}}}, 300);}}hotspots.forEach(function(btn) { btn.setAttribute(‘aria-expanded’, ‘false’); });if (‘parentIFrame’ in window) {window.parentIFrame.size();}}hotspots.forEach(function(btn) {btn.addEventListener(‘click’, function(e) {e.stopPropagation();var hotspotId = btn.getAttribute(‘data-hotspot-id’);var isExpanded = btn.getAttribute(‘aria-expanded’) === ‘true’;closeAllModals();if (!isExpanded && allProductsModal) {btn.setAttribute(‘aria-expanded’, ‘true’);allProductsModal.classList.add(‘is-active’);var container = btn.closest(‘.fv-stl-container’);if (container && container.offsetHeight < 450) {container.style.minHeight = '450px';}var targetItem = allProductsModal.querySelector('.fv-stl-all-products-item[data-product-id="' + hotspotId + '"]');if (targetItem) {targetItem.classList.add('is-highlighted');setTimeout(function() {targetItem.scrollIntoView({ behavior: 'smooth', block: 'center' });}, 100);}if ('parentIFrame' in window) {window.parentIFrame.size();}}});});if (shopAllBtn && allProductsModal) {shopAllBtn.addEventListener('click', function(e) {e.stopPropagation();closeAllModals();allProductsModal.classList.add('is-active');var container = shopAllBtn.closest('.fv-stl-container');if (container && container.offsetHeight = iaNodes.length) {closeAllIANodes();resetExploreBtn();} else {currentIaIndex = nextIndex;var targetBtn = iaNodes[currentIaIndex];if (targetBtn) {if(targetBtn.classList.contains(‘is-active’)) {targetBtn.click();}targetBtn.click();}}});}if (iaWrapper) {iaWrapper.addEventListener(‘click’, function(e) {if (!e.target.closest(‘.fv-ia-node-button’) && !e.target.closest(‘.fv-ia-explore-btn’)) {closeAllIANodes();resetExploreBtn();}});}window.fvAnimateCharts(chartWrapper);var countdownContainer = chartWrapper.querySelector(‘.fv-countdown-container’);if (countdownContainer) {var targetDateAttr = countdownContainer.getAttribute(‘data-target-date’);if (targetDateAttr) {var targetDate = new Date(targetDateAttr);var primaryColor = countdownContainer.getAttribute(‘data-primary-color’) || ‘#f97316’;var subheadColor = countdownContainer.getAttribute(‘data-subhead-color’) || ‘#ffffff’;var pad = function(n) { return (n 0) {d = Math.floor(difference / (1000 * 60 * 60 * 24));h = Math.floor((difference / (1000 * 60 * 60)) % 24);m = Math.floor((difference / 1000 / 60) % 60);s = Math.floor((difference / 1000) % 60);}var daysEl = countdownContainer.querySelector(‘[data-time=”days”]’);var hoursEl = countdownContainer.querySelector(‘[data-time=”hours”]’);var minsEl = countdownContainer.querySelector(‘[data-time=”minutes”]’);var secsEl = countdownContainer.querySelector(‘[data-time=”seconds”]’);if (daysEl) daysEl.textContent = d;if (hoursEl) hoursEl.textContent = pad(h);if (minsEl) minsEl.textContent = pad(m);if (secsEl) secsEl.textContent = pad(s);};updateCountdown();setInterval(updateCountdown, 1000);}}}if (false) {var slideshowContainer = document.getElementById(uniqueId + ‘-slideshow’);if (slideshowContainer) {var slides = slideshowContainer.querySelectorAll(‘.fv-slide’);slides.forEach(function(slide) {setupWrapper(slide.querySelector(‘.fv-chart-wrapper’));});}} else {setupWrapper(root);}}if (document.readyState === ‘loading’) {document.addEventListener(‘DOMContentLoaded’, function() { initialize(‘fv-chart-1784722919989-w9qhvq0e4’, false); });} else {initialize(‘fv-chart-1784722919989-w9qhvq0e4’, false);}})();
With FSR set to low, and using the Very Low graphical setting, I saw an average of 48.6 fps and lows of 38.6 fps. I’d call this ‘perfectly playable’ on the little 7-inch 1080p display. FSR Medium gave me an average fps of 42.6 with lows of 34 fps.
From my time so far, I reckon FSR Medium with very low graphics is the absolute sweet spot. That’s what I stuck with as I have continued playing the game after I got all my testing stats.


FSR Low offers better performance, but it gives up too much clarity for me. FSR is genuinely really tough to justify on a bigger screen, so I wouldn’t bother on my main gaming PC, but FSR Medium with very low textures looks perfectly fine on the ROG Xbox Ally X.
And, most importantly, the difference between Low and Ultra graphics settings is surprisingly subtle here. It’s still more or less the same game: it’s just a little less pretty, and, with upscaling, has a slight bit more of a sheen to it in motion. Make sure to turn off motion blur, too. It’s awful.
