Froschs Blog

Computer und was das Leben sonst noch so zu bieten hat

Zur Website | Impressum

Chromium und das böse Mausrad

18. April 2017 um 1:14 Uhr von Atari-Frosch

Mit Chromium bin ich eigentlich recht zufrieden. Er ist nicht so träge wie Firefox, und er tut zumindest so, als sei er eine freie Version von Google Chrome (daß er das nicht ist, merkt man unter anderem daran, daß ein neuer Tab unabänderlich die Startseite von Google anzeigt, obwohl als „Homepage“ was anderes eingetragen ist). Ich kann mir einen anständigen Ad-Blocker installieren, JavaScript per Plugin pro Site ein- oder ausschalten und zur besseren Lesbarkeit mancher Seiten (zumindest für mich) gibt's Binnen-I-Be-Gone. Achja, und HTTPS Everywhere läuft auch mit. Chromium ist recht flott und frißt mir auch das RAM nicht weg.

Aber zumindest auf meiner Installation hat Chromium ein Problem, und das seit dem Upgrade auf Jessie: Mitten im Betrieb scheint Chromium immer irgendwann plötzlich einzufrieren. Was ich bisher herausgefunden habe:

  • Es passiert erst seit dem Upgrade von Debian Wheezy auf Debian Jessie.
  • Es passiert mit fluxbox als Window-Manager genauso wie unter icewm.
  • Es ist kein Crash, ergo gibt es keine Fehlermeldung oder Crash-ID. Nur das Neuzeichnen des Fensterinhalts (redraw) geht nicht mehr; in der Prozeßliste sieht alles normal aus.
  • Es passiert immer, wenn ich viel mit dem Mausrad auf einer Website herumscrolle, und meistens mitten im Scroll-Vorgang.
  • Es ist nicht von der gerade geöffneten Website abhängig, passiert also auf beliebigen Websites. Ich dachte ja zuerst, es hinge am Zusammenspiel mit einer WordPress-Installation (letztes Update) bzw. deren Plugins, aber das war's auch nicht gewesen.
  • Es hängt passiert auch mit unterschiedlichen Mäusen (Logitech, Watson).

Den Window-Manager icewm verwende ich ja schon durchgehend seit 20 Jahren. Allerdings hat der nun wohl schon seit längerer Zeit kein echtes Update mehr bekommen und wird immer nur noch gegen die aktuellen libs neu compiliert. Da wäre es denkbar gewesen, daß sich da was nicht mehr verträgt, weil icewm einfach zu alt ist. Um icewm nun also als Fehlerquelle auszuschließen, installierte ich mir fluxbox. xfce4, den ich zuerst im Sinn gehabt hatte, ist leider massiv mit systemd verbandelt, und den habe ich ja #ausgründen von meinen Installationen verbannt. Und kaum hatte ich mich nach ein paar Tagen einigermaßen (und teils grummelnd) an die Veränderungen gewöhnt und mir ein paar Dinge angepaßt, passierte es wieder.

Es, das heißt: Chromium reagiert plötzlich auf gar nichts mehr; die anderen Fenster können noch neu zeichnen. Es genügt aber nicht, Chromium aus dem xterm heraus mit -9 zu killen – normales kill genügt nicht! –, nein, ich muß mich aus dem Window-Manager ausloggen und X11 neu starten. Versuche ich, Chromium ohne kompletten WM-Neustart wieder zu öffnen, geht nur der äußere Fensterrahmen auf, und darinnen passiert – nichts. Die Prozeßliste sagt mir dagegen ganz unschuldig, wat willste denn, der Chromium ist doch da?

Was in fluxbox anders lief als in icewm: Auch das xterm konnte keinen redraw mehr durchführen (XChat und icedove/Thunderbird dagegen waren hier wie auch unter icewm nicht betroffen). Ich hatte dann eben noch einen Restart aus dem Menü heraus versucht, aber es änderte nichts daran, daß ein Neustart von Chromium rein optisch beim Aufbau des äußeren Fensterrahmens endete. Auch da mußte ich komplett aus X11 raus und es neu starten.

