Commit Graph

2477 Commits

Author SHA1 Message Date
Campbell Barton
bd2f6c5907 default blend file name setting (untitled.blend) length check wasn't correct, move to generic function BLI_ensure_filename(). 2013-08-29 05:34:58 +00:00
Campbell Barton
260d6cd6b5 micro-optimization, avoid checking is_power_of_2_i once in power_of_2_max_i
also whitespace edit.
2013-08-28 23:49:22 +00:00
Campbell Barton
9e561a641e remove callback BLI_localErrorCallBack from scanfill, was here for years and only ever wrapped printf. 2013-08-28 02:14:24 +00:00
Campbell Barton
27df6a3b54 scanfill curves, ngons, masks had their own memarena code and would allocate a new one for every fill.
now use BLI_memarena and support passing the arena into the fill function, so the arena is re-used, when scanfill is called in a loop.
2013-08-28 02:07:54 +00:00
Bastien Montagne
8bdb1f6155 Get rid of madness about fnmatch: BLI_fnmatch did not do the OS checks, they had to be done in every file using fnmatch (autoexec.c did not, wonder how it could work under unix???).
Thanks to Brecht for noting this!
2013-08-27 18:29:30 +00:00
Campbell Barton
8ef934c73f ghash/bli-listbase edits, rename BLI_ghash_pop -> BLI_ghash_popkey (since it takes a key as an arg and isnt popping any element from the hash as you might expect).
add BLI_pophead/tail, since getting the first element from a list and removing it is a common task.
2013-08-26 23:37:08 +00:00
Campbell Barton
1dba986505 internal changes to ghash/edgehash, reorganize to split out resizing the hash from insertion. 2013-08-26 13:41:13 +00:00
Campbell Barton
762e7da976 add some safety checks in debug mode to ensure sets/hashes aren't confused. 2013-08-26 09:37:15 +00:00
Campbell Barton
3b414b9859 minor changes to edgehassh/ghash
- no need to zero vars when freeing ghash
- de duplicate ghash remove code.
- edgehash clear now works more like ghash.
2013-08-25 21:02:31 +00:00
Campbell Barton
bbce51d116 replace hashes with sets where possible. 2013-08-25 20:03:45 +00:00
Campbell Barton
1d5eff36f5 BKI_gset and EdgeSet api, use when hash values aren't used (reuses ghash internally without allocating space for the value). 2013-08-25 20:00:19 +00:00
Campbell Barton
df01ad250e move doxy docs out of the ghash header into the C file. 2013-08-25 16:28:48 +00:00
Campbell Barton
e2bd3a4644 clearing the mempool can now keep more then a single element reserved. 2013-08-25 16:16:38 +00:00
Campbell Barton
28243b2e5f fix leak in BLI_ghash_clear(). was never freeing entries, add BLI_mempool_clear utility function. 2013-08-25 14:58:26 +00:00
Campbell Barton
e4d278668f code cleanup for mempool, refactor chunk initialization into a static function. 2013-08-25 14:50:40 +00:00
Campbell Barton
a476459c5e merge mempool allocs per chunk, include the data in the BLI_mempool_chunk alloc. 2013-08-25 13:15:22 +00:00
Campbell Barton
3a9eb9b497 doxygen docs for ghash/edgehash 2013-08-25 12:17:46 +00:00
Campbell Barton
150af65d9f For pointer hashing use the same method as python, it gives better distribution.
some tests with high poly mesh data in hashes.
- empty buckets before 4-5%, after 1-2%
- speedup for hash lookups, in my tests lookups take approx ~60% of the time they did before.
2013-08-24 20:30:08 +00:00
Campbell Barton
7c65015ab8 use ints for ghash/edgehash flags, since its allocated theres not much point to try save a few bytes here. 2013-08-24 20:16:14 +00:00
Campbell Barton
585272fbcf cloth was using edgehash not quite correctly:
- was ordering vertex args unnecessarily.
- was adding the same edges multiple times into the edgehash.
2013-08-24 16:06:18 +00:00
Campbell Barton
4b1fc0593e add versions of BLI_ghash_int_new, BLI_ghash_str_new, etc. that take a reserve argument. 2013-08-24 15:14:50 +00:00
Campbell Barton
aefe93d909 revert bucket size change (edgehash was this way for years, since r26206, ghash since r57657)
having 2 free buckets for each entry is faster but uses more memory.

