aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/ports
diff options
context:
space:
mode:
authorGravatar mtklein@google.com <mtklein@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-09-20 14:31:45 +0000
committerGravatar mtklein@google.com <mtklein@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-09-20 14:31:45 +0000
commit519f9677a41239808f41a7c13ef1f6e05eb1ed50 (patch)
treea7a1acf5fc2c9d8c2390c48bc1a604628ff513e5 /src/ports
parentf91e3d4f54de9976b6538decadd977b19e49eadd (diff)
Add sk_calloc. Remove SkMemory_stdlib, which seems unused.
I'm seeing basically no difference between malloc + bzero and calloc on my desktop, but on a Galaxy Nexus calloc is never slower, and significantly faster once the allocation size becomes large, both for allocation and for _reading_. BUG=skia:1662 R=reed@google.com Review URL: https://codereview.chromium.org/24251008 git-svn-id: http://skia.googlecode.com/svn/trunk@11414 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/ports')
-rw-r--r--src/ports/SkMemory_malloc.cpp34
-rw-r--r--src/ports/SkMemory_mozalloc.cpp8
2 files changed, 29 insertions, 13 deletions
diff --git a/src/ports/SkMemory_malloc.cpp b/src/ports/SkMemory_malloc.cpp
index 73b56079a6..6db65a8524 100644
--- a/src/ports/SkMemory_malloc.cpp
+++ b/src/ports/SkMemory_malloc.cpp
@@ -9,6 +9,14 @@
#include <stdio.h>
#include <stdlib.h>
+static inline void* throwOnFailure(size_t size, void* p) {
+ if (size > 0 && p == NULL) {
+ // If we've got a NULL here, the only reason we should have failed is running out of RAM.
+ sk_out_of_memory();
+ }
+ return p;
+}
+
void sk_throw() {
SkDEBUGFAIL("sk_throw");
abort();
@@ -24,14 +32,7 @@ void* sk_malloc_throw(size_t size) {
}
void* sk_realloc_throw(void* addr, size_t size) {
- void* p = realloc(addr, size);
- if (size == 0) {
- return p;
- }
- if (p == NULL) {
- sk_throw();
- }
- return p;
+ return throwOnFailure(size, realloc(addr, size));
}
void sk_free(void* p) {
@@ -42,10 +43,17 @@ void sk_free(void* p) {
void* sk_malloc_flags(size_t size, unsigned flags) {
void* p = malloc(size);
- if (p == NULL) {
- if (flags & SK_MALLOC_THROW) {
- sk_throw();
- }
+ if (flags & SK_MALLOC_THROW) {
+ return throwOnFailure(size, p);
+ } else {
+ return p;
}
- return p;
+}
+
+void* sk_calloc(size_t size) {
+ return calloc(size, 1);
+}
+
+void* sk_calloc_throw(size_t size) {
+ return throwOnFailure(size, sk_calloc(size));
}
diff --git a/src/ports/SkMemory_mozalloc.cpp b/src/ports/SkMemory_mozalloc.cpp
index 2c049b2a03..4ca9312671 100644
--- a/src/ports/SkMemory_mozalloc.cpp
+++ b/src/ports/SkMemory_mozalloc.cpp
@@ -37,3 +37,11 @@ void sk_free(void* p) {
void* sk_malloc_flags(size_t size, unsigned flags) {
return (flags & SK_MALLOC_THROW) ? moz_xmalloc(size) : moz_malloc(size);
}
+
+void* sk_calloc(size_t size) {
+ return moz_calloc(size, 1);
+}
+
+void* sk_calloc_throw(size_t size) {
+ return moz_xcalloc(size, 1);
+}