Commit Graph

46552 Commits

Author SHA1 Message Date
Julian Harnath
6b56f7d282 app_server: add a few missing std::nothrow 2015-11-14 16:09:54 +01:00
Julian Harnath
b54b3ae511 app_server: add a cache for AlphaMasks
* If the same shape alpha mask is set again and again, we now keep
  the rendered masks in a cache. On certain websites, WebKit sets
  the same shape for clipping hundreds of times, which uses a lot
  of time to render the masks.

* When a shape mask was generated, we put it into AlphaMaskCache.
  The constructor for ShapeAlphaMask is made private and a factory
  method is used for instantiation instead, which transparently
  looks up in the cache whether a suitable mask was already generated
  before (so the entire caching is encapsulated inside the AlphaMask
  class).

* When taking a mask out of the cache, we still create a new
  AlphaMask instance. However, the new instance will share the
  mask bitmap with the previously generated instance (aside from
  the rendering of their bitmap, AlphaMask instances are pretty
  lightweight). Shape masks are only seen as identical when
  their shape is the same, the inverse flag, and they have the
  same parent mask.

* Cache is limited to a fixed size of currently 8 MiB, using a
  simple random replacement scheme. An LRU scheme can be added in
  the future if necessary. Counting of bytes for the cache size
  includes parent masks of masks in the cache, even if the parent
  itself is not cached. A reference counter for "indirect" cache
  references keeps track of which masks are not part of the cache,
  but still need to be added to the cache byte size.

* For now, only for ShapeAlphaMasks, other mask types can be added
  as necessary.
2015-11-14 16:09:52 +01:00
Julian Harnath
10df15449b app_server: plug leak of layers when empty clipping
* If there is an empty clipping region (invalid clipping) for the
  current view, a new layer could still be started, but not ended
  anymore. That's because unlike begin layer, end layer is handled in
  _DispatchViewDrawingMessage (because it can do actual drawing)
  and this method checks whether the clipping is valid and bails out
  if it isn't.

* Add an exception for the AS_VIEW_END_LAYER command code to still
  process it even when the clipping is invalid. The layer itself
  can after all set a valid clipping later on when its command list
  is played back. And even if it doesn't, we still have to play it
  to make sure nested layers are cleaned up.

* Fixes the memory leak in #12460 where webkit creates
  said situation: it had a layer open and then the closing was
  ignored due to empty clipping. All subsequent layer calls created
  nested layers in that one, hundreds of them, and their BPictures
  contained bitmaps, quickly eating up and leaking hundreds of MiB
  in app_server.
2015-11-14 16:09:49 +01:00
Julian Harnath
0fab27a23e app_server: don't ignore invisible layers
* When a layer has opacity 0, we can't just ignore it, we still
  have to play back its picture, even if the drawing will never
  appear on screen. This is because there might be nested layers
  and if they don't get blended, their references are not released.
  Also, it can be argued that state changes in the layer should be
  applied even if the layer is invisible (if we ignore it there,
  it would be inconsistent with other layers).

  This edge case of invisible layers could be optimized further, but
  it is rare enough anyway, so this should do.
2015-11-14 16:09:47 +01:00
Julian Harnath
2193dcd799 app_server: plug DrawState instance leak, other minor fixes
* OffscreenCanvas was not deleting its DrawState. Found thanks to
  the allocation tracking feature in libroot_debug (thanks mmlr!)

* Also a missing nothrow and a missing ref release in an error case
2015-11-14 16:09:45 +01:00
Julian Harnath
bcc5cf7d29 test_app_server: fix use after free
* Caught with libroot_debug
2015-11-14 16:09:43 +01:00
Julian Harnath
e718dc9178 app_server: Clip alpha masks to canvas size
* Making the alpha masks independent of view size is a good thing,
  however it turns out that I was too optimistic about the
  consequences: webkit sometimes sets masks for the whole page, not
  just the currently visible area. E.g. on Github diff views, it
  was seen to set a clipping path which is about 1,000 x 10,000
  pixels in size. Generating these huge masks eats up lots of memory
  and time.

* We now clip the alpha masks to the current view size. This
  introduces a dependency between mask and view again, however a
  weaker one than it used to be before the mask rework. When the
  view is enlarged, and the alpha mask was previously clipped during
  rendering, we regenerate it at the new size. When the view is
  shrunk however, we don't do anything and just keep the
  now larger than necessary mask around (so we don't have to
  regenerate again when the view is subsequently enlarged again --
  except if it then becomes even larger than it used to be).
  Changing the view origin is unaffected and still doesn't cause a
  regenerate.
2015-11-14 16:09:40 +01:00
Adrien Destugues
7460727d4a IP address control: don't try to DNS resolve
* This is used when configuring the DNS client, so resolving will not
  work