Ich kann an dieser Stelle nicht sagen, wie das wäre, wenn ich einen grafischen Login zu X11 hätte; ich starte den immer mit startx, das heißt, wenn ich mich auslogge, falle ich auf die Textkonsole zurück, auf der ich vorher startx aufgerufen hatte.

Erst nach dem X11-Neustart kommt auch Chromium wieder sauber hoch und, da er ja mit kill -9 abgeschossen worden war, fragt er brav, ob er einen Restore durchführen soll. Und dann gehen auch alle Tabs mit ihren vorherigen Inhalten wieder auf und alles ist wieder da. Bis zum nächsten Mal.

Generell scheint dieser Fehler nicht ganz so neu zu sein. So fand ich diese Meldung im Bugtracker von Chromium von Februar 2014: Use of mouse scroll wheel causes hangs. Das kommt mir dann doch sehr bekannt vor. Allerdings half dem Einreicher dann am Schluß ein Update, sodaß von den Entwicklern ein WONTFIX zurückkam. Da war man bei Version 35.0.1883.0.

Meine aktuelle Version ist 57.0.2987.98 Built on 8.7, running on Debian 8.7 (64-bit). Ich meine, seit dem Upgrade auf Jessie hätte ich schon mindestens ein Update auf Chromium bekommen, das den Fehler jedoch nicht behoben hat.

Auf den Chemnitzer Linuxtagen letzten Monat hatte ich den Bug bei mehreren Leuten angesprochen, allein um mal herauszufinden, ob der so allgemein bekannt ist. Ein Mensch hatte mir zur Installation von compton geraten, einem Compositor, mit dem Hinweis, daß icewm sowas nicht hat (fluxbox und xfce4 bringen jeweils einen eigenen mit). Man hatte mir erklärt, daß dieses Stück Software dafür sorgt, daß Anweisungen, die an die CPU gehen, aber eigentlich an die GPU, also den Prozessor der Grafikkarte, gehen sollten, an die GPU quasi umgebogen werden, sodaß sie an der richtigen Stelle und damit schneller ausgeführt werden können. Ich installierte also compton, hatte beim ersten Mal den Eindruck, daß da tatsächlich Dinge schneller liefen, aber dann verflog der Eindruck wieder. Ich vermute, es genügte nicht, das Ding einfach zu installieren, ich hätte da vielleicht auch noch was konfigurieren müssen, denn er wird mir nirgends angezeigt, weder in der Prozeßliste noch in chrome://gpu.

Apropos, unter icewm sieht chrome://gpu bei mir so aus:

Graphics Feature Status

Canvas: Hardware accelerated

Flash: Hardware accelerated

Flash Stage3D: Hardware accelerated

Flash Stage3D Baseline profile: Hardware accelerated

Compositing: Hardware accelerated

Multiple Raster Threads: Disabled

Native GpuMemoryBuffers: Software only. Hardware acceleration disabled

Rasterization: Software only. Hardware acceleration disabled

Video Decode: Software only, hardware acceleration unavailable

Video Encode: Hardware accelerated

VPx Video Decode: Software only, hardware acceleration unavailable

WebGL: Hardware accelerated

WebGL2: Hardware accelerated

Driver Bug Workarounds

adjust_src_dst_region_for_blitframebuffer

clear_uniforms_before_first_program_use

count_all_in_varyings_packing

decode_encode_srgb_for_generatemipmap

disable_framebuffer_cmaa

disable_post_sub_buffers_for_onscreen_surfaces

disable_texture_storage

dont_remove_invariant_for_fragment_input

force_cube_map_positive_x_allocation

init_texture_max_anisotropy

regenerate_struct_names

remove_invariant_and_centroid_for_essl3

scalarize_vec_and_mat_constructor_args

Problems Detected

Accelerated video decode is unavailable on Linux: 137247
Disabled Features: accelerated_video_decode

Clear uniforms before first program use on all platforms: 124764, 349137
Applied Workarounds: clear_uniforms_before_first_program_use

Mesa drivers in Linux handle varyings without static use incorrectly: 333885
Applied Workarounds: count_all_in_varyings_packing

Linux AMD drivers incorrectly return initial value of 1 for TEXTURE_MAX_ANISOTROPY: 348237
Applied Workarounds: init_texture_max_anisotropy

