Opened 5 years ago

Last modified 4 weeks ago

#15920 new bug

app_server: back buffer is flushed before drawing is finished

Reported by: X512 Owned by: axeld
Priority: normal Milestone: Unscheduled
Component: Servers/app_server Version: R1/Development
Keywords: Cc:
Blocked By: #15574, #15631, #15645 Blocking:
Platform: All

Description

This is hrev54101.

In some situations app_server screen back buffer is flushed before drawing is finished causing flickering artifacts:

  1. When moving cursor (#15645).
  2. When move window (#15631).
  3. When BView::DrawBitmap is called on overlapping window with lower z-order (#15574).

I created test program that helps to catch bug. Nested red, green and blue rectangles should be displayed. Flickering or artifacts means that this bug is triggered.

Attachments (1)

BackBufferTest.cpp (1.7 KB ) - added by X512 5 years ago.

Download all attachments as: .zip

Change History (4)

by X512, 5 years ago

Attachment: BackBufferTest.cpp added

comment:1 by X512, 5 years ago

Introducing second back buffer that contains same contents as front buffer, but without overlay layer seems to be only solution that completely fix problem. It will also significantly speed up screen capture (BScreen::ReadBitmap), because no front buffer reading will be needed.

Last edited 5 years ago by X512 (previous) (diff)

comment:2 by waddlesplash, 5 years ago

At least in the case of the cursor, when we are using a video driver that supports accelerated cursor (like intel_extreme) that is not a problem. The BScreen::ReadBitmap case does sound relevant though.

An additional screen buffer sounds OK as long as we can fall back to not using it under especially low memory, as I think we already do for the back/front buffer.

comment:3 by waddlesplash, 4 weeks ago

Blocked By: 15574, 15631, 15645 added
Note: See TracTickets for help on using tickets.