* It is supposed to be a control for entering IPs, not domain names.

Fixes #12464.
2015-11-13 21:50:11 +01:00
Adrien Destugues
1f70a8df4b SecureSocket: enable auto retry on connexion re-negociation
This is required to talk with the proxy in Thalys trains.
Now I'm online and I can push this!
2015-11-13 18:25:35 +01:00
Adrien Destugues
2ecff85ce1 HttpRequest: don't send an empty URL for GET request
* The new proxy in Thalys trains doesn't like that.
2015-11-13 18:23:52 +01:00
Adrien Destugues
f86df64b91 Web+: implement a simple session management system.
When quitting the app or closing the last window, all windows and tabs
are stored in a "Session" file. This is reloaded when the browser
starts, allowing to restore all windows and tabs.

Limitations: the page content and navigation history are not saved. The
file is written only at exit so this can't be used for crash recovery
(but you can make a backup of your default session).

Fixes #6680.
2015-11-13 14:32:13 +01:00
Axel Dörfler
be741f6ec1 Minor cleanup of translator roster commit, updated copyright. 2015-11-13 11:37:15 +01:00
Axel Dörfler
07432f3975 AboutSystem: Added Markus Himmel as contributor. 2015-11-13 11:35:15 +01:00
Markus Himmel
a1eccae96f Make sure images containing BTranslators are not unloaded early
When a translator is uninstalled, BTranslatorPrivate::_RemoveTranslators is
called. This method used to unload the image containing the translator after
calling Release() on it resulting in several problems:

- If the translator was still busy, e.g. translating something while being
  installed, it crashed since the image was unloaded even though its refcount
  was larger than 0.