Always rewrite vec/mat constructors to be consistent: 398694
Applied Workarounds: scalarize_vec_and_mat_constructor_args

Linux AMD drivers handle struct scopes incorrectly: 403957
Applied Workarounds: regenerate_struct_names

Linux ATI drivers crash on binding incomplete cube map texture to FBO: 518889
Applied Workarounds: force_cube_map_positive_x_allocation

Linux Mesa drivers crash on glTexSubImage2D() to texture storage bound to FBO: 521904
Applied Workarounds: disable_texture_storage

Limited enabling of Chromium GL_INTEL_framebuffer_CMAA: 535198
Applied Workarounds: disable_framebuffer_cmaa

Disable partial swaps on Mesa drivers (detected with GL_VERSION): 339493
Applied Workarounds: disable_post_sub_buffers_for_onscreen_surfaces

Decode and encode before generateMipmap for srgb format textures on os except macosx: 634519
Applied Workarounds: decode_encode_srgb_for_generatemipmap

adjust src/dst region if blitting pixels outside read framebuffer on Linux AMD: 664740
Applied Workarounds: adjust_src_dst_region_for_blitframebuffer

AMD drivers in Linux require invariant qualifier to match between vertex and fragment shaders: 659326, 639760
Applied Workarounds: dont_remove_invariant_for_fragment_input, remove_invariant_and_centroid_for_essl3

Disable KHR_blend_equation_advanced until cc shaders are updated: 661715

Decode and Encode before generateMipmap for srgb format textures on Linux AMD: 634519
Applied Workarounds: decode_encode_srgb_for_generatemipmap

Accelerated rasterization has been disabled, either via blacklist, about:flags or the command line.
Disabled Features: rasterization

Raster is using a single thread.
Disabled Features: multiple_raster_threads

Native GpuMemoryBuffers have been disabled, either via about:flags or command line.
Disabled Features: native_gpu_memory_buffers

Version Information

Data exported 4/17/2017, 10:49:40 PM
Chrome version Chrome/57.0.2987.98
Operating system Linux 3.16.0-4-amd64
Software rendering list version 12.13
Driver bug list version 9.29
ANGLE commit id unknown hash
2D graphics backend Skia/57 ae9cc5d3588d52f4b371b55845704b25d88cf06d
Command Line Args --flag-switches-begin --google-profile-info --javascript-harmony --flag-switches-end

Driver Information

