Remove more String8
Change-Id: I2b43c3c104eab7cb3b6573bea4858f6c2d0a76ca
diff --git a/rsAllocation.cpp b/rsAllocation.cpp
index 0c271c1..057ce6f 100644
--- a/rsAllocation.cpp
+++ b/rsAllocation.cpp
@@ -236,13 +236,14 @@
void Allocation::dumpLOGV(const char *prefix) const {
ObjectBase::dumpLOGV(prefix);
+ char buf[1024];
- String8 s(prefix);
- s.append(" type ");
- if (mHal.state.type) {
- mHal.state.type->dumpLOGV(s.string());
+ if ((strlen(prefix) + 10) < sizeof(buf)) {
+ sprintf(buf, "%s type ", prefix);
+ if (mHal.state.type) {
+ mHal.state.type->dumpLOGV(buf);
+ }
}
-
ALOGV("%s allocation ptr=%p mUsageFlags=0x04%x, mMipmapControl=0x%04x",
prefix, mHal.drvState.lod[0].mallocPtr, mHal.state.usageFlags, mHal.state.mipmapControl);
}
@@ -327,9 +328,7 @@
void Allocation::serialize(Context *rsc, OStream *stream) const {
// Need to identify ourselves
stream->addU32((uint32_t)getClassId());
-
- String8 name(getName());
- stream->addString(&name);
+ stream->addString(getName());
// First thing we need to serialize is the type object since it will be needed
// to initialize the class
@@ -358,8 +357,7 @@
return NULL;
}
- String8 name;
- stream->loadString(&name);
+ const char *name = stream->loadString();
Type *type = Type::createFromStream(rsc, stream);
if (!type) {
@@ -382,8 +380,7 @@
return NULL;
}
- alloc->setName(name.string(), name.size());
-
+ alloc->assignName(name);
if (dataSize == type->getSizeBytes()) {
uint32_t count = dataSize / type->getElementSizeBytes();
// Read in all of our allocation data
diff --git a/rsElement.cpp b/rsElement.cpp
index 559d567..29725c6 100644
--- a/rsElement.cpp
+++ b/rsElement.cpp
@@ -44,7 +44,12 @@
}
void Element::clear() {
- delete [] mFields;
+ if (mFields) {
+ for (size_t i = 0; i < mFieldCount; i++) {
+ delete[] mFields[i].name;
+ }
+ delete [] mFields;
+ }
mFields = NULL;
mFieldCount = 0;
mHasReference = false;
@@ -87,7 +92,7 @@
for (uint32_t ct = 0; ct < mFieldCount; ct++) {
ALOGV("%s Element field index: %u ------------------", prefix, ct);
ALOGV("%s name: %s, offsetBits: %u, arraySize: %u",
- prefix, mFields[ct].name.string(), mFields[ct].offsetBits, mFields[ct].arraySize);
+ prefix, mFields[ct].name, mFields[ct].offsetBits, mFields[ct].arraySize);
mFields[ct].e->dumpLOGV(prefix);
}
}
@@ -95,16 +100,14 @@
void Element::serialize(Context *rsc, OStream *stream) const {
// Need to identify ourselves
stream->addU32((uint32_t)getClassId());
-
- String8 name(getName());
- stream->addString(&name);
+ stream->addString(getName());
mComponent.serialize(stream);
// Now serialize all the fields
stream->addU32(mFieldCount);
for (uint32_t ct = 0; ct < mFieldCount; ct++) {
- stream->addString(&mFields[ct].name);
+ stream->addString(mFields[ct].name);
stream->addU32(mFields[ct].arraySize);
mFields[ct].e->serialize(rsc, stream);
}
@@ -118,8 +121,7 @@
return NULL;
}
- String8 name;
- stream->loadString(&name);
+ const char *name = stream->loadString();
Component component;
component.loadFromStream(stream);
@@ -138,13 +140,9 @@
size_t *subElemNamesLengths = new size_t[fieldCount];
uint32_t *arraySizes = new uint32_t[fieldCount];
- String8 elemName;
for (uint32_t ct = 0; ct < fieldCount; ct ++) {
- stream->loadString(&elemName);
- subElemNamesLengths[ct] = elemName.length();
- char *tmpName = new char[subElemNamesLengths[ct]];
- memcpy(tmpName, elemName.string(), subElemNamesLengths[ct]);
- subElemNames[ct] = tmpName;
+ subElemNames[ct] = stream->loadString();
+ subElemNamesLengths[ct] = strlen(subElemNames[ct]);
arraySizes[ct] = stream->loadU32();
subElems[ct] = Element::createFromStream(rsc, stream);
}
@@ -155,6 +153,7 @@
delete [] subElemNames[ct];
subElems[ct]->decUserRef();
}
+ delete[] name;
delete[] subElems;
delete[] subElemNames;
delete[] subElemNamesLengths;
@@ -179,7 +178,7 @@
uint32_t noPaddingFieldCount = 0;
for (uint32_t ct = 0; ct < mFieldCount; ct ++) {
- if (mFields[ct].name.string()[0] != '#') {
+ if (mFields[ct].name[0] != '#') {
noPaddingFieldCount ++;
}
}
@@ -203,14 +202,14 @@
mHasReference = true;
}
- if (mFields[ct].name.string()[0] == '#') {
+ if (mFields[ct].name[0] == '#') {
continue;
}
mHal.state.fields[ctNoPadding] = mFields[ct].e.get();
mHal.state.fieldArraySizes[ctNoPadding] = mFields[ct].arraySize;
- mHal.state.fieldNames[ctNoPadding] = mFields[ct].name.string();
- mHal.state.fieldNameLengths[ctNoPadding] = mFields[ct].name.length() + 1; // to include 0
+ mHal.state.fieldNames[ctNoPadding] = mFields[ct].name;
+ mHal.state.fieldNameLengths[ctNoPadding] = strlen(mFields[ct].name) + 1; // to include 0
mHal.state.fieldOffsetBytes[ctNoPadding] = mFields[ct].offsetBits >> 3;
ctNoPadding ++;
@@ -274,8 +273,8 @@
}
if ((ee->mFields[i].e.get() != ein[i]) ||
- (ee->mFields[i].name.length() != len) ||
- (ee->mFields[i].name != nin[i]) ||
+ (strlen(ee->mFields[i].name) != len) ||
+ strcmp(ee->mFields[i].name, nin[i]) ||
(ee->mFields[i].arraySize != asize)) {
match = false;
break;
@@ -307,7 +306,7 @@
}
e->mFields[ct].e.set(ein[ct]);
- e->mFields[ct].name.setTo(nin[ct], len);
+ e->mFields[ct].name = rsuCopyString(nin[ct], len);
e->mFields[ct].arraySize = asize;
}
e->compute();
diff --git a/rsElement.h b/rsElement.h
index 32cfda1..b97dfe5 100644
--- a/rsElement.h
+++ b/rsElement.h
@@ -83,7 +83,7 @@
uint32_t getFieldCount() const {return mFieldCount;}
const Element * getField(uint32_t idx) const {return mFields[idx].e.get();}
- const char * getFieldName(uint32_t idx) const {return mFields[idx].name.string();}
+ const char * getFieldName(uint32_t idx) const {return mFields[idx].name;}
uint32_t getFieldArraySize(uint32_t idx) const {return mFields[idx].arraySize;}
const Component & getComponent() const {return mComponent;}
@@ -137,7 +137,7 @@
void clear();
typedef struct {
- String8 name;
+ const char *name;
ObjectBaseRef<const Element> e;
uint32_t offsetBits;
uint32_t offsetBitsUnpadded;
diff --git a/rsFileA3D.cpp b/rsFileA3D.cpp
index c79d008..3b963fe 100644
--- a/rsFileA3D.cpp
+++ b/rsFileA3D.cpp
@@ -73,7 +73,8 @@
uint32_t numIndexEntries = headerStream->loadU32();
for (uint32_t i = 0; i < numIndexEntries; i ++) {
A3DIndexEntry *entry = new A3DIndexEntry();
- headerStream->loadString(&entry->mObjectName);
+ entry->mObjectName = headerStream->loadString();
+
//ALOGV("Header data, entry name = %s", entry->mObjectName.string());
entry->mType = (RsA3DClassID)headerStream->loadU32();
if (mUse64BitOffsets){
@@ -214,6 +215,10 @@
return mIndex.size();
}
+FileA3D::A3DIndexEntry::~A3DIndexEntry() {
+ delete[] mObjectName;
+}
+
const FileA3D::A3DIndexEntry *FileA3D::getIndexEntry(size_t index) const {
if (index < mIndex.size()) {
return mIndex[index];
@@ -320,7 +325,7 @@
uint32_t writeIndexSize = mWriteIndex.size();
headerStream.addU32(writeIndexSize);
for (uint32_t i = 0; i < writeIndexSize; i ++) {
- headerStream.addString(&mWriteIndex[i]->mObjectName);
+ headerStream.addString(mWriteIndex[i]->mObjectName);
headerStream.addU32((uint32_t)mWriteIndex[i]->mType);
if (mUse64BitOffsets){
headerStream.addOffset(mWriteIndex[i]->mOffset);
@@ -334,8 +339,7 @@
}
// Write our magic string so we know we are reading the right file
- String8 magicString(A3D_MAGIC_KEY);
- fwrite(magicString.string(), sizeof(char), magicString.size(), writeHandle);
+ fwrite(A3D_MAGIC_KEY, sizeof(char), strlen(A3D_MAGIC_KEY), writeHandle);
// Store the size of the header to make it easier to parse when we read it
uint64_t headerSize = headerStream.getPos();
@@ -369,7 +373,7 @@
mWriteStream = new OStream(initialStreamSize, false);
}
A3DIndexEntry *indexEntry = new A3DIndexEntry();
- indexEntry->mObjectName.setTo(obj->getName());
+ indexEntry->mObjectName = rsuCopyString(obj->getName());
indexEntry->mType = obj->getClassId();
indexEntry->mOffset = mWriteStream->getPos();
indexEntry->mRsObj = obj;
@@ -420,7 +424,7 @@
for (uint32_t i = 0; i < numFileEntries; i ++) {
const FileA3D::A3DIndexEntry *entry = fa3d->getIndexEntry(i);
fileEntries[i].classID = entry->getType();
- fileEntries[i].objectName = entry->getObjectName().string();
+ fileEntries[i].objectName = rsuCopyString(entry->getObjectName());
}
}
diff --git a/rsFileA3D.h b/rsFileA3D.h
index 06b90d7..8bf36b9 100644
--- a/rsFileA3D.h
+++ b/rsFileA3D.h
@@ -19,7 +19,6 @@
#include "rsMesh.h"
-#include <utils/String8.h>
#include "rsStream.h"
#include <stdio.h>
@@ -43,19 +42,21 @@
bool mUse64BitOffsets;
class A3DIndexEntry {
- String8 mObjectName;
+ const char *mObjectName;
RsA3DClassID mType;
uint64_t mOffset;
uint64_t mLength;
ObjectBase *mRsObj;
public:
friend class FileA3D;
- const String8 &getObjectName() const {
+ const char *getObjectName() const {
return mObjectName;
}
RsA3DClassID getType() const {
return mType;
}
+
+ ~A3DIndexEntry();
};
bool load(FILE *f);
diff --git a/rsFont.cpp b/rsFont.cpp
index a483359..d302182 100644
--- a/rsFont.cpp
+++ b/rsFont.cpp
@@ -58,7 +58,7 @@
return false;
}
- mFontName = name;
+ mFontName = rsuCopyString(name);
mFontSize = fontSize;
mDpi = dpi;
@@ -492,13 +492,13 @@
#endif //ANDROID_RS_SERIALIZE
void FontState::initRenderState() {
- String8 shaderString("varying vec2 varTex0;\n");
- shaderString.append("void main() {\n");
- shaderString.append(" lowp vec4 col = UNI_Color;\n");
- shaderString.append(" col.a = texture2D(UNI_Tex0, varTex0.xy).a;\n");
- shaderString.append(" col.a = pow(col.a, UNI_Gamma);\n");
- shaderString.append(" gl_FragColor = col;\n");
- shaderString.append("}\n");
+ const char *shaderString = "varying vec2 varTex0;\n"
+ "void main() {\n"
+ " lowp vec4 col = UNI_Color;\n"
+ " col.a = texture2D(UNI_Tex0, varTex0.xy).a;\n"
+ " col.a = pow(col.a, UNI_Gamma);\n"
+ " gl_FragColor = col;\n"
+ "}\n";
const char *textureNames[] = { "Tex0" };
const size_t textureNamesLengths[] = { 4 };
@@ -524,7 +524,7 @@
mFontShaderFConstant.set(Allocation::createAllocation(mRSC, inputType.get(),
RS_ALLOCATION_USAGE_SCRIPT |
RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS));
- ProgramFragment *pf = new ProgramFragment(mRSC, shaderString.string(), shaderString.length(),
+ ProgramFragment *pf = new ProgramFragment(mRSC, shaderString, strlen(shaderString),
textureNames, numTextures, textureNamesLengths,
tmp, 4);
mFontShaderF.set(pf);
@@ -757,11 +757,12 @@
Font *currentFont = mRSC->getFont();
if (!currentFont) {
if (!mDefault.get()) {
- String8 fontsDir("/fonts/Roboto-Regular.ttf");
- String8 fullPath(getenv("ANDROID_ROOT"));
- fullPath += fontsDir;
-
- mDefault.set(Font::create(mRSC, fullPath.string(), 8, mRSC->getDPI()));
+ char fullPath[1024];
+ const char * root = getenv("ANDROID_ROOT");
+ rsAssert(strlen(root) < 256);
+ strcpy(fullPath, root);
+ strcat(fullPath, "/fonts/Roboto-Regular.ttf");
+ mDefault.set(Font::create(mRSC, fullPath, 8, mRSC->getDPI()));
}
currentFont = mDefault.get();
}
diff --git a/rsFont.h b/rsFont.h
index f7ad3cd..7bac508 100644
--- a/rsFont.h
+++ b/rsFont.h
@@ -18,7 +18,6 @@
#define ANDROID_RS_FONT_H
#include "rsStream.h"
-#include <utils/String8.h>
#include <utils/Vector.h>
#include <utils/KeyedVector.h>
@@ -113,7 +112,7 @@
int32_t mBitmapTop;
};
- String8 mFontName;
+ const char *mFontName;
float mFontSize;
uint32_t mDpi;
diff --git a/rsMesh.cpp b/rsMesh.cpp
index 651a8f3..8decfc5 100644
--- a/rsMesh.cpp
+++ b/rsMesh.cpp
@@ -81,9 +81,7 @@
void Mesh::serialize(Context *rsc, OStream *stream) const {
// Need to identify ourselves
stream->addU32((uint32_t)getClassId());
-
- String8 name(getName());
- stream->addString(&name);
+ stream->addString(getName());
// Store number of vertex streams
stream->addU32(mHal.state.vertexBuffersCount);
@@ -113,8 +111,7 @@
return NULL;
}
- String8 name;
- stream->loadString(&name);
+ const char *name = stream->loadString();
uint32_t vertexBuffersCount = stream->loadU32();
ObjectBaseRef<Allocation> *vertexBuffers = NULL;
@@ -148,7 +145,7 @@
}
Mesh *mesh = new Mesh(rsc, vertexBuffersCount, primitivesCount);
- mesh->setName(name.string(), name.size());
+ mesh->assignName(name);
for (uint32_t vCount = 0; vCount < vertexBuffersCount; vCount ++) {
mesh->setVertexBuffer(vertexBuffers[vCount].get(), vCount);
}
diff --git a/rsObjectBase.h b/rsObjectBase.h
index 12c89a3..85f8fd8 100644
--- a/rsObjectBase.h
+++ b/rsObjectBase.h
@@ -44,6 +44,7 @@
const char * getName() const {
return mName;
}
+ void assignName(const char *s) {mName = s;}
void setName(const char *);
void setName(const char *, uint32_t len);
diff --git a/rsStream.cpp b/rsStream.cpp
index b9df0cc..a9587c1 100644
--- a/rsStream.cpp
+++ b/rsStream.cpp
@@ -43,10 +43,11 @@
return loadU32();
}
-void IStream::loadString(String8 *s) {
+const char * IStream::loadString() {
uint32_t len = loadU32();
- s->setTo((const char *)&mData[mPos], len);
+ const char *s = rsuCopyString((const char *)&mData[mPos], len);
mPos += len;
+ return s;
}
// Output stream implementation
@@ -89,19 +90,20 @@
}
}
-void OStream::addString(String8 *s) {
- uint32_t len = s->size();
+void OStream::addString(const char *s, size_t len) {
addU32(len);
if (mPos + len*sizeof(char) >= mLength) {
growSize();
}
char *stringData = reinterpret_cast<char *>(&mData[mPos]);
- for (uint32_t i = 0; i < len; i ++) {
- stringData[i] = s->string()[i];
- }
+ memcpy(stringData, s, len);
mPos += len*sizeof(char);
}
+void OStream::addString(const char *s) {
+ addString(s, strlen(s));
+}
+
void OStream::growSize() {
uint8_t *newData = (uint8_t*)malloc(mLength*2);
memcpy(newData, mData, mLength*sizeof(uint8_t));
diff --git a/rsStream.h b/rsStream.h
index 8a192e6..d0ed62e 100644
--- a/rsStream.h
+++ b/rsStream.h
@@ -59,7 +59,7 @@
}
void loadByteArray(void *dest, size_t numBytes);
uint64_t loadOffset();
- void loadString(String8 *s);
+ const char * loadString();
uint64_t getPos() const {
return mPos;
}
@@ -132,7 +132,8 @@
}
void addByteArray(const void *src, size_t numBytes);
void addOffset(uint64_t v);
- void addString(String8 *s);
+ void addString(const char *name);
+ void addString(const char *name, size_t len);
uint64_t getPos() const {
return mPos;
}
diff --git a/rsType.cpp b/rsType.cpp
index 9719a04..2822d5b 100644
--- a/rsType.cpp
+++ b/rsType.cpp
@@ -188,9 +188,7 @@
void Type::serialize(Context *rsc, OStream *stream) const {
// Need to identify ourselves
stream->addU32((uint32_t)getClassId());
-
- String8 name(getName());
- stream->addString(&name);
+ stream->addString(getName());
mElement->serialize(rsc, stream);
@@ -210,8 +208,7 @@
return NULL;
}
- String8 name;
- stream->loadString(&name);
+ const char *name = stream->loadString();
Element *elem = Element::createFromStream(rsc, stream);
if (!elem) {
@@ -225,6 +222,8 @@
uint8_t faces = stream->loadU8();
Type *type = Type::getType(rsc, elem, x, y, z, lod != 0, faces !=0, 0);
elem->decUserRef();
+
+ delete [] name;
return type;
}