Commit Graph

604 Commits

Author SHA1 Message Date
Romain Guy
3b748a44c6 Pack preloaded framework assets in a texture atlas
When the Android runtime starts, the system preloads a series of assets
in the Zygote process. These assets are shared across all processes.
Unfortunately, each one of these assets is later uploaded in its own
OpenGL texture, once per process. This wastes memory and generates
unnecessary OpenGL state changes.

This CL introduces an asset server that provides an atlas to all processes.

Note: bitmaps used by skia shaders are *not* sampled from the atlas.
It's an uncommon use case and would require extra texture transforms
in the GL shaders.

WHAT IS THE ASSETS ATLAS

The "assets atlas" is a single, shareable graphic buffer that contains
all the system's preloaded bitmap drawables (this includes 9-patches.)
The atlas is made of two distinct objects: the graphic buffer that
contains the actual pixels and the map which indicates where each
preloaded bitmap can be found in the atlas (essentially a pair of
x and y coordinates.)

HOW IS THE ASSETS ATLAS GENERATED

Because we need to support a wide variety of devices and because it
is easy to change the list of preloaded drawables, the atlas is
generated at runtime, during the startup phase of the system process.

There are several steps that lead to the atlas generation:

1. If the device is booting for the first time, or if the device was
updated, we need to find the best atlas configuration. To do so,
the atlas service tries a number of width, height and algorithm
variations that allows us to pack as many assets as possible while
using as little memory as possible. Once a best configuration is found,
it gets written to disk in /data/system/framework_atlas

2. Given a best configuration (algorithm variant, dimensions and
number of bitmaps that can be packed in the atlas), the atlas service
packs all the preloaded bitmaps into a single graphic buffer object.

3. The packing is done using Skia in a temporary native bitmap. The
Skia bitmap is then copied into the graphic buffer using OpenGL ES
to benefit from texture swizzling.

HOW PROCESSES USE THE ATLAS

Whenever a process' hardware renderer initializes its EGL context,
it queries the atlas service for the graphic buffer and the map.

It is important to remember that both the context and the map will
be valid for the lifetime of the hardware renderer (if the system
process goes down, all apps get killed as well.)

Every time the hardware renderer needs to render a bitmap, it first
checks whether the bitmap can be found in the assets atlas. When
the bitmap is part of the atlas, texture coordinates are remapped
appropriately before rendering.

Change-Id: I8eaecf53e7f6a33d90da3d0047c5ceec89ea3af0
2013-05-02 13:32:09 -07:00
Scott Main
3fc184cf6e am 01e48e7d: am 22f6a60e: Merge "add docs for new attributes, including account restriction for restricted profiles" into jb-mr2-dev
* commit '01e48e7d1541920ece358257e4c2481936497835':
  add docs for new attributes, including account restriction for restricted profiles
2013-04-25 21:27:06 -07:00
Scott Main
b40c1fdaee add docs for new attributes, including account restriction for restricted profiles
Change-Id: I737ea55bfa58562b1b384e52626e95b479759376
2013-04-25 19:05:55 -07:00
Dianne Hackborn
de1fae77b6 am 00c4c670: am 301e95f2: Merge "Add a little more resource load tracing." into jb-mr2-dev
* commit '00c4c67069b9d13005ae072b8744c728aa73f99a':
  Add a little more resource load tracing.
2013-04-12 18:09:58 -07:00
Dianne Hackborn
0acc1931d3 Add a little more resource load tracing.
Change-Id: Id797adb67ab411d5b1a1c223863d3bb4655d10b1
2013-04-12 17:49:17 -07:00
Fabrice Di Meglio
b735e1d426 am 70d2c773: am f5c757c6: Merge "More fix for bug #8159072 Spinner widget should be RTL\'ized" into jb-mr2-dev
* commit '70d2c77320287d97fa2d90cc60f85e1706bffb1b':
  More fix for bug #8159072 Spinner widget should be RTL'ized