Initialization time 78
In-process GPU false
Passthrough Command Decoder false
Sandboxed false
GPU0 VENDOR = 0x1002, DEVICE= 0x791e
Optimus false
AMD switchable false
Driver vendor Mesa
Driver version 10.3.2
Driver date  
Pixel shader version 1.20
Vertex shader version 1.20
Max. MSAA samples 6
Machine model name  
Machine model version  
GL_VENDOR X.Org R300 Project
GL_RENDERER Gallium 0.4 on ATI RS690
GL_VERSION 2.1 Mesa 10.3.2
GL_EXTENSIONS GL_ARB_multisample GL_EXT_abgr GL_EXT_bgra GL_EXT_blend_color GL_EXT_blend_minmax GL_EXT_blend_subtract GL_EXT_copy_texture GL_EXT_polygon_offset GL_EXT_subtexture GL_EXT_texture_object GL_EXT_vertex_array GL_EXT_compiled_vertex_array GL_EXT_texture GL_EXT_texture3D GL_IBM_rasterpos_clip GL_ARB_point_parameters GL_EXT_draw_range_elements GL_EXT_packed_pixels GL_EXT_point_parameters GL_EXT_rescale_normal GL_EXT_separate_specular_color GL_EXT_texture_edge_clamp GL_SGIS_generate_mipmap GL_SGIS_texture_border_clamp GL_SGIS_texture_edge_clamp GL_SGIS_texture_lod GL_ARB_multitexture GL_IBM_multimode_draw_arrays GL_IBM_texture_mirrored_repeat GL_ARB_texture_cube_map GL_ARB_texture_env_add GL_ARB_transpose_matrix GL_EXT_blend_func_separate GL_EXT_fog_coord GL_EXT_multi_draw_arrays GL_EXT_secondary_color GL_EXT_texture_env_add GL_EXT_texture_filter_anisotropic GL_EXT_texture_lod_bias GL_INGR_blend_func_separate GL_NV_blend_square GL_NV_light_max_exponent GL_NV_texgen_reflection GL_NV_texture_env_combine4 GL_S3_s3tc GL_SUN_multi_draw_arrays GL_ARB_texture_border_clamp GL_ARB_texture_compression GL_EXT_framebuffer_object GL_EXT_texture_compression_s3tc GL_EXT_texture_env_combine GL_EXT_texture_env_dot3 GL_MESA_window_pos GL_NV_packed_depth_stencil GL_NV_texture_rectangle GL_ARB_depth_texture GL_ARB_occlusion_query GL_ARB_shadow GL_ARB_texture_env_combine GL_ARB_texture_env_crossbar GL_ARB_texture_env_dot3 GL_ARB_texture_mirrored_repeat GL_ARB_window_pos GL_EXT_stencil_two_side GL_EXT_texture_cube_map GL_NV_fog_distance GL_APPLE_packed_pixels GL_APPLE_vertex_array_object GL_ARB_draw_buffers GL_ARB_fragment_program GL_ARB_fragment_shader GL_ARB_shader_objects GL_ARB_vertex_program GL_ARB_vertex_shader GL_ATI_draw_buffers GL_ATI_texture_env_combine3 GL_ATI_texture_float GL_EXT_shadow_funcs GL_EXT_stencil_wrap GL_MESA_pack_invert GL_MESA_ycbcr_texture GL_NV_primitive_restart GL_ARB_fragment_program_shadow GL_ARB_half_float_pixel GL_ARB_occlusion_query2 GL_ARB_point_sprite GL_ARB_shading_language_100 GL_ARB_sync GL_ARB_texture_non_power_of_two GL_ARB_vertex_buffer_object GL_ATI_blend_equation_separate GL_EXT_blend_equation_separate GL_OES_read_format GL_ARB_pixel_buffer_object GL_ARB_texture_float GL_ARB_texture_rectangle GL_ATI_texture_compression_3dc GL_EXT_pixel_buffer_object GL_EXT_texture_compression_dxt1 GL_EXT_texture_mirror_clamp GL_EXT_texture_rectangle GL_EXT_texture_sRGB GL_ARB_framebuffer_object GL_EXT_framebuffer_blit GL_EXT_framebuffer_multisample GL_EXT_packed_depth_stencil GL_ARB_vertex_array_object GL_ATI_separate_stencil GL_ATI_texture_mirror_once GL_EXT_gpu_program_parameters GL_EXT_texture_sRGB_decode GL_OES_EGL_image GL_ARB_copy_buffer GL_ARB_half_float_vertex GL_ARB_instanced_arrays GL_ARB_map_buffer_range GL_ARB_texture_rg GL_ARB_texture_swizzle GL_ARB_vertex_array_bgra GL_EXT_texture_swizzle GL_EXT_vertex_array_bgra GL_NV_conditional_render GL_ARB_ES2_compatibility GL_ARB_debug_output GL_ARB_draw_elements_base_vertex GL_ARB_explicit_attrib_location GL_ARB_fragment_coord_conventions GL_ARB_provoking_vertex GL_ARB_sampler_objects GL_ARB_vertex_type_2_10_10_10_rev GL_EXT_provoking_vertex GL_EXT_texture_snorm GL_MESA_texture_signed_rgba GL_NV_texture_barrier GL_ARB_get_program_binary GL_ARB_robustness GL_ARB_separate_shader_objects GL_ANGLE_texture_compression_dxt3 GL_ANGLE_texture_compression_dxt5 GL_ARB_compressed_texture_pixel_storage GL_ARB_internalformat_query GL_ARB_map_buffer_alignment GL_ARB_texture_storage GL_EXT_framebuffer_multisample_blit_scaled GL_AMD_shader_trinary_minmax GL_ARB_clear_buffer_object GL_ARB_explicit_uniform_location GL_ARB_invalidate_subdata GL_ARB_vertex_attrib_binding GL_KHR_debug GL_ARB_buffer_storage GL_ARB_multi_bind GL_ARB_texture_mirror_clamp_to_edge GL_ARB_vertex_type_10f_11f_11f_rev GL_ARB_texture_barrier
Disabled Extensions GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent
Window system binding vendor SGI
Window system binding version 1.4
Window system binding extensions GLX_ARB_create_context GLX_ARB_create_context_profile GLX_ARB_fbconfig_float GLX_ARB_framebuffer_sRGB GLX_ARB_multisample GLX_EXT_create_context_es2_profile GLX_EXT_framebuffer_sRGB GLX_EXT_import_context GLX_EXT_texture_from_pixmap GLX_EXT_visual_info GLX_EXT_visual_rating GLX_MESA_copy_sub_buffer GLX_OML_swap_method GLX_SGI_swap_control GLX_SGIS_multisample GLX_SGIX_fbconfig GLX_SGIX_pbuffer GLX_SGIX_visual_select_group GLX_INTEL_swap_event
Window manager IceWM 1.3.8 (Linux 3.12.18+/x86_64)
Compositing manager No
Direct rendering Yes
Reset notification strategy 0x8261
GPU process crash count 0
System visual ID 33
RGBA visual ID 105

