Google Chrome 71 / 72 Trail Dragging Issue when Maximized on Windows 7 2008 R2

Google Chrome 71 / 72 Trail Dragging Issue when Maximized on Windows 7 2008 R2

March 1, 2019 10 By Amir Joseph Sayes

I have been working recently on an issue for one of my clients whereby after updating to Chrome 71.0.3578 (and also in 72.0.3626) a display issue started to occur when Chrome is maximized; Any foreground window over Chrome leaves “trails” of itself over Chrome Window. If Chrome gets the focus again, the trails disappear. The issue does not happen if Chrome is not maximized.

We have seen this on XenDesktop Windows 7 virtual and physical machines  – Also this was seen on XenApp Windows 2008 R2 Servers. 


We have initially ruled out that a recent Windows Update has caused a conflict of some sort. We also could reproduce the problem on machines that has no Citrix VDA installed and using RDP rather than ICA, so it’s not ICA graphics related. In a VDI scenario, we have also confirmed that H/W Accelerator was indeed disabled and was not behind this behaviour.  

With that knowledge, we turned the attention to Chrome settings and flags, in particular the ones that are graphic related. 

The Solution

We could see that disabling Viz Display Compositor (OOP-D) resolves the issue. Although the flag is set to “Default” by default, which doesn’t mean “Enabled” or active, it appears that force disabling the flag is resolving the issue. Disabling this flag stops moving the display compositor from the browser to the GPU Processor.

This can be done manually by following the below steps:

  1. Go to Chrome and type: chrome://flags/
  2. Search for: Viz Display Compositor (OOP-D)
  3. Set it to disabled and relaunch – problem solved.

How Can We Automate This? 

Until Google fixes this issue, there are two scenarios where you can automate the solution for all affected users: 

Adding a Switch to Chrome Shortcut

You can automate setting the flag per user session by adding a switch to Chrome shortcut. If you use AppSense EM or equivalent,  you can add a “Pre-Desktop” action to re-create the Chrome shortcut in the start menu and pass the switch as below

“C:\Program Files (x86)\Google\Chrome\Application\chrome.exe” –disable-features=VizDisplayCompositor 

Note that if you check Chrome Flags, you will not see the flag marked as “disabled” in Chrome, mainly because the switch applies “on the fly” for that instance and does not save the flag into Chrome settings. 

Changing Chrome Settings Using Powershell

Alternatively if you need to fix this session wide as oppose to per shortcut, we can modify “Local State” JSON file, which sits in every user’s profile under “C:\Users\[USERID]\AppData\Local\Google\Chrome\User Data\Local State”

The below script would read the JSON file and modify it to disable the flag, the logic add the flag without touching any of the other settings the user may have already – this is particularly helpful if Chrome user settings are being personalised. 

You may want to add this as “Desktop Created” or “Process Start” if you are using Ivanti (Appsense) EM or equivalent 

#Get Google Local State settings 
$ChromePrefFile = "$env:localappdata\Google\Chrome\User Data\Local state"
#Read JSON file
$Settings = Get-Content -path $ChromePrefFile | ConvertFrom-Json

#Below is the logic to auto add the flag in case does not exist

if (($Settings | Get-Member | select -ExpandProperty name) -notcontains "browser") { 
    $Settings | Add-Member -MemberType NoteProperty -Name  "browser" -Value ([PSCustomObject]@{})
    $Settings.browser | Add-Member -MemberType NoteProperty -Name "enabled_labs_experiments" -Value ([PSCustomObject]@{}) 
    $Settings.browser.enabled_labs_experiments = @("enable-viz-display-compositor@2")
    $settings | ConvertTo-Json -Compress -Depth 20 | Set-Content $ChromePrefFile
elseif (($Settings.browser | Get-Member | select -ExpandProperty name) -notcontains "enabled_labs_experiments") {
    $Settings.browser | Add-Member -MemberType NoteProperty -Name "enabled_labs_experiments" -Value ([PSCustomObject]@{})
    $Settings.browser.enabled_labs_experiments = @("enable-viz-display-compositor@2")
    $settings | ConvertTo-Json -Compress -Depth 20 | Set-Content $ChromePrefFile
elseif ($Settings.browser.enabled_labs_experiments -notcontains "enable-viz-display-compositor@2"){
    $Settings.browser.enabled_labs_experiments = @("enable-viz-display-compositor@2")
    $settings | ConvertTo-Json -Compress -Depth 20 | Set-Content $ChromePrefFile