Auto merge of #22798 - jdm:webgl-trace, r=nox

Report all messages processed by the webgl thread.

This might be useful for figuring out what a WebGL-based page is doing when it's not behaving correctly.

---
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [x] These changes do not require tests because they are debug-logging changes only.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/22798)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2019-02-11 11:39:12 -05:00 committed by GitHub
commit 1ec2de258d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 36 additions and 6 deletions

View file

@ -117,6 +117,7 @@ impl<VR: WebVRRenderHandler + 'static> WebGLThread<VR> {
/// Handles a generic WebGLMsg message
#[inline]
fn handle_msg(&mut self, msg: WebGLMsg, webgl_chan: &WebGLChan) -> bool {
trace!("processing {:?}", msg);
match msg {
WebGLMsg::CreateContext(version, size, attributes, result_sender) => {
let result = self.create_webgl_context(version, size, attributes);
@ -1104,7 +1105,7 @@ impl WebGLImpl {
alpha_treatment,
y_axis_treatment,
pixel_format,
Cow::Borrowed(data),
Cow::Borrowed(&*data),
);
ctx.gl()
@ -1144,7 +1145,7 @@ impl WebGLImpl {
alpha_treatment,
y_axis_treatment,
pixel_format,
Cow::Borrowed(data),
Cow::Borrowed(&*data),
);
ctx.gl()

View file

@ -9,7 +9,9 @@ use offscreen_gl_context::{GLContextAttributes, GLLimits};
use pixels::PixelFormat;
use serde_bytes::ByteBuf;
use std::borrow::Cow;
use std::fmt;
use std::num::NonZeroU32;
use std::ops::Deref;
use webrender_api::{DocumentId, ImageKey, PipelineId};
/// Helper function that creates a WebGL channel (WebGLSender, WebGLReceiver) to be used in WebGLCommands.
@ -173,6 +175,33 @@ impl WebGLMsgSender {
}
}
#[derive(Deserialize, Serialize)]
pub struct TruncatedDebug<T>(T);
impl<T> From<T> for TruncatedDebug<T> {
fn from(v: T) -> TruncatedDebug<T> {
TruncatedDebug(v)
}
}
impl<T: fmt::Debug> fmt::Debug for TruncatedDebug<T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let mut s = format!("{:?}", self.0);
if s.len() > 20 {
s.truncate(20);
s.push_str("...");
}
write!(f, "{}", s)
}
}
impl<T> Deref for TruncatedDebug<T> {
type Target = T;
fn deref(&self) -> &T {
&self.0
}
}
/// WebGL Commands for a specific WebGLContext
#[derive(Debug, Deserialize, Serialize)]
pub enum WebGLCommand {
@ -284,7 +313,7 @@ pub enum WebGLCommand {
alpha_treatment: Option<AlphaTreatment>,
y_axis_treatment: YAxisTreatment,
pixel_format: Option<PixelFormat>,
data: IpcSharedMemory,
data: TruncatedDebug<IpcSharedMemory>,
},
TexSubImage2D {
target: u32,
@ -300,7 +329,7 @@ pub enum WebGLCommand {
alpha_treatment: Option<AlphaTreatment>,
y_axis_treatment: YAxisTreatment,
pixel_format: Option<PixelFormat>,
data: IpcSharedMemory,
data: TruncatedDebug<IpcSharedMemory>,
},
DrawingBufferWidth(WebGLSender<i32>),
DrawingBufferHeight(WebGLSender<i32>),

View file

@ -708,7 +708,7 @@ impl WebGLRenderingContext {
alpha_treatment,
y_axis_treatment,
pixel_format: pixels.pixel_format,
data: pixels.data,
data: pixels.data.into(),
});
if let Some(fb) = self.bound_framebuffer.get() {
@ -783,7 +783,7 @@ impl WebGLRenderingContext {
alpha_treatment,
y_axis_treatment,
pixel_format: pixels.pixel_format,
data: pixels.data,
data: pixels.data.into(),
});
}