From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 59619 invoked by alias); 19 Jun 2015 04:36:16 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 59610 invoked by uid 89); 19 Jun 2015 04:36:16 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL,BAYES_00,KAM_LAZY_DOMAIN_SECURITY,RCVD_IN_DNSWL_LOW autolearn=no version=3.3.2 X-HELO: mail-qk0-f178.google.com Received: from mail-qk0-f178.google.com (HELO mail-qk0-f178.google.com) (209.85.220.178) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Fri, 19 Jun 2015 04:36:15 +0000 Received: by qkhu186 with SMTP id u186so55443279qkh.0 for ; Thu, 18 Jun 2015 21:36:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=5v+JY3WhMxqPZ8v/l2bIAfy4GADP+AYViZ3HnueM7hk=; b=Zs9ZqbR+Tu48DNyvS+BfAi89Ijw6AHcWHzsQ3CjiTeERf62rFs9aOalNIZJE1O13aZ tY+AUnQyXozXh3XUDdjUdD7n5Rtu+M+OqUtoc5Do8AxhDtq264EMCL8cwO644p5kw4sZ 90roy4dt67K37Tz/6y6DG3wedKh074/WPZKBBOGscddFs0uWMM5k1ACcql+tJ3NNhFj7 ypMQOTpMCDjWU+Jgi3fgJiFUWhIz3lXh+h5LGPEBIyeMYn+bEzJWS+82MBUohapu8h1I gUqsyq3M5R3as4HJiDecQJG/KYQx66UTK19Wa3fr6G4nuMeorDet0+I498+yVKQTss3/ PN5g== X-Gm-Message-State: ALoCoQndX9DjOgQ6eHUzQezM+xC4DP6lFOgcwSIWAbPeQNMZp7QZRHNDnSi6CdPpO7JY/OK8Aee6 X-Received: by 10.55.33.203 with SMTP id f72mr15355697qki.52.1434688572915; Thu, 18 Jun 2015 21:36:12 -0700 (PDT) Received: from localhost.localdomain (ool-4353acd8.dyn.optonline.net. [67.83.172.216]) by mx.google.com with ESMTPSA id z189sm5037010qhd.44.2015.06.18.21.36.11 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 18 Jun 2015 21:36:12 -0700 (PDT) From: Patrick Palka To: gdb-patches@sourceware.org Cc: Patrick Palka Subject: [PATCH] Fix TUI flicker resulting from frequent frame changes (PR tui/13378) Date: Fri, 19 Jun 2015 04:36:00 -0000 Message-Id: <1434688566-2549-1-git-send-email-patrick@parcs.ath.cx> X-SW-Source: 2015-06/txt/msg00399.txt.bz2 This patch fixes the perceived flicker of the TUI screen (and subsequent slowdown) that most apparent when running an inferior while a conditional breakpoint is active. The cause of the flicker is that each internal event GDB responds to is accompanied by a multitude of calls to select_frame() and each such call forces the TUI screen to be refreshed. We would like to not update the TUI screen after each such frame change. The fix for this issue is pretty straightforward: do not update the TUI screen when select_frame() gets called while synchronous execution of the inferior is enabled. This works because synchronous execution remains enabled during the processing of internal events. And since during synchronous execution the user has no control of the TUI anyway, it does not hurt to avoid updating the screen then. The select_frame hook is still undesirable and should be removed, but in the meantime this fix is seemingly an effective approximation of a more disciplined approach of updating the TUI screen. [ When the inferior is running while sync_execution is disabled, e.g. via "continue&" it looks like GDB lacks access to frame information thorughout -- and the hook never gets called -- so seemingly no worries in that case. ] [ up/down etc still work properl of course ] [ I am not sure that the change in tui_on_sync_execution_done is necessary/desirable. It seems normal_stop already calls select_frame (get_current_frame ()) after sync_execution is toggled off. ] gdb/ChangeLog: * tui/tui-hooks.c (tui_selected_frame_level_changed_hook): Don't update the screen while synchronous execution is active. * tui/tui-interp.c (tui_on_sync_execution_done): Make sure that TUI's frame information is refreshed. --- gdb/tui/tui-hooks.c | 8 ++++++++ gdb/tui/tui-interp.c | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/gdb/tui/tui-hooks.c b/gdb/tui/tui-hooks.c index 8d84551..ca8358d 100644 --- a/gdb/tui/tui-hooks.c +++ b/gdb/tui/tui-hooks.c @@ -133,6 +133,14 @@ tui_selected_frame_level_changed_hook (int level) if (level < 0) return; + /* Do not respond to frame changes occurring while synchronous execution is + enabled. Updating the screen in response to each such frame change just + results in pointless flicker and slowdown. Once synchronous execution is + done this hook will get called again to ensure that our frame information + is refreshed. */ + if (sync_execution) + return; + old_chain = make_cleanup_restore_target_terminal (); target_terminal_ours_for_output (); diff --git a/gdb/tui/tui-interp.c b/gdb/tui/tui-interp.c index 1a5639d..2477536 100644 --- a/gdb/tui/tui-interp.c +++ b/gdb/tui/tui-interp.c @@ -107,6 +107,11 @@ tui_on_sync_execution_done (void) { if (!interp_quiet_p (tui_interp)) display_gdb_prompt (NULL); + + /* Make sure our frame information is refreshed now that synchronous + execution is done. */ + if (tui_active) + deprecated_selected_frame_level_changed_hook (0); } /* Observer for the command_error notification. */ -- 2.4.4.410.g43ed522.dirty