use the original size, best case 3 entries per bucket.
2013-08-24 15:09:57 +00:00
Campbell Barton
0b88b4fad7 when the size of an edgehash is known or can be guessed,
pass in the argument to reserve the size.
2013-08-24 13:47:57 +00:00
Campbell Barton
f2acb10b6b edge hash: take an arg for the guarded-malloc string (as ghash does) 2013-08-24 13:08:55 +00:00
Campbell Barton
9c090cecfe ghash and edgehash api, allow newly defined hashes to take in the size of the hash as an arg (avoids resizing in simple cases when the hash is created and filled immediately). 2013-08-24 13:04:03 +00:00
Sv. Lockal
52eb61f84b Fix state losses for recursive outliner trees (e.g. datablocks editor)
In previous optimization in outliner I assumed that order in treehash was not important.
But testing outliner in datablocks mode revealed a problem: when user expands multiple recursive levels and then closes any element, it always closed the top level of recursion.
Now it should work fine with recursive trees.
Now treehash contains groups of elements indexed by (id,nr,type). Adding an element with the same (id,nr,type) results in appending it to existing group. No duplicates are possible in treehash.
This commit should also make lookups a little bit faster, because searching in small arrays by "used" is faster than searching in hashtable with duplicates by "id,nr,type,used".
2013-08-23 20:35:00 +00:00
Campbell Barton
384b8aafbf patch to add backkbacks for game engine start/end,
by sjoerd_de_vries
2013-08-23 15:45:18 +00:00
Campbell Barton
6f26acb009 simplify dist_to_plane_v3 and add dist_squared_to_plane_v3 2013-08-23 15:19:20 +00:00
Campbell Barton
09ff49755f math api edits - replace point-normal form for a plane with dist_to_plane_v3()
also correct python mathutils api, was missing vector checks.
2013-08-23 14:37:22 +00:00
Campbell Barton
2e2ea1ae21 set function args in BLI_math_rotation as const where possible. 2013-08-23 09:46:11 +00:00
Campbell Barton
77fa1aaab5 modify closest_to_plane_v3 not to use point-normal form. 2013-08-23 05:15:12 +00:00
Campbell Barton
2ee6c0ac6b add utility functions for dealing with planes
- plane_point_side_v3(), a bit like line_point_side_v2()
- isect_point_planes_v3(), moved from paint_hide.c

functions to convert between point/normal pairs.
- plane_from_point_normal_v3()
- plane_to_point_normal_v3()
2013-08-22 15:30:24 +00:00
Campbell Barton
ccc1fc1499 minor internal change: isect_point_poly_v2 was assigning a value past the array bounds,
not that bad since it wasn't read but this isnt good practice and its simple to avoid.
2013-08-21 23:33:50 +00:00
Campbell Barton
5ba8b52923 set nonnull args for BLI_qsort_r 2013-08-21 20:45:51 +00:00
Campbell Barton
4dd9353e56 ghash/edgehash flag wasn't being initialized for new hashes. also init vars in same order for ghash/edgehash. 2013-08-21 20:21:42 +00:00
Campbell Barton
a31db0c7e9 rename recently added BLI_ghash_assign() -> BLI_ghash_reinsert() 2013-08-21 16:06:03 +00:00
Campbell Barton
89c7cf1a49 style cleanup: also use ARRAY_HAS_ITEM macro for mempool check 2013-08-21 02:29:13 +00:00
Campbell Barton
65edd07edf add BLI_memarena_clear function to reset a memarena, keeping the last allocated block for more efficient reuse. 2013-08-20 16:56:46 +00:00
Campbell Barton
38338a51c9 add is_finite_v# functions, use bool's 2013-08-20 09:34:52 +00:00
Sergey Sharybin
ba6b83d63d Get rid of PATH_MAX in Ghost System X11
The reason of this is because PATH_MAX is not guaranteed
to be defined on all platforms and Hurd doesn't define it.