2013-04-11 18:10:51 -07:00
Fabrice Di Meglio
dc25d25333 More fix for bug #8159072 Spinner widget should be RTL'ized
- fix DrawableContainerState.getChangingConfigurations() to take care about its children
- make Resources.verifyPreloadConfig() return false when the changing configuration
contains layout direction bits (this is when a Drawable is having different version
for LTR and RTL layout directions)
- use constant state instead of the resource type value for checking if we can
preload the drawable
- fix typo

Change-Id: Idd64caf0fbe0f5cfd5ffe09343e84bafa9446ea5
2013-04-11 13:38:57 -07:00
Victoria Lease
3395e12541 am fef08dc1: am a4b68908: Merge "bidiFlags != SkPaint::Flags" into jb-mr2-dev
* commit 'fef08dc1c23fc3c7582e36df10d8a12acd22fb62':
  bidiFlags != SkPaint::Flags
2013-03-29 08:59:30 -07:00
Victoria Lease
a4b68908bd Merge "bidiFlags != SkPaint::Flags" into jb-mr2-dev 2013-03-29 15:00:50 +00:00
kmccormick
93baebfb45 am 0aeb824b: am af7c60be: am a25c43f5: am 3121868c: am 38e94e9f: am 4d0beb7e: am 4f414b79: Doc update: fix incorrect enum
* commit '0aeb824b4a688ba74015e53b5bf975d66e3b8137':
  Doc update: fix incorrect enum
2013-03-28 16:32:23 -07:00
kmccormick
af7c60be4d am a25c43f5: am 3121868c: am 38e94e9f: am 4d0beb7e: am 4f414b79: Doc update: fix incorrect enum
* commit 'a25c43f5545c7d9b7e94f2bb10d64ed7d7302b49':
  Doc update: fix incorrect enum
2013-03-28 16:27:23 -07:00
kmccormick
a25c43f554 am 3121868c: am 38e94e9f: am 4d0beb7e: am 4f414b79: Doc update: fix incorrect enum
* commit '3121868cb860eb47182fcbae5d55667af51afb5a':
  Doc update: fix incorrect enum
2013-03-28 16:24:25 -07:00
kmccormick
4f414b7949 Doc update: fix incorrect enum
"Bug: 4980236"

Change-Id: I39f8f429574a9916c5fffc5b2e4ec4715ec48803
2013-03-28 16:14:08 -07:00
Victoria Lease
626d3c2281 bidiFlags != SkPaint::Flags
We've a number of native functions in the text layout path that take
a bidiFlags argument. We've a number of callers of those functions
passing in SkPaint::Flags in that slot. This completely breaks text
directionality for the affected functions, as
SkPaint::kAntiAlias_Flag happens to share values with kBidi_RTL,
resulting in anti-aliased SkPaints measuring text as if it were RTL,
and non-anti-aliased SkPaints measuring text as if it were LTR,
regardless of the actual text directionality. Oops!

To address the issue, this commit replaces erroneous calls to
SkPaint.getFlags() with the value of Paint.mBidiFlags, and includes
the necessary plumbing to get that value where it needs to be.

Bug: 8471481
Change-Id: I2d04b70defed3130fc1ad13f4c9098f5fce4ffde
2013-03-28 15:56:14 -07:00
Chet Haase
22fc72c8a8 am bcba9442: am 10c4d99f: Merge "Manage drawable invalidation automatically for Overlays" into jb-mr2-dev
* commit 'bcba9442d4066c9e34ee7a9f050b2858465e052a':
  Manage drawable invalidation automatically for Overlays
2013-03-20 23:34:02 +00:00
Chet Haase
10c4d99f04 Merge "Manage drawable invalidation automatically for Overlays" into jb-mr2-dev 2013-03-20 23:30:53 +00:00
Chet Haase
633326e29f Manage drawable invalidation automatically for Overlays
Drawables added to a view's Overlay will now cause the Overlay to
be invalidated via the normal drawable-invalidation mechanism. That is,
changes to any of the drawables in the overlay should cause invalidation of
the proper area of the overlay and thus the hostView, causing the appropriate
area to be redrawn.