Compositor Information

Tile Update Mode One-copy
Partial Raster Enabled

GpuMemoryBuffers Status

ATC Software only
ATCIA Software only
DXT1 Software only
DXT5 Software only
ETC1 Software only
R_8 Software only
RG_88 Software only
BGR_565 Software only
RGBA_4444 Software only
RGBX_8888 Software only
RGBA_8888 Software only
BGRX_8888 Software only
BGRA_8888 Software only
YVU_420 Software only
YUV_420_BIPLANAR Software only
UYVY_422 Software only

Log Messages

[14957:14957:0417/223138.093208:ERROR:sandbox_linux.cc(343)] : InitializeSandbox() called with multiple threads in process gpu-process.

Die Karte ist laut lspci:

01:05.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] RS690 [Radeon X1200]

Da fällt mir als erstes ins Auge, daß die GPU-Auskunft von Chromium mir was von einem Mesa-Treiber erzählt. Nun sind Grafikkartentreiber wirklich nicht mein Spezialgebiet, aber Mesa ist meines Wissens nach eine Art Standard-Treiber, der genommen wird, wenn sich nichts Besseres findet. Erste Frage des Unwissenden: Warum findet sich für eine ATI Radeon X1200 bzw. Radeon S690 kein expliziter Treiber?

Ja, ich habe gegoogelt. Und ich könnte das vermutlich noch tage- und wochenlang tun, ohne eine brauchbare Lösung zu finden. Ohne Kenntnisse über Grafikkartentreiber komme ich da wohl nicht wirklich weiter. Zumal ja nicht klar ist, ob das das eigentliche Problem lösen würde.

Dann sehe ich, daß da einiges an Beschleunigungsmöglichkeiten der Karte wohl nicht genutzt wird, was wiederum dem „falschen“ Treiber zuzurechnen sein dürfte. Grafikbeschleunigung, Scrollen im Fenster … da könnte was dran sein. Aber wie gesagt, ich weiß da einfach zu wenig drüber, und wild herumspekulieren bringt mich auch nicht weiter.

Die Fehlermeldung unten am Schluß aus dem syslog kann ich auch nicht interpretieren. Wieder was, wofür man Kenntnisse über Grafikkarten und ihre Treiber haben müßte.

Eine eher radikale Lösung wäre wohl, eine andere Grafikkarte in den PC einzubauen. Ja, ich hätte was Passendes. Aber bevor ich meinen PC zerlege, wüßte ich doch gern, ob sich das Problem auch eleganter lösen läßt.

Jemand 'ne Idee?