- Applications using code from one of the translators (e.g. its config view)
  would crash when the translator is uninstalled (this is bug #12005).

This problem is now fixed. The roster keeps track of all translators whose
image it manages (even if the translator was already removed from the roster).
It also keeps a refcount to all images. When a translator's refcount drops to
zero and it belonged to a roster at some point, it does not delete itself, but
notifies the roster that it is ready to destruct, which then removes it from
the roster if the translator is still in it, destroys the translator, decrements
the refcount of the image and if the new refcount is zero, unloads the image.
All of this is done in a message handler, since if the translator called
TranslatorDeleted like before, the unloaded image would be referenced when
the stack is walked up.

Finally, the DataTranslations preflet is required to Acquire() the translator
whose config view it is showing, because otherwise its refcount could be reduced
to 0 and the image unloaded. BTranslatorRoster now enables users to acquire a
translator by ID. By the time the translator has to be released, it might not
be part of the roster anymore though. Since BTranslatorRoster tries not to give
out raw pointers to the translators it manages, users who acquire a translator
through a roster now are given a BTranslatorReleaseDelegate, which allows for
releasing the BTranslator exactly once and then self-destructs.

Signed-off-by: Axel Dörfler <axeld@pinc-software.de>
2015-11-13 11:26:53 +01:00
Adrien Destugues
43c2927886 pkgman: show old version when updating packages. 2015-11-13 11:02:49 +01:00
Adrien Destugues
6ae8d586ea Web+: More reasonable default size for cookie manager. 2015-11-12 14:07:28 +01:00
Adrien Destugues
5b7cdbbb23 WebPositive: add a cookie manager.
* Allows you to view and delete cookies.
* The list of domains is hierarchized and collapsed to minimize the
  number of empty entries
* All cookie parameters are shown for each domain: name, path, value,
  expiration date, and known flags.
2015-11-12 10:48:12 +01:00
Adrien Destugues
0b6c189559 BNetworkCookieJar: rework locking
The cookie jar used to be locked whenever an iterator was instanciated.
This didn't work well when using several iterators in the same thread,
because the BLocker then allows all of them to access the list
concurrently.

Rework the locking code to use a more fine grained approach, where the
cookie jar is only locked temporarily by methods which require it. These
methods are the ones which get and put new domain-lists in the jar, as
well as acquiring the locks on the domain-lists.

Each domain-list in the jar is locked using a read/write lock as before.
This means there can be many requests getting cookies for the same
domain in paralel, but only one at a time is allowed to set new cookies.

The iterators keep domain lists they need to access read-locked, as long
as they iterate the cookies for that domain.

A limitation of this approach is that deleting a domain-list when it
becomes empty is difficult. We can live with this, however, the
iteration still works (it just skips empty lists), and the empty lists
will not be stored or restored when archiving the cookie jar.
2015-11-12 10:18:35 +01:00
Automatic Committer
9311f342ef Update pci.ids from pciids.sourceforge.net 2015-11-12 05:20:24 +01:00
Axel Dörfler
93bb55e413 launch_daemon: Fixed resetting launch status, port update.
* _SetLaunchStatus() doesn't allow to set the status to B_NO_INIT
  (and rightly so).
* Therefore, we now reset it manually in Job::TeamDeleted(). This
  fixes restarting things that once ran on demand.
* Also update the port message when the default port changes.
2015-11-11 21:27:49 +01:00
Rene Gollent
190df86bd4 Debugger: Fix handling of pointer fields in messages.
BMessageValueNode:
- When resolving a pointer field, look up the type by the  fully qualified
  name, as that's how it winds up being stored in the lookup map. Also,
  due to gcc omitting the unspecified parent type on such pointers entirely,
  looking them up by base type name this way won't work anyhow.
2015-11-11 15:11:47 -05:00
Axel Dörfler
9e73b62749 launch_daemon: Fixed preregister consequences.
* Since the last change, the user launch_daemon would talk to the
  registrar again.
* However, this also caused BRoster::Launch() to preregister the app,
  which messed up our preallocated port.
* BRoster::Private::Launch() now allows to get the port that the
  registrar created in such a case, and the launch_daemon will now just
  use that one as default port.
* This lets us talk to the Deskbar again, and should fix #12455, as
  well as #12454 (again).
2015-11-11 16:04:02 +01:00
François Revol
bf53f0684f <disk_system>fat: fix gcc4 build
I noticed the syntax for libsupc++ in the BFS Jamfile addon differed but didn't think it mattered.
2015-11-11 15:18:04 +01:00
François Revol
038621114e Add FAT addon for DriveSetup
Tested with a 5MB image, seems to work.

There seems to be an issue with too long names though, or possibly names with spaces.

Also, technically it supports FAT12,16 and 32, so it should probably be renamed
in the interface.

Didn't check how to declare support for more than 1 partition types either.
2015-11-11 14:41:51 +01:00
François Revol
910a2b8c86 fat: Add initialization support
Not much tested yet but it does work on a 5MB image with mkfs.
2015-11-11 14:41:51 +01:00
François Revol
6476935b27 fat: copy over the mkdos sources 2015-11-11 14:41:51 +01:00
Adrien Destugues
e7f7c4b2d3 ffmpeg: add some alternate MIME types to the known demuxers
* These are the standard types used in HTML5 media, tell everyone that
  we can handle them.
* A few more green items in html5test.com, no extra points since none of
  the formats are mandatory however.
2015-11-11 11:58:42 +01:00
Adrien Destugues
f1c1a9dfa8 SecureSocket: stubs for no-openssl version 2015-11-11 01:50:17 +01:00
John Scipione
408a2da5c6 Tracker: Set low color before drawing column name
Fixes #12084
2015-11-10 16:27:41 -08:00
Adrien Destugues
c614961364 Implement CONNECT pass-through for HTTPS proxy
* When using a proxy, HTTPS connexion must still go directly to the
  target website. The proxy can then act as a TCP stream relay and just
  transmit the raw SSL stream between the client and website.
* For this, we ask the proxy sending an HTTP request with the CONNECT
  method. If the proxy supports this, we can then send anything as the
  payload and it will be forwarded.
* Untested, as the network here in Dusseldorf doesn't let me use a
  proxy.

ticket : #10973
2015-11-11 01:16:38 +01:00
Julian Harnath
0a6baa7e74 app_server: gcc4 build fixes 2015-11-10 23:42:43 +01:00
Julian Harnath
25dbf74b8e BView: add methods for affine translation/scaling/rotation
* BView::TranslateBy(), BView::ScaleBy() and BView::RotateBy()
  allow to conveniently modify the current affine transformation.
  This makes it unnecessary to first read the current transform,
  modify it, and then set it again.
  Uses the new Pre...() methods of BAffineTransform.

* Also, remove setting the transform "through" to the BView even
  while recording a BPicture, as this now results in transforms
  being applied more than once.
2015-11-10 23:34:08 +01:00
Julian Harnath
1cde68c5a2 app_server: apply transform to CopyBits
* Apply affine transforms to source and target rects of
  BView::CopyBits(). For now, only if transform is a dilation.
2015-11-10 23:33:58 +01:00
Julian Harnath
4bd6f322bb app_server/Interface Kit: add new clipping API
* Add new clipping API for rectangles (ClipToRect, ClipToInverseRect)
  and shapes (ClipToShape, ClipToInverseShape)

* Works with affine transforms and automatically switches from fast
  region-based clipping to alpha-mask based clipping as necessary.

* Always self-intersecting, i.e. no state push required to further
  narrow down the clipping region. All of the 4 new methods can be
  mixed in any order.
2015-11-10 23:33:54 +01:00
Julian Harnath
23af4ff6ac app_server: finish BShape-based alpha mask generation 2015-11-10 23:12:32 +01:00
Julian Harnath
ab12093685 BShape: move bounding box method to shape_data
* Makes it easier to get the bounding box from inside app_server
2015-11-10 23:12:30 +01:00
Julian Harnath
08135223ce Affine transforms: add method to test for dilation
* Add IsDilation() to BAffineTransform and Transformable which check
  whether the transform is a dilation, i.e. consists of only
  translation and/or scaling
2015-11-10 23:12:28 +01:00
Julian Harnath
6109a2086d Merge branch 'app_server'
Conflicts:
	src/kits/interface/PicturePlayer.cpp
	src/servers/app/ServerPicture.cpp

In addition, the following files were also adapted to master branch
BPicture changes during the merge:
	src/kits/interface/PicturePlayer.h
	src/servers/app/PictureBoundingBoxPlayer.cpp
2015-11-10 23:09:54 +01:00
Rene Gollent
081d56c4d9 Debugger: Fix potential VariablesView crash.
- In some contexts, VariablesView doesn't have an associated thread
  and stack frame, which would lead to a potential crash when resolving
  expression nodes.
2015-11-10 14:38:26 -05:00
Rene Gollent
d6a334fa21 Debugger: Adjust TeamWindow to use ExpressionEvaluationWindow.
- Requesting expression evaluation from the top level menu now
  invokes an expression eval window, rather than the past prompt.

ExpressionPromptWindow:
- Simplify, as it's now strictly used to add persistent expressions.
2015-11-10 14:38:24 -05:00
Rene Gollent
94acd9251e Debugger: Add dedicated expression evaluation window.
- Rather than dropping one-off expression evaluation results into the
  current team's variables view, they will now be handled in a dedicated
  window, which also allows to control the context in which the expression
  is evaluated.
2015-11-10 14:01:15 -05:00
Rene Gollent
b4058de7fe ValueNodeManager: Add flag to control frame variables.
- We now take a flag which determines whether or not to add parameters
  and locals from the frame to the container.
2015-11-10 14:01:14 -05:00
Rene Gollent
be32382a6d Debugger: Adjust initial configuration of VariablesView.
- VariablesView is now passed a ValueNodeManager to use at
  construction time, rather than creating one itself internally.
- Adjust TeamWindow accordingly.
2015-11-10 14:01:12 -05:00
Rene Gollent
90da71b645 VariablesView: Style cleanups. 2015-11-10 14:01:10 -05:00
John Scipione
d3628dcd8f IK: Move CheckNodeIconHintPrivate to Tracker
* Move BPrivate::BNodeInfo::CheckNodeIconHintPrivate() to Tracker's
  Model class.
* Rename HasVectorIconHint(BNode*) to CheckNodeIconHint(BNode*).
  and make it check not only for vector icons but also if you have
  BOTH large and mini icons.
* Replace instances of CheckNodeIconHintPrivate() with the newly
  created CheckNodeIconHint().
2015-11-10 09:15:17 -08:00
Axel Dörfler
70708ef97d launch_daemon: Retrieve default port from monitoring BRoster.
* Instead, we now maintain a default port for a job. For "legacy"
  services, BRoster's B_SOME_APP_LAUNCHED will update it, too.
* This allows to quit Tracker using "launch_roster stop".
* Also, this fixes bug #12249, as we don't use the signature variant of
  creating BMessenger anymore in Job::GetMessenger(). This would call
  into the launch_daemon again, and deadlock.
2015-11-10 15:55:35 +01:00
Adrien Destugues
534d0e6160 SerialConnect: allow to change line terminator
* It can now be used to send AT commands for example, which need \r
  instead of \n.
2015-11-10 09:55:48 +01:00
Adrien Destugues
d3b6b9e5f7 BSecureSocket: use "trusted first" validation algorithm.
* This makes it work with the new ca_root_certificates package.

Fixes #12004.
2015-11-10 09:22:02 +01:00
Axel Dörfler
93c0a5d790 Reworked little endian bitfields a bit.
* Added B_ prefix.
* Renamed 16 bit variants to B_LENDIAN16_*.
* Added 32 bit variants (albeit only 16 of them for now).
* Adjusted headers that were using them.
2015-11-10 08:47:48 +01:00
Michael Lotz
ab306fb8f5 BPathMonitor: Fix locking order reversal introduced in 8599f4b.
The sLocker was used as an outer lock with the sLooper locked within.
The sLocker therefore can't be used within MessageReceived() as that
could lead to deadlocks due to reversal of the locking order.

Instead of two locks, just use locking the looper for all serialization.
While this has a higher overhead to using a BLocker (due to the looper
list locking and lookups) this shouldn't be too problematic.
2015-11-09 23:11:57 +01:00