Also, fixed a bug in drawable invalidation so that bounds changes will now
correctly invalidate both the old and new bounds areas.

Issue #8350510 Add APIs needed for future animation capabilities

Change-Id: Icae5fa0e420232ee17dc39be10084345bae8dbd8
2013-03-20 16:23:33 -07:00
Fabrice Di Meglio
3807312e9b am 0bcec06b: am 19eceaad: Merge "Fix bug #8437358 Clean any ICU related code from TextLayout / Paint and their dependencies" into jb-mr2-dev
* commit '0bcec06b24e7bc67ab4922f6bb18e6bc7737ba69':
  Fix bug #8437358 Clean any ICU related code from TextLayout / Paint and their dependencies
2013-03-20 22:32:45 +00:00
Fabrice Di Meglio
665f02c667 Fix bug #8437358 Clean any ICU related code from TextLayout / Paint and their dependencies
- remove the ICU related methods and update the methods using the "reserved" argument
- update to CTS in another CL too

Change-Id: I5509736568c342d9d17bfeafc17951117ab5d3cc
2013-03-20 14:56:05 -07:00
Chet Haase
f5472fc8ca am 2c250474: am e8918c57: Merge "Fix errors in Canvas.EdgeType docs" into jb-mr2-dev
* commit '2c2504744e2659af9fa8df68eb93de290e99b82d':
  Fix errors in Canvas.EdgeType docs
2013-03-15 21:33:36 +00:00
Chet Haase
e8918c57bd Merge "Fix errors in Canvas.EdgeType docs" into jb-mr2-dev 2013-03-15 21:29:09 +00:00
Chet Haase
d320001807 Fix errors in Canvas.EdgeType docs
Issue #7722363 Fix Canvas EdgeType docs

Change-Id: I2908ff22879eb5996da73a37dae1a4cabf82fffb
2013-03-15 14:25:54 -07:00
Fabrice Di Meglio
f72b5c920a am cf60cc9a: am 261f82ca: Merge "Revert "Clean Paint.mBidiFlags as it is no longer used"" into jb-mr2-dev
* commit 'cf60cc9adedf032c6c97cd2cbb9ff211deaaf3ae':
  Revert "Clean Paint.mBidiFlags as it is no longer used"
2013-03-15 20:39:31 +00:00
Fabrice Di Meglio
c50fbd0531 am 42490501: am fe099074: Merge "Revert "fix argument mismatches in Paint JNI"" into jb-mr2-dev
* commit '424905012677ad35aff9a4b903f208647d4509ba':
  Revert "fix argument mismatches in Paint JNI"
2013-03-15 20:39:25 +00:00
Fabrice Di Meglio
da12f389eb Revert "Clean Paint.mBidiFlags as it is no longer used"
This reverts commit 6d9fe5bd22.
2013-03-15 11:26:56 -07:00
Fabrice Di Meglio
a4bf8114a7 Revert "fix argument mismatches in Paint JNI"
This reverts commit b61fb10fe4.
2013-03-15 11:22:29 -07:00
Chet Haase
b1af7f3d4b add getAlpha() to Drawable
Drawable has setAlpha(int), but no getAlpha() (although some subclasses have added the
method). This makes it more tedious to use the property. For example, animations that wish to
animate this property must explicitly give it a start value since this value cannot be queried
from the object.

The trick is that setAlpha(int) is abstract, only implemented by subclasses. We cannot take this
approach for getAlpha(), as we would break all subclasses of Drawable until they implemented the
method. Instead, we'll add a default method which returns an invalid value, making it easier for
clients of the method to detect whether the value is valid.

All subclasses of Drawble in frameworks have been changed to add an override of getAlpha() when
appropriate.

Issue #7485875 Drawables is missing getAlpha()

