fix: correctly detect Snapdragon X2 SKUs with no name token (issue #2)#5
Merged
Conversation
…en (issue #2) The v0.4.4 fix matched only a numeric SKU token in ProcessorNameString, but some OEM firmware (the reporter's Surface Laptop 8, X2E-78-100) reports a bare marketing name with no token at all, so it fell through to "Unknown X2 Elite SKU" with Base/Boost/TDP blanked out every time. Add a layered detection pipeline (sensors/chips.rs, sensors/identity.rs): exact SKU token -> family from name or registry Identifier -> SKU inferred from real core count + rated clock (~MHz, the same signal CPU-Z/HWiNFO use) -> honest family-only fallback with real boost populated -> generic. Two SKUs (X2E-80/84-100) publish identical CPU-visible specs and get one honest combined label instead of a guess. Also fixes a latent bug where every X Elite SKU collapsed to X1E-80-100, and replaces a fabricated "X1P-80-100" table entry with the real X1P-42/46-100 SKUs. Speed now comes from per-core % Processor Performance x ~MHz (the fastest core), replacing a single _Total counter that blends idle Efficiency cores into a busy Prime cluster's reported clock. Real OS P/E topology now consistently overrides the static profile table for every match path, not just the inferred ones, so the new "Copy detection report" diagnostic (Tools menu) never contradicts itself. 24 unit tests cover the reported scenario, the ambiguous pair, the name-independent Identifier path, and X1/X2 token regressions.
ProcessorInfo: Model no longer doubles up on placeholder text ("Snapdragon
X2 Elite Unknown X2 Elite SKU"); CPUID now shows the real registry
Identifier string instead of repeating the marketing model; Model gets a
hover tooltip naming the detection basis when it wasn't an exact SKU token
match.
About dialog: replace the unbounded full SKU-lineup list (which only grows
with every future family) with a single line for the actually-detected
processor, and swap the per-core-temperature disclosure for a general
"this is a monitoring/detection tool, not a benchmark" scope note.
Tools menu: add "Copy detection report", dumping every raw identity signal
plus how the chip was matched to the clipboard — lets a reporter hand over
one paste instead of screenshots for a machine we don't own.
spenceriam
marked this pull request as ready for review
July 9, 2026 18:55
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
ProcessorNameString. It doesn't on this reporter's Surface Laptop 8 (bare "Snapdragon X2 Elite" with no token), which fell into an "Unknown X2 Elite SKU" fallback with Base/Boost/TDP blanked out.Identifier→ SKU inferred from real core count + rated clock (~MHz, the same signal CPU-Z/HWiNFO use) → honest family-only fallback with real boost populated → generic. X2E-80-100/X2E-84-100 (CPU-visible-identical specs) get one honest combined label rather than a guess.% Processor Performance × ~MHz(fastest core) instead of a single_Totalcounter that blends an idle Efficiency cluster into a busy Prime cluster's reported clock.