@@ -37,6 +37,20 @@ void ffPrintCPU(FFCPUOptions* options)
3737 }
3838 else
3939 {
40+ FF_STRBUF_AUTO_DESTROY coreTypes = ffStrbufCreate ();
41+ if (options -> showPeCoreCount )
42+ {
43+ uint32_t typeCount = 0 ;
44+ while (cpu .coreTypes [typeCount ].count != 0 && typeCount < sizeof (cpu .coreTypes ) / sizeof (cpu .coreTypes [0 ])) typeCount ++ ;
45+ if (typeCount > 0 )
46+ {
47+ qsort (cpu .coreTypes , typeCount , sizeof (cpu .coreTypes [0 ]), (void * ) sortCores );
48+
49+ for (uint32_t i = 0 ; i < typeCount ; i ++ )
50+ ffStrbufAppendF (& coreTypes , "%s%u" , i == 0 ? "" : "+" , cpu .coreTypes [i ].count );
51+ }
52+ }
53+
4054 if (options -> moduleArgs .outputFormat .length == 0 )
4155 {
4256 ffPrintLogoAndKey (FF_CPU_MODULE_NAME , 0 , & options -> moduleArgs , FF_PRINT_TYPE_DEFAULT );
@@ -53,13 +67,15 @@ void ffPrintCPU(FFCPUOptions* options)
5367 else
5468 ffStrbufAppendS (& str , "Unknown" );
5569
56- if (cpu .coresOnline > 1 )
70+ if (coreTypes .length > 0 )
71+ ffStrbufAppendF (& str , " (%s)" , coreTypes .chars );
72+ else if (cpu .coresOnline > 1 )
5773 ffStrbufAppendF (& str , " (%u)" , cpu .coresOnline );
5874
5975 double freq = cpu .frequencyBiosLimit ;
60- if (freq <= 0.0000001 )
76+ if (!( freq > 0.0000001 ) )
6177 freq = cpu .frequencyMax ;
62- if (freq <= 0.0000001 )
78+ if (!( freq > 0.0000001 ) )
6379 freq = cpu .frequencyBase ;
6480 if (freq > 0.0000001 )
6581 ffStrbufAppendF (& str , " @ %.*f GHz" , options -> freqNdigits , freq );
@@ -74,19 +90,6 @@ void ffPrintCPU(FFCPUOptions* options)
7490 }
7591 else
7692 {
77- FF_STRBUF_AUTO_DESTROY coreTypes = ffStrbufCreate ();
78- uint32_t typeCount = 0 ;
79- while (cpu .coreTypes [typeCount ].count != 0 && typeCount < sizeof (cpu .coreTypes ) / sizeof (cpu .coreTypes [0 ])) typeCount ++ ;
80- if (typeCount > 0 )
81- {
82- qsort (cpu .coreTypes , typeCount , sizeof (cpu .coreTypes [0 ]), (void * ) sortCores );
83-
84- for (uint32_t i = 0 ; i < typeCount ; i ++ )
85- ffStrbufAppendF (& coreTypes , "%s%u" , i == 0 ? "" : "+" , cpu .coreTypes [i ].count );
86- }
87- else
88- ffStrbufAppendF (& coreTypes , "%u" , cpu .coresOnline );
89-
9093 char freqBase [32 ], freqMax [32 ], freqBioslimit [32 ];
9194 if (cpu .frequencyBase > 0 )
9295 snprintf (freqBase , sizeof (freqBase ), "%.*f" , options -> freqNdigits , cpu .frequencyBase );
@@ -122,7 +125,7 @@ void ffPrintCPU(FFCPUOptions* options)
122125 ffStrbufDestroy (& cpu .vendor );
123126}
124127
125- bool ffParseCPUCPUOptions (FFCPUOptions * options , const char * key , const char * value )
128+ bool ffParseCPUCommandOptions (FFCPUOptions * options , const char * key , const char * value )
126129{
127130 const char * subKey = ffOptionTestPrefix (key , FF_CPU_MODULE_NAME );
128131 if (!subKey ) return false;
@@ -138,6 +141,12 @@ bool ffParseCPUCPUOptions(FFCPUOptions* options, const char* key, const char* va
138141 return true;
139142 }
140143
144+ if (ffStrEqualsIgnCase (subKey , "show-pe-core-count" ))
145+ {
146+ options -> showPeCoreCount = ffOptionParseBoolean (value );
147+ return true;
148+ }
149+
141150 return false;
142151}
143152
@@ -163,6 +172,12 @@ void ffParseCPUJsonObject(FFCPUOptions* options, yyjson_val* module)
163172 continue ;
164173 }
165174
175+ if (ffStrEqualsIgnCase (key , "showPeCoreCount" ))
176+ {
177+ options -> showPeCoreCount = yyjson_get_bool (val );
178+ continue ;
179+ }
180+
166181 ffPrintError (FF_CPU_MODULE_NAME , 0 , & options -> moduleArgs , FF_PRINT_TYPE_DEFAULT , "Unknown JSON key %s" , key );
167182 }
168183}
@@ -178,6 +193,9 @@ void ffGenerateCPUJsonConfig(FFCPUOptions* options, yyjson_mut_doc* doc, yyjson_
178193
179194 if (defaultOptions .freqNdigits != options -> freqNdigits )
180195 yyjson_mut_obj_add_uint (doc , module , "freqNdigits" , options -> freqNdigits );
196+
197+ if (defaultOptions .showPeCoreCount != options -> showPeCoreCount )
198+ yyjson_mut_obj_add_bool (doc , module , "showPeCoreCount" , options -> showPeCoreCount );
181199}
182200
183201void ffGenerateCPUJsonResult (FFCPUOptions * options , yyjson_mut_doc * doc , yyjson_mut_val * module )
@@ -256,7 +274,7 @@ void ffInitCPUOptions(FFCPUOptions* options)
256274 & options -> moduleInfo ,
257275 FF_CPU_MODULE_NAME ,
258276 "Print CPU name, frequency, etc" ,
259- ffParseCPUCPUOptions ,
277+ ffParseCPUCommandOptions ,
260278 ffParseCPUJsonObject ,
261279 ffPrintCPU ,
262280 ffGenerateCPUJsonResult ,
@@ -267,6 +285,7 @@ void ffInitCPUOptions(FFCPUOptions* options)
267285 options -> temp = false;
268286 options -> tempConfig = (FFColorRangeConfig ) { 60 , 80 };
269287 options -> freqNdigits = 2 ;
288+ options -> showPeCoreCount = false;
270289}
271290
272291void ffDestroyCPUOptions (FFCPUOptions * options )
0 commit comments