Change-Id: I06b6e35f1a56d202838eca44759c85c82595020a
2013-03-08 15:40:28 -08:00
Adam Koch
25a3b1ddeb am cc3fec69: am 0c8dfd7d: am 1061c578: am 095aa4b6: am 1a5bec01: Merge "Doc fix: update BitmapFactory.Options.inSampleSize javadoc Bug: 8250653" into jb-mr1-dev
* commit 'cc3fec699d9fdf57a080106e6ca7b3ae845f1446':
  Doc fix: update BitmapFactory.Options.inSampleSize javadoc Bug: 8250653
2013-03-05 14:38:30 +00:00
Adam Koch
e43d5714fc am 1a5bec01: Merge "Doc fix: update BitmapFactory.Options.inSampleSize javadoc Bug: 8250653" into jb-mr1-dev
* commit '1a5bec0127ca4584008a1ab9e1ce49e671f8387c':
  Doc fix: update BitmapFactory.Options.inSampleSize javadoc Bug: 8250653
2013-03-05 06:37:48 -08:00
Adam Koch
cc3fec699d am 0c8dfd7d: am 1061c578: am 095aa4b6: am 1a5bec01: Merge "Doc fix: update BitmapFactory.Options.inSampleSize javadoc Bug: 8250653" into jb-mr1-dev
* commit '0c8dfd7d281d037df3d427ccb6bf4642b2617a63':
  Doc fix: update BitmapFactory.Options.inSampleSize javadoc Bug: 8250653
2013-03-05 06:36:31 -08:00
Adam Koch
095aa4b611 am 1a5bec01: Merge "Doc fix: update BitmapFactory.Options.inSampleSize javadoc Bug: 8250653" into jb-mr1-dev
* commit '1a5bec0127ca4584008a1ab9e1ce49e671f8387c':
  Doc fix: update BitmapFactory.Options.inSampleSize javadoc Bug: 8250653
2013-03-05 06:30:03 -08:00
Romain Guy
836f93dc5f Merge "Never resize a Bitmap down to 0 at load time Bug #8313929" into jb-mr2-dev 2013-03-05 01:57:26 +00:00
Romain Guy
fe28ef84f2 Never resize a Bitmap down to 0 at load time
Bug #8313929

Change-Id: Ic9b691319f162228c72ad1afed4dfe0b4181c422
2013-03-04 17:55:55 -08:00
Chris Craik
3e7dbf5373 Merge "Document that degenerate lines wont be drawn" into jb-mr2-dev 2013-03-04 18:58:19 +00:00
Chris Craik
a5ef27da95 Document that degenerate lines wont be drawn
bug:7658830

Skia and the HW acceleration path don't render anything for degenerate
lines.

Change-Id: I5ea6fe8f16533e5045a7cd10475f4240f6c311b6
2013-03-04 10:41:55 -08:00
Derek Sollenberger
cdac497289 Deprecate read/write Pictures to streams.
bug: 8241089
Change-Id: I435a534f5110cb2b8aba87c047b509020a22fd67
2013-03-04 10:10:15 -05:00
Chris Craik
f0e0678460 Avoid trying to draw invisible ShapeDrawables
This avoids work when a drawable is declared with @android:color/transparent

Change-Id: I1b6d3b22751e378be047a5538dfd4d4baab3c03a
2013-02-28 17:05:12 -08:00
Victoria Lease
8e04840f38 round subpixels up to next integer in measureText DO NOT MERGE
A common source of layout bugs we're seeing these days involves the
output of measureText() being fed into StaticLayout's constructor.
measureText() returns subpixel-accurate values, but StaticLayout only
takes integral bounds, resulting in the subpixel portion of the
bounds being truncated. This leaves StaticLayout with insufficient
space to layout the text that was just measured, causing all manner
of unexpected line breaks.

This could be causing issues elsewhere, as well. Until our text
pipeline is fully subpixel-perfect, it's best that measureText
guarantee that the value it returns will be sufficient to contain
the text, even if cast to int.

Cherry-pick of Ib84947f0d0a1229287f5b19b99e7efd40f5317f7

Bug: 8164205
Change-Id: I69795ba5770112c0a3d0e752158076a8d1646b1a
2013-02-27 11:38:05 -08:00
Adam Koch
758333d70a Doc fix: update BitmapFactory.Options.inSampleSize javadoc
Bug: 8250653

