On 12/29/2016 11:24 AM, Programmingkid wrote: > Programs running inside of QEMU can sometimes use more CPU time than is really > needed. To solve this problem, we just need to throttle the virtual CPU. This > feature will stop laptops from burning up. > > This patch adds a menu called Speed that has menu items from 10 to 1. They > represent the speed options. 10 is full speed and 1 is slowest.
Why not make it a type-in box where the user specifies a percentage, up to 100 (unthrottled)? Is this feature present in the other GUIs, such as the gtk view? I'm reluctant to invent features for the less-tested cocoa interface that are not FIRST present on other interfaces. > > Signed-off-by: John Arbuckle <programmingk...@gmail.com> > --- > ui/cocoa.m | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 56 insertions(+) > > +/* Used by the Speed menu items */ > +- (void)adjustSpeed:(id)sender > +{ > + /* 10 has two digits in it - plus the NULL termination at the end */ > + const int max_title_size = 3; > + char menu_item_title[max_title_size]; > + int speed, menu_number, count, item; > + NSMenu *menu; > + NSArray *itemArray; > + > + // uncheck all the menu items in the Speed menu > + menu = [sender menu]; > + if(menu != nil) > + { > + count = [[menu itemArray] count]; TAB damage. > + itemArray = [menu itemArray]; > + for(item = 0; item < count; item++) // unselect each item Space after 'for'. > + [[itemArray objectAtIndex: item] setState: NSOffState]; > + } > + > + // check the menu item > + [sender setState: NSOnState]; > + > + // get the menu number > + snprintf(menu_item_title, max_title_size, "%s", [[sender title] > cStringUsingEncoding: NSASCIIStringEncoding]); > + sscanf(menu_item_title, "%d", &menu_number); Eew. That just feels fragile. > + > + /* Calculate the speed */ > + // inverse relationship between menu item number and speed > + speed = -1 * menu_number + 10; > + speed = speed * 10; > + cpu_throttle_set(speed); > + COCOA_DEBUG("cpu throttling at %d%c\n", cpu_throttle_get_percentage(), > '%'); Again, I think that '100%' makes more intuitive sense than '10' for knowing that my VM is running unthrottled. The amount of math you have to do to transform the menu numbers into the cpu_throttle_set() call is a sign that your mapping is rather complex compared to a more intuitive setup. > +} > + > @end > > > @@ -1316,6 +1353,25 @@ int main (int argc, const char * argv[]) { > [menuItem setSubmenu:menu]; > [[NSApp mainMenu] addItem:menuItem]; > > + // Speed menu > + menu = [[NSMenu alloc] initWithTitle:@"Speed"]; > + menuItem = [[[NSMenuItem alloc] initWithTitle:@"10 (fastest)" > action:@selector(adjustSpeed:) keyEquivalent:@""] autorelease]; > + [menuItem setState: NSOnState]; > + [menu addItem: menuItem]; > + [menu addItem: [[[NSMenuItem alloc] initWithTitle:@"9" > action:@selector(adjustSpeed:) keyEquivalent:@""] autorelease]]; > + [menu addItem: [[[NSMenuItem alloc] initWithTitle:@"8" > action:@selector(adjustSpeed:) keyEquivalent:@""] autorelease]]; And this adds a LOT of menu items, compared to what you could get if a single menu item opens up a dialog box for typing in a number that is validated to be between 1 and 100. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature