Commit Graph

191 Commits

Author SHA1 Message Date
Mathias Agopian
b6a5daa3ab fix [2102410] Home Screen is not displayed in the background in Landscape Mode
the blurring code now handles NPOT textures.
2009-09-09 17:47:15 -07:00
Mathias Agopian
454ea68139 fix [2037525] Fail to start camera after adb sync new Camera
we ended-up locking a Mutex that had been destroyed.
This happened because we gave an sp<Source> to the outside world,
and were called after LayerBuffer had been destroyed.

Instead we now give a wp<LayerBuffer> to the outside and have it
do the destruction.
2009-09-09 00:50:29 -07:00
Mathias Agopian
4d2de2c769 rename Mutexes to make the code easier to follow 2009-09-08 22:48:24 -07:00
Mathias Agopian
8837e2f2e6 delete old and unused source files 2009-09-07 16:33:36 -07:00
Mathias Agopian
cbb288bfe8 fix [2068105] implement queueBuffer/lockBuffer/dequeueBuffer properly
Rewrote SurfaceFlinger's buffer management from the ground-up.
The design now support an arbitrary number of buffers per surface, however the current implementation is limited to four. Currently only 2 buffers are used in practice.

The main new feature is to be able to dequeue all buffers at once (very important when there are only two). 

A client can dequeue all buffers until there are none available, it can lock all buffers except the last one that is used for composition. The client will block then, until a new buffer is enqueued.

The current implementation requires that buffers are locked in the same order they are dequeued and enqueued in the same order they are locked. Only one buffer can be locked at a time.

eg. Allowed sequence:   DQ, DQ, LOCK, Q, LOCK, Q
eg. Forbidden sequence: DQ, DQ, LOCK, LOCK, Q, Q
2009-09-07 16:32:45 -07:00
Mathias Agopian
0852e67412 attempt to fix [2099362] Possible SurfaceFlinger crash 2009-09-04 19:50:23 -07:00
Mathias Agopian
888eee68db fix [2098939] Smooth gradients show banding on Sholes 2009-09-04 17:27:16 -07:00
Rebecca Schultz Zavin
29aa74c546 Add colorkey to gl clear operation
Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2009-09-02 15:57:42 -07:00
Mathias Agopian
9795c42e55 dumpsys SurfaceFlinger will now always dump SF's state, even if SF is deadlocked
(in this case the state is dumped without the proper locks held which could result to a crash)

in addition, the last transaction and swap times are printed to the dump as well as the time spent
*currently* in these function. For instance, if SF is unresponsive because eglSwapBuffers() is stuck,
this will show up here.
2009-08-26 16:55:50 -07:00
Mathias Agopian
1c97d2ebe1 fix a bug that caused the PixelFormat viewed by Surface to be wrong.
what happened is that the efective pixel format is calculated by SF but Surface nevew had access to it directly.
in particular this caused query(FORMAT) to return the requested format instead of the effective format.
2009-08-19 17:46:26 -07:00
Mathias Agopian
50517543d8 fix [2063336] Surface.lockSurface throws IllegalArgumentException when out of memory 2009-08-19 17:10:18 -07:00
Mathias Agopian
d66a97950e fix a bug that could cause a window to be hidden in some cases.
this would happen is the window is made visible but the client didn't render yet into it. This happens often with SurfaceView.
Instead of filling the window with solid black, SF would simply ignore it which could lead to more disturbing artifacts.