Change-Id: I7187372ab3c742b9395d119a7425f60f071dbb4e
2013-02-22 11:45:17 -05:00
Derek Sollenberger
1b63e60abd Fix use case where the Java Canvas is reused.
When provided with a new bitmap device the canvas will retain
certain information such as it's matrix and clip.

bug: 8167188
Change-Id: I20ac8a24eebc85fb7c147504a103ce9a95b530b3
2013-02-21 14:49:17 -05:00
Chris Craik
c4ca87f0f4 am 8a47d8ea: Merge "Clean up clipping and deferral logic"
* commit '8a47d8eaec26d0937aee94a057f561f246748339':
  Clean up clipping and deferral logic
2013-02-20 10:42:40 -08:00
Chris Craik
5d11676414 Clean up clipping and deferral logic
bug:8037003

-Merges replay methods
-Bounds checking for DrawBitmapMesh, DrawRects and DrawDisplayList
-Use clip as bounds for otherwise unbounded draw operations

Clip-as-bounds is correct for drawColor and functor, but other draw
operations (pos text, text on path, and layers) still need true bounds
calculation

Change-Id: I5d5149d2c624f01e3fe46628bf156e835e69b9d5
2013-02-19 18:56:10 -08:00
Victoria Lease
c85637f0e6 am c69bce2e: Merge "fix argument mismatches in Paint JNI"
# Via Android (Google) Code Review (1) and Victoria Lease (1)
* commit 'c69bce2e41c70da35e1b6a2ab5ec44469ab14c80':
  fix argument mismatches in Paint JNI
2013-02-14 19:59:03 -08:00
Victoria Lease
b61fb10fe4 fix argument mismatches in Paint JNI
Paint.getTextRunCursor() no longer has a "flags" argument on the Java
side. The native side, however, still had the argument, and was being
called with misaligned arguments, causing all manner of madcap fun.

Also, the version of Paint.getTextRunCursor() that took String as an
argument needed to lose the "flags" argument, as well, to prevent an
infinite loop in the CharSequence version of the function, which was
supposed to be calling the String version but was actually calling
itself.

Bug: 8201224
Change-Id: Iad0dabaf81185f29a082566cc64590f2ba9bc31c
2013-02-14 15:58:46 -08:00
Chris Craik
c932760f66 Merge "Revert "Merge remote-tracking branch 'goog/master-chromium' into 'goog/master'" DO NOT MERGE" 2013-02-13 23:14:58 +00:00
Chris Craik
7c1a49f5f5 Revert "Merge remote-tracking branch 'goog/master-chromium' into 'goog/master'" DO NOT MERGE
This reverts commit 6c0307dd0a, reversing
changes made to a2cd828b74.

Conflicts:
	packages/SystemUI/res/values-sv/strings.xml

Change-Id: Ia178efe8b14751583d47b2826bfe3d3d5463dd2e
2013-02-13 10:50:20 -08:00
Fabrice Di Meglio
6d9fe5bd22 Clean Paint.mBidiFlags as it is no longer used
See bug #7623824

Change-Id: Ie2f9422821f6dcc73c99e8695f448e966b587b1d
2013-02-12 13:12:13 -08:00
Romain Guy
7ac40e3869 Deprecate useless BitmapDrawable constructor
Bug #2590549

Change-Id: Icb45bf2d9836c43ed0825105f64d7b98afcdcdac
2013-02-08 14:00:15 -08:00
Michael Jurka
7f2e4efa96 am c24b1448: Merge "Don\'t mark recycled bitmaps as immutable"
# Via Android (Google) Code Review (1) and Michael Jurka (1)
* commit 'c24b14481527e2f87ddb3a156b8217d32c645b10':
  Don't mark recycled bitmaps as immutable
2013-02-04 09:35:09 -08:00
Michael Jurka
c24b144815 Merge "Don't mark recycled bitmaps as immutable" 2013-02-04 17:31:17 +00:00