[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] ui/cocoa.m: add Speed menu
From: |
Eric Blake |
Subject: |
Re: [Qemu-devel] [PATCH] ui/cocoa.m: add Speed menu |
Date: |
Thu, 29 Dec 2016 11:35:23 -0600 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.5.1 |
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 <address@hidden>
> ---
> 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