small clipping holes to the TestView user clipping.
* Added a bunch of new tests. Here are some numbers from the test environment,
which is similar to running Haiku in VESA mode:
Horizontal lines per second:
Haiku: 192964.663 (117,7%)
ZETA: 163977.006
Vertical lines per second:
Haiku: 90109.985 (276.9%)
ZETA: 32538.458
Random lines per second:
Haiku: 7998.451 (23.1%)
ZETA: 34602.539
Random colored lines per second:
Haiku: 7976.437 (22.9%)
ZETA: 34788.247
Random clipped lines per second:
Haiku: 262.180 (2.5%)
ZETA: 10394.794
Clipped glyphs per second:
Haiku: 5911.526 (1.0%)
ZETA: 590508.726
Obviously the clipping performance is a punch in the stomache.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26683 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Use more letters of the roman alphabet (doh...)
* Tested drawing mode is currently B_OP_COPY
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26681 a95241bf-73f2-0310-859d-f6bbb57e9c96
of the Haiku app_server. The immediate comparison are of course BeOS and ZETA.
Currently, it measures the performance of drawing untransformed text. For
now, I have only tested on ZETA and the app_server testing environment. Will
let you know my findings with Haiku running on real hardware.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26680 a95241bf-73f2-0310-859d-f6bbb57e9c96
buffer lives in userland can easily be checked via IS_USER_ADDRESS.
* Added B_VIP_IO_REQUEST flag which will be used by the page writer and
should cause allocations to be made in a way that they cannot fail.
Not implemented yet, though.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26632 a95241bf-73f2-0310-859d-f6bbb57e9c96
helps to avoid stupid mistakes. The driver works again, though things
are still not stable.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26605 a95241bf-73f2-0310-859d-f6bbb57e9c96
Something is still fishy though: Opening the dma_resources_test device
in DiskProbe, the wrong data is shown. do_io() seems to be invoked with
the correct physical address, vm_get_physical_page() succeeds, and after
memcpy() the correct data are in the virtual address it returned, but
db in the kernel debugger shows that the data in the physical page have
not been changed. When quitting DiskProbe the "page still has mappings"
assert is triggered for the page.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26602 a95241bf-73f2-0310-859d-f6bbb57e9c96
driver name didn't work here.
* Enabled using the I/O scheduler in the read() and write() hooks.
Something's still broken, though.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26598 a95241bf-73f2-0310-859d-f6bbb57e9c96
really work yet (there are some bits missing in the IORequest and IOScheduler
to able to use them this way).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26565 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Moved data buffer creation to a TestSuiteContext class.
* Added checks if the I/O operation does the correct thing, ie. reads/writes
the data to the right offset.
* Rearranged DMA translation: we now handle the partial write case correctly
(bounce buffer must always span over the whole block), and are able to join
adjacent bounce buffers together.
* The new _AddBounceBuffer() method also respects boundary and segment size
restrictions for bounce buffers.
* IOOperation now prepares the outgoing vecs/offset/length to contain the
right data for the current phase (partial read begin/end/do-all); it will
also make sure that the lengths of the vecs are of the same size than the
whole request.
* All tests are now passed, the I/O request implementation seems to be ready
for integration now.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26556 a95241bf-73f2-0310-859d-f6bbb57e9c96
More work on the I/O scheduler, more precisely mainly the DMAResource class:
* When splitting requests into operations, we're now able to flexibly mix
bounce buffer segments and the given physical vectors in a single
operation. This reduces the number of operations.
* Squashed several TODO and fleshed out more of the implementation.
* Added a test driver running unit tests. There are only a few tests yet,
but those pass.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26519 a95241bf-73f2-0310-859d-f6bbb57e9c96
* added NetEndpointTest that exposed a couple of bugs
* fixed several bugs in the implementation of BNetEndpoint, some of which kept
NetPenguin from working
* fixed a couple of constness issues in BNetEndpoint and BNetAddress
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26405 a95241bf-73f2-0310-859d-f6bbb57e9c96
* statusbar was used to test and improve some BStatusBar behavior
* lagging_get_mouse demonstrates what the problem is with older
applications using synchronous GetMouse() calls without specifying
that they actually don't care about mouse history.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26327 a95241bf-73f2-0310-859d-f6bbb57e9c96
to draw a bitmap and a B_MIXED_COLORS pattern. This shows that most of the
Haiku drawing modes are off of what the BeBook documents them to be and also
shows that B_OP_SELECT is actually broken under R5.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26074 a95241bf-73f2-0310-859d-f6bbb57e9c96
get drawn into a window with random colors. With that one can for example add
code to the app_server or interface kit classes that push through rects or
regions to see what exactly is going on in drawing operations. Code examples
of how to use are at the top of the file. Has fixed window dimensions though
as I was lazy :-)
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25855 a95241bf-73f2-0310-859d-f6bbb57e9c96
(or at least incompatibly) uses the user set clipping region when determining
whether or not to call Draw() on a view. Under BeOS when a some part of a view
is exposed it will always trigger a Draw(), even if the current clipping region
disallows drawing in the supplied update rect. Under Haiku however the view is
not considered for an update when the current clipping region does not
intersect with the newly exposed area.
Running this test app from the Terminal this behaviour can be seen. When
clicking inside the window a floating window pops up. When clicking again it
goes away and triggers a redraw. When hitting a key, a clipping region is set
that does not overlap with the floating window. After this clipping is set,
the view does not get any Draw() call anymore when the floating window goes
away.
This is the reason for the redraw issues in firefox, as firefox uses the
clipping region to constrain its asynchronous drawing, but does never reset
the clipping to NULL. As firefox just collects the update rects in Draw() and
then draws the contents itself, once the clipping region is set, many of the
Draw() calls don't get called and the interface parts are never redrawn.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25853 a95241bf-73f2-0310-859d-f6bbb57e9c96
infos (should all be defaults expect for a few).
This shows that with our default installation there are quite a few "condensed"
styles and also an "extra light" variation. The condensed ones should probably
get their own face flag. The "extra light" and other unhandled styles should
probably not be classified as a B_REGULAR_FACE as this could lead applications
to use them in a wrong way yielding unexpected results (i.e. firefox that
picks up the "extra light" style for it's interface font).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25630 a95241bf-73f2-0310-859d-f6bbb57e9c96
* made the output easier to observe
* added the sigsuspend_6-1 test to the package
* made the fork_3-1 test return when it fails
* added output to the pthread_once tests
* other minor cosmetic changes
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25567 a95241bf-73f2-0310-859d-f6bbb57e9c96
into the kernel:
* Added device_removed() function to the device level as well.
* A device_node now also tracks its published devices.
* Made the driver API more consistent with the device API; instead of the node,
they now get the driverCookie (so they now need to store the node themselves,
the driver cookie could be retrieved via the node).
Alternatively, one could either pass both, or have something similar to what
Ingo did for the file systems, ie. pass a structure that contains both
elements. Suggestions welcome.
* Implemented device node replacement when a better driver becomes available:
the new node (and its devices) is already published even though the old device
is still in use. The new device is B_BUSY until the old one is closed.
* Implemented an update cycle counter: this will prevent a device node from
being probed again, if there is no new driver since the last time; eventually
this will be moved into devfs, though.
* Driver removal and replacement now works as expected in all tested scenarios
(device removed, better driver installed, both with and without open device).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25512 a95241bf-73f2-0310-859d-f6bbb57e9c96
* added [un]publish_device() calls to the device manager.
* added a very basic devfs emulation to the playground to be able to test how
the manager reacts to opened devices.
* renamed *_device() functions to *_node() in the device manager API.
* made B_DEVICE_FIND_CHILD_FLAGS a generic flags field, and renamed it to
B_DEVICE_FLAGS.
* added support for keeping a driver loaded as long as its device is available.
* implemented get_next_child_node().
* added test for device removal, and implemented unregister_node() for this.
* fixed some bugs in the device node reference/initialization count maintenance.
* moved more code from register_node() to device_node::Register().
* initialize the device_node::fFlags member to the value of B_DEVICE_FLAGS, and
have additional private flags.
* renamed UninitUnusedChildren() to UninitUnusedDriver(), and fixed this
function by adding the new flag NODE_FLAG_REGISTER_INITIALIZED.
* Now remembers the support when a driver is registered - this will be used
later to be able to compare with a new driver without having to call
supports_device() again.
* Removed NODE_FLAG_REMOVE_ON_UNINIT again, as that was pretty stupid - there
is reference counting for a reason.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25498 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Added a generic (for all devices) and specific (for a specific device) video
driver to be able to play with the replace mechanism (which is not yet done,
but works well for the one usage case tested).
* Added reference counting and initialize counting: now, each node owns a
reference of its parent, and each initialized node owns an initialization
reference of its parent.
* Added locking.
* Moved dump functionality into a member function.
* The same node can now only added once - ie. if a bus tries to register the
same device twice, it will fail.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25453 a95241bf-73f2-0310-859d-f6bbb57e9c96
when a signal handler that itself uses the allocator is invoked while
the thread originally was in the allocator.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25449 a95241bf-73f2-0310-859d-f6bbb57e9c96
* get_driver() now returns a result, as you may theoretically call it on
any node (and not just your parent, which is guaranteed to be there).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25406 a95241bf-73f2-0310-859d-f6bbb57e9c96
interface information (in the PCI notion) to a node, and the possible paths
of a device driver are generated from that information by the device manager.
* Removed the "is bus" attribute - the device manager now decides wether or not
a device always loads its children (as opposed to on demand loading only),
even if the B_FIND_CHILD_ON_DEMAND flag is specified.
* device_node::Register() now correctly maintains the fRegistered member field.
* Replaced the driver_module() and driver_data() methods with a get_driver()
method that retrieves all information at once.
* Cleaned attribute names.
* Some other cleanup, adding const where it makes sense.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25394 a95241bf-73f2-0310-859d-f6bbb57e9c96
flexible; now, a driver type can result in any number of paths to probe.
* Also, the "bus" modules (busses/bus_managers) are now always probed - that's
only a temporary solution and should be restricted to certain driver types
later.
* Added a userland buildable version of KPath.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25383 a95241bf-73f2-0310-859d-f6bbb57e9c96
5ms off. Not really good...
* The test on non-shared unnamed semaphores doesn't request a shared
semaphore anymore. It passes under Haiku, now.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25363 a95241bf-73f2-0310-859d-f6bbb57e9c96
semantics of fork()ing with unnamed semaphores on other platforms is
different from what I thought it was.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25347 a95241bf-73f2-0310-859d-f6bbb57e9c96