diff --git a/lib/x11/ext/render.js b/lib/x11/ext/render.js index cc97876..0758385 100644 --- a/lib/x11/ext/render.js +++ b/lib/x11/ext/render.js @@ -8,6 +8,15 @@ var x11 = require('..'); // TODO: move to templates exports.requireExt = function(display, callback) { + + function captureStack() + { + var err = new Error; + //err.name = reqName; + Error.captureStackTrace(err, arguments.callee); + display.client.seq2stack[display.client.seq_num] = err.stack; + } + var X = display.client; X.QueryExtension('RENDER', function(ext) { @@ -19,6 +28,7 @@ exports.requireExt = function(display, callback) ext.QueryVersion = function(clientMaj, clientMin, callback) { X.seq_num++; + captureStack(); X.pack_stream.pack('CCSLL', [ext.majorOpcode, 0, 3, clientMaj, clientMin]); X.replies[X.seq_num] = [ function(buf, opt) { @@ -33,6 +43,7 @@ exports.requireExt = function(display, callback) ext.QueryPictFormat = function(callback) { X.seq_num++; + captureStack(); X.pack_stream.pack('CCS', [ext.majorOpcode, 1, 1]); X.replies[X.seq_num] = [ function (buf, opt) { @@ -63,6 +74,7 @@ exports.requireExt = function(display, callback) ext.QueryFilters = function(callback) { X.seq_num++; + captureStack(); X.pack_stream.pack('CCSL', [ext.majorOpcode, 29, 2, display.screen[0].root]); X.replies[X.seq_num] = [ function(buf, opt) { @@ -119,6 +131,7 @@ exports.requireExt = function(display, callback) ext.CreatePicture = function(pid, drawable, pictformat, values) { X.seq_num++; + captureStack(); var mask = 0; var reqLen = 5; // + (values + pad)/4 var format = 'CCSLLLL'; @@ -160,6 +173,7 @@ exports.requireExt = function(display, callback) ext.SetPictureFilter = function(pid, name, filterParams) { X.seq_num++; + captureStack(); var reqLen = 2; //header + params + 1xStopfix+2xColors var format = 'CCSLa'; var params = [ext.majorOpcode, 30, reqLen, pid]; @@ -183,6 +197,7 @@ exports.requireExt = function(display, callback) { // TODO: merge with linear gradient X.seq_num++; + captureStack(); var reqLen = 9+stops.length*3; //header + params + 1xStopfix+2xColors var format = 'CCSLLLLLLLL'; var params = [ext.majorOpcode, 35, reqLen, pid]; @@ -217,6 +232,7 @@ exports.requireExt = function(display, callback) ext.LinearGradient = function(pid, p1, p2, stops) { X.seq_num++; + captureStack(); var reqLen = 7+stops.length*3; //header + params + 1xStopfix+2xColors var format = 'CCSLLLLLL'; var params = [ext.majorOpcode, 34, reqLen, pid]; @@ -250,6 +266,7 @@ exports.requireExt = function(display, callback) ext.ConicalGradient = function(pid, center, angle, stops) { X.seq_num++; + captureStack(); var reqLen = 6+stops.length*3; //header + params + 1xStopfix+2xColors var format = 'CCSLLLLL'; var params = [ext.majorOpcode, 36, reqLen, pid]; @@ -282,6 +299,7 @@ exports.requireExt = function(display, callback) ext.FillRectangles = function(op, pid, color, rects) { X.seq_num++; + captureStack(); var reqLen = 5+rects.length/2; var format = 'CCSCxxxLSSSS'; var params = [ext.majorOpcode, 26, reqLen, op, pid]; @@ -302,6 +320,7 @@ exports.requireExt = function(display, callback) ext.Composite = function(op, src, mask, dst, srcX, srcY, maskX, maskY, dstX, dstY, width, height) { X.seq_num++; + captureStack(); X.pack_stream.pack( 'CCSCxxxLLLssssssSS', [ext.majorOpcode, 8, 9, op, src, mask, dst, srcX, srcY, maskX, maskY, dstX, dstY, width, height] @@ -312,6 +331,7 @@ exports.requireExt = function(display, callback) ext.Trapezoids = function(op, src, srcX, srcY, dst, maskFormat, trapz) { X.seq_num++; + captureStack(); var format = 'CCSCxxxLLLss'; var params = [ext.majorOpcode, 10, 6+trapz.length, op, src, dst, maskFormat, srcX, srcY]; for (var i=0; i < trapz.length; i+=10) @@ -328,6 +348,7 @@ exports.requireExt = function(display, callback) ext.Triangles = function(op, src, srcX, srcY, dst, maskFormat, tris) { X.seq_num++; + captureStack(); var format = 'CCSCxxxLLLss'; var params = [ext.majorOpcode, 11, 6+tris.length, op, src, dst, maskFormat, srcX, srcY]; for (var i=0; i < tris.length; i+=6)