4 Kommentare zu “Chromium und das böse Mausrad”

  1. SackOhneSenf quakte:

    Erst einmal zur Startseite unter Chromium: Ich hatte da noch nie ein Problem damit und konnte die auf jeden Wert setzen der mir bislang passte. Meist habe ich da about:blank oder aber ein lokales File mit Links auf die Seiten, die ich am häufigsten besuche …

    … bis ich diese Startseite mit einem Plug-In ganz ersetz habe, das stellt mir als Startseite den Bookmark Ordner als Seite mit Links dar. Das Plug-In nennt sich „Humble New Tab Page“

    … und da liegt vielleicht auch dein Problem, neben der Angabe der Homepage gibt es noch ein Schalter: On Startup open new Tab Page … und dann kannst du Home Page eintragen was immer du willst, du bekommst immer die New Tab Page, die im Standard die Google Suche aufruft (oder genauer gesagt die Standard Suche).


  2. SackOhneSenf quakte:

    Als zweites möchte ich sagen, dass ich einen ganz ähnlichen Fehler hatte, nicht nur in Chromium auch einige andere Anwendungen die nach dem neu öffnen nur noch den Rahmen aber keinen Inhalt mehr brachten.

    Ich weiß nicht genau was die Ursache dafür ist, aber der Fehler verschwand immer kurzzeitig nach dem ich den Empfänger meiner schnurlosen Tastatur/Maus abgezogen habe, zwei Minuten wartete und dann neu angeschlossen habe.

    Nach dem Austausch eines USB Hubs war es zwar besser aber hin und wieder froren einige Anwendungen doch wieder komplett ein (so neben Chromium etwa Synaptic). Manchmal lies sich auch gar keine weitere Bedienung über Maus oder Tastatur vornehmen. Auf einer anderen Konsole oder per SSH Zugang ging aber alles.

    Ich habe dann eine andere schnurlose Tastatur/Maus angeschlossen und hatte seither den Fehler nicht mehr! Ich habe daher auch nicht weiter nach dem Problem gesucht.

    Vielleicht hilft das ja das Problem einzugrenzen.

    Das folgende hatte ich bis dahin herausgefunden:

    Der Grund warum es gerade Chromium trifft scheint zu sein, dass die Anwendung sich in einem Zustand befindet, in dem sie auf ein ganz bestimmtes Event von der Tastatur/Maus wartet. In diesem Zustand werden offensichtlich keine weiteren (Draw) Events bearbeitet. Ich bin sicher es hat nichts mit der Grafikkarte oder dem Grafiktreiber zu tun.

    Hinzu kommt dass Chromium auch durch schließen des Fensters oder einen Kill nicht vollständig geschlossen wird. Es bleibt immer noch ein Prozess im Speicher (siehe Prozessliste – etwa htop, ich tippe auf Schnellstarter). Schießt man diesen weiteren Chromium Prozess (der möglicherweise nicht mit user rechten läuft) ab und startet Chromium nach einer Wartezeit von mindestens 60 Sekunden neu, wird auch der Fensterinhalt wieder angezeigt … sofern du es geschafft hast den X Server aus dem Modus raus zu holen in dem er auf ein bestimmtes Event wartet.


  3. SackOhneSenf quakte:

    Ach noch eine Anmerkung, das Mausrad wird unter Linux als Maus-Button Events verarbeitet (Button 4 + 5 wenn ich das richtig weiß).

    Der Ablauf dieser Maus/Keyboard Events ist ein Graus, wenn da etwas durcheinander kommt hängt sich so manche Anwendung komplett auf und zeichnet einfach ihr Fensterinhalt nicht mehr neu. Man kann es provozieren, aber ganz verstanden habe ich es noch nicht.

    … und noch was, bei deinem betreffenden Debian Update mit dem der Fehler erst auftrat, hat sich etwas wichtiges geändert: der Linux-Kernel … und im Linux Kernel die Verarbeitung von Tastatur und Maus Ereignissen. Ähnliches hatte bei mir zur Folge dass ältere X Server nicht mehr liefen und auch einen Update brauchten. Aber nicht etwa der Grafiktreiber, der Input Treiber für Maus und Tastatur bzw. der Input Event Treiber verursachten die Probleme.


  4. SackOhneSenf quakte:

    Nebenbei noch eine kleine Anmerkung, deine Auffassung über die Funktion von Mesa ist so nicht ganz richtig. Näheres findet sich da auch in der Wikipedia.

    Etwa hier: https://en.wikipedia.org/wiki/Mesa_(computer_graphics)


Kommentieren

Bitte beachte die Kommentarregeln!

XHTML: Du kannst diese Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>