in theory the window manager should not display a window before it has been drawn into, but it does happen occasionnaly.
2009-08-13 19:08:00 -07:00
Mathias Agopian
ccde199f7c Surface::GPU and Surface::HARDWARE are now deprecated; they will be set automatically if needed.
this also ripples into the window manager API by making some constant there deprecated as well.
2009-08-13 18:19:32 -07:00
Mathias Agopian
8458a3140f make sure EGL_ANDROID_swap_rectangle is actually supported before using it 2009-08-12 21:24:53 -07:00
Mathias Agopian
24e5f52901 Better error handling in EGL extensions 2009-08-12 21:18:15 -07:00
Mathias Agopian
cf70e3301b second take, hopefully this time it doesn't break one of the builds: "SurfaceFlinger will now allocate buffers based on the usage specified by the clients. This allows to allocate the right kind of buffer automatically, without having the user to specify anything." 2009-08-11 23:44:13 -07:00
Mathias Agopian
5221271375 second take, hopefully this time it doesn't break one of the builds: "SurfaceFlinger will now allocate buffers based on the usage specified by the clients. This allows to allocate the right kind of buffer automatically, without having the user to specify anything." 2009-08-11 23:32:29 -07:00
Fred Quintana
b2fd4665e6 Revert "SurfaceFlinger will now allocate buffers based on the usage specified by the clients. This allows to allocate the right kind of buffer automatically, without having the user to specify anything."
This reverts commit 8b76a0ac6fbf07254629ed1ea86af014d5abe050.
2009-08-11 20:49:35 -07:00
Mathias Agopian
df37b62c62 SurfaceFlinger will now allocate buffers based on the usage specified by the clients. This allows to allocate the right kind of buffer automatically, without having the user to specify anything.
This change makes SurfaceHolder.setType(GPU) obsolete (it's now ignored).
Added an API to android_native_window_t to allow extending the functionality without ever breaking binary compatibility. This is used to implement the new set_usage() API. This API needs to be called by software renderers because the default is to use usage flags suitable for h/w.
2009-08-11 16:12:56 -07:00
Mathias Agopian
af0b0f09bb enable HW acceleration for the Dim Surface on 8k devices 2009-08-10 21:13:06 -07:00
Mathias Agopian
9fbeb7c6e2 remove unused and confusing comment 2009-08-07 19:08:18 -07:00
Mathias Agopian
0928e31cc7 minor code clean-up 2009-08-07 16:38:10 -07:00
Mathias Agopian
6cf50a770d added two EGL helpers for selecting a config matching a certain pixelformat or native window type 2009-08-06 16:05:39 -07:00
Mathias Agopian
a03f7c9170 free surface buffers before trying to allocate new ones, so we have more chance of success 2009-08-03 15:08:16 -07:00
Mathias Agopian
f9cd64bc6c NPOT EGLimage without GL_ARB_texture_non_power_of_two would be improperly scalled
The current gralloc allocates buffer memory for render targets that will typically have NPOT dimensions. Assuming that the vendor driver supports converting the resulting NPOT android_native_buffer_t to a NPOT EGLImage, SurfaceFlinger calls glEGLImageTargetTexture2DOES(), and uses glGetError() to test whether the GL can support creating an EGL target texture with the specified NPOT EGLImage. If it is supported, the DIRECT_TEXTURE flag remains set, otherwise it is cleared.

Tangentially, if the driver advertises the GL_ARB_texture_non_power_of_two extension, the NPOT_EXTENSION flag is set, otherwise it is cleared.

If the driver supported creating an EGL target texture from a NPOT source EGLImage, it implicitly creates a NPOT texture. This does not need any glScalef() texture coordinate correction in LayerBase::drawWithOpenGL(). However, the same driver may not advertise the GL_ARB_texture_non_power_of_two extension nor generally support NPOT textures that were not derived from EGLImages. So SurfaceFlinger may flag only DIRECT_TEXTURE, not NPOT_EXTENSION.

Therefore, the test in LayerBase::drawWithOpenGL() should only perform the glScalef() if neither NPOT_EXTENSION or DIRECT_TEXTURE are flagged. Otherwise scaling is applied to NPOT EGL target textures when none is required.
2009-07-30 12:19:10 -07:00
Android (Google) Code Review
e437ff8099 am 1521cd6e: Merge change 8015 into donut
Merge commit '1521cd6e657ba4efa9382ab73d3cbba3bdf50ead'

* commit '1521cd6e657ba4efa9382ab73d3cbba3bdf50ead':
  Reset the mDpiX and mDpiY values when qemu.sf.lcd_density is defined.
2009-07-29 14:47:41 -07:00
Mathias Agopian
672136f3e6 fix [1985856] Seg fault when using the soft keyboard in the Messaging app 2009-07-28 19:17:54 -07:00
Android (Google) Code Review
7f5989e19b Merge change 8015 into donut
* changes:
  Reset the mDpiX and mDpiY values when qemu.sf.lcd_density is defined.
2009-07-28 16:16:38 -07:00
David 'Digit' Turner
31469e1069 Reset the mDpiX and mDpiY values when qemu.sf.lcd_density is defined.
This will make android.view.Display return corresponding values for
the screen's DPI.
2009-07-29 00:38:58 +02:00
Mathias Agopian
5d7126b625 resolved conflicts for merge of ac38dfc5 to master 2009-07-28 14:20:21 -07:00
Mathias Agopian
970112231e fix [2017532] Partial Update leaves residual image. 2009-07-28 10:57:27 -07:00
Rebecca Schultz Zavin
1000170033 Add a flag to set whether the overlay has been initialized. Commit needs to be called at least once on each overlay, and it appears that sometimes this
doesn't happen because the visibility never changes.  With this change
the overlay parameter and position will be committed when either the visibility
of the window changes, or on the first call to visibility resolved, if it
hasn't already been done.

Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com>
2009-07-22 17:17:46 -07:00
Rebecca Schultz Zavin
96df49bb7d Fix hardware overlay so all changes are commited when done. 2009-07-21 11:07:23 -07:00
Mathias Agopian
d606003a66 first attempt to fix the sim 2009-07-13 22:58:25 -07:00
Mathias Agopian
ec0f1f6720 implement Mutex and Condition with pthread instead of calling futex directly.
internally pthread uses futex. the implementation consists of simple inlines
there are no implementation files anymore.
2009-07-13 15:14:23 -07:00
Mathias Agopian
5cd5d31d10 fix [1967226] Donut orientation animation (dimming and blur) is slower than Cupcake 2009-07-10 17:00:00 -07:00
Mike Reed
e0528ba71b rename libsgl/libcorecg to libskia 2009-07-10 15:33:21 -04:00
Android (Google) Code Review
829cb1304b Merge change 6742
* changes:
  fix [1969200] Uninitialized double passed to Math.sqrt()
2009-07-09 22:12:36 -07:00
Mathias Agopian
80d7a764fc fix [1969200] Uninitialized double passed to Math.sqrt() 2009-07-09 22:11:57 -07:00
Mathias Agopian
4860b74b47 am 4d2dbebf: fix for [1885684] E/SurfaceFlinger( 60): not enough memory for layer bitmap size=4294938624
Merge commit '4d2dbebf3d08209f751585d8cc367369e2f6e32f'

* commit '4d2dbebf3d08209f751585d8cc367369e2f6e32f':
  fix for [1885684] E/SurfaceFlinger( 60): not enough memory for layer bitmap size=4294938624
2009-07-09 20:05:11 -07:00
Mathias Agopian
6e2d6483fe fix for [1885684] E/SurfaceFlinger( 60): not enough memory for layer bitmap size=4294938624 2009-07-09 18:16:43 -07:00
Mathias Agopian
84f6814af4 fix for [1969185] valgrind errors in new gl stuff 2009-07-09 17:30:43 -07:00
Mathias Agopian
1df3bbb8d8 trying to fix the sim, I'm not even sure this syntaxe is valid, but my compilo doesn't complain 2009-07-06 19:04:55 -07:00
Mathias Agopian
af54ab9d88 don't need to link against libsgl 2009-07-02 19:04:39 -07:00
Mathias Agopian
7303c6bf1a get rid of references to MemoryDealer in SurfaceFlinger 2009-07-02 18:50:51 -07:00
Mathias Agopian
6b5513538a forgot to remove those files 2009-07-02 18:46:57 -07:00
Mathias Agopian
759fdb2ef7 free gralloc buffers as soon as possible (when a surface is not visible any longer), client who have the buffers still mapped won't crash, btu may see garbage data 2009-07-02 18:45:29 -07:00
Mathias Agopian
84d1f7a098 Merge commit 'goog/master' into merge_master 2009-07-01 18:33:18 -07:00
Mathias Agopian
78f1c1949f Allocate 16MB for surfaces on Firstone, since 8MB is way to small for our bigger screen. 2009-07-01 17:47:38 -07:00
Android (Google) Code Review
99da6dd7f2 am 58ebdcc0: Merge change 5625 into donut
Merge commit '58ebdcc06eca06741460a7db2be4b79e3865eb88'

* commit '58ebdcc06eca06741460a7db2be4b79e3865eb88':
  fix [1947273] the DimLayer causes the whole screen to update during transactions
2009-07-01 00:06:47 -07:00
Mathias Agopian
2dd6727c46 when there is a choice between UPDATE_ON_DEMAND and SWAP_BUFFER optimizations, choose UPDATE_ON_DEMAND which is often more efficient. 2009-06-29 18:57:42 -07:00
Mathias Agopian
29d06ac9a4 fix a bug that caused artifacts when SWAP_RECTANGLE was enabled 2009-06-29 18:49:56 -07:00
Mathias Agopian
446ff92038 don't use a 1/4th of the screen size texture for the dim layer
we can't use a texture of 1/4th of the screen for the dim layer, because the mdp internal input resultion is alwyas integers and for very small blits of a couple pixels the scale factor can get way out of range, for instance for a 7 pixels source, the scale factor would be either 7 (7/1) or 3.5 (7/2) instead of 4 (7/1.75). This caused the mdp to fail in some cases and revert to software. we now always use a texture of the actual screen size, so the problem will never happen. This burns 300KB of pmem instead of 21KB. On devices with a larger screen we might want to use a smaller texture and tile it by hand.
2009-06-29 17:32:20 -07:00
Mathias Agopian
a8d44f75e1 fix [1947273] the DimLayer causes the whole screen to update during transactions 2009-06-29 14:44:11 -07:00
Mathias Agopian
6b3287b5d4 fix [1947273] the DimLayer causes the whole screen to update during transactions 2009-06-28 02:54:16 -07:00
Mathias Agopian
b8a5560e13 fix an update bug with SHOW_UPDATE debug feature. Fix a problem with the debug binder codes too 2009-06-26 19:06:36 -07:00
Mathias Agopian
d512f238a6 add support for out-of-range copybit scaling. camera capture is in color again 2009-06-25 17:41:12 -07:00
Mathias Agopian
958b3cac99 use 1/16 the size (20KB) for the dim texture in the copybit/msm case 2009-06-25 16:21:32 -07:00
Mathias Agopian
240c9fe59e use copybit for eglSwapBuffers() copy-back operations 2009-06-25 15:39:25 -07:00
Mathias Agopian
2ab55a4e31 make use of new eglGetRenderBufferANDROID extension to clean-up a bit a few hacks added recently 2009-06-25 00:09:27 -07:00
Mathias Agopian
5911aa9510 copybit now uses a native_handle_t* instead of a fd/offset 2009-06-24 20:39:16 -07:00
Mathias Agopian
69029eb5ab hack copybit back in for video playback on msm7k. we have h/w accelerated video again 2009-06-24 20:39:16 -07:00
Mathias Agopian
2e12324581 fix a bug causing push-buffer surfaces' identity to be garbage, which resulted in some attributes (size/pos) to fail to be set 2009-06-23 20:06:46 -07:00
Mathias Agopian
1fed11c86a checkpoint. bring back video/camera 2009-06-23 18:08:22 -07:00
Mathias Agopian
cca6b4267d Merge commit 'goog/master' into merge_master 2009-06-19 17:41:14 -07:00
Mathias Agopian
f9d932774e fix a memory corruption where a SF Client could be used after it's been destroyed 2009-06-19 17:00:27 -07:00
Mathias Agopian
cd8c5e29c2 release the last reference to surfaces explicitely instead of letting it go implicitely when the message is destroyed 2009-06-19 16:24:02 -07:00
Android (Google) Code Review
05915a4d9d am c6282977: Merge change 4718 into donut
Merge commit 'c6282977180c220b1a68c23a328e7d75a11963ab'

* commit 'c6282977180c220b1a68c23a328e7d75a11963ab':
  Fix sim-eng build and simplify previous lcd-density related patch
2009-06-18 19:46:59 -07:00
David 'Digit' Turner
ae71accf63 Fix sim-eng build and simplify previous lcd-density related patch 2009-06-19 04:41:12 +02:00
Mathias Agopian
945ebbfd3d implement dimming with a texture on msm7k so it uses copybit 2009-06-18 18:48:39 -07:00
Android (Google) Code Review
e2095d0a1c am b1cdb648: Merge change 4565 into donut
Merge commit 'b1cdb64877ebd3b8c5182913ff02edd8b54a6982'

* commit 'b1cdb64877ebd3b8c5182913ff02edd8b54a6982':
  Allow the qemu.sf.lcd_density property to override the value of ro.sf.lcd_density
2009-06-18 15:43:28 -07:00
David 'Digit' Turner
694e10ba87 Allow the qemu.sf.lcd_density property to override the value of ro.sf.lcd_density
ro.sf.lcd_density is usually defined in the build.prop file which is parsed by init
before anything else. Since its name begins with "ro.", this property is write-once
and cannot later be modified, e.g. in /system/etc/init.goldfish.sh.

In other words, you cannot use "emulator -prop ro.sf.lcd_density=<value>", since
it is impossible to override the value defined in build.prop

This patch modifies the system to recognize "qemu.sf.lcd_density" as an override
value, which can be set with "emulator -prop qemu.sf.lcd_density=<value>", forcing
a specific density.

A later patch will allow the emulator to automatically set this property depending
on AVD hardware configuration settings.
2009-06-19 00:17:31 +02:00
Mathias Agopian
375f56363a new Permission class used to improve permission checks speed (by caching results) 2009-06-15 21:56:51 -07:00
Mathias Agopian
5e78e09651 protect ANDROID specific egl extension with #define 2009-06-11 17:19:54 -07:00
Mathias Agopian
3d57964a81 fix a bunch of problems with destroying surfaces.
now, all destruction path, go through the purgatory which is emptied when ~ISurface is called, but we also make sure to remove the surface from the current list from there (in case a client forgot to request the destruction explicitely).
2009-06-04 18:46:21 -07:00
Mathias Agopian
e92c713cb6 when looking for an EGLConfig always pick the first one that matches, not the last one 2009-06-03 14:49:08 -07:00
Android (Google) Code Review
c20e4ebef2 am b61ae351: Merge change 2747 into donut
Merge commit 'b61ae351256518add7bcb40e0bf18337dd87195c'

* commit 'b61ae351256518add7bcb40e0bf18337dd87195c':
  log the geomerty of surfaces causing an out of memory in SurfaceFlinger.
2009-05-29 14:57:33 -07:00
Mathias Agopian
3c4d8c83da log the geomerty of surfaces causing an out of memory in SurfaceFlinger. 2009-05-29 14:55:06 -07:00
Mathias Agopian
310f8da0c3 merge master to master_gl 2009-05-22 02:16:08 -07:00
Android (Google) Code Review
bdbf6b094d am 69a6c3eb: Merge change 2292 into donut
Merge commit '69a6c3ebd46a8de0e896747757f364322c12608d'

* commit '69a6c3ebd46a8de0e896747757f364322c12608d':
  split boot animation out of SurfaceFlinger
2009-05-21 19:36:53 -07:00
Mathias Agopian
a1ecca920e split boot animation out of SurfaceFlinger
Conflicts:

	data/etc/platform.xml
2009-05-21 19:21:59 -07:00
Mathias Agopian
c5b2c0bf80 move libbinder's header files under includes/binder 2009-05-20 12:55:03 -07:00
Mathias Agopian
208059f67e checkpoint: split libutils into libutils + libbinder 2009-05-20 12:55:02 -07:00
Mathias Agopian
20f68782a4 Region now has its own implementation instead of relying on SkRegion, which allows us to break libui's dependency on libcorecg. 2009-05-17 23:34:16 -07:00
Mathias Agopian
1e16b13857 add support for update-on-demand in SurfaceFlinger 2009-05-07 17:40:23 -07:00
Mathias Agopian
e6bf8b32b6 fix EGL extension string names 2009-05-07 15:07:52 -07:00
Mathias Agopian
df3ca30bf6 created an new EGL extension called ANDROID_swap_rectangle
ANDROID_swap_rectangle allows to specify the rectangle affected by eglSwapBuffers(), anything outside of this rectangle is unchanged. in particular EGL_BUFFER_DESTROYED only applies to that rectangle. This extension as well as EGL_BUFFER_PRESERVED allow major optimizations on surfaceflinger, which can redraw only the dirty area during compositing.

However, ANDROID_swap_rectangle allows further optimizations in EGL by reducing the amount of copy-back needed. ANDROID_swap_rectangle is particularily important for software implementations.
2009-05-07 15:07:33 -07:00
Mathias Agopian
7189c0054e move opengl/include/EGL/android_natives.h to include/ui/egl/android_natives.h and don't include it from egl.h
the android_native_ types are just forward declared in egl.h
2009-05-05 18:11:11 -07:00
Mathias Agopian
e71212ba53 removed the "bits" attribute from android_native_buffer_t.
"bits" can never be trusted now that we need to call lock() on the handle to get the virtual address of the buffer.
2009-05-05 00:37:46 -07:00
Mathias Agopian
b2dd686d06 minor clean-up in FramebufferNativeWindow 2009-05-04 19:38:43 -07:00
Mathias Agopian
0926f50664 update surfaceflinger, libui and libagl to the new gralloc api
- Currently the lock/unlock path is naive and is done for each drawing operation (glDrawElements and glDrawArrays). this should be improved eventually.
- factor all the lock/unlock code in SurfaceBuffer.
- fixed "showupdate" so it works even when we don't have preserving eglSwapBuffers().
- improved the situation with the dirty-region and fixed a problem that caused GL apps to not update.
- make use of LightRefBase() where needed, instead of duplicating its implementation
- add LightRefBase::getStrongCount()
- renamed EGLNativeWindowSurface.cpp to FramebufferNativeWindow.cpp

- disabled copybits test, since it clashes with the new gralloc api

- Camera/Video will be fixed later when we rework the overlay apis
2009-05-04 14:17:04 -07:00
Mathias Agopian
7be3e5d2d8 Merge commit 'goog/master' into merge_master
Conflicts:
	libs/surfaceflinger/Layer.cpp
	libs/surfaceflinger/SurfaceFlinger.cpp
	opengl/libagl/egl.cpp
	opengl/libs/EGL/egl.cpp
	opengl/libs/GLES_CM/gl.cpp
	opengl/libs/GLES_CM/gl_api.in
	opengl/libs/gl_entries.in
	opengl/libs/tools/glapigen
2009-04-30 14:43:18 -07:00
Android (Google) Code Review
3f54b2ae7e am 0124a15: Merge change 626 into donut
Merge commit '0124a150157d69a9f0ea109be2390afb5399b8a7'

* commit '0124a150157d69a9f0ea109be2390afb5399b8a7':
  fix 1803886 android15 Translucent GLSurfaceView demo does not display properly
2009-04-29 13:35:37 -07:00
Mathias Agopian
b6683b58a8 make use of the perfectly fine List.h instead of our own reimplementation of a linked list. 2009-04-28 03:17:50 -07:00
Mathias Agopian
2b42fa7fdd fix 1803886 android15 Translucent GLSurfaceView demo does not display properly 2009-04-27 18:50:06 -07:00
Mathias Agopian
550b79f449 get rid of an old hack to work around a bug around glDeleteTextures() in the adreno drivers 2009-04-24 16:31:11 -07:00
Mathias Agopian
cbc93ca800 get rid of the "show fps" debug option 2009-04-24 16:31:11 -07:00
Mathias Agopian
0aa758d64a Surfaces are now destroyed properly in SurfaceFlinger.
First, the window manager tells us when a surface is no longer needed. At this point, several things happen:
- the surface is removed from the active/visible list
- it is added to a purgatory list, where it waits for all clients to release their reference
- it destroys all data/state that can be spared

Later, when all clients are done, the remains of the Surface are disposed off: it is removed from the purgatory and destroyed.
In particular its gralloc buffers are destroyed at that point (when we're sure nobody is using them anymore).
2009-04-24 16:30:38 -07:00
Mathias Agopian
f1d8e87b09 a brand new MessageQueue for SurfaceFlinger. 2009-04-24 16:22:36 -07:00
Mathias Agopian
9a11206fe7 more Surface lifetime management
Surfaces are now destroyed once all references from the clients are gone, but they go through a partial destruction as soon as the window manager requests it.
This last part is still buggy. see comments in SurfaceFlinger::destroySurface()
2009-04-24 15:00:41 -07:00