Coverage Report

Created: 2021-08-22 09:07

/src/skia/third_party/externals/dng_sdk/source/dng_memory.cpp
Line
Count
Source (jump to first uncovered line)
1
/*****************************************************************************/
2
// Copyright 2006 Adobe Systems Incorporated
3
// All Rights Reserved.
4
//
5
// NOTICE:  Adobe permits you to use, modify, and distribute this file in
6
// accordance with the terms of the Adobe license agreement accompanying it.
7
/*****************************************************************************/
8
9
/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_memory.cpp#1 $ */ 
10
/* $DateTime: 2012/05/30 13:28:51 $ */
11
/* $Change: 832332 $ */
12
/* $Author: tknoll $ */
13
14
/*****************************************************************************/
15
16
#include "dng_memory.h"
17
18
#include "dng_bottlenecks.h"
19
#include "dng_exceptions.h"
20
#include "dng_safe_arithmetic.h"
21
22
/*****************************************************************************/
23
24
dng_memory_data::dng_memory_data ()
25
  
26
  : fBuffer (NULL)
27
  
28
1.37M
  {
29
  
30
1.37M
  }
31
32
/*****************************************************************************/
33
34
dng_memory_data::dng_memory_data (uint32 size)
35
36
  : fBuffer (NULL)
37
  
38
26.5k
  {
39
  
40
26.5k
  Allocate (size);
41
  
42
26.5k
  }
43
44
/*****************************************************************************/
45
46
dng_memory_data::dng_memory_data (uint32 count, std::size_t elementSize)
47
48
  : fBuffer (NULL)
49
  
50
0
  {
51
  
52
0
  Allocate (count, elementSize);
53
  
54
0
  }
55
56
/*****************************************************************************/
57
58
dng_memory_data::~dng_memory_data ()
59
1.39M
  {
60
  
61
1.39M
  Clear ();
62
  
63
1.39M
  }
64
        
65
/*****************************************************************************/
66
67
void dng_memory_data::Allocate (uint32 size)
68
32.7k
  {
69
  
70
32.7k
  Clear ();
71
  
72
32.7k
  if (size)
73
32.7k
    {
74
    
75
32.7k
    fBuffer = (char*)malloc (size);
76
    
77
32.7k
    if (!fBuffer)
78
0
      {
79
      
80
0
      ThrowMemoryFull ();
81
             
82
0
      }
83
    
84
32.7k
    }
85
  
86
32.7k
  }
87
        
88
/*****************************************************************************/
89
90
void dng_memory_data::Allocate (uint32 count, std::size_t elementSize)
91
0
  {
92
  
93
  // Convert elementSize to a uint32.
94
0
  const uint32 elementSizeAsUint32 = static_cast<uint32> (elementSize);
95
0
  if (static_cast<std::size_t> (elementSizeAsUint32) != elementSize)
96
0
    {
97
0
    ThrowMemoryFull();
98
0
    }
99
  
100
  // Compute required number of bytes and allocate memory.
101
0
  uint32 numBytes;
102
0
  if (!SafeUint32Mult(count, elementSizeAsUint32, &numBytes))
103
0
    {
104
0
    ThrowMemoryFull();
105
0
    }
106
0
  Allocate(numBytes);
107
  
108
0
  }
109
110
void dng_memory_data::Clear ()
111
1.45M
  {
112
  
113
1.45M
  if (fBuffer)
114
32.7k
    {
115
    
116
32.7k
    free (fBuffer);
117
    
118
32.7k
    fBuffer = NULL;
119
    
120
32.7k
    }
121
    
122
1.45M
  }
123
        
124
/*****************************************************************************/
125
126
dng_memory_block * dng_memory_block::Clone (dng_memory_allocator &allocator) const
127
0
  {
128
  
129
0
  uint32 size = LogicalSize ();
130
  
131
0
  dng_memory_block * result = allocator.Allocate (size);
132
  
133
0
  DoCopyBytes (Buffer (), result->Buffer (), size);
134
    
135
0
  return result;
136
  
137
0
  }
138
139
/*****************************************************************************/
140
141
class dng_malloc_block : public dng_memory_block
142
  {
143
  
144
  private:
145
  
146
    void *fMalloc;
147
  
148
  public:
149
  
150
    dng_malloc_block (uint32 logicalSize);
151
    
152
    virtual ~dng_malloc_block ();
153
    
154
  private:
155
  
156
    // Hidden copy constructor and assignment operator.
157
    
158
    dng_malloc_block (const dng_malloc_block &block);
159
    
160
    dng_malloc_block & operator= (const dng_malloc_block &block);
161
  
162
  };
163
  
164
/*****************************************************************************/
165
166
dng_malloc_block::dng_malloc_block (uint32 logicalSize)
167
168
  : dng_memory_block (logicalSize)
169
  
170
  , fMalloc (NULL)
171
  
172
0
  {
173
174
0
#if (qLinux && !defined(__ANDROID_API__)) || (defined(__ANDROID_API__) && __ANDROID_API__ >= 17)
175
176
0
  int err = ::posix_memalign( (void **) &fMalloc, 16, (size_t) PhysicalSize() );
177
178
0
  if (err)
179
0
    {
180
181
0
    ThrowMemoryFull ();
182
183
0
    }
184
185
#else
186
187
  fMalloc = (char*)malloc (PhysicalSize ());
188
  
189
  if (!fMalloc)
190
    {
191
    
192
    ThrowMemoryFull ();
193
           
194
    }
195
    
196
#endif
197
198
0
  SetBuffer (fMalloc);
199
  
200
0
  }
201
    
202
/*****************************************************************************/
203
204
dng_malloc_block::~dng_malloc_block ()
205
0
  {
206
  
207
0
  if (fMalloc)
208
0
    {
209
    
210
0
    free (fMalloc);
211
    
212
0
    }
213
  
214
0
  }
215
    
216
/*****************************************************************************/
217
218
dng_memory_block * dng_memory_allocator::Allocate (uint32 size)
219
0
  {
220
  
221
0
  dng_memory_block *result = new dng_malloc_block (size);
222
  
223
0
  if (!result)
224
0
    {
225
    
226
0
    ThrowMemoryFull ();
227
    
228
0
    }
229
  
230
0
  return result;
231
  
232
0
  }
233
234
/*****************************************************************************/
235
236
dng_memory_allocator gDefaultDNGMemoryAllocator;
237
238
/*****************************************************************************/