So either we need to support arbitrary long file path or
we need to define own maximum path length.

The rule here would be:

- If it's not big trouble to support arbitrary long paths
  (i.e. in ghost by using std::string instead of char*)
  then arbitrary long path shall be implemented.

- For other cases to use PATH_MAX please include BLI_fileops.h
  which takes care of making sure PATH_MAX is defined.

Additional change: get rid of own changes made yesterday
which were supposed to make storage.c work fine in cases
PATH_MAX is not define, but on the second though it lead
to unneeded complication of the code.

Thanks Campbell for review!
2013-08-20 08:33:04 +00:00
Campbell Barton
20fdea918d code cleanup: confirm include guards to our convention 2013-08-19 14:40:16 +00:00
Sergey Sharybin
82cf4b926b Mistake in revious PATH_MAX commit, sorry! 2013-08-19 12:04:00 +00:00
Sergey Sharybin
d22f324b50 Attempt to fix compilation error of sort.c 2013-08-19 11:50:33 +00:00
Sergey Sharybin
dcef29b691 Fix compilation error on platforms where PATH_MAX is not defined 2013-08-19 11:49:10 +00:00
Sergey Sharybin
c0f8e15295 Speedup for guarded allocator
- Re-arrange locks, so no actual memory allocation
  (which is relatively slow) happens from inside
  the lock. operation system will take care of locks
  which might be needed there on it's own.

- Use spin lock instead of mutex, since it's just
  list operations happens from inside lock, no need
  in mutex here.

- Use atomic operations for memory in use and total
  used blocks counters.

This makes guarded allocator almost the same speed
as non-guarded one in files from Tube project.

There're still MemHead/MemTail overhead which might
be bad for CPU cache utilization
2013-08-19 10:51:40 +00:00
Sergey Sharybin
08c49d8a12 Use reentrant qsort() in particle codes
Particle system code used global variable to sort hair by orig index,
which is not safe for threading at all.

Replaced this with usage of reentrant version of qsort, which is
now implemented in BLI. It was moved from recast navigation code
to BLI, so more areas could use it (if needed).

--
svn merge -r59086:59087 ^/branches/soc-2013-depsgraph_mt
2013-08-19 10:40:47 +00:00
Sergey Sharybin
bec9bcc14c Added check for address being freed by mempool free
When blender is built in debug mode, BLI_mempool_free will
ensure address passed to the function actually belongs to
this pool.

--
svn merge -r58710:58711 ^/branches/soc-2013-depsgraph_mt
2013-08-19 10:18:25 +00:00
Sergey Sharybin
552d068565 Utility benchmarking macros
This new macros could be used to benchmark overall
execution time of some chunk of code, running in cycle.

The usage is:

  void foo(void) {
    TIMEIT_BLOCK_INIT(overall_bar);

    for (...) {
      ...

      TIMEIT_BLOCK_BEGIN(over_bar);
      bar();
      TIMEIT_BLOCK_END(oberall_bar);

      ...
    }

    TIMEIT_BLOCK_STATS(overall_bar)
  }


  This would print total time which was spent on
  running function bar().

--
svn merge -r58281:58283 ^/branches/soc-2013-depsgraph_mt
2013-08-19 10:16:23 +00:00
Brecht Van Lommel
a2541508ac Fix a few compiler warnings reported by clang. 2013-08-18 14:15:51 +00:00
Campbell Barton
754b4ab3bc add hash function BLI_ghash_assign, BLI_edgehash_assign
avoids remove,insert and only hashes the key once.
2013-08-18 03:41:39 +00:00