aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow
diff options
context:
space:
mode:
authorGravatar Jared Duke <jdduke@google.com>2018-08-29 08:58:27 -0700
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2018-08-29 09:07:49 -0700
commit97fb9a9c7c72c405a790eea698a91654d5184fed (patch)
treede458ca70534a20174fc0fc93465da416e0f9d20 /tensorflow
parent0f443619fb13fcd5c34cb7d8c867b64339afdcfc (diff)
Disable rtti for (most) TFLite targets on Android
PiperOrigin-RevId: 210729533
Diffstat (limited to 'tensorflow')
-rw-r--r--tensorflow/contrib/lite/allocation.cc4
-rw-r--r--tensorflow/contrib/lite/allocation.h12
-rw-r--r--tensorflow/contrib/lite/build_def.bzl3
-rw-r--r--tensorflow/contrib/lite/mmap_allocation.cc2
-rw-r--r--tensorflow/contrib/lite/mmap_allocation_disabled.cc2
-rw-r--r--tensorflow/contrib/lite/model_test.cc1
-rw-r--r--tensorflow/contrib/lite/nnapi_delegate.cc6
-rw-r--r--tensorflow/contrib/lite/nnapi_delegate.h1
8 files changed, 28 insertions, 3 deletions
diff --git a/tensorflow/contrib/lite/allocation.cc b/tensorflow/contrib/lite/allocation.cc
index 8946261814..a1c1d079b0 100644
--- a/tensorflow/contrib/lite/allocation.cc
+++ b/tensorflow/contrib/lite/allocation.cc
@@ -72,6 +72,8 @@ const void* FileCopyAllocation::base() const { return copied_buffer_.get(); }
size_t FileCopyAllocation::bytes() const { return buffer_size_bytes_; }
bool FileCopyAllocation::valid() const { return copied_buffer_ != nullptr; }
+
+Allocation::Type FileCopyAllocation::type() const { return Type::kFileCopy; }
#endif
MemoryAllocation::MemoryAllocation(const void* ptr, size_t num_bytes,
@@ -89,4 +91,6 @@ size_t MemoryAllocation::bytes() const { return buffer_size_bytes_; }
bool MemoryAllocation::valid() const { return buffer_ != nullptr; }
+Allocation::Type MemoryAllocation::type() const { return Type::kMemory; }
+
} // namespace tflite
diff --git a/tensorflow/contrib/lite/allocation.h b/tensorflow/contrib/lite/allocation.h
index 121f3d2646..ca935f6fd4 100644
--- a/tensorflow/contrib/lite/allocation.h
+++ b/tensorflow/contrib/lite/allocation.h
@@ -30,6 +30,13 @@ namespace tflite {
// A memory allocation handle. This could be a mmap or shared memory.
class Allocation {
public:
+ enum class Type {
+ kMMAP, // Backed by mmap.
+ kFileCopy, // Backed by memory copied from a file.
+ kMemory, // Backed by an existing memory buffer.
+ kNNAPI, // Backed by mmap and an associated NNAPI buffer.
+ };
+
Allocation(ErrorReporter* error_reporter) : error_reporter_(error_reporter) {}
virtual ~Allocation() {}
@@ -39,6 +46,8 @@ class Allocation {
virtual size_t bytes() const = 0;
// Whether the allocation is valid
virtual bool valid() const = 0;
+ // The type of the allocation
+ virtual Type type() const = 0;
protected:
ErrorReporter* error_reporter_;
@@ -51,6 +60,7 @@ class MMAPAllocation : public Allocation {
const void* base() const override;
size_t bytes() const override;
bool valid() const override;
+ Type type() const override;
static bool IsSupported();
@@ -68,6 +78,7 @@ class FileCopyAllocation : public Allocation {
const void* base() const override;
size_t bytes() const override;
bool valid() const override;
+ Type type() const override;
private:
// Data required for mmap.
@@ -86,6 +97,7 @@ class MemoryAllocation : public Allocation {
const void* base() const override;
size_t bytes() const override;
bool valid() const override;
+ Type type() const override;
private:
const void* buffer_;
diff --git a/tensorflow/contrib/lite/build_def.bzl b/tensorflow/contrib/lite/build_def.bzl
index fc199f0a0e..7add86fd5a 100644
--- a/tensorflow/contrib/lite/build_def.bzl
+++ b/tensorflow/contrib/lite/build_def.bzl
@@ -4,6 +4,7 @@ load(
"//tensorflow:tensorflow.bzl",
"tf_cc_shared_object",
"tf_cc_test",
+ "tf_opts_nortti_if_android",
)
def tflite_copts():
@@ -34,7 +35,7 @@ def tflite_copts():
}) + select({
str(Label("//tensorflow:with_default_optimizations")): [],
"//conditions:default": ["-DGEMMLOWP_ALLOW_SLOW_SCALAR_FALLBACK"],
- })
+ }) + tf_opts_nortti_if_android()
return copts
diff --git a/tensorflow/contrib/lite/mmap_allocation.cc b/tensorflow/contrib/lite/mmap_allocation.cc
index fa9a3cd1d8..fbe1bba864 100644
--- a/tensorflow/contrib/lite/mmap_allocation.cc
+++ b/tensorflow/contrib/lite/mmap_allocation.cc
@@ -56,6 +56,8 @@ size_t MMAPAllocation::bytes() const { return buffer_size_bytes_; }
bool MMAPAllocation::valid() const { return mmapped_buffer_ != MAP_FAILED; }
+Allocation::Type MMAPAllocation::type() const { return Type::kMMAP; }
+
bool MMAPAllocation::IsSupported() { return true; }
} // namespace tflite
diff --git a/tensorflow/contrib/lite/mmap_allocation_disabled.cc b/tensorflow/contrib/lite/mmap_allocation_disabled.cc
index f3d4cf1a25..b8756d78f7 100644
--- a/tensorflow/contrib/lite/mmap_allocation_disabled.cc
+++ b/tensorflow/contrib/lite/mmap_allocation_disabled.cc
@@ -34,6 +34,8 @@ size_t MMAPAllocation::bytes() const { return 0; }
bool MMAPAllocation::valid() const { return false; }
+Allocation::Type MMAPAllocation::type() const { return Type::kMMAP; }
+
bool MMAPAllocation::IsSupported() { return false; }
} // namespace tflite
diff --git a/tensorflow/contrib/lite/model_test.cc b/tensorflow/contrib/lite/model_test.cc
index df4f60d4ad..66ba278a3e 100644
--- a/tensorflow/contrib/lite/model_test.cc
+++ b/tensorflow/contrib/lite/model_test.cc
@@ -275,6 +275,7 @@ TEST(BasicFlatBufferModel, TestBuildFromModel) {
TestErrorReporter reporter;
FileCopyAllocation model_allocation(
"tensorflow/contrib/lite/testdata/test_model.bin", &reporter);
+ ASSERT_EQ(model_allocation.type(), Allocation::Type::kFileCopy);
ASSERT_TRUE(model_allocation.valid());
::flatbuffers::Verifier verifier(
reinterpret_cast<const uint8_t*>(model_allocation.base()),
diff --git a/tensorflow/contrib/lite/nnapi_delegate.cc b/tensorflow/contrib/lite/nnapi_delegate.cc
index 38f3e9881b..8090c413d8 100644
--- a/tensorflow/contrib/lite/nnapi_delegate.cc
+++ b/tensorflow/contrib/lite/nnapi_delegate.cc
@@ -191,8 +191,10 @@ TfLiteStatus addTensorOperands(tflite::Interpreter* interpreter,
// TODO(aselle): Based on Michael's suggestion, limiting this to read
// only memory
if (tensor->allocation_type == kTfLiteMmapRo) {
- if (const NNAPIAllocation* alloc = dynamic_cast<const NNAPIAllocation*>(
- static_cast<const Allocation*>(tensor->allocation))) {
+ if (static_cast<const Allocation*>(tensor->allocation)->type() ==
+ Allocation::Type::kNNAPI) {
+ const NNAPIAllocation* alloc =
+ static_cast<const NNAPIAllocation*>(tensor->allocation);
RETURN_ERROR_IF_NN_FAILED(
ANeuralNetworksModel_setOperandValueFromMemory(
nn_model, next_id, alloc->memory(),
diff --git a/tensorflow/contrib/lite/nnapi_delegate.h b/tensorflow/contrib/lite/nnapi_delegate.h
index 2bdb2cc5c8..cdc2493b3b 100644
--- a/tensorflow/contrib/lite/nnapi_delegate.h
+++ b/tensorflow/contrib/lite/nnapi_delegate.h
@@ -40,6 +40,7 @@ class NNAPIAllocation : public MMAPAllocation {
ANeuralNetworksMemory* memory() const { return handle_; }
bool valid() const override { return handle_ != nullptr; }
+ Type type() const override { return Type::kNNAPI; }
private:
mutable ANeuralNetworksMemory* handle_ = nullptr;