diff options
author | Bob Badour <bbadour@google.com> | 2020-05-06 15:09:12 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-05-06 15:09:12 +0000 |
commit | f1a59c98333d28b04b74772f204bcc1df6e83634 (patch) | |
tree | fd845444b59dfc72656b7781596e0b1a0662c4c7 /eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/ProtoBufUtils.java | |
parent | 14a008655dafe4ca1fc7d014a16a1c401761675c (diff) | |
parent | d58f8ba3b1869530926bd5f167103dfa161787a1 (diff) | |
download | sdk-f1a59c98333d28b04b74772f204bcc1df6e83634.tar.gz |
Merge "Revert "Remove unused project."" am: fc7cda06f5 am: d3c69fa48e am: d58f8ba3b1
Change-Id: I297730ce4f9da2bf30dde696439ab825cd642b00
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/ProtoBufUtils.java')
-rw-r--r-- | eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/ProtoBufUtils.java | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/ProtoBufUtils.java b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/ProtoBufUtils.java new file mode 100644 index 000000000..074e4409e --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/ProtoBufUtils.java @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ide.eclipse.gltrace; + +import com.android.ide.eclipse.gltrace.GLProtoBuf.GLMessage; + +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.ImageData; +import org.eclipse.swt.graphics.PaletteData; +import org.eclipse.swt.widgets.Display; +import org.liblzf.CLZF; + +/** Utilities to deal with protobuf encoded {@link GLMessage}. */ +public class ProtoBufUtils { + private static ImageData getImageData(GLMessage glMsg) { + int width = glMsg.getFb().getWidth(); + int height = glMsg.getFb().getHeight(); + + if (width * height == 0) { + return null; + } + + byte[] compressed = glMsg.getFb().getContents(0).toByteArray(); + byte[] uncompressed = new byte[width * height * 4]; + + int size = CLZF.lzf_decompress(compressed, compressed.length, + uncompressed, uncompressed.length); + assert size == width * height * 4 : "Unexpected image size after decompression."; + + int redMask = 0xff000000; + int greenMask = 0x00ff0000; + int blueMask = 0x0000ff00; + PaletteData palette = new PaletteData(redMask, greenMask, blueMask); + ImageData imageData = new ImageData( + width, + height, + 32, // depth + palette, + 1, // scan line padding + uncompressed); + byte[] alpha = new byte[width*height]; + for (int i = 0; i < width * height; i++) { + alpha[i] = uncompressed[i * 4 + 3]; + } + imageData.alphaData = alpha; + + imageData = imageData.scaledTo(imageData.width, -imageData.height); + return imageData; + } + + /** Obtains the image stored in provided protocol buffer message. */ + public static Image getImage(Display display, GLMessage glMsg) { + if (!glMsg.hasFb()) { + return null; + } + + ImageData imageData = null; + try { + imageData = getImageData(glMsg); + } catch (Exception e) { + GlTracePlugin.getDefault().logMessage( + "Unexpected error while retrieving framebuffer image: " + e); + return null; + } + + if (imageData == null) { + return null; + } + + return new Image(display, imageData); + } +} |