i-rinat / freshplayerplugin

ppapi2npapi compatibility layer
MIT License
727 stars 52 forks source link

freshplayerplugin is smoother on intel GPUs then nvidia #269

Closed gaining closed 8 years ago

gaining commented 9 years ago

This is not really an issue but an observation. There are 4 PCs on which I test this at home using this site: http://www.miniclip.com/games/gas-and-sand/en/ to find out how smooth the pcs can play this 3D flash game. It is always smoother on Intel GPUs then nvidias . There are no lags at all on intel HD 3000 and 4600 but on nvidia gforce 8600GT (I know that one's an old GPU but game run smoothly in chrome using it) and nvidia nvidia gforce 840m. I have the libvdpau1 driver installed.

This is my freshwrapper.conf file stored in /etc:

# Configuration options for FreshPlayerPlugin

# This configuration file is optional. Wrapper will search for it first
# in ~/.config/freshwrapper.conf, then in /etc/freshwrapper.conf.
# If wrapper fails to find configuration, it will use default values,
# which you can find below

# Audio buffer is used to continuously provide sound adapter with data.
# Values too low may lead to buffer underruns and stuttering.  Values
# too high will lead to noticeable latency. Usually plugin selects size
# on its own, but you may override bounds here

# lower bound for audio buffer size, in milliseconds
audio_buffer_min_ms = 20

# higher bound of audio buffer size, in milliseconds
audio_buffer_max_ms = 500

# output sound through JACK. If enabled, only JACK will be tried, and if
# your machine doesn't have it, there would be no sound, and no sync
audio_use_jack = 0

# whenever to automatically connect application ports to system ones.
# If you set this to one, no sound would be produces until you make
# connection some way
jack_autoconnect_ports = 1

# JACK server name. Omit the option to use default value
#
# jack_server_name = "default"

# starts JACK server on demand
jack_autostart_server = 1

# Path to the Pepper Flash plugin.
# If the option is absent, freshwrapper will search for Pepper Flash in
# a number of location where it could be. Usually that's enough, but if
# not, you should manually enter the right path. Multiple paths could
# be specified, separated by colon.
pepperflash_path = "/opt/google/chrome/PepperFlash/libpepflashplayer.so"

# "Command-line" arguments for Flash
flash_command_line = "enable_hw_video_decode=1,enable_stagevideo_auto=1"

# enable 3d and stage 3d
enable_3d = 1

# enable hardware-accelerated video decoding. Requires 3d to really work
enable_hwdec = 1

# when set to 1, limits output to warnings and errors only
quiet = 0

# When multiple monitors with different resolutions are used, size
# of fullscreen window can vary. But some Flash movies request these
# parameters once at startup and rely on them to be correct. By default,
# if zeros are used here, freshwrapper will select minimal width and
# height across all monitors.
fullscreen_width = 0
fullscreen_height = 0

# Enables DNS query case randomization to partially protect against DNS
# poisoning attacks. It was reported that some Mikrotik routers do not
# support this trick. Set parameter to 0 if you have an affected model
randomize_dns_case = 0

# scaling factor (floating point value) used to convert screen pixels
# to device independent pixels. You may need it for displays with
# high DPI
device_scale = 1

# method org.freedesktop.ScreenSaver.SimulateUserActivity() in KDE 5 seems
# to have no effect unless GetSessionIdleTime() called afterwards. Set
# parameter to 1 to call latter
quirk_plasma5_screensaver = 0

# whenever to use windowed plugin mode
enable_windowed_mode = 1

# whenever XEmbed used in windowed mode (if browser advertises its support)
enable_xembed = 1

# if set to 1, fullscreen window will be kept always above browser, and hidden
# from taskbar and pager
tie_fullscreen_window_to_browser = 1

# enable using of VA-API for hardware accelerated video decoding
enable_vaapi = 1

# enable using of VDPAU for hardware accelerated video decoding
enable_vdpau = 1

# microseconds to wait after vsync event
vsync_afterwait_us = 0

# fullscreen transition delay, in milliseconds
fs_delay_ms = 300

# wait for vertical blank event before drawing on screen
enable_vsync = 1
i-rinat commented 9 years ago

At the moment graphics code changes GL context before and after each GL command. And while integrated videoadapters don't feel that so much due to all data reside in the same memory, discrete can have severe performance degradation. Driver will have to sync state between CPU and GPU memory.

Commands need to be queued with smart flushing, as done in Chrome/Chromium. Perhaps, I'll do that some day. Or reuse code from Chrome, once I get how it works.

i-rinat commented 8 years ago

(created an issue about command buffering: #332)