| Index: third_party/grpc/src/compiler/ruby_plugin.cc
|
| diff --git a/third_party/WebKit/Source/wtf/SpinLock.h b/third_party/grpc/src/compiler/ruby_plugin.cc
|
| similarity index 54%
|
| copy from third_party/WebKit/Source/wtf/SpinLock.h
|
| copy to third_party/grpc/src/compiler/ruby_plugin.cc
|
| index 9146bd52281e0070165592438c3154a3b1be5cfc..bd10d46e9ca774a6aab57e63a112e1293d2eed35 100644
|
| --- a/third_party/WebKit/Source/wtf/SpinLock.h
|
| +++ b/third_party/grpc/src/compiler/ruby_plugin.cc
|
| @@ -1,5 +1,7 @@
|
| /*
|
| - * Copyright (C) 2013 Google Inc. All rights reserved.
|
| + *
|
| + * Copyright 2015, Google Inc.
|
| + * All rights reserved.
|
| *
|
| * Redistribution and use in source and binary forms, with or without
|
| * modification, are permitted provided that the following conditions are
|
| @@ -26,53 +28,45 @@
|
| * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| + *
|
| */
|
|
|
| -#ifndef WTF_SpinLock_h
|
| -#define WTF_SpinLock_h
|
| +// Generates Ruby gRPC service interface out of Protobuf IDL.
|
|
|
| -#include "wtf/Compiler.h"
|
| -#include "wtf/WTFExport.h"
|
| -#include <atomic>
|
| #include <memory>
|
| -#include <mutex>
|
|
|
| -// DESCRIPTION
|
| -// Spinlock is a simple spinlock class based on the standard CPU primitive of
|
| -// atomic increment and decrement of an int at a given memory address. These are
|
| -// intended only for very short duration locks and assume a system with multiple
|
| -// cores. For any potentially longer wait you should be using a real lock.
|
| +#include "src/compiler/config.h"
|
| +#include "src/compiler/ruby_generator.h"
|
| +#include "src/compiler/ruby_generator_helpers-inl.h"
|
|
|
| -namespace WTF {
|
| +class RubyGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
|
| + public:
|
| + RubyGrpcGenerator() {}
|
| + ~RubyGrpcGenerator() {}
|
|
|
| -class SpinLock {
|
| -public:
|
| - using Guard = std::lock_guard<SpinLock>;
|
| -
|
| - ALWAYS_INLINE void lock()
|
| - {
|
| - static_assert(sizeof(m_lock) == sizeof(int), "int and m_lock are different sizes");
|
| - if (LIKELY(!m_lock.exchange(true, std::memory_order_acquire)))
|
| - return;
|
| - lockSlow();
|
| + bool Generate(const grpc::protobuf::FileDescriptor *file,
|
| + const grpc::string ¶meter,
|
| + grpc::protobuf::compiler::GeneratorContext *context,
|
| + grpc::string *error) const {
|
| + grpc::string code = grpc_ruby_generator::GetServices(file);
|
| + if (code.size() == 0) {
|
| + return true; // don't generate a file if there are no services
|
| }
|
|
|
| - ALWAYS_INLINE void unlock()
|
| - {
|
| - m_lock.store(false, std::memory_order_release);
|
| + // Get output file name.
|
| + grpc::string file_name;
|
| + if (!grpc_ruby_generator::ServicesFilename(file, &file_name)) {
|
| + return false;
|
| }
|
| -
|
| -private:
|
| - // This is called if the initial attempt to acquire the lock fails. It's
|
| - // slower, but has a much better scheduling and power consumption behavior.
|
| - WTF_EXPORT void lockSlow();
|
| -
|
| - std::atomic_int m_lock;
|
| + std::unique_ptr<grpc::protobuf::io::ZeroCopyOutputStream> output(
|
| + context->Open(file_name));
|
| + grpc::protobuf::io::CodedOutputStream coded_out(output.get());
|
| + coded_out.WriteRaw(code.data(), code.size());
|
| + return true;
|
| + }
|
| };
|
|
|
| -
|
| -} // namespace WTF
|
| -
|
| -using WTF::SpinLock;
|
| -
|
| -#endif // WTF_SpinLock_h
|
| +int main(int argc, char *argv[]) {
|
| + RubyGrpcGenerator generator;
|
| + return grpc::protobuf::compiler::PluginMain(argc, argv, &generator);
|
| +}
|
|
|